API reference
The complete facade surface. Import it once:
use Kwasii\LaravelSqlParser\Facades\LaravelSqlParser as Sql;
dialect
Resolve a dialect by name, alias, Laravel driver name, or instance. null means the configured default, or your default DB driver.
Sql::dialect('mysql');
Sql::dialect('pgsql'); // driver alias -> Postgres
Sql::dialect(null); // configured default
Sql::dialectForDriver('sqlsrv'); // T-SQL
tokenize
/** @return list<Token> */
Sql::tokenize(string $sql, string|Dialect|null $dialect = null): array
parse / parseOne
/** @return list<Expression|null> one tree per statement */
Sql::parse(string $sql, string|Dialect|null $dialect = null, ?ErrorLevel $errorLevel = null): array
/** Single statement; several statements are wrapped in a Block */
Sql::parseOne(string $sql, string|Dialect|null $dialect = null, ?ErrorLevel $errorLevel = null): Expression
transpile
/**
* @param bool|array<string, mixed> $options generator options, or just the pretty flag
* @return list<string> one string per statement
*/
Sql::transpile(
string $sql,
string|Dialect|null $from = null,
string|Dialect|null $to = null,
bool|array $options = []
): array
transpileQuery
Transpile ?-placeholder SQL and return bindings in output order:
/**
* @param array<array-key, mixed> $bindings
* @param bool|array<string, mixed> $options
* @return array{sql: string, bindings: list<mixed>}
*/
Sql::transpileQuery(
string $sql,
array $bindings,
string|Dialect|null $from = null,
string|Dialect|null $to = null,
bool|array $options = []
): array
Query-builder macros
Registered on the base query builder and Eloquent when macros is enabled:
$query->toSqlFor('sqlsrv'): string
$query->bindingsFor('sqlsrv'): array
$query->toRawSqlFor('mysql'): string
Expression
$expr->sql(string|Dialect|null $dialect = null, array $options = []): string
$expr->findAll(string $class): array
$expr->find(string $class): ?Expression
$expr->equals(Expression $other): bool
$expr->dump(): array
$expr->toTree(): array
Expression::load(array $data): Expression
Optimizer
use Kwasii\LaravelSqlParser\Optimizer\Optimizer;
Optimizer::optimize(
string|Expression $sql,
?array $schema = null,
?string $dialect = null,
array $rules = []
): Expression
Standalone core
use Kwasii\LaravelSqlParser\Dialects\Dialect;
Dialect::transpile(string $sql, string|Dialect|null $read = null, string|Dialect|null $write = null, array $options = []): array
Dialect::get(string|Dialect|null $dialect = null): Dialect
Dialect::register(string $name, string $class): void