From d8bbd825563bd1cf413a183ea8db63fb129cb610 Mon Sep 17 00:00:00 2001 From: Prem Palanisamy Date: Mon, 30 Mar 2026 14:55:05 +0100 Subject: [PATCH] fix: remove duplicate database fetch, add null-safe queries fallback, add schemaless comment --- app/controllers/api/migrations.php | 7 +++---- src/Appwrite/Platform/Workers/Migrations.php | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/app/controllers/api/migrations.php b/app/controllers/api/migrations.php index 4c28145f41..a3cb294565 100644 --- a/app/controllers/api/migrations.php +++ b/app/controllers/api/migrations.php @@ -566,15 +566,12 @@ Http::post('/v1/migrations/csv/exports') throw new Exception(Exception::COLLECTION_NOT_FOUND); } - // getting databasetype - $resources = explode(':', $resourceId); - $databaseId = $resources[0]; - $database = $authorization->skip(fn () => $dbForProject->getDocument('databases', $databaseId)); $databaseType = $database->getAttribute('type'); if (!in_array($databaseType, CSV_ALLOWED_DATABASE_TYPES)) { throw new Exception(Exception::MIGRATION_DATABASE_TYPE_UNSUPPORTED, 'Database type not supported for csv'); } + // Schemaless databases (DocumentsDB, VectorsDB) allow queries on dynamic fields $isSchemaless = in_array($databaseType, [DATABASE_TYPE_DOCUMENTSDB, DATABASE_TYPE_VECTORSDB]); $validator = new Documents( @@ -859,6 +856,8 @@ Http::post('/v1/migrations/json/exports') } $databaseType = $database->getAttribute('type'); + + // Schemaless databases (DocumentsDB, VectorsDB) allow queries on dynamic fields $isSchemaless = in_array($databaseType, [DATABASE_TYPE_DOCUMENTSDB, DATABASE_TYPE_VECTORSDB]); $validator = new Documents( diff --git a/src/Appwrite/Platform/Workers/Migrations.php b/src/Appwrite/Platform/Workers/Migrations.php index 375e2fd302..1080ff066f 100644 --- a/src/Appwrite/Platform/Workers/Migrations.php +++ b/src/Appwrite/Platform/Workers/Migrations.php @@ -211,7 +211,7 @@ class Migrations extends Action $this->getDatabasesDBForProject($database); $queries = []; if ($source === SourceAppwrite::getName() && in_array($destination, [DestinationCSV::getName(), DestinationJSON::getName()])) { - $queries = Query::parseQueries($migrationOptions['queries']); + $queries = Query::parseQueries($migrationOptions['queries'] ?? []); } $migrationSource = match ($source) {