1
1
diff --git a/src/include/duckdb/main/database.hpp b/src/include/duckdb/main/database.hpp
2
- index ed956daa64..d4774faac5 100644
2
+ index d3c5fb9bd5..b3d0aaa09e 100644
3
3
--- a/src/include/duckdb/main/database.hpp
4
4
+++ b/src/include/duckdb/main/database.hpp
5
- @@ -97 ,6 +97 ,10 @@ private:
6
- shared_ptr<LogManager> log_manager ;
5
+ @@ -100 ,6 +100 ,10 @@ private:
6
+ unique_ptr<ExternalFileCache> external_file_cache ;
7
7
8
8
duckdb_ext_api_v1 (*create_api_v1)();
9
9
+ public:
@@ -31,13 +31,35 @@ index 6ccd1a1156..8040f537b6 100644
31
31
//! Debugging repositories (target local, relative paths that are produced by DuckDB's build system)
32
32
static constexpr const char *BUILD_DEBUG_REPOSITORY_PATH = "./build/debug/repository";
33
33
diff --git a/src/main/database.cpp b/src/main/database.cpp
34
- index 084dab6f30..6e21356bd9 100644
34
+ index db6e1ed445..eef90bcf48 100644
35
35
--- a/src/main/database.cpp
36
36
+++ b/src/main/database.cpp
37
- @@ -344 ,6 +344,28 @@ DuckDB::DuckDB(DatabaseInstance &instance_p) : instance(instance_p.shared_from_t
37
+ @@ -356 ,6 +356,50 @@ DuckDB::DuckDB(DatabaseInstance &instance_p) : instance(instance_p.shared_from_t
38
38
DuckDB::~DuckDB() {
39
39
}
40
40
41
+ + unordered_map<string, string> DatabaseInstance::extensionsRepos = {};
42
+ +
43
+ + void DatabaseInstance::SetPreferredRepository(const string& extension, const string &repository) {
44
+ + auto &x = extensionsRepos;
45
+ + auto it = x.find(extension);
46
+ + if (it != x.end()) {
47
+ + it->second=repository;
48
+ + } else {
49
+ + x.emplace(extension, repository);
50
+ + }
51
+ + }
52
+ +
53
+ + string DatabaseInstance::GetPreferredRepository(const string& extension) {
54
+ + const auto &x = extensionsRepos;
55
+ + auto it = x.find(extension);
56
+ + if (it != x.end()) {
57
+ + return it->second;
58
+ + }
59
+ + return "";
60
+ + }
61
+ +
62
+ +
41
63
+ unordered_map<string, string> DatabaseInstance::extensionsRepos = {};
42
64
+
43
65
+ void DatabaseInstance::SetPreferredRepository(const string& extension, const string &repository) {
@@ -63,19 +85,30 @@ index 084dab6f30..6e21356bd9 100644
63
85
SecretManager &DatabaseInstance::GetSecretManager() {
64
86
return *config.secret_manager;
65
87
}
88
+ @@ -507,6 +551,10 @@ idx_t DuckDB::NumberOfThreads() {
89
+
90
+ bool DatabaseInstance::ExtensionIsLoaded(const std::string &name) {
91
+ auto extension_name = ExtensionHelper::GetExtensionName(name);
92
+ + if (extension_name == "httpfs") {
93
+ + ExtensionInstallInfo info;
94
+ + SetExtensionLoaded(extension_name, info);
95
+ + }
96
+ auto it = loaded_extensions_info.find(extension_name);
97
+ return it != loaded_extensions_info.end() && it->second.is_loaded;
98
+ }
66
99
diff --git a/src/main/extension/extension_helper.cpp b/src/main/extension/extension_helper.cpp
67
- index c7b613226a..00885ee6a4 100644
100
+ index 3aaf507faa..be084ef030 100644
68
101
--- a/src/main/extension/extension_helper.cpp
69
102
+++ b/src/main/extension/extension_helper.cpp
70
- @@ -326 ,7 +326 ,6 @@ vector<ExtensionUpdateResult> ExtensionHelper::UpdateExtensions(ClientContext &c
103
+ @@ -337 ,7 +337 ,6 @@ vector<ExtensionUpdateResult> ExtensionHelper::UpdateExtensions(ClientContext &c
71
104
vector<ExtensionUpdateResult> result;
72
105
DatabaseInstance &db = DatabaseInstance::GetDatabase(context);
73
106
74
107
- #ifndef WASM_LOADABLE_EXTENSIONS
75
108
case_insensitive_set_t seen_extensions;
76
109
77
110
// scan the install directory for installed extensions
78
- @@ -343 ,7 +342 ,6 @@ vector<ExtensionUpdateResult> ExtensionHelper::UpdateExtensions(ClientContext &c
111
+ @@ -354 ,7 +353 ,6 @@ vector<ExtensionUpdateResult> ExtensionHelper::UpdateExtensions(ClientContext &c
79
112
80
113
result.push_back(UpdateExtensionInternal(context, db, fs, fs.JoinPath(ext_directory, path), extension_name));
81
114
});
@@ -84,10 +117,10 @@ index c7b613226a..00885ee6a4 100644
84
117
return result;
85
118
}
86
119
diff --git a/src/main/extension/extension_install.cpp b/src/main/extension/extension_install.cpp
87
- index e8ab595ab0..fb3e6371a3 100644
120
+ index 2ea03b8e49..d8c710f153 100644
88
121
--- a/src/main/extension/extension_install.cpp
89
122
+++ b/src/main/extension/extension_install.cpp
90
- @@ -155 ,6 +155 ,9 @@ bool ExtensionHelper::CreateSuggestions(const string &extension_name, string &me
123
+ @@ -145 ,6 +145 ,9 @@ bool ExtensionHelper::CreateSuggestions(const string &extension_name, string &me
91
124
unique_ptr<ExtensionInstallInfo> ExtensionHelper::InstallExtension(DatabaseInstance &db, FileSystem &fs,
92
125
const string &extension,
93
126
ExtensionInstallOptions &options) {
@@ -97,7 +130,7 @@ index e8ab595ab0..fb3e6371a3 100644
97
130
#ifdef WASM_LOADABLE_EXTENSIONS
98
131
// Install is currently a no-op
99
132
return nullptr;
100
- @@ -165 ,6 +168 ,9 @@ unique_ptr<ExtensionInstallInfo> ExtensionHelper::InstallExtension(DatabaseInsta
133
+ @@ -155 ,6 +158 ,9 @@ unique_ptr<ExtensionInstallInfo> ExtensionHelper::InstallExtension(DatabaseInsta
101
134
102
135
unique_ptr<ExtensionInstallInfo> ExtensionHelper::InstallExtension(ClientContext &context, const string &extension,
103
136
ExtensionInstallOptions &options) {
@@ -117,10 +150,10 @@ index e8ab595ab0..fb3e6371a3 100644
117
150
#else
118
151
string default_endpoint = ExtensionRepository::DEFAULT_REPOSITORY_URL;
119
152
diff --git a/src/main/extension/extension_load.cpp b/src/main/extension/extension_load.cpp
120
- index 84b28fef09..ea2ebba1cd 100644
153
+ index 6e4bb18796..188931a84d 100644
121
154
--- a/src/main/extension/extension_load.cpp
122
155
+++ b/src/main/extension/extension_load.cpp
123
- @@ -328 ,7 +328 ,20 @@ bool ExtensionHelper::TryInitialLoad(DatabaseInstance &db, FileSystem &fs, const
156
+ @@ -327 ,7 +327 ,20 @@ bool ExtensionHelper::TryInitialLoad(DatabaseInstance &db, FileSystem &fs, const
124
157
direct_load = false;
125
158
string extension_name = ApplyExtensionAlias(extension);
126
159
#ifdef WASM_LOADABLE_EXTENSIONS
@@ -142,7 +175,7 @@ index 84b28fef09..ea2ebba1cd 100644
142
175
string url = ExtensionFinalizeUrlTemplate(url_template, extension_name);
143
176
144
177
char *str = (char *)EM_ASM_PTR(
145
- @@ -369 ,35 +382 ,31 @@ bool ExtensionHelper::TryInitialLoad(DatabaseInstance &db, FileSystem &fs, const
178
+ @@ -368 ,35 +381 ,31 @@ bool ExtensionHelper::TryInitialLoad(DatabaseInstance &db, FileSystem &fs, const
146
179
direct_load = true;
147
180
filename = fs.ExpandPath(filename);
148
181
}
@@ -198,7 +231,7 @@ index 84b28fef09..ea2ebba1cd 100644
198
231
199
232
if (!metadata_mismatch_error.empty()) {
200
233
throw InvalidInputException(metadata_mismatch_error);
201
- @@ -414 ,26 +423 ,192 @@ bool ExtensionHelper::TryInitialLoad(DatabaseInstance &db, FileSystem &fs, const
234
+ @@ -413 ,26 +422 ,192 @@ bool ExtensionHelper::TryInitialLoad(DatabaseInstance &db, FileSystem &fs, const
202
235
}
203
236
}
204
237
@@ -401,7 +434,7 @@ index 84b28fef09..ea2ebba1cd 100644
401
434
#else
402
435
auto dopen_from = filename;
403
436
#endif
404
- @@ -449 ,28 +624 ,30 @@ bool ExtensionHelper::TryInitialLoad(DatabaseInstance &db, FileSystem &fs, const
437
+ @@ -448 ,28 +623 ,30 @@ bool ExtensionHelper::TryInitialLoad(DatabaseInstance &db, FileSystem &fs, const
405
438
result.filebase = lowercase_extension_name;
406
439
result.filename = filename;
407
440
result.lib_hdl = lib_hdl;
0 commit comments