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();
|
Authorization::disable();
|
||||||
|
|
||||||
CLI::setResource('register', fn()=>$register);
|
CLI::setResource('register', fn() => $register);
|
||||||
|
|
||||||
CLI::setResource('cache', function ($pools) {
|
CLI::setResource('cache', function ($pools) {
|
||||||
$list = Config::getParam('pools-cache', []);
|
$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())
|
->setMetadata('project', $project->getId())
|
||||||
->setTimeout(APP_DATABASE_TIMEOUT_MILLISECONDS);
|
->setTimeout(APP_DATABASE_TIMEOUT_MILLISECONDS);
|
||||||
|
|
||||||
|
if ($project->getAttribute('shareTables')) {
|
||||||
|
$database
|
||||||
|
->setNamespace('')
|
||||||
|
->setShareTables(true)
|
||||||
|
->setTenant($project->getId());
|
||||||
|
}
|
||||||
|
|
||||||
return $database;
|
return $database;
|
||||||
}, ['pools', 'dbForConsole', 'cache', 'project']);
|
}, ['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) {
|
App::setResource('getProjectDB', function (Group $pools, Database $dbForConsole, $cache) {
|
||||||
$databases = []; // TODO: @Meldiron This should probably be responsibility of utopia-php/pools
|
$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') {
|
if ($project->isEmpty() || $project->getId() === 'console') {
|
||||||
return $dbForConsole;
|
return $dbForConsole;
|
||||||
}
|
}
|
||||||
|
|
||||||
$databaseName = $project->getAttribute('database');
|
$databaseName = $project->getAttribute('database');
|
||||||
|
|
||||||
if (isset($databases[$databaseName])) {
|
$configure = (function (Database $database) use ($project) {
|
||||||
$database = $databases[$databaseName];
|
|
||||||
|
|
||||||
$database
|
$database
|
||||||
->setNamespace('_' . $project->getInternalId())
|
->setNamespace('_' . $project->getInternalId())
|
||||||
->setMetadata('host', \gethostname())
|
->setMetadata('host', \gethostname())
|
||||||
->setMetadata('project', $project->getId())
|
->setMetadata('project', $project->getId())
|
||||||
->setTimeout(APP_DATABASE_TIMEOUT_MILLISECONDS);
|
->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;
|
return $database;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1178,19 +1194,10 @@ App::setResource('getProjectDB', function (Group $pools, Database $dbForConsole,
|
||||||
->getResource();
|
->getResource();
|
||||||
|
|
||||||
$database = new Database($dbAdapter, $cache);
|
$database = new Database($dbAdapter, $cache);
|
||||||
|
|
||||||
$databases[$databaseName] = $database;
|
$databases[$databaseName] = $database;
|
||||||
|
$configure($database);
|
||||||
$database
|
|
||||||
->setNamespace('_' . $project->getInternalId())
|
|
||||||
->setMetadata('host', \gethostname())
|
|
||||||
->setMetadata('project', $project->getId())
|
|
||||||
->setTimeout(APP_DATABASE_TIMEOUT_MILLISECONDS);
|
|
||||||
|
|
||||||
return $database;
|
return $database;
|
||||||
};
|
};
|
||||||
|
|
||||||
return $getProjectDB;
|
|
||||||
}, ['pools', 'dbForConsole', 'cache']);
|
}, ['pools', 'dbForConsole', 'cache']);
|
||||||
|
|
||||||
App::setResource('cache', function (Group $pools) {
|
App::setResource('cache', function (Group $pools) {
|
||||||
|
|
|
@ -61,15 +61,25 @@ Server::setResource('dbForProject', function (Cache $cache, Registry $register,
|
||||||
}
|
}
|
||||||
|
|
||||||
$pools = $register->get('pools');
|
$pools = $register->get('pools');
|
||||||
$database = $pools
|
|
||||||
|
$adapter = $pools
|
||||||
->get($project->getAttribute('database'))
|
->get($project->getAttribute('database'))
|
||||||
->pop()
|
->pop()
|
||||||
->getResource()
|
->getResource();
|
||||||
;
|
|
||||||
|
|
||||||
$adapter = new Database($database, $cache);
|
$database = new Database($adapter, $cache);
|
||||||
$adapter->setNamespace('_' . $project->getInternalId());
|
|
||||||
return $adapter;
|
if ($project->getAttribute('shareTables')) {
|
||||||
|
$database
|
||||||
|
->setShareTables(true)
|
||||||
|
->setTenant($project->getId());
|
||||||
|
} else {
|
||||||
|
$database
|
||||||
|
->setNamespace('_' . $project->getInternalId());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return $database;
|
||||||
}, ['cache', 'register', 'message', 'dbForConsole']);
|
}, ['cache', 'register', 'message', 'dbForConsole']);
|
||||||
|
|
||||||
Server::setResource('getProjectDB', function (Group $pools, Database $dbForConsole, $cache) {
|
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])) {
|
if (isset($databases[$databaseName])) {
|
||||||
$database = $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;
|
return $database;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,7 +114,14 @@ Server::setResource('getProjectDB', function (Group $pools, Database $dbForConso
|
||||||
|
|
||||||
$databases[$databaseName] = $database;
|
$databases[$databaseName] = $database;
|
||||||
|
|
||||||
$database->setNamespace('_' . $project->getInternalId());
|
if ($project->getAttribute('shareTables')) {
|
||||||
|
$database
|
||||||
|
->setShareTables(true)
|
||||||
|
->setTenant($project->getId());
|
||||||
|
} else {
|
||||||
|
$database
|
||||||
|
->setNamespace('_' . $project->getInternalId());
|
||||||
|
}
|
||||||
|
|
||||||
return $database;
|
return $database;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue