duckdb 0.7.2-dev3515.0 → 0.7.2-dev3666.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/configure.py +2 -0
- package/package.json +1 -1
- package/src/database.cpp +1 -0
- package/src/duckdb/extension/json/buffered_json_reader.cpp +56 -17
- package/src/duckdb/extension/json/include/buffered_json_reader.hpp +56 -31
- package/src/duckdb/extension/json/include/json_common.hpp +5 -4
- package/src/duckdb/extension/json/include/json_executors.hpp +13 -18
- package/src/duckdb/extension/json/include/json_functions.hpp +3 -0
- package/src/duckdb/extension/json/include/json_scan.hpp +106 -153
- package/src/duckdb/extension/json/include/json_transform.hpp +2 -2
- package/src/duckdb/extension/json/json_common.cpp +1 -1
- package/src/duckdb/extension/json/json_functions/copy_json.cpp +94 -38
- package/src/duckdb/extension/json/json_functions/json_contains.cpp +7 -8
- package/src/duckdb/extension/json/json_functions/json_create.cpp +7 -7
- package/src/duckdb/extension/json/json_functions/json_merge_patch.cpp +4 -4
- package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +4 -4
- package/src/duckdb/extension/json/json_functions/json_structure.cpp +7 -5
- package/src/duckdb/extension/json/json_functions/json_transform.cpp +10 -8
- package/src/duckdb/extension/json/json_functions/json_valid.cpp +1 -1
- package/src/duckdb/extension/json/json_functions/read_json.cpp +167 -169
- package/src/duckdb/extension/json/json_functions/read_json_objects.cpp +37 -16
- package/src/duckdb/extension/json/json_functions.cpp +11 -4
- package/src/duckdb/extension/json/json_scan.cpp +593 -374
- package/src/duckdb/extension/parquet/parquet-extension.cpp +5 -0
- package/src/duckdb/src/catalog/catalog_entry/macro_catalog_entry.cpp +42 -0
- package/src/duckdb/src/catalog/catalog_search_path.cpp +5 -0
- package/src/duckdb/src/catalog/catalog_set.cpp +1 -1
- package/src/duckdb/src/common/constants.cpp +1 -0
- package/src/duckdb/src/common/file_system.cpp +26 -6
- package/src/duckdb/src/common/local_file_system.cpp +0 -13
- package/src/duckdb/src/common/types/vector.cpp +3 -3
- package/src/duckdb/src/common/types/vector_buffer.cpp +11 -3
- package/src/duckdb/src/common/types/vector_cache.cpp +5 -5
- package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +12 -6
- package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +10 -0
- package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +2 -2
- package/src/duckdb/src/function/macro_function.cpp +43 -0
- package/src/duckdb/src/function/pragma/pragma_queries.cpp +5 -3
- package/src/duckdb/src/function/scalar/strftime_format.cpp +1 -0
- package/src/duckdb/src/function/scalar_macro_function.cpp +10 -0
- package/src/duckdb/src/function/table/copy_csv.cpp +68 -18
- package/src/duckdb/src/function/table/read_csv.cpp +30 -3
- package/src/duckdb/src/function/table/version/pragma_version.cpp +8 -2
- package/src/duckdb/src/function/table_macro_function.cpp +10 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/column_dependency_manager.hpp +1 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/macro_catalog_entry.hpp +3 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/scalar_macro_catalog_entry.hpp +0 -6
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_macro_catalog_entry.hpp +0 -6
- package/src/duckdb/src/include/duckdb/catalog/catalog_search_path.hpp +1 -1
- package/src/duckdb/src/include/duckdb/catalog/similar_catalog_entry.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/constants.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/exception.hpp +3 -3
- package/src/duckdb/src/include/duckdb/common/field_writer.hpp +3 -3
- package/src/duckdb/src/include/duckdb/common/file_system.hpp +5 -0
- package/src/duckdb/src/include/duckdb/common/http_state.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/hugeint.hpp +6 -6
- package/src/duckdb/src/include/duckdb/common/limits.hpp +46 -46
- package/src/duckdb/src/include/duckdb/common/operator/cast_operators.hpp +8 -8
- package/src/duckdb/src/include/duckdb/common/operator/comparison_operators.hpp +6 -6
- package/src/duckdb/src/include/duckdb/common/operator/convert_to_string.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/operator/decimal_cast_operators.hpp +2 -4
- package/src/duckdb/src/include/duckdb/common/operator/string_cast.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/operator/subtract.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/preserved_error.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/re2_regex.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/string_util.hpp +7 -7
- package/src/duckdb/src/include/duckdb/common/types/chunk_collection.hpp +10 -10
- package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection.hpp +12 -12
- package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection_iterators.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/types/value.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +12 -2
- package/src/duckdb/src/include/duckdb/common/types.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/winapi.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/expression_executor_state.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +9 -5
- package/src/duckdb/src/include/duckdb/execution/operator/schema/physical_create_type.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +10 -14
- package/src/duckdb/src/include/duckdb/function/macro_function.hpp +7 -1
- package/src/duckdb/src/include/duckdb/function/scalar/strftime_format.hpp +3 -4
- package/src/duckdb/src/include/duckdb/function/scalar_macro_function.hpp +7 -2
- package/src/duckdb/src/include/duckdb/function/table_function.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/table_macro_function.hpp +5 -0
- package/src/duckdb/src/include/duckdb/function/udf_function.hpp +56 -50
- package/src/duckdb/src/include/duckdb/main/appender.hpp +2 -2
- package/src/duckdb/src/include/duckdb/main/client_context.hpp +2 -2
- package/src/duckdb/src/include/duckdb/main/client_data.hpp +3 -1
- package/src/duckdb/src/include/duckdb/main/connection.hpp +8 -9
- package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +1 -0
- package/src/duckdb/src/include/duckdb/main/query_result.hpp +3 -3
- package/src/duckdb/src/include/duckdb/main/relation.hpp +6 -7
- package/src/duckdb/src/include/duckdb/optimizer/optimizer_extension.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/column_list.hpp +7 -7
- package/src/duckdb/src/include/duckdb/parser/parsed_data/attach_info.hpp +4 -7
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_macro_info.hpp +8 -12
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_sequence_info.hpp +6 -20
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_type_info.hpp +6 -18
- package/src/duckdb/src/include/duckdb/parser/parsed_data/detach_info.hpp +4 -8
- package/src/duckdb/src/include/duckdb/parser/parsed_data/drop_info.hpp +4 -38
- package/src/duckdb/src/include/duckdb/parser/parsed_data/transaction_info.hpp +5 -2
- package/src/duckdb/src/include/duckdb/parser/parsed_data/vacuum_info.hpp +10 -10
- package/src/duckdb/src/include/duckdb/parser/parser_extension.hpp +2 -2
- package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/operator_extension.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/storage_extension.hpp +2 -2
- package/src/duckdb/src/parser/parsed_data/attach_info.cpp +42 -0
- package/src/duckdb/src/parser/parsed_data/create_index_info.cpp +0 -7
- package/src/duckdb/src/parser/parsed_data/create_info.cpp +19 -8
- package/src/duckdb/src/parser/parsed_data/create_macro_info.cpp +46 -0
- package/src/duckdb/src/parser/parsed_data/create_sequence_info.cpp +56 -0
- package/src/duckdb/src/parser/parsed_data/create_type_info.cpp +47 -0
- package/src/duckdb/src/parser/parsed_data/detach_info.cpp +34 -0
- package/src/duckdb/src/parser/parsed_data/drop_info.cpp +46 -0
- package/src/duckdb/src/parser/parsed_data/transaction_info.cpp +24 -0
- package/src/duckdb/src/parser/parsed_data/vacuum_info.cpp +37 -0
- package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +27 -9
- package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +9 -4
- package/src/duckdb/src/planner/binder/statement/bind_create.cpp +2 -1
- package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +1 -0
- package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +1 -1
- package/src/duckdb/src/planner/logical_operator.cpp +1 -2
- package/src/duckdb/src/planner/operator/logical_create_index.cpp +16 -25
- package/src/duckdb/src/planner/operator/logical_insert.cpp +30 -0
- package/src/duckdb/src/planner/operator/logical_simple.cpp +33 -5
- package/src/duckdb/src/planner/parsed_data/bound_create_table_info.cpp +6 -16
- package/src/duckdb/src/planner/planner.cpp +4 -13
- package/src/duckdb/src/storage/checkpoint_manager.cpp +12 -6
- package/src/duckdb/src/storage/single_file_block_manager.cpp +0 -4
- package/src/duckdb/src/storage/storage_info.cpp +1 -1
- package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +5735 -5773
- package/src/duckdb/ub_src_catalog_catalog_entry.cpp +1 -1
- package/src/duckdb/ub_src_parser_parsed_data.cpp +16 -0
- package/src/duckdb/src/catalog/catalog_entry/scalar_macro_catalog_entry.cpp +0 -104
@@ -8,6 +8,15 @@
|
|
8
8
|
|
9
9
|
namespace duckdb {
|
10
10
|
|
11
|
+
string GetColumnsStringValue(ParsedExpression &expr) {
|
12
|
+
if (expr.type == ExpressionType::COLUMN_REF) {
|
13
|
+
auto &colref = expr.Cast<ColumnRefExpression>();
|
14
|
+
return colref.GetColumnName();
|
15
|
+
} else {
|
16
|
+
return expr.ToString();
|
17
|
+
}
|
18
|
+
}
|
19
|
+
|
11
20
|
bool Binder::FindStarExpression(unique_ptr<ParsedExpression> &expr, StarExpression **star, bool is_root,
|
12
21
|
bool in_columns) {
|
13
22
|
bool has_star = false;
|
@@ -33,7 +42,7 @@ bool Binder::FindStarExpression(unique_ptr<ParsedExpression> &expr, StarExpressi
|
|
33
42
|
vector<Value> values;
|
34
43
|
values.reserve(star_list.size());
|
35
44
|
for (auto &expr : star_list) {
|
36
|
-
values.emplace_back(expr
|
45
|
+
values.emplace_back(GetColumnsStringValue(*expr));
|
37
46
|
}
|
38
47
|
D_ASSERT(!values.empty());
|
39
48
|
|
@@ -139,17 +148,26 @@ void Binder::ExpandStarExpression(unique_ptr<ParsedExpression> expr,
|
|
139
148
|
}
|
140
149
|
auto &children = ListValue::GetChildren(val);
|
141
150
|
vector<unique_ptr<ParsedExpression>> new_list;
|
151
|
+
// scan the list for all selected columns and construct a lookup table
|
152
|
+
case_insensitive_map_t<bool> selected_set;
|
142
153
|
for (auto &child : children) {
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
154
|
+
selected_set.insert(make_pair(StringValue::Get(child), false));
|
155
|
+
}
|
156
|
+
// now check the list of all possible expressions and select which ones make it in
|
157
|
+
for (auto &expr : star_list) {
|
158
|
+
auto str = GetColumnsStringValue(*expr);
|
159
|
+
auto entry = selected_set.find(str);
|
160
|
+
if (entry != selected_set.end()) {
|
161
|
+
new_list.push_back(std::move(expr));
|
162
|
+
entry->second = true;
|
147
163
|
}
|
148
|
-
|
149
|
-
|
164
|
+
}
|
165
|
+
// check if all expressions found a match
|
166
|
+
for (auto &entry : selected_set) {
|
167
|
+
if (!entry.second) {
|
168
|
+
throw BinderException("Column \"%s\" was selected but was not found in the FROM clause",
|
169
|
+
entry.first);
|
150
170
|
}
|
151
|
-
names.push_back(qname.name);
|
152
|
-
new_list.push_back(make_uniq<ColumnRefExpression>(std::move(names)));
|
153
171
|
}
|
154
172
|
star_list = std::move(new_list);
|
155
173
|
} else {
|
@@ -129,10 +129,15 @@ BoundStatement Binder::BindCopyTo(CopyStatement &stmt) {
|
|
129
129
|
if (per_thread_output && !partition_cols.empty()) {
|
130
130
|
throw NotImplementedException("Can't combine PER_THREAD_OUTPUT and PARTITION_BY for COPY");
|
131
131
|
}
|
132
|
-
bool
|
133
|
-
|
134
|
-
|
135
|
-
|
132
|
+
bool is_remote_file = config.file_system->IsRemoteFile(stmt.info->file_path);
|
133
|
+
if (is_remote_file) {
|
134
|
+
use_tmp_file = false;
|
135
|
+
} else {
|
136
|
+
bool is_file_and_exists = config.file_system->FileExists(stmt.info->file_path);
|
137
|
+
bool is_stdout = stmt.info->file_path == "/dev/stdout";
|
138
|
+
if (!user_set_use_tmp_file) {
|
139
|
+
use_tmp_file = is_file_and_exists && !per_thread_output && partition_cols.empty() && !is_stdout;
|
140
|
+
}
|
136
141
|
}
|
137
142
|
|
138
143
|
auto unique_column_names = GetUniqueNames(select_node.names);
|
@@ -455,7 +455,7 @@ static bool AnyConstraintReferencesGeneratedColumn(CreateTableInfo &table_info)
|
|
455
455
|
unique_ptr<LogicalOperator> DuckCatalog::BindCreateIndex(Binder &binder, CreateStatement &stmt,
|
456
456
|
TableCatalogEntry &table, unique_ptr<LogicalOperator> plan) {
|
457
457
|
D_ASSERT(plan->type == LogicalOperatorType::LOGICAL_GET);
|
458
|
-
auto &base =
|
458
|
+
auto &base = stmt.info->Cast<CreateIndexInfo>();
|
459
459
|
|
460
460
|
auto &get = plan->Cast<LogicalGet>();
|
461
461
|
// bind the index expressions
|
@@ -614,6 +614,7 @@ BoundStatement Binder::Bind(CreateStatement &stmt) {
|
|
614
614
|
// CREATE TYPE mood AS ENUM (SELECT 'happy')
|
615
615
|
auto query_obj = Bind(*create_type_info.query);
|
616
616
|
auto query = std::move(query_obj.plan);
|
617
|
+
create_type_info.query.reset();
|
617
618
|
|
618
619
|
auto &sql_types = query_obj.types;
|
619
620
|
if (sql_types.size() != 1) {
|
@@ -256,6 +256,7 @@ unique_ptr<BoundCreateTableInfo> Binder::BindCreateTableInfo(unique_ptr<CreateIn
|
|
256
256
|
if (base.query) {
|
257
257
|
// construct the result object
|
258
258
|
auto query_obj = Bind(*base.query);
|
259
|
+
base.query.reset();
|
259
260
|
result->query = std::move(query_obj.plan);
|
260
261
|
|
261
262
|
// construct the set of columns based on the names and types of the query
|
@@ -94,7 +94,7 @@ unique_ptr<BoundTableRef> Binder::Bind(BaseTableRef &ref) {
|
|
94
94
|
for (auto &scan : config.replacement_scans) {
|
95
95
|
auto replacement_function = scan.function(context, table_name, scan.data.get());
|
96
96
|
if (replacement_function) {
|
97
|
-
replacement_function->alias = ref.alias.empty() ?
|
97
|
+
replacement_function->alias = ref.alias.empty() ? replacement_function->alias : ref.alias;
|
98
98
|
if (replacement_function->type == TableReferenceType::TABLE_FUNCTION) {
|
99
99
|
auto &table_function = replacement_function->Cast<TableFunctionRef>();
|
100
100
|
table_function.column_name_alias = ref.column_name_alias;
|
@@ -344,10 +344,9 @@ unique_ptr<LogicalOperator> LogicalOperator::Deserialize(Deserializer &deseriali
|
|
344
344
|
case LogicalOperatorType::LOGICAL_ATTACH:
|
345
345
|
case LogicalOperatorType::LOGICAL_TRANSACTION:
|
346
346
|
case LogicalOperatorType::LOGICAL_DROP:
|
347
|
+
case LogicalOperatorType::LOGICAL_DETACH:
|
347
348
|
result = LogicalSimple::Deserialize(state, reader);
|
348
349
|
break;
|
349
|
-
case LogicalOperatorType::LOGICAL_DETACH:
|
350
|
-
throw SerializationException("Logical Detach does not support serialization");
|
351
350
|
case LogicalOperatorType::LOGICAL_EXTENSION_OPERATOR:
|
352
351
|
result = LogicalExtensionOperator::Deserialize(state, reader);
|
353
352
|
break;
|
@@ -7,43 +7,34 @@
|
|
7
7
|
namespace duckdb {
|
8
8
|
|
9
9
|
void LogicalCreateIndex::Serialize(FieldWriter &writer) const {
|
10
|
-
|
11
10
|
writer.WriteOptional(info);
|
12
|
-
|
11
|
+
writer.WriteString(table.catalog.GetName());
|
12
|
+
writer.WriteString(table.schema.name);
|
13
|
+
writer.WriteString(table.name);
|
13
14
|
FunctionSerializer::SerializeBase<TableFunction>(writer, function, bind_data.get());
|
14
15
|
writer.WriteSerializableList(unbound_expressions);
|
15
|
-
|
16
|
-
writer.Finalize();
|
17
16
|
}
|
18
17
|
|
19
18
|
unique_ptr<LogicalOperator> LogicalCreateIndex::Deserialize(LogicalDeserializationState &state, FieldReader &reader) {
|
20
|
-
|
21
19
|
auto &context = state.gstate.context;
|
22
|
-
auto catalog_info = TableCatalogEntry::Deserialize(reader.GetSource(), context);
|
23
|
-
|
24
|
-
auto &table =
|
25
|
-
Catalog::GetEntry<TableCatalogEntry>(context, catalog_info->catalog, catalog_info->schema, catalog_info->table);
|
26
|
-
auto unbound_expressions = reader.ReadRequiredSerializableList<Expression>(state.gstate);
|
27
|
-
|
28
|
-
auto create_info = reader.ReadOptional<CreateInfo>(nullptr);
|
29
|
-
if (create_info->type != CatalogType::INDEX_ENTRY) {
|
30
|
-
throw InternalException("Unexpected type: '%s', expected '%s'", CatalogTypeToString(create_info->type),
|
31
|
-
CatalogTypeToString(CatalogType::INDEX_ENTRY));
|
32
|
-
}
|
33
|
-
|
34
|
-
CreateInfo *raw_create_info_ptr = create_info.release();
|
35
|
-
CreateIndexInfo *raw_create_index_info_ptr = static_cast<CreateIndexInfo *>(raw_create_info_ptr);
|
36
|
-
unique_ptr<CreateIndexInfo> uptr_create_index_info = unique_ptr<CreateIndexInfo> {raw_create_index_info_ptr};
|
37
|
-
auto info = unique_ptr<CreateIndexInfo> {static_cast<CreateIndexInfo *>(create_info.release())};
|
38
20
|
|
21
|
+
auto info = reader.ReadOptional<CreateInfo>(nullptr);
|
22
|
+
auto catalog = reader.ReadRequired<string>();
|
23
|
+
auto schema = reader.ReadRequired<string>();
|
24
|
+
auto table_name = reader.ReadRequired<string>();
|
39
25
|
unique_ptr<FunctionData> bind_data;
|
40
26
|
bool has_deserialize;
|
41
27
|
auto function = FunctionSerializer::DeserializeBaseInternal<TableFunction, TableFunctionCatalogEntry>(
|
42
28
|
reader, state.gstate, CatalogType::TABLE_FUNCTION_ENTRY, bind_data, has_deserialize);
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
29
|
+
auto unbound_expressions = reader.ReadRequiredSerializableList<Expression>(state.gstate);
|
30
|
+
if (info->type != CatalogType::INDEX_ENTRY) {
|
31
|
+
throw InternalException("Unexpected type: '%s', expected '%s'", CatalogTypeToString(info->type),
|
32
|
+
CatalogTypeToString(CatalogType::INDEX_ENTRY));
|
33
|
+
}
|
34
|
+
auto index_info = unique_ptr_cast<CreateInfo, CreateIndexInfo>(std::move(info));
|
35
|
+
auto &table = Catalog::GetEntry<TableCatalogEntry>(context, catalog, schema, table_name);
|
36
|
+
return make_uniq<LogicalCreateIndex>(std::move(bind_data), std::move(index_info), std::move(unbound_expressions),
|
37
|
+
table, std::move(function));
|
47
38
|
}
|
48
39
|
|
49
40
|
} // namespace duckdb
|
@@ -25,6 +25,16 @@ void LogicalInsert::Serialize(FieldWriter &writer) const {
|
|
25
25
|
writer.WriteField(return_chunk);
|
26
26
|
writer.WriteSerializableList(bound_defaults);
|
27
27
|
writer.WriteField(action_type);
|
28
|
+
writer.WriteRegularSerializableList(expected_set_types);
|
29
|
+
writer.WriteList<column_t>(on_conflict_filter);
|
30
|
+
writer.WriteOptional(on_conflict_condition);
|
31
|
+
writer.WriteOptional(do_update_condition);
|
32
|
+
writer.WriteIndexList(set_columns);
|
33
|
+
writer.WriteRegularSerializableList(set_types);
|
34
|
+
writer.WriteField(excluded_table_index);
|
35
|
+
writer.WriteList<column_t>(columns_to_fetch);
|
36
|
+
writer.WriteList<column_t>(source_columns);
|
37
|
+
writer.WriteSerializableList<Expression>(expressions);
|
28
38
|
}
|
29
39
|
|
30
40
|
unique_ptr<LogicalOperator> LogicalInsert::Deserialize(LogicalDeserializationState &state, FieldReader &reader) {
|
@@ -42,6 +52,16 @@ unique_ptr<LogicalOperator> LogicalInsert::Deserialize(LogicalDeserializationSta
|
|
42
52
|
auto return_chunk = reader.ReadRequired<bool>();
|
43
53
|
auto bound_defaults = reader.ReadRequiredSerializableList<Expression>(state.gstate);
|
44
54
|
auto action_type = reader.ReadRequired<OnConflictAction>();
|
55
|
+
auto expected_set_types = reader.ReadRequiredSerializableList<LogicalType, LogicalType>();
|
56
|
+
auto on_conflict_filter = reader.ReadRequiredSet<column_t, unordered_set<column_t>>();
|
57
|
+
auto on_conflict_condition = reader.ReadOptional<Expression>(nullptr, state.gstate);
|
58
|
+
auto do_update_condition = reader.ReadOptional<Expression>(nullptr, state.gstate);
|
59
|
+
auto set_columns = reader.ReadRequiredIndexList<PhysicalIndex>();
|
60
|
+
auto set_types = reader.ReadRequiredSerializableList<LogicalType, LogicalType>();
|
61
|
+
auto excluded_table_index = reader.ReadRequired<idx_t>();
|
62
|
+
auto columns_to_fetch = reader.ReadRequiredList<column_t>();
|
63
|
+
auto source_columns = reader.ReadRequiredList<column_t>();
|
64
|
+
auto expressions = reader.ReadRequiredSerializableList<Expression>(state.gstate);
|
45
65
|
|
46
66
|
auto &catalog = Catalog::GetCatalog(context, info->catalog);
|
47
67
|
|
@@ -54,6 +74,16 @@ unique_ptr<LogicalOperator> LogicalInsert::Deserialize(LogicalDeserializationSta
|
|
54
74
|
result->expected_types = expected_types;
|
55
75
|
result->bound_defaults = std::move(bound_defaults);
|
56
76
|
result->action_type = action_type;
|
77
|
+
result->expected_set_types = std::move(expected_set_types);
|
78
|
+
result->on_conflict_filter = std::move(on_conflict_filter);
|
79
|
+
result->on_conflict_condition = std::move(on_conflict_condition);
|
80
|
+
result->do_update_condition = std::move(do_update_condition);
|
81
|
+
result->set_columns = std::move(set_columns);
|
82
|
+
result->set_types = std::move(set_types);
|
83
|
+
result->excluded_table_index = excluded_table_index;
|
84
|
+
result->columns_to_fetch = std::move(columns_to_fetch);
|
85
|
+
result->source_columns = std::move(source_columns);
|
86
|
+
result->expressions = std::move(expressions);
|
57
87
|
return std::move(result);
|
58
88
|
}
|
59
89
|
|
@@ -1,7 +1,11 @@
|
|
1
1
|
#include "duckdb/planner/operator/logical_simple.hpp"
|
2
2
|
#include "duckdb/parser/parsed_data/alter_info.hpp"
|
3
|
+
#include "duckdb/parser/parsed_data/attach_info.hpp"
|
3
4
|
#include "duckdb/parser/parsed_data/drop_info.hpp"
|
4
5
|
#include "duckdb/parser/parsed_data/load_info.hpp"
|
6
|
+
#include "duckdb/parser/parsed_data/transaction_info.hpp"
|
7
|
+
#include "duckdb/parser/parsed_data/vacuum_info.hpp"
|
8
|
+
#include "duckdb/parser/parsed_data/detach_info.hpp"
|
5
9
|
|
6
10
|
namespace duckdb {
|
7
11
|
|
@@ -9,16 +13,28 @@ void LogicalSimple::Serialize(FieldWriter &writer) const {
|
|
9
13
|
writer.WriteField<LogicalOperatorType>(type);
|
10
14
|
switch (type) {
|
11
15
|
case LogicalOperatorType::LOGICAL_ALTER:
|
12
|
-
|
16
|
+
info->Cast<AlterInfo>().Serialize(writer.GetSerializer());
|
13
17
|
break;
|
14
18
|
case LogicalOperatorType::LOGICAL_DROP:
|
15
|
-
|
19
|
+
info->Cast<DropInfo>().Serialize(writer.GetSerializer());
|
16
20
|
break;
|
17
21
|
case LogicalOperatorType::LOGICAL_LOAD:
|
18
|
-
|
22
|
+
info->Cast<LoadInfo>().Serialize(writer.GetSerializer());
|
23
|
+
break;
|
24
|
+
case LogicalOperatorType::LOGICAL_VACUUM:
|
25
|
+
info->Cast<VacuumInfo>().Serialize(writer.GetSerializer());
|
26
|
+
break;
|
27
|
+
case LogicalOperatorType::LOGICAL_ATTACH:
|
28
|
+
info->Cast<AttachInfo>().Serialize(writer.GetSerializer());
|
29
|
+
break;
|
30
|
+
case LogicalOperatorType::LOGICAL_DETACH:
|
31
|
+
info->Cast<DetachInfo>().Serialize(writer.GetSerializer());
|
32
|
+
break;
|
33
|
+
case LogicalOperatorType::LOGICAL_TRANSACTION:
|
34
|
+
info->Cast<TransactionInfo>().Serialize(writer.GetSerializer());
|
19
35
|
break;
|
20
36
|
default:
|
21
|
-
throw
|
37
|
+
throw InternalException(LogicalOperatorToString(type));
|
22
38
|
}
|
23
39
|
}
|
24
40
|
|
@@ -35,8 +51,20 @@ unique_ptr<LogicalOperator> LogicalSimple::Deserialize(LogicalDeserializationSta
|
|
35
51
|
case LogicalOperatorType::LOGICAL_LOAD:
|
36
52
|
parse_info = LoadInfo::Deserialize(reader.GetSource());
|
37
53
|
break;
|
54
|
+
case LogicalOperatorType::LOGICAL_VACUUM:
|
55
|
+
parse_info = VacuumInfo::Deserialize(reader.GetSource());
|
56
|
+
break;
|
57
|
+
case LogicalOperatorType::LOGICAL_ATTACH:
|
58
|
+
parse_info = AttachInfo::Deserialize(reader.GetSource());
|
59
|
+
break;
|
60
|
+
case LogicalOperatorType::LOGICAL_DETACH:
|
61
|
+
parse_info = DetachInfo::Deserialize(reader.GetSource());
|
62
|
+
break;
|
63
|
+
case LogicalOperatorType::LOGICAL_TRANSACTION:
|
64
|
+
parse_info = TransactionInfo::Deserialize(reader.GetSource());
|
65
|
+
break;
|
38
66
|
default:
|
39
|
-
throw
|
67
|
+
throw InternalException(LogicalOperatorToString(state.type));
|
40
68
|
}
|
41
69
|
return make_uniq<LogicalSimple>(type, std::move(parse_info));
|
42
70
|
}
|
@@ -6,25 +6,15 @@
|
|
6
6
|
namespace duckdb {
|
7
7
|
void BoundCreateTableInfo::Serialize(Serializer &serializer) const {
|
8
8
|
serializer.WriteOptional(base);
|
9
|
-
serializer.WriteList(constraints);
|
10
|
-
serializer.WriteList(bound_constraints);
|
11
|
-
serializer.WriteList(bound_defaults);
|
12
|
-
serializer.WriteOptional(query);
|
13
9
|
}
|
14
10
|
|
15
11
|
unique_ptr<BoundCreateTableInfo> BoundCreateTableInfo::Deserialize(Deserializer &source,
|
16
12
|
PlanDeserializationState &state) {
|
17
|
-
auto
|
18
|
-
|
19
|
-
auto
|
20
|
-
auto
|
21
|
-
auto
|
22
|
-
|
23
|
-
auto result = make_uniq<BoundCreateTableInfo>(schema_catalog_entry, std::move(create_info_base));
|
24
|
-
source.ReadList<Constraint>(result->constraints);
|
25
|
-
source.ReadList<BoundConstraint>(result->bound_constraints);
|
26
|
-
source.ReadList<Expression>(result->bound_defaults, state);
|
27
|
-
result->query = source.ReadOptional<LogicalOperator>(state);
|
28
|
-
return result;
|
13
|
+
auto info = source.ReadOptional<CreateInfo>();
|
14
|
+
auto schema_name = info->schema;
|
15
|
+
auto catalog = info->catalog;
|
16
|
+
auto binder = Binder::CreateBinder(state.context);
|
17
|
+
auto bound_info = binder->BindCreateTableInfo(std::move(info));
|
18
|
+
return bound_info;
|
29
19
|
}
|
30
20
|
} // namespace duckdb
|
@@ -143,24 +143,11 @@ void Planner::CreatePlan(unique_ptr<SQLStatement> statement) {
|
|
143
143
|
|
144
144
|
static bool OperatorSupportsSerialization(LogicalOperator &op) {
|
145
145
|
switch (op.type) {
|
146
|
-
case LogicalOperatorType::LOGICAL_INSERT:
|
147
|
-
case LogicalOperatorType::LOGICAL_UPDATE:
|
148
|
-
case LogicalOperatorType::LOGICAL_DELETE:
|
149
146
|
case LogicalOperatorType::LOGICAL_PREPARE:
|
150
147
|
case LogicalOperatorType::LOGICAL_EXECUTE:
|
151
|
-
case LogicalOperatorType::LOGICAL_ALTER:
|
152
|
-
case LogicalOperatorType::LOGICAL_CREATE_TABLE:
|
153
|
-
case LogicalOperatorType::LOGICAL_CREATE_INDEX:
|
154
|
-
case LogicalOperatorType::LOGICAL_CREATE_SEQUENCE:
|
155
|
-
case LogicalOperatorType::LOGICAL_CREATE_VIEW:
|
156
|
-
case LogicalOperatorType::LOGICAL_CREATE_SCHEMA:
|
157
|
-
case LogicalOperatorType::LOGICAL_CREATE_MACRO:
|
158
148
|
case LogicalOperatorType::LOGICAL_PRAGMA:
|
159
|
-
case LogicalOperatorType::LOGICAL_TRANSACTION:
|
160
|
-
case LogicalOperatorType::LOGICAL_CREATE_TYPE:
|
161
149
|
case LogicalOperatorType::LOGICAL_EXPLAIN:
|
162
150
|
case LogicalOperatorType::LOGICAL_COPY_TO_FILE:
|
163
|
-
case LogicalOperatorType::LOGICAL_VACUUM:
|
164
151
|
// unsupported (for now)
|
165
152
|
return false;
|
166
153
|
default:
|
@@ -175,6 +162,10 @@ static bool OperatorSupportsSerialization(LogicalOperator &op) {
|
|
175
162
|
}
|
176
163
|
|
177
164
|
void Planner::VerifyPlan(ClientContext &context, unique_ptr<LogicalOperator> &op, bound_parameter_map_t *map) {
|
165
|
+
#ifdef DUCKDB_ALTERNATIVE_VERIFY
|
166
|
+
// if alternate verification is enabled we run the original operator
|
167
|
+
return;
|
168
|
+
#endif
|
178
169
|
if (!op || !ClientConfig::GetConfig(context).verify_serializer) {
|
179
170
|
return;
|
180
171
|
}
|
@@ -337,7 +337,6 @@ void CheckpointWriter::WriteIndex(IndexCatalogEntry &index_catalog) {
|
|
337
337
|
}
|
338
338
|
|
339
339
|
void CheckpointReader::ReadIndex(ClientContext &context, MetaBlockReader &reader) {
|
340
|
-
|
341
340
|
// deserialize the index metadata
|
342
341
|
auto info = IndexCatalogEntry::Deserialize(reader, context);
|
343
342
|
|
@@ -361,10 +360,17 @@ void CheckpointReader::ReadIndex(ClientContext &context, MetaBlockReader &reader
|
|
361
360
|
}
|
362
361
|
|
363
362
|
// bind the parsed expressions
|
363
|
+
// add the table to the bind context
|
364
364
|
auto binder = Binder::CreateBinder(context);
|
365
|
-
|
366
|
-
|
367
|
-
|
365
|
+
vector<LogicalType> column_types;
|
366
|
+
vector<string> column_names;
|
367
|
+
for (auto &col : table_catalog.GetColumns().Logical()) {
|
368
|
+
column_types.push_back(col.Type());
|
369
|
+
column_names.push_back(col.Name());
|
370
|
+
}
|
371
|
+
vector<column_t> column_ids;
|
372
|
+
binder->bind_context.AddBaseTable(0, info->table->table_name, column_names, column_types, column_ids,
|
373
|
+
&table_catalog);
|
368
374
|
IndexBinder idx_binder(*binder, context);
|
369
375
|
unbound_expressions.reserve(parsed_expressions.size());
|
370
376
|
for (auto &expr : parsed_expressions) {
|
@@ -419,7 +425,7 @@ void CheckpointWriter::WriteMacro(ScalarMacroCatalogEntry ¯o) {
|
|
419
425
|
}
|
420
426
|
|
421
427
|
void CheckpointReader::ReadMacro(ClientContext &context, MetaBlockReader &reader) {
|
422
|
-
auto info =
|
428
|
+
auto info = MacroCatalogEntry::Deserialize(reader, context);
|
423
429
|
catalog.CreateFunction(context, *info);
|
424
430
|
}
|
425
431
|
|
@@ -428,7 +434,7 @@ void CheckpointWriter::WriteTableMacro(TableMacroCatalogEntry ¯o) {
|
|
428
434
|
}
|
429
435
|
|
430
436
|
void CheckpointReader::ReadTableMacro(ClientContext &context, MetaBlockReader &reader) {
|
431
|
-
auto info =
|
437
|
+
auto info = MacroCatalogEntry::Deserialize(reader, context);
|
432
438
|
catalog.CreateFunction(context, *info);
|
433
439
|
}
|
434
440
|
|
@@ -241,10 +241,6 @@ void SingleFileBlockManager::Initialize(DatabaseHeader &header) {
|
|
241
241
|
}
|
242
242
|
|
243
243
|
void SingleFileBlockManager::LoadFreeList() {
|
244
|
-
if (options.read_only) {
|
245
|
-
// no need to load free list for read only db
|
246
|
-
return;
|
247
|
-
}
|
248
244
|
if (free_list_id == INVALID_BLOCK) {
|
249
245
|
// no free list
|
250
246
|
return;
|