1
0
Fork 0
mirror of synced 2024-07-06 07:00:56 +12:00

Check project shareTables status when configuring databases

This commit is contained in:
Jake Barnby 2023-11-23 01:13:24 +13:00
parent f44543f083
commit 35163ff52a
No known key found for this signature in database
GPG key ID: C437A8CC85B96E9C
3 changed files with 54 additions and 23 deletions

View file

@ -24,7 +24,7 @@ use Utopia\Registry\Registry;
Authorization::disable();
CLI::setResource('register', fn()=>$register);
CLI::setResource('register', fn() => $register);
CLI::setResource('cache', function ($pools) {
$list = Config::getParam('pools-cache', []);

View file

@ -1129,6 +1129,13 @@ App::setResource('dbForProject', function (Group $pools, Database $dbForConsole,
->setMetadata('project', $project->getId())
->setTimeout(APP_DATABASE_TIMEOUT_MILLISECONDS);
if ($project->getAttribute('shareTables')) {
$database
->setNamespace('')
->setShareTables(true)
->setTenant($project->getId());
}
return $database;
}, ['pools', 'dbForConsole', 'cache', 'project']);
@ -1153,22 +1160,31 @@ App::setResource('dbForConsole', function (Group $pools, Cache $cache, Document
App::setResource('getProjectDB', function (Group $pools, Database $dbForConsole, $cache) {
$databases = []; // TODO: @Meldiron This should probably be responsibility of utopia-php/pools
$getProjectDB = function (Document $project) use ($pools, $dbForConsole, $cache, &$databases) {
return function (Document $project) use ($pools, $dbForConsole, $cache, &$databases) {
if ($project->isEmpty() || $project->getId() === 'console') {
return $dbForConsole;
}
$databaseName = $project->getAttribute('database');
if (isset($databases[$databaseName])) {
$database = $databases[$databaseName];
$configure = (function (Database $database) use ($project) {
$database
->setNamespace('_' . $project->getInternalId())
->setMetadata('host', \gethostname())
->setMetadata('project', $project->getId())
->setTimeout(APP_DATABASE_TIMEOUT_MILLISECONDS);
if ($project->getAttribute('shareTables')) {
$database
->setNamespace('')
->setShareTables(true)
->setTenant($project->getId());
}
});
if (isset($databases[$databaseName])) {
$database = $databases[$databaseName];
$configure($database);
return $database;
}
@ -1178,19 +1194,10 @@ App::setResource('getProjectDB', function (Group $pools, Database $dbForConsole,
->getResource();
$database = new Database($dbAdapter, $cache);
$databases[$databaseName] = $database;
$database
->setNamespace('_' . $project->getInternalId())
->setMetadata('host', \gethostname())
->setMetadata('project', $project->getId())
->setTimeout(APP_DATABASE_TIMEOUT_MILLISECONDS);
$configure($database);
return $database;
};
return $getProjectDB;
}, ['pools', 'dbForConsole', 'cache']);
App::setResource('cache', function (Group $pools) {

View file

@ -61,15 +61,25 @@ Server::setResource('dbForProject', function (Cache $cache, Registry $register,
}
$pools = $register->get('pools');
$database = $pools
$adapter = $pools
->get($project->getAttribute('database'))
->pop()
->getResource()
;
->getResource();
$adapter = new Database($database, $cache);
$adapter->setNamespace('_' . $project->getInternalId());
return $adapter;
$database = new Database($adapter, $cache);
if ($project->getAttribute('shareTables')) {
$database
->setShareTables(true)
->setTenant($project->getId());
} else {
$database
->setNamespace('_' . $project->getInternalId());
}
return $database;
}, ['cache', 'register', 'message', 'dbForConsole']);
Server::setResource('getProjectDB', function (Group $pools, Database $dbForConsole, $cache) {
@ -84,7 +94,14 @@ Server::setResource('getProjectDB', function (Group $pools, Database $dbForConso
if (isset($databases[$databaseName])) {
$database = $databases[$databaseName];
$database->setNamespace('_' . $project->getInternalId());
if ($project->getAttribute('shareTables')) {
$database
->setShareTables(true)
->setTenant($project->getId());
} else {
$database
->setNamespace('_' . $project->getInternalId());
}
return $database;
}
@ -97,7 +114,14 @@ Server::setResource('getProjectDB', function (Group $pools, Database $dbForConso
$databases[$databaseName] = $database;
$database->setNamespace('_' . $project->getInternalId());
if ($project->getAttribute('shareTables')) {
$database
->setShareTables(true)
->setTenant($project->getId());
} else {
$database
->setNamespace('_' . $project->getInternalId());
}
return $database;
};