select * added

This commit is contained in:
2021-08-08 01:29:10 +02:00
parent 15a065c2aa
commit 19585dda8c
5 changed files with 24 additions and 11 deletions

View File

@@ -1,6 +1,5 @@
### TODO
- support for *
- add support for set setting value
- command line interface
- date functions - now, add_date...

View File

@@ -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",

View File

@@ -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<ColNameNode>(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);
}

View File

@@ -82,7 +82,7 @@ namespace usql {
std::unique_ptr<Node> value;
std::string name;
SelectColNode(std::unique_ptr<Node> column, const std::string& alias) :
SelectColNode(std::unique_ptr<Node> column, std::string alias) :
Node(NodeType::column_name), value(std::move(column)), name(alias) {}
};

View File

@@ -149,6 +149,14 @@ std::unique_ptr<Table> 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<ColNameNode>(col.name)), col.name});
}
}
// create result table
std::vector<ColDefNode> result_tbl_col_defs{};