-
Query generator: random query generator
-
Query executor: execute query on old and new version of DBMS
-
Bug validator: remove false positive cases
-
You can specify detailed configuration
-
Default configuration yaml files are under
configurationdirectory
| Config attribute | Description |
|---|---|
| DBMS | target DBMS name (e.g., postgres) |
| DB | create database name |
| DB_VER | array about DBMS versions (for displaying) |
| DSN | URI string for connecting DBMS |
| FILEDB | whether DBMS is running on file system (e.g., sqlite) |
| INIT | should Apollo initialize the DB? |
| MIN | minimum query execution time that we should consider |
| NEW_VER_PORT | port number of new version of DBMS |
| OLD_VER_PORT | port number of old version of DBMS |
| PASSWORD | DBMS password |
| PREFIX | prefix string which is added to query |
| PROBRESET | how frequently reset the probability table (unit: minutes) |
| RUN_NEW | external command to run query |
| RUN_OLD | external command to run query |
| SQLSMITH_PORT | specify sqlsmith port (useful when fuzzing cockroachDB) |
| SQLSMITH_TIMEOUT | maximum query generation time |
| THRESHOLD | we will consider query as regression if it is larget than this |
| TIMEOUT | timeout for one query execution |
| USERNAME | DBMS username |
| USE_MINIMIZER | true if user wants auto-minimization on-the-fly |
| USE_PROB | true if user wants feedback-driven fuzzing |
| USE_TPCC | true if user wants to use pre-defined DB |
./fuzz.py -c configuration/sqlite.yaml- NOTE: we do not support
probabilityandinitializeoptions for Sqlite and CockroachDB- Cleaning up the code now. They should be available soon.
./fuzz.py -c configuration/postgres.yaml# e.g., Minimization queries in the directory
$ ./sql_minimizer.py -c configuration/postgres.yaml -d pg_ex
# e.g., Minimization single query
$ ./sql_minimizer.py -c configuration/sqlite.yaml -f sq_ex/16.sql-
Minimizer is executed in the middle of SQLFuzz
-
However, user can also run it as standalone mode
-
-c: configuration file -
-dor--indir: input directory which contains a number of SQL queries to be minimized -
-for--infile: single input file which needs query minimization
-
