SQL to LNH allows to generate LNH structures and functions from SQL queries.
Project description
SQL to LNH
Проект предназначен для конвертацию выражений SQL в выражения языка C++, совместимые с библиотекой LNH L0.
Цели проекта
Основной целью является создание более высокоуровневого инструмент для описания структур LNH и методов их обработки, чем код на C.
Возможности в текущей версии
- Парсинг SQL выражений
CREATE TABLE:- Ключ можно задать с использованием ключевых слов
PRIMARY KEYпри описании столбца или выраженияPRIMARY KEY (col1, col2)при описании всей таблицы - Поддерживаются поля типов
INT{N},TINYINT,SMALLINT,MEDIUMINT,INT,INTEGER,BIGINTEGER, а такжеBOOLEAN. Размеры полей возможно задать только в байтах
- Ключ можно задать с использованием ключевых слов
- Преобразование выражений
CREATE TABLEв шаблонный код на C:- Размер поля определяется параметром
keyval_size - Имеется поддержка расширения структуры путём частичного дублирования ключа, как в btwc-dijkstra-xrt
- Значения группируются "наивным" алгоритмом: выбираются в порядке их объявления, и если места в группе для значения не хватает, то формируется новая группа, в которую помещается новое значение
- Размер поля определяется параметром
- Задание алгоритмов поиска данных и обхода структур через выражения
SELECT- Поддерживается поиск только по одной таблице
- Поддерживаются псевдонимы таблиц и столбцов,
LIMIT,ORDER BY,WHERE - Поддерживаются поименованные параметры подстановки типа
:foo, $bar - Поддержка функций агрегации не подтверждена
- Создание функций вставки из выражений
INSERT INTO- Необходимо перечислить все столбцы для вставки
Установка
Установить можно с помощью команды:
pip install sql_to_lnh
Использование
CLI
С пакетом предоставляется CLI-утилита для тестирования. Запустите в терминале командой sql_to_lnh. На вход предоставляется
выражение SQL, имя объекта, на выходе генерируется необходимый фрагмент C++ кода. Пример:
Введите SQL-выражение
>>> CREATE TABLE users(
>>> idx INT4 NOT NULL,
>>> user INT4 NOT NULL,
>>> role INT4 NOT NULL,
>>> time INT4 NOT NULL,
>>> PRIMARY KEY (idx, user)
>>> )
>>>
Имя объекта (Enter для имени по-умолчанию):
USERS
Результат трансляции:
struct Users {
int struct_number;
constexpr Users(int struct_number) : struct_number(struct_number) {}
STRUCT(Key0) {
unsigned int idx: 32;
unsigned int user: 32;
};
STRUCT(Val0) {
unsigned int role: 32;
unsigned int time: 32;
};
#ifdef __riscv64__
DEFINE_DEFAULT_KEYVAL(Key0, Val0)
#endif
};
constexpr Users USERS(1);
Введите SQL-выражение
>>>
cog
С пакетом распространяется утилита для кодогенерации cog. Cog позволяет включать в файлы с исходным кодом комментарии, которые содержат код на python, исполнять код из комментариев и результат работы печатать в исходный файл.
Чтобы создать модуль с объявлениями, который можно использовать в проекте для LNH, создайте файл с комментариями для cog
(к примеру, codegen.h). В комментариях cog необходимо:
- Инициализировать модуль:
/*[[[cog
from sql_to_lnh.CogPrinter import CogPrinter
codegen = CogPrinter('sql_to_lnh.db')
]]]*/
//[[[end]]]
- Вызвать модуль кодогенерации с выражением SQL и именем структуры (опционально):
/*[[[cog
users_SQL = """
CREATE TABLE users(
idx INT4 NOT NULL,
user INT4 NOT NULL,
role INT4 NOT NULL,
time INT4 NOT NULL,
PRIMARY KEY (idx, user)
)"""
codegen.translate(users_SQL, 'USERS')
]]]*/
//[[[end]]]
- Закрыть модуль кодогенерации:
/*[[[cog
codegen.close()
]]]*/
//[[[end]]]
- Вызвать cog командой
cog -r [ИМЯ ФАЙЛА]. В результате будет получен файл:
/*[[[cog
from sql_to_lnh.CogPrinter import CogPrinter
codegen = CogPrinter('sql_to_lnh.db')
]]]*/
#ifndef GITERS_H_
#define GITERS_H_
#include <stdlib.h>
#include <stdint.h>
#include <cmath>
#include <cassert>
#ifdef __riscv64__
#include "map.h"
#endif
#include "compose_keys.hxx"
#define DEBUG
#ifdef __riscv64__
template<typename K, typename V>
struct Handle {
bool ret_val;
K k{get_result_key<K>()};
V v{get_result_value<V>()};
[[gnu::always_inline]] Handle(bool ret_val) : ret_val(ret_val) {
}
[[gnu::always_inline]] operator bool() const {
return ret_val;
}
[[gnu::always_inline]] K key() const {
return k;
}
[[gnu::always_inline]] V value() const {
return v;
}
};
#endif
//[[[end]]]
/*[[[cog
users_SQL = """
CREATE TABLE users(
idx INT4 NOT NULL,
user INT4 NOT NULL,
role INT4 NOT NULL,
time INT4 NOT NULL,
PRIMARY KEY (idx, user)
)"""
codegen.translate(users_SQL, 'USERS')
]]]*/
struct Users {
int struct_number;
constexpr Users(int struct_number) : struct_number(struct_number) {}
STRUCT(Key0) {
unsigned int idx: 32;
unsigned int user: 32;
};
STRUCT(Val0) {
unsigned int role: 32;
unsigned int time: 32;
};
#ifdef __riscv64__
DEFINE_DEFAULT_KEYVAL(Key0, Val0)
#endif
};
constexpr Users USERS(1);
//[[[end]]]
/*[[[cog
codegen.close()
]]]*/
#endif
//[[[end]]]
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_to_lnh-1.0.1.tar.gz.
File metadata
- Download URL: sql_to_lnh-1.0.1.tar.gz
- Upload date:
- Size: 105.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cd7fa4a97da5f3fec4c00bab47e813e21ad8d883f9b51072798548ef56f97714
|
|
| MD5 |
5026020279006bc01fce63b16aaf80b0
|
|
| BLAKE2b-256 |
5fcf565cb9632b83ce621ffbf808f04d932f354a3384b5188bb37ede22814756
|
File details
Details for the file sql_to_lnh-1.0.1-py3-none-any.whl.
File metadata
- Download URL: sql_to_lnh-1.0.1-py3-none-any.whl
- Upload date:
- Size: 106.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f0a003373fac28b19efd542bc5101d49f3dbead5850b0277dac90611b0ab491
|
|
| MD5 |
0a14b7fe56a208c75ec9fcec6315efb6
|
|
| BLAKE2b-256 |
b87ccbebca0614ec4d914c76857b916db41f394df5a902e7eff6841586fa19ff
|