drop table added
This commit is contained in:
84
parser.cpp
84
parser.cpp
@@ -13,27 +13,22 @@ namespace usql {
|
||||
m_lexer.parse(code);
|
||||
// m_lexer.debugTokens();
|
||||
|
||||
if (m_lexer.tokenType() == TokenType::keyword_create && m_lexer.nextTokenType() == TokenType::keyword_table) {
|
||||
if (m_lexer.tokenType() == TokenType::keyword_create && m_lexer.nextTokenType() == TokenType::keyword_table)
|
||||
return parse_create_table();
|
||||
}
|
||||
if (m_lexer.tokenType() == TokenType::keyword_insert) {
|
||||
if (m_lexer.tokenType() == TokenType::keyword_insert)
|
||||
return parse_insert_into_table();
|
||||
}
|
||||
if (m_lexer.tokenType() == TokenType::keyword_select) {
|
||||
if (m_lexer.tokenType() == TokenType::keyword_select)
|
||||
return parse_select_from_table();
|
||||
}
|
||||
if (m_lexer.tokenType() == TokenType::keyword_delete) {
|
||||
if (m_lexer.tokenType() == TokenType::keyword_delete)
|
||||
return parse_delete_from_table();
|
||||
}
|
||||
if (m_lexer.tokenType() == TokenType::keyword_update) {
|
||||
if (m_lexer.tokenType() == TokenType::keyword_update)
|
||||
return parse_update_table();
|
||||
}
|
||||
if (m_lexer.tokenType() == TokenType::keyword_load) {
|
||||
if (m_lexer.tokenType() == TokenType::keyword_load)
|
||||
return parse_load_table();
|
||||
}
|
||||
if (m_lexer.tokenType() == TokenType::keyword_save) {
|
||||
if (m_lexer.tokenType() == TokenType::keyword_save)
|
||||
return parse_save_table();
|
||||
}
|
||||
if (m_lexer.tokenType() == TokenType::keyword_drop)
|
||||
return parse_drop_table();
|
||||
|
||||
std::cout << "ERROR, token:" << m_lexer.currentToken().token_string << std::endl;
|
||||
return std::make_unique<Node>(NodeType::error);
|
||||
@@ -110,7 +105,41 @@ namespace usql {
|
||||
}
|
||||
}
|
||||
|
||||
std::unique_ptr<Node> Parser::parse_load_table() {
|
||||
m_lexer.skipToken(TokenType::keyword_load);
|
||||
m_lexer.skipTokenOptional(TokenType::keyword_into);
|
||||
|
||||
std::string table_name = m_lexer.consumeCurrentToken().token_string;
|
||||
|
||||
m_lexer.skipTokenOptional(TokenType::keyword_from);
|
||||
|
||||
std::string file_name = m_lexer.consumeCurrentToken().token_string;
|
||||
|
||||
return std::make_unique<LoadIntoTableNode>(table_name, file_name);
|
||||
}
|
||||
|
||||
std::unique_ptr<Node> Parser::parse_save_table() {
|
||||
m_lexer.skipToken(TokenType::keyword_save);
|
||||
m_lexer.skipTokenOptional(TokenType::keyword_table);
|
||||
|
||||
std::string table_name = m_lexer.consumeCurrentToken().token_string;
|
||||
|
||||
m_lexer.skipTokenOptional(TokenType::keyword_into);
|
||||
|
||||
std::string file_name = m_lexer.consumeCurrentToken().token_string;
|
||||
|
||||
return std::make_unique<SaveTableNode>(table_name, file_name);
|
||||
}
|
||||
|
||||
std::unique_ptr<Node> Parser::parse_drop_table() {
|
||||
m_lexer.skipToken(TokenType::keyword_drop);
|
||||
m_lexer.skipTokenOptional(TokenType::keyword_table);
|
||||
|
||||
std::string table_name = m_lexer.consumeCurrentToken().token_string;
|
||||
|
||||
return std::make_unique<DropTableNode>(table_name);
|
||||
}
|
||||
|
||||
std::unique_ptr<Node> Parser::parse_insert_into_table() {
|
||||
std::vector<ColNameNode> column_names{};
|
||||
std::vector<std::unique_ptr<Node>> column_values{};
|
||||
@@ -261,33 +290,6 @@ std::unique_ptr<Node> Parser::parse_select_from_table() {
|
||||
return std::make_unique<UpdateTableNode>(table_name, cols_names, std::move(values), std::move(where_node));
|
||||
}
|
||||
|
||||
std::unique_ptr<Node> Parser::parse_load_table() {
|
||||
m_lexer.skipToken(TokenType::keyword_load);
|
||||
m_lexer.skipTokenOptional(TokenType::keyword_into);
|
||||
|
||||
std::string table_name = m_lexer.consumeCurrentToken().token_string;
|
||||
|
||||
m_lexer.skipTokenOptional(TokenType::keyword_from);
|
||||
|
||||
std::string file_name = m_lexer.consumeCurrentToken().token_string;
|
||||
|
||||
return std::make_unique<LoadIntoTableNode>(table_name, file_name);
|
||||
}
|
||||
|
||||
|
||||
std::unique_ptr<Node> Parser::parse_save_table() {
|
||||
m_lexer.skipToken(TokenType::keyword_save);
|
||||
m_lexer.skipTokenOptional(TokenType::keyword_table);
|
||||
|
||||
std::string table_name = m_lexer.consumeCurrentToken().token_string;
|
||||
|
||||
m_lexer.skipTokenOptional(TokenType::keyword_into);
|
||||
|
||||
std::string file_name = m_lexer.consumeCurrentToken().token_string;
|
||||
|
||||
return std::make_unique<SaveTableNode>(table_name, file_name);
|
||||
}
|
||||
|
||||
std::unique_ptr<Node> Parser::parse_where_clause() {
|
||||
// TODO add support for multiple filters
|
||||
// TODO add support for parenthesis
|
||||
|
||||
Reference in New Issue
Block a user