Metadata-Version: 2.4
Name: sql-dependency-manager
Version: 0.1.1
Summary: SQL query assembler with dependency resolution for reusable code blocks
Author-email: picodart <ya-artem@inbox.ru>
License: MIT
Project-URL: Homepage, https://github.com/picodart/SQLBlocks
Project-URL: Repository, https://github.com/picodart/SQLBlocks
Keywords: sql,cte,query-builder,database,code-reuse,sql-composer
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Database
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: license-file

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

## Проблема

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

## Решение

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

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

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

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

### Установка

```bash
pip install sql-dependency-manager
```
### Пример использования
#### 1. Создайте SQL блоки в файлах
blocks/users.sql
```sql
SELECT 
    id,
    name,
    email
FROM users 
WHERE active = true
```
blocks/sales.sql
```sql
SELECT
    u.name,
    s.amount,
    s.date
FROM monthly_sales s
JOIN users u ON s.user_id = u.id  -- зависит от блока 'users'
```
#### 2. Используйте в коде:

```python
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("main_block")
```
#### Результат
```sql
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](LICENSE).
