duckdb 0.7.2-dev2995.0 → 0.7.2-dev3117.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 (106) hide show
  1. package/binding.gyp +1 -0
  2. package/package.json +1 -1
  3. package/src/duckdb/extension/json/include/json_deserializer.hpp +1 -0
  4. package/src/duckdb/extension/json/include/json_serializer.hpp +8 -1
  5. package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +1 -3
  6. package/src/duckdb/extension/json/json_functions/json_structure.cpp +3 -3
  7. package/src/duckdb/extension/json/json_functions/json_transform.cpp +3 -2
  8. package/src/duckdb/extension/parquet/parquet-extension.cpp +9 -7
  9. package/src/duckdb/src/common/enum_util.cpp +5908 -0
  10. package/src/duckdb/src/common/enums/expression_type.cpp +216 -4
  11. package/src/duckdb/src/common/enums/join_type.cpp +6 -5
  12. package/src/duckdb/src/common/enums/physical_operator_type.cpp +2 -0
  13. package/src/duckdb/src/common/exception.cpp +1 -1
  14. package/src/duckdb/src/common/exception_format_value.cpp +2 -2
  15. package/src/duckdb/src/common/multi_file_reader.cpp +14 -0
  16. package/src/duckdb/src/common/serializer/binary_deserializer.cpp +143 -0
  17. package/src/duckdb/src/common/serializer/binary_serializer.cpp +160 -0
  18. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +3 -3
  19. package/src/duckdb/src/common/types.cpp +11 -10
  20. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +4 -4
  21. package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +2 -1
  22. package/src/duckdb/src/core_functions/scalar/list/list_sort.cpp +2 -3
  23. package/src/duckdb/src/execution/aggregate_hashtable.cpp +3 -3
  24. package/src/duckdb/src/execution/operator/aggregate/distinct_aggregate_data.cpp +1 -1
  25. package/src/duckdb/src/execution/operator/aggregate/grouped_aggregate_data.cpp +2 -2
  26. package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +3 -2
  27. package/src/duckdb/src/execution/operator/helper/physical_streaming_sample.cpp +2 -1
  28. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +2 -1
  29. package/src/duckdb/src/execution/operator/join/physical_comparison_join.cpp +2 -1
  30. package/src/duckdb/src/execution/operator/persistent/physical_batch_copy_to_file.cpp +165 -0
  31. package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +1 -1
  32. package/src/duckdb/src/execution/operator/schema/physical_attach.cpp +9 -7
  33. package/src/duckdb/src/execution/partitionable_hashtable.cpp +2 -2
  34. package/src/duckdb/src/execution/physical_plan/plan_copy_to_file.cpp +25 -4
  35. package/src/duckdb/src/execution/physical_plan/plan_sample.cpp +2 -1
  36. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +1 -1
  37. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +5 -4
  38. package/src/duckdb/src/function/table/copy_csv.cpp +85 -29
  39. package/src/duckdb/src/function/table/read_csv.cpp +17 -11
  40. package/src/duckdb/src/function/table/system/duckdb_settings.cpp +2 -1
  41. package/src/duckdb/src/function/table/system/duckdb_types.cpp +2 -1
  42. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  43. package/src/duckdb/src/include/duckdb/common/enum_util.hpp +958 -0
  44. package/src/duckdb/src/include/duckdb/common/enums/join_type.hpp +3 -3
  45. package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +1 -0
  46. package/src/duckdb/src/include/duckdb/common/exception.hpp +4 -4
  47. package/src/duckdb/src/include/duckdb/common/exception_format_value.hpp +3 -2
  48. package/src/duckdb/src/include/duckdb/common/multi_file_reader_options.hpp +44 -0
  49. package/src/duckdb/src/include/duckdb/common/serializer/binary_deserializer.hpp +93 -0
  50. package/src/duckdb/src/include/duckdb/common/serializer/binary_serializer.hpp +92 -0
  51. package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +7 -3
  52. package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +2 -2
  53. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_collection.hpp +1 -1
  54. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_segment.hpp +1 -1
  55. package/src/duckdb/src/include/duckdb/common/types.hpp +1 -0
  56. package/src/duckdb/src/include/duckdb/common/vector.hpp +61 -14
  57. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +3 -2
  58. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/distinct_aggregate_data.hpp +2 -2
  59. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/grouped_aggregate_data.hpp +2 -2
  60. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_hash_aggregate.hpp +3 -3
  61. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_batch_copy_to_file.hpp +68 -0
  62. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_copy_to_file.hpp +2 -0
  63. package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +3 -3
  64. package/src/duckdb/src/include/duckdb/execution/radix_partitioned_hashtable.hpp +2 -2
  65. package/src/duckdb/src/include/duckdb/function/copy_function.hpp +32 -4
  66. package/src/duckdb/src/include/duckdb/function/table/read_csv.hpp +4 -2
  67. package/src/duckdb/src/include/duckdb/main/config.hpp +2 -0
  68. package/src/duckdb/src/include/duckdb/main/database.hpp +1 -3
  69. package/src/duckdb/src/include/duckdb/main/database_path_and_type.hpp +24 -0
  70. package/src/duckdb/src/include/duckdb/main/relation/setop_relation.hpp +1 -0
  71. package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +1 -0
  72. package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +2 -0
  73. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +2 -0
  74. package/src/duckdb/src/include/duckdb/planner/operator/logical_aggregate.hpp +1 -1
  75. package/src/duckdb/src/include/duckdb/planner/query_node/bound_select_node.hpp +1 -1
  76. package/src/duckdb/src/include/duckdb/verification/deserialized_statement_verifier_v2.hpp +26 -0
  77. package/src/duckdb/src/include/duckdb/verification/statement_verifier.hpp +1 -0
  78. package/src/duckdb/src/main/client_context.cpp +1 -0
  79. package/src/duckdb/src/main/client_verify.cpp +1 -0
  80. package/src/duckdb/src/main/database.cpp +11 -23
  81. package/src/duckdb/src/main/database_path_and_type.cpp +23 -0
  82. package/src/duckdb/src/main/relation/join_relation.cpp +2 -1
  83. package/src/duckdb/src/main/relation/setop_relation.cpp +2 -3
  84. package/src/duckdb/src/parser/expression/window_expression.cpp +1 -1
  85. package/src/duckdb/src/parser/parsed_data/sample_options.cpp +2 -2
  86. package/src/duckdb/src/parser/query_node/select_node.cpp +1 -1
  87. package/src/duckdb/src/parser/result_modifier.cpp +2 -2
  88. package/src/duckdb/src/parser/statement/select_statement.cpp +0 -44
  89. package/src/duckdb/src/parser/tableref/joinref.cpp +3 -3
  90. package/src/duckdb/src/parser/tableref.cpp +1 -1
  91. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +3 -3
  92. package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +6 -0
  93. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +4 -1
  94. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +7 -0
  95. package/src/duckdb/src/planner/operator/logical_aggregate.cpp +1 -1
  96. package/src/duckdb/src/planner/operator/logical_comparison_join.cpp +2 -2
  97. package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +2 -1
  98. package/src/duckdb/src/verification/deserialized_statement_verifier_v2.cpp +20 -0
  99. package/src/duckdb/src/verification/statement_verifier.cpp +3 -0
  100. package/src/duckdb/ub_src_common.cpp +2 -2
  101. package/src/duckdb/ub_src_common_serializer.cpp +4 -2
  102. package/src/duckdb/ub_src_execution_operator_persistent.cpp +2 -0
  103. package/src/duckdb/ub_src_main.cpp +2 -0
  104. package/src/duckdb/src/common/serializer/enum_serializer.cpp +0 -1180
  105. package/src/duckdb/src/common/vector.cpp +0 -12
  106. package/src/duckdb/src/include/duckdb/common/serializer/enum_serializer.hpp +0 -113
package/binding.gyp CHANGED
@@ -135,6 +135,7 @@
135
135
  "src/duckdb/ub_src_transaction.cpp",
136
136
  "src/duckdb/src/verification/copied_statement_verifier.cpp",
137
137
  "src/duckdb/src/verification/deserialized_statement_verifier.cpp",
138
+ "src/duckdb/src/verification/deserialized_statement_verifier_v2.cpp",
138
139
  "src/duckdb/src/verification/external_statement_verifier.cpp",
139
140
  "src/duckdb/src/verification/no_operator_caching_verifier.cpp",
140
141
  "src/duckdb/src/verification/parsed_statement_verifier.cpp",
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "duckdb",
3
3
  "main": "./lib/duckdb.js",
4
4
  "types": "./lib/duckdb.d.ts",
5
- "version": "0.7.2-dev2995.0",
5
+ "version": "0.7.2-dev3117.0",
6
6
  "description": "DuckDB node.js API",
7
7
  "gypfile": true,
8
8
  "dependencies": {
@@ -7,6 +7,7 @@ namespace duckdb {
7
7
  class JsonDeserializer : public FormatDeserializer {
8
8
  public:
9
9
  JsonDeserializer(yyjson_val *val, yyjson_doc *doc) : doc(doc) {
10
+ deserialize_enum_from_string = true;
10
11
  stack.emplace_back(val);
11
12
  }
12
13
  ~JsonDeserializer() {
@@ -24,12 +24,19 @@ private:
24
24
  // Either adds a value to the current object with the current tag, or appends it to the current array
25
25
  void PushValue(yyjson_mut_val *val);
26
26
 
27
- public:
28
27
  explicit JsonSerializer(yyjson_mut_doc *doc, bool skip_if_null, bool skip_if_empty)
29
28
  : doc(doc), stack({yyjson_mut_obj(doc)}), skip_if_null(skip_if_null), skip_if_empty(skip_if_empty) {
30
29
  serialize_enum_as_string = true;
31
30
  }
32
31
 
32
+ public:
33
+ template <class T>
34
+ static yyjson_mut_val *Serialize(T &value, yyjson_mut_doc *doc, bool skip_if_null, bool skip_if_empty) {
35
+ JsonSerializer serializer(doc, skip_if_null, skip_if_empty);
36
+ value.FormatSerialize(serializer);
37
+ return serializer.GetRootObject();
38
+ }
39
+
33
40
  yyjson_mut_val *GetRootObject() {
34
41
  D_ASSERT(stack.size() == 1); // or we forgot to pop somewhere
35
42
  return stack.front();
@@ -98,9 +98,7 @@ static void JsonSerializeFunction(DataChunk &args, ExpressionState &state, Vecto
98
98
  throw NotImplementedException("Only SELECT statements can be serialized to json!");
99
99
  }
100
100
  auto &select = statement->Cast<SelectStatement>();
101
- auto serializer = JsonSerializer(doc, info.skip_if_null, info.skip_if_empty);
102
- select.FormatSerialize(serializer);
103
- auto json = serializer.GetRootObject();
101
+ auto json = JsonSerializer::Serialize(select, doc, info.skip_if_null, info.skip_if_empty);
104
102
 
105
103
  yyjson_mut_arr_append(statements_arr, json);
106
104
  }
@@ -3,6 +3,7 @@
3
3
  #include "json_executors.hpp"
4
4
  #include "json_scan.hpp"
5
5
  #include "json_transform.hpp"
6
+ #include "duckdb/common/enum_util.hpp"
6
7
 
7
8
  namespace duckdb {
8
9
 
@@ -300,7 +301,7 @@ bool JSONStructureNode::EliminateCandidateFormats(idx_t count, Vector &string_ve
300
301
  success = TryParse<TryParseTimeStamp, timestamp_t>(string_vector, format, count);
301
302
  break;
302
303
  default:
303
- throw InternalException("No date/timestamp formats for %s", LogicalTypeIdToString(type));
304
+ throw InternalException("No date/timestamp formats for %s", EnumUtil::ToString(type));
304
305
  }
305
306
  if (success) {
306
307
  while (formats.size() > i) {
@@ -457,8 +458,7 @@ static inline yyjson_mut_val *ConvertStructure(const JSONStructureNode &node, yy
457
458
  case LogicalTypeId::STRUCT:
458
459
  return ConvertStructureObject(node, doc);
459
460
  default:
460
- auto type_string = LogicalTypeIdToString(desc.type); // TODO: this requires copying, can be optimized
461
- return yyjson_mut_strncpy(doc, type_string.c_str(), type_string.length());
461
+ return yyjson_mut_str(doc, EnumUtil::ToChars(desc.type));
462
462
  }
463
463
  }
464
464
 
@@ -1,6 +1,7 @@
1
1
  #include "json_transform.hpp"
2
2
 
3
3
  #include "duckdb/common/types.hpp"
4
+ #include "duckdb/common/enum_util.hpp"
4
5
  #include "duckdb/execution/expression_executor.hpp"
5
6
  #include "duckdb/function/scalar/nested_functions.hpp"
6
7
  #include "json_functions.hpp"
@@ -266,7 +267,7 @@ bool JSONTransform::GetStringVector(yyjson_val *vals[], const idx_t count, const
266
267
  if (!val || unsafe_yyjson_is_null(val)) {
267
268
  validity.SetInvalid(i);
268
269
  } else if (options.strict_cast && !unsafe_yyjson_is_str(val)) {
269
- options.error_message = StringUtil::Format("Unable to cast '%s' to " + LogicalTypeIdToString(target.id()),
270
+ options.error_message = StringUtil::Format("Unable to cast '%s' to " + EnumUtil::ToString(target.id()),
270
271
  JSONCommon::ValToString(val, 50));
271
272
  options.object_index = i;
272
273
  return false;
@@ -343,7 +344,7 @@ static bool TransformFromStringWithFormat(yyjson_val *vals[], Vector &result, co
343
344
  case LogicalTypeId::TIMESTAMP:
344
345
  return TransformStringWithFormat<TryParseTimeStamp, timestamp_t>(string_vector, format, count, result, options);
345
346
  default:
346
- throw InternalException("No date/timestamp formats for %s", LogicalTypeIdToString(result.GetType().id()));
347
+ throw InternalException("No date/timestamp formats for %s", EnumUtil::ToString(result.GetType().id()));
347
348
  }
348
349
  }
349
350
 
@@ -304,6 +304,9 @@ public:
304
304
  parquet_options.file_row_number = BooleanValue::Get(kv.second);
305
305
  }
306
306
  }
307
+ if (parquet_options.file_options.auto_detect_hive_partitioning) {
308
+ parquet_options.file_options.hive_partitioning = MultiFileReaderOptions::AutoDetectHivePartitioning(files);
309
+ }
307
310
  return ParquetScanBindInternal(context, std::move(files), return_types, names, parquet_options);
308
311
  }
309
312
 
@@ -665,14 +668,13 @@ unique_ptr<LocalFunctionData> ParquetWriteInitializeLocal(ExecutionContext &cont
665
668
  }
666
669
 
667
670
  //===--------------------------------------------------------------------===//
668
- // Parallel
671
+ // Execution Mode
669
672
  //===--------------------------------------------------------------------===//
670
- bool ParquetWriteIsParallel(ClientContext &context, FunctionData &bind_data) {
671
- auto &config = DBConfig::GetConfig(context);
672
- if (config.options.preserve_insertion_order) {
673
- return false;
673
+ CopyFunctionExecutionMode ParquetWriteExecutionMode(bool preserve_insertion_order, bool supports_batch_index) {
674
+ if (!preserve_insertion_order) {
675
+ return CopyFunctionExecutionMode::PARALLEL_COPY_TO_FILE;
674
676
  }
675
- return true;
677
+ return CopyFunctionExecutionMode::REGULAR_COPY_TO_FILE;
676
678
  }
677
679
 
678
680
  unique_ptr<TableRef> ParquetScanReplacement(ClientContext &context, const string &table_name,
@@ -714,7 +716,7 @@ void ParquetExtension::Load(DuckDB &db) {
714
716
  function.copy_to_sink = ParquetWriteSink;
715
717
  function.copy_to_combine = ParquetWriteCombine;
716
718
  function.copy_to_finalize = ParquetWriteFinalize;
717
- function.parallel = ParquetWriteIsParallel;
719
+ function.execution_mode = ParquetWriteExecutionMode;
718
720
  function.copy_from_bind = ParquetScanFunction::ParquetReadBind;
719
721
  function.copy_from_function = scan_fun.functions[0];
720
722