duckdb 0.8.1-dev96.0 → 0.8.1

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 (243) hide show
  1. package/binding.gyp +8 -8
  2. package/package.json +3 -1
  3. package/src/duckdb/extension/icu/icu-datepart.cpp +1 -1
  4. package/src/duckdb/extension/icu/icu-extension.cpp +1 -1
  5. package/src/duckdb/extension/icu/icu-makedate.cpp +5 -4
  6. package/src/duckdb/extension/icu/icu-strptime.cpp +1 -1
  7. package/src/duckdb/extension/icu/third_party/icu/i18n/nfsubs.cpp +0 -2
  8. package/src/duckdb/extension/json/buffered_json_reader.cpp +23 -14
  9. package/src/duckdb/extension/json/include/buffered_json_reader.hpp +6 -6
  10. package/src/duckdb/extension/json/include/json_common.hpp +12 -2
  11. package/src/duckdb/extension/json/include/json_scan.hpp +5 -2
  12. package/src/duckdb/extension/json/json_functions/json_contains.cpp +5 -0
  13. package/src/duckdb/extension/json/json_functions/json_create.cpp +10 -10
  14. package/src/duckdb/extension/json/json_functions/json_merge_patch.cpp +2 -2
  15. package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +2 -2
  16. package/src/duckdb/extension/json/json_functions/json_structure.cpp +5 -3
  17. package/src/duckdb/extension/json/json_functions/json_transform.cpp +11 -11
  18. package/src/duckdb/extension/json/json_functions/read_json.cpp +2 -1
  19. package/src/duckdb/extension/json/json_functions.cpp +6 -3
  20. package/src/duckdb/extension/json/json_scan.cpp +43 -27
  21. package/src/duckdb/extension/parquet/column_reader.cpp +5 -1
  22. package/src/duckdb/extension/parquet/include/decode_utils.hpp +6 -0
  23. package/src/duckdb/extension/parquet/parquet-extension.cpp +26 -1
  24. package/src/duckdb/src/catalog/catalog.cpp +5 -17
  25. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +7 -1
  26. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +121 -0
  27. package/src/duckdb/src/catalog/catalog_search_path.cpp +49 -12
  28. package/src/duckdb/src/catalog/default/default_types.cpp +9 -84
  29. package/src/duckdb/src/common/adbc/adbc.cpp +118 -12
  30. package/src/duckdb/src/common/adbc/driver_manager.cpp +0 -20
  31. package/src/duckdb/src/common/arrow/arrow_converter.cpp +11 -12
  32. package/src/duckdb/src/common/arrow/arrow_wrapper.cpp +4 -3
  33. package/src/duckdb/src/common/exception.cpp +4 -1
  34. package/src/duckdb/src/common/exception_format_value.cpp +24 -15
  35. package/src/duckdb/src/common/multi_file_reader.cpp +3 -0
  36. package/src/duckdb/src/common/random_engine.cpp +1 -1
  37. package/src/duckdb/src/common/types/row/row_data_collection_scanner.cpp +5 -4
  38. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +44 -7
  39. package/src/duckdb/src/common/types/time.cpp +2 -8
  40. package/src/duckdb/src/common/types/timestamp.cpp +37 -1
  41. package/src/duckdb/src/common/types/value.cpp +1 -0
  42. package/src/duckdb/src/common/types.cpp +4 -0
  43. package/src/duckdb/src/core_functions/aggregate/algebraic/avg.cpp +30 -33
  44. package/src/duckdb/src/core_functions/aggregate/algebraic/covar.cpp +0 -4
  45. package/src/duckdb/src/core_functions/aggregate/distributive/approx_count.cpp +30 -33
  46. package/src/duckdb/src/core_functions/aggregate/distributive/arg_min_max.cpp +52 -65
  47. package/src/duckdb/src/core_functions/aggregate/distributive/bitagg.cpp +48 -48
  48. package/src/duckdb/src/core_functions/aggregate/distributive/bitstring_agg.cpp +39 -40
  49. package/src/duckdb/src/core_functions/aggregate/distributive/bool.cpp +32 -32
  50. package/src/duckdb/src/core_functions/aggregate/distributive/entropy.cpp +34 -34
  51. package/src/duckdb/src/core_functions/aggregate/distributive/kurtosis.cpp +30 -31
  52. package/src/duckdb/src/core_functions/aggregate/distributive/minmax.cpp +88 -100
  53. package/src/duckdb/src/core_functions/aggregate/distributive/product.cpp +17 -17
  54. package/src/duckdb/src/core_functions/aggregate/distributive/skew.cpp +25 -27
  55. package/src/duckdb/src/core_functions/aggregate/distributive/string_agg.cpp +37 -38
  56. package/src/duckdb/src/core_functions/aggregate/distributive/sum.cpp +22 -22
  57. package/src/duckdb/src/core_functions/aggregate/holistic/approximate_quantile.cpp +44 -80
  58. package/src/duckdb/src/core_functions/aggregate/holistic/mode.cpp +49 -51
  59. package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +104 -122
  60. package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +57 -93
  61. package/src/duckdb/src/core_functions/aggregate/nested/histogram.cpp +22 -23
  62. package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +18 -19
  63. package/src/duckdb/src/core_functions/aggregate/regression/regr_avg.cpp +16 -18
  64. package/src/duckdb/src/core_functions/aggregate/regression/regr_intercept.cpp +22 -25
  65. package/src/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp +19 -24
  66. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp +18 -23
  67. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp +14 -18
  68. package/src/duckdb/src/core_functions/function_list.cpp +1 -0
  69. package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +1 -1
  70. package/src/duckdb/src/core_functions/scalar/date/make_date.cpp +3 -0
  71. package/src/duckdb/src/core_functions/scalar/generic/system_functions.cpp +14 -0
  72. package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +1 -1
  73. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +23 -6
  74. package/src/duckdb/src/core_functions/scalar/list/list_lambdas.cpp +1 -2
  75. package/src/duckdb/src/core_functions/scalar/map/map_concat.cpp +3 -0
  76. package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +3 -3
  77. package/src/duckdb/src/execution/index/art/art.cpp +80 -7
  78. package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +20 -1
  79. package/src/duckdb/src/execution/index/art/leaf.cpp +11 -11
  80. package/src/duckdb/src/execution/index/art/leaf_segment.cpp +10 -0
  81. package/src/duckdb/src/execution/index/art/node.cpp +48 -35
  82. package/src/duckdb/src/execution/index/art/node16.cpp +3 -0
  83. package/src/duckdb/src/execution/index/art/node256.cpp +1 -0
  84. package/src/duckdb/src/execution/index/art/node4.cpp +3 -0
  85. package/src/duckdb/src/execution/index/art/node48.cpp +2 -0
  86. package/src/duckdb/src/execution/index/art/prefix.cpp +2 -0
  87. package/src/duckdb/src/execution/join_hashtable.cpp +2 -0
  88. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +26 -9
  89. package/src/duckdb/src/execution/operator/helper/physical_reset.cpp +5 -2
  90. package/src/duckdb/src/execution/operator/helper/physical_set.cpp +5 -1
  91. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +3 -6
  92. package/src/duckdb/src/execution/operator/projection/physical_tableinout_function.cpp +1 -0
  93. package/src/duckdb/src/execution/operator/projection/physical_unnest.cpp +8 -3
  94. package/src/duckdb/src/execution/operator/schema/physical_attach.cpp +0 -1
  95. package/src/duckdb/src/execution/operator/schema/physical_create_index.cpp +29 -3
  96. package/src/duckdb/src/execution/reservoir_sample.cpp +18 -4
  97. package/src/duckdb/src/function/aggregate/distributive/count.cpp +159 -21
  98. package/src/duckdb/src/function/aggregate/distributive/first.cpp +67 -74
  99. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +7 -7
  100. package/src/duckdb/src/function/cast/list_casts.cpp +2 -4
  101. package/src/duckdb/src/function/pragma/pragma_queries.cpp +33 -23
  102. package/src/duckdb/src/function/scalar/list/list_extract.cpp +1 -1
  103. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +1 -1
  104. package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +6 -2
  105. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +2 -2
  106. package/src/duckdb/src/function/table/arrow.cpp +2 -2
  107. package/src/duckdb/src/function/table/checkpoint.cpp +3 -0
  108. package/src/duckdb/src/function/table/read_csv.cpp +15 -17
  109. package/src/duckdb/src/function/table/repeat.cpp +3 -0
  110. package/src/duckdb/src/function/table/repeat_row.cpp +8 -1
  111. package/src/duckdb/src/function/table/system/pragma_storage_info.cpp +4 -4
  112. package/src/duckdb/src/function/table/system/test_vector_types.cpp +81 -25
  113. package/src/duckdb/src/function/table/table_scan.cpp +2 -2
  114. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  115. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +0 -3
  116. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +2 -0
  117. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_catalog_entry.hpp +11 -1
  118. package/src/duckdb/src/include/duckdb/catalog/catalog_search_path.hpp +8 -2
  119. package/src/duckdb/src/include/duckdb/catalog/default/builtin_types/types.hpp +97 -0
  120. package/src/duckdb/src/include/duckdb/common/arrow/arrow_appender.hpp +1 -1
  121. package/src/duckdb/src/include/duckdb/common/arrow/arrow_converter.hpp +2 -3
  122. package/src/duckdb/src/include/duckdb/common/arrow/arrow_options.hpp +8 -1
  123. package/src/duckdb/src/include/duckdb/common/arrow/result_arrow_wrapper.hpp +0 -1
  124. package/src/duckdb/src/include/duckdb/common/bit_utils.hpp +16 -22
  125. package/src/duckdb/src/include/duckdb/common/exception.hpp +3 -0
  126. package/src/duckdb/src/include/duckdb/common/types/time.hpp +2 -0
  127. package/src/duckdb/src/include/duckdb/common/types/timestamp.hpp +4 -14
  128. package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +92 -57
  129. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/corr.hpp +20 -24
  130. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/covar.hpp +36 -39
  131. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/stddev.hpp +57 -53
  132. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +8 -9
  133. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_slope.hpp +16 -18
  134. package/src/duckdb/src/include/duckdb/core_functions/aggregate/sum_helpers.hpp +7 -8
  135. package/src/duckdb/src/include/duckdb/core_functions/scalar/generic_functions.hpp +9 -0
  136. package/src/duckdb/src/include/duckdb/core_functions/scalar/map_functions.hpp +2 -6
  137. package/src/duckdb/src/include/duckdb/core_functions/scalar/string_functions.hpp +16 -36
  138. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +10 -4
  139. package/src/duckdb/src/include/duckdb/execution/index/art/fixed_size_allocator.hpp +3 -0
  140. package/src/duckdb/src/include/duckdb/execution/index/art/leaf.hpp +1 -1
  141. package/src/duckdb/src/include/duckdb/execution/index/art/leaf_segment.hpp +2 -0
  142. package/src/duckdb/src/include/duckdb/execution/index/art/node.hpp +13 -3
  143. package/src/duckdb/src/include/duckdb/execution/index/art/node48.hpp +1 -0
  144. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +9 -30
  145. package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +95 -0
  146. package/src/duckdb/src/include/duckdb/function/function_serialization.hpp +4 -2
  147. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +1 -1
  148. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -1
  149. package/src/duckdb/src/include/duckdb/function/table_function.hpp +3 -2
  150. package/src/duckdb/src/include/duckdb/main/attached_database.hpp +4 -1
  151. package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +3 -1
  152. package/src/duckdb/src/include/duckdb/main/config.hpp +5 -0
  153. package/src/duckdb/src/include/duckdb/main/database_manager.hpp +1 -0
  154. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +142 -136
  155. package/src/duckdb/src/include/duckdb/main/query_result.hpp +6 -0
  156. package/src/duckdb/src/include/duckdb/main/settings.hpp +19 -0
  157. package/src/duckdb/src/include/duckdb/optimizer/unnest_rewriter.hpp +4 -0
  158. package/src/duckdb/src/include/duckdb/parallel/meta_pipeline.hpp +12 -3
  159. package/src/duckdb/src/include/duckdb/parser/parser.hpp +2 -0
  160. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +1 -1
  161. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +2 -2
  162. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +0 -2
  163. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +1 -1
  164. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +3 -0
  165. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
  166. package/src/duckdb/src/include/duckdb/planner/logical_operator.hpp +5 -0
  167. package/src/duckdb/src/include/duckdb/planner/operator/logical_copy_to_file.hpp +6 -2
  168. package/src/duckdb/src/include/duckdb/planner/operator/logical_execute.hpp +4 -0
  169. package/src/duckdb/src/include/duckdb/planner/operator/logical_explain.hpp +5 -1
  170. package/src/duckdb/src/include/duckdb/planner/operator/logical_get.hpp +5 -1
  171. package/src/duckdb/src/include/duckdb/planner/operator/logical_pragma.hpp +6 -2
  172. package/src/duckdb/src/include/duckdb/planner/operator/logical_prepare.hpp +4 -0
  173. package/src/duckdb/src/include/duckdb/storage/compression/chimp/algorithm/byte_reader.hpp +4 -0
  174. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +1 -1
  175. package/src/duckdb/src/include/duckdb/storage/in_memory_block_manager.hpp +13 -13
  176. package/src/duckdb/src/include/duckdb/storage/index.hpp +4 -2
  177. package/src/duckdb/src/include/duckdb/storage/storage_extension.hpp +0 -6
  178. package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +1 -1
  179. package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +2 -1
  180. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +2 -2
  181. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +2 -1
  182. package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +2 -1
  183. package/src/duckdb/src/include/duckdb/storage/table/struct_column_data.hpp +2 -1
  184. package/src/duckdb/src/include/duckdb/storage/table_storage_info.hpp +0 -2
  185. package/src/duckdb/src/main/attached_database.cpp +8 -0
  186. package/src/duckdb/src/main/capi/arrow-c.cpp +4 -4
  187. package/src/duckdb/src/main/capi/config-c.cpp +2 -5
  188. package/src/duckdb/src/main/client_context.cpp +4 -3
  189. package/src/duckdb/src/main/config.cpp +2 -0
  190. package/src/duckdb/src/main/database.cpp +1 -0
  191. package/src/duckdb/src/main/database_manager.cpp +21 -0
  192. package/src/duckdb/src/main/query_result.cpp +6 -2
  193. package/src/duckdb/src/main/settings/settings.cpp +41 -6
  194. package/src/duckdb/src/optimizer/unnest_rewriter.cpp +27 -16
  195. package/src/duckdb/src/parallel/executor.cpp +38 -14
  196. package/src/duckdb/src/parallel/meta_pipeline.cpp +17 -3
  197. package/src/duckdb/src/parser/column_definition.cpp +5 -8
  198. package/src/duckdb/src/parser/parsed_data/create_info.cpp +0 -3
  199. package/src/duckdb/src/parser/parser.cpp +95 -35
  200. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +1 -0
  201. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +3 -0
  202. package/src/duckdb/src/parser/transform/helpers/nodetype_to_string.cpp +0 -2
  203. package/src/duckdb/src/parser/transform/statement/transform_drop.cpp +0 -3
  204. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +3 -0
  205. package/src/duckdb/src/parser/transformer.cpp +0 -2
  206. package/src/duckdb/src/planner/bind_context.cpp +3 -4
  207. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +0 -2
  208. package/src/duckdb/src/planner/binder/expression/bind_positional_reference_expression.cpp +8 -3
  209. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +31 -15
  210. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +0 -27
  211. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +18 -1
  212. package/src/duckdb/src/planner/binder/statement/bind_drop.cpp +0 -25
  213. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +2 -114
  214. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +6 -1
  215. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +5 -0
  216. package/src/duckdb/src/planner/bound_result_modifier.cpp +14 -0
  217. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +6 -5
  218. package/src/duckdb/src/planner/expression/bound_default_expression.cpp +7 -1
  219. package/src/duckdb/src/planner/expression.cpp +3 -0
  220. package/src/duckdb/src/planner/expression_binder.cpp +3 -2
  221. package/src/duckdb/src/planner/operator/logical_distinct.cpp +5 -4
  222. package/src/duckdb/src/planner/operator/logical_pivot.cpp +14 -2
  223. package/src/duckdb/src/planner/planner.cpp +5 -15
  224. package/src/duckdb/src/storage/data_table.cpp +10 -8
  225. package/src/duckdb/src/storage/index.cpp +13 -0
  226. package/src/duckdb/src/storage/storage_manager.cpp +6 -0
  227. package/src/duckdb/src/storage/table/column_data.cpp +7 -3
  228. package/src/duckdb/src/storage/table/list_column_data.cpp +5 -4
  229. package/src/duckdb/src/storage/table/row_group.cpp +4 -3
  230. package/src/duckdb/src/storage/table/row_group_collection.cpp +6 -3
  231. package/src/duckdb/src/storage/table/standard_column_data.cpp +4 -3
  232. package/src/duckdb/src/storage/table/struct_column_data.cpp +4 -3
  233. package/src/duckdb/src/storage/wal_replay.cpp +4 -5
  234. package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +0 -1
  235. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +0 -14
  236. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +12828 -12956
  237. package/src/duckdb/third_party/zstd/compress/zstd_compress.cpp +3 -0
  238. package/src/duckdb/third_party/zstd/include/zstd/compress/zstd_cwksp.h +4 -0
  239. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +5 -5
  240. package/src/duckdb/ub_src_parser_transform_statement.cpp +0 -2
  241. package/test/extension.test.ts +11 -0
  242. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_database_info.hpp +0 -46
  243. package/src/duckdb/src/parser/transform/statement/transform_create_database.cpp +0 -27
@@ -274,7 +274,7 @@ static void ExportStateAggregateSerialize(FieldWriter &writer, const FunctionDat
274
274
  const AggregateFunction &function) {
275
275
  throw NotImplementedException("FIXME: export state serialize");
276
276
  }
277
- static unique_ptr<FunctionData> ExportStateAggregateDeserialize(ClientContext &context, FieldReader &reader,
277
+ static unique_ptr<FunctionData> ExportStateAggregateDeserialize(PlanDeserializationState &state, FieldReader &reader,
278
278
  AggregateFunction &bound_function) {
279
279
  throw NotImplementedException("FIXME: export state deserialize");
280
280
  }
@@ -283,7 +283,7 @@ static void ExportStateScalarSerialize(FieldWriter &writer, const FunctionData *
283
283
  const ScalarFunction &function) {
284
284
  throw NotImplementedException("FIXME: export state serialize");
285
285
  }
286
- static unique_ptr<FunctionData> ExportStateScalarDeserialize(ClientContext &context, FieldReader &reader,
286
+ static unique_ptr<FunctionData> ExportStateScalarDeserialize(PlanDeserializationState &state, FieldReader &reader,
287
287
  ScalarFunction &bound_function) {
288
288
  throw NotImplementedException("FIXME: export state deserialize");
289
289
  }
@@ -206,8 +206,8 @@ unique_ptr<FunctionData> ArrowTableFunction::ArrowScanBind(ClientContext &contex
206
206
  throw InvalidInputException("arrow_scan: released schema passed");
207
207
  }
208
208
  if (schema.dictionary) {
209
- res->arrow_convert_data[col_idx] =
210
- make_uniq<ArrowConvertData>(GetArrowLogicalType(schema, res->arrow_convert_data, col_idx));
209
+ auto logical_type = GetArrowLogicalType(schema, res->arrow_convert_data, col_idx);
210
+ res->arrow_convert_data[col_idx] = make_uniq<ArrowConvertData>(std::move(logical_type));
211
211
  return_types.emplace_back(GetArrowLogicalType(*schema.dictionary, res->arrow_convert_data, col_idx));
212
212
  } else {
213
213
  return_types.emplace_back(GetArrowLogicalType(schema, res->arrow_convert_data, col_idx));
@@ -32,6 +32,9 @@ static unique_ptr<FunctionData> CheckpointBind(ClientContext &context, TableFunc
32
32
  optional_ptr<AttachedDatabase> db;
33
33
  auto &db_manager = DatabaseManager::Get(context);
34
34
  if (!input.inputs.empty()) {
35
+ if (input.inputs[0].IsNull()) {
36
+ throw BinderException("Database cannot be NULL");
37
+ }
35
38
  auto &db_name = StringValue::Get(input.inputs[0]);
36
39
  db = db_manager.GetDatabase(context, db_name);
37
40
  if (!db) {
@@ -378,8 +378,8 @@ private:
378
378
  //! Current File Number
379
379
  idx_t file_number = 0;
380
380
  idx_t max_tuple_end = 0;
381
- //! the vector stores positions where threads ended the last line they read in the CSV File, and the set stores
382
- //! positions where they started reading the first line.
381
+ //! The vector stores positions where threads ended the last line they read in the CSV File, and the set stores
382
+ //! Positions where they started reading the first line.
383
383
  vector<vector<idx_t>> tuple_end;
384
384
  vector<set<idx_t>> tuple_start;
385
385
  //! Tuple end to batch
@@ -424,6 +424,7 @@ bool ParallelCSVGlobalState::Finished() {
424
424
 
425
425
  void ParallelCSVGlobalState::Verify() {
426
426
  // All threads are done, we run some magic sweet verification code
427
+ lock_guard<mutex> parallel_lock(main_mutex);
427
428
  if (running_threads == 0) {
428
429
  D_ASSERT(tuple_end.size() == tuple_start.size());
429
430
  for (idx_t i = 0; i < tuple_start.size(); i++) {
@@ -559,15 +560,13 @@ bool ParallelCSVGlobalState::Next(ClientContext &context, const ReadCSVData &bin
559
560
  }
560
561
  void ParallelCSVGlobalState::UpdateVerification(VerificationPositions positions, idx_t file_number_p, idx_t batch_idx) {
561
562
  lock_guard<mutex> parallel_lock(main_mutex);
562
- if (positions.beginning_of_first_line < positions.end_of_last_line) {
563
- if (positions.end_of_last_line > max_tuple_end) {
564
- max_tuple_end = positions.end_of_last_line;
565
- }
566
- tuple_end_to_batch[file_number_p][positions.end_of_last_line] = batch_idx;
567
- batch_to_tuple_end[file_number_p][batch_idx] = tuple_end[file_number_p].size();
568
- tuple_start[file_number_p].insert(positions.beginning_of_first_line);
569
- tuple_end[file_number_p].push_back(positions.end_of_last_line);
563
+ if (positions.end_of_last_line > max_tuple_end) {
564
+ max_tuple_end = positions.end_of_last_line;
570
565
  }
566
+ tuple_end_to_batch[file_number_p][positions.end_of_last_line] = batch_idx;
567
+ batch_to_tuple_end[file_number_p][batch_idx] = tuple_end[file_number_p].size();
568
+ tuple_start[file_number_p].insert(positions.beginning_of_first_line);
569
+ tuple_end[file_number_p].push_back(positions.end_of_last_line);
571
570
  }
572
571
 
573
572
  void ParallelCSVGlobalState::UpdateLinesRead(CSVBufferRead &buffer_read, idx_t file_idx) {
@@ -690,17 +689,14 @@ static void ParallelReadCSVFunction(ClientContext &context, TableFunctionInput &
690
689
  }
691
690
  if (csv_local_state.csv_reader->finished) {
692
691
  auto verification_updates = csv_local_state.csv_reader->GetVerificationPositions();
693
- if (verification_updates.beginning_of_first_line != verification_updates.end_of_last_line) {
694
- csv_global_state.UpdateVerification(verification_updates,
695
- csv_local_state.csv_reader->buffer->buffer->GetFileNumber(),
696
- csv_local_state.csv_reader->buffer->local_batch_index);
697
- }
692
+ csv_global_state.UpdateVerification(verification_updates,
693
+ csv_local_state.csv_reader->buffer->buffer->GetFileNumber(),
694
+ csv_local_state.csv_reader->buffer->local_batch_index);
698
695
  csv_global_state.UpdateLinesRead(*csv_local_state.csv_reader->buffer, csv_local_state.csv_reader->file_idx);
699
696
  auto has_next = csv_global_state.Next(context, bind_data, csv_local_state.csv_reader);
700
697
  if (csv_local_state.csv_reader) {
701
698
  csv_local_state.csv_reader->linenr = 0;
702
699
  }
703
-
704
700
  if (!has_next) {
705
701
  csv_global_state.DecrementThread();
706
702
  break;
@@ -1117,6 +1113,7 @@ void BufferedCSVReaderOptions::Deserialize(FieldReader &reader) {
1117
1113
 
1118
1114
  static void CSVReaderSerialize(FieldWriter &writer, const FunctionData *bind_data_p, const TableFunction &function) {
1119
1115
  auto &bind_data = bind_data_p->Cast<ReadCSVData>();
1116
+ writer.WriteString(function.extra_info);
1120
1117
  writer.WriteList<string>(bind_data.files);
1121
1118
  writer.WriteRegularSerializableList<LogicalType>(bind_data.csv_types);
1122
1119
  writer.WriteList<string>(bind_data.csv_names);
@@ -1133,8 +1130,9 @@ static void CSVReaderSerialize(FieldWriter &writer, const FunctionData *bind_dat
1133
1130
  }
1134
1131
  }
1135
1132
 
1136
- static unique_ptr<FunctionData> CSVReaderDeserialize(ClientContext &context, FieldReader &reader,
1133
+ static unique_ptr<FunctionData> CSVReaderDeserialize(PlanDeserializationState &state, FieldReader &reader,
1137
1134
  TableFunction &function) {
1135
+ function.extra_info = reader.ReadRequired<string>();
1138
1136
  auto result_data = make_uniq<ReadCSVData>();
1139
1137
  result_data->files = reader.ReadRequiredList<string>();
1140
1138
  result_data->csv_types = reader.ReadRequiredSerializableList<LogicalType, LogicalType>();
@@ -23,6 +23,9 @@ static unique_ptr<FunctionData> RepeatBind(ClientContext &context, TableFunction
23
23
  auto &inputs = input.inputs;
24
24
  return_types.push_back(inputs[0].type());
25
25
  names.push_back(inputs[0].ToString());
26
+ if (inputs[1].IsNull()) {
27
+ throw BinderException("Repeat second parameter cannot be NULL");
28
+ }
26
29
  return make_uniq<RepeatFunctionData>(inputs[0], inputs[1].GetValue<int64_t>());
27
30
  }
28
31
 
@@ -25,7 +25,14 @@ static unique_ptr<FunctionData> RepeatRowBind(ClientContext &context, TableFunct
25
25
  return_types.push_back(inputs[input_idx].type());
26
26
  names.push_back("column" + std::to_string(input_idx));
27
27
  }
28
- return make_uniq<RepeatRowFunctionData>(inputs, input.named_parameters["num_rows"].GetValue<int64_t>());
28
+ auto entry = input.named_parameters.find("num_rows");
29
+ if (entry == input.named_parameters.end()) {
30
+ throw BinderException("repeat_rows requires num_rows to be specified");
31
+ }
32
+ if (inputs.empty()) {
33
+ throw BinderException("repeat_rows requires at least one column to be specified");
34
+ }
35
+ return make_uniq<RepeatRowFunctionData>(inputs, entry->second.GetValue<int64_t>());
29
36
  }
30
37
 
31
38
  static unique_ptr<GlobalTableFunctionState> RepeatRowInit(ClientContext &context, TableFunctionInitInput &input) {
@@ -22,7 +22,7 @@ struct PragmaStorageFunctionData : public TableFunctionData {
22
22
  }
23
23
 
24
24
  TableCatalogEntry &table_entry;
25
- TableStorageInfo storage_info;
25
+ vector<ColumnSegmentInfo> column_segments_info;
26
26
  };
27
27
 
28
28
  struct PragmaStorageOperatorData : public GlobalTableFunctionState {
@@ -82,7 +82,7 @@ static unique_ptr<FunctionData> PragmaStorageInfoBind(ClientContext &context, Ta
82
82
  Binder::BindSchemaOrCatalog(context, qname.catalog, qname.schema);
83
83
  auto &table_entry = Catalog::GetEntry<TableCatalogEntry>(context, qname.catalog, qname.schema, qname.name);
84
84
  auto result = make_uniq<PragmaStorageFunctionData>(table_entry);
85
- result->storage_info = table_entry.GetStorageInfo(context);
85
+ result->column_segments_info = table_entry.GetColumnSegmentInfo();
86
86
  return std::move(result);
87
87
  }
88
88
 
@@ -95,8 +95,8 @@ static void PragmaStorageInfoFunction(ClientContext &context, TableFunctionInput
95
95
  auto &data = data_p.global_state->Cast<PragmaStorageOperatorData>();
96
96
  idx_t count = 0;
97
97
  auto &columns = bind_data.table_entry.GetColumns();
98
- while (data.offset < bind_data.storage_info.column_segments.size() && count < STANDARD_VECTOR_SIZE) {
99
- auto &entry = bind_data.storage_info.column_segments[data.offset++];
98
+ while (data.offset < bind_data.column_segments_info.size() && count < STANDARD_VECTOR_SIZE) {
99
+ auto &entry = bind_data.column_segments_info[data.offset++];
100
100
 
101
101
  idx_t col_idx = 0;
102
102
  // row_group_id
@@ -6,8 +6,8 @@ namespace duckdb {
6
6
 
7
7
  // FLAT, CONSTANT, DICTIONARY, SEQUENCE
8
8
  struct TestVectorBindData : public TableFunctionData {
9
- LogicalType type;
10
- bool all_flat;
9
+ vector<LogicalType> types;
10
+ bool all_flat = false;
11
11
  };
12
12
 
13
13
  struct TestVectorTypesData : public GlobalTableFunctionState {
@@ -19,16 +19,41 @@ struct TestVectorTypesData : public GlobalTableFunctionState {
19
19
  };
20
20
 
21
21
  struct TestVectorInfo {
22
- TestVectorInfo(const LogicalType &type, const map<LogicalTypeId, TestType> &test_type_map,
22
+ TestVectorInfo(const vector<LogicalType> &types, const map<LogicalTypeId, TestType> &test_type_map,
23
23
  vector<unique_ptr<DataChunk>> &entries)
24
- : type(type), test_type_map(test_type_map), entries(entries) {
24
+ : types(types), test_type_map(test_type_map), entries(entries) {
25
25
  }
26
26
 
27
- const LogicalType &type;
27
+ const vector<LogicalType> &types;
28
28
  const map<LogicalTypeId, TestType> &test_type_map;
29
29
  vector<unique_ptr<DataChunk>> &entries;
30
30
  };
31
31
 
32
+ struct TestGeneratedValues {
33
+ public:
34
+ void AddColumn(vector<Value> values) {
35
+ if (!column_values.empty() && column_values[0].size() != values.size()) {
36
+ throw InternalException("Size mismatch when adding a column to TestGeneratedValues");
37
+ }
38
+ column_values.push_back(std::move(values));
39
+ }
40
+
41
+ const Value &GetValue(idx_t row, idx_t column) const {
42
+ return column_values[column][row];
43
+ }
44
+
45
+ idx_t Rows() const {
46
+ return column_values.empty() ? 0 : column_values[0].size();
47
+ }
48
+
49
+ idx_t Columns() const {
50
+ return column_values.size();
51
+ }
52
+
53
+ private:
54
+ vector<vector<Value>> column_values;
55
+ };
56
+
32
57
  struct TestVectorFlat {
33
58
  static constexpr const idx_t TEST_VECTOR_CARDINALITY = 3;
34
59
 
@@ -75,14 +100,25 @@ struct TestVectorFlat {
75
100
  return result;
76
101
  }
77
102
 
103
+ static TestGeneratedValues GenerateValues(TestVectorInfo &info) {
104
+ // generate the values for each column
105
+ TestGeneratedValues generated_values;
106
+ for (auto &type : info.types) {
107
+ generated_values.AddColumn(GenerateValues(info, type));
108
+ }
109
+ return generated_values;
110
+ }
111
+
78
112
  static void Generate(TestVectorInfo &info) {
79
- vector<Value> result_values = GenerateValues(info, info.type);
80
- for (idx_t cur_row = 0; cur_row < result_values.size(); cur_row += STANDARD_VECTOR_SIZE) {
113
+ auto result_values = GenerateValues(info);
114
+ for (idx_t cur_row = 0; cur_row < result_values.Rows(); cur_row += STANDARD_VECTOR_SIZE) {
81
115
  auto result = make_uniq<DataChunk>();
82
- result->Initialize(Allocator::DefaultAllocator(), {info.type});
83
- auto cardinality = MinValue<idx_t>(STANDARD_VECTOR_SIZE, result_values.size() - cur_row);
84
- for (idx_t i = 0; i < cardinality; i++) {
85
- result->data[0].SetValue(i, result_values[cur_row + i]);
116
+ result->Initialize(Allocator::DefaultAllocator(), info.types);
117
+ auto cardinality = MinValue<idx_t>(STANDARD_VECTOR_SIZE, result_values.Rows() - cur_row);
118
+ for (idx_t c = 0; c < info.types.size(); c++) {
119
+ for (idx_t i = 0; i < cardinality; i++) {
120
+ result->data[c].SetValue(i, result_values.GetValue(cur_row + i, c));
121
+ }
86
122
  }
87
123
  result->SetCardinality(cardinality);
88
124
  info.entries.push_back(std::move(result));
@@ -92,13 +128,15 @@ struct TestVectorFlat {
92
128
 
93
129
  struct TestVectorConstant {
94
130
  static void Generate(TestVectorInfo &info) {
95
- auto values = TestVectorFlat::GenerateValues(info, info.type);
131
+ auto values = TestVectorFlat::GenerateValues(info);
96
132
  for (idx_t cur_row = 0; cur_row < TestVectorFlat::TEST_VECTOR_CARDINALITY; cur_row += STANDARD_VECTOR_SIZE) {
97
133
  auto result = make_uniq<DataChunk>();
98
- result->Initialize(Allocator::DefaultAllocator(), {info.type});
134
+ result->Initialize(Allocator::DefaultAllocator(), info.types);
99
135
  auto cardinality = MinValue<idx_t>(STANDARD_VECTOR_SIZE, TestVectorFlat::TEST_VECTOR_CARDINALITY - cur_row);
100
- result->data[0].SetValue(0, values[0]);
101
- result->data[0].SetVectorType(VectorType::CONSTANT_VECTOR);
136
+ for (idx_t c = 0; c < info.types.size(); c++) {
137
+ result->data[c].SetValue(0, values.GetValue(0, c));
138
+ result->data[c].SetVectorType(VectorType::CONSTANT_VECTOR);
139
+ }
102
140
  result->SetCardinality(cardinality);
103
141
 
104
142
  info.entries.push_back(std::move(result));
@@ -160,9 +198,11 @@ struct TestVectorSequence {
160
198
  static void Generate(TestVectorInfo &info) {
161
199
  #if STANDARD_VECTOR_SIZE > 2
162
200
  auto result = make_uniq<DataChunk>();
163
- result->Initialize(Allocator::DefaultAllocator(), {info.type});
201
+ result->Initialize(Allocator::DefaultAllocator(), info.types);
164
202
 
165
- GenerateVector(info, info.type, result->data[0]);
203
+ for (idx_t c = 0; c < info.types.size(); c++) {
204
+ GenerateVector(info, info.types[c], result->data[c]);
205
+ }
166
206
  result->SetCardinality(3);
167
207
  info.entries.push_back(std::move(result));
168
208
  #endif
@@ -195,11 +235,23 @@ struct TestVectorDictionary {
195
235
  static unique_ptr<FunctionData> TestVectorTypesBind(ClientContext &context, TableFunctionBindInput &input,
196
236
  vector<LogicalType> &return_types, vector<string> &names) {
197
237
  auto result = make_uniq<TestVectorBindData>();
198
- result->type = input.inputs[0].type();
199
- result->all_flat = BooleanValue::Get(input.inputs[1]);
200
-
201
- return_types.push_back(result->type);
202
- names.emplace_back("test_vector");
238
+ for (idx_t i = 0; i < input.inputs.size(); i++) {
239
+ string name = "test_vector";
240
+ if (i > 0) {
241
+ name += to_string(i + 1);
242
+ }
243
+ auto &input_val = input.inputs[i];
244
+ names.emplace_back(name);
245
+ return_types.push_back(input_val.type());
246
+ result->types.push_back(input_val.type());
247
+ }
248
+ for (auto &entry : input.named_parameters) {
249
+ if (entry.first == "all_flat") {
250
+ result->all_flat = BooleanValue::Get(entry.second);
251
+ } else {
252
+ throw InternalException("Unrecognized named parameter for test_vector_types");
253
+ }
254
+ }
203
255
  return std::move(result);
204
256
  }
205
257
 
@@ -215,7 +267,7 @@ unique_ptr<GlobalTableFunctionState> TestVectorTypesInit(ClientContext &context,
215
267
  test_type_map.insert(make_pair(test_type.type.id(), std::move(test_type)));
216
268
  }
217
269
 
218
- TestVectorInfo info(bind_data.type, test_type_map, result->entries);
270
+ TestVectorInfo info(bind_data.types, test_type_map, result->entries);
219
271
  TestVectorFlat::Generate(info);
220
272
  TestVectorConstant::Generate(info);
221
273
  TestVectorDictionary::Generate(info);
@@ -243,8 +295,12 @@ void TestVectorTypesFunction(ClientContext &context, TableFunctionInput &data_p,
243
295
  }
244
296
 
245
297
  void TestVectorTypesFun::RegisterFunction(BuiltinFunctions &set) {
246
- set.AddFunction(TableFunction("test_vector_types", {LogicalType::ANY, LogicalType::BOOLEAN},
247
- TestVectorTypesFunction, TestVectorTypesBind, TestVectorTypesInit));
298
+ TableFunction test_vector_types("test_vector_types", {LogicalType::ANY}, TestVectorTypesFunction,
299
+ TestVectorTypesBind, TestVectorTypesInit);
300
+ test_vector_types.varargs = LogicalType::ANY;
301
+ test_vector_types.named_parameters["all_flat"] = LogicalType::BOOLEAN;
302
+
303
+ set.AddFunction(std::move(test_vector_types));
248
304
  }
249
305
 
250
306
  } // namespace duckdb
@@ -417,7 +417,7 @@ static void TableScanSerialize(FieldWriter &writer, const FunctionData *bind_dat
417
417
  writer.WriteString(bind_data.table.schema.catalog.GetName());
418
418
  }
419
419
 
420
- static unique_ptr<FunctionData> TableScanDeserialize(ClientContext &context, FieldReader &reader,
420
+ static unique_ptr<FunctionData> TableScanDeserialize(PlanDeserializationState &state, FieldReader &reader,
421
421
  TableFunction &function) {
422
422
  auto schema_name = reader.ReadRequired<string>();
423
423
  auto table_name = reader.ReadRequired<string>();
@@ -426,7 +426,7 @@ static unique_ptr<FunctionData> TableScanDeserialize(ClientContext &context, Fie
426
426
  auto result_ids = reader.ReadRequiredList<row_t>();
427
427
  auto catalog_name = reader.ReadField<string>(INVALID_CATALOG);
428
428
 
429
- auto &catalog_entry = Catalog::GetEntry<TableCatalogEntry>(context, catalog_name, schema_name, table_name);
429
+ auto &catalog_entry = Catalog::GetEntry<TableCatalogEntry>(state.context, catalog_name, schema_name, table_name);
430
430
  if (catalog_entry.type != CatalogType::TABLE_ENTRY) {
431
431
  throw SerializationException("Cant find table for %s.%s", schema_name, table_name);
432
432
  }
@@ -1,8 +1,8 @@
1
1
  #ifndef DUCKDB_VERSION
2
- #define DUCKDB_VERSION "0.8.1-dev96"
2
+ #define DUCKDB_VERSION "0.8.1"
3
3
  #endif
4
4
  #ifndef DUCKDB_SOURCE_ID
5
- #define DUCKDB_SOURCE_ID "faf428bcd3"
5
+ #define DUCKDB_SOURCE_ID "6536a77232"
6
6
  #endif
7
7
  #include "duckdb/function/table/system_functions.hpp"
8
8
  #include "duckdb/main/database.hpp"
@@ -229,9 +229,6 @@ public:
229
229
  DUCKDB_API static LogicalType GetType(ClientContext &context, const string &catalog_name, const string &schema,
230
230
  const string &name);
231
231
 
232
- static bool TypeExists(ClientContext &context, const string &catalog_name, const string &schema,
233
- const string &name);
234
-
235
232
  template <class T>
236
233
  optional_ptr<T> GetEntry(ClientContext &context, const string &schema_name, const string &name,
237
234
  OnEntryNotFound if_not_found, QueryErrorContext error_context = QueryErrorContext()) {
@@ -39,6 +39,8 @@ public:
39
39
 
40
40
  TableFunction GetScanFunction(ClientContext &context, unique_ptr<FunctionData> &bind_data) override;
41
41
 
42
+ vector<ColumnSegmentInfo> GetColumnSegmentInfo() override;
43
+
42
44
  TableStorageInfo GetStorageInfo(ClientContext &context) override;
43
45
 
44
46
  bool IsDuckTable() const override {
@@ -37,9 +37,13 @@ class TableFunction;
37
37
  struct FunctionData;
38
38
 
39
39
  class TableColumnInfo;
40
- class TableIndexInfo;
40
+ struct ColumnSegmentInfo;
41
41
  class TableStorageInfo;
42
42
 
43
+ class LogicalGet;
44
+ class LogicalProjection;
45
+ class LogicalUpdate;
46
+
43
47
  //! A table catalog entry
44
48
  class TableCatalogEntry : public StandardEntry {
45
49
  public:
@@ -99,9 +103,15 @@ public:
99
103
 
100
104
  DUCKDB_API static string ColumnsToSQL(const ColumnList &columns, const vector<unique_ptr<Constraint>> &constraints);
101
105
 
106
+ //! Returns a list of segment information for this table, if exists
107
+ virtual vector<ColumnSegmentInfo> GetColumnSegmentInfo();
108
+
102
109
  //! Returns the storage info of this table
103
110
  virtual TableStorageInfo GetStorageInfo(ClientContext &context) = 0;
104
111
 
112
+ virtual void BindUpdateConstraints(LogicalGet &get, LogicalProjection &proj, LogicalUpdate &update,
113
+ ClientContext &context);
114
+
105
115
  protected:
106
116
  // This is used to serialize the entry by #Serialize(Serializer& ). It is virtual to allow
107
117
  // Custom catalog implementations to override the default implementation. We can not make
@@ -35,14 +35,16 @@ private:
35
35
  static string WriteOptionallyQuoted(const string &input);
36
36
  };
37
37
 
38
+ enum class CatalogSetPathType { SET_SCHEMA, SET_SCHEMAS };
39
+
38
40
  //! The schema search path, in order by which entries are searched if no schema entry is provided
39
41
  class CatalogSearchPath {
40
42
  public:
41
43
  DUCKDB_API explicit CatalogSearchPath(ClientContext &client_p);
42
44
  CatalogSearchPath(const CatalogSearchPath &other) = delete;
43
45
 
44
- DUCKDB_API void Set(CatalogSearchEntry new_value, bool is_set_schema);
45
- DUCKDB_API void Set(vector<CatalogSearchEntry> new_paths, bool is_set_schema = false);
46
+ DUCKDB_API void Set(CatalogSearchEntry new_value, CatalogSetPathType set_type);
47
+ DUCKDB_API void Set(vector<CatalogSearchEntry> new_paths, CatalogSetPathType set_type);
46
48
  DUCKDB_API void Reset();
47
49
 
48
50
  DUCKDB_API const vector<CatalogSearchEntry> &Get();
@@ -56,9 +58,13 @@ public:
56
58
  DUCKDB_API vector<string> GetSchemasForCatalog(const string &catalog);
57
59
  DUCKDB_API vector<string> GetCatalogsForSchema(const string &schema);
58
60
 
61
+ DUCKDB_API bool SchemaInSearchPath(ClientContext &context, const string &catalog_name, const string &schema_name);
62
+
59
63
  private:
60
64
  void SetPaths(vector<CatalogSearchEntry> new_paths);
61
65
 
66
+ string GetSetName(CatalogSetPathType set_type);
67
+
62
68
  private:
63
69
  ClientContext &context;
64
70
  vector<CatalogSearchEntry> paths;
@@ -0,0 +1,97 @@
1
+ //===----------------------------------------------------------------------===//
2
+ // DuckDB
3
+ //
4
+ // duckdb/catalog/default/builtin_types/types.hpp
5
+ //
6
+ //
7
+ //===----------------------------------------------------------------------===//
8
+ // This file is generated by scripts/generate_builtin_types.py
9
+
10
+ #pragma once
11
+
12
+ #include "duckdb/common/types.hpp"
13
+ #include "duckdb/common/array.hpp"
14
+
15
+ namespace duckdb {
16
+
17
+ struct DefaultType {
18
+ const char *name;
19
+ LogicalTypeId type;
20
+ };
21
+
22
+ using builtin_type_array = std::array<DefaultType, 70>;
23
+
24
+ static constexpr const builtin_type_array BUILTIN_TYPES{{
25
+ {"decimal", LogicalTypeId::DECIMAL},
26
+ {"dec", LogicalTypeId::DECIMAL},
27
+ {"numeric", LogicalTypeId::DECIMAL},
28
+ {"time", LogicalTypeId::TIME},
29
+ {"date", LogicalTypeId::DATE},
30
+ {"timestamp", LogicalTypeId::TIMESTAMP},
31
+ {"datetime", LogicalTypeId::TIMESTAMP},
32
+ {"timestamp_us", LogicalTypeId::TIMESTAMP},
33
+ {"timestamp_ms", LogicalTypeId::TIMESTAMP_MS},
34
+ {"timestamp_ns", LogicalTypeId::TIMESTAMP_NS},
35
+ {"timestamp_s", LogicalTypeId::TIMESTAMP_SEC},
36
+ {"timestamptz", LogicalTypeId::TIMESTAMP_TZ},
37
+ {"timetz", LogicalTypeId::TIME_TZ},
38
+ {"interval", LogicalTypeId::INTERVAL},
39
+ {"varchar", LogicalTypeId::VARCHAR},
40
+ {"bpchar", LogicalTypeId::VARCHAR},
41
+ {"string", LogicalTypeId::VARCHAR},
42
+ {"char", LogicalTypeId::VARCHAR},
43
+ {"nvarchar", LogicalTypeId::VARCHAR},
44
+ {"text", LogicalTypeId::VARCHAR},
45
+ {"blob", LogicalTypeId::BLOB},
46
+ {"bytea", LogicalTypeId::BLOB},
47
+ {"varbinary", LogicalTypeId::BLOB},
48
+ {"binary", LogicalTypeId::BLOB},
49
+ {"hugeint", LogicalTypeId::HUGEINT},
50
+ {"int128", LogicalTypeId::HUGEINT},
51
+ {"bigint", LogicalTypeId::BIGINT},
52
+ {"oid", LogicalTypeId::BIGINT},
53
+ {"long", LogicalTypeId::BIGINT},
54
+ {"int8", LogicalTypeId::BIGINT},
55
+ {"int64", LogicalTypeId::BIGINT},
56
+ {"ubigint", LogicalTypeId::UBIGINT},
57
+ {"uint64", LogicalTypeId::UBIGINT},
58
+ {"integer", LogicalTypeId::INTEGER},
59
+ {"int", LogicalTypeId::INTEGER},
60
+ {"int4", LogicalTypeId::INTEGER},
61
+ {"signed", LogicalTypeId::INTEGER},
62
+ {"integral", LogicalTypeId::INTEGER},
63
+ {"int32", LogicalTypeId::INTEGER},
64
+ {"uinteger", LogicalTypeId::UINTEGER},
65
+ {"uint32", LogicalTypeId::UINTEGER},
66
+ {"smallint", LogicalTypeId::SMALLINT},
67
+ {"int2", LogicalTypeId::SMALLINT},
68
+ {"short", LogicalTypeId::SMALLINT},
69
+ {"int16", LogicalTypeId::SMALLINT},
70
+ {"usmallint", LogicalTypeId::USMALLINT},
71
+ {"uint16", LogicalTypeId::USMALLINT},
72
+ {"tinyint", LogicalTypeId::TINYINT},
73
+ {"int1", LogicalTypeId::TINYINT},
74
+ {"utinyint", LogicalTypeId::UTINYINT},
75
+ {"uint8", LogicalTypeId::UTINYINT},
76
+ {"struct", LogicalTypeId::STRUCT},
77
+ {"row", LogicalTypeId::STRUCT},
78
+ {"list", LogicalTypeId::LIST},
79
+ {"map", LogicalTypeId::MAP},
80
+ {"union", LogicalTypeId::UNION},
81
+ {"bit", LogicalTypeId::BIT},
82
+ {"bitstring", LogicalTypeId::BIT},
83
+ {"boolean", LogicalTypeId::BOOLEAN},
84
+ {"bool", LogicalTypeId::BOOLEAN},
85
+ {"logical", LogicalTypeId::BOOLEAN},
86
+ {"uuid", LogicalTypeId::UUID},
87
+ {"guid", LogicalTypeId::UUID},
88
+ {"enum", LogicalTypeId::ENUM},
89
+ {"null", LogicalTypeId::SQLNULL},
90
+ {"float", LogicalTypeId::FLOAT},
91
+ {"real", LogicalTypeId::FLOAT},
92
+ {"float4", LogicalTypeId::FLOAT},
93
+ {"double", LogicalTypeId::DOUBLE},
94
+ {"float8", LogicalTypeId::DOUBLE}
95
+ }};
96
+
97
+ } // namespace duckdb
@@ -19,7 +19,7 @@ struct ArrowAppendData;
19
19
  //! The ArrowAppender class can be used to incrementally construct an arrow array by appending data chunks into it
20
20
  class ArrowAppender {
21
21
  public:
22
- DUCKDB_API ArrowAppender(vector<LogicalType> types, idx_t initial_capacity, ArrowOptions options = ArrowOptions());
22
+ DUCKDB_API ArrowAppender(vector<LogicalType> types, idx_t initial_capacity, ArrowOptions options);
23
23
  DUCKDB_API ~ArrowAppender();
24
24
 
25
25
  //! Append a data chunk to the underlying arrow array
@@ -18,9 +18,8 @@ namespace duckdb {
18
18
 
19
19
  struct ArrowConverter {
20
20
  DUCKDB_API static void ToArrowSchema(ArrowSchema *out_schema, const vector<LogicalType> &types,
21
- const vector<string> &names, const string &config_timezone,
22
- ArrowOptions options = ArrowOptions());
23
- DUCKDB_API static void ToArrowArray(DataChunk &input, ArrowArray *out_array, ArrowOptions options = ArrowOptions());
21
+ const vector<string> &names, const ArrowOptions &options);
22
+ DUCKDB_API static void ToArrowArray(DataChunk &input, ArrowArray *out_array, ArrowOptions options);
24
23
  };
25
24
 
26
25
  } // namespace duckdb
@@ -13,6 +13,13 @@ namespace duckdb {
13
13
  enum ArrowOffsetSize { REGULAR, LARGE };
14
14
 
15
15
  struct ArrowOptions {
16
- ArrowOffsetSize offset_size = ArrowOffsetSize::LARGE;
16
+ explicit ArrowOptions(ArrowOffsetSize offset_size_p) : offset_size(offset_size_p) {
17
+ }
18
+ ArrowOptions(ArrowOffsetSize offset_size_p, string timezone_p) : offset_size(offset_size_p), time_zone(timezone_p) {
19
+ }
20
+ ArrowOptions() {
21
+ }
22
+ ArrowOffsetSize offset_size = ArrowOffsetSize::REGULAR;
23
+ string time_zone = "UTC";
17
24
  };
18
25
  } // namespace duckdb
@@ -21,7 +21,6 @@ public:
21
21
  idx_t batch_size;
22
22
  vector<LogicalType> column_types;
23
23
  vector<string> column_names;
24
- string timezone_config;
25
24
 
26
25
  private:
27
26
  static int MyStreamGetSchema(struct ArrowArrayStream *stream, struct ArrowSchema *out);