[mob][photos] Migrate to sqlite_async(8): Fix faulty update statements due to incorrect query generation

This commit is contained in:
ashilkn 2024-05-16 12:48:21 +05:30
parent 1e7779a819
commit 7fdc2b5e66

View file

@ -539,7 +539,7 @@ class FilesDB {
PrimitiveWrapper batchCounter, {
required bool isGenIdNull,
}) async {
parameterSets.add(_getParameterSetForFileV2(file));
parameterSets.add(_getParameterSetForFile(file));
batchCounter.value++;
final columnNames = isGenIdNull
@ -1149,11 +1149,14 @@ class FilesDB {
Future<void> update(EnteFile file) async {
final db = await instance.sqliteAsyncDB;
final setClause = _getSetClauseForFile(file);
final parameterSet = _getParameterSetForFile(file)..add(file.generatedID);
final updateAssignments = _generateUpdateAssignmentsWithPlaceholders(
fileGenId: file.generatedID,
);
await db.execute(
'UPDATE $filesTable SET '
'$setClause WHERE $columnGeneratedID = ?',
[file.generatedID],
'UPDATE $filesTable '
'SET $updateAssignments WHERE $columnGeneratedID = ?',
parameterSet,
);
}
@ -1167,6 +1170,21 @@ class FilesDB {
);
}
Future<void> updateUploadedFileAcrossCollectionsNew(EnteFile file) async {
final db = await instance.sqliteAsyncDB;
final parameterSet = _getParameterSetForFile(file, omitCollectionId: true)
..add(file.uploadedFileID);
final updateAssignments = _generateUpdateAssignmentsWithPlaceholders(
fileGenId: file.generatedID,
omitCollectionId: true,
);
await db.execute(
'UPDATE $filesTable'
'SET $updateAssignments WHERE $columnUploadedFileID = ?',
parameterSet,
);
}
Future<void> updateLocalIDForUploaded(int uploadedID, String localID) async {
final db = await instance.sqliteAsyncDB;
await db.execute(
@ -1782,8 +1800,8 @@ class FilesDB {
return convertToFiles(results);
}
String _getSetClauseForFile(EnteFile file) {
final row = _getRowForFile(file);
String _getSetClauseForFileWithoutCollection(EnteFile file) {
final row = _getRowForFileWithoutCollection(file);
final setClause = <String>[];
for (int i = 0; i < row.entries.length; i++) {
final entry = row.entries.elementAt(i);
@ -1792,18 +1810,30 @@ class FilesDB {
return setClause.join(', ');
}
List<Object?> _getParameterSetForFile(EnteFile file) {
final row = _getRowForFile(file);
final values = <Object?>[];
for (int i = 0; i < row.entries.length; i++) {
values.add(row.entries.elementAt(i).value);
///Returns "columnName1 = ?, columnName2 = ?, ..."
String _generateUpdateAssignmentsWithPlaceholders({
required int? fileGenId,
bool omitCollectionId = false,
}) {
final setClauses = <String>[];
for (String columnName in _columnNames) {
if (columnName == columnGeneratedID && fileGenId == null) {
continue;
}
if (columnName == columnCollectionID && omitCollectionId) {
continue;
}
setClauses.add("$columnName = ?");
}
return values;
return setClauses.join(",");
}
List<Object?> _getParameterSetForFileV2(
List<Object?> _getParameterSetForFile(
EnteFile file, {
bool omitNullGenId = true,
bool omitCollectionId = false,
}) {
final values = <Object?>[];
double? latitude;
@ -1854,17 +1884,11 @@ class FilesDB {
file.addedTime ?? DateTime.now().microsecondsSinceEpoch,
]);
return values;
}
String _getSetClauseForFileWithoutCollection(EnteFile file) {
final row = _getRowForFileWithoutCollection(file);
final setClause = <String>[];
for (int i = 0; i < row.entries.length; i++) {
final entry = row.entries.elementAt(i);
setClause.add('${entry.key} = ${entry.value}');
if (omitCollectionId) {
values.removeAt(3);
}
return setClause.join(', ');
return values;
}
Map<String, dynamic> _getRowForFile(EnteFile file) {