Utilities for writing Python unit tests for version 2 of the Quera SQL judge.
pip install sql-judge-utils # or git+https://github.com/QueraTeam/sql-judge-utils
Import one of database classes:
# PostgreSQL:
from sql_judge_utils.postgresql import PostgresqlDatabase as Database
# MySQL:
from sql_judge_utils.mysql import MysqlDatabase as Database
Define database instances:
db1 = Database("db1")
db2 = Database("db2")
Optional arguments:
Argument | PostgreSQL default | MySQL default |
---|---|---|
host |
"postgresql" |
"mysql" |
port |
5432 |
3306 |
username |
"postgres" |
"root" |
password |
None |
None |
WARNING: Don't override the default values if you're writing tests for Quera SQL judge.
Create database:
db1.create()
Drop database:
db1.drop()
Init data (run SQL command without fetching results) with SQL string or SQL file path:
db1.init(sql_string)
# or
db1.initf(sql_file_path)
Run query and fetch the results:
col_names, records = db1.run_query(sql_string)
Compare two result of run_query:
status, message = Database.compare_query_result(col_names_1, records_1, col_names_2, records_2)
Compare two database instances:
status, message = db1.is_equal(db2)
Compare two database instances on a table:
status, message = db1.is_equal_on_table(db2, table_name)
Use the parser to extract queries from a submission file:
from sql_judge_utils.parser import get_queries, get_query
submission_file_path = 'path/to/submission.sql'
queries = get_queries(submission_file_path)
# or
submission_file_path = 'path/to/submission.sql'
query_number = 2
query = get_query(submission_file_path, query_number)
Install Hatch and pre-commit hooks:
pipx install hatch
pipx install pre-commit
pre-commit install
Before running the tests, start a MySQL and a PostgreSQL instance:
docker run --name sql-postgres -e POSTGRES_PASSWORD=password -p "127.0.0.1:15432:5432" -d postgres postgres -c log_statement=all
docker run --name sql-mysql -e MYSQL_ROOT_PASSWORD=password -p "127.0.0.1:13306:3306" -d mysql
Run the tests and stop the database instances:
hatch test --all
docker stop sql-postgres sql-mysql
docker rm sql-postgres sql-mysql
Build and publish:
hatch build
hatch publish