1
0
Fork 0
mirror of synced 2024-10-03 19:53:33 +13:00

migrates enum attribute size to 255

This commit is contained in:
prateek banga 2023-11-20 22:01:20 +05:30
parent a7833421ef
commit b2381798ab
3 changed files with 46 additions and 2 deletions

View file

@ -767,6 +767,25 @@ $register->set('pools', function () {
return $group; return $group;
}); });
$register->set('db', function () {
// This is usually for our workers or CLI commands scope
$dbHost = App::getEnv('_APP_DB_HOST', '');
$dbPort = App::getEnv('_APP_DB_PORT', '');
$dbUser = App::getEnv('_APP_DB_USER', '');
$dbPass = App::getEnv('_APP_DB_PASS', '');
$dbScheme = App::getEnv('_APP_DB_SCHEMA', '');
$pdo = new PDO("mysql:host={$dbHost};port={$dbPort};dbname={$dbScheme};charset=utf8mb4", $dbUser, $dbPass, array(
PDO::ATTR_TIMEOUT => 3, // Seconds
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => true,
PDO::ATTR_STRINGIFY_FETCHES => true,
));
return $pdo;
});
$register->set('influxdb', function () { $register->set('influxdb', function () {
// Register DB connection // Register DB connection

View file

@ -10,6 +10,7 @@ use Utopia\Database\Database;
use Utopia\Database\DateTime; use Utopia\Database\DateTime;
use Utopia\Database\Document; use Utopia\Database\Document;
use Utopia\Database\Exception; use Utopia\Database\Exception;
use Utopia\Database\Query;
class V19 extends Migration class V19 extends Migration
{ {
@ -41,6 +42,11 @@ class V19 extends Migration
Console::info('Migrating Buckets'); Console::info('Migrating Buckets');
$this->migrateBuckets(); $this->migrateBuckets();
if ($this->project->getId() !== 'console') {
Console::info('Migrating Enum Attribute Size');
$this->migrateEnumAttributeSize();
}
Console::info('Migrating Documents'); Console::info('Migrating Documents');
$this->forEachDocument([$this, 'fixDocument']); $this->forEachDocument([$this, 'fixDocument']);
@ -640,6 +646,21 @@ class V19 extends Migration
return $commands; return $commands;
} }
private function migrateEnumAttributeSize(): void
{
\Co\run(function () {
foreach ($this->documentsIterator('attributes') as $attribute) {
go(function ($attribute) {
$attribute->setAttribute('size', Database::LENGTH_KEY);
$this->projectDB->updateDocument('attributes', $attribute->getId(), $attribute);
$databaseInternalId = $attribute->getAttribute('databaseInternalId');
$collectionInternalId = $attribute->getAttribute('collectionInternalId');
$this->changeAttributeInternalType('database_' . $databaseInternalId . '_collection_' . $collectionInternalId, $attribute->getAttribute('key'), 'varchar(255)');
}, $attribute);
}
});
}
/** /**
* Fix run on each document * Fix run on each document
* *

View file

@ -11,6 +11,7 @@ use Utopia\Database\Database;
use Utopia\Database\Document; use Utopia\Database\Document;
use Utopia\Database\Query; use Utopia\Database\Query;
use Utopia\Database\Validator\Authorization; use Utopia\Database\Validator\Authorization;
use Utopia\Registry\Registry;
use Utopia\Validator\Text; use Utopia\Validator\Text;
class Migrate extends Action class Migrate extends Action
@ -29,7 +30,8 @@ class Migrate extends Action
->inject('cache') ->inject('cache')
->inject('dbForConsole') ->inject('dbForConsole')
->inject('getProjectDB') ->inject('getProjectDB')
->callback(fn ($version, $cache, $dbForConsole, $getProjectDB) => $this->action($version, $cache, $dbForConsole, $getProjectDB)); ->inject('register')
->callback(fn ($version, $cache, $dbForConsole, $getProjectDB, Registry $register) => $this->action($version, $cache, $dbForConsole, $getProjectDB, $register));
} }
private function clearProjectsCache(Cache $cache, Document $project) private function clearProjectsCache(Cache $cache, Document $project)
@ -41,7 +43,7 @@ class Migrate extends Action
} }
} }
public function action(string $version, Cache $cache, Database $dbForConsole, callable $getProjectDB) public function action(string $version, Cache $cache, Database $dbForConsole, callable $getProjectDB, Registry $register)
{ {
Authorization::disable(); Authorization::disable();
if (!array_key_exists($version, Migration::$versions)) { if (!array_key_exists($version, Migration::$versions)) {
@ -89,9 +91,11 @@ class Migrate extends Action
try { try {
// TODO: Iterate through all project DBs // TODO: Iterate through all project DBs
/** @var Database $projectDB */
$projectDB = $getProjectDB($project); $projectDB = $getProjectDB($project);
$migration $migration
->setProject($project, $projectDB, $dbForConsole) ->setProject($project, $projectDB, $dbForConsole)
->setPDO($register->get('db', true))
->execute(); ->execute();
} catch (\Throwable $th) { } catch (\Throwable $th) {
Console::error('Failed to update project ("' . $project->getId() . '") version with error: ' . $th->getMessage()); Console::error('Failed to update project ("' . $project->getId() . '") version with error: ' . $th->getMessage());