duckdb 0.7.2-dev3353.0 → 0.7.2-dev3402.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 (51) hide show
  1. package/package.json +1 -1
  2. package/src/duckdb/extension/json/buffered_json_reader.cpp +2 -3
  3. package/src/duckdb/extension/json/include/json_functions.hpp +5 -1
  4. package/src/duckdb/extension/json/include/json_scan.hpp +1 -0
  5. package/src/duckdb/extension/json/include/json_transform.hpp +2 -2
  6. package/src/duckdb/extension/json/json-extension.cpp +7 -3
  7. package/src/duckdb/extension/json/json_functions/copy_json.cpp +16 -5
  8. package/src/duckdb/extension/json/json_functions/json_create.cpp +220 -93
  9. package/src/duckdb/extension/json/json_functions/json_merge_patch.cpp +2 -2
  10. package/src/duckdb/extension/json/json_functions/json_transform.cpp +283 -117
  11. package/src/duckdb/extension/json/json_functions/read_json.cpp +8 -6
  12. package/src/duckdb/extension/json/json_functions.cpp +17 -15
  13. package/src/duckdb/extension/json/json_scan.cpp +8 -4
  14. package/src/duckdb/extension/parquet/column_reader.cpp +6 -2
  15. package/src/duckdb/extension/parquet/include/parquet_reader.hpp +1 -2
  16. package/src/duckdb/extension/parquet/include/parquet_writer.hpp +2 -2
  17. package/src/duckdb/extension/parquet/include/string_column_reader.hpp +1 -0
  18. package/src/duckdb/extension/parquet/include/thrift_tools.hpp +3 -5
  19. package/src/duckdb/extension/parquet/parquet-extension.cpp +2 -4
  20. package/src/duckdb/extension/parquet/parquet_reader.cpp +11 -22
  21. package/src/duckdb/extension/parquet/parquet_statistics.cpp +5 -0
  22. package/src/duckdb/extension/parquet/parquet_writer.cpp +4 -4
  23. package/src/duckdb/src/common/file_system.cpp +13 -20
  24. package/src/duckdb/src/common/serializer/buffered_file_writer.cpp +2 -2
  25. package/src/duckdb/src/execution/index/art/art.cpp +3 -1
  26. package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +0 -1
  27. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +2 -2
  28. package/src/duckdb/src/execution/operator/persistent/parallel_csv_reader.cpp +1 -1
  29. package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +1 -2
  30. package/src/duckdb/src/execution/operator/persistent/physical_export.cpp +4 -5
  31. package/src/duckdb/src/execution/physical_plan/plan_copy_to_file.cpp +1 -1
  32. package/src/duckdb/src/function/cast/cast_function_set.cpp +89 -25
  33. package/src/duckdb/src/function/pragma/pragma_queries.cpp +20 -15
  34. package/src/duckdb/src/function/table/copy_csv.cpp +4 -5
  35. package/src/duckdb/src/function/table/read_csv.cpp +6 -5
  36. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  37. package/src/duckdb/src/include/duckdb/common/file_opener.hpp +0 -1
  38. package/src/duckdb/src/include/duckdb/common/file_system.hpp +7 -6
  39. package/src/duckdb/src/include/duckdb/common/opener_file_system.hpp +118 -0
  40. package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_writer.hpp +1 -2
  41. package/src/duckdb/src/include/duckdb/common/types/type_map.hpp +19 -1
  42. package/src/duckdb/src/include/duckdb/execution/operator/persistent/base_csv_reader.hpp +3 -2
  43. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_line_info.hpp +1 -0
  44. package/src/duckdb/src/include/duckdb/main/client_data.hpp +4 -0
  45. package/src/duckdb/src/include/duckdb/main/extension_helper.hpp +5 -5
  46. package/src/duckdb/src/main/client_context.cpp +0 -4
  47. package/src/duckdb/src/main/client_data.cpp +19 -0
  48. package/src/duckdb/src/main/database.cpp +4 -1
  49. package/src/duckdb/src/main/extension/extension_install.cpp +5 -6
  50. package/src/duckdb/src/main/extension/extension_load.cpp +11 -16
  51. package/src/duckdb/src/main/settings/settings.cpp +2 -3
@@ -38,7 +38,7 @@ const vector<string> ExtensionHelper::PathComponents() {
38
38
  return vector<string> {".duckdb", "extensions", GetVersionDirectoryName(), DuckDB::Platform()};
39
39
  }
40
40
 
41
- string ExtensionHelper::ExtensionDirectory(DBConfig &config, FileSystem &fs, FileOpener *opener) {
41
+ string ExtensionHelper::ExtensionDirectory(DBConfig &config, FileSystem &fs) {
42
42
  #ifdef WASM_LOADABLE_EXTENSIONS
43
43
  static_assertion(0, "ExtensionDirectory functionality is not supported in duckdb-wasm");
44
44
  #endif
@@ -49,7 +49,7 @@ string ExtensionHelper::ExtensionDirectory(DBConfig &config, FileSystem &fs, Fil
49
49
  // convert random separators to platform-canonic
50
50
  extension_directory = fs.ConvertSeparators(extension_directory);
51
51
  // expand ~ in extension directory
52
- extension_directory = fs.ExpandPath(extension_directory, opener);
52
+ extension_directory = fs.ExpandPath(extension_directory);
53
53
  if (!fs.DirectoryExists(extension_directory)) {
54
54
  auto sep = fs.PathSeparator();
55
55
  auto splits = StringUtil::Split(extension_directory, sep);
@@ -66,7 +66,7 @@ string ExtensionHelper::ExtensionDirectory(DBConfig &config, FileSystem &fs, Fil
66
66
  }
67
67
  }
68
68
  } else { // otherwise default to home
69
- string home_directory = fs.GetHomeDirectory(opener);
69
+ string home_directory = fs.GetHomeDirectory();
70
70
  // exception if the home directory does not exist, don't create whatever we think is home
71
71
  if (!fs.DirectoryExists(home_directory)) {
72
72
  throw IOException("Can't find the home directory at '%s'\nSpecify a home directory using the SET "
@@ -90,8 +90,7 @@ string ExtensionHelper::ExtensionDirectory(DBConfig &config, FileSystem &fs, Fil
90
90
  string ExtensionHelper::ExtensionDirectory(ClientContext &context) {
91
91
  auto &config = DBConfig::GetConfig(context);
92
92
  auto &fs = FileSystem::GetFileSystem(context);
93
- auto opener = FileSystem::GetFileOpener(context);
94
- return ExtensionDirectory(config, fs, opener);
93
+ return ExtensionDirectory(config, fs);
95
94
  }
96
95
 
97
96
  bool ExtensionHelper::CreateSuggestions(const string &extension_name, string &message) {
@@ -118,7 +117,7 @@ void ExtensionHelper::InstallExtension(DBConfig &config, FileSystem &fs, const s
118
117
  // Install is currently a no-op
119
118
  return;
120
119
  #endif
121
- string local_path = ExtensionDirectory(config, fs, nullptr);
120
+ string local_path = ExtensionDirectory(config, fs);
122
121
  InstallExtensionInternal(config, nullptr, fs, local_path, extension, force_install);
123
122
  }
124
123
 
@@ -44,24 +44,22 @@ static void ComputeSHA256FileSegment(FileHandle *handle, const idx_t start, cons
44
44
  ComputeSHA256String(file_content, res);
45
45
  }
46
46
 
47
- bool ExtensionHelper::TryInitialLoad(DBConfig &config, FileOpener *opener, const string &extension,
47
+ bool ExtensionHelper::TryInitialLoad(DBConfig &config, FileSystem &fs, const string &extension,
48
48
  ExtensionInitResult &result, string &error) {
49
49
  if (!config.options.enable_external_access) {
50
50
  throw PermissionException("Loading external extensions is disabled through configuration");
51
51
  }
52
- VirtualFileSystem fallback_file_system; // config may not contain one yet
53
- auto &fs = config.file_system ? *config.file_system : fallback_file_system;
54
52
  auto filename = fs.ConvertSeparators(extension);
55
53
 
56
54
  // shorthand case
57
55
  if (!ExtensionHelper::IsFullPath(extension)) {
58
- string local_path = !config.options.extension_directory.empty() ? config.options.extension_directory
59
- : fs.GetHomeDirectory(opener);
56
+ string local_path =
57
+ !config.options.extension_directory.empty() ? config.options.extension_directory : fs.GetHomeDirectory();
60
58
 
61
59
  // convert random separators to platform-canonic
62
60
  local_path = fs.ConvertSeparators(local_path);
63
61
  // expand ~ in extension directory
64
- local_path = fs.ExpandPath(local_path, opener);
62
+ local_path = fs.ExpandPath(local_path);
65
63
  auto path_components = PathComponents();
66
64
  for (auto &path_ele : path_components) {
67
65
  local_path = fs.JoinPath(local_path, path_ele);
@@ -201,20 +199,17 @@ bool ExtensionHelper::TryInitialLoad(DBConfig &config, FileOpener *opener, const
201
199
  return true;
202
200
  }
203
201
 
204
- ExtensionInitResult ExtensionHelper::InitialLoad(DBConfig &config, FileOpener *opener, const string &extension) {
202
+ ExtensionInitResult ExtensionHelper::InitialLoad(DBConfig &config, FileSystem &fs, const string &extension) {
205
203
  string error;
206
204
  ExtensionInitResult result;
207
- if (!TryInitialLoad(config, opener, extension, result, error)) {
205
+ if (!TryInitialLoad(config, fs, extension, result, error)) {
208
206
  if (!ExtensionHelper::AllowAutoInstall(extension)) {
209
207
  throw IOException(error);
210
208
  }
211
209
  // the extension load failed - try installing the extension
212
- if (!config.file_system) {
213
- throw InternalException("Attempting to install an extension without a file system");
214
- }
215
- ExtensionHelper::InstallExtension(config, *config.file_system, extension, false);
210
+ ExtensionHelper::InstallExtension(config, fs, extension, false);
216
211
  // try loading again
217
- if (!TryInitialLoad(config, nullptr, extension, result, error)) {
212
+ if (!TryInitialLoad(config, fs, extension, result, error)) {
218
213
  throw IOException(error);
219
214
  }
220
215
  }
@@ -242,12 +237,12 @@ string ExtensionHelper::GetExtensionName(const string &original_name) {
242
237
  return ExtensionHelper::ApplyExtensionAlias(splits.front());
243
238
  }
244
239
 
245
- void ExtensionHelper::LoadExternalExtension(DatabaseInstance &db, FileOpener *opener, const string &extension) {
240
+ void ExtensionHelper::LoadExternalExtension(DatabaseInstance &db, FileSystem &fs, const string &extension) {
246
241
  if (db.ExtensionIsLoaded(extension)) {
247
242
  return;
248
243
  }
249
244
 
250
- auto res = InitialLoad(DBConfig::GetConfig(db), opener, extension);
245
+ auto res = InitialLoad(DBConfig::GetConfig(db), fs, extension);
251
246
  auto init_fun_name = res.basename + "_init";
252
247
 
253
248
  ext_init_fun_t init_fun;
@@ -264,7 +259,7 @@ void ExtensionHelper::LoadExternalExtension(DatabaseInstance &db, FileOpener *op
264
259
  }
265
260
 
266
261
  void ExtensionHelper::LoadExternalExtension(ClientContext &context, const string &extension) {
267
- LoadExternalExtension(DatabaseInstance::GetDatabase(context), FileSystem::GetFileOpener(context), extension);
262
+ LoadExternalExtension(DatabaseInstance::GetDatabase(context), FileSystem::GetFileSystem(context), extension);
268
263
  }
269
264
 
270
265
  string ExtensionHelper::ExtractExtensionPrefixFromPath(const string &path) {
@@ -735,9 +735,8 @@ void LogQueryPathSetting::SetLocal(ClientContext &context, const Value &input) {
735
735
  // empty path: clean up query writer
736
736
  client_data.log_query_writer = nullptr;
737
737
  } else {
738
- client_data.log_query_writer =
739
- make_uniq<BufferedFileWriter>(FileSystem::GetFileSystem(context), path,
740
- BufferedFileWriter::DEFAULT_OPEN_FLAGS, client_data.file_opener.get());
738
+ client_data.log_query_writer = make_uniq<BufferedFileWriter>(FileSystem::GetFileSystem(context), path,
739
+ BufferedFileWriter::DEFAULT_OPEN_FLAGS);
741
740
  }
742
741
  }
743
742