duckdb 1.1.4-dev11.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.
Files changed (220) hide show
  1. package/LICENSE +1 -1
  2. package/binding.gyp +1 -0
  3. package/package.json +1 -1
  4. package/src/duckdb/extension/core_functions/function_list.cpp +1 -0
  5. package/src/duckdb/extension/core_functions/include/core_functions/scalar/map_functions.hpp +9 -0
  6. package/src/duckdb/extension/core_functions/scalar/date/current.cpp +1 -0
  7. package/src/duckdb/extension/core_functions/scalar/generic/can_implicitly_cast.cpp +2 -2
  8. package/src/duckdb/extension/core_functions/scalar/generic/typeof.cpp +1 -1
  9. package/src/duckdb/extension/core_functions/scalar/list/flatten.cpp +91 -61
  10. package/src/duckdb/extension/core_functions/scalar/map/map_extract.cpp +89 -8
  11. package/src/duckdb/extension/icu/icu-current.cpp +63 -0
  12. package/src/duckdb/extension/icu/icu-makedate.cpp +43 -39
  13. package/src/duckdb/extension/icu/icu-timezone.cpp +63 -63
  14. package/src/duckdb/extension/icu/icu_extension.cpp +2 -0
  15. package/src/duckdb/extension/icu/include/icu-casts.hpp +39 -0
  16. package/src/duckdb/extension/icu/include/icu-current.hpp +17 -0
  17. package/src/duckdb/extension/icu/third_party/icu/stubdata/stubdata.cpp +1 -1
  18. package/src/duckdb/extension/json/json_functions/json_structure.cpp +3 -1
  19. package/src/duckdb/extension/parquet/column_writer.cpp +26 -18
  20. package/src/duckdb/extension/parquet/include/parquet_reader.hpp +0 -6
  21. package/src/duckdb/extension/parquet/include/parquet_writer.hpp +15 -1
  22. package/src/duckdb/extension/parquet/include/resizable_buffer.hpp +1 -0
  23. package/src/duckdb/extension/parquet/parquet_extension.cpp +67 -15
  24. package/src/duckdb/extension/parquet/parquet_reader.cpp +5 -3
  25. package/src/duckdb/extension/parquet/parquet_writer.cpp +5 -6
  26. package/src/duckdb/src/catalog/catalog.cpp +21 -8
  27. package/src/duckdb/src/catalog/catalog_search_path.cpp +17 -1
  28. package/src/duckdb/src/catalog/catalog_set.cpp +1 -1
  29. package/src/duckdb/src/catalog/default/default_functions.cpp +0 -3
  30. package/src/duckdb/src/catalog/dependency_list.cpp +7 -0
  31. package/src/duckdb/src/common/adbc/adbc.cpp +1 -56
  32. package/src/duckdb/src/common/arrow/arrow_converter.cpp +3 -2
  33. package/src/duckdb/src/common/arrow/arrow_type_extension.cpp +58 -28
  34. package/src/duckdb/src/common/arrow/schema_metadata.cpp +1 -1
  35. package/src/duckdb/src/common/compressed_file_system.cpp +6 -2
  36. package/src/duckdb/src/common/enum_util.cpp +26 -22
  37. package/src/duckdb/src/common/error_data.cpp +3 -2
  38. package/src/duckdb/src/common/gzip_file_system.cpp +8 -8
  39. package/src/duckdb/src/common/local_file_system.cpp +2 -2
  40. package/src/duckdb/src/common/multi_file_reader.cpp +1 -1
  41. package/src/duckdb/src/common/random_engine.cpp +4 -1
  42. package/src/duckdb/src/common/serializer/memory_stream.cpp +23 -19
  43. package/src/duckdb/src/common/serializer/serializer.cpp +1 -1
  44. package/src/duckdb/src/common/types/bit.cpp +1 -1
  45. package/src/duckdb/src/common/types/column/column_data_allocator.cpp +0 -5
  46. package/src/duckdb/src/common/types/column/column_data_collection.cpp +4 -1
  47. package/src/duckdb/src/common/types/data_chunk.cpp +2 -1
  48. package/src/duckdb/src/common/types/row/tuple_data_segment.cpp +0 -4
  49. package/src/duckdb/src/common/types.cpp +1 -1
  50. package/src/duckdb/src/execution/index/art/art.cpp +52 -42
  51. package/src/duckdb/src/execution/index/art/leaf.cpp +4 -9
  52. package/src/duckdb/src/execution/index/art/node.cpp +13 -13
  53. package/src/duckdb/src/execution/index/art/prefix.cpp +21 -16
  54. package/src/duckdb/src/execution/index/bound_index.cpp +6 -8
  55. package/src/duckdb/src/execution/index/fixed_size_allocator.cpp +39 -34
  56. package/src/duckdb/src/execution/index/fixed_size_buffer.cpp +2 -1
  57. package/src/duckdb/src/execution/index/unbound_index.cpp +10 -0
  58. package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +62 -44
  59. package/src/duckdb/src/execution/operator/csv_scanner/scanner/column_count_scanner.cpp +26 -0
  60. package/src/duckdb/src/execution/operator/csv_scanner/scanner/string_value_scanner.cpp +69 -40
  61. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/dialect_detection.cpp +3 -7
  62. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/header_detection.cpp +11 -5
  63. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_detection.cpp +4 -0
  64. package/src/duckdb/src/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.cpp +8 -8
  65. package/src/duckdb/src/execution/operator/csv_scanner/util/csv_error.cpp +36 -12
  66. package/src/duckdb/src/execution/operator/csv_scanner/util/csv_reader_options.cpp +12 -9
  67. package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +0 -1
  68. package/src/duckdb/src/execution/operator/persistent/physical_copy_database.cpp +29 -1
  69. package/src/duckdb/src/execution/operator/persistent/physical_delete.cpp +58 -10
  70. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +58 -35
  71. package/src/duckdb/src/execution/operator/schema/physical_create_art_index.cpp +2 -1
  72. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +9 -4
  73. package/src/duckdb/src/execution/sample/reservoir_sample.cpp +7 -6
  74. package/src/duckdb/src/function/compression_config.cpp +4 -0
  75. package/src/duckdb/src/function/function_binder.cpp +1 -1
  76. package/src/duckdb/src/function/scalar/system/write_log.cpp +2 -2
  77. package/src/duckdb/src/function/table/arrow/arrow_duck_schema.cpp +15 -2
  78. package/src/duckdb/src/function/table/arrow_conversion.cpp +10 -10
  79. package/src/duckdb/src/function/table/copy_csv.cpp +8 -5
  80. package/src/duckdb/src/function/table/read_csv.cpp +21 -4
  81. package/src/duckdb/src/function/table/sniff_csv.cpp +7 -0
  82. package/src/duckdb/src/function/table/system/duckdb_extensions.cpp +4 -0
  83. package/src/duckdb/src/function/table/system/duckdb_secret_types.cpp +71 -0
  84. package/src/duckdb/src/function/table/system_functions.cpp +1 -0
  85. package/src/duckdb/src/function/table/table_scan.cpp +120 -36
  86. package/src/duckdb/src/function/table/version/pragma_version.cpp +4 -4
  87. package/src/duckdb/src/function/window/window_aggregate_function.cpp +6 -1
  88. package/src/duckdb/src/function/window/window_boundaries_state.cpp +135 -11
  89. package/src/duckdb/src/function/window/window_segment_tree.cpp +50 -22
  90. package/src/duckdb/src/function/window/window_token_tree.cpp +4 -3
  91. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +4 -0
  92. package/src/duckdb/src/include/duckdb/catalog/catalog_search_path.hpp +2 -0
  93. package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +1 -0
  94. package/src/duckdb/src/include/duckdb/common/arrow/arrow_type_extension.hpp +4 -2
  95. package/src/duckdb/src/include/duckdb/common/enum_util.hpp +8 -8
  96. package/src/duckdb/src/include/duckdb/common/multi_file_reader.hpp +0 -2
  97. package/src/duckdb/src/include/duckdb/common/serializer/deserializer.hpp +8 -3
  98. package/src/duckdb/src/include/duckdb/common/serializer/memory_stream.hpp +6 -1
  99. package/src/duckdb/src/include/duckdb/common/serializer/serialization_data.hpp +25 -0
  100. package/src/duckdb/src/include/duckdb/common/serializer/serializer.hpp +9 -3
  101. package/src/duckdb/src/include/duckdb/common/types/selection_vector.hpp +1 -1
  102. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +11 -14
  103. package/src/duckdb/src/include/duckdb/execution/index/art/prefix.hpp +5 -4
  104. package/src/duckdb/src/include/duckdb/execution/index/bound_index.hpp +21 -10
  105. package/src/duckdb/src/include/duckdb/execution/index/fixed_size_allocator.hpp +6 -5
  106. package/src/duckdb/src/include/duckdb/execution/index/fixed_size_buffer.hpp +37 -32
  107. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/base_scanner.hpp +36 -1
  108. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/column_count_scanner.hpp +3 -0
  109. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp +2 -0
  110. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine_options.hpp +5 -5
  111. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/string_value_scanner.hpp +5 -30
  112. package/src/duckdb/src/include/duckdb/execution/reservoir_sample.hpp +7 -1
  113. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +3 -3
  114. package/src/duckdb/src/include/duckdb/function/table/arrow/arrow_duck_schema.hpp +1 -0
  115. package/src/duckdb/src/include/duckdb/function/table/system_functions.hpp +4 -0
  116. package/src/duckdb/src/include/duckdb/function/window/window_boundaries_state.hpp +2 -2
  117. package/src/duckdb/src/include/duckdb/logging/logger.hpp +40 -119
  118. package/src/duckdb/src/include/duckdb/logging/logging.hpp +0 -2
  119. package/src/duckdb/src/include/duckdb/main/config.hpp +5 -0
  120. package/src/duckdb/src/include/duckdb/main/connection.hpp +0 -8
  121. package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +2 -1
  122. package/src/duckdb/src/include/duckdb/main/extension.hpp +1 -0
  123. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +11 -7
  124. package/src/duckdb/src/include/duckdb/main/extension_helper.hpp +1 -0
  125. package/src/duckdb/src/include/duckdb/main/secret/secret.hpp +2 -0
  126. package/src/duckdb/src/include/duckdb/main/secret/secret_manager.hpp +3 -0
  127. package/src/duckdb/src/include/duckdb/main/settings.hpp +10 -0
  128. package/src/duckdb/src/include/duckdb/parser/constraint.hpp +9 -0
  129. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +36 -9
  130. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_view_info.hpp +2 -1
  131. package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +8 -2
  132. package/src/duckdb/src/include/duckdb/planner/binder.hpp +4 -0
  133. package/src/duckdb/src/include/duckdb/planner/expression/bound_parameter_data.hpp +9 -1
  134. package/src/duckdb/src/include/duckdb/planner/filter/constant_filter.hpp +1 -0
  135. package/src/duckdb/src/include/duckdb/planner/filter/in_filter.hpp +0 -2
  136. package/src/duckdb/src/include/duckdb/planner/filter/optional_filter.hpp +4 -4
  137. package/src/duckdb/src/include/duckdb/planner/table_filter.hpp +1 -1
  138. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +14 -10
  139. package/src/duckdb/src/include/duckdb/storage/index_storage_info.hpp +4 -0
  140. package/src/duckdb/src/include/duckdb/storage/single_file_block_manager.hpp +6 -1
  141. package/src/duckdb/src/include/duckdb/storage/storage_info.hpp +7 -2
  142. package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +9 -0
  143. package/src/duckdb/src/include/duckdb/storage/storage_options.hpp +2 -0
  144. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +4 -3
  145. package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +2 -0
  146. package/src/duckdb/src/include/duckdb/storage/table/table_index_list.hpp +6 -4
  147. package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +1 -1
  148. package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +2 -0
  149. package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +2 -0
  150. package/src/duckdb/src/include/duckdb/transaction/meta_transaction.hpp +1 -1
  151. package/src/duckdb/src/logging/logger.cpp +8 -66
  152. package/src/duckdb/src/main/attached_database.cpp +3 -1
  153. package/src/duckdb/src/main/client_context.cpp +4 -2
  154. package/src/duckdb/src/main/config.cpp +20 -2
  155. package/src/duckdb/src/main/connection.cpp +2 -29
  156. package/src/duckdb/src/main/connection_manager.cpp +5 -3
  157. package/src/duckdb/src/main/database.cpp +2 -2
  158. package/src/duckdb/src/main/extension/extension_helper.cpp +4 -5
  159. package/src/duckdb/src/main/extension/extension_install.cpp +23 -10
  160. package/src/duckdb/src/main/extension/extension_load.cpp +6 -7
  161. package/src/duckdb/src/main/extension.cpp +27 -9
  162. package/src/duckdb/src/main/secret/secret_manager.cpp +11 -0
  163. package/src/duckdb/src/main/settings/custom_settings.cpp +44 -0
  164. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +6 -0
  165. package/src/duckdb/src/optimizer/filter_combiner.cpp +13 -3
  166. package/src/duckdb/src/optimizer/filter_pushdown.cpp +33 -6
  167. package/src/duckdb/src/optimizer/late_materialization.cpp +14 -3
  168. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +0 -3
  169. package/src/duckdb/src/parser/parsed_data/attach_info.cpp +5 -1
  170. package/src/duckdb/src/parser/parsed_data/create_view_info.cpp +6 -3
  171. package/src/duckdb/src/parser/query_node/set_operation_node.cpp +49 -0
  172. package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +1 -0
  173. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +50 -12
  174. package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +7 -5
  175. package/src/duckdb/src/planner/binder/expression/bind_comparison_expression.cpp +1 -0
  176. package/src/duckdb/src/planner/binder/expression/bind_operator_expression.cpp +2 -2
  177. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +12 -2
  178. package/src/duckdb/src/planner/binder/statement/bind_copy_database.cpp +0 -1
  179. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +55 -39
  180. package/src/duckdb/src/planner/binder/statement/bind_execute.cpp +2 -1
  181. package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +15 -7
  182. package/src/duckdb/src/planner/binder/tableref/bind_showref.cpp +13 -8
  183. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +8 -3
  184. package/src/duckdb/src/planner/expression/bound_function_expression.cpp +17 -1
  185. package/src/duckdb/src/planner/expression_binder/index_binder.cpp +1 -0
  186. package/src/duckdb/src/planner/filter/conjunction_filter.cpp +1 -0
  187. package/src/duckdb/src/planner/filter/constant_filter.cpp +21 -0
  188. package/src/duckdb/src/planner/filter/in_filter.cpp +4 -7
  189. package/src/duckdb/src/planner/logical_operator.cpp +5 -3
  190. package/src/duckdb/src/planner/planner.cpp +1 -1
  191. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +2 -0
  192. package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +3 -4
  193. package/src/duckdb/src/storage/checkpoint_manager.cpp +3 -5
  194. package/src/duckdb/src/storage/compression/dictionary/decompression.cpp +4 -4
  195. package/src/duckdb/src/storage/compression/fsst.cpp +2 -2
  196. package/src/duckdb/src/storage/compression/roaring/common.cpp +10 -1
  197. package/src/duckdb/src/storage/compression/string_uncompressed.cpp +11 -6
  198. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +4 -0
  199. package/src/duckdb/src/storage/compression/zstd.cpp +6 -0
  200. package/src/duckdb/src/storage/data_table.cpp +104 -109
  201. package/src/duckdb/src/storage/local_storage.cpp +8 -6
  202. package/src/duckdb/src/storage/magic_bytes.cpp +1 -1
  203. package/src/duckdb/src/storage/serialization/serialize_dependency.cpp +3 -3
  204. package/src/duckdb/src/storage/serialization/serialize_nodes.cpp +3 -3
  205. package/src/duckdb/src/storage/serialization/serialize_query_node.cpp +7 -5
  206. package/src/duckdb/src/storage/single_file_block_manager.cpp +95 -28
  207. package/src/duckdb/src/storage/storage_info.cpp +38 -0
  208. package/src/duckdb/src/storage/storage_manager.cpp +11 -0
  209. package/src/duckdb/src/storage/table/column_data.cpp +4 -0
  210. package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +3 -3
  211. package/src/duckdb/src/storage/table/row_group_collection.cpp +67 -68
  212. package/src/duckdb/src/storage/table/table_statistics.cpp +4 -4
  213. package/src/duckdb/src/storage/table_index_list.cpp +41 -15
  214. package/src/duckdb/src/storage/wal_replay.cpp +3 -1
  215. package/src/duckdb/src/storage/write_ahead_log.cpp +11 -4
  216. package/src/duckdb/src/transaction/meta_transaction.cpp +1 -1
  217. package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +2 -1
  218. package/src/duckdb/third_party/httplib/httplib.hpp +0 -1
  219. package/src/duckdb/third_party/re2/util/logging.h +10 -10
  220. 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, output.size());
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, output.size(), Value(name));
116
+ output.SetValue(0, row_index, Value(alias));
112
117
  // "type", TypeId::VARCHAR
113
- output.SetValue(1, output.size(), Value(type.ToString()));
118
+ output.SetValue(1, row_index, Value(type.ToString()));
114
119
  // "null", TypeId::VARCHAR
115
- output.SetValue(2, output.size(), Value("YES"));
120
+ output.SetValue(2, row_index, Value("YES"));
116
121
  // "pk", TypeId::BOOL
117
- output.SetValue(3, output.size(), Value());
122
+ output.SetValue(3, row_index, Value());
118
123
  // "dflt_value", TypeId::VARCHAR
119
- output.SetValue(4, output.size(), Value());
124
+ output.SetValue(4, row_index, Value());
120
125
  // "extra", TypeId::VARCHAR
121
- output.SetValue(5, output.size(), Value());
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 != nullptr) {
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
- deserializer.ReadProperty(202, "is_operator", result->is_operator);
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
 
@@ -1,4 +1,5 @@
1
1
  #include "duckdb/planner/filter/conjunction_filter.hpp"
2
+
2
3
  #include "duckdb/planner/expression/bound_conjunction_expression.hpp"
3
4
 
4
5
  namespace duckdb {
@@ -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) : InFilter(std::move(values_p), false) {
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 && other.origin_is_hash_join == origin_is_hash_join;
74
+ return other.values == values;
78
75
  }
79
76
 
80
77
  unique_ptr<TableFilter> InFilter::Copy() const {
81
- return make_uniq<InFilter>(values, origin_is_hash_join);
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
- BinarySerializer serializer(stream);
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 db_options = checkpoint_manager.db.GetDatabase().config.options;
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 serialization_options;
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
- for (uint32_t i = 0; i < index_buffer_count; i++) {
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 dict = GetDictionary(segment, scan_state.handle);
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, dict, result, baseptr, current_offset, string_length);
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 dict = GetDictionary(segment, scan_state.handle);
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, dict, result, baseptr, current_offset, string_length);
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 dict = GetDictionary(segment, handle);
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, dict, result, baseptr, dict_offset, string_length);
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();