Skip to main content

SQL query assembler with dependency resolution for reusable code blocks

Project description

SQL Assembly

Open-source инструмент для борьбы с дублированием SQL-кода через композицию переиспользуемых блоков.

Проблема

При работе со сложными аналитическими запросами часто возникают одинаковые CTE (Common Table Expressions), которые копируются между разными SQL-файлами. Это приводит к:

  • дублированию кода
  • сложностям при изменении логики
  • ошибкам синхронизации

Решение

SQL Blocks Assembler позволяет декомпозировать SQL-запросы на переиспользуемые блоки с системой зависимостей.

Ключевые возможности

  • 📦 Модульность - разбивайте запросы на логические блоки
  • 🔄 Переиспользование - используйте одни и те же блоки в разных запросах
  • 📐 Зависимости - автоматическое разрешение порядка выполнения через граф зависимостей

Быстрый старт

Установка

pip install sql-assembly

Пример использования

1. Создайте директорию sql_blocks

2. Создайте SQL блоки в директории sql_blocks

users.sql

-- name: "users_block"
SELECT 
    id,
    name,
    email
FROM users 
WHERE active = true

sales.sql

-- name: "sales_b"
-- depends: "users_block"
SELECT
    u.name,
    s.amount,
    s.date
FROM sales s
JOIN users_block u ON s.user_id = u.id  -- зависит от блока "users_block"

3. Создайте билд ваших sql блоков

sql-assembly build 

4. Использование

В консоле
> sql-assembly assembly sales_b
WITH
users_block AS (
SELECT
    id,
    name,
    email
FROM users
WHERE active = true
),
sales_b AS (
SELECT
    u.name,
    s.amount,
    s.date
FROM sales s
JOIN users_block u ON s.user_id = u.id  -- зависит от блока
)
SELECT * FROM sales_b
В коде
from sqlblocks import SQLAssembler

assembler = SQLAssembler()
sql = assembler.assembly_sql("sales_b") # В sql будет лежать тот же выввод, что и выше

Архитектура

Основные компоненты

  • SQLBlock - модель блока с зависимостями
  • SQLBlockRegistry - реестр для управления блоками
  • SQLAssembler - ядро для сборки запросов
  • Плагины - система загрузки блоков

Поддерживаемые плагины

  • ✅ FolderPlugin - загрузка из файловой системы (пока ограничена настройка)
  • 🔄 In progress: БД, REST API, словари

Текущий статус

🚧 Активная разработка - проект в стадии альфа-тестирования. Основной функционал работает, API может меняться.

Вклад в разработку

Любые предложения и pull requests приветствуются!

Лицензия

📄 MIT License - свободная лицензия с минимальными ограничениями.
Разрешает использование, модификацию и распространение кода в коммерческих и некоммерческих целях.

Полный текст лицензии доступен в файле LICENSE.

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

sql_assembly-0.1.1.tar.gz (4.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sql_assembly-0.1.1-py3-none-any.whl (5.1 kB view details)

Uploaded Python 3

File details

Details for the file sql_assembly-0.1.1.tar.gz.

File metadata

  • Download URL: sql_assembly-0.1.1.tar.gz
  • Upload date:
  • Size: 4.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for sql_assembly-0.1.1.tar.gz
Algorithm Hash digest
SHA256 2eac96c626e2414a5c247ad35baa97106f1e6196f8e5df080bc6c594f5f3e268
MD5 d56cc0ac7e34970eeffde3fb79374d72
BLAKE2b-256 10b553943e4fccee6c87100a0e47f1e6d07b9b5b9ac9d0bd8579ab05037c3289

See more details on using hashes here.

File details

Details for the file sql_assembly-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: sql_assembly-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 5.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for sql_assembly-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 049db2891be0dc7fecb098c2b719d085ff0d8886eac18ee0af7db76c8c239800
MD5 f7930848a41cac9fe3c6d6d52e994589
BLAKE2b-256 85bb8f0ae73410100701801d1866d7099827abf735093028519b4e7db779327b

See more details on using hashes here.

Supported by

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