@memberjunction/sqlglot-ts
A TypeScript wrapper for Python’s sqlglot SQL transpiler. Provides deterministic, verifiable SQL dialect conversion via a managed local Python FastAPI microservice.
Features
Section titled “Features”- 31 SQL dialects supported (T-SQL, PostgreSQL, MySQL, Snowflake, BigQuery, etc.)
- Deterministic conversion — no LLM randomness, reproducible results
- Zero MemberJunction dependencies — standalone community package
- Ephemeral port binding — microservice runs on
127.0.0.1with auto-assigned port - Managed lifecycle — automatic startup/shutdown of the Python process
- Statement-by-statement mode — individual statement tracking, one failure doesn’t block others
Prerequisites
Section titled “Prerequisites”- Python 3.9+ with the pinned dependencies installed:
pip install -r requirements.txtDependencies (sqlglot, fastapi, uvicorn, pydantic) are pinned in requirements.txt so conversion output is reproducible. See the comments in that file for the upgrade procedure.
import { SqlGlotClient } from '@memberjunction/sqlglot-ts';
const client = new SqlGlotClient();await client.start();
// Transpile T-SQL to PostgreSQLconst result = await client.transpile( "SELECT ISNULL(col, 0) FROM [dbo].[MyTable]", { fromDialect: 'tsql', toDialect: 'postgres' });console.log(result.sql);// Output: SELECT COALESCE(col, 0) FROM "dbo"."MyTable";
// Statement-by-statement modeconst stmtResult = await client.transpileStatements( "SELECT TOP 10 * FROM Users; SELECT GETDATE();", { fromDialect: 'tsql', toDialect: 'postgres' });console.log(stmtResult.statements);
// Parse SQL to ASTconst ast = await client.parse( "SELECT 1", { dialect: 'postgres' });
// List supported dialectsconst dialects = await client.getDialects();
// Health checkconst health = await client.health();
await client.stop();SqlGlotClient
Section titled “SqlGlotClient”Constructor Options
Section titled “Constructor Options”| Option | Type | Default | Description |
|---|---|---|---|
pythonPath | string | 'python3' | Path to Python executable |
serverPath | string | auto-detected | Path to server.py |
startupTimeoutMs | number | 30000 | Max ms to wait for server startup |
requestTimeoutMs | number | 60000 | Max ms per HTTP request |
Methods
Section titled “Methods”start()— Start the Python microservicestop()— Stop the Python microservicetranspile(sql, options)— Transpile SQL between dialects (batch)transpileStatements(sql, options)— Transpile statement-by-statementparse(sql, options)— Parse SQL to AST (JSON)getDialects()— List all supported dialectshealth()— Server health check
Attribution
Section titled “Attribution”This package wraps the excellent sqlglot Python library by Toby Mao and contributors. sqlglot provides a comprehensive SQL parser, transpiler, and optimizer supporting 31 SQL dialects with 8,900+ stars and 7,000+ commits.
License
Section titled “License”ISC