@@ -614,6 +614,7 @@ void Catalog::createFsiSchemasAndDefaultServers() {
614
614
" id integer primary key, "
615
615
" name text unique, "
616
616
" data_wrapper_type text, "
617
+ " owner_user_id integer, "
617
618
" options text)" );
618
619
createDefaultServersIfNotExists ();
619
620
sqliteConnector_.query (
@@ -721,7 +722,8 @@ void Catalog::recordOwnershipOfObjectsInObjectPermissions() {
721
722
{DatabaseDBObjectType, AccessPrivileges::ALL_DATABASE},
722
723
{TableDBObjectType, AccessPrivileges::ALL_TABLE},
723
724
{DashboardDBObjectType, AccessPrivileges::ALL_DASHBOARD},
724
- {ViewDBObjectType, AccessPrivileges::ALL_VIEW}};
725
+ {ViewDBObjectType, AccessPrivileges::ALL_VIEW},
726
+ {ServerDBObjectType, AccessPrivileges::ALL_SERVER}};
725
727
726
728
// grant owner all permissions on DB
727
729
DBObjectKey key;
@@ -2396,10 +2398,12 @@ void Catalog::createForeignServerNoLocks(
2396
2398
2397
2399
if (sqliteConnector_.getNumRows () == 0 ) {
2398
2400
sqliteConnector_.query_with_text_params (
2399
- " INSERT INTO omnisci_foreign_servers (name, data_wrapper_type, options) "
2400
- " VALUES (?, ?, ?)" ,
2401
+ " INSERT INTO omnisci_foreign_servers (name, data_wrapper_type, owner_user_id, "
2402
+ " options) "
2403
+ " VALUES (?, ?, ?, ?)" ,
2401
2404
std::vector<std::string>{foreign_server->name ,
2402
2405
foreign_server->data_wrapper .name ,
2406
+ std::to_string (foreign_server->user_id ),
2403
2407
foreign_server->getOptionsAsJsonString ()});
2404
2408
sqliteConnector_.query_with_text_params (
2405
2409
" SELECT id from omnisci_foreign_servers where name = ?" ,
@@ -2417,37 +2421,40 @@ void Catalog::createForeignServerNoLocks(
2417
2421
foreignServerMapById_[foreign_server_shared->id ] = foreign_server_shared;
2418
2422
}
2419
2423
2420
- foreign_storage::ForeignServer* Catalog::getForeignServer (const std::string& server_name,
2421
- const bool skip_cache) {
2424
+ foreign_storage::ForeignServer* Catalog::getForeignServer (
2425
+ const std::string& server_name) const {
2422
2426
foreign_storage::ForeignServer* foreign_server = nullptr ;
2423
- if (!skip_cache) {
2424
- cat_read_lock read_lock (this );
2425
- if (foreignServerMap_.find (server_name) != foreignServerMap_.end ()) {
2426
- foreign_server = foreignServerMap_.find (server_name)->second .get ();
2427
- }
2428
- } else {
2429
- cat_write_lock write_lock (this );
2430
- cat_sqlite_lock sqlite_lock (this );
2427
+ cat_read_lock read_lock (this );
2428
+ if (foreignServerMap_.find (server_name) != foreignServerMap_.end ()) {
2429
+ foreign_server = foreignServerMap_.find (server_name)->second .get ();
2430
+ }
2431
+ return foreign_server;
2432
+ }
2431
2433
2432
- sqliteConnector_.query_with_text_params (
2433
- " SELECT id, name, data_wrapper_type, options "
2434
- " FROM omnisci_foreign_servers WHERE name = ?" ,
2435
- std::vector<std::string>{server_name});
2436
- if (sqliteConnector_.getNumRows () > 0 ) {
2437
- auto server = std::make_shared<foreign_storage::ForeignServer>(
2438
- foreign_storage::DataWrapper{sqliteConnector_.getData <std::string>(0 , 2 )});
2439
- server->id = sqliteConnector_.getData <int >(0 , 0 );
2440
- server->name = sqliteConnector_.getData <std::string>(0 , 1 );
2441
- server->populateOptionsMap (sqliteConnector_.getData <std::string>(0 , 3 ));
2442
- foreign_server = server.get ();
2443
- foreignServerMap_[server->name ] = server;
2444
- foreignServerMapById_[server->id ] = server;
2445
- }
2434
+ foreign_storage::ForeignServer* Catalog::getForeignServerSkipCache (
2435
+ const std::string& server_name) {
2436
+ foreign_storage::ForeignServer* foreign_server = nullptr ;
2437
+ cat_write_lock write_lock (this );
2438
+ cat_sqlite_lock sqlite_lock (this );
2439
+ sqliteConnector_.query_with_text_params (
2440
+ " SELECT id, name, data_wrapper_type, options, owner_user_id "
2441
+ " FROM omnisci_foreign_servers WHERE name = ?" ,
2442
+ std::vector<std::string>{server_name});
2443
+ if (sqliteConnector_.getNumRows () > 0 ) {
2444
+ auto server = std::make_shared<foreign_storage::ForeignServer>(
2445
+ foreign_storage::DataWrapper{sqliteConnector_.getData <std::string>(0 , 2 )});
2446
+ server->id = sqliteConnector_.getData <int >(0 , 0 );
2447
+ server->name = sqliteConnector_.getData <std::string>(0 , 1 );
2448
+ server->user_id = sqliteConnector_.getData <std::int32_t >(0 , 4 );
2449
+ server->populateOptionsMap (sqliteConnector_.getData <std::string>(0 , 3 ));
2450
+ foreign_server = server.get ();
2451
+ foreignServerMap_[server->name ] = server;
2452
+ foreignServerMapById_[server->id ] = server;
2446
2453
}
2447
2454
return foreign_server;
2448
2455
}
2449
2456
2450
- void Catalog::dropForeignServer (const std::string& server_name, bool if_exists ) {
2457
+ void Catalog::dropForeignServer (const std::string& server_name) {
2451
2458
cat_write_lock write_lock (this );
2452
2459
cat_sqlite_lock sqlite_lock (this );
2453
2460
@@ -2471,9 +2478,6 @@ void Catalog::dropForeignServer(const std::string& server_name, bool if_exists)
2471
2478
std::vector<std::string>{server_name});
2472
2479
foreignServerMap_.erase (server_name);
2473
2480
foreignServerMapById_.erase (server_id);
2474
- } else if (!if_exists) {
2475
- throw std::runtime_error{" Foreign server with name \" " + server_name +
2476
- " \" does not exist." };
2477
2481
}
2478
2482
}
2479
2483
@@ -3451,14 +3455,16 @@ void Catalog::vacuumDeletedRows(const TableDescriptor* td) const {
3451
3455
3452
3456
void Catalog::buildForeignServerMap () {
3453
3457
sqliteConnector_.query (
3454
- " SELECT id, name, data_wrapper_type, options FROM omnisci_foreign_servers" );
3458
+ " SELECT id, name, data_wrapper_type, options, owner_user_id FROM "
3459
+ " omnisci_foreign_servers" );
3455
3460
auto num_rows = sqliteConnector_.getNumRows ();
3456
3461
for (size_t row = 0 ; row < num_rows; row++) {
3457
3462
auto foreign_server = std::make_shared<foreign_storage::ForeignServer>(
3458
3463
foreign_storage::DataWrapper{sqliteConnector_.getData <std::string>(row, 2 )});
3459
3464
foreign_server->id = sqliteConnector_.getData <int >(row, 0 );
3460
3465
foreign_server->name = sqliteConnector_.getData <std::string>(row, 1 );
3461
3466
foreign_server->populateOptionsMap (sqliteConnector_.getData <std::string>(row, 3 ));
3467
+ foreign_server->user_id = sqliteConnector_.getData <std::int32_t >(row, 4 );
3462
3468
foreignServerMap_[foreign_server->name ] = foreign_server;
3463
3469
foreignServerMapById_[foreign_server->id ] = foreign_server;
3464
3470
}
@@ -3490,6 +3496,7 @@ void Catalog::createDefaultServersIfNotExists() {
3490
3496
local_csv_server
3491
3497
->options [std::string{foreign_storage::ForeignServer::STORAGE_TYPE_KEY}] =
3492
3498
foreign_storage::ForeignServer::LOCAL_FILE_STORAGE_TYPE;
3499
+ local_csv_server->user_id = OMNISCI_ROOT_USER_ID;
3493
3500
local_csv_server->options [std::string{foreign_storage::ForeignServer::BASE_PATH_KEY}] =
3494
3501
" /" ;
3495
3502
local_csv_server->validate ();
@@ -3501,6 +3508,7 @@ void Catalog::createDefaultServersIfNotExists() {
3501
3508
local_parquet_server
3502
3509
->options [std::string{foreign_storage::ForeignServer::STORAGE_TYPE_KEY}] =
3503
3510
foreign_storage::ForeignServer::LOCAL_FILE_STORAGE_TYPE;
3511
+ local_parquet_server->user_id = OMNISCI_ROOT_USER_ID;
3504
3512
local_parquet_server
3505
3513
->options [std::string{foreign_storage::ForeignServer::BASE_PATH_KEY}] = " /" ;
3506
3514
local_parquet_server->validate ();
0 commit comments