From 19585dda8ce583c0d0e5530d4c93332d62f0afe4 Mon Sep 17 00:00:00 2001 From: VaclavT Date: Sun, 8 Aug 2021 01:29:10 +0200 Subject: [PATCH] select * added --- Readme.md | 1 - main.cpp | 3 +-- parser.cpp | 21 ++++++++++++++------- parser.h | 2 +- usql.cpp | 8 ++++++++ 5 files changed, 24 insertions(+), 11 deletions(-) diff --git a/Readme.md b/Readme.md index 2406075..d7bc3d5 100644 --- a/Readme.md +++ b/Readme.md @@ -1,6 +1,5 @@ ### TODO -- support for * - add support for set setting value - command line interface - date functions - now, add_date... diff --git a/main.cpp b/main.cpp index 3b53f2e..044b8e4 100644 --- a/main.cpp +++ b/main.cpp @@ -129,8 +129,7 @@ int main(int argc, char *argv[]) { // boolean datatype "create table ticker ( tablee varchar(3) not null, permaticker integer, ticker varchar(8) not null, name varchar(256) not null, exchange varchar(32), isdelisted boolean, category varchar(32), cusips varchar(256), siccode integer, sicsector varchar(256), sicindustry varchar(256), famasector varchar(256), famaindustry varchar(256), sector varchar(128), industry varchar(128), scalemarketcap varchar(64), scalerevenue varchar(64), relatedtickers varchar(128), currency varchar(3), location varchar(64), lastupdated date, firstadded date, firstpricedate date, lastpricedate date, firstquarter date, lastquarter date, secfilings varchar(256), companysite varchar(256))" "create table ticker ( tablee varchar(5) not null, permaticker integer, ticker varchar(10) not null, name varchar(256) not null, exchange varchar(32), isdelisted boolean, category varchar(32), cusips varchar(256), siccode integer, sicsector varchar(256), sicindustry varchar(256), famasector varchar(256), famaindustry varchar(256), sector varchar(128), industry varchar(128), scalemarketcap varchar(64), scalerevenue varchar(64), relatedtickers varchar(128), currency varchar(3), location varchar(64), lastupdated date, firstadded date, firstpricedate date, lastpricedate date, firstquarter date, lastquarter date, secfilings varchar(256), companysite varchar(256))", "load ticker from '/Users/vaclavt/Library/Mobile Documents/com~apple~CloudDocs/Development/usql/tickers.csv')", - "select permaticker, ticker, name from ticker where ticker = 'WFC'" -// "select * from ticker limit 5" + "select * from ticker where ticker = 'WFC' and tablee = 'SF1'" // "create table a (i integer not null, s varchar(64), f float null, d date null, b boolean)", // "insert into a (i, s, b) values(1, upper('one'), 'Y')", // "select i, s, b from a where i >=1 order by 1 desc offset 0 limit 1", diff --git a/parser.cpp b/parser.cpp index 8fcde06..5cd5f50 100644 --- a/parser.cpp +++ b/parser.cpp @@ -226,17 +226,24 @@ namespace usql { int i = 1; while (m_lexer.tokenType() != TokenType::keyword_from) { - auto column_value = parse_value(); - std::string column_alias; + if (m_lexer.tokenType()==TokenType::multiply) { + std::string name = m_lexer.consumeCurrentToken().token_string; + auto multiply_char = std::make_unique(name); - if (column_value->node_type == NodeType::column_name) { - column_alias = ((ColNameNode*) column_value.get())->name; + cols->push_back(SelectColNode{std::move(multiply_char), "*"}); } else { - column_alias = "c" + std::to_string(i); - i++; + auto column_value = parse_value(); + std::string column_alias; + + if (column_value->node_type == NodeType::column_name) { + column_alias = ((ColNameNode*) column_value.get())->name; + } else { + column_alias = "c" + std::to_string(i); + i++; + } + cols->push_back(SelectColNode{std::move(column_value), column_alias}); } - cols->push_back(SelectColNode{std::move(column_value), column_alias}); m_lexer.skipTokenOptional(TokenType::comma); } diff --git a/parser.h b/parser.h index 5222174..8c6dba0 100644 --- a/parser.h +++ b/parser.h @@ -82,7 +82,7 @@ namespace usql { std::unique_ptr value; std::string name; - SelectColNode(std::unique_ptr column, const std::string& alias) : + SelectColNode(std::unique_ptr column, std::string alias) : Node(NodeType::column_name), value(std::move(column)), name(alias) {} }; diff --git a/usql.cpp b/usql.cpp index 2757495..e0b6029 100644 --- a/usql.cpp +++ b/usql.cpp @@ -149,6 +149,14 @@ std::unique_ptr USql::execute_select(SelectFromTableNode &node) { // find source table Table *table = find_table(node.table_name); + // expand * + if (node.cols_names->size()==1 && node.cols_names->operator[](0).name == "*") { + node.cols_names->clear(); + for(auto col : table->m_col_defs) { + node.cols_names->push_back(SelectColNode{std::move(std::make_unique(col.name)), col.name}); + } + } + // create result table std::vector result_tbl_col_defs{};