Skip to main content

Minimum test flamework for sql

Project description

Test Driven SQL

Tdsql is a minimum test flamework for sql. You can replace any part of sql and check if the result is as expected. You can define test cases as yaml file.

Install

Currently, only bigquery is supported.

pip install 'tdsql[bigquery]'

Authentication

Run either of these commands.

gcloud auth application-default login

# If you want to use service account
# export GOOGLE_APPLICATION_CREDENTIALS=/path/to/keyfile.json

Quick start

Save these files in your working directory.

# ./tdsql.yaml
database: bigquery
tests:
  - filepath: ./hello-world.sql
    replace:
      data: |
        SELECT * FROM UNNEST([
          STRUCT('2020-01-01' AS dt, 100 AS id),
          STRUCT('2020-01-01', 100),
          STRUCT('2020-01-01', 200)
        ])
      master: |
        FROM (
          SELECT 100 AS id, 1 AS category
        )
    expected: |
      SELECT * FROM UNNEST([
        STRUCT('2020-01-01' AS dt, 1 AS category, 2 AS cnt),
        STRUCT('2020-01-01', NULL, 1)
      ])
-- ./hello-world.sql
WITH data AS (
  -- tdsql-start: data
  SELECT dt, id
  FROM `data_table`
  -- tdsql-end: data
), master AS (
  SELECT id, category
  FROM `master_table` -- tdsql-line: master
)
SELECT
  dt,
  category,
  COUNT(*) AS cnt
FROM data INNER JOIN master USING(id)
GROUP BY 1, 2

Then, run this command. You'll see an error message.

tdsql

Fix hello-world.sql and run tdsql again, you won't see any error message this time.

- FROM data INNER JOIN master USING(id)
+ FROM data LEFT JOIN master USING(id)

Quite simple, isn't it?

Examples

Heavily documented sample codes are here.

Feedback

If you find any bugs, please feel free to create an issue.

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

tdsql-0.0.5.tar.gz (8.4 kB view details)

Uploaded Source

Built Distribution

tdsql-0.0.5-py3-none-any.whl (9.5 kB view details)

Uploaded Python 3

File details

Details for the file tdsql-0.0.5.tar.gz.

File metadata

  • Download URL: tdsql-0.0.5.tar.gz
  • Upload date:
  • Size: 8.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.13 CPython/3.10.4 Linux/5.13.0-1023-azure

File hashes

Hashes for tdsql-0.0.5.tar.gz
Algorithm Hash digest
SHA256 3d198f751323d244d7e82bdc5cc861dee0453da13e14082bc78ba4ed478c8ec6
MD5 15bf9e73c01afc573d6fa02822694459
BLAKE2b-256 922d6a576e3aa8744665311fd095b8e21482883a4dc28ba4a337be362dd30d8e

See more details on using hashes here.

File details

Details for the file tdsql-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: tdsql-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 9.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.13 CPython/3.10.4 Linux/5.13.0-1023-azure

File hashes

Hashes for tdsql-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 33c66dcdc49733111dd1bf8a52711a87da74bc36e33c005f2b7bedafe452734a
MD5 5b63a27ca676159c1fb7f061bf2c7966
BLAKE2b-256 3dc96afd86441961b41c49e6a9e41b43acbddaeb201e7ba21ba18d9aad153d5c

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