small refactoring
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
#include <errno.h>
|
||||
#include <cerrno>
|
||||
|
||||
#include "exception.h"
|
||||
#include "csvreader.h"
|
||||
@@ -41,7 +41,7 @@ int CsvReader::parseCSV(const std::string &filename, std::vector<ColDefNode> &co
|
||||
size_t len = 0;
|
||||
|
||||
|
||||
int read_chars;
|
||||
long read_chars;
|
||||
while ((read_chars = getline(&line_str, &len, fp)) != -1) {
|
||||
if (skip_header && !header_skiped) {
|
||||
header_skiped = true;
|
||||
@@ -59,7 +59,7 @@ int CsvReader::parseCSV(const std::string &filename, std::vector<ColDefNode> &co
|
||||
if (*aChar == quote_character) {
|
||||
inQuote = !inQuote;
|
||||
} else if (*aChar == field_separator) {
|
||||
if (inQuote == true) {
|
||||
if (inQuote) {
|
||||
field += *aChar;
|
||||
} else {
|
||||
line.push_back(field);
|
||||
@@ -80,9 +80,6 @@ int CsvReader::parseCSV(const std::string &filename, std::vector<ColDefNode> &co
|
||||
|
||||
field.clear();
|
||||
line.clear();
|
||||
// DEBUG
|
||||
// if (row_cnt > 50000) break;
|
||||
//
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
@@ -109,17 +106,17 @@ int CsvReader::parseCSV(const std::string &filename, std::vector<ColDefNode> &co
|
||||
inQuote = !inQuote;
|
||||
} else if (*aChar == field_separator) {
|
||||
newLine = false;
|
||||
if (inQuote == true) {
|
||||
if (inQuote) {
|
||||
field += *aChar;
|
||||
} else {
|
||||
line.push_back(field);
|
||||
field.clear();
|
||||
}
|
||||
} else if (*aChar == line_separator || *aChar == line_separator2) {
|
||||
if (inQuote == true) {
|
||||
if (inQuote) {
|
||||
field += *aChar;
|
||||
} else {
|
||||
if (newLine == false) {
|
||||
if (!newLine) {
|
||||
line.push_back(field);
|
||||
if (header_skiped) {
|
||||
table.create_row_from_vector(cols_def, line);
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace usql {
|
||||
bool header_skiped;
|
||||
|
||||
public:
|
||||
CsvReader(bool skip_hdr = true, char field_sep = ',', char quote_ch = '"', char line_sep = '\r', char line_sep2 = '\n');
|
||||
explicit CsvReader(bool skip_hdr = true, char field_sep = ',', char quote_ch = '"', char line_sep = '\r', char line_sep2 = '\n');
|
||||
|
||||
int parseCSV2(const std::string &csvSource, std::vector<ColDefNode> &cols_def, Table& table);
|
||||
|
||||
|
||||
2
debug.h
2
debug.h
@@ -25,6 +25,8 @@ std::vector<std::string> k_debug_sql_commands {
|
||||
"insert into a (i, s) values(2, 'two')",
|
||||
"insert into a (i, s) values(2, 'second two')",
|
||||
"insert into a (i, s) values(3, 'three')",
|
||||
"insert into a (i, s) values(4, 'four')",
|
||||
"save a into '/tmp/a.csv'",
|
||||
"set 'USE_INDEXSCAN' = 'true'",
|
||||
// "select * from a where 1 = i",
|
||||
// "delete from a where i = 2 and s ='two'",
|
||||
|
||||
12
row.cpp
12
row.cpp
@@ -29,6 +29,18 @@ int ColStringValue::compare(ColValue &other) const {
|
||||
return other.isNull() ? 1 : m_string->compare(other.getStringValue()); // null goes to end
|
||||
}
|
||||
|
||||
std::string ColStringValue::getCsvStringValue() const {
|
||||
auto src_str = getStringValue();
|
||||
std::string toSearch{"\""}, replaceStr{"\\\""};
|
||||
|
||||
size_t pos = src_str.find(toSearch);
|
||||
while(pos != std::string::npos) {
|
||||
src_str.replace(pos, toSearch.size(), replaceStr);
|
||||
pos =src_str.find(toSearch, pos + replaceStr.size());
|
||||
}
|
||||
return src_str;
|
||||
}
|
||||
|
||||
int ColDateValue::compare(ColValue &other) const {
|
||||
long r = m_date - other.getIntegerValue();
|
||||
return other.isNull() ? 1 : r > 0 ? 1 : r == 0 ? 0 : -1;
|
||||
|
||||
6
row.h
6
row.h
@@ -88,11 +88,7 @@ struct ColStringValue : ColValue {
|
||||
long getIntegerValue() const override { return std::stoi(*m_string); };
|
||||
double getDoubleValue() const override { return std::stod(*m_string); };
|
||||
std::string getStringValue() const override { return *m_string; };
|
||||
std::string getCsvStringValue() const override {
|
||||
// TODO handle correctly CSV string
|
||||
// ?? return std::regex_replace(getStringValue(), std::regex( "\"" ), "\\\"" );
|
||||
return getStringValue();
|
||||
};
|
||||
std::string getCsvStringValue() const override;;
|
||||
long getDateValue() const override { return std::stoi(*m_string); };
|
||||
bool getBoolValue() const override { throw Exception("Not supported on ColStringValue"); };
|
||||
|
||||
|
||||
2
utils/cp_to_mlisp.sh
Normal file → Executable file
2
utils/cp_to_mlisp.sh
Normal file → Executable file
@@ -1,4 +1,4 @@
|
||||
|
||||
#!/usr/bin/env bash
|
||||
|
||||
cp \
|
||||
csvreader.h \
|
||||
|
||||
Reference in New Issue
Block a user