duckdb 0.10.2-dev0.0 → 0.10.2-dev5.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 (700) hide show
  1. package/binding.gyp +22 -18
  2. package/binding.gyp.in +3 -0
  3. package/package.json +1 -1
  4. package/src/duckdb/extension/icu/icu-timezone.cpp +3 -1
  5. package/src/duckdb/extension/icu/icu_extension.cpp +6 -2
  6. package/src/duckdb/extension/json/buffered_json_reader.cpp +10 -3
  7. package/src/duckdb/extension/json/include/buffered_json_reader.hpp +2 -0
  8. package/src/duckdb/extension/json/include/json_scan.hpp +13 -7
  9. package/src/duckdb/extension/json/include/json_serializer.hpp +5 -4
  10. package/src/duckdb/extension/json/include/json_structure.hpp +3 -3
  11. package/src/duckdb/extension/json/json_functions/json_serialize_plan.cpp +15 -5
  12. package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +15 -6
  13. package/src/duckdb/extension/json/json_functions/json_structure.cpp +21 -20
  14. package/src/duckdb/extension/json/json_functions/read_json.cpp +37 -3
  15. package/src/duckdb/extension/json/json_functions.cpp +7 -2
  16. package/src/duckdb/extension/json/json_scan.cpp +57 -33
  17. package/src/duckdb/extension/parquet/column_reader.cpp +12 -3
  18. package/src/duckdb/extension/parquet/column_writer.cpp +44 -7
  19. package/src/duckdb/extension/parquet/include/parquet_writer.hpp +5 -1
  20. package/src/duckdb/extension/parquet/parquet_extension.cpp +30 -3
  21. package/src/duckdb/extension/parquet/parquet_metadata.cpp +1 -1
  22. package/src/duckdb/extension/parquet/parquet_writer.cpp +4 -2
  23. package/src/duckdb/extension/parquet/zstd_file_system.cpp +1 -1
  24. package/src/duckdb/src/catalog/catalog.cpp +5 -1
  25. package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +21 -5
  26. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +8 -9
  27. package/src/duckdb/src/catalog/catalog_entry/index_catalog_entry.cpp +3 -7
  28. package/src/duckdb/src/catalog/catalog_entry/sequence_catalog_entry.cpp +1 -1
  29. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +6 -7
  30. package/src/duckdb/src/catalog/catalog_entry.cpp +8 -0
  31. package/src/duckdb/src/catalog/catalog_search_path.cpp +5 -0
  32. package/src/duckdb/src/catalog/catalog_set.cpp +2 -2
  33. package/src/duckdb/src/catalog/default/default_functions.cpp +6 -6
  34. package/src/duckdb/src/catalog/default/default_schemas.cpp +1 -1
  35. package/src/duckdb/src/catalog/default/default_views.cpp +7 -7
  36. package/src/duckdb/src/catalog/dependency_catalog_set.cpp +2 -1
  37. package/src/duckdb/src/catalog/dependency_list.cpp +92 -8
  38. package/src/duckdb/src/catalog/dependency_manager.cpp +53 -68
  39. package/src/duckdb/src/catalog/duck_catalog.cpp +1 -1
  40. package/src/duckdb/src/common/adbc/adbc.cpp +287 -45
  41. package/src/duckdb/src/common/arrow/appender/union_data.cpp +2 -2
  42. package/src/duckdb/src/common/box_renderer.cpp +12 -12
  43. package/src/duckdb/src/common/crypto/md5.cpp +2 -1
  44. package/src/duckdb/src/common/enum_util.cpp +307 -1
  45. package/src/duckdb/src/common/enums/expression_type.cpp +4 -0
  46. package/src/duckdb/src/common/enums/optimizer_type.cpp +1 -1
  47. package/src/duckdb/src/common/file_system.cpp +60 -13
  48. package/src/duckdb/src/common/filename_pattern.cpp +13 -13
  49. package/src/duckdb/src/common/gzip_file_system.cpp +1 -1
  50. package/src/duckdb/src/common/http_state.cpp +1 -1
  51. package/src/duckdb/src/common/local_file_system.cpp +72 -71
  52. package/src/duckdb/src/common/multi_file_reader.cpp +48 -28
  53. package/src/duckdb/src/common/row_operations/row_matcher.cpp +2 -2
  54. package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +13 -1
  55. package/src/duckdb/src/common/serializer/buffered_file_writer.cpp +32 -13
  56. package/src/duckdb/src/common/string_util.cpp +2 -3
  57. package/src/duckdb/src/common/tree_renderer.cpp +32 -67
  58. package/src/duckdb/src/common/types/bit.cpp +6 -6
  59. package/src/duckdb/src/common/types/data_chunk.cpp +2 -2
  60. package/src/duckdb/src/common/types/hash.cpp +6 -6
  61. package/src/duckdb/src/common/types/hyperloglog.cpp +2 -0
  62. package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +13 -0
  63. package/src/duckdb/src/common/types/row/tuple_data_layout.cpp +5 -7
  64. package/src/duckdb/src/common/types/uuid.cpp +1 -1
  65. package/src/duckdb/src/common/types/vector.cpp +22 -14
  66. package/src/duckdb/src/common/types.cpp +8 -1
  67. package/src/duckdb/src/common/vector_operations/comparison_operators.cpp +20 -18
  68. package/src/duckdb/src/common/vector_operations/generators.cpp +1 -1
  69. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +267 -110
  70. package/src/duckdb/src/common/vector_operations/vector_hash.cpp +52 -23
  71. package/src/duckdb/src/common/virtual_file_system.cpp +33 -20
  72. package/src/duckdb/src/core_functions/aggregate/algebraic/avg.cpp +2 -2
  73. package/src/duckdb/src/core_functions/aggregate/distributive/minmax.cpp +3 -3
  74. package/src/duckdb/src/core_functions/aggregate/distributive/sum.cpp +31 -16
  75. package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +3 -0
  76. package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +2 -0
  77. package/src/duckdb/src/core_functions/core_functions.cpp +1 -1
  78. package/src/duckdb/src/core_functions/function_list.cpp +2 -2
  79. package/src/duckdb/src/core_functions/scalar/date/time_bucket.cpp +1 -1
  80. package/src/duckdb/src/core_functions/scalar/generic/system_functions.cpp +46 -17
  81. package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +1 -1
  82. package/src/duckdb/src/core_functions/scalar/list/flatten.cpp +82 -45
  83. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +2 -2
  84. package/src/duckdb/src/core_functions/scalar/list/list_sort.cpp +3 -0
  85. package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +3 -2
  86. package/src/duckdb/src/core_functions/scalar/string/hex.cpp +2 -4
  87. package/src/duckdb/src/core_functions/scalar/string/repeat.cpp +12 -21
  88. package/src/duckdb/src/execution/column_binding_resolver.cpp +2 -10
  89. package/src/duckdb/src/execution/expression_executor/execute_comparison.cpp +133 -66
  90. package/src/duckdb/src/execution/expression_executor/execute_function.cpp +0 -2
  91. package/src/duckdb/src/execution/expression_executor.cpp +0 -4
  92. package/src/duckdb/src/execution/expression_executor_state.cpp +1 -1
  93. package/src/duckdb/src/execution/index/art/art.cpp +2 -2
  94. package/src/duckdb/src/execution/index/unknown_index.cpp +13 -13
  95. package/src/duckdb/src/execution/join_hashtable.cpp +1 -1
  96. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_mark.cpp +0 -1
  97. package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer.cpp +10 -7
  98. package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.cpp +32 -1
  99. package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_file_handle.cpp +16 -2
  100. package/src/duckdb/src/execution/operator/csv_scanner/scanner/scanner_boundary.cpp +7 -7
  101. package/src/duckdb/src/execution/operator/csv_scanner/scanner/string_value_scanner.cpp +354 -159
  102. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/csv_sniffer.cpp +11 -2
  103. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/dialect_detection.cpp +22 -7
  104. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_detection.cpp +1 -1
  105. package/src/duckdb/src/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.cpp +10 -10
  106. package/src/duckdb/src/execution/operator/csv_scanner/table_function/csv_file_scanner.cpp +9 -18
  107. package/src/duckdb/src/execution/operator/csv_scanner/table_function/global_csv_state.cpp +180 -47
  108. package/src/duckdb/src/execution/operator/csv_scanner/util/csv_error.cpp +100 -58
  109. package/src/duckdb/src/execution/operator/csv_scanner/util/csv_reader_options.cpp +88 -21
  110. package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +12 -13
  111. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +2 -0
  112. package/src/duckdb/src/execution/operator/persistent/csv_rejects_table.cpp +118 -23
  113. package/src/duckdb/src/execution/operator/persistent/physical_batch_copy_to_file.cpp +2 -2
  114. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +14 -5
  115. package/src/duckdb/src/execution/operator/persistent/physical_copy_database.cpp +1 -1
  116. package/src/duckdb/src/execution/operator/persistent/physical_export.cpp +5 -5
  117. package/src/duckdb/src/execution/operator/schema/physical_attach.cpp +1 -1
  118. package/src/duckdb/src/execution/physical_plan/plan_simple.cpp +0 -9
  119. package/src/duckdb/src/execution/physical_plan/plan_vacuum.cpp +18 -0
  120. package/src/duckdb/src/execution/physical_plan_generator.cpp +5 -3
  121. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +81 -106
  122. package/src/duckdb/src/execution/reservoir_sample.cpp +1 -1
  123. package/src/duckdb/src/execution/window_executor.cpp +48 -28
  124. package/src/duckdb/src/execution/window_segment_tree.cpp +20 -23
  125. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +1 -1
  126. package/src/duckdb/src/function/cast/enum_casts.cpp +20 -55
  127. package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +10 -9
  128. package/src/duckdb/src/function/cast_rules.cpp +9 -1
  129. package/src/duckdb/src/function/compression_config.cpp +1 -1
  130. package/src/duckdb/src/function/function_binder.cpp +45 -44
  131. package/src/duckdb/src/function/function_set.cpp +9 -9
  132. package/src/duckdb/src/function/pragma/pragma_queries.cpp +1 -2
  133. package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +21 -5
  134. package/src/duckdb/src/function/scalar/compressed_materialization/compress_string.cpp +2 -2
  135. package/src/duckdb/src/function/scalar/list/list_select.cpp +5 -2
  136. package/src/duckdb/src/function/scalar/list/list_zip.cpp +5 -4
  137. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +60 -32
  138. package/src/duckdb/src/function/scalar/sequence/nextval.cpp +1 -1
  139. package/src/duckdb/src/function/scalar/strftime_format.cpp +31 -25
  140. package/src/duckdb/src/function/scalar/string/caseconvert.cpp +6 -6
  141. package/src/duckdb/src/function/scalar/string/length.cpp +23 -2
  142. package/src/duckdb/src/function/scalar/string/like.cpp +1 -1
  143. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +1 -1
  144. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +3 -3
  145. package/src/duckdb/src/function/table/arrow/arrow_array_scan_state.cpp +1 -1
  146. package/src/duckdb/src/function/table/arrow.cpp +7 -1
  147. package/src/duckdb/src/function/table/copy_csv.cpp +17 -13
  148. package/src/duckdb/src/function/table/read_csv.cpp +52 -39
  149. package/src/duckdb/src/function/table/sniff_csv.cpp +7 -13
  150. package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +1 -1
  151. package/src/duckdb/src/function/table/system/duckdb_databases.cpp +7 -1
  152. package/src/duckdb/src/function/table/system/duckdb_extensions.cpp +12 -2
  153. package/src/duckdb/src/function/table/system/duckdb_sequences.cpp +1 -2
  154. package/src/duckdb/src/function/table/system/duckdb_tables.cpp +2 -2
  155. package/src/duckdb/src/function/table/system/pragma_metadata_info.cpp +9 -2
  156. package/src/duckdb/src/function/table/system/pragma_table_info.cpp +10 -6
  157. package/src/duckdb/src/function/table/table_scan.cpp +1 -4
  158. package/src/duckdb/src/function/table/version/pragma_version.cpp +3 -3
  159. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +6 -2
  160. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_index_entry.hpp +1 -1
  161. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_schema_entry.hpp +1 -1
  162. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/sequence_catalog_entry.hpp +1 -1
  163. package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +6 -1
  164. package/src/duckdb/src/include/duckdb/catalog/catalog_set.hpp +3 -3
  165. package/src/duckdb/src/include/duckdb/catalog/default/default_functions.hpp +3 -3
  166. package/src/duckdb/src/include/duckdb/catalog/dependency.hpp +26 -4
  167. package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +39 -6
  168. package/src/duckdb/src/include/duckdb/catalog/dependency_manager.hpp +19 -14
  169. package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +1 -1
  170. package/src/duckdb/src/include/duckdb/catalog/standard_entry.hpp +4 -0
  171. package/src/duckdb/src/include/duckdb/common/allocator.hpp +3 -3
  172. package/src/duckdb/src/include/duckdb/common/arrow/arrow_wrapper.hpp +1 -1
  173. package/src/duckdb/src/include/duckdb/common/bit_utils.hpp +1 -1
  174. package/src/duckdb/src/include/duckdb/common/box_renderer.hpp +16 -16
  175. package/src/duckdb/src/include/duckdb/common/crypto/md5.hpp +0 -1
  176. package/src/duckdb/src/include/duckdb/common/enum_util.hpp +32 -0
  177. package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +4 -2
  178. package/src/duckdb/src/include/duckdb/common/exception/binder_exception.hpp +14 -10
  179. package/src/duckdb/src/include/duckdb/common/exception/catalog_exception.hpp +4 -4
  180. package/src/duckdb/src/include/duckdb/common/exception/conversion_exception.hpp +6 -6
  181. package/src/duckdb/src/include/duckdb/common/exception/http_exception.hpp +3 -3
  182. package/src/duckdb/src/include/duckdb/common/exception/parser_exception.hpp +4 -4
  183. package/src/duckdb/src/include/duckdb/common/exception/transaction_exception.hpp +2 -2
  184. package/src/duckdb/src/include/duckdb/common/exception.hpp +57 -58
  185. package/src/duckdb/src/include/duckdb/common/exception_format_value.hpp +2 -2
  186. package/src/duckdb/src/include/duckdb/common/extra_type_info.hpp +2 -2
  187. package/src/duckdb/src/include/duckdb/common/file_open_flags.hpp +134 -0
  188. package/src/duckdb/src/include/duckdb/common/file_opener.hpp +9 -6
  189. package/src/duckdb/src/include/duckdb/common/file_system.hpp +35 -36
  190. package/src/duckdb/src/include/duckdb/common/filename_pattern.hpp +4 -6
  191. package/src/duckdb/src/include/duckdb/common/fixed_size_map.hpp +13 -13
  192. package/src/duckdb/src/include/duckdb/common/helper.hpp +42 -47
  193. package/src/duckdb/src/include/duckdb/common/http_state.hpp +1 -1
  194. package/src/duckdb/src/include/duckdb/common/hugeint.hpp +2 -2
  195. package/src/duckdb/src/include/duckdb/common/index_vector.hpp +10 -10
  196. package/src/duckdb/src/include/duckdb/common/local_file_system.hpp +13 -10
  197. package/src/duckdb/src/include/duckdb/common/memory_safety.hpp +3 -3
  198. package/src/duckdb/src/include/duckdb/common/multi_file_reader_options.hpp +1 -1
  199. package/src/duckdb/src/include/duckdb/common/opener_file_system.hpp +50 -24
  200. package/src/duckdb/src/include/duckdb/common/operator/abs.hpp +12 -4
  201. package/src/duckdb/src/include/duckdb/common/optional_ptr.hpp +5 -5
  202. package/src/duckdb/src/include/duckdb/common/pipe_file_system.hpp +1 -1
  203. package/src/duckdb/src/include/duckdb/common/platform.h +1 -1
  204. package/src/duckdb/src/include/duckdb/common/printer.hpp +5 -5
  205. package/src/duckdb/src/include/duckdb/common/profiler.hpp +2 -2
  206. package/src/duckdb/src/include/duckdb/common/progress_bar/display/terminal_progress_bar_display.hpp +5 -5
  207. package/src/duckdb/src/include/duckdb/common/random_engine.hpp +1 -1
  208. package/src/duckdb/src/include/duckdb/common/re2_regex.hpp +7 -7
  209. package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_reader.hpp +3 -0
  210. package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_writer.hpp +2 -2
  211. package/src/duckdb/src/include/duckdb/common/serializer/deserialization_data.hpp +17 -6
  212. package/src/duckdb/src/include/duckdb/common/serializer/deserializer.hpp +12 -0
  213. package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +14 -0
  214. package/src/duckdb/src/include/duckdb/common/serializer/serializer.hpp +16 -0
  215. package/src/duckdb/src/include/duckdb/common/sort/duckdb_pdqsort.hpp +3 -0
  216. package/src/duckdb/src/include/duckdb/common/sort/partition_state.hpp +2 -0
  217. package/src/duckdb/src/include/duckdb/common/string_util.hpp +4 -4
  218. package/src/duckdb/src/include/duckdb/common/tree_renderer.hpp +24 -25
  219. package/src/duckdb/src/include/duckdb/common/typedefs.hpp +5 -5
  220. package/src/duckdb/src/include/duckdb/common/types/cast_helpers.hpp +1 -2
  221. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection.hpp +10 -10
  222. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection_iterators.hpp +5 -5
  223. package/src/duckdb/src/include/duckdb/common/types/column/partitioned_column_data.hpp +1 -1
  224. package/src/duckdb/src/include/duckdb/common/types/constraint_conflict_info.hpp +1 -2
  225. package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +2 -2
  226. package/src/duckdb/src/include/duckdb/common/types/date.hpp +1 -1
  227. package/src/duckdb/src/include/duckdb/common/types/hash.hpp +5 -5
  228. package/src/duckdb/src/include/duckdb/common/types/hyperloglog.hpp +1 -1
  229. package/src/duckdb/src/include/duckdb/common/types/interval.hpp +4 -4
  230. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +1 -1
  231. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_layout.hpp +10 -3
  232. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_segment.hpp +1 -1
  233. package/src/duckdb/src/include/duckdb/common/types/selection_vector.hpp +12 -12
  234. package/src/duckdb/src/include/duckdb/common/types/string_heap.hpp +1 -1
  235. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +21 -20
  236. package/src/duckdb/src/include/duckdb/common/types/time.hpp +2 -2
  237. package/src/duckdb/src/include/duckdb/common/types/timestamp.hpp +3 -3
  238. package/src/duckdb/src/include/duckdb/common/types/uuid.hpp +2 -2
  239. package/src/duckdb/src/include/duckdb/common/types/value.hpp +2 -2
  240. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +15 -7
  241. package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +1 -1
  242. package/src/duckdb/src/include/duckdb/common/types.hpp +14 -10
  243. package/src/duckdb/src/include/duckdb/common/uhugeint.hpp +2 -2
  244. package/src/duckdb/src/include/duckdb/common/union_by_name.hpp +1 -1
  245. package/src/duckdb/src/include/duckdb/common/unique_ptr.hpp +15 -14
  246. package/src/duckdb/src/include/duckdb/common/vector.hpp +21 -21
  247. package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +2 -0
  248. package/src/duckdb/src/include/duckdb/common/vector_operations/general_cast.hpp +2 -1
  249. package/src/duckdb/src/include/duckdb/common/vector_operations/generic_executor.hpp +2 -3
  250. package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +3 -2
  251. package/src/duckdb/src/include/duckdb/common/vector_operations/vector_operations.hpp +50 -32
  252. package/src/duckdb/src/include/duckdb/common/virtual_file_system.hpp +10 -11
  253. package/src/duckdb/src/include/duckdb/core_functions/aggregate/distributive_functions.hpp +1 -1
  254. package/src/duckdb/src/include/duckdb/core_functions/aggregate/sum_helpers.hpp +13 -1
  255. package/src/duckdb/src/include/duckdb/core_functions/function_list.hpp +1 -1
  256. package/src/duckdb/src/include/duckdb/core_functions/lambda_functions.hpp +2 -1
  257. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +1 -1
  258. package/src/duckdb/src/include/duckdb/execution/column_binding_resolver.hpp +1 -1
  259. package/src/duckdb/src/include/duckdb/execution/expression_executor.hpp +1 -1
  260. package/src/duckdb/src/include/duckdb/execution/expression_executor_state.hpp +2 -5
  261. package/src/duckdb/src/include/duckdb/execution/merge_sort_tree.hpp +3 -3
  262. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/aggregate_object.hpp +2 -2
  263. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/distinct_aggregate_data.hpp +1 -1
  264. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/base_scanner.hpp +1 -1
  265. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/column_count_scanner.hpp +0 -3
  266. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_buffer.hpp +9 -6
  267. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_buffer_manager.hpp +3 -0
  268. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_error.hpp +40 -22
  269. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_file_handle.hpp +5 -0
  270. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_file_scanner.hpp +1 -0
  271. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_option.hpp +6 -4
  272. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_reader_options.hpp +24 -10
  273. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_state_machine.hpp +4 -0
  274. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/global_csv_state.hpp +3 -1
  275. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/skip_scanner.hpp +0 -3
  276. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/string_value_scanner.hpp +58 -17
  277. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_batch_collector.hpp +1 -1
  278. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_explain_analyze.hpp +1 -1
  279. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_prepare.hpp +3 -3
  280. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_set.hpp +1 -1
  281. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_vacuum.hpp +4 -1
  282. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_rejects_table.hpp +16 -5
  283. package/src/duckdb/src/include/duckdb/execution/physical_operator_states.hpp +6 -6
  284. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +2 -1
  285. package/src/duckdb/src/include/duckdb/execution/window_executor.hpp +1 -1
  286. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +1 -1
  287. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +1 -1
  288. package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +5 -5
  289. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +4 -4
  290. package/src/duckdb/src/include/duckdb/function/cast/vector_cast_helpers.hpp +6 -6
  291. package/src/duckdb/src/include/duckdb/function/compression_function.hpp +4 -4
  292. package/src/duckdb/src/include/duckdb/function/copy_function.hpp +10 -13
  293. package/src/duckdb/src/include/duckdb/function/function.hpp +3 -3
  294. package/src/duckdb/src/include/duckdb/function/function_binder.hpp +24 -23
  295. package/src/duckdb/src/include/duckdb/function/function_serialization.hpp +1 -1
  296. package/src/duckdb/src/include/duckdb/function/function_set.hpp +1 -1
  297. package/src/duckdb/src/include/duckdb/function/pragma_function.hpp +1 -1
  298. package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +3 -3
  299. package/src/duckdb/src/include/duckdb/function/scalar/strftime_format.hpp +7 -7
  300. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +3 -3
  301. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +6 -6
  302. package/src/duckdb/src/include/duckdb/function/table/arrow/arrow_duck_schema.hpp +4 -4
  303. package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +2 -2
  304. package/src/duckdb/src/include/duckdb/function/table/read_csv.hpp +1 -3
  305. package/src/duckdb/src/include/duckdb/function/table/table_scan.hpp +1 -1
  306. package/src/duckdb/src/include/duckdb/function/table_function.hpp +12 -11
  307. package/src/duckdb/src/include/duckdb/function/udf_function.hpp +66 -60
  308. package/src/duckdb/src/include/duckdb/main/appender.hpp +6 -6
  309. package/src/duckdb/src/include/duckdb/main/attached_database.hpp +3 -1
  310. package/src/duckdb/src/include/duckdb/main/buffered_data/buffered_data.hpp +2 -2
  311. package/src/duckdb/src/include/duckdb/main/buffered_data/simple_buffered_data.hpp +1 -1
  312. package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -2
  313. package/src/duckdb/src/include/duckdb/main/chunk_scan_state/query_result.hpp +2 -2
  314. package/src/duckdb/src/include/duckdb/main/client_context.hpp +1 -1
  315. package/src/duckdb/src/include/duckdb/main/client_context_file_opener.hpp +3 -2
  316. package/src/duckdb/src/include/duckdb/main/client_data.hpp +1 -0
  317. package/src/duckdb/src/include/duckdb/main/client_properties.hpp +2 -1
  318. package/src/duckdb/src/include/duckdb/main/config.hpp +14 -5
  319. package/src/duckdb/src/include/duckdb/main/connection.hpp +27 -26
  320. package/src/duckdb/src/include/duckdb/main/database.hpp +19 -3
  321. package/src/duckdb/src/include/duckdb/main/database_file_opener.hpp +58 -0
  322. package/src/duckdb/src/include/duckdb/main/database_path_and_type.hpp +2 -2
  323. package/src/duckdb/src/include/duckdb/main/error_manager.hpp +6 -6
  324. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +8 -0
  325. package/src/duckdb/src/include/duckdb/main/extension_helper.hpp +1 -0
  326. package/src/duckdb/src/include/duckdb/main/external_dependencies.hpp +2 -1
  327. package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +8 -8
  328. package/src/duckdb/src/include/duckdb/main/query_profiler.hpp +2 -59
  329. package/src/duckdb/src/include/duckdb/main/query_result.hpp +3 -3
  330. package/src/duckdb/src/include/duckdb/main/relation/query_relation.hpp +1 -1
  331. package/src/duckdb/src/include/duckdb/main/relation.hpp +1 -1
  332. package/src/duckdb/src/include/duckdb/main/secret/secret.hpp +11 -7
  333. package/src/duckdb/src/include/duckdb/main/secret/secret_manager.hpp +2 -2
  334. package/src/duckdb/src/include/duckdb/main/secret/secret_storage.hpp +4 -4
  335. package/src/duckdb/src/include/duckdb/main/settings.hpp +78 -70
  336. package/src/duckdb/src/include/duckdb/optimizer/column_lifetime_analyzer.hpp +45 -0
  337. package/src/duckdb/src/include/duckdb/optimizer/compressed_materialization.hpp +11 -13
  338. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
  339. package/src/duckdb/src/include/duckdb/optimizer/join_order/cost_model.hpp +1 -1
  340. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_node.hpp +1 -1
  341. package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph.hpp +1 -1
  342. package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph_manager.hpp +1 -1
  343. package/src/duckdb/src/include/duckdb/optimizer/join_order/relation_manager.hpp +1 -1
  344. package/src/duckdb/src/include/duckdb/optimizer/matcher/expression_matcher.hpp +7 -7
  345. package/src/duckdb/src/include/duckdb/optimizer/matcher/function_matcher.hpp +7 -7
  346. package/src/duckdb/src/include/duckdb/optimizer/matcher/type_matcher.hpp +1 -1
  347. package/src/duckdb/src/include/duckdb/optimizer/optimizer.hpp +3 -0
  348. package/src/duckdb/src/include/duckdb/optimizer/statistics_propagator.hpp +32 -30
  349. package/src/duckdb/src/include/duckdb/optimizer/unnest_rewriter.hpp +1 -1
  350. package/src/duckdb/src/include/duckdb/parallel/event.hpp +1 -1
  351. package/src/duckdb/src/include/duckdb/parallel/executor_task.hpp +1 -1
  352. package/src/duckdb/src/include/duckdb/parallel/interrupt.hpp +2 -2
  353. package/src/duckdb/src/include/duckdb/parallel/pipeline_event.hpp +1 -1
  354. package/src/duckdb/src/include/duckdb/parser/column_list.hpp +4 -4
  355. package/src/duckdb/src/include/duckdb/parser/constraints/unique_constraint.hpp +49 -8
  356. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +1 -1
  357. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +1 -1
  358. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +1 -1
  359. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_scalar_function_info.hpp +1 -1
  360. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +1 -1
  361. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +1 -1
  362. package/src/duckdb/src/include/duckdb/parser/parsed_data/copy_database_info.hpp +40 -0
  363. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_function_info.hpp +2 -1
  364. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_index_info.hpp +1 -0
  365. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_info.hpp +2 -1
  366. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_macro_info.hpp +1 -1
  367. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_pragma_function_info.hpp +1 -1
  368. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_secret_info.hpp +2 -2
  369. package/src/duckdb/src/include/duckdb/parser/parsed_data/extra_drop_info.hpp +3 -3
  370. package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +3 -2
  371. package/src/duckdb/src/include/duckdb/parser/parsed_data/vacuum_info.hpp +2 -5
  372. package/src/duckdb/src/include/duckdb/parser/parser.hpp +1 -1
  373. package/src/duckdb/src/include/duckdb/parser/parser_extension.hpp +3 -3
  374. package/src/duckdb/src/include/duckdb/parser/query_error_context.hpp +1 -1
  375. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +3 -5
  376. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -2
  377. package/src/duckdb/src/include/duckdb/planner/binder.hpp +16 -9
  378. package/src/duckdb/src/include/duckdb/planner/expression/bound_case_expression.hpp +1 -1
  379. package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +1 -1
  380. package/src/duckdb/src/include/duckdb/planner/expression/bound_default_expression.hpp +1 -1
  381. package/src/duckdb/src/include/duckdb/planner/expression/bound_expanded_expression.hpp +34 -0
  382. package/src/duckdb/src/include/duckdb/planner/expression/bound_subquery_expression.hpp +1 -1
  383. package/src/duckdb/src/include/duckdb/planner/expression.hpp +1 -1
  384. package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +5 -8
  385. package/src/duckdb/src/include/duckdb/planner/expression_binder/column_alias_binder.hpp +3 -4
  386. package/src/duckdb/src/include/duckdb/planner/expression_binder/group_binder.hpp +3 -2
  387. package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +3 -5
  388. package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +6 -14
  389. package/src/duckdb/src/include/duckdb/planner/expression_binder/qualify_binder.hpp +3 -6
  390. package/src/duckdb/src/include/duckdb/planner/expression_binder/select_bind_state.hpp +52 -0
  391. package/src/duckdb/src/include/duckdb/planner/expression_binder/select_binder.hpp +4 -10
  392. package/src/duckdb/src/include/duckdb/planner/expression_binder/table_function_binder.hpp +5 -2
  393. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -0
  394. package/src/duckdb/src/include/duckdb/planner/expression_iterator.hpp +2 -0
  395. package/src/duckdb/src/include/duckdb/planner/filter/conjunction_filter.hpp +3 -6
  396. package/src/duckdb/src/include/duckdb/planner/logical_operator.hpp +2 -0
  397. package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
  398. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +1 -0
  399. package/src/duckdb/src/include/duckdb/planner/operator/logical_copy_database.hpp +4 -12
  400. package/src/duckdb/src/include/duckdb/planner/operator/logical_create_secret.hpp +1 -1
  401. package/src/duckdb/src/include/duckdb/planner/operator/logical_cteref.hpp +2 -2
  402. package/src/duckdb/src/include/duckdb/planner/operator/logical_delim_get.hpp +1 -1
  403. package/src/duckdb/src/include/duckdb/planner/operator/logical_dummy_scan.hpp +1 -1
  404. package/src/duckdb/src/include/duckdb/planner/operator/logical_explain.hpp +1 -1
  405. package/src/duckdb/src/include/duckdb/planner/operator/logical_export.hpp +2 -2
  406. package/src/duckdb/src/include/duckdb/planner/operator/logical_expression_get.hpp +2 -2
  407. package/src/duckdb/src/include/duckdb/planner/operator/logical_extension_operator.hpp +2 -2
  408. package/src/duckdb/src/include/duckdb/planner/operator/logical_materialized_cte.hpp +2 -2
  409. package/src/duckdb/src/include/duckdb/planner/operator/logical_pragma.hpp +1 -1
  410. package/src/duckdb/src/include/duckdb/planner/operator/logical_prepare.hpp +3 -2
  411. package/src/duckdb/src/include/duckdb/planner/operator/logical_recursive_cte.hpp +3 -3
  412. package/src/duckdb/src/include/duckdb/planner/operator/logical_reset.hpp +1 -1
  413. package/src/duckdb/src/include/duckdb/planner/operator/logical_set.hpp +2 -1
  414. package/src/duckdb/src/include/duckdb/planner/operator/logical_vacuum.hpp +52 -0
  415. package/src/duckdb/src/include/duckdb/planner/operator_extension.hpp +1 -1
  416. package/src/duckdb/src/include/duckdb/planner/parsed_data/bound_create_table_info.hpp +2 -2
  417. package/src/duckdb/src/include/duckdb/planner/query_node/bound_select_node.hpp +5 -4
  418. package/src/duckdb/src/include/duckdb/planner/subquery/flatten_dependent_join.hpp +2 -2
  419. package/src/duckdb/src/include/duckdb/storage/arena_allocator.hpp +4 -1
  420. package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +1 -1
  421. package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +3 -3
  422. package/src/duckdb/src/include/duckdb/storage/checkpoint/row_group_writer.hpp +2 -3
  423. package/src/duckdb/src/include/duckdb/storage/checkpoint/string_checkpoint_state.hpp +1 -1
  424. package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -3
  425. package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +5 -5
  426. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_analyze.hpp +1 -1
  427. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_compress.hpp +1 -1
  428. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_fetch.hpp +1 -1
  429. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_scan.hpp +1 -1
  430. package/src/duckdb/src/include/duckdb/storage/compression/alprd/algorithm/alprd.hpp +3 -3
  431. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_analyze.hpp +2 -2
  432. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_compress.hpp +1 -1
  433. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_fetch.hpp +1 -1
  434. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_scan.hpp +3 -3
  435. package/src/duckdb/src/include/duckdb/storage/compression/chimp/algorithm/flag_buffer.hpp +1 -1
  436. package/src/duckdb/src/include/duckdb/storage/compression/chimp/algorithm/leading_zero_buffer.hpp +3 -3
  437. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp.hpp +3 -3
  438. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_analyze.hpp +0 -1
  439. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_fetch.hpp +1 -1
  440. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +4 -4
  441. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas.hpp +4 -4
  442. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_analyze.hpp +0 -1
  443. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_fetch.hpp +1 -1
  444. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_scan.hpp +3 -3
  445. package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +1 -1
  446. package/src/duckdb/src/include/duckdb/storage/index.hpp +1 -1
  447. package/src/duckdb/src/include/duckdb/storage/magic_bytes.hpp +1 -1
  448. package/src/duckdb/src/include/duckdb/storage/object_cache.hpp +3 -3
  449. package/src/duckdb/src/include/duckdb/storage/optimistic_data_writer.hpp +1 -1
  450. package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +1 -1
  451. package/src/duckdb/src/include/duckdb/storage/single_file_block_manager.hpp +4 -1
  452. package/src/duckdb/src/include/duckdb/storage/standard_buffer_manager.hpp +24 -24
  453. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +3 -3
  454. package/src/duckdb/src/include/duckdb/storage/statistics/segment_statistics.hpp +2 -2
  455. package/src/duckdb/src/include/duckdb/storage/storage_info.hpp +2 -2
  456. package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +4 -4
  457. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +9 -6
  458. package/src/duckdb/src/include/duckdb/storage/table/append_state.hpp +1 -1
  459. package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +2 -2
  460. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +1 -1
  461. package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +10 -1
  462. package/src/duckdb/src/include/duckdb/storage/table/data_table_info.hpp +3 -2
  463. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +1 -1
  464. package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +1 -1
  465. package/src/duckdb/src/include/duckdb/storage/table/row_version_manager.hpp +2 -1
  466. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +3 -3
  467. package/src/duckdb/src/include/duckdb/storage/table/segment_lock.hpp +1 -1
  468. package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +4 -4
  469. package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +2 -0
  470. package/src/duckdb/src/include/duckdb/storage/table/table_index_list.hpp +3 -2
  471. package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +1 -1
  472. package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +1 -1
  473. package/src/duckdb/src/include/duckdb/storage/table_storage_info.hpp +2 -1
  474. package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +1 -1
  475. package/src/duckdb/src/include/duckdb/transaction/delete_info.hpp +20 -1
  476. package/src/duckdb/src/include/duckdb/transaction/transaction.hpp +1 -1
  477. package/src/duckdb/src/include/duckdb/transaction/transaction_data.hpp +1 -1
  478. package/src/duckdb/src/include/duckdb/transaction/undo_buffer.hpp +1 -1
  479. package/src/duckdb/src/include/duckdb/transaction/update_info.hpp +1 -1
  480. package/src/duckdb/src/main/appender.cpp +1 -1
  481. package/src/duckdb/src/main/attached_database.cpp +11 -3
  482. package/src/duckdb/src/main/capi/arrow-c.cpp +6 -2
  483. package/src/duckdb/src/main/capi/cast/utils-c.cpp +1 -1
  484. package/src/duckdb/src/main/capi/duckdb-c.cpp +1 -1
  485. package/src/duckdb/src/main/capi/pending-c.cpp +1 -1
  486. package/src/duckdb/src/main/capi/prepared-c.cpp +2 -2
  487. package/src/duckdb/src/main/capi/result-c.cpp +4 -4
  488. package/src/duckdb/src/main/client_context.cpp +4 -12
  489. package/src/duckdb/src/main/client_context_file_opener.cpp +15 -3
  490. package/src/duckdb/src/main/client_data.cpp +5 -0
  491. package/src/duckdb/src/main/config.cpp +82 -82
  492. package/src/duckdb/src/main/database.cpp +31 -7
  493. package/src/duckdb/src/main/database_manager.cpp +3 -2
  494. package/src/duckdb/src/main/database_path_and_type.cpp +4 -4
  495. package/src/duckdb/src/main/error_manager.cpp +1 -1
  496. package/src/duckdb/src/main/extension/extension_alias.cpp +9 -9
  497. package/src/duckdb/src/main/extension/extension_helper.cpp +10 -5
  498. package/src/duckdb/src/main/extension/extension_install.cpp +1 -1
  499. package/src/duckdb/src/main/extension/extension_load.cpp +111 -37
  500. package/src/duckdb/src/main/query_profiler.cpp +1 -118
  501. package/src/duckdb/src/main/secret/secret_manager.cpp +1 -2
  502. package/src/duckdb/src/main/secret/secret_storage.cpp +1 -1
  503. package/src/duckdb/src/main/settings/settings.cpp +81 -65
  504. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +8 -1
  505. package/src/duckdb/src/optimizer/compressed_materialization/compress_aggregate.cpp +3 -0
  506. package/src/duckdb/src/optimizer/compressed_materialization.cpp +26 -28
  507. package/src/duckdb/src/optimizer/cse_optimizer.cpp +5 -5
  508. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +10 -6
  509. package/src/duckdb/src/optimizer/optimizer.cpp +14 -17
  510. package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +16 -5
  511. package/src/duckdb/src/optimizer/pushdown/pushdown_inner_join.cpp +7 -4
  512. package/src/duckdb/src/optimizer/pushdown/pushdown_set_operation.cpp +2 -2
  513. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +3 -3
  514. package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +2 -2
  515. package/src/duckdb/src/optimizer/statistics/expression/propagate_aggregate.cpp +1 -1
  516. package/src/duckdb/src/optimizer/statistics/expression/propagate_between.cpp +8 -8
  517. package/src/duckdb/src/optimizer/statistics/expression/propagate_case.cpp +1 -1
  518. package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +1 -1
  519. package/src/duckdb/src/optimizer/statistics/expression/propagate_columnref.cpp +1 -1
  520. package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +7 -7
  521. package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +6 -6
  522. package/src/duckdb/src/optimizer/statistics/expression/propagate_constant.cpp +1 -1
  523. package/src/duckdb/src/optimizer/statistics/expression/propagate_function.cpp +2 -2
  524. package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +10 -10
  525. package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +1 -1
  526. package/src/duckdb/src/optimizer/statistics/operator/propagate_cross_product.cpp +1 -1
  527. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +14 -7
  528. package/src/duckdb/src/optimizer/statistics/operator/propagate_get.cpp +2 -2
  529. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +9 -9
  530. package/src/duckdb/src/optimizer/statistics/operator/propagate_limit.cpp +1 -1
  531. package/src/duckdb/src/optimizer/statistics/operator/propagate_order.cpp +1 -1
  532. package/src/duckdb/src/optimizer/statistics/operator/propagate_projection.cpp +2 -2
  533. package/src/duckdb/src/optimizer/statistics/operator/propagate_set_operation.cpp +1 -1
  534. package/src/duckdb/src/optimizer/statistics/operator/propagate_window.cpp +1 -1
  535. package/src/duckdb/src/optimizer/statistics_propagator.cpp +39 -18
  536. package/src/duckdb/src/parallel/pipeline_finish_event.cpp +1 -1
  537. package/src/duckdb/src/parallel/task_scheduler.cpp +8 -1
  538. package/src/duckdb/src/parser/constraints/unique_constraint.cpp +4 -2
  539. package/src/duckdb/src/parser/parsed_data/create_index_info.cpp +64 -0
  540. package/src/duckdb/src/parser/parsed_data/vacuum_info.cpp +1 -0
  541. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +13 -5
  542. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +24 -0
  543. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +1 -8
  544. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +2 -1
  545. package/src/duckdb/src/parser/transform/statement/transform_create_index.cpp +3 -0
  546. package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +2 -6
  547. package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +2 -6
  548. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +2 -6
  549. package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +1 -1
  550. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +5 -2
  551. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +2 -8
  552. package/src/duckdb/src/parser/transform/statement/transform_update.cpp +1 -6
  553. package/src/duckdb/src/parser/transform/statement/transform_use.cpp +3 -2
  554. package/src/duckdb/src/parser/transformer.cpp +14 -2
  555. package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +40 -17
  556. package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +8 -3
  557. package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +32 -30
  558. package/src/duckdb/src/planner/binder/query_node/bind_cte_node.cpp +28 -17
  559. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +146 -101
  560. package/src/duckdb/src/planner/binder/query_node/bind_setop_node.cpp +28 -26
  561. package/src/duckdb/src/planner/binder/query_node/plan_cte_node.cpp +29 -0
  562. package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +10 -10
  563. package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +3 -2
  564. package/src/duckdb/src/planner/binder/statement/bind_copy_database.cpp +23 -28
  565. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +11 -12
  566. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +9 -11
  567. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +10 -13
  568. package/src/duckdb/src/planner/binder/statement/bind_pragma.cpp +3 -3
  569. package/src/duckdb/src/planner/binder/statement/bind_set.cpp +3 -0
  570. package/src/duckdb/src/planner/binder/statement/bind_vacuum.cpp +66 -65
  571. package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +54 -46
  572. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +3 -0
  573. package/src/duckdb/src/planner/binder/tableref/bind_subqueryref.cpp +1 -1
  574. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +5 -5
  575. package/src/duckdb/src/planner/binder.cpp +78 -6
  576. package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +11 -3
  577. package/src/duckdb/src/planner/expression/bound_expanded_expression.cpp +22 -0
  578. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +11 -58
  579. package/src/duckdb/src/planner/expression_binder/column_alias_binder.cpp +5 -8
  580. package/src/duckdb/src/planner/expression_binder/group_binder.cpp +5 -4
  581. package/src/duckdb/src/planner/expression_binder/having_binder.cpp +5 -19
  582. package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +8 -8
  583. package/src/duckdb/src/planner/expression_binder/order_binder.cpp +42 -26
  584. package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -22
  585. package/src/duckdb/src/planner/expression_binder/select_bind_state.cpp +52 -0
  586. package/src/duckdb/src/planner/expression_binder/select_binder.cpp +43 -5
  587. package/src/duckdb/src/planner/expression_binder/table_function_binder.cpp +19 -7
  588. package/src/duckdb/src/planner/logical_operator.cpp +20 -3
  589. package/src/duckdb/src/planner/operator/logical_copy_database.cpp +4 -14
  590. package/src/duckdb/src/planner/operator/logical_delete.cpp +1 -1
  591. package/src/duckdb/src/planner/operator/logical_get.cpp +1 -1
  592. package/src/duckdb/src/planner/operator/logical_insert.cpp +1 -1
  593. package/src/duckdb/src/planner/operator/logical_update.cpp +1 -1
  594. package/src/duckdb/src/planner/operator/logical_vacuum.cpp +65 -0
  595. package/src/duckdb/src/planner/planner.cpp +4 -4
  596. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +26 -27
  597. package/src/duckdb/src/storage/arena_allocator.cpp +9 -0
  598. package/src/duckdb/src/storage/buffer/buffer_pool_reservation.cpp +1 -1
  599. package/src/duckdb/src/storage/buffer_manager.cpp +2 -10
  600. package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +2 -3
  601. package/src/duckdb/src/storage/checkpoint_manager.cpp +15 -8
  602. package/src/duckdb/src/storage/compression/bitpacking.cpp +6 -1
  603. package/src/duckdb/src/storage/compression/string_uncompressed.cpp +1 -1
  604. package/src/duckdb/src/storage/data_pointer.cpp +1 -1
  605. package/src/duckdb/src/storage/data_table.cpp +18 -7
  606. package/src/duckdb/src/storage/local_storage.cpp +8 -5
  607. package/src/duckdb/src/storage/magic_bytes.cpp +6 -5
  608. package/src/duckdb/src/storage/partial_block_manager.cpp +1 -1
  609. package/src/duckdb/src/storage/serialization/serialize_logical_operator.cpp +20 -9
  610. package/src/duckdb/src/storage/serialization/serialize_nodes.cpp +12 -10
  611. package/src/duckdb/src/storage/serialization/serialize_parse_info.cpp +23 -0
  612. package/src/duckdb/src/storage/single_file_block_manager.cpp +46 -19
  613. package/src/duckdb/src/storage/standard_buffer_manager.cpp +21 -5
  614. package/src/duckdb/src/storage/statistics/array_stats.cpp +1 -1
  615. package/src/duckdb/src/storage/statistics/base_statistics.cpp +2 -3
  616. package/src/duckdb/src/storage/statistics/list_stats.cpp +1 -1
  617. package/src/duckdb/src/storage/statistics/struct_stats.cpp +1 -1
  618. package/src/duckdb/src/storage/storage_info.cpp +19 -19
  619. package/src/duckdb/src/storage/storage_manager.cpp +18 -13
  620. package/src/duckdb/src/storage/table/chunk_info.cpp +11 -3
  621. package/src/duckdb/src/storage/table/column_data.cpp +88 -66
  622. package/src/duckdb/src/storage/table/row_group.cpp +7 -7
  623. package/src/duckdb/src/storage/table/row_version_manager.cpp +2 -2
  624. package/src/duckdb/src/storage/table/standard_column_data.cpp +4 -0
  625. package/src/duckdb/src/storage/table/update_segment.cpp +3 -1
  626. package/src/duckdb/src/storage/table_index_list.cpp +6 -1
  627. package/src/duckdb/src/storage/temporary_file_manager.cpp +1 -1
  628. package/src/duckdb/src/storage/wal_replay.cpp +8 -7
  629. package/src/duckdb/src/storage/write_ahead_log.cpp +3 -4
  630. package/src/duckdb/src/transaction/cleanup_state.cpp +10 -3
  631. package/src/duckdb/src/transaction/commit_state.cpp +11 -4
  632. package/src/duckdb/src/transaction/duck_transaction.cpp +23 -3
  633. package/src/duckdb/src/transaction/rollback_state.cpp +1 -1
  634. package/src/duckdb/src/transaction/transaction_context.cpp +1 -1
  635. package/src/duckdb/src/transaction/undo_buffer.cpp +3 -1
  636. package/src/duckdb/third_party/fmt/include/fmt/core.h +0 -5
  637. package/src/duckdb/third_party/fsst/fsst.h +1 -1
  638. package/src/duckdb/third_party/fsst/libfsst.cpp +1 -140
  639. package/src/duckdb/third_party/fsst/libfsst.hpp +0 -13
  640. package/src/duckdb/third_party/hyperloglog/hyperloglog.hpp +4 -0
  641. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +8 -1
  642. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +2 -1
  643. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +15401 -15354
  644. package/src/duckdb/third_party/libpg_query/src_backend_parser_scan.cpp +299 -538
  645. package/src/duckdb/third_party/lz4/lz4.cpp +2605 -0
  646. package/src/duckdb/third_party/lz4/lz4.hpp +843 -0
  647. package/src/duckdb/third_party/parquet/parquet_types.cpp +3 -0
  648. package/src/duckdb/third_party/parquet/parquet_types.h +2 -1
  649. package/src/duckdb/third_party/re2/re2/bitmap256.cc +44 -0
  650. package/src/duckdb/third_party/re2/re2/bitmap256.h +3 -35
  651. package/src/duckdb/third_party/re2/re2/bitstate.cc +31 -24
  652. package/src/duckdb/third_party/re2/re2/compile.cc +146 -164
  653. package/src/duckdb/third_party/re2/re2/dfa.cc +174 -181
  654. package/src/duckdb/third_party/re2/re2/filtered_re2.cc +19 -3
  655. package/src/duckdb/third_party/re2/re2/filtered_re2.h +27 -23
  656. package/src/duckdb/third_party/re2/re2/mimics_pcre.cc +21 -11
  657. package/src/duckdb/third_party/re2/re2/nfa.cc +91 -131
  658. package/src/duckdb/third_party/re2/re2/onepass.cc +11 -10
  659. package/src/duckdb/third_party/re2/re2/parse.cc +171 -154
  660. package/src/duckdb/third_party/re2/re2/perl_groups.cc +35 -35
  661. package/src/duckdb/third_party/re2/re2/pod_array.h +55 -0
  662. package/src/duckdb/third_party/re2/re2/prefilter.cc +40 -40
  663. package/src/duckdb/third_party/re2/re2/prefilter.h +24 -2
  664. package/src/duckdb/third_party/re2/re2/prefilter_tree.cc +70 -84
  665. package/src/duckdb/third_party/re2/re2/prefilter_tree.h +5 -4
  666. package/src/duckdb/third_party/re2/re2/prog.cc +315 -58
  667. package/src/duckdb/third_party/re2/re2/prog.h +77 -44
  668. package/src/duckdb/third_party/re2/re2/re2.cc +333 -221
  669. package/src/duckdb/third_party/re2/re2/re2.h +277 -201
  670. package/src/duckdb/third_party/re2/re2/regexp.cc +137 -105
  671. package/src/duckdb/third_party/re2/re2/regexp.h +45 -40
  672. package/src/duckdb/third_party/re2/re2/set.cc +40 -17
  673. package/src/duckdb/third_party/re2/re2/set.h +11 -6
  674. package/src/duckdb/third_party/re2/re2/simplify.cc +50 -41
  675. package/src/duckdb/third_party/re2/re2/sparse_array.h +392 -0
  676. package/src/duckdb/third_party/re2/re2/sparse_set.h +264 -0
  677. package/src/duckdb/third_party/re2/re2/stringpiece.cc +1 -1
  678. package/src/duckdb/third_party/re2/re2/stringpiece.h +11 -8
  679. package/src/duckdb/third_party/re2/re2/tostring.cc +8 -6
  680. package/src/duckdb/third_party/re2/re2/unicode_casefold.cc +39 -10
  681. package/src/duckdb/third_party/re2/re2/unicode_casefold.h +1 -1
  682. package/src/duckdb/third_party/re2/re2/unicode_groups.cc +5019 -4566
  683. package/src/duckdb/third_party/re2/re2/unicode_groups.h +1 -1
  684. package/src/duckdb/third_party/re2/re2/walker-inl.h +21 -20
  685. package/src/duckdb/third_party/re2/util/logging.h +14 -18
  686. package/src/duckdb/third_party/re2/util/mix.h +4 -4
  687. package/src/duckdb/third_party/re2/util/mutex.h +48 -15
  688. package/src/duckdb/third_party/re2/util/rune.cc +5 -5
  689. package/src/duckdb/third_party/re2/util/strutil.cc +1 -16
  690. package/src/duckdb/third_party/re2/util/strutil.h +1 -3
  691. package/src/duckdb/third_party/re2/util/utf.h +1 -1
  692. package/src/duckdb/third_party/re2/util/util.h +9 -1
  693. package/src/duckdb/third_party/utf8proc/include/utf8proc_wrapper.hpp +2 -0
  694. package/src/duckdb/third_party/utf8proc/utf8proc_wrapper.cpp +36 -1
  695. package/src/duckdb/ub_src_common.cpp +0 -2
  696. package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
  697. package/src/duckdb/ub_src_planner_expression.cpp +2 -0
  698. package/src/duckdb/ub_src_planner_expression_binder.cpp +2 -0
  699. package/src/duckdb/ub_src_planner_operator.cpp +2 -0
  700. package/test/jsdoc.test.ts +3 -0
@@ -20,12 +20,12 @@ static const URange16 code3[] = { /* \w */
20
20
  { 0x61, 0x7a },
21
21
  };
22
22
  const UGroup perl_groups[] = {
23
- { "\\d", +1, code1, 1 , nullptr, 0},
24
- { "\\D", -1, code1, 1 , nullptr, 0},
25
- { "\\s", +1, code2, 3 , nullptr, 0},
26
- { "\\S", -1, code2, 3 , nullptr, 0},
27
- { "\\w", +1, code3, 4 , nullptr, 0},
28
- { "\\W", -1, code3, 4 , nullptr, 0},
23
+ { "\\d", +1, code1, 1, 0, 0 },
24
+ { "\\D", -1, code1, 1, 0, 0 },
25
+ { "\\s", +1, code2, 3, 0, 0 },
26
+ { "\\S", -1, code2, 3, 0, 0 },
27
+ { "\\w", +1, code3, 4, 0, 0 },
28
+ { "\\W", -1, code3, 4, 0, 0 },
29
29
  };
30
30
  const int num_perl_groups = 6;
31
31
  static const URange16 code4[] = { /* [:alnum:] */
@@ -85,35 +85,35 @@ static const URange16 code17[] = { /* [:xdigit:] */
85
85
  { 0x61, 0x66 },
86
86
  };
87
87
  const UGroup posix_groups[] = {
88
- { "[:alnum:]", +1, code4, 3 , nullptr, 0},
89
- { "[:^alnum:]", -1, code4, 3 , nullptr, 0},
90
- { "[:alpha:]", +1, code5, 2 , nullptr, 0},
91
- { "[:^alpha:]", -1, code5, 2 , nullptr, 0},
92
- { "[:ascii:]", +1, code6, 1 , nullptr, 0},
93
- { "[:^ascii:]", -1, code6, 1 , nullptr, 0},
94
- { "[:blank:]", +1, code7, 2 , nullptr, 0},
95
- { "[:^blank:]", -1, code7, 2 , nullptr, 0},
96
- { "[:cntrl:]", +1, code8, 2 , nullptr, 0},
97
- { "[:^cntrl:]", -1, code8, 2 , nullptr, 0},
98
- { "[:digit:]", +1, code9, 1 , nullptr, 0},
99
- { "[:^digit:]", -1, code9, 1 , nullptr, 0},
100
- { "[:graph:]", +1, code10, 1 , nullptr, 0},
101
- { "[:^graph:]", -1, code10, 1 , nullptr, 0},
102
- { "[:lower:]", +1, code11, 1 , nullptr, 0},
103
- { "[:^lower:]", -1, code11, 1 , nullptr, 0},
104
- { "[:print:]", +1, code12, 1 , nullptr, 0},
105
- { "[:^print:]", -1, code12, 1 , nullptr, 0},
106
- { "[:punct:]", +1, code13, 4 , nullptr, 0},
107
- { "[:^punct:]", -1, code13, 4 , nullptr, 0},
108
- { "[:space:]", +1, code14, 2 , nullptr, 0},
109
- { "[:^space:]", -1, code14, 2 , nullptr, 0},
110
- { "[:upper:]", +1, code15, 1 , nullptr, 0},
111
- { "[:^upper:]", -1, code15, 1, nullptr, 0},
112
- { "[:word:]", +1, code16, 4 , nullptr, 0},
113
- { "[:^word:]", -1, code16, 4 , nullptr, 0},
114
- { "[:xdigit:]", +1, code17, 3 , nullptr, 0},
115
- { "[:^xdigit:]", -1, code17, 3 , nullptr, 0},
88
+ { "[:alnum:]", +1, code4, 3, 0, 0 },
89
+ { "[:^alnum:]", -1, code4, 3, 0, 0 },
90
+ { "[:alpha:]", +1, code5, 2, 0, 0 },
91
+ { "[:^alpha:]", -1, code5, 2, 0, 0 },
92
+ { "[:ascii:]", +1, code6, 1, 0, 0 },
93
+ { "[:^ascii:]", -1, code6, 1, 0, 0 },
94
+ { "[:blank:]", +1, code7, 2, 0, 0 },
95
+ { "[:^blank:]", -1, code7, 2, 0, 0 },
96
+ { "[:cntrl:]", +1, code8, 2, 0, 0 },
97
+ { "[:^cntrl:]", -1, code8, 2, 0, 0 },
98
+ { "[:digit:]", +1, code9, 1, 0, 0 },
99
+ { "[:^digit:]", -1, code9, 1, 0, 0 },
100
+ { "[:graph:]", +1, code10, 1, 0, 0 },
101
+ { "[:^graph:]", -1, code10, 1, 0, 0 },
102
+ { "[:lower:]", +1, code11, 1, 0, 0 },
103
+ { "[:^lower:]", -1, code11, 1, 0, 0 },
104
+ { "[:print:]", +1, code12, 1, 0, 0 },
105
+ { "[:^print:]", -1, code12, 1, 0, 0 },
106
+ { "[:punct:]", +1, code13, 4, 0, 0 },
107
+ { "[:^punct:]", -1, code13, 4, 0, 0 },
108
+ { "[:space:]", +1, code14, 2, 0, 0 },
109
+ { "[:^space:]", -1, code14, 2, 0, 0 },
110
+ { "[:upper:]", +1, code15, 1, 0, 0 },
111
+ { "[:^upper:]", -1, code15, 1, 0, 0 },
112
+ { "[:word:]", +1, code16, 4, 0, 0 },
113
+ { "[:^word:]", -1, code16, 4, 0, 0 },
114
+ { "[:xdigit:]", +1, code17, 3, 0, 0 },
115
+ { "[:^xdigit:]", -1, code17, 3, 0, 0 },
116
116
  };
117
117
  const int num_posix_groups = 28;
118
118
 
119
- } // namespace duckdb_re2
119
+ } // namespace re2
@@ -0,0 +1,55 @@
1
+ // Copyright 2018 The RE2 Authors. All Rights Reserved.
2
+ // Use of this source code is governed by a BSD-style
3
+ // license that can be found in the LICENSE file.
4
+
5
+ #ifndef RE2_POD_ARRAY_H_
6
+ #define RE2_POD_ARRAY_H_
7
+
8
+ #include <memory>
9
+ #include <type_traits>
10
+
11
+ namespace duckdb_re2 {
12
+
13
+ template <typename T>
14
+ class PODArray {
15
+ public:
16
+ static_assert(std::is_trivial<T>::value && std::is_standard_layout<T>::value,
17
+ "T must be POD");
18
+
19
+ PODArray()
20
+ : ptr_() {}
21
+ explicit PODArray(int len)
22
+ : ptr_(std::allocator<T>().allocate(len), Deleter(len)) {}
23
+
24
+ T* data() const {
25
+ return ptr_.get();
26
+ }
27
+
28
+ int size() const {
29
+ return ptr_.get_deleter().len_;
30
+ }
31
+
32
+ T& operator[](int pos) const {
33
+ return ptr_[pos];
34
+ }
35
+
36
+ private:
37
+ struct Deleter {
38
+ Deleter()
39
+ : len_(0) {}
40
+ explicit Deleter(int len)
41
+ : len_(len) {}
42
+
43
+ void operator()(T* ptr) const {
44
+ std::allocator<T>().deallocate(ptr, len_);
45
+ }
46
+
47
+ int len_;
48
+ };
49
+
50
+ std::unique_ptr<T[], Deleter> ptr_;
51
+ };
52
+
53
+ } // namespace re2
54
+
55
+ #endif // RE2_POD_ARRAY_H_
@@ -7,6 +7,7 @@
7
7
  #include <stddef.h>
8
8
  #include <stdint.h>
9
9
  #include <string>
10
+ #include <utility>
10
11
  #include <vector>
11
12
 
12
13
  #include "util/util.h"
@@ -19,9 +20,6 @@
19
20
 
20
21
  namespace duckdb_re2 {
21
22
 
22
- typedef std::set<std::string>::iterator SSIter;
23
- typedef std::set<std::string>::const_iterator ConstSSIter;
24
-
25
23
  // Initializes a Prefilter, allocating subs_ as necessary.
26
24
  Prefilter::Prefilter(Op op) {
27
25
  op_ = op;
@@ -138,35 +136,41 @@ Prefilter* Prefilter::Or(Prefilter* a, Prefilter* b) {
138
136
  return AndOr(OR, a, b);
139
137
  }
140
138
 
141
- static void SimplifyStringSet(std::set<std::string> *ss) {
139
+ void Prefilter::SimplifyStringSet(SSet* ss) {
142
140
  // Now make sure that the strings aren't redundant. For example, if
143
141
  // we know "ab" is a required string, then it doesn't help at all to
144
142
  // know that "abc" is also a required string, so delete "abc". This
145
143
  // is because, when we are performing a string search to filter
146
- // regexps, matching ab will already allow this regexp to be a
147
- // candidate for match, so further matching abc is redundant.
148
-
149
- for (SSIter i = ss->begin(); i != ss->end(); ++i) {
144
+ // regexps, matching "ab" will already allow this regexp to be a
145
+ // candidate for match, so further matching "abc" is redundant.
146
+ // Note that we must ignore "" because find() would find it at the
147
+ // start of everything and thus we would end up erasing everything.
148
+ //
149
+ // The SSet sorts strings by length, then lexicographically. Note that
150
+ // smaller strings appear first and all strings must be unique. These
151
+ // observations let us skip string comparisons when possible.
152
+ SSIter i = ss->begin();
153
+ if (i != ss->end() && i->empty()) {
154
+ ++i;
155
+ }
156
+ for (; i != ss->end(); ++i) {
150
157
  SSIter j = i;
151
158
  ++j;
152
159
  while (j != ss->end()) {
153
- // Increment j early so that we can erase the element it points to.
154
- SSIter old_j = j;
160
+ if (j->size() > i->size() && j->find(*i) != std::string::npos) {
161
+ j = ss->erase(j);
162
+ continue;
163
+ }
155
164
  ++j;
156
- if (old_j->find(*i) != std::string::npos)
157
- ss->erase(old_j);
158
165
  }
159
166
  }
160
167
  }
161
168
 
162
- Prefilter* Prefilter::OrStrings(std::set<std::string>* ss) {
169
+ Prefilter* Prefilter::OrStrings(SSet* ss) {
170
+ Prefilter* or_prefilter = new Prefilter(NONE);
163
171
  SimplifyStringSet(ss);
164
- Prefilter* or_prefilter = NULL;
165
- if (!ss->empty()) {
166
- or_prefilter = new Prefilter(NONE);
167
- for (SSIter i = ss->begin(); i != ss->end(); ++i)
168
- or_prefilter = Or(or_prefilter, FromString(*i));
169
- }
172
+ for (SSIter i = ss->begin(); i != ss->end(); ++i)
173
+ or_prefilter = Or(or_prefilter, FromString(*i));
170
174
  return or_prefilter;
171
175
  }
172
176
 
@@ -224,14 +228,14 @@ class Prefilter::Info {
224
228
  // Caller takes ownership of the Prefilter.
225
229
  Prefilter* TakeMatch();
226
230
 
227
- std::set<std::string>& exact() { return exact_; }
231
+ SSet& exact() { return exact_; }
228
232
 
229
233
  bool is_exact() const { return is_exact_; }
230
234
 
231
235
  class Walker;
232
236
 
233
237
  private:
234
- std::set<std::string> exact_;
238
+ SSet exact_;
235
239
 
236
240
  // When is_exact_ is true, the strings that match
237
241
  // are placed in exact_. When it is no longer an exact
@@ -284,18 +288,7 @@ std::string Prefilter::Info::ToString() {
284
288
  return "";
285
289
  }
286
290
 
287
- // Add the strings from src to dst.
288
- static void CopyIn(const std::set<std::string>& src,
289
- std::set<std::string>* dst) {
290
- for (ConstSSIter i = src.begin(); i != src.end(); ++i)
291
- dst->insert(*i);
292
- }
293
-
294
- // Add the cross-product of a and b to dst.
295
- // (For each string i in a and j in b, add i+j.)
296
- static void CrossProduct(const std::set<std::string>& a,
297
- const std::set<std::string>& b,
298
- std::set<std::string>* dst) {
291
+ void Prefilter::CrossProduct(const SSet& a, const SSet& b, SSet* dst) {
299
292
  for (ConstSSIter i = a.begin(); i != a.end(); ++i)
300
293
  for (ConstSSIter j = b.begin(); j != b.end(); ++j)
301
294
  dst->insert(*i + *j);
@@ -341,8 +334,14 @@ Prefilter::Info* Prefilter::Info::Alt(Info* a, Info* b) {
341
334
  Info *ab = new Info();
342
335
 
343
336
  if (a->is_exact_ && b->is_exact_) {
344
- CopyIn(a->exact_, &ab->exact_);
345
- CopyIn(b->exact_, &ab->exact_);
337
+ // Avoid string copies by moving the larger exact_ set into
338
+ // ab directly, then merge in the smaller set.
339
+ if (a->exact_.size() < b->exact_.size()) {
340
+ using std::swap;
341
+ swap(a, b);
342
+ }
343
+ ab->exact_ = std::move(a->exact_);
344
+ ab->exact_.insert(b->exact_.begin(), b->exact_.end());
346
345
  ab->is_exact_ = true;
347
346
  } else {
348
347
  // Either a or b has is_exact_ = false. If the other
@@ -449,6 +448,7 @@ Prefilter::Info* Prefilter::Info::EmptyString() {
449
448
  typedef CharClass::iterator CCIter;
450
449
  Prefilter::Info* Prefilter::Info::CClass(CharClass *cc,
451
450
  bool latin1) {
451
+
452
452
  // If the class is too large, it's okay to overestimate.
453
453
  if (cc->size() > 10)
454
454
  return AnyCharOrAnyByte();
@@ -465,7 +465,6 @@ Prefilter::Info* Prefilter::Info::CClass(CharClass *cc,
465
465
 
466
466
 
467
467
  a->is_exact_ = true;
468
-
469
468
  return a;
470
469
  }
471
470
 
@@ -518,8 +517,8 @@ Prefilter::Info* Prefilter::Info::Walker::PostVisit(
518
517
  switch (re->op()) {
519
518
  default:
520
519
  case kRegexpRepeat:
521
- LOG(DFATAL) << "Bad regexp op " << re->op();
522
520
  info = EmptyString();
521
+ LOG(DFATAL) << "Bad regexp op " << re->op();
523
522
  break;
524
523
 
525
524
  case kRegexpNoMatch:
@@ -630,14 +629,15 @@ Prefilter* Prefilter::FromRegexp(Regexp* re) {
630
629
  return NULL;
631
630
 
632
631
  Regexp* simple = re->Simplify();
633
- Prefilter::Info *info = BuildInfo(simple);
632
+ if (simple == NULL)
633
+ return NULL;
634
634
 
635
+ Prefilter::Info* info = BuildInfo(simple);
635
636
  simple->Decref();
636
637
  if (info == NULL)
637
638
  return NULL;
638
639
 
639
640
  Prefilter* m = info->TakeMatch();
640
-
641
641
  delete info;
642
642
  return m;
643
643
  }
@@ -689,4 +689,4 @@ Prefilter* Prefilter::FromRE2(const RE2* re2) {
689
689
  }
690
690
 
691
691
 
692
- } // namespace duckdb_re2
692
+ } // namespace re2
@@ -60,8 +60,21 @@ class Prefilter {
60
60
  std::string DebugString() const;
61
61
 
62
62
  private:
63
+ // A comparator used to store exact strings. We compare by length,
64
+ // then lexicographically. This ordering makes it easier to reduce the
65
+ // set of strings in SimplifyStringSet.
66
+ struct LengthThenLex {
67
+ bool operator()(const std::string& a, const std::string& b) const {
68
+ return (a.size() < b.size()) || (a.size() == b.size() && a < b);
69
+ }
70
+ };
71
+
63
72
  class Info;
64
73
 
74
+ using SSet = std::set<std::string, LengthThenLex>;
75
+ using SSIter = SSet::iterator;
76
+ using ConstSSIter = SSet::const_iterator;
77
+
65
78
  // Combines two prefilters together to create an AND. The passed
66
79
  // Prefilters will be part of the returned Prefilter or deleted.
67
80
  static Prefilter* And(Prefilter* a, Prefilter* b);
@@ -77,12 +90,21 @@ class Prefilter {
77
90
 
78
91
  static Prefilter* FromString(const std::string& str);
79
92
 
80
- static Prefilter* OrStrings(std::set<std::string>* ss);
93
+ static Prefilter* OrStrings(SSet* ss);
81
94
 
82
95
  static Info* BuildInfo(Regexp* re);
83
96
 
84
97
  Prefilter* Simplify();
85
98
 
99
+ // Removes redundant strings from the set. A string is redundant if
100
+ // any of the other strings appear as a substring. The empty string
101
+ // is a special case, which is ignored.
102
+ static void SimplifyStringSet(SSet* ss);
103
+
104
+ // Adds the cross-product of a and b to dst.
105
+ // (For each string i in a and j in b, add i+j.)
106
+ static void CrossProduct(const SSet& a, const SSet& b, SSet* dst);
107
+
86
108
  // Kind of Prefilter.
87
109
  Op op_;
88
110
 
@@ -103,6 +125,6 @@ class Prefilter {
103
125
  Prefilter& operator=(const Prefilter&) = delete;
104
126
  };
105
127
 
106
- } // namespace duckdb_re2
128
+ } // namespace re2
107
129
 
108
130
  #endif // RE2_PREFILTER_H_
@@ -6,9 +6,9 @@
6
6
 
7
7
  #include <stddef.h>
8
8
  #include <algorithm>
9
+ #include <cmath>
9
10
  #include <map>
10
11
  #include <memory>
11
- #include <set>
12
12
  #include <string>
13
13
  #include <utility>
14
14
  #include <vector>
@@ -34,9 +34,6 @@ PrefilterTree::PrefilterTree(int min_atom_len)
34
34
  PrefilterTree::~PrefilterTree() {
35
35
  for (size_t i = 0; i < prefilter_vec_.size(); i++)
36
36
  delete prefilter_vec_[i];
37
-
38
- for (size_t i = 0; i < entries_.size(); i++)
39
- delete entries_[i].parents;
40
37
  }
41
38
 
42
39
  void PrefilterTree::Add(Prefilter* prefilter) {
@@ -65,44 +62,13 @@ void PrefilterTree::Compile(std::vector<std::string>* atom_vec) {
65
62
 
66
63
  compiled_ = true;
67
64
 
68
- // TODO(junyer): Use std::unordered_set<Prefilter*> instead?
69
65
  NodeMap nodes;
70
66
  AssignUniqueIds(&nodes, atom_vec);
71
-
72
- // Identify nodes that are too common among prefilters and are
73
- // triggering too many parents. Then get rid of them if possible.
74
- // Note that getting rid of a prefilter node simply means they are
75
- // no longer necessary for their parent to trigger; that is, we do
76
- // not miss out on any regexps triggering by getting rid of a
77
- // prefilter node.
78
- for (size_t i = 0; i < entries_.size(); i++) {
79
- StdIntMap* parents = entries_[i].parents;
80
- if (parents->size() > 8) {
81
- // This one triggers too many things. If all the parents are AND
82
- // nodes and have other things guarding them, then get rid of
83
- // this trigger. TODO(vsri): Adjust the threshold appropriately,
84
- // make it a function of total number of nodes?
85
- bool have_other_guard = true;
86
- for (StdIntMap::iterator it = parents->begin();
87
- it != parents->end(); ++it) {
88
- have_other_guard = have_other_guard &&
89
- (entries_[it->first].propagate_up_at_count > 1);
90
- }
91
-
92
- if (have_other_guard) {
93
- for (StdIntMap::iterator it = parents->begin();
94
- it != parents->end(); ++it)
95
- entries_[it->first].propagate_up_at_count -= 1;
96
-
97
- parents->clear(); // Forget the parents
98
- }
99
- }
100
- }
101
67
  }
102
68
 
103
69
  Prefilter* PrefilterTree::CanonicalNode(NodeMap* nodes, Prefilter* node) {
104
70
  std::string node_string = NodeString(node);
105
- std::map<std::string, Prefilter*>::iterator iter = nodes->find(node_string);
71
+ NodeMap::iterator iter = nodes->find(node_string);
106
72
  if (iter == nodes->end())
107
73
  return NULL;
108
74
  return (*iter).second;
@@ -212,65 +178,42 @@ void PrefilterTree::AssignUniqueIds(NodeMap* nodes,
212
178
  node->set_unique_id(canonical->unique_id());
213
179
  }
214
180
  }
215
- entries_.resize(nodes->size());
216
-
217
- // Create parent StdIntMap for the entries.
218
- for (int i = static_cast<int>(v.size()) - 1; i >= 0; i--) {
219
- Prefilter* prefilter = v[i];
220
- if (prefilter == NULL)
221
- continue;
222
-
223
- if (CanonicalNode(nodes, prefilter) != prefilter)
224
- continue;
225
-
226
- Entry* entry = &entries_[prefilter->unique_id()];
227
- entry->parents = new StdIntMap();
228
- }
181
+ entries_.resize(unique_id);
229
182
 
230
183
  // Fill the entries.
231
184
  for (int i = static_cast<int>(v.size()) - 1; i >= 0; i--) {
232
185
  Prefilter* prefilter = v[i];
233
186
  if (prefilter == NULL)
234
187
  continue;
235
-
236
188
  if (CanonicalNode(nodes, prefilter) != prefilter)
237
189
  continue;
238
-
239
- Entry* entry = &entries_[prefilter->unique_id()];
240
-
190
+ int id = prefilter->unique_id();
241
191
  switch (prefilter->op()) {
242
192
  default:
243
- case Prefilter::ALL:
244
193
  LOG(DFATAL) << "Unexpected op: " << prefilter->op();
245
194
  return;
246
195
 
247
196
  case Prefilter::ATOM:
248
- entry->propagate_up_at_count = 1;
197
+ entries_[id].propagate_up_at_count = 1;
249
198
  break;
250
199
 
251
200
  case Prefilter::OR:
252
201
  case Prefilter::AND: {
253
- std::set<int> uniq_child;
202
+ // For each child, we append our id to the child's list of
203
+ // parent ids... unless we happen to have done so already.
204
+ // The number of appends is the number of unique children,
205
+ // which allows correct upward propagation from AND nodes.
206
+ int up_count = 0;
254
207
  for (size_t j = 0; j < prefilter->subs()->size(); j++) {
255
- Prefilter* child = (*prefilter->subs())[j];
256
- Prefilter* canonical = CanonicalNode(nodes, child);
257
- if (canonical == NULL) {
258
- LOG(DFATAL) << "Null canonical node";
259
- return;
260
- }
261
- int child_id = canonical->unique_id();
262
- uniq_child.insert(child_id);
263
- // To the child, we want to add to parent indices.
264
- Entry* child_entry = &entries_[child_id];
265
- if (child_entry->parents->find(prefilter->unique_id()) ==
266
- child_entry->parents->end()) {
267
- (*child_entry->parents)[prefilter->unique_id()] = 1;
208
+ int child_id = (*prefilter->subs())[j]->unique_id();
209
+ std::vector<int>& parents = entries_[child_id].parents;
210
+ if (parents.empty() || parents.back() != id) {
211
+ parents.push_back(id);
212
+ up_count++;
268
213
  }
269
214
  }
270
- entry->propagate_up_at_count = prefilter->op() == Prefilter::AND
271
- ? static_cast<int>(uniq_child.size())
272
- : 1;
273
-
215
+ entries_[id].propagate_up_at_count =
216
+ prefilter->op() == Prefilter::AND ? up_count : 1;
274
217
  break;
275
218
  }
276
219
  }
@@ -285,6 +228,52 @@ void PrefilterTree::AssignUniqueIds(NodeMap* nodes,
285
228
  Entry* entry = &entries_[id];
286
229
  entry->regexps.push_back(static_cast<int>(i));
287
230
  }
231
+
232
+ // Lastly, using probability-based heuristics, we identify nodes
233
+ // that trigger too many parents and then we try to prune edges.
234
+ // We use logarithms below to avoid the likelihood of underflow.
235
+ double log_num_regexps = std::log(prefilter_vec_.size() - unfiltered_.size());
236
+ // Hoisted this above the loop so that we don't thrash the heap.
237
+ std::vector<std::pair<size_t, int>> entries_by_num_edges;
238
+ for (int i = static_cast<int>(v.size()) - 1; i >= 0; i--) {
239
+ Prefilter* prefilter = v[i];
240
+ // Pruning applies only to AND nodes because it "just" reduces
241
+ // precision; applied to OR nodes, it would break correctness.
242
+ if (prefilter == NULL || prefilter->op() != Prefilter::AND)
243
+ continue;
244
+ if (CanonicalNode(nodes, prefilter) != prefilter)
245
+ continue;
246
+ int id = prefilter->unique_id();
247
+
248
+ // Sort the current node's children by the numbers of parents.
249
+ entries_by_num_edges.clear();
250
+ for (size_t j = 0; j < prefilter->subs()->size(); j++) {
251
+ int child_id = (*prefilter->subs())[j]->unique_id();
252
+ const std::vector<int>& parents = entries_[child_id].parents;
253
+ entries_by_num_edges.emplace_back(parents.size(), child_id);
254
+ }
255
+ std::stable_sort(entries_by_num_edges.begin(), entries_by_num_edges.end());
256
+
257
+ // A running estimate of how many regexps will be triggered by
258
+ // pruning the remaining children's edges to the current node.
259
+ // Our nominal target is one, so the threshold is log(1) == 0;
260
+ // pruning occurs iff the child has more than nine edges left.
261
+ double log_num_triggered = log_num_regexps;
262
+ for (const auto& pair : entries_by_num_edges) {
263
+ int child_id = pair.second;
264
+ std::vector<int>& parents = entries_[child_id].parents;
265
+ if (log_num_triggered > 0.) {
266
+ log_num_triggered += std::log(parents.size());
267
+ log_num_triggered -= log_num_regexps;
268
+ } else if (parents.size() > 9) {
269
+ auto it = std::find(parents.begin(), parents.end(), id);
270
+ if (it != parents.end()) {
271
+ parents.erase(it);
272
+ entries_[id].propagate_up_at_count--;
273
+ }
274
+ }
275
+ }
276
+ }
288
277
  }
289
278
 
290
279
  // Functions for triggering during search.
@@ -331,10 +320,7 @@ void PrefilterTree::PropagateMatch(const std::vector<int>& atom_ids,
331
320
  regexps->set(entry.regexps[i], 1);
332
321
  int c;
333
322
  // Pass trigger up to parents.
334
- for (StdIntMap::iterator it = entry.parents->begin();
335
- it != entry.parents->end();
336
- ++it) {
337
- int j = it->first;
323
+ for (int j : entry.parents) {
338
324
  const Entry& parent = entries_[j];
339
325
  // Delay until all the children have succeeded.
340
326
  if (parent.propagate_up_at_count > 1) {
@@ -364,15 +350,15 @@ void PrefilterTree::PrintDebugInfo(NodeMap* nodes) {
364
350
  LOG(ERROR) << "#Unique Nodes: " << entries_.size();
365
351
 
366
352
  for (size_t i = 0; i < entries_.size(); i++) {
367
- StdIntMap* parents = entries_[i].parents;
353
+ const std::vector<int>& parents = entries_[i].parents;
368
354
  const std::vector<int>& regexps = entries_[i].regexps;
369
355
  LOG(ERROR) << "EntryId: " << i
370
- << " N: " << parents->size() << " R: " << regexps.size();
371
- for (StdIntMap::iterator it = parents->begin(); it != parents->end(); ++it)
372
- LOG(ERROR) << it->first;
356
+ << " N: " << parents.size() << " R: " << regexps.size();
357
+ for (int parent : parents)
358
+ LOG(ERROR) << parent;
373
359
  }
374
360
  LOG(ERROR) << "Map:";
375
- for (std::map<std::string, Prefilter*>::const_iterator iter = nodes->begin();
361
+ for (NodeMap::const_iterator iter = nodes->begin();
376
362
  iter != nodes->end(); ++iter)
377
363
  LOG(ERROR) << "NodeId: " << (*iter).second->unique_id()
378
364
  << " Str: " << (*iter).first;
@@ -399,4 +385,4 @@ std::string PrefilterTree::DebugNodeString(Prefilter* node) const {
399
385
  return node_string;
400
386
  }
401
387
 
402
- } // namespace duckdb_re2
388
+ } // namespace re2
@@ -7,7 +7,7 @@
7
7
 
8
8
  // The PrefilterTree class is used to form an AND-OR tree of strings
9
9
  // that would trigger each regexp. The 'prefilter' of each regexp is
10
- // added tp PrefilterTree, and then PrefilterTree is used to find all
10
+ // added to PrefilterTree, and then PrefilterTree is used to find all
11
11
  // the unique strings across the prefilters. During search, by using
12
12
  // matches from a string matching engine, PrefilterTree deduces the
13
13
  // set of regexps that are to be triggered. The 'string matching
@@ -21,8 +21,8 @@
21
21
  #include <vector>
22
22
 
23
23
  #include "util/util.h"
24
- #include "util/sparse_array.h"
25
24
  #include "re2/prefilter.h"
25
+ #include "re2/sparse_array.h"
26
26
 
27
27
  namespace duckdb_re2 {
28
28
 
@@ -59,7 +59,8 @@ class PrefilterTree {
59
59
 
60
60
  private:
61
61
  typedef SparseArray<int> IntMap;
62
- typedef std::map<int, int> StdIntMap;
62
+ // TODO(junyer): Use std::unordered_set<Prefilter*> instead?
63
+ // It should be trivial to get rid of the stringification...
63
64
  typedef std::map<std::string, Prefilter*> NodeMap;
64
65
 
65
66
  // Each unique node has a corresponding Entry that helps in
@@ -77,7 +78,7 @@ class PrefilterTree {
77
78
  // are two different nodes, but they share the atom 'def'. So when
78
79
  // 'def' matches, it triggers two parents, corresponding to the two
79
80
  // different OR nodes.
80
- StdIntMap* parents;
81
+ std::vector<int> parents;
81
82
 
82
83
  // When this node is ready to trigger the parent, what are the
83
84
  // regexps that are triggered.