sqlparser-rs 0.60.1 → 0.60.2
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.
- package/README.md +14 -21
- package/dist/cjs/index.js +6 -7
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/parser.js +32 -105
- package/dist/cjs/parser.js.map +1 -1
- package/dist/esm/index.js +6 -6
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/parser.js +32 -71
- package/dist/esm/parser.js.map +1 -1
- package/dist/types/index.d.ts +6 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/parser.d.ts +14 -28
- package/dist/types/parser.d.ts.map +1 -1
- package/package.json +1 -1
- package/wasm/README.md +14 -21
- package/wasm/package.json +1 -1
- package/wasm/sqlparser_rs_wasm_bg.wasm +0 -0
package/README.md
CHANGED
|
@@ -14,7 +14,6 @@ A SQL parser for JavaScript and TypeScript, powered by [datafusion-sqlparser-rs]
|
|
|
14
14
|
- Parse SQL into a detailed Abstract Syntax Tree (AST)
|
|
15
15
|
- Support for 13+ SQL dialects (PostgreSQL, MySQL, SQLite, BigQuery, etc.)
|
|
16
16
|
- Full TypeScript type definitions
|
|
17
|
-
- Works in Node.js and browsers
|
|
18
17
|
- Fast and accurate parsing using the battle-tested Rust implementation
|
|
19
18
|
- Zero native dependencies
|
|
20
19
|
|
|
@@ -30,22 +29,22 @@ npm install sqlparser-rs
|
|
|
30
29
|
import { Parser, GenericDialect, PostgreSqlDialect } from 'sqlparser-rs';
|
|
31
30
|
|
|
32
31
|
// Simple parsing
|
|
33
|
-
const statements =
|
|
32
|
+
const statements = Parser.parse('SELECT * FROM users', new GenericDialect());
|
|
34
33
|
console.log(statements);
|
|
35
34
|
|
|
36
35
|
// With specific dialect
|
|
37
|
-
const pgStatements =
|
|
36
|
+
const pgStatements = Parser.parse(
|
|
38
37
|
'SELECT * FROM users WHERE id = $1',
|
|
39
38
|
new PostgreSqlDialect()
|
|
40
39
|
);
|
|
41
40
|
|
|
42
41
|
// Format SQL
|
|
43
|
-
const formatted =
|
|
42
|
+
const formatted = Parser.format('select * from users', new GenericDialect());
|
|
44
43
|
console.log(formatted); // "SELECT * FROM users"
|
|
45
44
|
|
|
46
45
|
// Validate SQL
|
|
47
46
|
try {
|
|
48
|
-
|
|
47
|
+
Parser.validate('SELEC * FROM users', new GenericDialect());
|
|
49
48
|
} catch (error) {
|
|
50
49
|
console.log('Invalid SQL:', error.message);
|
|
51
50
|
}
|
|
@@ -61,22 +60,22 @@ The main class for parsing SQL.
|
|
|
61
60
|
|
|
62
61
|
```typescript
|
|
63
62
|
// Parse SQL into statements
|
|
64
|
-
const statements =
|
|
63
|
+
const statements = Parser.parse(sql: string, dialect: Dialect): Statement[];
|
|
65
64
|
|
|
66
65
|
// Parse and return JSON string
|
|
67
|
-
const json =
|
|
66
|
+
const json = Parser.parseToJson(sql: string, dialect: Dialect): string;
|
|
68
67
|
|
|
69
68
|
// Parse and return formatted SQL string
|
|
70
|
-
const formatted =
|
|
69
|
+
const formatted = Parser.parseToString(sql: string, dialect: Dialect): string;
|
|
71
70
|
|
|
72
71
|
// Format SQL (round-trip through parser)
|
|
73
|
-
const formatted =
|
|
72
|
+
const formatted = Parser.format(sql: string, dialect: Dialect): string;
|
|
74
73
|
|
|
75
74
|
// Validate SQL syntax
|
|
76
|
-
const isValid =
|
|
75
|
+
const isValid = Parser.validate(sql: string, dialect: Dialect): boolean;
|
|
77
76
|
|
|
78
77
|
// Get list of supported dialects
|
|
79
|
-
const dialects =
|
|
78
|
+
const dialects = Parser.getSupportedDialects(): string[];
|
|
80
79
|
```
|
|
81
80
|
|
|
82
81
|
#### Instance Methods (Builder Pattern)
|
|
@@ -90,13 +89,7 @@ const parser = new Parser(new PostgreSqlDialect())
|
|
|
90
89
|
trailingCommas: true
|
|
91
90
|
});
|
|
92
91
|
|
|
93
|
-
|
|
94
|
-
const statements = await parser.parseAsync('SELECT * FROM users');
|
|
95
|
-
|
|
96
|
-
// Parse synchronously (requires initWasm() first)
|
|
97
|
-
import { initWasm } from 'sqlparser-rs';
|
|
98
|
-
await initWasm();
|
|
99
|
-
const statements = parser.parseSync('SELECT * FROM users');
|
|
92
|
+
const statements = parser.parse('SELECT * FROM users');
|
|
100
93
|
```
|
|
101
94
|
|
|
102
95
|
### Dialects
|
|
@@ -131,7 +124,7 @@ const dialect = dialectFromString('postgresql'); // Returns PostgreSqlDialect in
|
|
|
131
124
|
import { Parser, GenericDialect, ParserError } from 'sqlparser-rs';
|
|
132
125
|
|
|
133
126
|
try {
|
|
134
|
-
|
|
127
|
+
Parser.parse('SELEC * FROM users', new GenericDialect());
|
|
135
128
|
} catch (error) {
|
|
136
129
|
if (error instanceof ParserError) {
|
|
137
130
|
console.log('Parse error:', error.message);
|
|
@@ -149,7 +142,7 @@ Full TypeScript types are provided for the AST:
|
|
|
149
142
|
```typescript
|
|
150
143
|
import type { Statement, Query, Expr, Ident, ObjectName } from 'sqlparser-rs';
|
|
151
144
|
|
|
152
|
-
const statements: Statement[] =
|
|
145
|
+
const statements: Statement[] = Parser.parse('SELECT 1', new GenericDialect());
|
|
153
146
|
|
|
154
147
|
// Statement is a discriminated union type
|
|
155
148
|
for (const stmt of statements) {
|
|
@@ -198,7 +191,7 @@ npm test
|
|
|
198
191
|
This package follows the upstream [sqlparser-rs](https://github.com/apache/datafusion-sqlparser-rs) version:
|
|
199
192
|
|
|
200
193
|
- **Major.Minor** matches the upstream Rust crate version
|
|
201
|
-
- **Patch** is for TypeScript binding fixes (e.g., `0.60.
|
|
194
|
+
- **Patch** is for TypeScript binding fixes (e.g., `0.60.2` = upstream `0.60.0` + binding fix)
|
|
202
195
|
|
|
203
196
|
| This package | sqlparser-rs |
|
|
204
197
|
|--------------|--------------|
|
package/dist/cjs/index.js
CHANGED
|
@@ -10,10 +10,10 @@
|
|
|
10
10
|
* import { Parser, GenericDialect, PostgreSqlDialect } from 'sqlparser-rs';
|
|
11
11
|
*
|
|
12
12
|
* // Simple parsing
|
|
13
|
-
* const statements =
|
|
13
|
+
* const statements = Parser.parse('SELECT * FROM users', new GenericDialect());
|
|
14
14
|
*
|
|
15
15
|
* // With specific dialect
|
|
16
|
-
* const pgStatements =
|
|
16
|
+
* const pgStatements = Parser.parse(
|
|
17
17
|
* 'SELECT * FROM users WHERE id = $1',
|
|
18
18
|
* new PostgreSqlDialect()
|
|
19
19
|
* );
|
|
@@ -23,15 +23,15 @@
|
|
|
23
23
|
* .withRecursionLimit(50)
|
|
24
24
|
* .withOptions({ trailingCommas: true });
|
|
25
25
|
*
|
|
26
|
-
* const ast =
|
|
26
|
+
* const ast = parser.parse('SELECT * FROM users');
|
|
27
27
|
*
|
|
28
28
|
* // Format SQL
|
|
29
|
-
* const formatted =
|
|
29
|
+
* const formatted = Parser.format('select * from users', new GenericDialect());
|
|
30
30
|
* // Returns: "SELECT * FROM users"
|
|
31
31
|
*
|
|
32
32
|
* // Validate SQL
|
|
33
33
|
* try {
|
|
34
|
-
*
|
|
34
|
+
* Parser.validate('SELECT * FRO users', new GenericDialect());
|
|
35
35
|
* } catch (e) {
|
|
36
36
|
* console.log('Invalid SQL:', e.message);
|
|
37
37
|
* }
|
|
@@ -54,11 +54,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
54
54
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
55
55
|
};
|
|
56
56
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
57
|
-
exports.SUPPORTED_DIALECTS = exports.dialectFromString = exports.OracleDialect = exports.HiveDialect = exports.DatabricksDialect = exports.DuckDbDialect = exports.BigQueryDialect = exports.ClickHouseDialect = exports.MsSqlDialect = exports.RedshiftDialect = exports.SnowflakeDialect = exports.SQLiteDialect = exports.PostgreSqlDialect = exports.MySqlDialect = exports.AnsiDialect = exports.GenericDialect = exports.
|
|
57
|
+
exports.SUPPORTED_DIALECTS = exports.dialectFromString = exports.OracleDialect = exports.HiveDialect = exports.DatabricksDialect = exports.DuckDbDialect = exports.BigQueryDialect = exports.ClickHouseDialect = exports.MsSqlDialect = exports.RedshiftDialect = exports.SnowflakeDialect = exports.SQLiteDialect = exports.PostgreSqlDialect = exports.MySqlDialect = exports.AnsiDialect = exports.GenericDialect = exports.Parser = void 0;
|
|
58
58
|
// Parser
|
|
59
59
|
var parser_js_1 = require("./parser.js");
|
|
60
60
|
Object.defineProperty(exports, "Parser", { enumerable: true, get: function () { return parser_js_1.Parser; } });
|
|
61
|
-
Object.defineProperty(exports, "initWasm", { enumerable: true, get: function () { return parser_js_1.initWasm; } });
|
|
62
61
|
// Dialects
|
|
63
62
|
var dialects_js_1 = require("./dialects.js");
|
|
64
63
|
Object.defineProperty(exports, "GenericDialect", { enumerable: true, get: function () { return dialects_js_1.GenericDialect; } });
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;;;;;;;;;;;;;;;;;AAEH,SAAS;AACT,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;;;;;;;;;;;;;;;;;AAEH,SAAS;AACT,yCAAqC;AAA5B,mGAAA,MAAM,OAAA;AAGf,WAAW;AACX,6CAiBuB;AAhBrB,6GAAA,cAAc,OAAA;AACd,0GAAA,WAAW,OAAA;AACX,2GAAA,YAAY,OAAA;AACZ,gHAAA,iBAAiB,OAAA;AACjB,4GAAA,aAAa,OAAA;AACb,+GAAA,gBAAgB,OAAA;AAChB,8GAAA,eAAe,OAAA;AACf,2GAAA,YAAY,OAAA;AACZ,gHAAA,iBAAiB,OAAA;AACjB,8GAAA,eAAe,OAAA;AACf,4GAAA,aAAa,OAAA;AACb,gHAAA,iBAAiB,OAAA;AACjB,0GAAA,WAAW,OAAA;AACX,4GAAA,aAAa,OAAA;AACb,gHAAA,iBAAiB,OAAA;AACjB,iHAAA,kBAAkB,OAAA;AAIpB,QAAQ;AACR,mDAAiC"}
|
package/dist/cjs/parser.js
CHANGED
|
@@ -1,86 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
3
|
exports.Parser = void 0;
|
|
37
|
-
exports.initWasm = initWasm;
|
|
38
4
|
const dialects_js_1 = require("./dialects.js");
|
|
39
5
|
const errors_js_1 = require("./types/errors.js");
|
|
40
|
-
//
|
|
6
|
+
// Lazily loaded WASM module - loaded synchronously on first access
|
|
41
7
|
let wasmModule = null;
|
|
42
|
-
let wasmInitPromise = null;
|
|
43
8
|
/**
|
|
44
|
-
*
|
|
45
|
-
* This is called automatically when needed, but can be called manually for eager loading
|
|
9
|
+
* Get the WASM module (loads synchronously on first access)
|
|
46
10
|
*/
|
|
47
|
-
|
|
48
|
-
await getWasmModule();
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Get or initialize the WASM module
|
|
52
|
-
*/
|
|
53
|
-
async function getWasmModule() {
|
|
11
|
+
function getWasmModule() {
|
|
54
12
|
if (wasmModule) {
|
|
55
13
|
return wasmModule;
|
|
56
14
|
}
|
|
57
|
-
|
|
58
|
-
|
|
15
|
+
try {
|
|
16
|
+
// Use require() for synchronous loading
|
|
17
|
+
// The path is relative to the compiled output in dist/cjs or dist/esm
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
19
|
+
wasmModule = require('../../wasm/sqlparser_rs_wasm.js');
|
|
20
|
+
return wasmModule;
|
|
59
21
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
// Try to load the WASM module
|
|
63
|
-
// Use dynamic path to avoid TypeScript path resolution issues
|
|
64
|
-
// The path is relative to the compiled output in dist/cjs or dist/esm
|
|
65
|
-
const wasmPath = '../../wasm/sqlparser_rs_wasm.js';
|
|
66
|
-
const wasm = await Promise.resolve(`${wasmPath}`).then(s => __importStar(require(s)));
|
|
67
|
-
wasmModule = wasm;
|
|
68
|
-
return wasmModule;
|
|
69
|
-
}
|
|
70
|
-
catch (error) {
|
|
71
|
-
throw new errors_js_1.WasmInitError(`Failed to initialize WASM module: ${error instanceof Error ? error.message : String(error)}`);
|
|
72
|
-
}
|
|
73
|
-
})();
|
|
74
|
-
return wasmInitPromise;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Get the WASM module synchronously (throws if not initialized)
|
|
78
|
-
*/
|
|
79
|
-
function getWasmModuleSync() {
|
|
80
|
-
if (!wasmModule) {
|
|
81
|
-
throw new errors_js_1.WasmInitError('WASM module not initialized. Call initWasm() first or use async methods.');
|
|
22
|
+
catch (error) {
|
|
23
|
+
throw new errors_js_1.WasmInitError(`Failed to load WASM module: ${error instanceof Error ? error.message : String(error)}`);
|
|
82
24
|
}
|
|
83
|
-
return wasmModule;
|
|
84
25
|
}
|
|
85
26
|
/**
|
|
86
27
|
* SQL Parser
|
|
@@ -92,14 +33,14 @@ function getWasmModuleSync() {
|
|
|
92
33
|
* import { Parser, PostgreSqlDialect } from 'sqlparser-rs';
|
|
93
34
|
*
|
|
94
35
|
* // Simple parsing
|
|
95
|
-
* const statements =
|
|
36
|
+
* const statements = Parser.parse('SELECT * FROM users', new PostgreSqlDialect());
|
|
96
37
|
*
|
|
97
38
|
* // With builder pattern
|
|
98
39
|
* const parser = new Parser(new PostgreSqlDialect())
|
|
99
40
|
* .withRecursionLimit(50)
|
|
100
41
|
* .withOptions({ trailingCommas: true });
|
|
101
42
|
*
|
|
102
|
-
* const ast =
|
|
43
|
+
* const ast = parser.parse('SELECT * FROM users');
|
|
103
44
|
* ```
|
|
104
45
|
*/
|
|
105
46
|
class Parser {
|
|
@@ -133,27 +74,13 @@ class Parser {
|
|
|
133
74
|
return this;
|
|
134
75
|
}
|
|
135
76
|
/**
|
|
136
|
-
* Parse SQL statements
|
|
77
|
+
* Parse SQL statements
|
|
137
78
|
*
|
|
138
79
|
* @param sql - SQL string to parse
|
|
139
80
|
* @returns Array of parsed statements
|
|
140
81
|
*/
|
|
141
|
-
|
|
142
|
-
const wasm =
|
|
143
|
-
return this.parseWithWasm(wasm, sql);
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Parse SQL statements synchronously
|
|
147
|
-
* Requires WASM module to be initialized first via initWasm()
|
|
148
|
-
*
|
|
149
|
-
* @param sql - SQL string to parse
|
|
150
|
-
* @returns Array of parsed statements
|
|
151
|
-
*/
|
|
152
|
-
parseSync(sql) {
|
|
153
|
-
const wasm = getWasmModuleSync();
|
|
154
|
-
return this.parseWithWasm(wasm, sql);
|
|
155
|
-
}
|
|
156
|
-
parseWithWasm(wasm, sql) {
|
|
82
|
+
parse(sql) {
|
|
83
|
+
const wasm = getWasmModule();
|
|
157
84
|
try {
|
|
158
85
|
const hasOptions = Object.keys(this.options).length > 0;
|
|
159
86
|
if (hasOptions) {
|
|
@@ -173,7 +100,7 @@ class Parser {
|
|
|
173
100
|
// Static methods for simple one-off parsing
|
|
174
101
|
// ============================================================================
|
|
175
102
|
/**
|
|
176
|
-
* Parse SQL statements
|
|
103
|
+
* Parse SQL statements
|
|
177
104
|
*
|
|
178
105
|
* @param sql - SQL string to parse
|
|
179
106
|
* @param dialect - SQL dialect to use
|
|
@@ -181,22 +108,22 @@ class Parser {
|
|
|
181
108
|
*
|
|
182
109
|
* @example
|
|
183
110
|
* ```typescript
|
|
184
|
-
* const statements =
|
|
111
|
+
* const statements = Parser.parse('SELECT 1', new GenericDialect());
|
|
185
112
|
* ```
|
|
186
113
|
*/
|
|
187
|
-
static
|
|
114
|
+
static parse(sql, dialect = new dialects_js_1.GenericDialect()) {
|
|
188
115
|
const parser = new Parser(dialect);
|
|
189
|
-
return parser.
|
|
116
|
+
return parser.parse(sql);
|
|
190
117
|
}
|
|
191
118
|
/**
|
|
192
|
-
* Parse SQL and return the AST as a JSON string
|
|
119
|
+
* Parse SQL and return the AST as a JSON string
|
|
193
120
|
*
|
|
194
121
|
* @param sql - SQL string to parse
|
|
195
122
|
* @param dialect - SQL dialect to use
|
|
196
123
|
* @returns JSON string representation of the AST
|
|
197
124
|
*/
|
|
198
|
-
static
|
|
199
|
-
const wasm =
|
|
125
|
+
static parseToJson(sql, dialect = new dialects_js_1.GenericDialect()) {
|
|
126
|
+
const wasm = getWasmModule();
|
|
200
127
|
try {
|
|
201
128
|
return wasm.parse_sql_to_json_string(dialect.name, sql);
|
|
202
129
|
}
|
|
@@ -205,14 +132,14 @@ class Parser {
|
|
|
205
132
|
}
|
|
206
133
|
}
|
|
207
134
|
/**
|
|
208
|
-
* Parse SQL and return a formatted string representation
|
|
135
|
+
* Parse SQL and return a formatted string representation
|
|
209
136
|
*
|
|
210
137
|
* @param sql - SQL string to parse
|
|
211
138
|
* @param dialect - SQL dialect to use
|
|
212
139
|
* @returns String representation of the parsed SQL
|
|
213
140
|
*/
|
|
214
|
-
static
|
|
215
|
-
const wasm =
|
|
141
|
+
static parseToString(sql, dialect = new dialects_js_1.GenericDialect()) {
|
|
142
|
+
const wasm = getWasmModule();
|
|
216
143
|
try {
|
|
217
144
|
return wasm.parse_sql_to_string(dialect.name, sql);
|
|
218
145
|
}
|
|
@@ -227,8 +154,8 @@ class Parser {
|
|
|
227
154
|
* @param dialect - SQL dialect to use
|
|
228
155
|
* @returns Formatted SQL string
|
|
229
156
|
*/
|
|
230
|
-
static
|
|
231
|
-
const wasm =
|
|
157
|
+
static format(sql, dialect = new dialects_js_1.GenericDialect()) {
|
|
158
|
+
const wasm = getWasmModule();
|
|
232
159
|
try {
|
|
233
160
|
return wasm.format_sql(dialect.name, sql);
|
|
234
161
|
}
|
|
@@ -243,8 +170,8 @@ class Parser {
|
|
|
243
170
|
* @param dialect - SQL dialect to use
|
|
244
171
|
* @returns true if valid, throws ParserError if invalid
|
|
245
172
|
*/
|
|
246
|
-
static
|
|
247
|
-
const wasm =
|
|
173
|
+
static validate(sql, dialect = new dialects_js_1.GenericDialect()) {
|
|
174
|
+
const wasm = getWasmModule();
|
|
248
175
|
try {
|
|
249
176
|
return wasm.validate_sql(dialect.name, sql);
|
|
250
177
|
}
|
|
@@ -255,8 +182,8 @@ class Parser {
|
|
|
255
182
|
/**
|
|
256
183
|
* Get the list of supported dialect names
|
|
257
184
|
*/
|
|
258
|
-
static
|
|
259
|
-
const wasm =
|
|
185
|
+
static getSupportedDialects() {
|
|
186
|
+
const wasm = getWasmModule();
|
|
260
187
|
return wasm.get_supported_dialects();
|
|
261
188
|
}
|
|
262
189
|
}
|
package/dist/cjs/parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/index.js
CHANGED
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
* import { Parser, GenericDialect, PostgreSqlDialect } from 'sqlparser-rs';
|
|
10
10
|
*
|
|
11
11
|
* // Simple parsing
|
|
12
|
-
* const statements =
|
|
12
|
+
* const statements = Parser.parse('SELECT * FROM users', new GenericDialect());
|
|
13
13
|
*
|
|
14
14
|
* // With specific dialect
|
|
15
|
-
* const pgStatements =
|
|
15
|
+
* const pgStatements = Parser.parse(
|
|
16
16
|
* 'SELECT * FROM users WHERE id = $1',
|
|
17
17
|
* new PostgreSqlDialect()
|
|
18
18
|
* );
|
|
@@ -22,15 +22,15 @@
|
|
|
22
22
|
* .withRecursionLimit(50)
|
|
23
23
|
* .withOptions({ trailingCommas: true });
|
|
24
24
|
*
|
|
25
|
-
* const ast =
|
|
25
|
+
* const ast = parser.parse('SELECT * FROM users');
|
|
26
26
|
*
|
|
27
27
|
* // Format SQL
|
|
28
|
-
* const formatted =
|
|
28
|
+
* const formatted = Parser.format('select * from users', new GenericDialect());
|
|
29
29
|
* // Returns: "SELECT * FROM users"
|
|
30
30
|
*
|
|
31
31
|
* // Validate SQL
|
|
32
32
|
* try {
|
|
33
|
-
*
|
|
33
|
+
* Parser.validate('SELECT * FRO users', new GenericDialect());
|
|
34
34
|
* } catch (e) {
|
|
35
35
|
* console.log('Invalid SQL:', e.message);
|
|
36
36
|
* }
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
* @packageDocumentation
|
|
40
40
|
*/
|
|
41
41
|
// Parser
|
|
42
|
-
export { Parser
|
|
42
|
+
export { Parser } from './parser.js';
|
|
43
43
|
// Dialects
|
|
44
44
|
export { GenericDialect, AnsiDialect, MySqlDialect, PostgreSqlDialect, SQLiteDialect, SnowflakeDialect, RedshiftDialect, MsSqlDialect, ClickHouseDialect, BigQueryDialect, DuckDbDialect, DatabricksDialect, HiveDialect, OracleDialect, dialectFromString, SUPPORTED_DIALECTS, } from './dialects.js';
|
|
45
45
|
// Types
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,SAAS;AACT,OAAO,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,SAAS;AACT,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,WAAW;AACX,OAAO,EACL,cAAc,EACd,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAGvB,QAAQ;AACR,cAAc,kBAAkB,CAAC"}
|
package/dist/esm/parser.js
CHANGED
|
@@ -1,49 +1,24 @@
|
|
|
1
1
|
import { GenericDialect } from './dialects.js';
|
|
2
2
|
import { ParserError, WasmInitError } from './types/errors.js';
|
|
3
|
-
//
|
|
3
|
+
// Lazily loaded WASM module - loaded synchronously on first access
|
|
4
4
|
let wasmModule = null;
|
|
5
|
-
let wasmInitPromise = null;
|
|
6
5
|
/**
|
|
7
|
-
*
|
|
8
|
-
* This is called automatically when needed, but can be called manually for eager loading
|
|
6
|
+
* Get the WASM module (loads synchronously on first access)
|
|
9
7
|
*/
|
|
10
|
-
|
|
11
|
-
await getWasmModule();
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Get or initialize the WASM module
|
|
15
|
-
*/
|
|
16
|
-
async function getWasmModule() {
|
|
8
|
+
function getWasmModule() {
|
|
17
9
|
if (wasmModule) {
|
|
18
10
|
return wasmModule;
|
|
19
11
|
}
|
|
20
|
-
|
|
21
|
-
|
|
12
|
+
try {
|
|
13
|
+
// Use require() for synchronous loading
|
|
14
|
+
// The path is relative to the compiled output in dist/cjs or dist/esm
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
16
|
+
wasmModule = require('../../wasm/sqlparser_rs_wasm.js');
|
|
17
|
+
return wasmModule;
|
|
22
18
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
// Try to load the WASM module
|
|
26
|
-
// Use dynamic path to avoid TypeScript path resolution issues
|
|
27
|
-
// The path is relative to the compiled output in dist/cjs or dist/esm
|
|
28
|
-
const wasmPath = '../../wasm/sqlparser_rs_wasm.js';
|
|
29
|
-
const wasm = await import(/* webpackIgnore: true */ wasmPath);
|
|
30
|
-
wasmModule = wasm;
|
|
31
|
-
return wasmModule;
|
|
32
|
-
}
|
|
33
|
-
catch (error) {
|
|
34
|
-
throw new WasmInitError(`Failed to initialize WASM module: ${error instanceof Error ? error.message : String(error)}`);
|
|
35
|
-
}
|
|
36
|
-
})();
|
|
37
|
-
return wasmInitPromise;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Get the WASM module synchronously (throws if not initialized)
|
|
41
|
-
*/
|
|
42
|
-
function getWasmModuleSync() {
|
|
43
|
-
if (!wasmModule) {
|
|
44
|
-
throw new WasmInitError('WASM module not initialized. Call initWasm() first or use async methods.');
|
|
19
|
+
catch (error) {
|
|
20
|
+
throw new WasmInitError(`Failed to load WASM module: ${error instanceof Error ? error.message : String(error)}`);
|
|
45
21
|
}
|
|
46
|
-
return wasmModule;
|
|
47
22
|
}
|
|
48
23
|
/**
|
|
49
24
|
* SQL Parser
|
|
@@ -55,14 +30,14 @@ function getWasmModuleSync() {
|
|
|
55
30
|
* import { Parser, PostgreSqlDialect } from 'sqlparser-rs';
|
|
56
31
|
*
|
|
57
32
|
* // Simple parsing
|
|
58
|
-
* const statements =
|
|
33
|
+
* const statements = Parser.parse('SELECT * FROM users', new PostgreSqlDialect());
|
|
59
34
|
*
|
|
60
35
|
* // With builder pattern
|
|
61
36
|
* const parser = new Parser(new PostgreSqlDialect())
|
|
62
37
|
* .withRecursionLimit(50)
|
|
63
38
|
* .withOptions({ trailingCommas: true });
|
|
64
39
|
*
|
|
65
|
-
* const ast =
|
|
40
|
+
* const ast = parser.parse('SELECT * FROM users');
|
|
66
41
|
* ```
|
|
67
42
|
*/
|
|
68
43
|
export class Parser {
|
|
@@ -96,27 +71,13 @@ export class Parser {
|
|
|
96
71
|
return this;
|
|
97
72
|
}
|
|
98
73
|
/**
|
|
99
|
-
* Parse SQL statements
|
|
74
|
+
* Parse SQL statements
|
|
100
75
|
*
|
|
101
76
|
* @param sql - SQL string to parse
|
|
102
77
|
* @returns Array of parsed statements
|
|
103
78
|
*/
|
|
104
|
-
|
|
105
|
-
const wasm =
|
|
106
|
-
return this.parseWithWasm(wasm, sql);
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Parse SQL statements synchronously
|
|
110
|
-
* Requires WASM module to be initialized first via initWasm()
|
|
111
|
-
*
|
|
112
|
-
* @param sql - SQL string to parse
|
|
113
|
-
* @returns Array of parsed statements
|
|
114
|
-
*/
|
|
115
|
-
parseSync(sql) {
|
|
116
|
-
const wasm = getWasmModuleSync();
|
|
117
|
-
return this.parseWithWasm(wasm, sql);
|
|
118
|
-
}
|
|
119
|
-
parseWithWasm(wasm, sql) {
|
|
79
|
+
parse(sql) {
|
|
80
|
+
const wasm = getWasmModule();
|
|
120
81
|
try {
|
|
121
82
|
const hasOptions = Object.keys(this.options).length > 0;
|
|
122
83
|
if (hasOptions) {
|
|
@@ -136,7 +97,7 @@ export class Parser {
|
|
|
136
97
|
// Static methods for simple one-off parsing
|
|
137
98
|
// ============================================================================
|
|
138
99
|
/**
|
|
139
|
-
* Parse SQL statements
|
|
100
|
+
* Parse SQL statements
|
|
140
101
|
*
|
|
141
102
|
* @param sql - SQL string to parse
|
|
142
103
|
* @param dialect - SQL dialect to use
|
|
@@ -144,22 +105,22 @@ export class Parser {
|
|
|
144
105
|
*
|
|
145
106
|
* @example
|
|
146
107
|
* ```typescript
|
|
147
|
-
* const statements =
|
|
108
|
+
* const statements = Parser.parse('SELECT 1', new GenericDialect());
|
|
148
109
|
* ```
|
|
149
110
|
*/
|
|
150
|
-
static
|
|
111
|
+
static parse(sql, dialect = new GenericDialect()) {
|
|
151
112
|
const parser = new Parser(dialect);
|
|
152
|
-
return parser.
|
|
113
|
+
return parser.parse(sql);
|
|
153
114
|
}
|
|
154
115
|
/**
|
|
155
|
-
* Parse SQL and return the AST as a JSON string
|
|
116
|
+
* Parse SQL and return the AST as a JSON string
|
|
156
117
|
*
|
|
157
118
|
* @param sql - SQL string to parse
|
|
158
119
|
* @param dialect - SQL dialect to use
|
|
159
120
|
* @returns JSON string representation of the AST
|
|
160
121
|
*/
|
|
161
|
-
static
|
|
162
|
-
const wasm =
|
|
122
|
+
static parseToJson(sql, dialect = new GenericDialect()) {
|
|
123
|
+
const wasm = getWasmModule();
|
|
163
124
|
try {
|
|
164
125
|
return wasm.parse_sql_to_json_string(dialect.name, sql);
|
|
165
126
|
}
|
|
@@ -168,14 +129,14 @@ export class Parser {
|
|
|
168
129
|
}
|
|
169
130
|
}
|
|
170
131
|
/**
|
|
171
|
-
* Parse SQL and return a formatted string representation
|
|
132
|
+
* Parse SQL and return a formatted string representation
|
|
172
133
|
*
|
|
173
134
|
* @param sql - SQL string to parse
|
|
174
135
|
* @param dialect - SQL dialect to use
|
|
175
136
|
* @returns String representation of the parsed SQL
|
|
176
137
|
*/
|
|
177
|
-
static
|
|
178
|
-
const wasm =
|
|
138
|
+
static parseToString(sql, dialect = new GenericDialect()) {
|
|
139
|
+
const wasm = getWasmModule();
|
|
179
140
|
try {
|
|
180
141
|
return wasm.parse_sql_to_string(dialect.name, sql);
|
|
181
142
|
}
|
|
@@ -190,8 +151,8 @@ export class Parser {
|
|
|
190
151
|
* @param dialect - SQL dialect to use
|
|
191
152
|
* @returns Formatted SQL string
|
|
192
153
|
*/
|
|
193
|
-
static
|
|
194
|
-
const wasm =
|
|
154
|
+
static format(sql, dialect = new GenericDialect()) {
|
|
155
|
+
const wasm = getWasmModule();
|
|
195
156
|
try {
|
|
196
157
|
return wasm.format_sql(dialect.name, sql);
|
|
197
158
|
}
|
|
@@ -206,8 +167,8 @@ export class Parser {
|
|
|
206
167
|
* @param dialect - SQL dialect to use
|
|
207
168
|
* @returns true if valid, throws ParserError if invalid
|
|
208
169
|
*/
|
|
209
|
-
static
|
|
210
|
-
const wasm =
|
|
170
|
+
static validate(sql, dialect = new GenericDialect()) {
|
|
171
|
+
const wasm = getWasmModule();
|
|
211
172
|
try {
|
|
212
173
|
return wasm.validate_sql(dialect.name, sql);
|
|
213
174
|
}
|
|
@@ -218,8 +179,8 @@ export class Parser {
|
|
|
218
179
|
/**
|
|
219
180
|
* Get the list of supported dialect names
|
|
220
181
|
*/
|
|
221
|
-
static
|
|
222
|
-
const wasm =
|
|
182
|
+
static getSupportedDialects() {
|
|
183
|
+
const wasm = getWasmModule();
|
|
223
184
|
return wasm.get_supported_dialects();
|
|
224
185
|
}
|
|
225
186
|
}
|
package/dist/esm/parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AA6B/D,
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
* import { Parser, GenericDialect, PostgreSqlDialect } from 'sqlparser-rs';
|
|
10
10
|
*
|
|
11
11
|
* // Simple parsing
|
|
12
|
-
* const statements =
|
|
12
|
+
* const statements = Parser.parse('SELECT * FROM users', new GenericDialect());
|
|
13
13
|
*
|
|
14
14
|
* // With specific dialect
|
|
15
|
-
* const pgStatements =
|
|
15
|
+
* const pgStatements = Parser.parse(
|
|
16
16
|
* 'SELECT * FROM users WHERE id = $1',
|
|
17
17
|
* new PostgreSqlDialect()
|
|
18
18
|
* );
|
|
@@ -22,15 +22,15 @@
|
|
|
22
22
|
* .withRecursionLimit(50)
|
|
23
23
|
* .withOptions({ trailingCommas: true });
|
|
24
24
|
*
|
|
25
|
-
* const ast =
|
|
25
|
+
* const ast = parser.parse('SELECT * FROM users');
|
|
26
26
|
*
|
|
27
27
|
* // Format SQL
|
|
28
|
-
* const formatted =
|
|
28
|
+
* const formatted = Parser.format('select * from users', new GenericDialect());
|
|
29
29
|
* // Returns: "SELECT * FROM users"
|
|
30
30
|
*
|
|
31
31
|
* // Validate SQL
|
|
32
32
|
* try {
|
|
33
|
-
*
|
|
33
|
+
* Parser.validate('SELECT * FRO users', new GenericDialect());
|
|
34
34
|
* } catch (e) {
|
|
35
35
|
* console.log('Invalid SQL:', e.message);
|
|
36
36
|
* }
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
*
|
|
39
39
|
* @packageDocumentation
|
|
40
40
|
*/
|
|
41
|
-
export { Parser
|
|
41
|
+
export { Parser } from './parser.js';
|
|
42
42
|
export type { ParserOptions } from './parser.js';
|
|
43
43
|
export { GenericDialect, AnsiDialect, MySqlDialect, PostgreSqlDialect, SQLiteDialect, SnowflakeDialect, RedshiftDialect, MsSqlDialect, ClickHouseDialect, BigQueryDialect, DuckDbDialect, DatabricksDialect, HiveDialect, OracleDialect, dialectFromString, SUPPORTED_DIALECTS, } from './dialects.js';
|
|
44
44
|
export type { Dialect, DialectName } from './dialects.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAGH,OAAO,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,EACL,cAAc,EACd,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG1D,cAAc,kBAAkB,CAAC"}
|
package/dist/types/parser.d.ts
CHANGED
|
@@ -13,11 +13,6 @@ export interface ParserOptions {
|
|
|
13
13
|
*/
|
|
14
14
|
recursionLimit?: number;
|
|
15
15
|
}
|
|
16
|
-
/**
|
|
17
|
-
* Initialize the WASM module
|
|
18
|
-
* This is called automatically when needed, but can be called manually for eager loading
|
|
19
|
-
*/
|
|
20
|
-
export declare function initWasm(): Promise<void>;
|
|
21
16
|
/**
|
|
22
17
|
* SQL Parser
|
|
23
18
|
*
|
|
@@ -28,14 +23,14 @@ export declare function initWasm(): Promise<void>;
|
|
|
28
23
|
* import { Parser, PostgreSqlDialect } from 'sqlparser-rs';
|
|
29
24
|
*
|
|
30
25
|
* // Simple parsing
|
|
31
|
-
* const statements =
|
|
26
|
+
* const statements = Parser.parse('SELECT * FROM users', new PostgreSqlDialect());
|
|
32
27
|
*
|
|
33
28
|
* // With builder pattern
|
|
34
29
|
* const parser = new Parser(new PostgreSqlDialect())
|
|
35
30
|
* .withRecursionLimit(50)
|
|
36
31
|
* .withOptions({ trailingCommas: true });
|
|
37
32
|
*
|
|
38
|
-
* const ast =
|
|
33
|
+
* const ast = parser.parse('SELECT * FROM users');
|
|
39
34
|
* ```
|
|
40
35
|
*/
|
|
41
36
|
export declare class Parser {
|
|
@@ -62,23 +57,14 @@ export declare class Parser {
|
|
|
62
57
|
*/
|
|
63
58
|
withOptions(options: ParserOptions): Parser;
|
|
64
59
|
/**
|
|
65
|
-
* Parse SQL statements
|
|
66
|
-
*
|
|
67
|
-
* @param sql - SQL string to parse
|
|
68
|
-
* @returns Array of parsed statements
|
|
69
|
-
*/
|
|
70
|
-
parseAsync(sql: string): Promise<Statement[]>;
|
|
71
|
-
/**
|
|
72
|
-
* Parse SQL statements synchronously
|
|
73
|
-
* Requires WASM module to be initialized first via initWasm()
|
|
60
|
+
* Parse SQL statements
|
|
74
61
|
*
|
|
75
62
|
* @param sql - SQL string to parse
|
|
76
63
|
* @returns Array of parsed statements
|
|
77
64
|
*/
|
|
78
|
-
|
|
79
|
-
private parseWithWasm;
|
|
65
|
+
parse(sql: string): Statement[];
|
|
80
66
|
/**
|
|
81
|
-
* Parse SQL statements
|
|
67
|
+
* Parse SQL statements
|
|
82
68
|
*
|
|
83
69
|
* @param sql - SQL string to parse
|
|
84
70
|
* @param dialect - SQL dialect to use
|
|
@@ -86,26 +72,26 @@ export declare class Parser {
|
|
|
86
72
|
*
|
|
87
73
|
* @example
|
|
88
74
|
* ```typescript
|
|
89
|
-
* const statements =
|
|
75
|
+
* const statements = Parser.parse('SELECT 1', new GenericDialect());
|
|
90
76
|
* ```
|
|
91
77
|
*/
|
|
92
|
-
static parse(sql: string, dialect?: Dialect):
|
|
78
|
+
static parse(sql: string, dialect?: Dialect): Statement[];
|
|
93
79
|
/**
|
|
94
|
-
* Parse SQL and return the AST as a JSON string
|
|
80
|
+
* Parse SQL and return the AST as a JSON string
|
|
95
81
|
*
|
|
96
82
|
* @param sql - SQL string to parse
|
|
97
83
|
* @param dialect - SQL dialect to use
|
|
98
84
|
* @returns JSON string representation of the AST
|
|
99
85
|
*/
|
|
100
|
-
static parseToJson(sql: string, dialect?: Dialect):
|
|
86
|
+
static parseToJson(sql: string, dialect?: Dialect): string;
|
|
101
87
|
/**
|
|
102
|
-
* Parse SQL and return a formatted string representation
|
|
88
|
+
* Parse SQL and return a formatted string representation
|
|
103
89
|
*
|
|
104
90
|
* @param sql - SQL string to parse
|
|
105
91
|
* @param dialect - SQL dialect to use
|
|
106
92
|
* @returns String representation of the parsed SQL
|
|
107
93
|
*/
|
|
108
|
-
static parseToString(sql: string, dialect?: Dialect):
|
|
94
|
+
static parseToString(sql: string, dialect?: Dialect): string;
|
|
109
95
|
/**
|
|
110
96
|
* Format SQL by parsing and regenerating it (round-trip)
|
|
111
97
|
*
|
|
@@ -113,7 +99,7 @@ export declare class Parser {
|
|
|
113
99
|
* @param dialect - SQL dialect to use
|
|
114
100
|
* @returns Formatted SQL string
|
|
115
101
|
*/
|
|
116
|
-
static format(sql: string, dialect?: Dialect):
|
|
102
|
+
static format(sql: string, dialect?: Dialect): string;
|
|
117
103
|
/**
|
|
118
104
|
* Validate SQL syntax without returning the full AST
|
|
119
105
|
*
|
|
@@ -121,10 +107,10 @@ export declare class Parser {
|
|
|
121
107
|
* @param dialect - SQL dialect to use
|
|
122
108
|
* @returns true if valid, throws ParserError if invalid
|
|
123
109
|
*/
|
|
124
|
-
static validate(sql: string, dialect?: Dialect):
|
|
110
|
+
static validate(sql: string, dialect?: Dialect): boolean;
|
|
125
111
|
/**
|
|
126
112
|
* Get the list of supported dialect names
|
|
127
113
|
*/
|
|
128
|
-
static getSupportedDialects():
|
|
114
|
+
static getSupportedDialects(): string[];
|
|
129
115
|
}
|
|
130
116
|
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAqCD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,OAAO,CAAgB;IAE/B;;;;OAIG;gBACS,OAAO,GAAE,OAA8B;IAKnD;;;;;OAKG;IACH,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAKzC;;;;;OAKG;IACH,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM;IAK3C;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE;IAyB/B;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,OAA8B,GAAG,SAAS,EAAE;IAK/E;;;;;;OAMG;IACH,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,OAA8B,GAAG,MAAM;IAShF;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,OAA8B,GAAG,MAAM;IASlF;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,OAA8B,GAAG,MAAM;IAS3E;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,OAA8B,GAAG,OAAO;IAS9E;;OAEG;IACH,MAAM,CAAC,oBAAoB,IAAI,MAAM,EAAE;CAIxC"}
|
package/package.json
CHANGED
package/wasm/README.md
CHANGED
|
@@ -14,7 +14,6 @@ A SQL parser for JavaScript and TypeScript, powered by [datafusion-sqlparser-rs]
|
|
|
14
14
|
- Parse SQL into a detailed Abstract Syntax Tree (AST)
|
|
15
15
|
- Support for 13+ SQL dialects (PostgreSQL, MySQL, SQLite, BigQuery, etc.)
|
|
16
16
|
- Full TypeScript type definitions
|
|
17
|
-
- Works in Node.js and browsers
|
|
18
17
|
- Fast and accurate parsing using the battle-tested Rust implementation
|
|
19
18
|
- Zero native dependencies
|
|
20
19
|
|
|
@@ -30,22 +29,22 @@ npm install sqlparser-rs
|
|
|
30
29
|
import { Parser, GenericDialect, PostgreSqlDialect } from 'sqlparser-rs';
|
|
31
30
|
|
|
32
31
|
// Simple parsing
|
|
33
|
-
const statements =
|
|
32
|
+
const statements = Parser.parse('SELECT * FROM users', new GenericDialect());
|
|
34
33
|
console.log(statements);
|
|
35
34
|
|
|
36
35
|
// With specific dialect
|
|
37
|
-
const pgStatements =
|
|
36
|
+
const pgStatements = Parser.parse(
|
|
38
37
|
'SELECT * FROM users WHERE id = $1',
|
|
39
38
|
new PostgreSqlDialect()
|
|
40
39
|
);
|
|
41
40
|
|
|
42
41
|
// Format SQL
|
|
43
|
-
const formatted =
|
|
42
|
+
const formatted = Parser.format('select * from users', new GenericDialect());
|
|
44
43
|
console.log(formatted); // "SELECT * FROM users"
|
|
45
44
|
|
|
46
45
|
// Validate SQL
|
|
47
46
|
try {
|
|
48
|
-
|
|
47
|
+
Parser.validate('SELEC * FROM users', new GenericDialect());
|
|
49
48
|
} catch (error) {
|
|
50
49
|
console.log('Invalid SQL:', error.message);
|
|
51
50
|
}
|
|
@@ -61,22 +60,22 @@ The main class for parsing SQL.
|
|
|
61
60
|
|
|
62
61
|
```typescript
|
|
63
62
|
// Parse SQL into statements
|
|
64
|
-
const statements =
|
|
63
|
+
const statements = Parser.parse(sql: string, dialect: Dialect): Statement[];
|
|
65
64
|
|
|
66
65
|
// Parse and return JSON string
|
|
67
|
-
const json =
|
|
66
|
+
const json = Parser.parseToJson(sql: string, dialect: Dialect): string;
|
|
68
67
|
|
|
69
68
|
// Parse and return formatted SQL string
|
|
70
|
-
const formatted =
|
|
69
|
+
const formatted = Parser.parseToString(sql: string, dialect: Dialect): string;
|
|
71
70
|
|
|
72
71
|
// Format SQL (round-trip through parser)
|
|
73
|
-
const formatted =
|
|
72
|
+
const formatted = Parser.format(sql: string, dialect: Dialect): string;
|
|
74
73
|
|
|
75
74
|
// Validate SQL syntax
|
|
76
|
-
const isValid =
|
|
75
|
+
const isValid = Parser.validate(sql: string, dialect: Dialect): boolean;
|
|
77
76
|
|
|
78
77
|
// Get list of supported dialects
|
|
79
|
-
const dialects =
|
|
78
|
+
const dialects = Parser.getSupportedDialects(): string[];
|
|
80
79
|
```
|
|
81
80
|
|
|
82
81
|
#### Instance Methods (Builder Pattern)
|
|
@@ -90,13 +89,7 @@ const parser = new Parser(new PostgreSqlDialect())
|
|
|
90
89
|
trailingCommas: true
|
|
91
90
|
});
|
|
92
91
|
|
|
93
|
-
|
|
94
|
-
const statements = await parser.parseAsync('SELECT * FROM users');
|
|
95
|
-
|
|
96
|
-
// Parse synchronously (requires initWasm() first)
|
|
97
|
-
import { initWasm } from 'sqlparser-rs';
|
|
98
|
-
await initWasm();
|
|
99
|
-
const statements = parser.parseSync('SELECT * FROM users');
|
|
92
|
+
const statements = parser.parse('SELECT * FROM users');
|
|
100
93
|
```
|
|
101
94
|
|
|
102
95
|
### Dialects
|
|
@@ -131,7 +124,7 @@ const dialect = dialectFromString('postgresql'); // Returns PostgreSqlDialect in
|
|
|
131
124
|
import { Parser, GenericDialect, ParserError } from 'sqlparser-rs';
|
|
132
125
|
|
|
133
126
|
try {
|
|
134
|
-
|
|
127
|
+
Parser.parse('SELEC * FROM users', new GenericDialect());
|
|
135
128
|
} catch (error) {
|
|
136
129
|
if (error instanceof ParserError) {
|
|
137
130
|
console.log('Parse error:', error.message);
|
|
@@ -149,7 +142,7 @@ Full TypeScript types are provided for the AST:
|
|
|
149
142
|
```typescript
|
|
150
143
|
import type { Statement, Query, Expr, Ident, ObjectName } from 'sqlparser-rs';
|
|
151
144
|
|
|
152
|
-
const statements: Statement[] =
|
|
145
|
+
const statements: Statement[] = Parser.parse('SELECT 1', new GenericDialect());
|
|
153
146
|
|
|
154
147
|
// Statement is a discriminated union type
|
|
155
148
|
for (const stmt of statements) {
|
|
@@ -198,7 +191,7 @@ npm test
|
|
|
198
191
|
This package follows the upstream [sqlparser-rs](https://github.com/apache/datafusion-sqlparser-rs) version:
|
|
199
192
|
|
|
200
193
|
- **Major.Minor** matches the upstream Rust crate version
|
|
201
|
-
- **Patch** is for TypeScript binding fixes (e.g., `0.60.
|
|
194
|
+
- **Patch** is for TypeScript binding fixes (e.g., `0.60.2` = upstream `0.60.0` + binding fix)
|
|
202
195
|
|
|
203
196
|
| This package | sqlparser-rs |
|
|
204
197
|
|--------------|--------------|
|
package/wasm/package.json
CHANGED
|
Binary file
|