duckdb 1.1.4-dev13.0 → 1.1.4-dev14.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/binding.gyp +1 -0
- package/package.json +1 -1
- package/src/duckdb/extension/core_functions/function_list.cpp +1 -0
- package/src/duckdb/extension/core_functions/include/core_functions/scalar/map_functions.hpp +9 -0
- package/src/duckdb/extension/core_functions/scalar/date/current.cpp +1 -0
- package/src/duckdb/extension/core_functions/scalar/generic/can_implicitly_cast.cpp +2 -2
- package/src/duckdb/extension/core_functions/scalar/generic/typeof.cpp +1 -1
- package/src/duckdb/extension/core_functions/scalar/list/flatten.cpp +91 -61
- package/src/duckdb/extension/core_functions/scalar/map/map_extract.cpp +89 -8
- package/src/duckdb/extension/icu/icu-current.cpp +63 -0
- package/src/duckdb/extension/icu/icu-makedate.cpp +43 -39
- package/src/duckdb/extension/icu/icu-timezone.cpp +63 -63
- package/src/duckdb/extension/icu/icu_extension.cpp +2 -0
- package/src/duckdb/extension/icu/include/icu-casts.hpp +39 -0
- package/src/duckdb/extension/icu/include/icu-current.hpp +17 -0
- package/src/duckdb/extension/icu/third_party/icu/stubdata/stubdata.cpp +1 -1
- package/src/duckdb/extension/json/json_functions/json_structure.cpp +3 -1
- package/src/duckdb/extension/parquet/column_writer.cpp +26 -18
- package/src/duckdb/extension/parquet/include/parquet_reader.hpp +0 -6
- package/src/duckdb/extension/parquet/include/parquet_writer.hpp +15 -1
- package/src/duckdb/extension/parquet/include/resizable_buffer.hpp +1 -0
- package/src/duckdb/extension/parquet/parquet_extension.cpp +67 -15
- package/src/duckdb/extension/parquet/parquet_reader.cpp +5 -3
- package/src/duckdb/extension/parquet/parquet_writer.cpp +5 -6
- package/src/duckdb/src/catalog/catalog.cpp +21 -8
- package/src/duckdb/src/catalog/catalog_search_path.cpp +17 -1
- package/src/duckdb/src/catalog/catalog_set.cpp +1 -1
- package/src/duckdb/src/catalog/default/default_functions.cpp +0 -3
- package/src/duckdb/src/catalog/dependency_list.cpp +7 -0
- package/src/duckdb/src/common/adbc/adbc.cpp +1 -56
- package/src/duckdb/src/common/arrow/arrow_converter.cpp +3 -2
- package/src/duckdb/src/common/arrow/arrow_type_extension.cpp +58 -28
- package/src/duckdb/src/common/arrow/schema_metadata.cpp +1 -1
- package/src/duckdb/src/common/compressed_file_system.cpp +6 -2
- package/src/duckdb/src/common/enum_util.cpp +26 -22
- package/src/duckdb/src/common/error_data.cpp +3 -2
- package/src/duckdb/src/common/gzip_file_system.cpp +8 -8
- package/src/duckdb/src/common/local_file_system.cpp +2 -2
- package/src/duckdb/src/common/multi_file_reader.cpp +1 -1
- package/src/duckdb/src/common/random_engine.cpp +4 -1
- package/src/duckdb/src/common/serializer/memory_stream.cpp +23 -19
- package/src/duckdb/src/common/serializer/serializer.cpp +1 -1
- package/src/duckdb/src/common/types/bit.cpp +1 -1
- package/src/duckdb/src/common/types/column/column_data_allocator.cpp +0 -5
- package/src/duckdb/src/common/types/column/column_data_collection.cpp +4 -1
- package/src/duckdb/src/common/types/data_chunk.cpp +2 -1
- package/src/duckdb/src/common/types/row/tuple_data_segment.cpp +0 -4
- package/src/duckdb/src/common/types.cpp +1 -1
- package/src/duckdb/src/execution/index/art/art.cpp +52 -42
- package/src/duckdb/src/execution/index/art/leaf.cpp +4 -9
- package/src/duckdb/src/execution/index/art/node.cpp +13 -13
- package/src/duckdb/src/execution/index/art/prefix.cpp +21 -16
- package/src/duckdb/src/execution/index/bound_index.cpp +6 -8
- package/src/duckdb/src/execution/index/fixed_size_allocator.cpp +39 -34
- package/src/duckdb/src/execution/index/fixed_size_buffer.cpp +2 -1
- package/src/duckdb/src/execution/index/unbound_index.cpp +10 -0
- package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +62 -44
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/column_count_scanner.cpp +26 -0
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/string_value_scanner.cpp +69 -40
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/dialect_detection.cpp +3 -7
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/header_detection.cpp +11 -5
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_detection.cpp +4 -0
- package/src/duckdb/src/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.cpp +8 -8
- package/src/duckdb/src/execution/operator/csv_scanner/util/csv_error.cpp +36 -12
- package/src/duckdb/src/execution/operator/csv_scanner/util/csv_reader_options.cpp +12 -9
- package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +0 -1
- package/src/duckdb/src/execution/operator/persistent/physical_copy_database.cpp +29 -1
- package/src/duckdb/src/execution/operator/persistent/physical_delete.cpp +58 -10
- package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +58 -35
- package/src/duckdb/src/execution/operator/schema/physical_create_art_index.cpp +2 -1
- package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +9 -4
- package/src/duckdb/src/execution/sample/reservoir_sample.cpp +7 -6
- package/src/duckdb/src/function/compression_config.cpp +4 -0
- package/src/duckdb/src/function/function_binder.cpp +1 -1
- package/src/duckdb/src/function/scalar/system/write_log.cpp +2 -2
- package/src/duckdb/src/function/table/arrow/arrow_duck_schema.cpp +15 -2
- package/src/duckdb/src/function/table/arrow_conversion.cpp +10 -10
- package/src/duckdb/src/function/table/copy_csv.cpp +8 -5
- package/src/duckdb/src/function/table/read_csv.cpp +21 -4
- package/src/duckdb/src/function/table/sniff_csv.cpp +7 -0
- package/src/duckdb/src/function/table/system/duckdb_extensions.cpp +4 -0
- package/src/duckdb/src/function/table/system/duckdb_secret_types.cpp +71 -0
- package/src/duckdb/src/function/table/system_functions.cpp +1 -0
- package/src/duckdb/src/function/table/table_scan.cpp +120 -36
- package/src/duckdb/src/function/table/version/pragma_version.cpp +4 -4
- package/src/duckdb/src/function/window/window_aggregate_function.cpp +6 -1
- package/src/duckdb/src/function/window/window_boundaries_state.cpp +135 -11
- package/src/duckdb/src/function/window/window_segment_tree.cpp +50 -22
- package/src/duckdb/src/function/window/window_token_tree.cpp +4 -3
- package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +4 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_search_path.hpp +2 -0
- package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/arrow/arrow_type_extension.hpp +4 -2
- package/src/duckdb/src/include/duckdb/common/enum_util.hpp +8 -8
- package/src/duckdb/src/include/duckdb/common/multi_file_reader.hpp +0 -2
- package/src/duckdb/src/include/duckdb/common/serializer/deserializer.hpp +8 -3
- package/src/duckdb/src/include/duckdb/common/serializer/memory_stream.hpp +6 -1
- package/src/duckdb/src/include/duckdb/common/serializer/serialization_data.hpp +25 -0
- package/src/duckdb/src/include/duckdb/common/serializer/serializer.hpp +9 -3
- package/src/duckdb/src/include/duckdb/common/types/selection_vector.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +11 -14
- package/src/duckdb/src/include/duckdb/execution/index/art/prefix.hpp +5 -4
- package/src/duckdb/src/include/duckdb/execution/index/bound_index.hpp +21 -10
- package/src/duckdb/src/include/duckdb/execution/index/fixed_size_allocator.hpp +6 -5
- package/src/duckdb/src/include/duckdb/execution/index/fixed_size_buffer.hpp +37 -32
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/base_scanner.hpp +36 -1
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/column_count_scanner.hpp +3 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp +2 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine_options.hpp +5 -5
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/string_value_scanner.hpp +5 -30
- package/src/duckdb/src/include/duckdb/execution/reservoir_sample.hpp +7 -1
- package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +3 -3
- package/src/duckdb/src/include/duckdb/function/table/arrow/arrow_duck_schema.hpp +1 -0
- package/src/duckdb/src/include/duckdb/function/table/system_functions.hpp +4 -0
- package/src/duckdb/src/include/duckdb/function/window/window_boundaries_state.hpp +2 -2
- package/src/duckdb/src/include/duckdb/logging/logger.hpp +40 -119
- package/src/duckdb/src/include/duckdb/logging/logging.hpp +0 -2
- package/src/duckdb/src/include/duckdb/main/config.hpp +5 -0
- package/src/duckdb/src/include/duckdb/main/connection.hpp +0 -8
- package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +2 -1
- package/src/duckdb/src/include/duckdb/main/extension.hpp +1 -0
- package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +11 -7
- package/src/duckdb/src/include/duckdb/main/extension_helper.hpp +1 -0
- package/src/duckdb/src/include/duckdb/main/secret/secret.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/secret/secret_manager.hpp +3 -0
- package/src/duckdb/src/include/duckdb/main/settings.hpp +10 -0
- package/src/duckdb/src/include/duckdb/parser/constraint.hpp +9 -0
- package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +36 -9
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_view_info.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +8 -2
- package/src/duckdb/src/include/duckdb/planner/binder.hpp +4 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_parameter_data.hpp +9 -1
- package/src/duckdb/src/include/duckdb/planner/filter/constant_filter.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/filter/in_filter.hpp +0 -2
- package/src/duckdb/src/include/duckdb/planner/filter/optional_filter.hpp +4 -4
- package/src/duckdb/src/include/duckdb/planner/table_filter.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/data_table.hpp +14 -10
- package/src/duckdb/src/include/duckdb/storage/index_storage_info.hpp +4 -0
- package/src/duckdb/src/include/duckdb/storage/single_file_block_manager.hpp +6 -1
- package/src/duckdb/src/include/duckdb/storage/storage_info.hpp +7 -2
- package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +9 -0
- package/src/duckdb/src/include/duckdb/storage/storage_options.hpp +2 -0
- package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +4 -3
- package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +2 -0
- package/src/duckdb/src/include/duckdb/storage/table/table_index_list.hpp +6 -4
- package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +2 -0
- package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +2 -0
- package/src/duckdb/src/include/duckdb/transaction/meta_transaction.hpp +1 -1
- package/src/duckdb/src/logging/logger.cpp +8 -66
- package/src/duckdb/src/main/attached_database.cpp +3 -1
- package/src/duckdb/src/main/client_context.cpp +4 -2
- package/src/duckdb/src/main/config.cpp +20 -2
- package/src/duckdb/src/main/connection.cpp +2 -29
- package/src/duckdb/src/main/connection_manager.cpp +5 -3
- package/src/duckdb/src/main/database.cpp +2 -2
- package/src/duckdb/src/main/extension/extension_helper.cpp +4 -5
- package/src/duckdb/src/main/extension/extension_install.cpp +23 -10
- package/src/duckdb/src/main/extension/extension_load.cpp +6 -7
- package/src/duckdb/src/main/extension.cpp +27 -9
- package/src/duckdb/src/main/secret/secret_manager.cpp +11 -0
- package/src/duckdb/src/main/settings/custom_settings.cpp +44 -0
- package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +6 -0
- package/src/duckdb/src/optimizer/filter_combiner.cpp +13 -3
- package/src/duckdb/src/optimizer/filter_pushdown.cpp +33 -6
- package/src/duckdb/src/optimizer/late_materialization.cpp +14 -3
- package/src/duckdb/src/optimizer/remove_unused_columns.cpp +0 -3
- package/src/duckdb/src/parser/parsed_data/attach_info.cpp +5 -1
- package/src/duckdb/src/parser/parsed_data/create_view_info.cpp +6 -3
- package/src/duckdb/src/parser/query_node/set_operation_node.cpp +49 -0
- package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +1 -0
- package/src/duckdb/src/parser/transform/expression/transform_function.cpp +50 -12
- package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +7 -5
- package/src/duckdb/src/planner/binder/expression/bind_comparison_expression.cpp +1 -0
- package/src/duckdb/src/planner/binder/expression/bind_operator_expression.cpp +2 -2
- package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +12 -2
- package/src/duckdb/src/planner/binder/statement/bind_copy_database.cpp +0 -1
- package/src/duckdb/src/planner/binder/statement/bind_create.cpp +55 -39
- package/src/duckdb/src/planner/binder/statement/bind_execute.cpp +2 -1
- package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +15 -7
- package/src/duckdb/src/planner/binder/tableref/bind_showref.cpp +13 -8
- package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +8 -3
- package/src/duckdb/src/planner/expression/bound_function_expression.cpp +17 -1
- package/src/duckdb/src/planner/expression_binder/index_binder.cpp +1 -0
- package/src/duckdb/src/planner/filter/conjunction_filter.cpp +1 -0
- package/src/duckdb/src/planner/filter/constant_filter.cpp +21 -0
- package/src/duckdb/src/planner/filter/in_filter.cpp +4 -7
- package/src/duckdb/src/planner/logical_operator.cpp +5 -3
- package/src/duckdb/src/planner/planner.cpp +1 -1
- package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +2 -0
- package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +3 -4
- package/src/duckdb/src/storage/checkpoint_manager.cpp +3 -5
- package/src/duckdb/src/storage/compression/dictionary/decompression.cpp +4 -4
- package/src/duckdb/src/storage/compression/fsst.cpp +2 -2
- package/src/duckdb/src/storage/compression/roaring/common.cpp +10 -1
- package/src/duckdb/src/storage/compression/string_uncompressed.cpp +11 -6
- package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +4 -0
- package/src/duckdb/src/storage/compression/zstd.cpp +6 -0
- package/src/duckdb/src/storage/data_table.cpp +104 -109
- package/src/duckdb/src/storage/local_storage.cpp +8 -6
- package/src/duckdb/src/storage/magic_bytes.cpp +1 -1
- package/src/duckdb/src/storage/serialization/serialize_dependency.cpp +3 -3
- package/src/duckdb/src/storage/serialization/serialize_nodes.cpp +3 -3
- package/src/duckdb/src/storage/serialization/serialize_query_node.cpp +7 -5
- package/src/duckdb/src/storage/single_file_block_manager.cpp +95 -28
- package/src/duckdb/src/storage/storage_info.cpp +38 -0
- package/src/duckdb/src/storage/storage_manager.cpp +11 -0
- package/src/duckdb/src/storage/table/column_data.cpp +4 -0
- package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +3 -3
- package/src/duckdb/src/storage/table/row_group_collection.cpp +67 -68
- package/src/duckdb/src/storage/table/table_statistics.cpp +4 -4
- package/src/duckdb/src/storage/table_index_list.cpp +41 -15
- package/src/duckdb/src/storage/wal_replay.cpp +3 -1
- package/src/duckdb/src/storage/write_ahead_log.cpp +11 -4
- package/src/duckdb/src/transaction/meta_transaction.cpp +1 -1
- package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +2 -1
- package/src/duckdb/third_party/httplib/httplib.hpp +0 -1
- package/src/duckdb/third_party/re2/util/logging.h +10 -10
- package/src/duckdb/ub_src_function_table_system.cpp +2 -0
@@ -99,26 +99,31 @@ unique_ptr<BoundTableRef> Binder::BindShowQuery(ShowRef &ref) {
|
|
99
99
|
for (idx_t column_idx = 0; column_idx < plan.types.size(); column_idx++) {
|
100
100
|
// check if we can trace the column to a base table so that we can figure out constraint information
|
101
101
|
auto result = FindBaseTableColumn(*plan.plan, column_idx);
|
102
|
+
idx_t row_index = output.size();
|
103
|
+
auto &alias = plan.names[column_idx];
|
102
104
|
if (result.table) {
|
103
105
|
// we can! emit the information from the base table directly
|
104
|
-
PragmaTableInfo::GetColumnInfo(*result.table, *result.column, output,
|
106
|
+
PragmaTableInfo::GetColumnInfo(*result.table, *result.column, output, row_index);
|
107
|
+
// Override the base column name with the alias if one is specified.
|
108
|
+
if (alias != result.column->Name()) {
|
109
|
+
output.SetValue(0, row_index, Value(alias));
|
110
|
+
}
|
105
111
|
} else {
|
106
112
|
// we cannot - read the type/name from the plan instead
|
107
113
|
auto type = plan.types[column_idx];
|
108
|
-
auto &name = plan.names[column_idx];
|
109
114
|
|
110
115
|
// "name", TypeId::VARCHAR
|
111
|
-
output.SetValue(0,
|
116
|
+
output.SetValue(0, row_index, Value(alias));
|
112
117
|
// "type", TypeId::VARCHAR
|
113
|
-
output.SetValue(1,
|
118
|
+
output.SetValue(1, row_index, Value(type.ToString()));
|
114
119
|
// "null", TypeId::VARCHAR
|
115
|
-
output.SetValue(2,
|
120
|
+
output.SetValue(2, row_index, Value("YES"));
|
116
121
|
// "pk", TypeId::BOOL
|
117
|
-
output.SetValue(3,
|
122
|
+
output.SetValue(3, row_index, Value());
|
118
123
|
// "dflt_value", TypeId::VARCHAR
|
119
|
-
output.SetValue(4,
|
124
|
+
output.SetValue(4, row_index, Value());
|
120
125
|
// "extra", TypeId::VARCHAR
|
121
|
-
output.SetValue(5,
|
126
|
+
output.SetValue(5, row_index, Value());
|
122
127
|
}
|
123
128
|
|
124
129
|
output.SetCardinality(output.size() + 1);
|
@@ -126,8 +126,7 @@ bool Binder::BindTableFunctionParameters(TableFunctionCatalogEntry &table_functi
|
|
126
126
|
child->GetExpressionType() == ExpressionType::SUBQUERY) {
|
127
127
|
D_ASSERT(table_function.functions.Size() == 1);
|
128
128
|
auto fun = table_function.functions.GetFunctionByOffset(0);
|
129
|
-
if (table_function.functions.Size() != 1 || fun.arguments.empty()
|
130
|
-
fun.arguments[0].id() != LogicalTypeId::TABLE) {
|
129
|
+
if (table_function.functions.Size() != 1 || fun.arguments.empty()) {
|
131
130
|
throw BinderException(
|
132
131
|
"Only table-in-out functions can have subquery parameters - %s only accepts constant parameters",
|
133
132
|
fun.name);
|
@@ -203,7 +202,13 @@ unique_ptr<LogicalOperator> Binder::BindTableFunctionInternal(TableFunction &tab
|
|
203
202
|
table_function.function_info.get(), this, table_function, ref);
|
204
203
|
if (table_function.bind_replace) {
|
205
204
|
auto new_plan = table_function.bind_replace(context, bind_input);
|
206
|
-
if (new_plan
|
205
|
+
if (new_plan) {
|
206
|
+
if (!ref.alias.empty()) {
|
207
|
+
new_plan->alias = ref.alias;
|
208
|
+
}
|
209
|
+
if (!ref.column_name_alias.empty()) {
|
210
|
+
new_plan->column_name_alias = ref.column_name_alias;
|
211
|
+
}
|
207
212
|
return CreatePlan(*Bind(*new_plan));
|
208
213
|
} else if (!table_function.bind) {
|
209
214
|
throw BinderException("Failed to bind \"%s\": nullptr returned from bind_replace without bind function",
|
@@ -109,12 +109,28 @@ void BoundFunctionExpression::Serialize(Serializer &serializer) const {
|
|
109
109
|
unique_ptr<Expression> BoundFunctionExpression::Deserialize(Deserializer &deserializer) {
|
110
110
|
auto return_type = deserializer.ReadProperty<LogicalType>(200, "return_type");
|
111
111
|
auto children = deserializer.ReadProperty<vector<unique_ptr<Expression>>>(201, "children");
|
112
|
+
|
112
113
|
auto entry = FunctionSerializer::Deserialize<ScalarFunction, ScalarFunctionCatalogEntry>(
|
113
114
|
deserializer, CatalogType::SCALAR_FUNCTION_ENTRY, children, return_type);
|
114
115
|
auto function_return_type = entry.first.return_type;
|
116
|
+
|
117
|
+
auto is_operator = deserializer.ReadProperty<bool>(202, "is_operator");
|
118
|
+
|
119
|
+
if (entry.first.bind_expression) {
|
120
|
+
// bind the function expression
|
121
|
+
auto &context = deserializer.Get<ClientContext &>();
|
122
|
+
auto bind_input = FunctionBindExpressionInput(context, entry.second, children);
|
123
|
+
// replace the function expression with the bound expression
|
124
|
+
auto bound_expression = entry.first.bind_expression(bind_input);
|
125
|
+
if (bound_expression) {
|
126
|
+
return bound_expression;
|
127
|
+
}
|
128
|
+
// Otherwise, fall thorugh and continue on normally
|
129
|
+
}
|
130
|
+
|
115
131
|
auto result = make_uniq<BoundFunctionExpression>(std::move(function_return_type), std::move(entry.first),
|
116
132
|
std::move(children), std::move(entry.second));
|
117
|
-
|
133
|
+
result->is_operator = is_operator;
|
118
134
|
if (result->return_type != return_type) {
|
119
135
|
// return type mismatch - push a cast
|
120
136
|
auto &context = deserializer.Get<ClientContext &>();
|
@@ -62,6 +62,7 @@ void IndexBinder::InitCreateIndexInfo(LogicalGet &get, CreateIndexInfo &info, co
|
|
62
62
|
info.scan_types.emplace_back(LogicalType::ROW_TYPE);
|
63
63
|
info.names = get.names;
|
64
64
|
info.schema = schema;
|
65
|
+
info.catalog = get.GetTable()->catalog.GetName();
|
65
66
|
get.AddColumnId(COLUMN_IDENTIFIER_ROW_ID);
|
66
67
|
}
|
67
68
|
|
@@ -2,6 +2,8 @@
|
|
2
2
|
#include "duckdb/storage/statistics/base_statistics.hpp"
|
3
3
|
#include "duckdb/planner/expression/bound_comparison_expression.hpp"
|
4
4
|
#include "duckdb/planner/expression/bound_constant_expression.hpp"
|
5
|
+
#include "duckdb/common/value_operations/value_operations.hpp"
|
6
|
+
#include "duckdb/common/enum_util.hpp"
|
5
7
|
|
6
8
|
namespace duckdb {
|
7
9
|
|
@@ -13,6 +15,25 @@ ConstantFilter::ConstantFilter(ExpressionType comparison_type_p, Value constant_
|
|
13
15
|
}
|
14
16
|
}
|
15
17
|
|
18
|
+
bool ConstantFilter::Compare(const Value &value) const {
|
19
|
+
switch (comparison_type) {
|
20
|
+
case ExpressionType::COMPARE_EQUAL:
|
21
|
+
return ValueOperations::Equals(value, constant);
|
22
|
+
case ExpressionType::COMPARE_NOTEQUAL:
|
23
|
+
return ValueOperations::NotEquals(value, constant);
|
24
|
+
case ExpressionType::COMPARE_GREATERTHAN:
|
25
|
+
return ValueOperations::GreaterThan(value, constant);
|
26
|
+
case ExpressionType::COMPARE_GREATERTHANOREQUALTO:
|
27
|
+
return ValueOperations::GreaterThanEquals(value, constant);
|
28
|
+
case ExpressionType::COMPARE_LESSTHAN:
|
29
|
+
return ValueOperations::LessThan(value, constant);
|
30
|
+
case ExpressionType::COMPARE_LESSTHANOREQUALTO:
|
31
|
+
return ValueOperations::LessThanEquals(value, constant);
|
32
|
+
default:
|
33
|
+
throw InternalException("unknown comparison type for ConstantFilter: " + EnumUtil::ToString(comparison_type));
|
34
|
+
}
|
35
|
+
}
|
36
|
+
|
16
37
|
FilterPropagateResult ConstantFilter::CheckStatistics(BaseStatistics &stats) {
|
17
38
|
if (!stats.CanHaveNoNull()) {
|
18
39
|
// no non-null values are possible: always false
|
@@ -1,15 +1,12 @@
|
|
1
1
|
#include "duckdb/planner/filter/in_filter.hpp"
|
2
|
+
|
2
3
|
#include "duckdb/storage/statistics/base_statistics.hpp"
|
3
4
|
#include "duckdb/planner/expression/bound_constant_expression.hpp"
|
4
5
|
#include "duckdb/planner/expression/bound_operator_expression.hpp"
|
5
6
|
|
6
7
|
namespace duckdb {
|
7
8
|
|
8
|
-
InFilter::InFilter(vector<Value> values_p) :
|
9
|
-
}
|
10
|
-
|
11
|
-
InFilter::InFilter(vector<Value> values_p, bool origin_is_hash_join)
|
12
|
-
: TableFilter(TableFilterType::IN_FILTER), values(std::move(values_p)), origin_is_hash_join(origin_is_hash_join) {
|
9
|
+
InFilter::InFilter(vector<Value> values_p) : TableFilter(TableFilterType::IN_FILTER), values(std::move(values_p)) {
|
13
10
|
for (auto &val : values) {
|
14
11
|
if (val.IsNull()) {
|
15
12
|
throw InternalException("InFilter constant cannot be NULL - use IsNullFilter instead");
|
@@ -74,11 +71,11 @@ bool InFilter::Equals(const TableFilter &other_p) const {
|
|
74
71
|
return false;
|
75
72
|
}
|
76
73
|
auto &other = other_p.Cast<InFilter>();
|
77
|
-
return other.values == values
|
74
|
+
return other.values == values;
|
78
75
|
}
|
79
76
|
|
80
77
|
unique_ptr<TableFilter> InFilter::Copy() const {
|
81
|
-
return make_uniq<InFilter>(values
|
78
|
+
return make_uniq<InFilter>(values);
|
82
79
|
}
|
83
80
|
|
84
81
|
} // namespace duckdb
|
@@ -161,7 +161,7 @@ void LogicalOperator::Verify(ClientContext &context) {
|
|
161
161
|
if (expressions[expr_idx]->HasParameter()) {
|
162
162
|
continue;
|
163
163
|
}
|
164
|
-
MemoryStream stream;
|
164
|
+
MemoryStream stream(Allocator::Get(context));
|
165
165
|
// We are serializing a query plan
|
166
166
|
try {
|
167
167
|
BinarySerializer::Serialize(*expressions[expr_idx], stream);
|
@@ -215,8 +215,10 @@ vector<idx_t> LogicalOperator::GetTableIndex() const {
|
|
215
215
|
}
|
216
216
|
|
217
217
|
unique_ptr<LogicalOperator> LogicalOperator::Copy(ClientContext &context) const {
|
218
|
-
MemoryStream stream;
|
219
|
-
|
218
|
+
MemoryStream stream(Allocator::Get(context));
|
219
|
+
SerializationOptions options;
|
220
|
+
options.serialization_compatibility = SerializationCompatibility::Latest();
|
221
|
+
BinarySerializer serializer(stream, options);
|
220
222
|
try {
|
221
223
|
serializer.Begin();
|
222
224
|
this->Serialize(serializer);
|
@@ -184,7 +184,7 @@ void Planner::VerifyPlan(ClientContext &context, unique_ptr<LogicalOperator> &op
|
|
184
184
|
|
185
185
|
// format (de)serialization of this operator
|
186
186
|
try {
|
187
|
-
MemoryStream stream;
|
187
|
+
MemoryStream stream(Allocator::Get(context));
|
188
188
|
|
189
189
|
SerializationOptions options;
|
190
190
|
if (config.options.serialization_compatibility.manually_set) {
|
@@ -401,6 +401,7 @@ unique_ptr<LogicalOperator> FlattenDependentJoins::PushDownDependentJoinInternal
|
|
401
401
|
// only right has correlation: push into right
|
402
402
|
plan->children[1] = PushDownDependentJoinInternal(std::move(plan->children[1]),
|
403
403
|
parent_propagate_null_values, lateral_depth);
|
404
|
+
delim_offset += plan->children[0]->GetColumnBindings().size();
|
404
405
|
// Remove the correlated columns coming from outside for current join node
|
405
406
|
return plan;
|
406
407
|
}
|
@@ -419,6 +420,7 @@ unique_ptr<LogicalOperator> FlattenDependentJoins::PushDownDependentJoinInternal
|
|
419
420
|
// only right has correlation: push into right
|
420
421
|
plan->children[1] = PushDownDependentJoinInternal(std::move(plan->children[1]),
|
421
422
|
parent_propagate_null_values, lateral_depth);
|
423
|
+
delim_offset += plan->children[0]->GetColumnBindings().size();
|
422
424
|
return plan;
|
423
425
|
}
|
424
426
|
} else if (join.join_type == JoinType::MARK) {
|
@@ -60,7 +60,7 @@ void SingleFileTableDataWriter::FinalizeTable(const TableStatistics &global_stat
|
|
60
60
|
auto pointer = table_data_writer.GetMetaBlockPointer();
|
61
61
|
|
62
62
|
// Serialize statistics as a single unit
|
63
|
-
BinarySerializer stats_serializer(table_data_writer);
|
63
|
+
BinarySerializer stats_serializer(table_data_writer, serializer.GetOptions());
|
64
64
|
stats_serializer.Begin();
|
65
65
|
global_stats.Serialize(stats_serializer);
|
66
66
|
stats_serializer.End();
|
@@ -75,7 +75,7 @@ void SingleFileTableDataWriter::FinalizeTable(const TableStatistics &global_stat
|
|
75
75
|
}
|
76
76
|
|
77
77
|
// Each RowGroup is its own unit
|
78
|
-
BinarySerializer row_group_serializer(table_data_writer);
|
78
|
+
BinarySerializer row_group_serializer(table_data_writer, serializer.GetOptions());
|
79
79
|
row_group_serializer.Begin();
|
80
80
|
RowGroup::Serialize(row_group_pointer, row_group_serializer);
|
81
81
|
row_group_serializer.End();
|
@@ -86,8 +86,7 @@ void SingleFileTableDataWriter::FinalizeTable(const TableStatistics &global_stat
|
|
86
86
|
serializer.WriteProperty(101, "table_pointer", pointer);
|
87
87
|
serializer.WriteProperty(102, "total_rows", total_rows);
|
88
88
|
|
89
|
-
auto
|
90
|
-
auto v1_0_0_storage = db_options.serialization_compatibility.serialization_version < 3;
|
89
|
+
auto v1_0_0_storage = serializer.GetOptions().serialization_compatibility.serialization_version < 3;
|
91
90
|
case_insensitive_map_t<Value> options;
|
92
91
|
if (!v1_0_0_storage) {
|
93
92
|
options.emplace("v1_0_0_storage", v1_0_0_storage);
|
@@ -178,11 +178,7 @@ void SingleFileCheckpointWriter::CreateCheckpoint() {
|
|
178
178
|
]
|
179
179
|
}
|
180
180
|
*/
|
181
|
-
SerializationOptions
|
182
|
-
|
183
|
-
serialization_options.serialization_compatibility = config.options.serialization_compatibility;
|
184
|
-
|
185
|
-
BinarySerializer serializer(*metadata_writer, serialization_options);
|
181
|
+
BinarySerializer serializer(*metadata_writer, SerializationOptions(db));
|
186
182
|
serializer.Begin();
|
187
183
|
serializer.WriteList(100, "catalog_entries", catalog_entries.size(), [&](Serializer::List &list, idx_t i) {
|
188
184
|
auto &entry = catalog_entries[i];
|
@@ -259,11 +255,13 @@ void SingleFileCheckpointWriter::CreateCheckpoint() {
|
|
259
255
|
|
260
256
|
void CheckpointReader::LoadCheckpoint(CatalogTransaction transaction, MetadataReader &reader) {
|
261
257
|
BinaryDeserializer deserializer(reader);
|
258
|
+
deserializer.Set<Catalog &>(catalog);
|
262
259
|
deserializer.Begin();
|
263
260
|
deserializer.ReadList(100, "catalog_entries", [&](Deserializer::List &list, idx_t i) {
|
264
261
|
return list.ReadObject([&](Deserializer &obj) { ReadEntry(transaction, obj); });
|
265
262
|
});
|
266
263
|
deserializer.End();
|
264
|
+
deserializer.Unset<Catalog>();
|
267
265
|
}
|
268
266
|
|
269
267
|
MetadataManager &SingleFileCheckpointReader::GetMetadataManager() {
|
@@ -43,16 +43,16 @@ void CompressedStringScanState::Initialize(ColumnSegment &segment, bool initiali
|
|
43
43
|
block_size = segment.GetBlockManager().GetBlockSize();
|
44
44
|
|
45
45
|
dict = DictionaryCompression::GetDictionary(segment, *handle);
|
46
|
-
dictionary = make_buffer<Vector>(segment.type, index_buffer_count);
|
47
|
-
dictionary_size = index_buffer_count;
|
48
|
-
|
49
46
|
if (!initialize_dictionary) {
|
50
47
|
// Used by fetch, as fetch will never produce a DictionaryVector
|
51
48
|
return;
|
52
49
|
}
|
53
50
|
|
51
|
+
dictionary = make_buffer<Vector>(segment.type, index_buffer_count);
|
52
|
+
dictionary_size = index_buffer_count;
|
54
53
|
auto dict_child_data = FlatVector::GetData<string_t>(*(dictionary));
|
55
|
-
|
54
|
+
FlatVector::SetNull(*dictionary, 0, true);
|
55
|
+
for (uint32_t i = 1; i < index_buffer_count; i++) {
|
56
56
|
// NOTE: the passing of dict_child_vector, will not be used, its for big strings
|
57
57
|
uint16_t str_len = GetStringLength(i);
|
58
58
|
dict_child_data[i] = FetchStringFromDict(UnsafeNumericCast<int32_t>(index_buffer_ptr[i]), str_len);
|
@@ -658,7 +658,7 @@ void FSSTStorage::StringScanPartial(ColumnSegment &segment, ColumnScanState &sta
|
|
658
658
|
for (idx_t i = 0; i < scan_count; i++) {
|
659
659
|
uint32_t string_length = bitunpack_buffer[i + offsets.scan_offset];
|
660
660
|
result_data[i] = UncompressedStringStorage::FetchStringFromDict(
|
661
|
-
segment, dict, result, baseptr,
|
661
|
+
segment, dict.end, result, baseptr,
|
662
662
|
UnsafeNumericCast<int32_t>(delta_decode_buffer[i + offsets.unused_delta_decoded_values]),
|
663
663
|
string_length);
|
664
664
|
FSSTVector::SetCount(result, scan_count);
|
@@ -736,7 +736,7 @@ void FSSTStorage::StringFetchRow(ColumnSegment &segment, ColumnFetchState &state
|
|
736
736
|
uint32_t string_length = bitunpack_buffer[offsets.scan_offset];
|
737
737
|
|
738
738
|
string_t compressed_string = UncompressedStringStorage::FetchStringFromDict(
|
739
|
-
segment, dict, result, base_ptr,
|
739
|
+
segment, dict.end, result, base_ptr,
|
740
740
|
UnsafeNumericCast<int32_t>(delta_decode_buffer[offsets.unused_delta_decoded_values]), string_length);
|
741
741
|
|
742
742
|
vector<unsigned char> uncompress_buffer;
|
@@ -167,9 +167,14 @@ void SetInvalidRange(ValidityMask &result, idx_t start, idx_t end) {
|
|
167
167
|
}
|
168
168
|
|
169
169
|
unique_ptr<AnalyzeState> RoaringInitAnalyze(ColumnData &col_data, PhysicalType type) {
|
170
|
+
// check if the storage version we are writing to supports roaring
|
171
|
+
auto &storage = col_data.GetStorageManager();
|
172
|
+
if (storage.GetStorageVersion() < 4) {
|
173
|
+
// compatibility mode with old versions - disable roaring
|
174
|
+
return nullptr;
|
175
|
+
}
|
170
176
|
CompressionInfo info(col_data.GetBlockManager().GetBlockSize());
|
171
177
|
auto state = make_uniq<RoaringAnalyzeState>(info);
|
172
|
-
|
173
178
|
return std::move(state);
|
174
179
|
}
|
175
180
|
|
@@ -220,6 +225,10 @@ void RoaringScanPartial(ColumnSegment &segment, ColumnScanState &state, idx_t sc
|
|
220
225
|
}
|
221
226
|
|
222
227
|
void RoaringScan(ColumnSegment &segment, ColumnScanState &state, idx_t scan_count, Vector &result) {
|
228
|
+
if (result.GetVectorType() == VectorType::DICTIONARY_VECTOR) {
|
229
|
+
// dictionary encoding handles the validity itself
|
230
|
+
return;
|
231
|
+
}
|
223
232
|
RoaringScanPartial(segment, state, scan_count, result, 0);
|
224
233
|
}
|
225
234
|
|
@@ -94,7 +94,7 @@ void UncompressedStringStorage::StringScanPartial(ColumnSegment &segment, Column
|
|
94
94
|
auto start = segment.GetRelativeIndex(state.row_index);
|
95
95
|
|
96
96
|
auto baseptr = scan_state.handle.Ptr() + segment.GetBlockOffset();
|
97
|
-
auto
|
97
|
+
auto dict_end = GetDictionaryEnd(segment, scan_state.handle);
|
98
98
|
auto base_data = reinterpret_cast<int32_t *>(baseptr + DICTIONARY_HEADER_SIZE);
|
99
99
|
auto result_data = FlatVector::GetData<string_t>(result);
|
100
100
|
|
@@ -105,7 +105,7 @@ void UncompressedStringStorage::StringScanPartial(ColumnSegment &segment, Column
|
|
105
105
|
auto current_offset = base_data[start + i];
|
106
106
|
auto string_length = UnsafeNumericCast<uint32_t>(std::abs(current_offset) - std::abs(previous_offset));
|
107
107
|
result_data[result_offset + i] =
|
108
|
-
FetchStringFromDict(segment,
|
108
|
+
FetchStringFromDict(segment, dict_end, result, baseptr, current_offset, string_length);
|
109
109
|
previous_offset = base_data[start + i];
|
110
110
|
}
|
111
111
|
}
|
@@ -125,7 +125,7 @@ void UncompressedStringStorage::Select(ColumnSegment &segment, ColumnScanState &
|
|
125
125
|
auto start = segment.GetRelativeIndex(state.row_index);
|
126
126
|
|
127
127
|
auto baseptr = scan_state.handle.Ptr() + segment.GetBlockOffset();
|
128
|
-
auto
|
128
|
+
auto dict_end = GetDictionaryEnd(segment, scan_state.handle);
|
129
129
|
auto base_data = reinterpret_cast<int32_t *>(baseptr + DICTIONARY_HEADER_SIZE);
|
130
130
|
auto result_data = FlatVector::GetData<string_t>(result);
|
131
131
|
|
@@ -134,7 +134,7 @@ void UncompressedStringStorage::Select(ColumnSegment &segment, ColumnScanState &
|
|
134
134
|
auto current_offset = base_data[index];
|
135
135
|
auto prev_offset = index > 0 ? base_data[index - 1] : 0;
|
136
136
|
auto string_length = UnsafeNumericCast<uint32_t>(std::abs(current_offset) - std::abs(prev_offset));
|
137
|
-
result_data[i] = FetchStringFromDict(segment,
|
137
|
+
result_data[i] = FetchStringFromDict(segment, dict_end, result, baseptr, current_offset, string_length);
|
138
138
|
}
|
139
139
|
}
|
140
140
|
|
@@ -164,7 +164,7 @@ void UncompressedStringStorage::StringFetchRow(ColumnSegment &segment, ColumnFet
|
|
164
164
|
auto &handle = state.GetOrInsertHandle(segment);
|
165
165
|
|
166
166
|
auto baseptr = handle.Ptr() + segment.GetBlockOffset();
|
167
|
-
auto
|
167
|
+
auto dict_end = GetDictionaryEnd(segment, handle);
|
168
168
|
auto base_data = reinterpret_cast<int32_t *>(baseptr + DICTIONARY_HEADER_SIZE);
|
169
169
|
auto result_data = FlatVector::GetData<string_t>(result);
|
170
170
|
|
@@ -176,7 +176,7 @@ void UncompressedStringStorage::StringFetchRow(ColumnSegment &segment, ColumnFet
|
|
176
176
|
} else {
|
177
177
|
string_length = NumericCast<uint32_t>(std::abs(dict_offset) - std::abs(base_data[row_id - 1]));
|
178
178
|
}
|
179
|
-
result_data[result_idx] = FetchStringFromDict(segment,
|
179
|
+
result_data[result_idx] = FetchStringFromDict(segment, dict_end, result, baseptr, dict_offset, string_length);
|
180
180
|
}
|
181
181
|
|
182
182
|
//===--------------------------------------------------------------------===//
|
@@ -301,6 +301,11 @@ StringDictionaryContainer UncompressedStringStorage::GetDictionary(ColumnSegment
|
|
301
301
|
return container;
|
302
302
|
}
|
303
303
|
|
304
|
+
uint32_t UncompressedStringStorage::GetDictionaryEnd(ColumnSegment &segment, BufferHandle &handle) {
|
305
|
+
auto startptr = handle.Ptr() + segment.GetBlockOffset();
|
306
|
+
return Load<uint32_t>(startptr + sizeof(uint32_t));
|
307
|
+
}
|
308
|
+
|
304
309
|
idx_t UncompressedStringStorage::RemainingSpace(ColumnSegment &segment, BufferHandle &handle) {
|
305
310
|
auto dictionary = GetDictionary(segment, handle);
|
306
311
|
D_ASSERT(dictionary.end == segment.SegmentSize());
|
@@ -401,6 +401,10 @@ void ValidityScanPartial(ColumnSegment &segment, ColumnScanState &state, idx_t s
|
|
401
401
|
}
|
402
402
|
|
403
403
|
void ValidityScan(ColumnSegment &segment, ColumnScanState &state, idx_t scan_count, Vector &result) {
|
404
|
+
if (result.GetVectorType() == VectorType::DICTIONARY_VECTOR) {
|
405
|
+
// dictionary encoding handles the validity itself
|
406
|
+
return;
|
407
|
+
}
|
404
408
|
result.Flatten(scan_count);
|
405
409
|
|
406
410
|
auto start = segment.GetRelativeIndex(state.row_index);
|
@@ -140,6 +140,12 @@ public:
|
|
140
140
|
};
|
141
141
|
|
142
142
|
unique_ptr<AnalyzeState> ZSTDStorage::StringInitAnalyze(ColumnData &col_data, PhysicalType type) {
|
143
|
+
// check if the storage version we are writing to supports sztd
|
144
|
+
auto &storage = col_data.GetStorageManager();
|
145
|
+
if (storage.GetStorageVersion() < 4) {
|
146
|
+
// compatibility mode with old versions - disable zstd
|
147
|
+
return nullptr;
|
148
|
+
}
|
143
149
|
CompressionInfo info(col_data.GetBlockManager().GetBlockSize());
|
144
150
|
auto &data_table_info = col_data.info;
|
145
151
|
auto &attached_db = data_table_info.GetDB();
|