[mob][photos] Migrate to sqlite_async(8): Fix faulty update statements due to incorrect query generation
This commit is contained in:
parent
1e7779a819
commit
7fdc2b5e66
1 changed files with 48 additions and 24 deletions
|
@ -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) {
|
||||
|
|
Loading…
Add table
Reference in a new issue