Skip to content

Commit 4ba8cd7

Browse files
committed
[SQLite] Reliably exclude rowid columns in the PQS implementation
1 parent af93a55 commit 4ba8cd7

2 files changed

Lines changed: 9 additions & 3 deletions

File tree

src/sqlancer/sqlite3/oracle/SQLite3PivotedQuerySynthesisOracle.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import sqlancer.sqlite3.ast.SQLite3WindowFunction;
3737
import sqlancer.sqlite3.gen.SQLite3Common;
3838
import sqlancer.sqlite3.gen.SQLite3ExpressionGenerator;
39+
import sqlancer.sqlite3.schema.SQLite3Schema;
3940
import sqlancer.sqlite3.schema.SQLite3Schema.SQLite3Column;
4041
import sqlancer.sqlite3.schema.SQLite3Schema.SQLite3RowValue;
4142
import sqlancer.sqlite3.schema.SQLite3Schema.SQLite3Table;
@@ -87,8 +88,8 @@ public SQLite3Select getQuery(SQLite3GlobalState globalState) throws SQLExceptio
8788
// TODO: also implement a wild-card check (*)
8889
// filter out row ids from the select because the hinder the reduction process
8990
// once a bug is found
90-
List<SQLite3Column> columnsWithoutRowid = columns.stream().filter(c -> !c.getName().matches("rowid"))
91-
.collect(Collectors.toList());
91+
List<SQLite3Column> columnsWithoutRowid = columns.stream()
92+
.filter(c -> !SQLite3Schema.ROWID_STRINGS.contains(c.getName())).collect(Collectors.toList());
9293
fetchColumns = Randomly.nonEmptySubset(columnsWithoutRowid);
9394
colExpressions = new ArrayList<>();
9495
List<SQLite3Table> allTables = new ArrayList<>();

src/sqlancer/sqlite3/schema/SQLite3Schema.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@
3131

3232
public class SQLite3Schema {
3333

34+
/**
35+
* All possible aliases for the rowid column.
36+
*/
37+
public static final List<String> ROWID_STRINGS = Collections
38+
.unmodifiableList(Arrays.asList("rowid", "_rowid_", "oid"));
3439
private final List<SQLite3Table> databaseTables;
3540
private final List<String> indexNames;
3641

@@ -336,7 +341,7 @@ public static SQLite3Schema fromConnection(SQLite3GlobalState globalState) throw
336341
tableType.contentEquals("temp_table") ? TableKind.TEMP : TableKind.MAIN, withoutRowid,
337342
nrRows, isView, isVirtual, isReadOnly);
338343
if (isRowIdTable(withoutRowid, isView, isVirtual)) {
339-
String rowId = Randomly.fromOptions("rowid", "_rowid_", "oid");
344+
String rowId = Randomly.fromList(ROWID_STRINGS);
340345
SQLite3Column rowid = new SQLite3Column(rowId, SQLite3DataType.INT, true, null, true);
341346
t.addRowid(rowid);
342347
rowid.setTable(t);

0 commit comments

Comments
 (0)