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.
- package/binding.gyp +7 -7
- package/package.json +1 -1
- package/src/duckdb/extension/json/buffered_json_reader.cpp +50 -9
- package/src/duckdb/extension/json/include/buffered_json_reader.hpp +7 -2
- package/src/duckdb/extension/json/include/json_common.hpp +2 -2
- package/src/duckdb/extension/json/include/json_scan.hpp +29 -10
- package/src/duckdb/extension/json/json_functions/copy_json.cpp +35 -22
- package/src/duckdb/extension/json/json_functions/json_create.cpp +8 -8
- package/src/duckdb/extension/json/json_functions/json_transform.cpp +47 -8
- package/src/duckdb/extension/json/json_functions/read_json.cpp +104 -49
- package/src/duckdb/extension/json/json_functions/read_json_objects.cpp +5 -3
- package/src/duckdb/extension/json/json_functions.cpp +6 -0
- package/src/duckdb/extension/json/json_scan.cpp +144 -34
- package/src/duckdb/extension/parquet/parquet-extension.cpp +3 -2
- package/src/duckdb/src/catalog/catalog.cpp +15 -0
- package/src/duckdb/src/catalog/catalog_entry/index_catalog_entry.cpp +8 -7
- package/src/duckdb/src/common/enums/logical_operator_type.cpp +2 -0
- package/src/duckdb/src/common/enums/physical_operator_type.cpp +2 -0
- package/src/duckdb/src/common/enums/statement_type.cpp +2 -0
- package/src/duckdb/src/common/file_system.cpp +14 -0
- package/src/duckdb/src/common/hive_partitioning.cpp +1 -0
- package/src/duckdb/src/common/operator/cast_operators.cpp +14 -8
- package/src/duckdb/src/common/printer.cpp +1 -1
- package/src/duckdb/src/common/types/time.cpp +1 -1
- package/src/duckdb/src/common/types/timestamp.cpp +35 -4
- package/src/duckdb/src/common/types.cpp +36 -10
- package/src/duckdb/src/execution/column_binding_resolver.cpp +5 -2
- package/src/duckdb/src/execution/index/art/art.cpp +117 -67
- package/src/duckdb/src/execution/index/art/art_key.cpp +24 -12
- package/src/duckdb/src/execution/index/art/leaf.cpp +7 -8
- package/src/duckdb/src/execution/index/art/node.cpp +13 -27
- package/src/duckdb/src/execution/index/art/node16.cpp +5 -8
- package/src/duckdb/src/execution/index/art/node256.cpp +3 -5
- package/src/duckdb/src/execution/index/art/node4.cpp +4 -7
- package/src/duckdb/src/execution/index/art/node48.cpp +5 -8
- package/src/duckdb/src/execution/index/art/prefix.cpp +2 -3
- package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +7 -9
- package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +6 -11
- package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +13 -13
- package/src/duckdb/src/execution/operator/persistent/parallel_csv_reader.cpp +1 -1
- package/src/duckdb/src/execution/operator/schema/physical_detach.cpp +37 -0
- package/src/duckdb/src/execution/operator/schema/physical_drop.cpp +0 -5
- package/src/duckdb/src/execution/physical_plan/plan_simple.cpp +4 -0
- package/src/duckdb/src/execution/physical_plan_generator.cpp +1 -0
- package/src/duckdb/src/function/pragma/pragma_queries.cpp +38 -11
- package/src/duckdb/src/function/table/read_csv.cpp +17 -5
- package/src/duckdb/src/function/table/table_scan.cpp +3 -0
- package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
- package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +5 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_index_entry.hpp +1 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/index_catalog_entry.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +3 -2
- package/src/duckdb/src/include/duckdb/common/enums/wal_type.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/exception.hpp +10 -0
- package/src/duckdb/src/include/duckdb/common/file_system.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/hive_partitioning.hpp +9 -1
- package/src/duckdb/src/include/duckdb/common/radix_partitioning.hpp +4 -4
- package/src/duckdb/src/include/duckdb/common/types/timestamp.hpp +5 -1
- package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +37 -41
- package/src/duckdb/src/include/duckdb/execution/index/art/art_key.hpp +8 -11
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/base_csv_reader.hpp +1 -3
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/buffered_csv_reader.hpp +0 -2
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +2 -0
- package/src/duckdb/src/include/duckdb/execution/operator/schema/physical_detach.hpp +32 -0
- package/src/duckdb/src/include/duckdb/main/client_data.hpp +2 -2
- package/src/duckdb/src/include/duckdb/main/config.hpp +0 -3
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_database_info.hpp +0 -4
- package/src/duckdb/src/include/duckdb/parser/parsed_data/detach_info.hpp +32 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +2 -2
- package/src/duckdb/src/include/duckdb/parser/statement/copy_statement.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/statement/detach_statement.hpp +29 -0
- package/src/duckdb/src/include/duckdb/parser/statement/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +3 -3
- package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/tokens.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/transformer.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/binder.hpp +4 -0
- package/src/duckdb/src/include/duckdb/planner/expression_binder/index_binder.hpp +10 -3
- package/src/duckdb/src/include/duckdb/planner/operator/logical_execute.hpp +1 -5
- package/src/duckdb/src/include/duckdb/planner/operator/logical_show.hpp +1 -2
- package/src/duckdb/src/include/duckdb/storage/data_table.hpp +7 -1
- package/src/duckdb/src/include/duckdb/storage/index.hpp +47 -38
- package/src/duckdb/src/include/duckdb/storage/storage_extension.hpp +7 -0
- package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +2 -0
- package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +7 -0
- package/src/duckdb/src/main/client_context.cpp +2 -0
- package/src/duckdb/src/main/extension/extension_alias.cpp +2 -1
- package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +2 -6
- package/src/duckdb/src/parser/parsed_data/create_index_info.cpp +3 -0
- package/src/duckdb/src/parser/statement/copy_statement.cpp +2 -13
- package/src/duckdb/src/parser/statement/delete_statement.cpp +3 -0
- package/src/duckdb/src/parser/statement/detach_statement.cpp +15 -0
- package/src/duckdb/src/parser/statement/insert_statement.cpp +9 -0
- package/src/duckdb/src/parser/statement/update_statement.cpp +3 -0
- package/src/duckdb/src/parser/transform/expression/transform_case.cpp +3 -3
- package/src/duckdb/src/parser/transform/statement/transform_create_database.cpp +0 -1
- package/src/duckdb/src/parser/transform/statement/transform_detach.cpp +19 -0
- package/src/duckdb/src/parser/transformer.cpp +2 -0
- package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +3 -0
- package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +6 -3
- package/src/duckdb/src/planner/binder/statement/bind_create.cpp +16 -14
- package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +13 -0
- package/src/duckdb/src/planner/binder/statement/bind_detach.cpp +19 -0
- package/src/duckdb/src/planner/binder/statement/bind_drop.cpp +29 -4
- package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +22 -1
- package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +2 -1
- package/src/duckdb/src/planner/binder.cpp +2 -0
- package/src/duckdb/src/planner/expression_binder/index_binder.cpp +32 -1
- package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +21 -5
- package/src/duckdb/src/planner/logical_operator.cpp +4 -0
- package/src/duckdb/src/planner/planner.cpp +1 -0
- package/src/duckdb/src/storage/compression/bitpacking.cpp +16 -7
- package/src/duckdb/src/storage/data_table.cpp +66 -3
- package/src/duckdb/src/storage/index.cpp +1 -1
- package/src/duckdb/src/storage/local_storage.cpp +1 -1
- package/src/duckdb/src/storage/storage_info.cpp +2 -1
- package/src/duckdb/src/storage/table/column_data.cpp +4 -2
- package/src/duckdb/src/storage/table/update_segment.cpp +15 -0
- package/src/duckdb/src/storage/table_index_list.cpp +1 -2
- package/src/duckdb/src/storage/wal_replay.cpp +68 -0
- package/src/duckdb/src/storage/write_ahead_log.cpp +21 -1
- package/src/duckdb/src/transaction/commit_state.cpp +5 -2
- package/src/duckdb/third_party/fmt/include/fmt/core.h +1 -2
- package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +1 -0
- package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +14 -0
- package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +530 -1006
- package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +17659 -17626
- package/src/duckdb/third_party/thrift/thrift/Thrift.h +8 -2
- package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +4 -4
- package/src/duckdb/ub_src_execution_operator_schema.cpp +2 -0
- package/src/duckdb/ub_src_parser_statement.cpp +2 -0
- package/src/duckdb/ub_src_parser_transform_statement.cpp +2 -0
- package/src/duckdb/ub_src_planner_binder_statement.cpp +2 -0
- package/src/statement.cpp +46 -12
- package/test/prepare.test.ts +39 -1
- package/test/typescript_decls.test.ts +1 -1
- 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
|
-
//
|
|
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
|
|
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 {};
|
|
@@ -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
|
* ----------------------
|