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-dependency-manager

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

1. Создайте SQL блоки в файлах

blocks/users.sql

SELECT 
    id,
    name,
    email
FROM users 
WHERE active = true

blocks/sales.sql

SELECT
    u.name,
    s.amount,
    s.date
FROM sales s
JOIN users u ON s.user_id = u.id  -- зависит от блока 'users'

2. Используйте в коде:

from sqlblocks import BasicSQLBlock, SQLBlockRegistry, SQLAssembler
from sqlblocks.plugins.folder_plugin import FolderPlugin
from pathlib import Path

# 1. Инициализация
registry = SQLBlockRegistry()
plugin = FolderPlugin('/path/to/sql/blocks')
registry = SQLBlockRegistry()
sqlassembly = SQLAssembler(registry, plugin)

# 2. Инициализация SQL блоков
registry.add_block(BasicSQLBlock(
    name="users",
    depends=None,
    source="users.sql",
))
registry.add_block(BasicSQLBlock(
    name="sales",
    depends=("users",),
    source="sales.sql",
))

# 3. Компиляция 
query = sqlassembly.assemble_sql("sales")

Результат

WITH
users AS (
    SELECT 
        id,
        name,
        email
    FROM users 
    WHERE active = true
)
SELECT
    u.name,
    s.amount,
    s.date
FROM sales s
JOIN users u ON s.user_id = u.id

Архитектура

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

  • 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.0.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.0-py3-none-any.whl (5.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: sql_assembly-0.1.0.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.0.tar.gz
Algorithm Hash digest
SHA256 1e2cc72c49ef62eec3f1d8a961bf040b9a99f775f9b0ce8d993d1d7268bcac74
MD5 9d97a21a454584a7720a2e1ed288aecd
BLAKE2b-256 e2b9e47774abc62a723d56a92b525fd11545266fa559b3dff6066f4aa236f03d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: sql_assembly-0.1.0-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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ac28fde662a7af929630254eaf7e97186b11d4a839e2000578d6a59622fbae58
MD5 eddab634ff29e86b2bebe9c9185dab79
BLAKE2b-256 41aa01f363ccbaf9abe29c37d96a65fe65e5ca137d2d59e39af8a0a0b6cc8121

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