duckdb 0.7.1-dev37.0 → 0.7.1-dev407.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 (166) hide show
  1. package/README.md +1 -1
  2. package/binding.gyp +7 -7
  3. package/package.json +3 -3
  4. package/src/duckdb/extension/json/buffered_json_reader.cpp +50 -9
  5. package/src/duckdb/extension/json/include/buffered_json_reader.hpp +7 -2
  6. package/src/duckdb/extension/json/include/json_scan.hpp +45 -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_structure.cpp +8 -3
  10. package/src/duckdb/extension/json/json_functions/json_transform.cpp +54 -10
  11. package/src/duckdb/extension/json/json_functions/read_json.cpp +104 -49
  12. package/src/duckdb/extension/json/json_functions/read_json_objects.cpp +5 -3
  13. package/src/duckdb/extension/json/json_functions.cpp +7 -0
  14. package/src/duckdb/extension/json/json_scan.cpp +144 -37
  15. package/src/duckdb/extension/parquet/column_reader.cpp +7 -0
  16. package/src/duckdb/extension/parquet/include/column_reader.hpp +1 -0
  17. package/src/duckdb/extension/parquet/parquet-extension.cpp +2 -9
  18. package/src/duckdb/src/catalog/catalog.cpp +62 -13
  19. package/src/duckdb/src/catalog/catalog_entry/index_catalog_entry.cpp +8 -7
  20. package/src/duckdb/src/catalog/default/default_views.cpp +1 -1
  21. package/src/duckdb/src/common/bind_helpers.cpp +55 -0
  22. package/src/duckdb/src/common/enums/logical_operator_type.cpp +2 -0
  23. package/src/duckdb/src/common/enums/physical_operator_type.cpp +2 -0
  24. package/src/duckdb/src/common/enums/statement_type.cpp +2 -0
  25. package/src/duckdb/src/common/file_system.cpp +28 -0
  26. package/src/duckdb/src/common/hive_partitioning.cpp +1 -0
  27. package/src/duckdb/src/common/local_file_system.cpp +4 -4
  28. package/src/duckdb/src/common/operator/cast_operators.cpp +10 -4
  29. package/src/duckdb/src/common/types/partitioned_column_data.cpp +1 -0
  30. package/src/duckdb/src/common/types/time.cpp +1 -1
  31. package/src/duckdb/src/common/types/timestamp.cpp +35 -4
  32. package/src/duckdb/src/common/types.cpp +37 -11
  33. package/src/duckdb/src/execution/column_binding_resolver.cpp +5 -2
  34. package/src/duckdb/src/execution/index/art/art.cpp +117 -67
  35. package/src/duckdb/src/execution/index/art/art_key.cpp +24 -12
  36. package/src/duckdb/src/execution/index/art/leaf.cpp +7 -8
  37. package/src/duckdb/src/execution/index/art/node.cpp +13 -27
  38. package/src/duckdb/src/execution/index/art/node16.cpp +5 -8
  39. package/src/duckdb/src/execution/index/art/node256.cpp +3 -5
  40. package/src/duckdb/src/execution/index/art/node4.cpp +4 -7
  41. package/src/duckdb/src/execution/index/art/node48.cpp +5 -8
  42. package/src/duckdb/src/execution/index/art/prefix.cpp +2 -3
  43. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +6 -27
  44. package/src/duckdb/src/execution/operator/helper/physical_reset.cpp +1 -9
  45. package/src/duckdb/src/execution/operator/helper/physical_set.cpp +1 -9
  46. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +7 -9
  47. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +6 -11
  48. package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +13 -13
  49. package/src/duckdb/src/execution/operator/schema/physical_detach.cpp +37 -0
  50. package/src/duckdb/src/execution/operator/schema/physical_drop.cpp +0 -5
  51. package/src/duckdb/src/execution/physical_operator.cpp +6 -6
  52. package/src/duckdb/src/execution/physical_plan/plan_simple.cpp +4 -0
  53. package/src/duckdb/src/execution/physical_plan_generator.cpp +1 -0
  54. package/src/duckdb/src/function/pragma/pragma_queries.cpp +38 -11
  55. package/src/duckdb/src/function/scalar/generic/current_setting.cpp +2 -2
  56. package/src/duckdb/src/function/scalar/map/map.cpp +69 -21
  57. package/src/duckdb/src/function/table/read_csv.cpp +17 -5
  58. package/src/duckdb/src/function/table/system/duckdb_temporary_files.cpp +59 -0
  59. package/src/duckdb/src/function/table/system_functions.cpp +1 -0
  60. package/src/duckdb/src/function/table/table_scan.cpp +3 -0
  61. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  62. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +7 -1
  63. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_index_entry.hpp +1 -1
  64. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/index_catalog_entry.hpp +1 -1
  65. package/src/duckdb/src/include/duckdb/common/bind_helpers.hpp +2 -0
  66. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +1 -0
  67. package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +1 -0
  68. package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +3 -2
  69. package/src/duckdb/src/include/duckdb/common/enums/wal_type.hpp +3 -0
  70. package/src/duckdb/src/include/duckdb/common/exception.hpp +10 -0
  71. package/src/duckdb/src/include/duckdb/common/file_system.hpp +1 -0
  72. package/src/duckdb/src/include/duckdb/common/hive_partitioning.hpp +9 -1
  73. package/src/duckdb/src/include/duckdb/common/radix_partitioning.hpp +4 -4
  74. package/src/duckdb/src/include/duckdb/common/types/timestamp.hpp +5 -1
  75. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +37 -41
  76. package/src/duckdb/src/include/duckdb/execution/index/art/art_key.hpp +8 -11
  77. package/src/duckdb/src/include/duckdb/execution/operator/persistent/base_csv_reader.hpp +1 -3
  78. package/src/duckdb/src/include/duckdb/execution/operator/persistent/buffered_csv_reader.hpp +0 -2
  79. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +2 -0
  80. package/src/duckdb/src/include/duckdb/execution/operator/schema/physical_detach.hpp +32 -0
  81. package/src/duckdb/src/include/duckdb/function/table/system_functions.hpp +4 -0
  82. package/src/duckdb/src/include/duckdb/main/client_data.hpp +2 -2
  83. package/src/duckdb/src/include/duckdb/main/config.hpp +2 -3
  84. package/src/duckdb/src/include/duckdb/main/{extension_functions.hpp → extension_entries.hpp} +26 -5
  85. package/src/duckdb/src/include/duckdb/main/extension_helper.hpp +3 -0
  86. package/src/duckdb/src/include/duckdb/main/settings.hpp +9 -0
  87. package/src/duckdb/src/include/duckdb/parallel/pipeline_executor.hpp +0 -7
  88. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_database_info.hpp +0 -4
  89. package/src/duckdb/src/include/duckdb/parser/parsed_data/detach_info.hpp +32 -0
  90. package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +1 -1
  91. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +2 -2
  92. package/src/duckdb/src/include/duckdb/parser/statement/copy_statement.hpp +1 -1
  93. package/src/duckdb/src/include/duckdb/parser/statement/detach_statement.hpp +29 -0
  94. package/src/duckdb/src/include/duckdb/parser/statement/list.hpp +1 -0
  95. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +3 -3
  96. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +1 -1
  97. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +1 -0
  98. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +1 -0
  99. package/src/duckdb/src/include/duckdb/planner/binder.hpp +4 -0
  100. package/src/duckdb/src/include/duckdb/planner/expression_binder/index_binder.hpp +10 -3
  101. package/src/duckdb/src/include/duckdb/planner/operator/logical_execute.hpp +1 -5
  102. package/src/duckdb/src/include/duckdb/planner/operator/logical_show.hpp +1 -2
  103. package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +8 -0
  104. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +7 -1
  105. package/src/duckdb/src/include/duckdb/storage/index.hpp +47 -38
  106. package/src/duckdb/src/include/duckdb/storage/storage_extension.hpp +7 -0
  107. package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +2 -0
  108. package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +7 -0
  109. package/src/duckdb/src/main/client_context.cpp +2 -0
  110. package/src/duckdb/src/main/config.cpp +1 -0
  111. package/src/duckdb/src/main/database.cpp +14 -5
  112. package/src/duckdb/src/main/extension/extension_alias.cpp +2 -1
  113. package/src/duckdb/src/main/extension/extension_install.cpp +43 -9
  114. package/src/duckdb/src/main/extension/extension_load.cpp +29 -5
  115. package/src/duckdb/src/main/settings/settings.cpp +16 -0
  116. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +2 -6
  117. package/src/duckdb/src/parallel/pipeline_executor.cpp +1 -55
  118. package/src/duckdb/src/parser/parsed_data/create_index_info.cpp +3 -0
  119. package/src/duckdb/src/parser/statement/copy_statement.cpp +2 -13
  120. package/src/duckdb/src/parser/statement/delete_statement.cpp +3 -0
  121. package/src/duckdb/src/parser/statement/detach_statement.cpp +15 -0
  122. package/src/duckdb/src/parser/statement/insert_statement.cpp +9 -0
  123. package/src/duckdb/src/parser/statement/update_statement.cpp +3 -0
  124. package/src/duckdb/src/parser/transform/expression/transform_case.cpp +3 -3
  125. package/src/duckdb/src/parser/transform/statement/transform_create_database.cpp +0 -1
  126. package/src/duckdb/src/parser/transform/statement/transform_detach.cpp +19 -0
  127. package/src/duckdb/src/parser/transformer.cpp +2 -0
  128. package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +3 -0
  129. package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +7 -14
  130. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +16 -14
  131. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +13 -0
  132. package/src/duckdb/src/planner/binder/statement/bind_detach.cpp +19 -0
  133. package/src/duckdb/src/planner/binder/statement/bind_drop.cpp +29 -4
  134. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +22 -1
  135. package/src/duckdb/src/planner/binder.cpp +2 -0
  136. package/src/duckdb/src/planner/expression_binder/index_binder.cpp +32 -1
  137. package/src/duckdb/src/planner/logical_operator.cpp +4 -0
  138. package/src/duckdb/src/planner/planner.cpp +1 -0
  139. package/src/duckdb/src/storage/buffer_manager.cpp +105 -26
  140. package/src/duckdb/src/storage/compression/bitpacking.cpp +16 -7
  141. package/src/duckdb/src/storage/data_table.cpp +66 -3
  142. package/src/duckdb/src/storage/index.cpp +1 -1
  143. package/src/duckdb/src/storage/local_storage.cpp +1 -1
  144. package/src/duckdb/src/storage/table/column_data.cpp +4 -2
  145. package/src/duckdb/src/storage/table/update_segment.cpp +15 -0
  146. package/src/duckdb/src/storage/table_index_list.cpp +1 -2
  147. package/src/duckdb/src/storage/wal_replay.cpp +68 -0
  148. package/src/duckdb/src/storage/write_ahead_log.cpp +21 -1
  149. package/src/duckdb/src/transaction/commit_state.cpp +5 -2
  150. package/src/duckdb/third_party/concurrentqueue/blockingconcurrentqueue.h +2 -2
  151. package/src/duckdb/third_party/fmt/include/fmt/core.h +1 -2
  152. package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +1 -0
  153. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +14 -0
  154. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +530 -1006
  155. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +17659 -17626
  156. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +4 -4
  157. package/src/duckdb/ub_src_execution_operator_schema.cpp +2 -0
  158. package/src/duckdb/ub_src_function_table_system.cpp +2 -0
  159. package/src/duckdb/ub_src_parser_statement.cpp +2 -0
  160. package/src/duckdb/ub_src_parser_transform_statement.cpp +2 -0
  161. package/src/duckdb/ub_src_planner_binder_statement.cpp +2 -0
  162. package/src/statement.cpp +46 -12
  163. package/test/arrow.test.ts +3 -3
  164. package/test/prepare.test.ts +39 -1
  165. package/test/typescript_decls.test.ts +1 -1
  166. package/src/duckdb/src/include/duckdb/function/create_database_extension.hpp +0 -37
@@ -350,15 +350,15 @@
350
350
 
351
351
  #include "extension/icu/third_party/icu/i18n/double-conversion-strtod.cpp"
352
352
 
353
- #include "extension/icu/third_party/icu/i18n/double-conversion-double-to-string.cpp"
354
-
355
353
  #include "extension/icu/third_party/icu/i18n/double-conversion-string-to-double.cpp"
356
354
 
355
+ #include "extension/icu/third_party/icu/i18n/double-conversion-bignum.cpp"
356
+
357
357
  #include "extension/icu/third_party/icu/i18n/double-conversion-fast-dtoa.cpp"
358
358
 
359
- #include "extension/icu/third_party/icu/i18n/double-conversion-bignum-dtoa.cpp"
359
+ #include "extension/icu/third_party/icu/i18n/double-conversion-double-to-string.cpp"
360
360
 
361
- #include "extension/icu/third_party/icu/i18n/double-conversion-bignum.cpp"
361
+ #include "extension/icu/third_party/icu/i18n/double-conversion-bignum-dtoa.cpp"
362
362
 
363
363
  #include "extension/icu/third_party/icu/i18n/double-conversion-cached-powers.cpp"
364
364
 
@@ -16,5 +16,7 @@
16
16
 
17
17
  #include "src/execution/operator/schema/physical_create_function.cpp"
18
18
 
19
+ #include "src/execution/operator/schema/physical_detach.cpp"
20
+
19
21
  #include "src/execution/operator/schema/physical_drop.cpp"
20
22
 
@@ -22,6 +22,8 @@
22
22
 
23
23
  #include "src/function/table/system/duckdb_tables.cpp"
24
24
 
25
+ #include "src/function/table/system/duckdb_temporary_files.cpp"
26
+
25
27
  #include "src/function/table/system/duckdb_types.cpp"
26
28
 
27
29
  #include "src/function/table/system/duckdb_views.cpp"
@@ -8,6 +8,8 @@
8
8
 
9
9
  #include "src/parser/statement/create_statement.cpp"
10
10
 
11
+ #include "src/parser/statement/detach_statement.cpp"
12
+
11
13
  #include "src/parser/statement/delete_statement.cpp"
12
14
 
13
15
  #include "src/parser/statement/drop_statement.cpp"
@@ -2,6 +2,8 @@
2
2
 
3
3
  #include "src/parser/transform/statement/transform_attach.cpp"
4
4
 
5
+ #include "src/parser/transform/statement/transform_detach.cpp"
6
+
5
7
  #include "src/parser/transform/statement/transform_call.cpp"
6
8
 
7
9
  #include "src/parser/transform/statement/transform_checkpoint.cpp"
@@ -10,6 +10,8 @@
10
10
 
11
11
  #include "src/planner/binder/statement/bind_delete.cpp"
12
12
 
13
+ #include "src/planner/binder/statement/bind_detach.cpp"
14
+
13
15
  #include "src/planner/binder/statement/bind_drop.cpp"
14
16
 
15
17
  #include "src/planner/binder/statement/bind_execute.cpp"
package/src/statement.cpp CHANGED
@@ -8,6 +8,8 @@
8
8
  #include <string>
9
9
  #include <regex>
10
10
 
11
+ using std::unique_ptr;
12
+
11
13
  namespace node_duckdb {
12
14
 
13
15
  Napi::FunctionReference Statement::constructor;
@@ -28,13 +30,45 @@ Napi::Object Statement::Init(Napi::Env env, Napi::Object exports) {
28
30
  return exports;
29
31
  }
30
32
 
33
+ static unique_ptr<duckdb::PreparedStatement> PrepareManyInternal(Statement &statement) {
34
+ auto &connection = statement.connection_ref->connection;
35
+ std::vector<unique_ptr<duckdb::SQLStatement>> statements;
36
+ try {
37
+ if (connection == nullptr) {
38
+ throw duckdb::ConnectionException("Connection was never established or has been closed already");
39
+ }
40
+
41
+ // Prepare all statements
42
+ statements = connection->ExtractStatements(statement.sql);
43
+ if (statements.empty()) {
44
+ throw duckdb::InvalidInputException("No statement to prepare!");
45
+ }
46
+
47
+ // if there are multiple statements, we directly execute the statements besides the last one
48
+ // we only return the result of the last statement to the user, unless one of the previous statements fails
49
+ for (idx_t i = 0; i + 1 < statements.size(); i++) {
50
+ auto pending_query = connection->PendingQuery(std::move(statements[i]));
51
+ auto res = pending_query->Execute();
52
+ if (res->HasError()) {
53
+ return duckdb::make_unique<duckdb::PreparedStatement>(res->GetErrorObject());
54
+ }
55
+ }
56
+
57
+ return connection->Prepare(std::move(statements.back()));
58
+ } catch (const duckdb::Exception &ex) {
59
+ return duckdb::make_unique<duckdb::PreparedStatement>(duckdb::PreservedError(ex));
60
+ } catch (std::exception &ex) {
61
+ return duckdb::make_unique<duckdb::PreparedStatement>(duckdb::PreservedError(ex));
62
+ }
63
+ }
64
+
31
65
  struct PrepareTask : public Task {
32
66
  PrepareTask(Statement &statement, Napi::Function callback) : Task(statement, callback) {
33
67
  }
34
68
 
35
69
  void DoWork() override {
36
70
  auto &statement = Get<Statement>();
37
- statement.statement = statement.connection_ref->connection->Prepare(statement.sql);
71
+ statement.statement = PrepareManyInternal(statement);
38
72
  }
39
73
 
40
74
  void Callback() override {
@@ -221,7 +255,7 @@ struct StatementParam {
221
255
  };
222
256
 
223
257
  struct RunPreparedTask : public Task {
224
- RunPreparedTask(Statement &statement, duckdb::unique_ptr<StatementParam> params, RunType run_type)
258
+ RunPreparedTask(Statement &statement, unique_ptr<StatementParam> params, RunType run_type)
225
259
  : Task(statement, params->callback), params(std::move(params)), run_type(run_type) {
226
260
  }
227
261
 
@@ -366,13 +400,13 @@ struct RunPreparedTask : public Task {
366
400
  } break;
367
401
  }
368
402
  }
369
- std::unique_ptr<duckdb::QueryResult> result;
370
- duckdb::unique_ptr<StatementParam> params;
403
+ unique_ptr<duckdb::QueryResult> result;
404
+ unique_ptr<StatementParam> params;
371
405
  RunType run_type;
372
406
  };
373
407
 
374
408
  struct RunQueryTask : public Task {
375
- RunQueryTask(Statement &statement, duckdb::unique_ptr<StatementParam> params, Napi::Promise::Deferred deferred)
409
+ RunQueryTask(Statement &statement, unique_ptr<StatementParam> params, Napi::Promise::Deferred deferred)
376
410
  : Task(statement), deferred(deferred), params(std::move(params)) {
377
411
  }
378
412
 
@@ -406,11 +440,11 @@ struct RunQueryTask : public Task {
406
440
  }
407
441
 
408
442
  Napi::Promise::Deferred deferred;
409
- std::unique_ptr<duckdb::QueryResult> result;
410
- duckdb::unique_ptr<StatementParam> params;
443
+ unique_ptr<duckdb::QueryResult> result;
444
+ unique_ptr<StatementParam> params;
411
445
  };
412
446
 
413
- duckdb::unique_ptr<StatementParam> Statement::HandleArgs(const Napi::CallbackInfo &info) {
447
+ unique_ptr<StatementParam> Statement::HandleArgs(const Napi::CallbackInfo &info) {
414
448
  size_t start_idx = ignore_first_param ? 1 : 0;
415
449
  auto params = duckdb::make_unique<StatementParam>();
416
450
 
@@ -541,7 +575,7 @@ struct GetChunkTask : public Task {
541
575
  }
542
576
 
543
577
  Napi::Promise::Deferred deferred;
544
- std::unique_ptr<duckdb::DataChunk> chunk;
578
+ unique_ptr<duckdb::DataChunk> chunk;
545
579
  };
546
580
 
547
581
  struct GetNextArrowIpcTask : public Task {
@@ -571,10 +605,10 @@ struct GetNextArrowIpcTask : public Task {
571
605
  duckdb::string_t blob = *(duckdb::string_t *)(chunk->data[0].GetData());
572
606
 
573
607
  // Transfer ownership and Construct ArrayBuffer
574
- auto data_chunk_ptr = new std::unique_ptr<duckdb::DataChunk>();
608
+ auto data_chunk_ptr = new unique_ptr<duckdb::DataChunk>();
575
609
  *data_chunk_ptr = std::move(chunk);
576
610
  auto deleter = [](Napi::Env, void *finalizeData, void *hint) {
577
- delete static_cast<std::unique_ptr<duckdb::DataChunk> *>(hint);
611
+ delete static_cast<unique_ptr<duckdb::DataChunk> *>(hint);
578
612
  };
579
613
  auto array_buffer =
580
614
  Napi::ArrayBuffer::New(env, (void *)blob.GetDataUnsafe(), blob.GetSize(), deleter, data_chunk_ptr);
@@ -583,7 +617,7 @@ struct GetNextArrowIpcTask : public Task {
583
617
  }
584
618
 
585
619
  Napi::Promise::Deferred deferred;
586
- std::unique_ptr<duckdb::DataChunk> chunk;
620
+ unique_ptr<duckdb::DataChunk> chunk;
587
621
  };
588
622
 
589
623
  Napi::Value QueryResult::NextChunk(const Napi::CallbackInfo &info) {
@@ -20,13 +20,13 @@ describe('arrow IPC API fails neatly when extension not loaded', function() {
20
20
  db.arrowIPCStream(query).then(
21
21
  () => Promise.reject(new Error('Expected method to reject.')),
22
22
  err => {
23
- assert.ok(err.message.includes("Catalog Error: Function with name to_arrow_ipc is not on the catalog, but it exists in the arrow extension. To Install and Load the extension, run: INSTALL arrow; LOAD arrow;"))
23
+ assert.ok(err.message.includes("arrow"))
24
24
  }
25
25
  );
26
26
 
27
27
  db.arrowIPCAll(`SELECT * FROM ipc_table`, function (err: null | Error, result: ArrowArray) {
28
28
  if (err) {
29
- assert.ok(err.message.includes("Catalog Error: Function with name to_arrow_ipc is not on the catalog, but it exists in the arrow extension. To Install and Load the extension, run: INSTALL arrow; LOAD arrow;"))
29
+ assert.ok(err.message.includes("arrow"))
30
30
  } else {
31
31
  assert.fail("Expected error");
32
32
  }
@@ -39,7 +39,7 @@ describe('arrow IPC API fails neatly when extension not loaded', function() {
39
39
  it('register buffer should be disabled currently', function(done) {
40
40
  db.register_buffer("test", [new Uint8Array(new ArrayBuffer(10))], true, (err: null | Error) => {
41
41
  assert.ok(err)
42
- assert.ok(err.toString().includes("Function with name scan_arrow_ipc is not on the catalog, but it exists in the arrow extension. To Install and Load the extension, run: INSTALL arrow; LOAD arrow;"));
42
+ assert.ok(err.toString().includes("arrow"));
43
43
  done()
44
44
  });
45
45
  });
@@ -66,7 +66,6 @@ describe('prepare', function() {
66
66
  }
67
67
  });
68
68
 
69
-
70
69
  it('should prepare a statement and return values again', function(done) {
71
70
  var stmt = db.prepare("SELECT txt, num, flt, blb FROM foo ORDER BY num", function(err: null | Error) {
72
71
  if (err) throw err;
@@ -343,6 +342,45 @@ describe('prepare', function() {
343
342
  after(function(done) { db.close(done); });
344
343
  });
345
344
 
345
+ describe('prepare multiple statements', function() {
346
+ var db: sqlite3.Database;
347
+ before(function(done) { db = new sqlite3.Database(':memory:',
348
+ function(err) {
349
+ db.run("CREATE TABLE foo (a integer)", done)
350
+ }
351
+ ); });
352
+
353
+ it('should directly execute first statements', function(done) {
354
+ db.prepare("insert into foo values (3); insert into foo values (4); select * from foo")
355
+ .all(function(err: null | Error, rows: TableData) {
356
+ if (err) throw err;
357
+ assert.equal(rows[0].a, 3);
358
+ assert.equal(rows[1].a, 4);
359
+ })
360
+ .finalize(done);
361
+ });
362
+
363
+ it('should fail in prepare, when executing the first statement', function(done) {
364
+ let prepared = db.prepare("SELECT * FROM non_existent_table; SELECT 42", function(err: null | Error) {
365
+ if (err) {
366
+ done();
367
+ return;
368
+ }
369
+ });
370
+ });
371
+
372
+ it('should fail in prepare, when preparing the first statement', function(done) {
373
+ let prepared = db.prepare("SELCET * FROM foo; SELECT 42", function(err: null | Error) {
374
+ if (err) {
375
+ done();
376
+ return;
377
+ }
378
+ });
379
+ });
380
+
381
+ after(function(done) { db.close(done); });
382
+ });
383
+
346
384
  describe('all()', function() {
347
385
  var db: sqlite3.Database;
348
386
  before(function(done) { db = new sqlite3.Database(':memory:',
@@ -2,7 +2,7 @@ import * as duckdb from "..";
2
2
  import assert from "assert";
3
3
  import fs from "fs";
4
4
 
5
- describe("TypeScript declarataions", function () {
5
+ describe("TypeScript declarations", function () {
6
6
  var db: duckdb.Database;
7
7
  before(function (done) {
8
8
  db = new duckdb.Database(":memory:", duckdb.OPEN_READWRITE, done);
@@ -1,37 +0,0 @@
1
- //===----------------------------------------------------------------------===//
2
- // DuckDB
3
- //
4
- // duckdb/function/create_database_extension.hpp
5
- //
6
- //
7
- //===----------------------------------------------------------------------===//
8
-
9
- #pragma once
10
-
11
- #include "duckdb/common/common.hpp"
12
-
13
- namespace duckdb {
14
-
15
- class ClientContext;
16
- class TableFunctionRef;
17
-
18
- struct CreateDatabaseExtensionData {
19
- virtual ~CreateDatabaseExtensionData() {
20
- }
21
- };
22
-
23
- typedef unique_ptr<TableFunctionRef> (*create_database_t)(ClientContext &context, const string &extension_name,
24
- const string &database_name, const string &source_path,
25
- CreateDatabaseExtensionData *data);
26
-
27
- struct CreateDatabaseExtension {
28
- explicit CreateDatabaseExtension(create_database_t function,
29
- unique_ptr<CreateDatabaseExtensionData> data_p = nullptr)
30
- : function(function), data(std::move(data_p)) {
31
- }
32
-
33
- create_database_t function;
34
- unique_ptr<CreateDatabaseExtensionData> data;
35
- };
36
-
37
- } // namespace duckdb