API ВЕГА
English

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%.

Документация

Участие в разработке

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