Check project shareTables status when configuring databases
This commit is contained in:
parent
f44543f083
commit
35163ff52a
3 changed files with 54 additions and 23 deletions
|
@ -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', []);
|
||||
|
|
35
app/init.php
35
app/init.php
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue