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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2eac96c626e2414a5c247ad35baa97106f1e6196f8e5df080bc6c594f5f3e268
|
|
| MD5 |
d56cc0ac7e34970eeffde3fb79374d72
|
|
| BLAKE2b-256 |
10b553943e4fccee6c87100a0e47f1e6d07b9b5b9ac9d0bd8579ab05037c3289
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
049db2891be0dc7fecb098c2b719d085ff0d8886eac18ee0af7db76c8c239800
|
|
| MD5 |
f7930848a41cac9fe3c6d6d52e994589
|
|
| BLAKE2b-256 |
85bb8f0ae73410100701801d1866d7099827abf735093028519b4e7db779327b
|