Skip to content

Commit 2b6e15c

Browse files
committed
Complete rawQuery restoring methods
1 parent f9d3d86 commit 2b6e15c

File tree

1 file changed

+140
-100
lines changed

1 file changed

+140
-100
lines changed

library/src/main/java/com/github/yaa110/db/RestorableSQLiteDatabase.java

Lines changed: 140 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -377,54 +377,13 @@ public int updateWithOnConflict(String table, ContentValues values,
377377
if (tag == null)
378378
throw new IllegalArgumentException("The tag must not be null.");
379379

380-
// Gets all affected_rows
381-
Cursor restoring_cursor = mSQLiteDatabase.query(
380+
generateRestoringUpdate(
382381
table,
383-
null,
384382
whereClause,
385383
whereArgs,
386-
null,
387-
null,
388-
null
384+
tag
389385
);
390386

391-
ArrayList<String> queries = new ArrayList<>();
392-
ArrayList<String[]> queriesParameters = new ArrayList<>();
393-
394-
// Generates restoring queries
395-
while (restoring_cursor.moveToNext()) {
396-
StringBuilder sql = new StringBuilder();
397-
sql.append("UPDATE ");
398-
sql.append(table);
399-
sql.append(" SET ");
400-
401-
int i = 0;
402-
String[] parameters = new String[restoring_cursor.getColumnCount() + 1];
403-
404-
for (String columnName : restoring_cursor.getColumnNames()) {
405-
if (i > 0) sql.append(", ");
406-
407-
sql.append(columnName);
408-
sql.append(" = ?");
409-
parameters[i] = restoring_cursor.getString(restoring_cursor.getColumnIndex(columnName));
410-
411-
i++;
412-
}
413-
414-
sql.append(" WHERE ");
415-
sql.append(ROWID);
416-
sql.append(" = ?");
417-
parameters[i] = restoring_cursor.getString(restoring_cursor.getColumnIndex(ROWID));
418-
419-
queries.add(sql.toString());
420-
queriesParameters.add(parameters);
421-
}
422-
423-
restoring_cursor.close();
424-
425-
mTagQueryTable.put(tag, queries);
426-
mTagQueryParameters.put(tag, queriesParameters);
427-
428387
return mSQLiteDatabase.updateWithOnConflict(
429388
table,
430389
values,
@@ -443,64 +402,13 @@ public int delete(String table, String whereClause, String[] whereArgs, String t
443402
if (tag == null)
444403
throw new IllegalArgumentException("The tag must not be null.");
445404

446-
// Gets all affected_rows
447-
Cursor restoring_cursor = mSQLiteDatabase.query(
405+
generateRestoringDelete(
448406
table,
449-
null,
450407
whereClause,
451408
whereArgs,
452-
null,
453-
null,
454-
null
409+
tag
455410
);
456411

457-
ArrayList<String> queries = new ArrayList<>();
458-
ArrayList<String[]> queriesParameters = new ArrayList<>();
459-
460-
// Generates restoring queries
461-
while (restoring_cursor.moveToNext()) {
462-
StringBuilder sql = new StringBuilder();
463-
sql.append("INSERT OR REPLACE INTO ");
464-
sql.append(table);
465-
466-
int i = 0;
467-
String[] parameters = new String[restoring_cursor.getColumnCount()];
468-
469-
StringBuilder sql_columns = new StringBuilder();
470-
StringBuilder sql_values = new StringBuilder();
471-
472-
for (String columnName : restoring_cursor.getColumnNames()) {
473-
if (i > 0) {
474-
sql_columns.append(", ");
475-
sql_values.append(", ");
476-
} else {
477-
sql_columns.append(" (");
478-
sql_values.append(" (");
479-
}
480-
481-
sql_columns.append(columnName);
482-
sql_values.append("?");
483-
parameters[i] = restoring_cursor.getString(restoring_cursor.getColumnIndex(columnName));
484-
485-
i++;
486-
}
487-
488-
sql_columns.append(")");
489-
sql_values.append(")");
490-
491-
sql.append(sql_columns.toString());
492-
sql.append(" VALUES ");
493-
sql.append(sql_values.toString());
494-
495-
queries.add(sql.toString());
496-
queriesParameters.add(parameters);
497-
}
498-
499-
restoring_cursor.close();
500-
501-
mTagQueryTable.put(tag, queries);
502-
mTagQueryParameters.put(tag, queriesParameters);
503-
504412
return mSQLiteDatabase.delete(
505413
table,
506414
whereClause,
@@ -579,21 +487,153 @@ private void generateRawUpdateDeleteQuery(Statement statement, String sql, Strin
579487
Update updateStatement = (Update) statement;
580488
table = updateStatement.getTables().get(0).getName();
581489
where = updateStatement.getWhere().toString();
582-
// TODO
490+
generateRestoringUpdate(
491+
table,
492+
where,
493+
selectionArgs,
494+
tag
495+
);
583496

584497
} else if (sql.toLowerCase(Locale.getDefault()).contains("delete")) {
585498

586499
Delete deleteStatement = (Delete) statement;
587500
table = deleteStatement.getTable().getName();
588501
where = deleteStatement.getWhere().toString();
589-
// TODO
590-
502+
generateRestoringDelete(
503+
table,
504+
where,
505+
selectionArgs,
506+
tag
507+
);
591508
}
592509
}
593510

594511
private void generateInsertRawQuery(Cursor cursor, String table, String tag)
595512
throws JSQLParserException, ClassCastException {
596-
// TODO
513+
ArrayList<String> queries = new ArrayList<>();
514+
ArrayList<String[]> queriesParameters = new ArrayList<>();
515+
516+
queries.add("DELETE FROM " + table + " WHERE " + ROWID + " = ?");
517+
queriesParameters.add(new String[] {cursor.getString(cursor.getColumnIndex(ROWID))});
518+
519+
mTagQueryTable.put(tag, queries);
520+
mTagQueryParameters.put(tag, queriesParameters);
521+
}
522+
523+
private void generateRestoringDelete(String table,
524+
String whereClause,
525+
String[] whereArgs,
526+
String tag) {
527+
// Gets all affected_rows
528+
Cursor restoring_cursor = mSQLiteDatabase.query(
529+
table,
530+
null,
531+
whereClause,
532+
whereArgs,
533+
null,
534+
null,
535+
null
536+
);
537+
538+
ArrayList<String> queries = new ArrayList<>();
539+
ArrayList<String[]> queriesParameters = new ArrayList<>();
540+
541+
// Generates restoring queries
542+
while (restoring_cursor.moveToNext()) {
543+
StringBuilder sql = new StringBuilder();
544+
sql.append("INSERT OR REPLACE INTO ");
545+
sql.append(table);
546+
547+
int i = 0;
548+
String[] parameters = new String[restoring_cursor.getColumnCount()];
549+
550+
StringBuilder sql_columns = new StringBuilder();
551+
StringBuilder sql_values = new StringBuilder();
552+
553+
for (String columnName : restoring_cursor.getColumnNames()) {
554+
if (i > 0) {
555+
sql_columns.append(", ");
556+
sql_values.append(", ");
557+
} else {
558+
sql_columns.append(" (");
559+
sql_values.append(" (");
560+
}
561+
562+
sql_columns.append(columnName);
563+
sql_values.append("?");
564+
parameters[i] = restoring_cursor.getString(restoring_cursor.getColumnIndex(columnName));
565+
566+
i++;
567+
}
568+
569+
sql_columns.append(")");
570+
sql_values.append(")");
571+
572+
sql.append(sql_columns.toString());
573+
sql.append(" VALUES ");
574+
sql.append(sql_values.toString());
575+
576+
queries.add(sql.toString());
577+
queriesParameters.add(parameters);
578+
}
579+
580+
restoring_cursor.close();
581+
582+
mTagQueryTable.put(tag, queries);
583+
mTagQueryParameters.put(tag, queriesParameters);
584+
}
585+
586+
private void generateRestoringUpdate(String table,
587+
String whereClause,
588+
String[] whereArgs,
589+
String tag) {
590+
// Gets all affected_rows
591+
Cursor restoring_cursor = mSQLiteDatabase.query(
592+
table,
593+
null,
594+
whereClause,
595+
whereArgs,
596+
null,
597+
null,
598+
null
599+
);
600+
601+
ArrayList<String> queries = new ArrayList<>();
602+
ArrayList<String[]> queriesParameters = new ArrayList<>();
603+
604+
// Generates restoring queries
605+
while (restoring_cursor.moveToNext()) {
606+
StringBuilder sql = new StringBuilder();
607+
sql.append("UPDATE ");
608+
sql.append(table);
609+
sql.append(" SET ");
610+
611+
int i = 0;
612+
String[] parameters = new String[restoring_cursor.getColumnCount() + 1];
613+
614+
for (String columnName : restoring_cursor.getColumnNames()) {
615+
if (i > 0) sql.append(", ");
616+
617+
sql.append(columnName);
618+
sql.append(" = ?");
619+
parameters[i] = restoring_cursor.getString(restoring_cursor.getColumnIndex(columnName));
620+
621+
i++;
622+
}
623+
624+
sql.append(" WHERE ");
625+
sql.append(ROWID);
626+
sql.append(" = ?");
627+
parameters[i] = restoring_cursor.getString(restoring_cursor.getColumnIndex(ROWID));
628+
629+
queries.add(sql.toString());
630+
queriesParameters.add(parameters);
631+
}
632+
633+
restoring_cursor.close();
634+
635+
mTagQueryTable.put(tag, queries);
636+
mTagQueryParameters.put(tag, queriesParameters);
597637
}
598638

599639
/**

0 commit comments

Comments
 (0)