| 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 | |