![image](https://habrastorage.org/webt/rd/y0/fn/rdy0fnck7p3jxdw3rjqqjg8gwn4.jpeg)
Совсем скоро, 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](https://habrastorage.org/webt/dj/y7/u-/djy7u-wo--pcxif3dx1pdygtgjg.jpeg)
- SQL для анализа данных
- C++ разработчик
- Курс по Machine Learning
- Обучение профессии Data Science
- Обучение профессии Data Analyst
- Онлайн-буткемп по Data Analytics
- Курс «Python для веб-разработки»
Eще курсы