Compare commits
4 Commits
33f7cba493
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4faaf38986 | ||
|
|
17445d0bd6 | ||
|
|
525694fbae | ||
|
|
a063e14f3e |
@@ -1,10 +1,8 @@
|
|||||||
### WIP
|
### WIP
|
||||||
compare in row.cpp shoud take into account m_visible
|
|
||||||
|
|
||||||
### TODO
|
### TODO
|
||||||
- create local_install.sh
|
- create local_install.sh
|
||||||
|
|
||||||
|
|
||||||
- change float type keyword to double and in code functions too
|
- change float type keyword to double and in code functions too
|
||||||
|
|
||||||
- add functions:
|
- add functions:
|
||||||
|
|||||||
7
debug.h
7
debug.h
@@ -14,7 +14,9 @@ std::vector<std::string> k_debug_sql_commands {
|
|||||||
"set 'DATE_FORMAT' = '%Y-%m-%d'",
|
"set 'DATE_FORMAT' = '%Y-%m-%d'",
|
||||||
"create index sf1_symbol on sf1(symbol)",
|
"create index sf1_symbol on sf1(symbol)",
|
||||||
"load into sf1 '/srv/SHARADAR_SF1.csv'",
|
"load into sf1 '/srv/SHARADAR_SF1.csv'",
|
||||||
|
// "set 'USE_INDEXSCAN' = 'true'",
|
||||||
"select distinct dimension from sf1 where symbol = 'ALLY'",
|
"select distinct dimension from sf1 where symbol = 'ALLY'",
|
||||||
|
"select calendar_date, calendar_date, dimension from sf1 where symbol = 'ALLY' and dimension = 'MRQ' and calendar_date <= 1653487723 order by calendar_date desc limit 10",
|
||||||
// "set 'USE_INDEXSCAN' = 'false'",
|
// "set 'USE_INDEXSCAN' = 'false'",
|
||||||
// "select dimension, to_char(calendar_date, '%d.%m.%Y'), pp(eps, \"%.2f\"), pp(shareswadil), pp(revenue), pp(netinc), pp(cashneq), pp(assets), pp(debt), pp(ncfdebt), pp(roe*100), pp(intangibles), calendar_date from sf1 where symbol = 'MU' and dimension = 'ARQ' order by dimension, calendar_date desc limit 5",
|
// "select dimension, to_char(calendar_date, '%d.%m.%Y'), pp(eps, \"%.2f\"), pp(shareswadil), pp(revenue), pp(netinc), pp(cashneq), pp(assets), pp(debt), pp(ncfdebt), pp(roe*100), pp(intangibles), calendar_date from sf1 where symbol = 'MU' and dimension = 'ARQ' order by dimension, calendar_date desc limit 5",
|
||||||
// "set 'USE_INDEXSCAN' = 'true'",
|
// "set 'USE_INDEXSCAN' = 'true'",
|
||||||
@@ -54,7 +56,8 @@ std::vector<std::string> k_debug_sql_commands {
|
|||||||
// "select max(to_char(datetime, '%Y%m%d')) from d",
|
// "select max(to_char(datetime, '%Y%m%d')) from d",
|
||||||
// "select max(to_int(to_float(to_char(datetime, '%Y%m%d')))) from d",
|
// "select max(to_int(to_float(to_char(datetime, '%Y%m%d')))) from d",
|
||||||
|
|
||||||
"select * from usql_tables",
|
// "select * from usql_tables",
|
||||||
// "select * from usql_columns"
|
// "select * from usql_columns",
|
||||||
|
// "select * from usql_indexes",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ TokenType Lexer::type(const std::string &token) {
|
|||||||
if (token == "not") return TokenType::keyword_not;
|
if (token == "not") return TokenType::keyword_not;
|
||||||
if (token == "null") return TokenType::keyword_null;
|
if (token == "null") return TokenType::keyword_null;
|
||||||
if (token == "integer") return TokenType::keyword_integer;
|
if (token == "integer") return TokenType::keyword_integer;
|
||||||
if (token == "float") return TokenType::keyword_float;
|
if (token == "float" || token == "double") return TokenType::keyword_float;
|
||||||
if (token == "varchar") return TokenType::keyword_varchar;
|
if (token == "varchar") return TokenType::keyword_varchar;
|
||||||
if (token == "date") return TokenType::keyword_date;
|
if (token == "date") return TokenType::keyword_date;
|
||||||
if (token == "boolean") return TokenType::keyword_bool;
|
if (token == "boolean") return TokenType::keyword_bool;
|
||||||
|
|||||||
3
row.cpp
3
row.cpp
@@ -157,9 +157,6 @@ void Row::setColumnValue(ColDefNode *col_def, ValueNode *col_value) {
|
|||||||
|
|
||||||
int Row::compare(const Row &other) const {
|
int Row::compare(const Row &other) const {
|
||||||
for (size_t ci = 0; ci < m_columns.size(); ci++) {
|
for (size_t ci = 0; ci < m_columns.size(); ci++) {
|
||||||
// CRASHES HERE
|
|
||||||
// auto a = this->operator[](ci).getStringValue();
|
|
||||||
// auto b = other[ci].getStringValue();
|
|
||||||
int cmp = this->operator[](ci).compare(other[ci]);
|
int cmp = this->operator[](ci).compare(other[ci]);
|
||||||
if (cmp != 0) return cmp;
|
if (cmp != 0) return cmp;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ std::vector<std::pair<std::string, std::string>> Settings::m_settings =
|
|||||||
std::make_pair("BOOL_TRUE_LITERAL", "Y"),
|
std::make_pair("BOOL_TRUE_LITERAL", "Y"),
|
||||||
std::make_pair("BOOL_FALSE_LITERAL", "N"),
|
std::make_pair("BOOL_FALSE_LITERAL", "N"),
|
||||||
std::make_pair("DOUBLE_FORMAT", "%.2f"),
|
std::make_pair("DOUBLE_FORMAT", "%.2f"),
|
||||||
std::make_pair("USE_INDEXSCAN", "N"),
|
std::make_pair("USE_INDEXSCAN", "Y"),
|
||||||
std::make_pair("MAX_PARALLELISM", "1") }; // values "AUTO" or number of workers; when number negative means std::thread::hardware_concurrency() - number
|
std::make_pair("MAX_PARALLELISM", "1") }; // values "AUTO" or number of workers; when number negative means std::thread::hardware_concurrency() - number
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
3
usql.cpp
3
usql.cpp
@@ -11,7 +11,8 @@ USql::USql() {
|
|||||||
|
|
||||||
std::vector<std::string> k_debug_sql_commands {
|
std::vector<std::string> k_debug_sql_commands {
|
||||||
"create table usql_tables(name varchar(32) not null, modified boolean not null)",
|
"create table usql_tables(name varchar(32) not null, modified boolean not null)",
|
||||||
"create table usql_columns(table_name varchar(32) not null, column_name varchar(32) not null, column_type varchar(16) not null, column_length integer not null, nullable boolean not null, column_order integer not null)"
|
"create table usql_columns(table_name varchar(32) not null, column_name varchar(32) not null, column_type varchar(16) not null, column_length integer not null, nullable boolean not null, column_order integer not null)",
|
||||||
|
"create table usql_indexes(index_name varchar(32) not null, table_name varchar(32), column_name varchar(32) not null)"
|
||||||
};
|
};
|
||||||
|
|
||||||
// create cataloque tables
|
// create cataloque tables
|
||||||
|
|||||||
1
usql.h
1
usql.h
@@ -22,6 +22,7 @@ private:
|
|||||||
std::unique_ptr<Table> execute_create_table(const CreateTableNode &node);
|
std::unique_ptr<Table> execute_create_table(const CreateTableNode &node);
|
||||||
bool execute_create_table_sys_catalogue(const CreateTableNode &node);
|
bool execute_create_table_sys_catalogue(const CreateTableNode &node);
|
||||||
std::unique_ptr<Table> execute_create_index(const CreateIndexNode &node);
|
std::unique_ptr<Table> execute_create_index(const CreateIndexNode &node);
|
||||||
|
bool execute_create_index_sys_catalogue(const CreateIndexNode &node);
|
||||||
std::unique_ptr<Table> execute_create_table_as_table(const CreateTableAsSelectNode &node);
|
std::unique_ptr<Table> execute_create_table_as_table(const CreateTableAsSelectNode &node);
|
||||||
std::unique_ptr<Table> execute_load(const LoadIntoTableNode &node);
|
std::unique_ptr<Table> execute_load(const LoadIntoTableNode &node);
|
||||||
std::unique_ptr<Table> execute_save(const SaveTableNode &node);
|
std::unique_ptr<Table> execute_save(const SaveTableNode &node);
|
||||||
|
|||||||
16
usql_ddl.cpp
16
usql_ddl.cpp
@@ -8,7 +8,6 @@
|
|||||||
namespace usql {
|
namespace usql {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
std::unique_ptr<Table> USql::execute_create_table(const CreateTableNode &node) {
|
std::unique_ptr<Table> USql::execute_create_table(const CreateTableNode &node) {
|
||||||
check_table_not_exists(node.table_name);
|
check_table_not_exists(node.table_name);
|
||||||
|
|
||||||
@@ -56,10 +55,25 @@ std::unique_ptr<Table> USql::execute_create_index(const CreateIndexNode &node) {
|
|||||||
|
|
||||||
table_def->index_rows(node.index_name);
|
table_def->index_rows(node.index_name);
|
||||||
|
|
||||||
|
execute_create_index_sys_catalogue(node);
|
||||||
|
|
||||||
return create_stmt_result_table(0, "index created", 0);
|
return create_stmt_result_table(0, "index created", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool USql::execute_create_index_sys_catalogue(const CreateIndexNode &node) {
|
||||||
|
std::string i {"insert into usql_indexes(index_name, table_name, column_name) values("};
|
||||||
|
i += "'" + node.index_name + "', ";
|
||||||
|
i += "'" + node.table_name + "', ";
|
||||||
|
i += "'" + node.column_name + "')";
|
||||||
|
|
||||||
|
auto r = execute(i);
|
||||||
|
// r->print();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
std::unique_ptr<Table> USql::execute_create_table_as_table(const CreateTableAsSelectNode &node) {
|
std::unique_ptr<Table> USql::execute_create_table_as_table(const CreateTableAsSelectNode &node) {
|
||||||
check_table_not_exists(node.table_name);
|
check_table_not_exists(node.table_name);
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ std::pair<bool, std::vector<rowid_t>> USql::look_for_usable_index(const Node *wh
|
|||||||
if (used_index != nullptr) {
|
if (used_index != nullptr) {
|
||||||
std::vector<rowid_t> rowids = used_index->search((ValueNode *)ron->right.get());
|
std::vector<rowid_t> rowids = used_index->search((ValueNode *)ron->right.get());
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
std::cout << "using index " << table->m_name << "(" << used_index->get_column_name() << "), " << rowids.size() << "/" << table->rows_count() << std::endl;
|
std::cerr << "using index " << table->m_name << "(" << used_index->get_column_name() << "), " << rowids.size() << "/" << table->rows_count() << std::endl;
|
||||||
#endif
|
#endif
|
||||||
return std::make_pair(true, rowids);
|
return std::make_pair(true, rowids);
|
||||||
}
|
}
|
||||||
@@ -155,8 +155,7 @@ void USql::setup_order_columns(std::vector<ColOrderNode> &node, Table *table) {
|
|||||||
void USql::execute_distinct(SelectFromTableNode &node, Table *result) {
|
void USql::execute_distinct(SelectFromTableNode &node, Table *result) {
|
||||||
if (!node.distinct) return;
|
if (!node.distinct) return;
|
||||||
|
|
||||||
auto compare_rows = [](const Row &a, const Row &b) { return a.compare(b) >= 0; };
|
std::sort(result->m_rows.begin(), result->m_rows.end(), [](const Row &a, const Row &b) { return a.compare(b) > 0; });
|
||||||
std::sort(result->m_rows.begin(), result->m_rows.end(), compare_rows);
|
|
||||||
|
|
||||||
result->m_rows.erase(std::unique(result->m_rows.begin(), result->m_rows.end()), result->m_rows.end());
|
result->m_rows.erase(std::unique(result->m_rows.begin(), result->m_rows.end()), result->m_rows.end());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user