sqlparser-rs 0.60.2 → 0.60.3-rc2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +65 -32
  2. package/dist/index.cjs +526 -0
  3. package/dist/index.d.cts +1438 -0
  4. package/dist/index.d.mts +1438 -0
  5. package/dist/index.mjs +502 -0
  6. package/package.json +11 -11
  7. package/wasm/README.md +65 -32
  8. package/wasm/package.json +1 -1
  9. package/wasm/sqlparser_rs_wasm_bg.wasm +0 -0
  10. package/wasm/sqlparser_rs_wasm_web.js +628 -0
  11. package/wasm/sqlparser_rs_wasm_web_bg.wasm +0 -0
  12. package/dist/cjs/dialects.js +0 -202
  13. package/dist/cjs/dialects.js.map +0 -1
  14. package/dist/cjs/index.js +0 -81
  15. package/dist/cjs/index.js.map +0 -1
  16. package/dist/cjs/parser.js +0 -191
  17. package/dist/cjs/parser.js.map +0 -1
  18. package/dist/cjs/types/ast.js +0 -10
  19. package/dist/cjs/types/ast.js.map +0 -1
  20. package/dist/cjs/types/errors.js +0 -49
  21. package/dist/cjs/types/errors.js.map +0 -1
  22. package/dist/cjs/types/index.js +0 -19
  23. package/dist/cjs/types/index.js.map +0 -1
  24. package/dist/esm/dialects.js +0 -184
  25. package/dist/esm/dialects.js.map +0 -1
  26. package/dist/esm/index.js +0 -47
  27. package/dist/esm/index.js.map +0 -1
  28. package/dist/esm/package.json +0 -1
  29. package/dist/esm/parser.js +0 -187
  30. package/dist/esm/parser.js.map +0 -1
  31. package/dist/esm/types/ast.js +0 -9
  32. package/dist/esm/types/ast.js.map +0 -1
  33. package/dist/esm/types/errors.js +0 -44
  34. package/dist/esm/types/errors.js.map +0 -1
  35. package/dist/esm/types/index.js +0 -3
  36. package/dist/esm/types/index.js.map +0 -1
  37. package/dist/types/dialects.d.ts +0 -118
  38. package/dist/types/dialects.d.ts.map +0 -1
  39. package/dist/types/index.d.ts +0 -46
  40. package/dist/types/index.d.ts.map +0 -1
  41. package/dist/types/parser.d.ts +0 -116
  42. package/dist/types/parser.d.ts.map +0 -1
  43. package/dist/types/types/ast.d.ts +0 -1097
  44. package/dist/types/types/ast.d.ts.map +0 -1
  45. package/dist/types/types/errors.d.ts +0 -25
  46. package/dist/types/types/errors.d.ts.map +0 -1
  47. package/dist/types/types/index.d.ts +0 -3
  48. package/dist/types/types/index.d.ts.map +0 -1
package/README.md CHANGED
@@ -26,25 +26,22 @@ npm install sqlparser-rs
26
26
  ## Quick Start
27
27
 
28
28
  ```typescript
29
- import { Parser, GenericDialect, PostgreSqlDialect } from 'sqlparser-rs';
29
+ import { parse, format, validate } from 'sqlparser-rs';
30
30
 
31
- // Simple parsing
32
- const statements = Parser.parse('SELECT * FROM users', new GenericDialect());
31
+ // Simple parsing (uses generic dialect by default)
32
+ const statements = parse('SELECT * FROM users');
33
33
  console.log(statements);
34
34
 
35
- // With specific dialect
36
- const pgStatements = Parser.parse(
37
- 'SELECT * FROM users WHERE id = $1',
38
- new PostgreSqlDialect()
39
- );
35
+ // With specific dialect (string name)
36
+ const pgStatements = parse('SELECT * FROM users WHERE id = $1', 'postgresql');
40
37
 
41
38
  // Format SQL
42
- const formatted = Parser.format('select * from users', new GenericDialect());
39
+ const formatted = format('select * from users');
43
40
  console.log(formatted); // "SELECT * FROM users"
44
41
 
45
42
  // Validate SQL
46
43
  try {
47
- Parser.validate('SELEC * FROM users', new GenericDialect());
44
+ validate('SELEC * FROM users');
48
45
  } catch (error) {
49
46
  console.log('Invalid SQL:', error.message);
50
47
  }
@@ -52,46 +49,82 @@ try {
52
49
 
53
50
  ## API
54
51
 
55
- ### Parser
52
+ ### Top-Level Functions
56
53
 
57
- The main class for parsing SQL.
58
-
59
- #### Static Methods
54
+ The simplest way to use the parser:
60
55
 
61
56
  ```typescript
62
- // Parse SQL into statements
63
- const statements = Parser.parse(sql: string, dialect: Dialect): Statement[];
64
-
65
- // Parse and return JSON string
66
- const json = Parser.parseToJson(sql: string, dialect: Dialect): string;
57
+ import { parse, format, validate } from 'sqlparser-rs';
67
58
 
68
- // Parse and return formatted SQL string
69
- const formatted = Parser.parseToString(sql: string, dialect: Dialect): string;
59
+ // Parse SQL - dialect defaults to 'generic'
60
+ parse('SELECT * FROM users');
61
+ parse('SELECT * FROM users', 'postgresql');
62
+ parse('SELECT * FROM users', 'mysql');
70
63
 
71
64
  // Format SQL (round-trip through parser)
72
- const formatted = Parser.format(sql: string, dialect: Dialect): string;
65
+ format('select * from users'); // "SELECT * FROM users"
66
+
67
+ // Validate SQL syntax (throws ParserError if invalid)
68
+ validate('SELECT * FROM users'); // true
69
+ ```
70
+
71
+ ### Dialect Options
73
72
 
74
- // Validate SQL syntax
75
- const isValid = Parser.validate(sql: string, dialect: Dialect): boolean;
73
+ Dialects can be specified as strings or class instances:
76
74
 
77
- // Get list of supported dialects
78
- const dialects = Parser.getSupportedDialects(): string[];
75
+ ```typescript
76
+ import { parse, PostgreSqlDialect } from 'sqlparser-rs';
77
+
78
+ // String dialect names (recommended)
79
+ parse('SELECT $1', 'postgresql');
80
+ parse('SELECT `col` FROM t', 'mysql');
81
+
82
+ // Or dialect instances
83
+ parse('SELECT $1', new PostgreSqlDialect());
79
84
  ```
80
85
 
81
- #### Instance Methods (Builder Pattern)
86
+ Supported dialect strings: `'generic'`, `'ansi'`, `'mysql'`, `'postgresql'`, `'sqlite'`, `'snowflake'`, `'redshift'`, `'mssql'`, `'clickhouse'`, `'bigquery'`, `'duckdb'`, `'databricks'`, `'hive'`, `'oracle'`
87
+
88
+ ### Parser Class
89
+
90
+ For advanced use cases with options:
82
91
 
83
92
  ```typescript
84
93
  import { Parser, PostgreSqlDialect } from 'sqlparser-rs';
85
94
 
95
+ // Static methods (same as top-level functions)
96
+ Parser.parse('SELECT 1');
97
+ Parser.parse('SELECT 1', 'postgresql');
98
+ Parser.format('select 1');
99
+ Parser.validate('SELECT 1');
100
+ Parser.parseToJson('SELECT 1'); // Returns JSON string
101
+ Parser.parseToString('SELECT 1'); // Returns formatted string
102
+ Parser.getSupportedDialects(); // Returns dialect names
103
+
104
+ // Builder pattern for custom options
86
105
  const parser = new Parser(new PostgreSqlDialect())
87
- .withRecursionLimit(50) // Set max recursion depth
88
- .withOptions({ // Set parser options
89
- trailingCommas: true
90
- });
106
+ .withRecursionLimit(50)
107
+ .withOptions({ trailingCommas: true });
91
108
 
92
109
  const statements = parser.parse('SELECT * FROM users');
93
110
  ```
94
111
 
112
+ ### WASM Initialization
113
+
114
+ The WASM module auto-initializes on import. For most use cases, no action is needed.
115
+
116
+ If you need to ensure WASM is ready before calling sync APIs (e.g., in tests):
117
+
118
+ ```typescript
119
+ import { ready, parse } from 'sqlparser-rs';
120
+
121
+ // Wait for WASM to be ready
122
+ await ready();
123
+
124
+ // Now sync APIs are guaranteed to work
125
+ const ast = parse('SELECT 1');
126
+ ```
127
+
95
128
  ### Dialects
96
129
 
97
130
  All dialects from the upstream Rust crate are supported:
@@ -191,7 +224,7 @@ npm test
191
224
  This package follows the upstream [sqlparser-rs](https://github.com/apache/datafusion-sqlparser-rs) version:
192
225
 
193
226
  - **Major.Minor** matches the upstream Rust crate version
194
- - **Patch** is for TypeScript binding fixes (e.g., `0.60.2` = upstream `0.60.0` + binding fix)
227
+ - **Patch** is for TypeScript binding fixes (e.g., `0.60.3-rc2` = upstream `0.60.0` + binding fix)
195
228
 
196
229
  | This package | sqlparser-rs |
197
230
  |--------------|--------------|
package/dist/index.cjs ADDED
@@ -0,0 +1,526 @@
1
+
2
+ //#region src/dialects.ts
3
+ /**
4
+ * Generic SQL dialect - accepts most SQL syntax
5
+ */
6
+ var GenericDialect = class {
7
+ constructor() {
8
+ this.name = "generic";
9
+ }
10
+ };
11
+ /**
12
+ * ANSI SQL standard dialect
13
+ */
14
+ var AnsiDialect = class {
15
+ constructor() {
16
+ this.name = "ansi";
17
+ }
18
+ };
19
+ /**
20
+ * MySQL dialect
21
+ */
22
+ var MySqlDialect = class {
23
+ constructor() {
24
+ this.name = "mysql";
25
+ }
26
+ };
27
+ /**
28
+ * PostgreSQL dialect
29
+ */
30
+ var PostgreSqlDialect = class {
31
+ constructor() {
32
+ this.name = "postgresql";
33
+ }
34
+ };
35
+ /**
36
+ * SQLite dialect
37
+ */
38
+ var SQLiteDialect = class {
39
+ constructor() {
40
+ this.name = "sqlite";
41
+ }
42
+ };
43
+ /**
44
+ * Snowflake dialect
45
+ */
46
+ var SnowflakeDialect = class {
47
+ constructor() {
48
+ this.name = "snowflake";
49
+ }
50
+ };
51
+ /**
52
+ * Amazon Redshift dialect
53
+ */
54
+ var RedshiftDialect = class {
55
+ constructor() {
56
+ this.name = "redshift";
57
+ }
58
+ };
59
+ /**
60
+ * Microsoft SQL Server dialect
61
+ */
62
+ var MsSqlDialect = class {
63
+ constructor() {
64
+ this.name = "mssql";
65
+ }
66
+ };
67
+ /**
68
+ * ClickHouse dialect
69
+ */
70
+ var ClickHouseDialect = class {
71
+ constructor() {
72
+ this.name = "clickhouse";
73
+ }
74
+ };
75
+ /**
76
+ * Google BigQuery dialect
77
+ */
78
+ var BigQueryDialect = class {
79
+ constructor() {
80
+ this.name = "bigquery";
81
+ }
82
+ };
83
+ /**
84
+ * DuckDB dialect
85
+ */
86
+ var DuckDbDialect = class {
87
+ constructor() {
88
+ this.name = "duckdb";
89
+ }
90
+ };
91
+ /**
92
+ * Databricks dialect
93
+ */
94
+ var DatabricksDialect = class {
95
+ constructor() {
96
+ this.name = "databricks";
97
+ }
98
+ };
99
+ /**
100
+ * Apache Hive dialect
101
+ */
102
+ var HiveDialect = class {
103
+ constructor() {
104
+ this.name = "hive";
105
+ }
106
+ };
107
+ /**
108
+ * Oracle dialect
109
+ */
110
+ var OracleDialect = class {
111
+ constructor() {
112
+ this.name = "oracle";
113
+ }
114
+ };
115
+ /**
116
+ * All supported dialect names
117
+ */
118
+ const SUPPORTED_DIALECTS = [
119
+ "generic",
120
+ "ansi",
121
+ "mysql",
122
+ "postgresql",
123
+ "sqlite",
124
+ "snowflake",
125
+ "redshift",
126
+ "mssql",
127
+ "clickhouse",
128
+ "bigquery",
129
+ "duckdb",
130
+ "databricks",
131
+ "hive",
132
+ "oracle"
133
+ ];
134
+ /**
135
+ * Map of dialect names to dialect classes
136
+ */
137
+ const DIALECT_MAP = {
138
+ generic: GenericDialect,
139
+ ansi: AnsiDialect,
140
+ mysql: MySqlDialect,
141
+ postgresql: PostgreSqlDialect,
142
+ sqlite: SQLiteDialect,
143
+ snowflake: SnowflakeDialect,
144
+ redshift: RedshiftDialect,
145
+ mssql: MsSqlDialect,
146
+ clickhouse: ClickHouseDialect,
147
+ bigquery: BigQueryDialect,
148
+ duckdb: DuckDbDialect,
149
+ databricks: DatabricksDialect,
150
+ hive: HiveDialect,
151
+ oracle: OracleDialect
152
+ };
153
+ /**
154
+ * Create a dialect instance from a string name
155
+ *
156
+ * @param name - The name of the dialect (case-insensitive)
157
+ * @returns A dialect instance, or undefined if the dialect is not recognized
158
+ *
159
+ * @example
160
+ * ```typescript
161
+ * const dialect = dialectFromString('postgresql');
162
+ * if (dialect) {
163
+ * const ast = Parser.parse('SELECT 1', dialect);
164
+ * }
165
+ * ```
166
+ */
167
+ function dialectFromString(name) {
168
+ const normalized = name.toLowerCase();
169
+ const DialectClass = DIALECT_MAP[{
170
+ postgres: "postgresql",
171
+ pg: "postgresql",
172
+ sqlserver: "mssql",
173
+ duck: "duckdb"
174
+ }[normalized] ?? normalized];
175
+ return DialectClass ? new DialectClass() : void 0;
176
+ }
177
+
178
+ //#endregion
179
+ //#region src/types/errors.ts
180
+ /**
181
+ * Error thrown when SQL parsing fails
182
+ */
183
+ var ParserError = class ParserError extends Error {
184
+ constructor(message, location) {
185
+ super(message);
186
+ this.name = "ParserError";
187
+ this.location = location;
188
+ if (Error.captureStackTrace) Error.captureStackTrace(this, ParserError);
189
+ }
190
+ /**
191
+ * Create a ParserError from a WASM error object
192
+ */
193
+ static fromWasmError(error) {
194
+ if (typeof error === "string") return new ParserError(error);
195
+ if (error && typeof error === "object") {
196
+ const err = error;
197
+ return new ParserError(typeof err.message === "string" ? err.message : String(error), typeof err.line === "number" && typeof err.column === "number" ? {
198
+ line: err.line,
199
+ column: err.column
200
+ } : void 0);
201
+ }
202
+ return new ParserError(String(error));
203
+ }
204
+ };
205
+ /**
206
+ * Error thrown when WASM module fails to initialize
207
+ */
208
+ var WasmInitError = class WasmInitError extends Error {
209
+ constructor(message) {
210
+ super(message);
211
+ this.name = "WasmInitError";
212
+ if (Error.captureStackTrace) Error.captureStackTrace(this, WasmInitError);
213
+ }
214
+ };
215
+
216
+ //#endregion
217
+ //#region src/parser.ts
218
+ function resolveDialect(dialect = "generic") {
219
+ if (typeof dialect === "string") {
220
+ const resolved = dialectFromString(dialect);
221
+ if (!resolved) throw new Error(`Unknown dialect: ${dialect}`);
222
+ return resolved;
223
+ }
224
+ return dialect;
225
+ }
226
+ let wasmModule = null;
227
+ let initPromise = null;
228
+ let initStarted = false;
229
+ const isBrowser = typeof window !== "undefined" && typeof process === "undefined";
230
+ function startInit() {
231
+ if (initStarted) return;
232
+ initStarted = true;
233
+ initPromise = initWasm().catch(() => {});
234
+ }
235
+ startInit();
236
+ function getWasmModule() {
237
+ if (wasmModule) return wasmModule;
238
+ throw new WasmInitError("WASM module not yet initialized. Use the async import or wait for module to load: import(\"sqlparser-rs\").then(({ parse }) => parse(sql))");
239
+ }
240
+ /**
241
+ * Wait for WASM to be ready (useful for ensuring sync APIs work)
242
+ */
243
+ async function ready() {
244
+ startInit();
245
+ await initPromise;
246
+ }
247
+ /**
248
+ * Initialize the WASM module.
249
+ * This must be called before using the Parser in browsers and Node.js ESM.
250
+ * In Node.js CommonJS, the module is loaded automatically.
251
+ *
252
+ * @example
253
+ * ```typescript
254
+ * import { initWasm, Parser, GenericDialect } from 'sqlparser-rs';
255
+ *
256
+ * // Initialize first
257
+ * await initWasm();
258
+ *
259
+ * // Then use the parser
260
+ * const ast = Parser.parse('SELECT 1', new GenericDialect());
261
+ * ```
262
+ */
263
+ async function initWasm() {
264
+ if (wasmModule) return;
265
+ if (isBrowser) {
266
+ try {
267
+ const wasmJsUrl = new URL("../wasm/sqlparser_rs_wasm_web.js", require("url").pathToFileURL(__filename).href);
268
+ const wasmBinaryUrl = new URL("../wasm/sqlparser_rs_wasm_web_bg.wasm", require("url").pathToFileURL(__filename).href);
269
+ const wasm = await import(
270
+ /* @vite-ignore */
271
+ wasmJsUrl.href
272
+ );
273
+ if (typeof wasm.default === "function") await wasm.default(wasmBinaryUrl);
274
+ wasmModule = wasm;
275
+ } catch (error) {
276
+ throw new WasmInitError(`Failed to load WASM module in browser: ${error instanceof Error ? error.message : String(error)}`);
277
+ }
278
+ return;
279
+ }
280
+ try {
281
+ wasmModule = await import(
282
+ /* @vite-ignore */
283
+ new URL("../wasm/sqlparser_rs_wasm.js", require("url").pathToFileURL(__filename).href).href
284
+ );
285
+ } catch (error) {
286
+ throw new WasmInitError(`Failed to load WASM module: ${error instanceof Error ? error.message : String(error)}`);
287
+ }
288
+ }
289
+ /**
290
+ * SQL Parser
291
+ *
292
+ * Parses SQL statements into an Abstract Syntax Tree (AST).
293
+ *
294
+ * @example
295
+ * ```typescript
296
+ * import { Parser, PostgreSqlDialect } from 'sqlparser-rs';
297
+ *
298
+ * // Simple parsing
299
+ * const statements = Parser.parse('SELECT * FROM users', new PostgreSqlDialect());
300
+ *
301
+ * // With builder pattern
302
+ * const parser = new Parser(new PostgreSqlDialect())
303
+ * .withRecursionLimit(50)
304
+ * .withOptions({ trailingCommas: true });
305
+ *
306
+ * const ast = parser.parse('SELECT * FROM users');
307
+ * ```
308
+ */
309
+ var Parser = class Parser {
310
+ /**
311
+ * Create a new parser instance
312
+ *
313
+ * @param dialect - The SQL dialect to use (defaults to GenericDialect)
314
+ */
315
+ constructor(dialect = new GenericDialect()) {
316
+ this.dialect = dialect;
317
+ this.options = {};
318
+ }
319
+ /**
320
+ * Set the recursion limit for parsing nested expressions
321
+ *
322
+ * @param limit - Maximum recursion depth
323
+ * @returns This parser instance for chaining
324
+ */
325
+ withRecursionLimit(limit) {
326
+ this.options.recursionLimit = limit;
327
+ return this;
328
+ }
329
+ /**
330
+ * Set parser options
331
+ *
332
+ * @param options - Parser options
333
+ * @returns This parser instance for chaining
334
+ */
335
+ withOptions(options) {
336
+ this.options = {
337
+ ...this.options,
338
+ ...options
339
+ };
340
+ return this;
341
+ }
342
+ /**
343
+ * Parse SQL statements
344
+ *
345
+ * @param sql - SQL string to parse
346
+ * @returns Array of parsed statements
347
+ */
348
+ parse(sql) {
349
+ const wasm = getWasmModule();
350
+ try {
351
+ if (Object.keys(this.options).length > 0) return wasm.parse_sql_with_options(this.dialect.name, sql, this.options);
352
+ else return wasm.parse_sql(this.dialect.name, sql);
353
+ } catch (error) {
354
+ throw ParserError.fromWasmError(error);
355
+ }
356
+ }
357
+ /**
358
+ * Parse SQL statements
359
+ *
360
+ * @param sql - SQL string to parse
361
+ * @param dialect - SQL dialect to use (string name or Dialect instance, defaults to 'generic')
362
+ * @returns Array of parsed statements
363
+ *
364
+ * @example
365
+ * ```typescript
366
+ * // Using default dialect
367
+ * const statements = Parser.parse('SELECT 1');
368
+ *
369
+ * // Using string dialect name
370
+ * const pgStatements = Parser.parse('SELECT $1', 'postgresql');
371
+ *
372
+ * // Using dialect instance
373
+ * const mysqlStatements = Parser.parse('SELECT 1', new MySqlDialect());
374
+ * ```
375
+ */
376
+ static parse(sql, dialect = "generic") {
377
+ return new Parser(resolveDialect(dialect)).parse(sql);
378
+ }
379
+ /**
380
+ * Parse SQL and return the AST as a JSON string
381
+ *
382
+ * @param sql - SQL string to parse
383
+ * @param dialect - SQL dialect to use (string name or Dialect instance, defaults to 'generic')
384
+ * @returns JSON string representation of the AST
385
+ */
386
+ static parseToJson(sql, dialect = "generic") {
387
+ const wasm = getWasmModule();
388
+ try {
389
+ return wasm.parse_sql_to_json_string(resolveDialect(dialect).name, sql);
390
+ } catch (error) {
391
+ throw ParserError.fromWasmError(error);
392
+ }
393
+ }
394
+ /**
395
+ * Parse SQL and return a formatted string representation
396
+ *
397
+ * @param sql - SQL string to parse
398
+ * @param dialect - SQL dialect to use (string name or Dialect instance, defaults to 'generic')
399
+ * @returns String representation of the parsed SQL
400
+ */
401
+ static parseToString(sql, dialect = "generic") {
402
+ const wasm = getWasmModule();
403
+ try {
404
+ return wasm.parse_sql_to_string(resolveDialect(dialect).name, sql);
405
+ } catch (error) {
406
+ throw ParserError.fromWasmError(error);
407
+ }
408
+ }
409
+ /**
410
+ * Format SQL by parsing and regenerating it (round-trip)
411
+ *
412
+ * @param sql - SQL string to format
413
+ * @param dialect - SQL dialect to use (string name or Dialect instance, defaults to 'generic')
414
+ * @returns Formatted SQL string
415
+ */
416
+ static format(sql, dialect = "generic") {
417
+ const wasm = getWasmModule();
418
+ try {
419
+ return wasm.format_sql(resolveDialect(dialect).name, sql);
420
+ } catch (error) {
421
+ throw ParserError.fromWasmError(error);
422
+ }
423
+ }
424
+ /**
425
+ * Validate SQL syntax without returning the full AST
426
+ *
427
+ * @param sql - SQL string to validate
428
+ * @param dialect - SQL dialect to use (string name or Dialect instance, defaults to 'generic')
429
+ * @returns true if valid, throws ParserError if invalid
430
+ */
431
+ static validate(sql, dialect = "generic") {
432
+ const wasm = getWasmModule();
433
+ try {
434
+ return wasm.validate_sql(resolveDialect(dialect).name, sql);
435
+ } catch (error) {
436
+ throw ParserError.fromWasmError(error);
437
+ }
438
+ }
439
+ /**
440
+ * Get the list of supported dialect names
441
+ */
442
+ static getSupportedDialects() {
443
+ return getWasmModule().get_supported_dialects();
444
+ }
445
+ };
446
+ /**
447
+ * Parse SQL statements (convenience function)
448
+ *
449
+ * @param sql - SQL string to parse
450
+ * @param dialect - SQL dialect to use (string name or Dialect instance, defaults to 'generic')
451
+ * @returns Array of parsed statements
452
+ *
453
+ * @example
454
+ * ```typescript
455
+ * import { parse } from 'sqlparser-rs';
456
+ *
457
+ * const statements = parse('SELECT * FROM users');
458
+ * const pgStatements = parse('SELECT $1', 'postgresql');
459
+ * ```
460
+ */
461
+ function parse(sql, dialect = "generic") {
462
+ return Parser.parse(sql, dialect);
463
+ }
464
+ /**
465
+ * Validate SQL syntax (convenience function)
466
+ *
467
+ * @param sql - SQL string to validate
468
+ * @param dialect - SQL dialect to use (string name or Dialect instance, defaults to 'generic')
469
+ * @returns true if valid, throws ParserError if invalid
470
+ *
471
+ * @example
472
+ * ```typescript
473
+ * import { validate } from 'sqlparser-rs';
474
+ *
475
+ * if (validate('SELECT * FROM users')) {
476
+ * console.log('Valid SQL!');
477
+ * }
478
+ * ```
479
+ */
480
+ function validate(sql, dialect = "generic") {
481
+ return Parser.validate(sql, dialect);
482
+ }
483
+ /**
484
+ * Format SQL by parsing and regenerating it (convenience function)
485
+ *
486
+ * @param sql - SQL string to format
487
+ * @param dialect - SQL dialect to use (string name or Dialect instance, defaults to 'generic')
488
+ * @returns Formatted SQL string
489
+ *
490
+ * @example
491
+ * ```typescript
492
+ * import { format } from 'sqlparser-rs';
493
+ *
494
+ * const formatted = format('select * from users');
495
+ * // Returns: "SELECT * FROM users"
496
+ * ```
497
+ */
498
+ function format(sql, dialect = "generic") {
499
+ return Parser.format(sql, dialect);
500
+ }
501
+
502
+ //#endregion
503
+ exports.AnsiDialect = AnsiDialect;
504
+ exports.BigQueryDialect = BigQueryDialect;
505
+ exports.ClickHouseDialect = ClickHouseDialect;
506
+ exports.DatabricksDialect = DatabricksDialect;
507
+ exports.DuckDbDialect = DuckDbDialect;
508
+ exports.GenericDialect = GenericDialect;
509
+ exports.HiveDialect = HiveDialect;
510
+ exports.MsSqlDialect = MsSqlDialect;
511
+ exports.MySqlDialect = MySqlDialect;
512
+ exports.OracleDialect = OracleDialect;
513
+ exports.Parser = Parser;
514
+ exports.ParserError = ParserError;
515
+ exports.PostgreSqlDialect = PostgreSqlDialect;
516
+ exports.RedshiftDialect = RedshiftDialect;
517
+ exports.SQLiteDialect = SQLiteDialect;
518
+ exports.SUPPORTED_DIALECTS = SUPPORTED_DIALECTS;
519
+ exports.SnowflakeDialect = SnowflakeDialect;
520
+ exports.WasmInitError = WasmInitError;
521
+ exports.dialectFromString = dialectFromString;
522
+ exports.format = format;
523
+ exports.initWasm = initWasm;
524
+ exports.parse = parse;
525
+ exports.ready = ready;
526
+ exports.validate = validate;