usql update
This commit is contained in:
parent
1e0506e6cd
commit
8e94a01d2d
|
|
@ -48,6 +48,7 @@ private:
|
|||
|
||||
static std::unique_ptr<Table> create_stmt_result_table(long code, const std::string &text, size_t affected_rows);
|
||||
static std::tuple<int, ColDefNode> get_column_definition(Table *table, SelectColNode *select_col_node, int col_order);
|
||||
static ColDefNode get_db_column_definition(Table *table, Node *node);
|
||||
static std::tuple<int, ColDefNode> get_node_definition(Table *table, Node *select_col_node, const std::string & col_name, int col_order);
|
||||
Table *find_table(const std::string &name);
|
||||
|
||||
|
|
|
|||
|
|
@ -148,11 +148,18 @@ std::tuple<int, ColDefNode> USql::get_column_definition(Table *table, SelectColN
|
|||
return get_node_definition(table, select_col_node->value.get(), select_col_node->name, col_order );
|
||||
}
|
||||
|
||||
ColDefNode USql::get_db_column_definition(Table *table, Node *node) {
|
||||
if (node->node_type == NodeType::database_value) {
|
||||
auto db_node = static_cast<DatabaseValueNode *>(node);
|
||||
return table->get_column_def(db_node->col_name);
|
||||
}
|
||||
|
||||
throw Exception("Undefined table node - get_db_column_definition");
|
||||
}
|
||||
|
||||
std::tuple<int, ColDefNode> USql::get_node_definition(Table *table, Node * node, const std::string & col_name, int col_order ) {
|
||||
if (node->node_type == NodeType::database_value) {
|
||||
auto dbval_node = static_cast<DatabaseValueNode *>(node);
|
||||
|
||||
ColDefNode src_col_def = table->get_column_def(dbval_node->col_name);
|
||||
ColDefNode src_col_def = get_db_column_definition(table, node);
|
||||
ColDefNode col_def = ColDefNode{col_name, src_col_def.type, col_order, src_col_def.length, src_col_def.null};
|
||||
return std::make_tuple(src_col_def.order, col_def);
|
||||
|
||||
|
|
@ -169,12 +176,19 @@ std::tuple<int, ColDefNode> USql::get_node_definition(Table *table, Node * node,
|
|||
ColDefNode col_def = ColDefNode{col_name, ColumnType::varchar_type, col_order, 10, true};
|
||||
return std::make_tuple(-1, col_def);
|
||||
} else if (func_node->function == "lower" || func_node->function == "upper") {
|
||||
// TODO get length
|
||||
// TODO get length, use get_db_column_definition
|
||||
ColDefNode col_def = ColDefNode{col_name, ColumnType::varchar_type, col_order, 256, true};
|
||||
return std::make_tuple(-1, col_def);
|
||||
} else if (func_node->function == "min" || func_node->function == "max") {
|
||||
// TODO get correct type and length
|
||||
ColDefNode col_def = ColDefNode{col_name, ColumnType::integer_type, col_order, 1, true};
|
||||
auto col_type= ColumnType::float_type;
|
||||
int col_len = 1;
|
||||
auto & v = func_node->params[0];
|
||||
if (v->node_type == NodeType::database_value) {
|
||||
ColDefNode src_col_def = get_db_column_definition(table, v.get());
|
||||
col_type = src_col_def.type;
|
||||
col_len = src_col_def.length;
|
||||
}
|
||||
ColDefNode col_def = ColDefNode{col_name, col_type, col_order, col_len, true};
|
||||
return std::make_tuple(-1, col_def);
|
||||
} else if (func_node->function == "count") {
|
||||
ColDefNode col_def = ColDefNode{col_name, ColumnType::integer_type, col_order, 1, true};
|
||||
|
|
|
|||
Loading…
Reference in New Issue