Skip to main content

Capture and analyze SQL queries made during a run your app's test suite

Project description

sql-critic

CI status

Capture and analyze SQL queries made during a run your app's test suite.

Receive feedback about dubious queries in a PR comment.

How it works

Phase 1: Query collection

This phase hooks into your test suite and records any database queries captured by OpenTelementry instrumentation.

NOTE: This step only has Python language support at the moment! However, it's a simple wrapper around OpenTelemetry which could be ported to any other language in theory.

Example using pytest:

from sqlcritic.collector import Collector


collector = Collector()

def pytest_sessionstart(session):
    # only necessary if your app is not already instrumented
    # SQLite here is just an example - there is auto instrumentation for lots
    # of different database adapters
    from opentelemetry.instrumentation.sqlite3 import SQLite3Instrumentor
    SQLite3Instrumentor().instrument()

def pytest_runtest_call(item):
    path, line, name = item.reportinfo()

    with collector.trace_test(path, line, name):
        item.runtest()

def pytest_sessionfinish(session, exitstatus):
    collector.save_results("results.json")

Phase 2: Analysis

The analysis of queries collected during your test suite happens in a GitHub action. Make sure to run this step after your test suite has run and outputted the queries results (i.e. in results.json for example).

- uses: scttnlsn/sql-critic@main
  with:
    repo-token: ${{ secrets.GITHUB_TOKEN }}
    data-path: "results.json"

The results will be posted as a PR comment in the repo utilizing this action.

Development

Setup

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
pip install -e ".[dev]"

Testing

python -m pytest

Dependencies

When dependencies are updated in pyproject.toml then we need to regenerate requirements.txt (which is used for the GitHub action):

pip-compile -o requirements.txt pyproject.toml

Releasing

pip install build twine
python -m build
twine check dist/*
twine upload dist/*

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sqlcritic-0.1.0.tar.gz (8.1 kB view details)

Uploaded Source

Built Distribution

sqlcritic-0.1.0-py3-none-any.whl (7.3 kB view details)

Uploaded Python 3

File details

Details for the file sqlcritic-0.1.0.tar.gz.

File metadata

  • Download URL: sqlcritic-0.1.0.tar.gz
  • Upload date:
  • Size: 8.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.1

File hashes

Hashes for sqlcritic-0.1.0.tar.gz
Algorithm Hash digest
SHA256 00add2501fe1afd0fbf0e98d04ba29c4302bc48aa3398b1d4019722046af37c1
MD5 7fc21a699e1daff3804834eddf3d5874
BLAKE2b-256 1e522e2ab31a090bde8631fd360c548531cdc79dbbc48040e31cdfc5aed7d398

See more details on using hashes here.

File details

Details for the file sqlcritic-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: sqlcritic-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 7.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.1

File hashes

Hashes for sqlcritic-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 24ebcf2264bbfc5c7f5b9196b9160ee69a56cfc9781f7b38b137021332b41054
MD5 00b6122053c8859e3703a69a8aa12869
BLAKE2b-256 89fc6ca6e699bfdf7eb873d9e3e34f658a7c4bca5b86e539a6add361d1d29bf0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page