-
Notifications
You must be signed in to change notification settings - Fork 388
Open
Description
Problem Statement
Currently, SQLancer users must manually capture database states and write interestingness scripts when using C-Reduce for test case minimization. This process is error-prone and limits automation capabilities.
Implementation Plan
- Add CLI option (
MainOptions.java):
@Parameter(names = "--use-creduce", description = "EXPERIMENTAL Attempt to reduce queries using c-reduce")
private boolean useCReduce = false; // NOPMD- Modify Exception Handling (
Main.java):
Inside executeMain(...): extend the existing catch (Throwable reduce) block.
try {
...
} catch (Throwable reduce) {
reduce.printStackTrace();
executor.getStateToReproduce().exception = reduce.getMessage();
executor.getLogger().logFileWriter = null;
executor.getLogger().logException(reduce, executor.getStateToReproduce());
if (options.useCreduce()) {
Reducer<G> reducer = new CReducer<>(provider);
creducer.reduce(/* state, reduce, ... */);
}
return false;
}- CReducer.reduce(...) should:
- Generate
databasex.sql: Dump all statements fromstate.getStatements(), and append the failing statement (fromreduce.detailMessage) - Generate
databasex.sh(interestingness script): Extract the error substring fromreduce.cause.detailMessage(e.g., from[SQLITE_CORRUPT] The database disk image is malformed (database disk image is malformed)grabdatabase disk image is malformed), then can generate a script like:sqlite3 databasex.sql 2>&1 | grep -zq "database disk image is malformed". - Invoke C-reduce by
ProcessBuilder, like:Process p = new ProcessBuilder("creduce", "databasex.sh", "databasex.sql").start();.
- Generate
Questions
- Is this design sensible? Any obvious pitfalls?
- How to handle missing or mismatched SQLite versions? The interestingness script may fail.
- This approach only works for SQLite. How can we generalize it to support other DBMSs?
@mrigger @KabilanMA Could you review this design before implementation? Thanks!
Metadata
Metadata
Assignees
Labels
No labels