ColNameNode removed, a bit more powerfull inserts etc

BEWARE insert into t (i) values(1+1) WILL FAIL - it is not "1" "+" "1" but "1" "+1"
This commit is contained in:
2021-08-13 16:34:51 +02:00
parent ee0cbf64ff
commit 6921421a65
5 changed files with 44440 additions and 74 deletions

View File

@@ -25,7 +25,6 @@ namespace usql {
float_value,
string_value,
bool_value,
database_value,
logical_operator,
relational_operator,
arithmetical_operator,
@@ -40,7 +39,7 @@ namespace usql {
drop_table,
set,
show,
column_name,
database_value,
offset_limit,
column_order,
column_value,
@@ -55,11 +54,6 @@ namespace usql {
Node(const NodeType type) : node_type(type) {}
};
struct ColNameNode : Node {
std::string name;
ColNameNode(const std::string col_name) : Node(NodeType::column_name), name(col_name) {}
};
struct ColOrderNode : Node {
std::string col_name;
@@ -67,7 +61,7 @@ namespace usql {
bool ascending;
ColOrderNode(const std::string name, bool asc) : Node(NodeType::column_order), col_name(name), col_index(-1), ascending(asc) {}
ColOrderNode(int index, bool asc) : Node(NodeType::column_name), col_name(""), col_index(index), ascending(asc) {}
ColOrderNode(int index, bool asc) : Node(NodeType::database_value), col_name(""), col_index(index), ascending(asc) {}
};
@@ -85,7 +79,7 @@ namespace usql {
std::string name;
SelectColNode(std::unique_ptr<Node> column, std::string alias) :
Node(NodeType::column_name), value(std::move(column)), name(alias) {}
Node(NodeType::database_value), value(std::move(column)), name(alias) {}
};
struct ColDefNode : Node {
@@ -256,10 +250,10 @@ namespace usql {
struct InsertIntoTableNode : Node {
std::string table_name;
std::vector<ColNameNode> cols_names;
std::vector<DatabaseValueNode> cols_names;
std::vector<std::unique_ptr<Node>> cols_values;
InsertIntoTableNode(const std::string name, std::vector<ColNameNode> names, std::vector<std::unique_ptr<Node>> values) :
InsertIntoTableNode(const std::string name, std::vector<DatabaseValueNode> names, std::vector<std::unique_ptr<Node>> values) :
Node(NodeType::insert_into), table_name(name), cols_names(names), cols_values(std::move(values)) {}
};
@@ -285,11 +279,11 @@ namespace usql {
struct UpdateTableNode : Node {
std::string table_name;
std::vector<ColNameNode> cols_names;
std::vector<DatabaseValueNode> cols_names;
std::vector<std::unique_ptr<Node>> values;
std::unique_ptr<Node> where;
UpdateTableNode(std::string name, std::vector<ColNameNode> names, std::vector<std::unique_ptr<Node>> vals,
UpdateTableNode(std::string name, std::vector<DatabaseValueNode> names, std::vector<std::unique_ptr<Node>> vals,
std::unique_ptr<Node> where_clause) :
Node(NodeType::update_table), table_name(name), cols_names(names), values(std::move(vals)),
where(std::move(where_clause)) {}
@@ -369,7 +363,6 @@ namespace usql {
std::unique_ptr<Node> parse_expression();
std::unique_ptr<Node> parse_expression(std::unique_ptr<Node> left);
std::unique_ptr<Node> parse_operand_node();
std::unique_ptr<Node> parse_value();
RelationalOperatorType parse_relational_operator();
LogicalOperatorType parse_logical_operator();