1 | #include "duckdb/main/extension_helper.hpp" |
2 | |
3 | #include "duckdb/common/file_system.hpp" |
4 | #include "duckdb/common/string_util.hpp" |
5 | #include "duckdb/common/windows.hpp" |
6 | #include "duckdb/main/client_context.hpp" |
7 | #include "duckdb/main/database.hpp" |
8 | |
9 | #if defined(BUILD_ICU_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS) |
10 | #define ICU_STATICALLY_LOADED true |
11 | #include "icu-extension.hpp" |
12 | #else |
13 | #define ICU_STATICALLY_LOADED false |
14 | #endif |
15 | |
16 | #if defined(BUILD_PARQUET_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS) |
17 | #define PARQUET_STATICALLY_LOADED true |
18 | #include "parquet-extension.hpp" |
19 | #else |
20 | #define PARQUET_STATICALLY_LOADED false |
21 | #endif |
22 | |
23 | #if defined(BUILD_TPCH_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS) |
24 | #define TPCH_STATICALLY_LOADED true |
25 | #include "tpch-extension.hpp" |
26 | #else |
27 | #define TPCH_STATICALLY_LOADED false |
28 | #endif |
29 | |
30 | #if defined(BUILD_TPCDS_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS) |
31 | #define TPCDS_STATICALLY_LOADED true |
32 | #include "tpcds-extension.hpp" |
33 | #else |
34 | #define TPCDS_STATICALLY_LOADED false |
35 | #endif |
36 | |
37 | #if defined(BUILD_FTS_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS) |
38 | #define FTS_STATICALLY_LOADED true |
39 | #include "fts-extension.hpp" |
40 | #else |
41 | #define FTS_STATICALLY_LOADED false |
42 | #endif |
43 | |
44 | #if defined(BUILD_HTTPFS_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS) |
45 | #define HTTPFS_STATICALLY_LOADED true |
46 | #include "httpfs-extension.hpp" |
47 | #else |
48 | #define HTTPFS_STATICALLY_LOADED false |
49 | #endif |
50 | |
51 | #if defined(BUILD_VISUALIZER_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS) |
52 | #include "visualizer-extension.hpp" |
53 | #endif |
54 | |
55 | #if defined(BUILD_JSON_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS) |
56 | #define JSON_STATICALLY_LOADED true |
57 | #include "json-extension.hpp" |
58 | #else |
59 | #define JSON_STATICALLY_LOADED false |
60 | #endif |
61 | |
62 | #if defined(BUILD_JEMALLOC_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS) |
63 | #define JEMALLOC_STATICALLY_LOADED true |
64 | #include "jemalloc-extension.hpp" |
65 | #else |
66 | #define JEMALLOC_STATICALLY_LOADED false |
67 | #endif |
68 | |
69 | #if defined(BUILD_EXCEL_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS) |
70 | #include "excel-extension.hpp" |
71 | #endif |
72 | |
73 | #if defined(BUILD_SQLSMITH_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS) |
74 | #include "sqlsmith-extension.hpp" |
75 | #endif |
76 | |
77 | #if defined(BUILD_INET_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS) |
78 | #include "inet-extension.hpp" |
79 | #endif |
80 | |
81 | #if defined(BUILD_AUTOCOMPLETE_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS) |
82 | #define AUTOCOMPLETE_STATICALLY_LOADED true |
83 | #include "sql_auto_complete-extension.hpp" |
84 | #else |
85 | #define AUTOCOMPLETE_STATICALLY_LOADED false |
86 | #endif |
87 | |
88 | // Load the generated header file containing our list of extension headers |
89 | #if defined(OOTE_HEADERS_AVAILABLE) && OOTE_HEADERS_AVAILABLE |
90 | #include "extension_oote_loader.hpp" |
91 | #endif |
92 | |
93 | namespace duckdb { |
94 | |
95 | //===--------------------------------------------------------------------===// |
96 | // Default Extensions |
97 | //===--------------------------------------------------------------------===// |
98 | static DefaultExtension internal_extensions[] = { |
99 | {.name: "icu" , .description: "Adds support for time zones and collations using the ICU library" , ICU_STATICALLY_LOADED}, |
100 | {.name: "parquet" , .description: "Adds support for reading and writing parquet files" , PARQUET_STATICALLY_LOADED}, |
101 | {.name: "tpch" , .description: "Adds TPC-H data generation and query support" , TPCH_STATICALLY_LOADED}, |
102 | {.name: "tpcds" , .description: "Adds TPC-DS data generation and query support" , TPCDS_STATICALLY_LOADED}, |
103 | {.name: "fts" , .description: "Adds support for Full-Text Search Indexes" , FTS_STATICALLY_LOADED}, |
104 | {.name: "httpfs" , .description: "Adds support for reading and writing files over a HTTP(S) connection" , HTTPFS_STATICALLY_LOADED}, |
105 | {.name: "json" , .description: "Adds support for JSON operations" , JSON_STATICALLY_LOADED}, |
106 | {.name: "jemalloc" , .description: "Overwrites system allocator with JEMalloc" , JEMALLOC_STATICALLY_LOADED}, |
107 | {.name: "autocomplete" , .description: "Add supports for autocomplete in the shell" , AUTOCOMPLETE_STATICALLY_LOADED}, |
108 | {.name: "motherduck" , .description: "Enables motherduck integration with the system" , .statically_loaded: false}, |
109 | {.name: "sqlite_scanner" , .description: "Adds support for reading SQLite database files" , .statically_loaded: false}, |
110 | {.name: "postgres_scanner" , .description: "Adds support for reading from a Postgres database" , .statically_loaded: false}, |
111 | {.name: "inet" , .description: "Adds support for IP-related data types and functions" , .statically_loaded: false}, |
112 | {.name: "spatial" , .description: "Geospatial extension that adds support for working with spatial data and functions" , .statically_loaded: false}, |
113 | {.name: nullptr, .description: nullptr, .statically_loaded: false}}; |
114 | |
115 | idx_t ExtensionHelper::DefaultExtensionCount() { |
116 | idx_t index; |
117 | for (index = 0; internal_extensions[index].name != nullptr; index++) { |
118 | } |
119 | return index; |
120 | } |
121 | |
122 | DefaultExtension ExtensionHelper::GetDefaultExtension(idx_t index) { |
123 | D_ASSERT(index < DefaultExtensionCount()); |
124 | return internal_extensions[index]; |
125 | } |
126 | |
127 | //===--------------------------------------------------------------------===// |
128 | // Allow Auto-Install Extensions |
129 | //===--------------------------------------------------------------------===// |
130 | static const char *auto_install[] = {"motherduck" , "postgres_scanner" , "sqlite_scanner" , nullptr}; |
131 | |
132 | bool ExtensionHelper::AllowAutoInstall(const string &extension) { |
133 | auto lcase = StringUtil::Lower(str: extension); |
134 | for (idx_t i = 0; auto_install[i]; i++) { |
135 | if (lcase == auto_install[i]) { |
136 | return true; |
137 | } |
138 | } |
139 | return false; |
140 | } |
141 | |
142 | //===--------------------------------------------------------------------===// |
143 | // Load Statically Compiled Extension |
144 | //===--------------------------------------------------------------------===// |
145 | void ExtensionHelper::LoadAllExtensions(DuckDB &db) { |
146 | unordered_set<string> extensions {"parquet" , "icu" , "tpch" , "tpcds" , "fts" , "httpfs" , "visualizer" , |
147 | "json" , "excel" , "sqlsmith" , "inet" , "jemalloc" , "autocomplete" }; |
148 | for (auto &ext : extensions) { |
149 | LoadExtensionInternal(db, extension: ext, initial_load: true); |
150 | } |
151 | |
152 | #if defined(OOTE_HEADERS_AVAILABLE) && OOTE_HEADERS_AVAILABLE |
153 | for (auto &ext : OOT_EXTENSIONS) { |
154 | LoadExtensionInternal(db, extension: ext, initial_load: true); |
155 | } |
156 | #endif |
157 | } |
158 | |
159 | ExtensionLoadResult ExtensionHelper::LoadExtension(DuckDB &db, const std::string &extension) { |
160 | return LoadExtensionInternal(db, extension, initial_load: false); |
161 | } |
162 | |
163 | ExtensionLoadResult ExtensionHelper::LoadExtensionInternal(DuckDB &db, const std::string &extension, |
164 | bool initial_load) { |
165 | #ifdef DUCKDB_TEST_REMOTE_INSTALL |
166 | if (!initial_load && StringUtil::Contains(DUCKDB_TEST_REMOTE_INSTALL, extension)) { |
167 | Connection con(db); |
168 | auto result = con.Query("INSTALL " + extension); |
169 | if (result->HasError()) { |
170 | result->Print(); |
171 | return ExtensionLoadResult::EXTENSION_UNKNOWN; |
172 | } |
173 | result = con.Query("LOAD " + extension); |
174 | if (result->HasError()) { |
175 | result->Print(); |
176 | return ExtensionLoadResult::EXTENSION_UNKNOWN; |
177 | } |
178 | return ExtensionLoadResult::LOADED_EXTENSION; |
179 | } |
180 | #endif |
181 | if (extension == "parquet" ) { |
182 | #if PARQUET_STATICALLY_LOADED |
183 | db.LoadExtension<ParquetExtension>(); |
184 | #else |
185 | // parquet extension required but not build: skip this test |
186 | return ExtensionLoadResult::NOT_LOADED; |
187 | #endif |
188 | } else if (extension == "icu" ) { |
189 | #if ICU_STATICALLY_LOADED |
190 | db.LoadExtension<ICUExtension>(); |
191 | #else |
192 | // icu extension required but not build: skip this test |
193 | return ExtensionLoadResult::NOT_LOADED; |
194 | #endif |
195 | } else if (extension == "tpch" ) { |
196 | #if TPCH_STATICALLY_LOADED |
197 | db.LoadExtension<TPCHExtension>(); |
198 | #else |
199 | // icu extension required but not build: skip this test |
200 | return ExtensionLoadResult::NOT_LOADED; |
201 | #endif |
202 | } else if (extension == "tpcds" ) { |
203 | #if TPCDS_STATICALLY_LOADED |
204 | db.LoadExtension<TPCDSExtension>(); |
205 | #else |
206 | // icu extension required but not build: skip this test |
207 | return ExtensionLoadResult::NOT_LOADED; |
208 | #endif |
209 | } else if (extension == "fts" ) { |
210 | #if FTS_STATICALLY_LOADED |
211 | db.LoadExtension<FTSExtension>(); |
212 | #else |
213 | // fts extension required but not build: skip this test |
214 | return ExtensionLoadResult::NOT_LOADED; |
215 | #endif |
216 | } else if (extension == "httpfs" ) { |
217 | #if HTTPFS_STATICALLY_LOADED |
218 | db.LoadExtension<HTTPFsExtension>(); |
219 | #else |
220 | return ExtensionLoadResult::NOT_LOADED; |
221 | #endif |
222 | } else if (extension == "visualizer" ) { |
223 | #if defined(BUILD_VISUALIZER_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS) |
224 | db.LoadExtension<VisualizerExtension>(); |
225 | #else |
226 | // visualizer extension required but not build: skip this test |
227 | return ExtensionLoadResult::NOT_LOADED; |
228 | #endif |
229 | } else if (extension == "json" ) { |
230 | #if JSON_STATICALLY_LOADED |
231 | db.LoadExtension<JSONExtension>(); |
232 | #else |
233 | // json extension required but not build: skip this test |
234 | return ExtensionLoadResult::NOT_LOADED; |
235 | #endif |
236 | } else if (extension == "excel" ) { |
237 | #if defined(BUILD_EXCEL_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS) |
238 | db.LoadExtension<EXCELExtension>(); |
239 | #else |
240 | // excel extension required but not build: skip this test |
241 | return ExtensionLoadResult::NOT_LOADED; |
242 | #endif |
243 | } else if (extension == "sqlsmith" ) { |
244 | #if defined(BUILD_SQLSMITH_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS) |
245 | db.LoadExtension<SQLSmithExtension>(); |
246 | #else |
247 | // excel extension required but not build: skip this test |
248 | return ExtensionLoadResult::NOT_LOADED; |
249 | #endif |
250 | } else if (extension == "jemalloc" ) { |
251 | #if defined(BUILD_JEMALLOC_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS) |
252 | db.LoadExtension<JEMallocExtension>(); |
253 | #else |
254 | // jemalloc extension required but not build: skip this test |
255 | return ExtensionLoadResult::NOT_LOADED; |
256 | #endif |
257 | } else if (extension == "autocomplete" ) { |
258 | #if defined(BUILD_AUTOCOMPLETE_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS) |
259 | db.LoadExtension<SQLAutoCompleteExtension>(); |
260 | #else |
261 | // autocomplete extension required but not build: skip this test |
262 | return ExtensionLoadResult::NOT_LOADED; |
263 | #endif |
264 | } else if (extension == "inet" ) { |
265 | #if defined(BUILD_INET_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS) |
266 | db.LoadExtension<INETExtension>(); |
267 | #else |
268 | // inet extension required but not build: skip this test |
269 | return ExtensionLoadResult::NOT_LOADED; |
270 | #endif |
271 | } else { |
272 | |
273 | #if defined(OOTE_HEADERS_AVAILABLE) && OOTE_HEADERS_AVAILABLE |
274 | if (TryLoadLinkedExtension(db, extension)) { |
275 | return ExtensionLoadResult::LOADED_EXTENSION; |
276 | } |
277 | #endif |
278 | return ExtensionLoadResult::EXTENSION_UNKNOWN; |
279 | } |
280 | return ExtensionLoadResult::LOADED_EXTENSION; |
281 | } |
282 | |
283 | static vector<std::string> public_keys = { |
284 | R"( |
285 | -----BEGIN PUBLIC KEY----- |
286 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6aZuHUa1cLR9YDDYaEfi |
287 | UDbWY8m2t7b71S+k1ZkXfHqu+5drAxm+dIDzdOHOKZSIdwnJbT3sSqwFoG6PlXF3 |
288 | g3dsJjax5qESIhbVvf98nyipwNINxoyHCkcCIPkX17QP2xpnT7V59+CqcfDJXLqB |
289 | ymjqoFSlaH8dUCHybM4OXlWnAtVHW/nmw0khF8CetcWn4LxaTUHptByaBz8CasSs |
290 | gWpXgSfaHc3R9eArsYhtsVFGyL/DEWgkEHWolxY3Llenhgm/zOf3s7PsAMe7EJX4 |
291 | qlSgiXE6OVBXnqd85z4k20lCw/LAOe5hoTMmRWXIj74MudWe2U91J6GrrGEZa7zT |
292 | 7QIDAQAB |
293 | -----END PUBLIC KEY----- |
294 | )" , |
295 | R"( |
296 | -----BEGIN PUBLIC KEY----- |
297 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAq8Gg1S/LI6ApMAYsFc9m |
298 | PrkFIY+nc0LXSpxm77twU8D5M0Xkz/Av4f88DQmj1OE3164bEtR7sl7xDPZojFHj |
299 | YYyucJxEI97l5OU1d3Pc1BdKXL4+mnW5FlUGj218u8qD+G1hrkySXQkrUzIjPPNw |
300 | o6knF3G/xqQF+KI+tc7ajnTni8CAlnUSxfnstycqbVS86m238PLASVPK9/SmIRgO |
301 | XCEV+ZNMlerq8EwsW4cJPHH0oNVMcaG+QT4z79roW1rbJghn9ubAVdQU6VLUAikI |
302 | b8keUyY+D0XdY9DpDBeiorb1qPYt8BPLOAQrIUAw1CgpMM9KFp9TNvW47KcG4bcB |
303 | dQIDAQAB |
304 | -----END PUBLIC KEY----- |
305 | )" , |
306 | R"( |
307 | -----BEGIN PUBLIC KEY----- |
308 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyYATA9KOQ0Azf97QAPfY |
309 | Jc/WeZyE4E1qlRgKWKqNtYSXZqk5At0V7w2ntAWtYSpczFrVepCJ0oPMDpZTigEr |
310 | NgOgfo5LEhPx5XmtCf62xY/xL3kgtfz9Mm5TBkuQy4KwY4z1npGr4NYYDXtF7kkf |
311 | LQE+FnD8Yr4E0wHBib7ey7aeeKWmwqvUjzDqG+TzaqwzO/RCUsSctqSS0t1oo2hv |
312 | 4q1ofanUXsV8MXk/ujtgxu7WkVvfiSpK1zRazgeZjcrQFO9qL/pla0vBUxa1U8He |
313 | GMLnL0oRfcMg7yKrbIMrvlEl2ZmiR9im44dXJWfY42quObwr1PuEkEoCMcMisSWl |
314 | jwIDAQAB |
315 | -----END PUBLIC KEY----- |
316 | )" , |
317 | R"( |
318 | -----BEGIN PUBLIC KEY----- |
319 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4RvbWx3zLblDHH/lGUF5 |
320 | Q512MT+v3YPriuibROMllv8WiCLAMeJ0QXbVaIzBOeHDeLx8yvoZZN+TENKxtT6u |
321 | IfMMneUzxHBqy0AQNfIsSsOnG5nqoeE/AwbS6VqCdH1aLfoCoPffacHYa0XvTcsi |
322 | aVlZfr+UzJS+ty8pRmFVi1UKSOADDdK8XfIovJl/zMP2TxYX2Y3fnjeLtl8Sqs2e |
323 | P+eHDoy7Wi4EPTyY7tNTCfxwKNHn1HQ5yrv5dgvMxFWIWXGz24yikFvtwLGHe8uJ |
324 | Wi+fBX+0PF0diZ6pIthZ149VU8qCqYAXjgpxZ0EZdrsiF6Ewz0cfg20SYApFcmW4 |
325 | pwIDAQAB |
326 | -----END PUBLIC KEY----- |
327 | )" , |
328 | R"( |
329 | -----BEGIN PUBLIC KEY----- |
330 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyhd5AfwrUohG3O4DE0K9 |
331 | O3FmgB7zE4aDnkL8UUfGCh5kdP8q7ewMjekY+c6LwWOmpdJpSwqhfV1q5ZU1l6rk |
332 | 3hlt03LO3sgs28kcfOVH15hqfxts6Sg5KcRjxStE50ORmXGwXDcS9vqkJ60J1EHA |
333 | lcZqbCRSO73ZPLhdepfd0/C6tM0L7Ge6cAE62/MTmYNGv8fDzwQr/kYIJMdoS8Zp |
334 | thRpctFZJtPs3b0fffZA/TCLVKMvEVgTWs48751qKid7N/Lm/iEGx/tOf4o23Nec |
335 | Pz1IQaGLP+UOLVQbqQBHJWNOqigm7kWhDgs3N4YagWgxPEQ0WVLtFji/ZjlKZc7h |
336 | dwIDAQAB |
337 | -----END PUBLIC KEY----- |
338 | )" , |
339 | R"( |
340 | -----BEGIN PUBLIC KEY----- |
341 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnFDg3LhyV6BVE2Z3zQvN |
342 | 6urrKvPhygTa5+wIPGwYTzJ8DfGALqlsX3VOXMvcJTca6SbuwwkoXHuSU5wQxfcs |
343 | bt4jTXD3NIoRwQPl+D9IbgIMuX0ACl27rJmr/f9zkY7qui4k1X82pQkxBe+/qJ4r |
344 | TBwVNONVx1fekTMnSCEhwg5yU3TNbkObu0qlQeJfuMWLDQbW/8v/qfr/Nz0JqHDN |
345 | yYKfKvFMlORxyJYiOyeOsbzNGEhkGQGOmKhRUhS35kD+oA0jqwPwMCM9O4kFg/L8 |
346 | iZbpBBX2By1K3msejWMRAewTOyPas6YMQOYq9BMmWQqzVtG5xcaSJwN/YnMpJyqb |
347 | sQIDAQAB |
348 | -----END PUBLIC KEY----- |
349 | )" , |
350 | R"( |
351 | -----BEGIN PUBLIC KEY----- |
352 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1z0RU8vGrfEkrscEoZKA |
353 | GiOcGh2EMcKwjQpl4nKuR9H4o/dg+CZregVSHg7MP2f8mhLZZyoFev49oWOV4Rmi |
354 | qs99UNxm7DyKW1fF1ovowsUW5lsDoKYLvpuzHo0s4laiV4AnIYP7tHGLdzsnK2Os |
355 | Cp5dSuMwKHPZ9N25hXxFB/dRrAdIiXHvbSqr4N29XzfQloQpL3bGHLKY6guFHluH |
356 | X5dJ9eirVakWWou7BR2rnD0k9vER6oRdVnJ6YKb5uhWEOQ3NmV961oyr+uiDTcep |
357 | qqtGHWuFhENixtiWGjFJJcACwqxEAW3bz9lyrfnPDsHSW/rlQVDIAkik+fOp+R7L |
358 | kQIDAQAB |
359 | -----END PUBLIC KEY----- |
360 | )" , |
361 | R"( |
362 | -----BEGIN PUBLIC KEY----- |
363 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxwO27e1vnbNcpiDg7Wwx |
364 | K/w5aEGukXotu3529ieq+O39H0+Bak4vIbzGhDUh3/ElmxaFMAs4PYrWe/hc2WFD |
365 | H4JCOoFIn4y9gQeE855DGGFgeIVd1BnSs5S+5wUEMxLNyHdHSmINN6FsoZ535iUg |
366 | KdYjRh1iZevezg7ln8o/O36uthu925ehFBXSy6jLJgQlwmq0KxZJE0OAZhuDBM60 |
367 | MtIunNa/e5y+Gw3GknFwtRLmn/nEckZx1nEtepYvvUa7UGy+8KuGuhOerCZTutbG |
368 | k8liCVgGenRve8unA2LrBbpL+AUf3CrZU/uAxxTqWmw6Z/S6TeW5ozeeyOCh8ii6 |
369 | TwIDAQAB |
370 | -----END PUBLIC KEY----- |
371 | )" , |
372 | R"( |
373 | -----BEGIN PUBLIC KEY----- |
374 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsGIFOfIQ4RI5qu4klOxf |
375 | ge6eXwBMAkuTXyhyIIJDtE8CurnwQvUXVlt+Kf0SfuIFW6MY5ErcWE/vMFbc81IR |
376 | 9wByOAAV2CTyiLGZT63uE8pN6FSHd6yGYCLjXd3P3cnP3Qj5pBncpLuAUDfHG4wP |
377 | bs9jIADw3HysD+eCNja8p7ZC7CzWxTcO7HsEu9deAAU19YywdpagXvQ0pJ9zV5qU |
378 | jrHxBygl31t6TmmX+3d+azjGu9Hu36E+5wcSOOhuwAFXDejb40Ixv53ItJ3fZzzH |
379 | PF2nj9sQvQ8c5ptjyOvQCBRdqkEWXIVHClxqWb+o59pDIh1G0UGcmiDN7K9Gz5HA |
380 | ZQIDAQAB |
381 | -----END PUBLIC KEY----- |
382 | )" , |
383 | R"( |
384 | -----BEGIN PUBLIC KEY----- |
385 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt9uUnlW/CoUXT68yaZh9 |
386 | SeXHzGRCPNEI98Tara+dgYxDX1z7nfOh8o15liT0QsAzx34EewZOxcKCNiV/dZX5 |
387 | z4clCkD8uUbZut6IVx8Eu+7Qcd5jZthRc6hQrN9Ltv7ZQEh7KGXOHa53kT2K01ws |
388 | 4jbVmd/7Nx7y0Yyqhja01pIu/CUaTkODfQxBXwriLdIzp7y/iJeF/TLqCwZWHKQx |
389 | QOZnsPEveB1F00Va9MeAtTlXFUJ/TQXquqTjeLj4HuIRtbyuNgWoc0JyF+mcafAl |
390 | bnrNEBIfxZhAT81aUCIAzRJp6AqfdeZxnZ/WwohtZQZLXAxFQPTWCcP+Z9M7OIQL |
391 | WwIDAQAB |
392 | -----END PUBLIC KEY----- |
393 | )" , |
394 | R"( |
395 | -----BEGIN PUBLIC KEY----- |
396 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA56NhfACkeCyZM07l2wmd |
397 | iTp24E2tLLKU3iByKlIRWRAvXsOejRMJTHTNHWa3cQ7uLP++Tf2St7ksNsyPMNZy |
398 | 9QRTLNCYr9rN9loLwdb2sMWxFBwwzCaAOTahGI7GJQy30UB7FEND0X/5U2rZvQij |
399 | Q6K+O4aa+K9M5qyOHNMmXywmTnAgWKNaNxQHPRtD2+dSj60T6zXdtIuCrPfcNGg5 |
400 | gj07qWGEXX83V/L7nSqCiIVYg/wqds1x52Yjk1nhXYNBTqlnhmOd8LynGxz/sXC7 |
401 | h2Q9XsHjXIChW4FHyLIOl6b4zPMBSxzCigYm3QZJWfAkZv5PBRtnq7vhYOLHzLQj |
402 | CwIDAQAB |
403 | -----END PUBLIC KEY----- |
404 | )" , |
405 | R"( |
406 | -----BEGIN PUBLIC KEY----- |
407 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmfPLe0IWGYC0MZC6YiM3 |
408 | QGfhT6zSKB0I2DW44nlBlWUcF+32jW2bFJtgE76qGGKFeU4kJBWYr99ufHoAodNg |
409 | M1Ehl/JfQ5KmbC1WIqnFTrgbmqJde79jeCvCpbFLuqnzidwO1PbXDbfRFQcgWaXT |
410 | mDVLNNVmLxA0GkCv+kydE2gtcOD9BDceg7F/56TDvclyI5QqAnjE2XIRMPZlXQP4 |
411 | oF2kgz4Cn7LxLHYmkU2sS9NYLzHoyUqFplWlxkQjA4eQ0neutV1Ydmc1IX8W7R38 |
412 | A7nFtaT8iI8w6Vkv7ijYN6xf5cVBPKZ3Dv7AdwPet86JD5mf5v+r7iwg5xl3r77Z |
413 | iwIDAQAB |
414 | -----END PUBLIC KEY----- |
415 | )" , |
416 | R"( |
417 | -----BEGIN PUBLIC KEY----- |
418 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoB1kWsX8YmCcFOD9ilBY |
419 | xK076HmUAN026uJ8JpmU9Hz+QT1FNXOsnj1h2G6U6btYVIdHUTHy/BvAumrDKqRz |
420 | qcEAzCuhxUjPjss54a/Zqu6nQcoIPHuG/Er39oZHIVkPR1WCvWj8wmyYv6T//dPH |
421 | unO6tW29sXXxS+J1Gah6vpbtJw1pI/liah1DZzb13KWPDI6ZzviTNnW4S05r6js/ |
422 | 30He+Yud6aywrdaP/7G90qcrteEFcjFy4Xf+5vG960oKoGoDplwX5poay1oCP9tb |
423 | g8AC8VSRAGi3oviTeSWZcrLXS8AtJhGvF48cXQj2q+8YeVKVDpH6fPQxJ9Sh9aeU |
424 | awIDAQAB |
425 | -----END PUBLIC KEY----- |
426 | )" , |
427 | R"( |
428 | -----BEGIN PUBLIC KEY----- |
429 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4NTMAIYIlCMID00ufy/I |
430 | AZXc8pocDx9N1Q5x5/cL3aIpLmx02AKo9BvTJaJuHiTjlwYhPtlhIrHV4HUVTkOX |
431 | sISp8B8v9i2I1RIvCTAcvy3gcH6rdRWZ0cdTUiMEqnnxBX9zdzl8oMzZcyauv19D |
432 | BeqJvzflIT96b8g8K3mvgJHs9a1j9f0gN8FuTA0c52DouKnrh8UwH7mlrumYerJw |
433 | 6goJGQuK1HEOt6bcQuvogkbgJWOoEYwjNrPwQvIcP4wyrgSnOHg1yXOFE84oVynJ |
434 | czQEOz9ke42I3h8wrnQxilEYBVo2uX8MenqTyfGnE32lPRt3Wv1iEVQls8Cxiuy2 |
435 | CQIDAQAB |
436 | -----END PUBLIC KEY----- |
437 | )" , |
438 | R"( |
439 | -----BEGIN PUBLIC KEY----- |
440 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3bUtfp66OtRyvIF/oucn |
441 | id8mo7gvbNEH04QMLO3Ok43dlWgWI3hekJAqOYc0mvoI5anqr98h8FI7aCYZm/bY |
442 | vpz0I1aXBaEPh3aWh8f/w9HME7ykBvmhMe3J+VFGWWL4eswfRl//GCtnSMBzDFhM |
443 | SaQOTvADWHkC0njeI5yXjf/lNm6fMACP1cnhuvCtnx7VP/DAtvUk9usDKG56MJnZ |
444 | UoVM3HHjbJeRwxCdlSWe12ilCdwMRKSDY92Hk38/zBLenH04C3HRQLjBGewACUmx |
445 | uvNInehZ4kSYFGa+7UxBxFtzJhlKzGR73qUjpWzZivCe1K0WfRVP5IWsKNCCESJ/ |
446 | nQIDAQAB |
447 | -----END PUBLIC KEY----- |
448 | )" , |
449 | R"( |
450 | -----BEGIN PUBLIC KEY----- |
451 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyV2dE/CRUAUE8ybq/DoS |
452 | Lc7QlYXh04K+McbhN724TbHahLTuDk5mR5TAunA8Nea4euRzknKdMFAz1eh9gyy3 |
453 | 5x4UfXQW1fIZqNo6WNrGxYJgWAXU+pov+OvxsMQWzqS4jrTHDHbblCCLKp1akwJk |
454 | aFNyqgjAL373PcqXC+XAn8vHx4xHFoFP5lq4lLcJCOW5ee9v9El3w0USLwS+t1cF |
455 | RY3kuV6Njlr4zsRH9iM6/zaSuCALYWJ/JrPEurSJXzFZnWsvn6aQdeNeAn08+z0F |
456 | k2NwaauEo0xmLqzqTRGzjHqKKmeefN3/+M/FN2FrApDlxWQfhD2Y3USdAiN547Nj |
457 | 1wIDAQAB |
458 | -----END PUBLIC KEY----- |
459 | )" , |
460 | R"( |
461 | -----BEGIN PUBLIC KEY----- |
462 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvm2+kTrEQWZXuxhWzBdl |
463 | PCbQGqbrukbeS6JKSlQLJDC8ayZIxFxatqg1Q8UPyv89MVRsHOGlG1OqFaOEtPjQ |
464 | Oo6j/moFwB4GPyJhJHOGpCKa4CLB5clhfDCLJw6ty7PcDU3T6yW4X4Qc5k4LRRWy |
465 | yzC8lVHfBdarN+1iEe0ALMOGoeiJjVn6i/AFxktRwgd8njqv/oWQyfjJZXkNMsb6 |
466 | 7ZDxNVAUrp/WXpE4Kq694bB9xa/pWsqv7FjQJUgTnEzvbN+qXnVPtA7dHcOYYJ8Z |
467 | SbrJUfHrf8TS5B54AiopFpWG+hIbjqqdigqabBqFpmjiRDZgDy4zJJj52xJZMnrp |
468 | rwIDAQAB |
469 | -----END PUBLIC KEY----- |
470 | )" , |
471 | R"( |
472 | -----BEGIN PUBLIC KEY----- |
473 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwEAcVmY3589O02pLA22f |
474 | MlarLyJUgy0BeJDG5AUsi17ct8sHZzRiv9zKQVCBk1CtZY//jyqnrM7iCBLWsyby |
475 | TiTOtGYHHApaLnNjjtaHdQ6zplhbc3g2XLy+4ab8GNKG3zc8iXpsQM6r+JO5n9pm |
476 | V9vollz9dkFxS9l+1P17lZdIgCh9O3EIFJv5QCd5c9l2ezHAan2OhkWhiDtldnH/ |
477 | MfRXbz7X5sqlwWLa/jhPtvY45x7dZaCHGqNzbupQZs0vHnAVdDu3vAWDmT/3sXHG |
478 | vmGxswKA9tPU0prSvQWLz4LUCnGi/cC5R+fiu+fovFM/BwvaGtqBFIF/1oWVq7bZ |
479 | 4wIDAQAB |
480 | -----END PUBLIC KEY----- |
481 | )" , |
482 | R"( |
483 | -----BEGIN PUBLIC KEY----- |
484 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA25qGwNO1+qHygC8mjm8L |
485 | 3I66mV/IzslgBDHC91mE8YcI5Fq0sdrtsbUhK3z89wIN/zOhbHX0NEiXm2GxUnsI |
486 | vb5tDZXAh7AbTnXTMVbxO/e/8sPLUiObGjDvjVzyzrxOeG87yK/oIiilwk9wTsIb |
487 | wMn2Grj4ht9gVKx3oGHYV7STNdWBlzSaJj4Ou7+5M1InjPDRFZG1K31D2d3IHByX |
488 | lmcRPZtPFTa5C1uVJw00fI4F4uEFlPclZQlR5yA0G9v+0uDgLcjIUB4eqwMthUWc |
489 | dHhlmrPp04LI19eksWHCtG30RzmUaxDiIC7J2Ut0zHDqUe7aXn8tOVI7dE9tTKQD |
490 | KQIDAQAB |
491 | -----END PUBLIC KEY----- |
492 | )" , |
493 | R"( |
494 | -----BEGIN PUBLIC KEY----- |
495 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7EC2bx7aRnf3TcRg5gmw |
496 | QOKNCUheCelK8hoXLMsKSJqmufyJ+IHUejpXGOpvyYRbACiJ5GiNcww20MVpTBU7 |
497 | YESWB2QSU2eEJJXMq84qsZSO8WGmAuKpUckI+hNHKQYJBEDOougV6/vVVEm5c5bc |
498 | SLWQo0+/ciQ21Zwz5SwimX8ep1YpqYirO04gcyGZzAfGboXRvdUwA+1bZvuUXdKC |
499 | 4zsCw2QALlcVpzPwjB5mqA/3a+SPgdLAiLOwWXFDRMnQw44UjsnPJFoXgEZiUpZm |
500 | EMS5gLv50CzQqJXK9mNzPuYXNUIc4Pw4ssVWe0OfN3Od90gl5uFUwk/G9lWSYnBN |
501 | 3wIDAQAB |
502 | -----END PUBLIC KEY----- |
503 | )" }; |
504 | |
505 | const vector<string> ExtensionHelper::GetPublicKeys() { |
506 | return public_keys; |
507 | } |
508 | |
509 | } // namespace duckdb |
510 | |