GoSQLX
SQL-парсер, форматтер, линтер и сканер безопасности на Go для 8 диалектов.
Песочница · Документация · Бенчмарки · VS Code · MCP-сервер
| ~2.9M разборов/с† | Задержка разбора 349 ns† | ~80–85% SQL-99 (оценка) | 8 диалектов | 0 гонок |
|---|
† Только этап разбора: от предварительно токенизированного ввода до AST. Запрос SELECT id, name FROM users, Apple M4, Go 1.27, медиана 20 запусков BenchmarkPerformanceBaseline. Сложные запросы разбираются дольше (см. performance_baselines.json). Чтобы повторить результаты: go test -run ^$ -bench BenchmarkPerformanceBaseline -benchmem -count=20 ./pkg/sql/parser/.
Что такое GoSQLX?
GoSQLX — это готовый к использованию в production SQL SDK для Go. Он токенизирует и разбирает SQL, а также строит AST. Оптимизации без копирования и интеллектуальное использование пулов объектов позволяют разбирать простой запрос SELECT примерно за 349 ns (~2.9M разборов/с).
Почему GoSQLX?
-
Это не ORM, а парсер — вы получаете AST и сами решаете, что с ним делать.
-
Он работает быстро — токенизация без копирования, переиспользование объектов через sync.Pool, отсутствие аллокаций на критически важных участках кода.
-
Он поддерживает широкий набор возможностей — PostgreSQL, MySQL, MariaDB, SQL Server, Oracle, SQLite, Snowflake и ClickHouse. CTE, оконные функции, MERGE и операции над множествами.
-
Это больше, чем библиотека — CLI, расширение для VS Code, GitHub Action, MCP-сервер, WASM-песочница и привязки для Python.
Установка
Библиотека Go
go get github.com/ajitpratap0/GoSQLX
CLI
go install github.com/ajitpratap0/GoSQLX/cmd/gosqlx@latest
VS Code
code --install-extension ajitpratap0.gosqlx
Расширение включает бинарный файл, поэтому дополнительная настройка не требуется. Подробнее.
MCP-сервер
claude mcp add --transport http gosqlx https://mcp.gosqlx.dev/mcp
7 инструментов для работы с SQL в Claude, Cursor или любом другом MCP-клиенте. Руководство по MCP.
Плагин Claude Code (навыки, slash-команды, агент-рецензент SQL): /plugin marketplace add ajitpratap0/GoSQLX, затем /plugin install gosqlx@gosqlx — подробнее.
Приложение ChatGPT: добавьте https://mcp.gosqlx.dev/mcp в качестве коннектора в режиме разработчика, чтобы получить интерактивный виджет для анализа. Подробнее.
GitHub Action
- uses: ajitpratap0/GoSQLX@v1
with:
files: '**/*.sql'
validate: true
Быстрый старт
Исходный код: examples/readme_quickstart/main.go. Сборка проверяется в CI для HEAD и последнего релиза.
package main
import (
"context"
"errors"
"fmt"
"log"
"github.com/ajitpratap0/GoSQLX/pkg/gosqlx"
"github.com/ajitpratap0/GoSQLX/pkg/sql/ast"
)
func main() {
ctx := context.Background()
// ParseTree is the recommended entry point. It returns an
// opaque handle with built-in helpers.
tree, err := gosqlx.ParseTree(ctx, "SELECT id, name FROM users WHERE active = true",
gosqlx.WithDialect("postgresql"))
if err != nil {
// Sentinel errors work with errors.Is
if errors.Is(err, gosqlx.ErrSyntax) {
log.Fatalf("syntax error: %v", err)
}
log.Fatal(err)
}
fmt.Println("Tables:", tree.Tables())
fmt.Println(tree.Format(gosqlx.WithIndent(2), gosqlx.WithUppercaseKeywords(true)))
// Walk the AST - typed walkers avoid the type-assertion dance:
tree.WalkSelects(func(s *ast.SelectStatement) bool {
fmt.Printf(" SELECT with %d columns\n", len(s.Columns))
return true
})
// The legacy Parse/Format/Validate API still works for v1.x code.
// See docs/MIGRATION.md for the Tree migration guide.
}
Результат:
Tables: [users]
SELECT id, name
FROM users
WHERE active = true
SELECT with 2 columns
Форматтер преобразует SQL-запрос в одну строку в удобочитаемый вид:
Возможности
-
Парсер — токенизатор без копирования, парсер рекурсивного спуска и полное построение AST.
-
Анализ — сканер SQL-инъекций, 30 правил линтера (L001–L030), 20 правил оптимизатора и извлечение метаданных.
-
Инструменты — форматтер на основе AST, API преобразования запросов, расширение для VS Code и GitHub Action.
-
Подсветка синтаксиса — подсветка с учетом диалекта для терминалов (ANSI), HTML/CSS, JSON spans, семантических токенов LSP и WASM; используйте
gosqlx highlight query.sqlилиgosqlx.HighlightANSI(sql). -
Поддержка нескольких диалектов — 8 диалектов с отдельной поддержкой грамматики: PostgreSQL, MySQL, MariaDB, SQL Server, Oracle, SQLite, Snowflake и ClickHouse. Флаг
--dialectи функцияWithDialectпринимают 11 названий: эти 8 (postgresql,mysql,mariadb,sqlserver,oracle,sqlite,snowflake,clickhouse), а такжеgeneric,bigqueryиredshift. Для BigQuery и Redshift нет отдельных наборов ключевых слов диалекта — используются общие ключевые слова. Поддерживаются только возможности грамматики, включаемые соответствующими флагами, напримерQUALIFY,PIVOT/UNPIVOT,UNNESTвFROMи доступ к полям через(struct).fieldв BigQuery. -
Готовность к работе с AI — MCP-сервер с 7 инструментами, общедоступной удаленной конечной точкой и поддержкой Streamable HTTP.
-
Проверка качества — CI проходит проверку на гонки; оценочная поддержка SQL-99 составляет ~80–85%.
Документация
-
Начало работы — разберите первый SQL-запрос за 5 минут
-
Руководство по использованию — подробные инструкции и примеры
-
Справочник API — полная документация API
-
Руководство по CLI — справочник по инструменту командной строки
-
Совместимость с SQL — таблица поддержки диалектов
-
Руководство по MCP — интеграция с AI-ассистентами
-
Архитектура — подробный обзор устройства системы
-
Бенчмарки — данные о производительности и методика измерений
-
Журнал изменений — изменения в каждом выпуске
Участие в разработке
GoSQLX развивается благодаря участникам сообщества. Важен любой вклад: исправление ошибок, новые возможности, улучшение документации и даже исправление опечаток.
git clone https://github.com/ajitpratap0/GoSQLX.git && cd GoSQLX
task check # fmt → vet → lint → test (with race detection)
-
Создайте форк и отдельную ветку от
main -
Добавьте тесты — мы используем TDD и требуем, чтобы код не содержал гонок
-
Запустите
task check— проверка должна пройти до отправки PR -
Создайте PR — мы рассмотрим его в течение 24 часов
Руководство для участников · Правила поведения · Управление проектом
Сообщество
Есть вопросы или идеи? Пишите в обсуждения. Нашли ошибку или хотите предложить новую возможность? Создайте issue.
Лицензия
Apache License 2.0 — подробности см. в файле LICENSE.
gosqlx.dev · Песочница · Документация · MCP-сервер · VS Code