usql update

This commit is contained in:
2021-07-27 18:07:20 +02:00
parent 513c8da358
commit 281f7d8700
14 changed files with 290 additions and 169 deletions

View File

@@ -1,7 +1,7 @@
#pragma once
#include "lexer.h"
#include <stdexcept>
#include "exception.h"
#include <string>
#include <vector>
@@ -16,6 +16,7 @@ namespace usql {
enum class NodeType {
true_node,
null_value,
int_value,
float_value,
string_value,
@@ -31,6 +32,7 @@ namespace usql {
update_table,
load_table,
save_table,
drop_table,
column_name,
column_value,
function,
@@ -93,6 +95,17 @@ namespace usql {
virtual ~ValueNode() {};
};
struct NullValueNode : ValueNode {
NullValueNode() : ValueNode(NodeType::null_value) {}
bool isNull() override { return true; }
long getIntValue() override { throw Exception("not supported on null value"); };
double getDoubleValue() override { throw Exception("not supported on null value"); };
std::string getStringValue() override { throw Exception("not supported on null value"); };
};
struct IntValueNode : ValueNode {
long value;
@@ -244,6 +257,12 @@ namespace usql {
Node(NodeType::save_table), table_name(name), filename(file) {}
};
struct DropTableNode : Node {
std::string table_name;
DropTableNode(const std::string& name) : Node(NodeType::drop_table), table_name(name) {}
};
struct DeleteFromTableNode : Node {
std::string table_name;
std::unique_ptr<Node> where;
@@ -263,15 +282,18 @@ namespace usql {
private:
std::unique_ptr<Node> parse_create_table();
std::unique_ptr<Node> parse_load_table();
std::unique_ptr<Node> parse_save_table();
std::unique_ptr<Node> parse_drop_table();
std::unique_ptr<Node> parse_insert_into_table();
std::unique_ptr<Node> parse_value();
std::unique_ptr<Node> parse_select_from_table();
std::unique_ptr<Node> parse_delete_from_table();
std::unique_ptr<Node> parse_update_table();
std::unique_ptr<Node> parse_load_table();
std::unique_ptr<Node> parse_save_table();
std::unique_ptr<Node> parse_where_clause();
std::unique_ptr<Node> parse_operand_node();
std::unique_ptr<Node> parse_value();
RelationalOperatorType parse_relational_operator();
LogicalOperatorType parse_logical_operator();
ArithmeticalOperatorType parse_arithmetical_operator();