duckdb 0.7.1-dev2.0 → 0.7.1-dev284.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 (140) hide show
  1. package/binding.gyp +7 -7
  2. package/package.json +1 -1
  3. package/src/duckdb/extension/json/buffered_json_reader.cpp +50 -9
  4. package/src/duckdb/extension/json/include/buffered_json_reader.hpp +7 -2
  5. package/src/duckdb/extension/json/include/json_common.hpp +2 -2
  6. package/src/duckdb/extension/json/include/json_scan.hpp +29 -10
  7. package/src/duckdb/extension/json/json_functions/copy_json.cpp +35 -22
  8. package/src/duckdb/extension/json/json_functions/json_create.cpp +8 -8
  9. package/src/duckdb/extension/json/json_functions/json_transform.cpp +47 -8
  10. package/src/duckdb/extension/json/json_functions/read_json.cpp +104 -49
  11. package/src/duckdb/extension/json/json_functions/read_json_objects.cpp +5 -3
  12. package/src/duckdb/extension/json/json_functions.cpp +6 -0
  13. package/src/duckdb/extension/json/json_scan.cpp +144 -34
  14. package/src/duckdb/extension/parquet/parquet-extension.cpp +3 -2
  15. package/src/duckdb/src/catalog/catalog.cpp +15 -0
  16. package/src/duckdb/src/catalog/catalog_entry/index_catalog_entry.cpp +8 -7
  17. package/src/duckdb/src/common/enums/logical_operator_type.cpp +2 -0
  18. package/src/duckdb/src/common/enums/physical_operator_type.cpp +2 -0
  19. package/src/duckdb/src/common/enums/statement_type.cpp +2 -0
  20. package/src/duckdb/src/common/file_system.cpp +14 -0
  21. package/src/duckdb/src/common/hive_partitioning.cpp +1 -0
  22. package/src/duckdb/src/common/operator/cast_operators.cpp +14 -8
  23. package/src/duckdb/src/common/printer.cpp +1 -1
  24. package/src/duckdb/src/common/types/time.cpp +1 -1
  25. package/src/duckdb/src/common/types/timestamp.cpp +35 -4
  26. package/src/duckdb/src/common/types.cpp +36 -10
  27. package/src/duckdb/src/execution/column_binding_resolver.cpp +5 -2
  28. package/src/duckdb/src/execution/index/art/art.cpp +117 -67
  29. package/src/duckdb/src/execution/index/art/art_key.cpp +24 -12
  30. package/src/duckdb/src/execution/index/art/leaf.cpp +7 -8
  31. package/src/duckdb/src/execution/index/art/node.cpp +13 -27
  32. package/src/duckdb/src/execution/index/art/node16.cpp +5 -8
  33. package/src/duckdb/src/execution/index/art/node256.cpp +3 -5
  34. package/src/duckdb/src/execution/index/art/node4.cpp +4 -7
  35. package/src/duckdb/src/execution/index/art/node48.cpp +5 -8
  36. package/src/duckdb/src/execution/index/art/prefix.cpp +2 -3
  37. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +7 -9
  38. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +6 -11
  39. package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +13 -13
  40. package/src/duckdb/src/execution/operator/persistent/parallel_csv_reader.cpp +1 -1
  41. package/src/duckdb/src/execution/operator/schema/physical_detach.cpp +37 -0
  42. package/src/duckdb/src/execution/operator/schema/physical_drop.cpp +0 -5
  43. package/src/duckdb/src/execution/physical_plan/plan_simple.cpp +4 -0
  44. package/src/duckdb/src/execution/physical_plan_generator.cpp +1 -0
  45. package/src/duckdb/src/function/pragma/pragma_queries.cpp +38 -11
  46. package/src/duckdb/src/function/table/read_csv.cpp +17 -5
  47. package/src/duckdb/src/function/table/table_scan.cpp +3 -0
  48. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  49. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +5 -1
  50. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_index_entry.hpp +1 -1
  51. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/index_catalog_entry.hpp +1 -1
  52. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +1 -0
  53. package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +1 -0
  54. package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +3 -2
  55. package/src/duckdb/src/include/duckdb/common/enums/wal_type.hpp +3 -0
  56. package/src/duckdb/src/include/duckdb/common/exception.hpp +10 -0
  57. package/src/duckdb/src/include/duckdb/common/file_system.hpp +1 -0
  58. package/src/duckdb/src/include/duckdb/common/hive_partitioning.hpp +9 -1
  59. package/src/duckdb/src/include/duckdb/common/radix_partitioning.hpp +4 -4
  60. package/src/duckdb/src/include/duckdb/common/types/timestamp.hpp +5 -1
  61. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +37 -41
  62. package/src/duckdb/src/include/duckdb/execution/index/art/art_key.hpp +8 -11
  63. package/src/duckdb/src/include/duckdb/execution/operator/persistent/base_csv_reader.hpp +1 -3
  64. package/src/duckdb/src/include/duckdb/execution/operator/persistent/buffered_csv_reader.hpp +0 -2
  65. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +2 -0
  66. package/src/duckdb/src/include/duckdb/execution/operator/schema/physical_detach.hpp +32 -0
  67. package/src/duckdb/src/include/duckdb/main/client_data.hpp +2 -2
  68. package/src/duckdb/src/include/duckdb/main/config.hpp +0 -3
  69. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_database_info.hpp +0 -4
  70. package/src/duckdb/src/include/duckdb/parser/parsed_data/detach_info.hpp +32 -0
  71. package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +1 -1
  72. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +2 -2
  73. package/src/duckdb/src/include/duckdb/parser/statement/copy_statement.hpp +1 -1
  74. package/src/duckdb/src/include/duckdb/parser/statement/detach_statement.hpp +29 -0
  75. package/src/duckdb/src/include/duckdb/parser/statement/list.hpp +1 -0
  76. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +3 -3
  77. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +1 -1
  78. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +1 -0
  79. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +1 -0
  80. package/src/duckdb/src/include/duckdb/planner/binder.hpp +4 -0
  81. package/src/duckdb/src/include/duckdb/planner/expression_binder/index_binder.hpp +10 -3
  82. package/src/duckdb/src/include/duckdb/planner/operator/logical_execute.hpp +1 -5
  83. package/src/duckdb/src/include/duckdb/planner/operator/logical_show.hpp +1 -2
  84. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +7 -1
  85. package/src/duckdb/src/include/duckdb/storage/index.hpp +47 -38
  86. package/src/duckdb/src/include/duckdb/storage/storage_extension.hpp +7 -0
  87. package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +2 -0
  88. package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +7 -0
  89. package/src/duckdb/src/main/client_context.cpp +2 -0
  90. package/src/duckdb/src/main/extension/extension_alias.cpp +2 -1
  91. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +2 -6
  92. package/src/duckdb/src/parser/parsed_data/create_index_info.cpp +3 -0
  93. package/src/duckdb/src/parser/statement/copy_statement.cpp +2 -13
  94. package/src/duckdb/src/parser/statement/delete_statement.cpp +3 -0
  95. package/src/duckdb/src/parser/statement/detach_statement.cpp +15 -0
  96. package/src/duckdb/src/parser/statement/insert_statement.cpp +9 -0
  97. package/src/duckdb/src/parser/statement/update_statement.cpp +3 -0
  98. package/src/duckdb/src/parser/transform/expression/transform_case.cpp +3 -3
  99. package/src/duckdb/src/parser/transform/statement/transform_create_database.cpp +0 -1
  100. package/src/duckdb/src/parser/transform/statement/transform_detach.cpp +19 -0
  101. package/src/duckdb/src/parser/transformer.cpp +2 -0
  102. package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +3 -0
  103. package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +6 -3
  104. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +16 -14
  105. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +13 -0
  106. package/src/duckdb/src/planner/binder/statement/bind_detach.cpp +19 -0
  107. package/src/duckdb/src/planner/binder/statement/bind_drop.cpp +29 -4
  108. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +22 -1
  109. package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +2 -1
  110. package/src/duckdb/src/planner/binder.cpp +2 -0
  111. package/src/duckdb/src/planner/expression_binder/index_binder.cpp +32 -1
  112. package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +21 -5
  113. package/src/duckdb/src/planner/logical_operator.cpp +4 -0
  114. package/src/duckdb/src/planner/planner.cpp +1 -0
  115. package/src/duckdb/src/storage/compression/bitpacking.cpp +16 -7
  116. package/src/duckdb/src/storage/data_table.cpp +66 -3
  117. package/src/duckdb/src/storage/index.cpp +1 -1
  118. package/src/duckdb/src/storage/local_storage.cpp +1 -1
  119. package/src/duckdb/src/storage/storage_info.cpp +2 -1
  120. package/src/duckdb/src/storage/table/column_data.cpp +4 -2
  121. package/src/duckdb/src/storage/table/update_segment.cpp +15 -0
  122. package/src/duckdb/src/storage/table_index_list.cpp +1 -2
  123. package/src/duckdb/src/storage/wal_replay.cpp +68 -0
  124. package/src/duckdb/src/storage/write_ahead_log.cpp +21 -1
  125. package/src/duckdb/src/transaction/commit_state.cpp +5 -2
  126. package/src/duckdb/third_party/fmt/include/fmt/core.h +1 -2
  127. package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +1 -0
  128. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +14 -0
  129. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +530 -1006
  130. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +17659 -17626
  131. package/src/duckdb/third_party/thrift/thrift/Thrift.h +8 -2
  132. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +4 -4
  133. package/src/duckdb/ub_src_execution_operator_schema.cpp +2 -0
  134. package/src/duckdb/ub_src_parser_statement.cpp +2 -0
  135. package/src/duckdb/ub_src_parser_transform_statement.cpp +2 -0
  136. package/src/duckdb/ub_src_planner_binder_statement.cpp +2 -0
  137. package/src/statement.cpp +46 -12
  138. package/test/prepare.test.ts +39 -1
  139. package/test/typescript_decls.test.ts +1 -1
  140. package/src/duckdb/src/include/duckdb/function/create_database_extension.hpp +0 -37
@@ -18,6 +18,8 @@
18
18
  #include "duckdb/storage/write_ahead_log.hpp"
19
19
  #include "duckdb/storage/storage_manager.hpp"
20
20
  #include "duckdb/main/attached_database.hpp"
21
+ #include "duckdb/execution/index/art/art.hpp"
22
+ #include "duckdb/catalog/catalog_entry/duck_index_entry.hpp"
21
23
 
22
24
  namespace duckdb {
23
25
 
@@ -154,6 +156,12 @@ void ReplayState::ReplayEntry(WALType entry_type) {
154
156
  case WALType::DROP_TABLE_MACRO:
155
157
  ReplayDropTableMacro();
156
158
  break;
159
+ case WALType::CREATE_INDEX:
160
+ ReplayCreateIndex();
161
+ break;
162
+ case WALType::DROP_INDEX:
163
+ ReplayDropIndex();
164
+ break;
157
165
  case WALType::USE_TABLE:
158
166
  ReplayUseTable();
159
167
  break;
@@ -379,6 +387,66 @@ void ReplayState::ReplayDropTableMacro() {
379
387
  catalog.DropEntry(context, &info);
380
388
  }
381
389
 
390
+ //===--------------------------------------------------------------------===//
391
+ // Replay Index
392
+ //===--------------------------------------------------------------------===//
393
+ void ReplayState::ReplayCreateIndex() {
394
+
395
+ auto info = IndexCatalogEntry::Deserialize(source, context);
396
+ if (deserialize_only) {
397
+ return;
398
+ }
399
+
400
+ // get the physical table to which we'll add the index
401
+ auto table = catalog.GetEntry<TableCatalogEntry>(context, info->schema, info->table->table_name);
402
+ auto &data_table = table->GetStorage();
403
+
404
+ // bind the parsed expressions
405
+ if (info->expressions.empty()) {
406
+ for (auto &parsed_expr : info->parsed_expressions) {
407
+ info->expressions.push_back(parsed_expr->Copy());
408
+ }
409
+ }
410
+ auto binder = Binder::CreateBinder(context);
411
+ auto expressions = binder->BindCreateIndexExpressions(table, info.get());
412
+
413
+ // create the empty index
414
+ unique_ptr<Index> index;
415
+ switch (info->index_type) {
416
+ case IndexType::ART: {
417
+ index = make_unique<ART>(info->column_ids, TableIOManager::Get(data_table), expressions, info->constraint_type,
418
+ data_table.db, true);
419
+ break;
420
+ }
421
+ default:
422
+ throw InternalException("Unimplemented index type");
423
+ }
424
+
425
+ // add the index to the catalog
426
+ auto index_entry = (DuckIndexEntry *)catalog.CreateIndex(context, info.get());
427
+ index_entry->index = index.get();
428
+ index_entry->info = data_table.info;
429
+ for (auto &parsed_expr : info->parsed_expressions) {
430
+ index_entry->parsed_expressions.push_back(parsed_expr->Copy());
431
+ }
432
+
433
+ // physically add the index to the data table storage
434
+ data_table.WALAddIndex(context, std::move(index), expressions);
435
+ }
436
+
437
+ void ReplayState::ReplayDropIndex() {
438
+
439
+ DropInfo info;
440
+ info.type = CatalogType::INDEX_ENTRY;
441
+ info.schema = source.Read<string>();
442
+ info.name = source.Read<string>();
443
+ if (deserialize_only) {
444
+ return;
445
+ }
446
+
447
+ catalog.DropEntry(context, &info);
448
+ }
449
+
382
450
  //===--------------------------------------------------------------------===//
383
451
  // Replay Data
384
452
  //===--------------------------------------------------------------------===//
@@ -119,7 +119,7 @@ void WriteAheadLog::WriteSequenceValue(SequenceCatalogEntry *entry, SequenceValu
119
119
  }
120
120
 
121
121
  //===--------------------------------------------------------------------===//
122
- // MACRO'S
122
+ // MACROS
123
123
  //===--------------------------------------------------------------------===//
124
124
  void WriteAheadLog::WriteCreateMacro(ScalarMacroCatalogEntry *entry) {
125
125
  if (skip_writing) {
@@ -155,6 +155,26 @@ void WriteAheadLog::WriteDropTableMacro(TableMacroCatalogEntry *entry) {
155
155
  writer->WriteString(entry->name);
156
156
  }
157
157
 
158
+ //===--------------------------------------------------------------------===//
159
+ // Indexes
160
+ //===--------------------------------------------------------------------===//
161
+ void WriteAheadLog::WriteCreateIndex(IndexCatalogEntry *entry) {
162
+ if (skip_writing) {
163
+ return;
164
+ }
165
+ writer->Write<WALType>(WALType::CREATE_INDEX);
166
+ entry->Serialize(*writer);
167
+ }
168
+
169
+ void WriteAheadLog::WriteDropIndex(IndexCatalogEntry *entry) {
170
+ if (skip_writing) {
171
+ return;
172
+ }
173
+ writer->Write<WALType>(WALType::DROP_INDEX);
174
+ writer->WriteString(entry->schema->name);
175
+ writer->WriteString(entry->name);
176
+ }
177
+
158
178
  //===--------------------------------------------------------------------===//
159
179
  // Custom Types
160
180
  //===--------------------------------------------------------------------===//
@@ -87,7 +87,9 @@ void CommitState::WriteCatalogEntry(CatalogEntry *entry, data_ptr_t dataptr) {
87
87
  case CatalogType::TABLE_MACRO_ENTRY:
88
88
  log->WriteCreateTableMacro((TableMacroCatalogEntry *)parent);
89
89
  break;
90
-
90
+ case CatalogType::INDEX_ENTRY:
91
+ log->WriteCreateIndex((IndexCatalogEntry *)parent);
92
+ break;
91
93
  case CatalogType::TYPE_ENTRY:
92
94
  log->WriteCreateType((TypeCatalogEntry *)parent);
93
95
  break;
@@ -119,6 +121,8 @@ void CommitState::WriteCatalogEntry(CatalogEntry *entry, data_ptr_t dataptr) {
119
121
  log->WriteDropType((TypeCatalogEntry *)entry);
120
122
  break;
121
123
  case CatalogType::INDEX_ENTRY:
124
+ log->WriteDropIndex((IndexCatalogEntry *)entry);
125
+ break;
122
126
  case CatalogType::PREPARED_STATEMENT:
123
127
  case CatalogType::SCALAR_FUNCTION_ENTRY:
124
128
  // do nothing, indexes/prepared statements/functions aren't persisted to disk
@@ -127,7 +131,6 @@ void CommitState::WriteCatalogEntry(CatalogEntry *entry, data_ptr_t dataptr) {
127
131
  throw InternalException("Don't know how to drop this type!");
128
132
  }
129
133
  break;
130
- case CatalogType::INDEX_ENTRY:
131
134
  case CatalogType::PREPARED_STATEMENT:
132
135
  case CatalogType::AGGREGATE_FUNCTION_ENTRY:
133
136
  case CatalogType::SCALAR_FUNCTION_ENTRY:
@@ -359,12 +359,11 @@ using wstring_view = basic_string_view<wchar_t>;
359
359
  #if FMT_HAS_FEATURE(__cpp_char8_t)
360
360
  typedef char8_t fmt_char8_t;
361
361
  #else
362
- typedef unsigned char fmt_char8_t;
362
+ typedef char fmt_char8_t;
363
363
  #endif
364
364
 
365
365
  /** Specifies if ``T`` is a character type. Can be specialized by users. */
366
366
  template <typename T> struct is_char : std::false_type {};
367
- template <> struct is_char<char> : std::true_type {};
368
367
  template <> struct is_char<wchar_t> : std::true_type {};
369
368
  template <> struct is_char<fmt_char8_t> : std::true_type {};
370
369
  template <> struct is_char<char16_t> : std::true_type {};
@@ -422,6 +422,7 @@ typedef enum PGNodeTag {
422
422
  T_PGExportStmt,
423
423
  T_PGImportStmt,
424
424
  T_PGAttachStmt,
425
+ T_PGDetachStmt,
425
426
  T_PGCreateDatabaseStmt,
426
427
  T_PGUseStmt,
427
428
 
@@ -2070,6 +2070,20 @@ typedef struct PGAttachStmt
2070
2070
  PGNode *query;
2071
2071
  } PGAttachStmt;
2072
2072
 
2073
+ /* ----------------------
2074
+ * Dettach Statement
2075
+ * ----------------------
2076
+ */
2077
+
2078
+ typedef struct PGDetachStmt
2079
+ {
2080
+ PGNodeTag type;
2081
+ char *db_name; /* list of names of attached databases */
2082
+ bool missing_ok;
2083
+ } PGDetachStmt;
2084
+
2085
+
2086
+
2073
2087
  /* ----------------------
2074
2088
  * CREATE DATABASE Statement
2075
2089
  * ----------------------