Русский
Русский
English
Статистика
Реклама

Перевод Папа может в си, или Простая и аккуратная кодогенерация для SQLite

image

Совсем скоро, 4 и 5 ноября, у нас стартуют новые потоки курсов SQL для анализа данных и C++ разработчик, специально к их старту мы подготовили этот перевод из блога Facebook Engineering с обзором полезного инструмента.

SQLite используется широко, но написание хорошо протестированных и поддерживаемых уровней доступа к данным в лучшем случае может стать сложной задачей. Многие команды применяют некую генерацию кода, чтобы избежать необходимости менять десятки порядковых номеров каждый раз, когда добавляется столбец, но такой подход приводит к ошибкам. Компилятор CQL в CG/SQL позволяет создавать сложные хранимые процедуры с большими запросами, а с помощью комбинаций синтаксических хелперов и сильной типизации эти процедуры гораздо проще получить и сохранить. Сочетание сильной типизации в языке и средства для хорошего юнит-тестирования может дать уверенность в том, что даже очень сложная логика корректна.



Что это такое


CG/SQL это система генерации кода для популярной библиотеки SQLite, позволяющая разработчикам писать хранимые процедуры в варианте Transact-SQL (T-SQL) и компилировать их в код на языке C, использующий для выполнения операций C API SQLite. CG/SQL позволяет инженерам создавать сложные хранимые процедуры с большими запросами без ручной проверки кода, необходимой существующим методам.

Вся система также включает функции управления и обновления схемы, создания тестирующего кода для хранимых процедур, получения планов запросов для процедур, а также взаимодействия с хранимыми процедурами из других языков, например, Java и Objective-C. Вывод в JSON позволяет делать разбор или интерфейсный код. Пакет содержит обширную документацию по языку и системе.

Что делает инструмент


Компилятор CQL делает большую часть грязной работы. Он читает схему и процедуры, предоставляя язык с сильной типизацией и сотнями ошибок компиляции, разработанных для предотвращения проблем SQLite, возникающих во время выполнения. Компилятор тщательно отслеживает типы данных переменных и типы схем, сообщая о несоответствиях: например о попытке присвоить обнуляемые столбцы необнуляемым выходным переменным, а в противном случае гарантирует, что API SQLite используются последовательно и корректно.

Сгенерированный код всегда проверяет коды возврата, кроме того, всегда использует корректные порядковые номера и типы столбцов при привязке или считывании данных в систему или из системы SQLite. Это именно то, что трудно получить и сохранить корректно. В дополнение ко всему, примечания к схеме позволяют системе автоматически создавать хранимые процедуры, обновляющие базу данных с любой предыдущей версии схемы до текущей версии. Чтобы такое было возможным, проводятся десятки проверок.

Аннотации к процедурам также могут использоваться для указания на то, что вы хотели бы поддерживать код тестов создания фрагментов схемы и вставки данных в эту схему. Такой подход позволяет протестировать процедуры почти без суеты, а также не зависеть от развертываемой системы. Аналогично эти средства могут создавать схемы, проверяющие планы запросов во время компиляции.

Зачем это нужно?


SQLite используется широко, но написание хорошо протестированных и поддерживаемых уровней доступа к данным в лучшем случае может стать сложной задачей. Многие команды применяют некую генерацию кода, чтобы избежать необходимости менять десятки порядковых номеров каждый раз, когда добавляется столбец, но такой подход приводит к ошибкам. Компилятор CQL в CG/SQL позволяет создавать сложные хранимые процедуры с большими запросами, а с помощью комбинаций синтаксических хелперов и сильной типизации эти процедуры гораздо проще получить и сохранить. Сочетание сильной типизации в языке и средства для хорошего юнит-тестирования может дать уверенность в том, что даже очень сложная логика корректна. Синтаксические хелперы преобразуют безопасный код в канонический SQL, так инженеры пишут меньше кода, но при этом код корректнее и он выполняется везде. Посмотрим на пример:

create procedure insert_a_row(like your_table)begin  insert into your_table from arguments;end;

Этот код создает процедуру вставки в любую таблицу (здесь это your_table), аргументы которой именно столбцы таблицы. Вы не забудете о столбцах, не поставите десятки аргументов в неправильном порядке. Конструкции краткие, кроме того, они устойчивы к ошибкам, что позволяет инженерам проще генерировать код без необходимости проверять каждый его кусочек вручную.

CG/SQL на Github

CG/SQL конечно полезная вещь, но скидочный промокод HABR не менее полезен, он даст вам получить дополнительные 10% к скидке указанной на баннере.

image




Рекомендуемые статьи


Источник: habr.com
К списку статей
Опубликовано: 02.11.2020 20:06:40
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Блог компании skillfactory

Open source

Программирование

C

Sqlite

Skillfactory

Си

Sql

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru