Skip to content

Commit 9502c70

Browse files
committed
Address the updated SQLite3 JDBC error messages
1 parent d94974d commit 9502c70

5 files changed

Lines changed: 23 additions & 35 deletions

File tree

src/sqlancer/sqlite3/SQLite3Errors.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public static void addDeleteErrors(ExpectedErrors errors) {
1717
}
1818

1919
public static void addExpectedExpressionErrors(ExpectedErrors errors) {
20+
errors.add("[SQLITE_BUSY] The database file is locked");
2021
errors.add("FTS expression tree is too large");
2122
errors.add("String or BLOB exceeds size limit");
2223
errors.add("[SQLITE_ERROR] SQL error or missing database (integer overflow)");
@@ -93,4 +94,21 @@ public static void addInsertNowErrors(ExpectedErrors errors) {
9394
errors.add("non-deterministic use of date()");
9495
}
9596

97+
public static void addInsertUpdateErrors(ExpectedErrors errors) {
98+
errors.add("String or BLOB exceeds size limit");
99+
errors.add("[SQLITE_CONSTRAINT_CHECK]");
100+
errors.add("[SQLITE_CONSTRAINT_PRIMARYKEY]");
101+
errors.add("[SQLITE_CONSTRAINT]");
102+
errors.add("[SQLITE_CONSTRAINT_NOTNULL]");
103+
errors.add("[SQLITE_CONSTRAINT_UNIQUE]");
104+
errors.add("cannot INSERT into generated column"); // TODO: filter out generated columns
105+
errors.add("A table in the database is locked"); // https://www.sqlite.org/src/tktview?name=56a74875be
106+
errors.add("The database file is locked");
107+
errors.add("too many levels of trigger recursion");
108+
errors.add("cannot UPDATE generated column");
109+
errors.add("[SQLITE_ERROR] SQL error or missing database (no such table:");
110+
errors.add("[SQLITE_ERROR] SQL error or missing database (foreign key mismatch");
111+
errors.add("no such column"); // trigger
112+
}
113+
96114
}

src/sqlancer/sqlite3/gen/SQLite3PragmaGenerator.java

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -143,18 +143,7 @@ public SQLQueryAdapter insert(SQLite3GlobalState globalState) {
143143
}
144144
break;
145145
case INTEGRITY_CHECK:
146-
// errors.add("malformed JSON");
147-
// errors.add("JSON cannot hold BLOB values");
148-
// errors.add("json_object() labels must be TEXT");
149-
// errors.add("requires an even number of arguments");
150-
// errors.add("needs an odd number of arguments");
151-
// errors.add("overflow");
152-
// errors.add("JSON path error");
153-
if (Randomly.getBoolean()) {
154-
createPragma("integrity_check", () -> null);
155-
} else {
156-
sb.append(String.format("PRAGMA integrity_check(%d)", r.getInteger()));
157-
}
146+
createPragma("integrity_check", () -> null);
158147
break;
159148
case JOURNAL_MODE:
160149
// OFF is no longer generated, since it might corrupt the database upon failed

src/sqlancer/sqlite3/gen/ddl/SQLite3IndexGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ private String createIndex(SQLite3Table t, List<SQLite3Column> columns) {
6464
StringBuilder sb = new StringBuilder();
6565
sb.append("CREATE");
6666
if (Randomly.getBoolean()) {
67-
errors.add("[SQLITE_CONSTRAINT] Abort due to constraint violation (UNIQUE constraint failed");
67+
errors.add("UNIQUE constraint failed ");
6868
sb.append(" UNIQUE");
6969
}
7070
sb.append(" INDEX");

src/sqlancer/sqlite3/gen/dml/SQLite3InsertGenerator.java

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -41,23 +41,13 @@ public static SQLQueryAdapter insertRow(SQLite3GlobalState globalState, SQLite3T
4141
}
4242

4343
private String insertRow(SQLite3Table table) {
44-
errors.add("cannot UPDATE generated column");
45-
errors.add("[SQLITE_CONSTRAINT]");
44+
SQLite3Errors.addInsertUpdateErrors(errors);
4645
errors.add("[SQLITE_FULL]");
47-
errors.add("[SQLITE_ERROR] SQL error or missing database (foreign key mismatch");
48-
errors.add("[SQLITE_CONSTRAINT] Abort due to constraint violation (FOREIGN KEY constraint failed)");
4946
// // TODO: also check if the table is really missing (caused by a DROP TABLE)
50-
errors.add("[SQLITE_ERROR] SQL error or missing database (no such table:");
5147
errors.add("ON CONFLICT clause does not match any PRIMARY KEY or UNIQUE constraint"); // trigger
52-
errors.add("no such column"); // trigger
5348
errors.add("values were supplied"); // trigger
5449
errors.add("Data type mismatch (datatype mismatch)"); // trigger
55-
errors.add("too many levels of trigger recursion");
56-
errors.add("String or BLOB exceeds size limit");
5750

58-
errors.add("A table in the database is locked");
59-
errors.add("cannot INSERT into generated column"); // TODO: filter out generated columns
60-
errors.add("The database file is locked");
6151
errors.add("load_extension() prohibited in triggers and views");
6252
SQLite3Errors.addInsertNowErrors(errors);
6353
SQLite3Errors.addExpectedExpressionErrors(errors);

src/sqlancer/sqlite3/gen/dml/SQLite3UpdateGenerator.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -95,24 +95,15 @@ private SQLQueryAdapter update(SQLite3Table table) {
9595
// sb.append(expressions.stream().map(e -> SQLite3Visitor.asString(e)).collect(Collectors.joining(", ")));
9696
// }
9797

98-
errors.add("[SQLITE_ERROR] SQL error or missing database (foreign key mismatch");
99-
errors.add("[SQLITE_CONSTRAINT] Abort due to constraint violation");
98+
SQLite3Errors.addInsertUpdateErrors(errors);
99+
100100
errors.add("[SQLITE_ERROR] SQL error or missing database (parser stack overflow)");
101101
errors.add(
102102
"[SQLITE_ERROR] SQL error or missing database (second argument to likelihood() must be a constant between 0.0 and 1.0)");
103-
errors.add("[SQLITE_ERROR] SQL error or missing database (no such table:");
104103
// for views
105104
errors.add("ORDER BY term out of range");
106-
errors.add("no such column");
107-
errors.add("(too many levels of trigger recursion");
108-
errors.add("String or BLOB exceeds size limit");
109-
errors.add("cannot UPDATE generated column");
110105
errors.add("unknown function: json_type");
111106

112-
// TODO not update generated columns?
113-
errors.add("cannot INSERT into generated column");
114-
errors.add("A table in the database is locked"); // https://www.sqlite.org/src/tktview?name=56a74875be
115-
errors.add("The database file is locked");
116107
SQLite3Errors.addInsertNowErrors(errors);
117108
SQLite3Errors.addExpectedExpressionErrors(errors);
118109
SQLite3Errors.addDeleteErrors(errors);

0 commit comments

Comments
 (0)