select * added
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
|
||||
### TODO
|
||||
- support for *
|
||||
- add support for set setting value
|
||||
- command line interface
|
||||
- date functions - now, add_date...
|
||||
|
||||
3
main.cpp
3
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",
|
||||
|
||||
21
parser.cpp
21
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<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);
|
||||
}
|
||||
|
||||
2
parser.h
2
parser.h
@@ -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) {}
|
||||
};
|
||||
|
||||
|
||||
8
usql.cpp
8
usql.cpp
@@ -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{};
|
||||
|
||||
Reference in New Issue
Block a user