@memberjunction/sql-dialect 0.0.1 → 5.5.0
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 +388 -28
- package/dist/dataTypeMap.d.ts +34 -0
- package/dist/dataTypeMap.d.ts.map +1 -0
- package/dist/dataTypeMap.js +2 -0
- package/dist/dataTypeMap.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/postgresqlDialect.d.ts +43 -0
- package/dist/postgresqlDialect.d.ts.map +1 -0
- package/dist/postgresqlDialect.js +392 -0
- package/dist/postgresqlDialect.js.map +1 -0
- package/dist/sqlDialect.d.ts +267 -0
- package/dist/sqlDialect.d.ts.map +1 -0
- package/dist/sqlDialect.js +37 -0
- package/dist/sqlDialect.js.map +1 -0
- package/dist/sqlServerDialect.d.ts +42 -0
- package/dist/sqlServerDialect.d.ts.map +1 -0
- package/dist/sqlServerDialect.js +329 -0
- package/dist/sqlServerDialect.js.map +1 -0
- package/package.json +25 -7
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { DataTypeMap, MappedType } from './dataTypeMap.js';
|
|
2
|
+
/**
|
|
3
|
+
* Supported database platforms.
|
|
4
|
+
* Extensible — add new platforms as support is implemented.
|
|
5
|
+
*/
|
|
6
|
+
export type DatabasePlatform = 'sqlserver' | 'postgresql';
|
|
7
|
+
/**
|
|
8
|
+
* Result from limitClause() — SQL Server uses a prefix (TOP n) while
|
|
9
|
+
* PostgreSQL uses a suffix (LIMIT n OFFSET m).
|
|
10
|
+
*/
|
|
11
|
+
export interface LimitClauseResult {
|
|
12
|
+
/** SQL placed between SELECT and the column list (e.g., "TOP 10") */
|
|
13
|
+
prefix: string;
|
|
14
|
+
/** SQL placed after the ORDER BY / WHERE clause (e.g., "LIMIT 10 OFFSET 20") */
|
|
15
|
+
suffix: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Schema introspection queries for a given database platform.
|
|
19
|
+
* Each dialect provides platform-specific catalog queries.
|
|
20
|
+
*/
|
|
21
|
+
export interface SchemaIntrospectionSQL {
|
|
22
|
+
/** Query that returns all user tables in a schema */
|
|
23
|
+
listTables: string;
|
|
24
|
+
/** Query that returns all columns for a given table */
|
|
25
|
+
listColumns: string;
|
|
26
|
+
/** Query that returns constraints (PK, UNIQUE, CHECK) */
|
|
27
|
+
listConstraints: string;
|
|
28
|
+
/** Query that returns foreign key relationships */
|
|
29
|
+
listForeignKeys: string;
|
|
30
|
+
/** Query that returns indexes */
|
|
31
|
+
listIndexes: string;
|
|
32
|
+
/** Template for checking if a database object exists */
|
|
33
|
+
objectExists: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Options for generating trigger DDL.
|
|
37
|
+
*/
|
|
38
|
+
export interface TriggerOptions {
|
|
39
|
+
/** Schema name */
|
|
40
|
+
schema: string;
|
|
41
|
+
/** Table name the trigger is on */
|
|
42
|
+
tableName: string;
|
|
43
|
+
/** Trigger name */
|
|
44
|
+
triggerName: string;
|
|
45
|
+
/** Timing: BEFORE, AFTER, or INSTEAD OF */
|
|
46
|
+
timing: 'BEFORE' | 'AFTER' | 'INSTEAD OF';
|
|
47
|
+
/** Events that fire the trigger */
|
|
48
|
+
events: ('INSERT' | 'UPDATE' | 'DELETE')[];
|
|
49
|
+
/** The trigger body SQL */
|
|
50
|
+
body: string;
|
|
51
|
+
/** For PostgreSQL: name of the trigger function */
|
|
52
|
+
functionName?: string;
|
|
53
|
+
/** Whether the trigger fires FOR EACH ROW or FOR EACH STATEMENT */
|
|
54
|
+
forEach?: 'ROW' | 'STATEMENT';
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Options for generating index DDL.
|
|
58
|
+
*/
|
|
59
|
+
export interface IndexOptions {
|
|
60
|
+
/** Schema name */
|
|
61
|
+
schema: string;
|
|
62
|
+
/** Table name */
|
|
63
|
+
tableName: string;
|
|
64
|
+
/** Index name */
|
|
65
|
+
indexName: string;
|
|
66
|
+
/** Columns to index */
|
|
67
|
+
columns: string[];
|
|
68
|
+
/** Whether this is a unique index */
|
|
69
|
+
unique?: boolean;
|
|
70
|
+
/** Index method (btree, gin, gist, hash — PostgreSQL specific, ignored for SQL Server) */
|
|
71
|
+
method?: string;
|
|
72
|
+
/** WHERE clause for partial indexes (PostgreSQL only) */
|
|
73
|
+
where?: string;
|
|
74
|
+
/** INCLUDE columns (SQL Server covering index) */
|
|
75
|
+
includeColumns?: string[];
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Abstract base class for SQL dialect implementations.
|
|
79
|
+
*
|
|
80
|
+
* Encapsulates ALL database-specific SQL syntax patterns into a single,
|
|
81
|
+
* testable abstraction. This is a pure string/logic layer with zero
|
|
82
|
+
* database driver dependencies.
|
|
83
|
+
*/
|
|
84
|
+
export declare abstract class SQLDialect {
|
|
85
|
+
/**
|
|
86
|
+
* The platform key identifying this dialect.
|
|
87
|
+
*/
|
|
88
|
+
abstract get PlatformKey(): DatabasePlatform;
|
|
89
|
+
/**
|
|
90
|
+
* Quotes a database identifier (table name, column name, etc.).
|
|
91
|
+
* SQL Server: [name], PostgreSQL: "name"
|
|
92
|
+
*/
|
|
93
|
+
abstract QuoteIdentifier(name: string): string;
|
|
94
|
+
/**
|
|
95
|
+
* Produces a schema-qualified object reference.
|
|
96
|
+
* SQL Server: [schema].[object], PostgreSQL: schema."object"
|
|
97
|
+
*/
|
|
98
|
+
abstract QuoteSchema(schema: string, object: string): string;
|
|
99
|
+
/**
|
|
100
|
+
* Returns pagination SQL fragments.
|
|
101
|
+
* SQL Server uses TOP (prefix) or OFFSET/FETCH (suffix).
|
|
102
|
+
* PostgreSQL uses LIMIT/OFFSET (suffix).
|
|
103
|
+
*/
|
|
104
|
+
abstract LimitClause(limit: number, offset?: number): LimitClauseResult;
|
|
105
|
+
/**
|
|
106
|
+
* Returns a boolean literal for the platform.
|
|
107
|
+
* SQL Server: "1"/"0", PostgreSQL: "true"/"false"
|
|
108
|
+
*/
|
|
109
|
+
abstract BooleanLiteral(value: boolean): string;
|
|
110
|
+
/**
|
|
111
|
+
* Returns the current UTC timestamp expression.
|
|
112
|
+
* SQL Server: GETUTCDATE(), PostgreSQL: NOW() AT TIME ZONE 'UTC'
|
|
113
|
+
*/
|
|
114
|
+
abstract CurrentTimestampUTC(): string;
|
|
115
|
+
/**
|
|
116
|
+
* Returns a new UUID generation expression.
|
|
117
|
+
* SQL Server: NEWID(), PostgreSQL: gen_random_uuid()
|
|
118
|
+
*/
|
|
119
|
+
abstract NewUUID(): string;
|
|
120
|
+
/**
|
|
121
|
+
* Returns the COALESCE expression wrapper.
|
|
122
|
+
*/
|
|
123
|
+
Coalesce(expr: string, fallback: string): string;
|
|
124
|
+
/**
|
|
125
|
+
* Returns a CAST-to-text expression.
|
|
126
|
+
* SQL Server: CAST(expr AS NVARCHAR(MAX)), PostgreSQL: CAST(expr AS TEXT)
|
|
127
|
+
*/
|
|
128
|
+
abstract CastToText(expr: string): string;
|
|
129
|
+
/**
|
|
130
|
+
* Returns a CAST-to-UUID expression.
|
|
131
|
+
* SQL Server: CAST(expr AS UNIQUEIDENTIFIER), PostgreSQL: CAST(expr AS UUID)
|
|
132
|
+
*/
|
|
133
|
+
abstract CastToUUID(expr: string): string;
|
|
134
|
+
/**
|
|
135
|
+
* Returns the clause used to get inserted values back.
|
|
136
|
+
* SQL Server: OUTPUT INSERTED.col1, INSERTED.col2
|
|
137
|
+
* PostgreSQL: RETURNING col1, col2
|
|
138
|
+
*/
|
|
139
|
+
abstract ReturnInsertedClause(columns?: string[]): string;
|
|
140
|
+
/**
|
|
141
|
+
* Returns the auto-increment PK expression for DDL.
|
|
142
|
+
* SQL Server: IDENTITY(1,1), PostgreSQL: GENERATED ALWAYS AS IDENTITY
|
|
143
|
+
*/
|
|
144
|
+
abstract AutoIncrementPKExpression(): string;
|
|
145
|
+
/**
|
|
146
|
+
* Returns the default expression for a UUID primary key.
|
|
147
|
+
* SQL Server: NEWSEQUENTIALID(), PostgreSQL: gen_random_uuid()
|
|
148
|
+
*/
|
|
149
|
+
abstract UUIDPKDefault(): string;
|
|
150
|
+
/**
|
|
151
|
+
* Returns the expression to get the last inserted identity value.
|
|
152
|
+
* SQL Server: SCOPE_IDENTITY(), PostgreSQL: lastval()
|
|
153
|
+
*/
|
|
154
|
+
abstract ScopeIdentityExpression(): string;
|
|
155
|
+
/**
|
|
156
|
+
* Returns the row count variable/expression for the last statement.
|
|
157
|
+
* SQL Server: @@ROWCOUNT, PostgreSQL: (via GET DIAGNOSTICS or FOUND)
|
|
158
|
+
*/
|
|
159
|
+
abstract RowCountExpression(): string;
|
|
160
|
+
/**
|
|
161
|
+
* Returns the batch separator for the platform.
|
|
162
|
+
* SQL Server: "GO", PostgreSQL: "" (none needed)
|
|
163
|
+
*/
|
|
164
|
+
abstract BatchSeparator(): string;
|
|
165
|
+
/**
|
|
166
|
+
* Returns SQL to check if a database object exists.
|
|
167
|
+
* @param objectType - "TABLE", "VIEW", "FUNCTION", "PROCEDURE", "TRIGGER"
|
|
168
|
+
* @param schema - Schema name
|
|
169
|
+
* @param name - Object name
|
|
170
|
+
*/
|
|
171
|
+
abstract ExistenceCheckSQL(objectType: string, schema: string, name: string): string;
|
|
172
|
+
/**
|
|
173
|
+
* Whether the platform supports CREATE OR REPLACE for a given object type.
|
|
174
|
+
* PostgreSQL supports it for FUNCTION, VIEW. SQL Server does not.
|
|
175
|
+
*/
|
|
176
|
+
abstract CreateOrReplaceSupported(objectType: string): boolean;
|
|
177
|
+
/**
|
|
178
|
+
* Returns a full-text search predicate expression.
|
|
179
|
+
* SQL Server: CONTAINS(column, searchTerm)
|
|
180
|
+
* PostgreSQL: column @@ plainto_tsquery('english', searchTerm)
|
|
181
|
+
*/
|
|
182
|
+
abstract FullTextSearchPredicate(column: string, searchTerm: string): string;
|
|
183
|
+
/**
|
|
184
|
+
* Returns DDL to create a full-text index.
|
|
185
|
+
* SQL Server: FULLTEXT CATALOG + FULLTEXT INDEX
|
|
186
|
+
* PostgreSQL: tsvector column + GIN index
|
|
187
|
+
*/
|
|
188
|
+
abstract FullTextIndexDDL(table: string, columns: string[], catalog?: string): string;
|
|
189
|
+
/**
|
|
190
|
+
* Returns the recursive CTE syntax keyword.
|
|
191
|
+
* SQL Server: "WITH", PostgreSQL: "WITH RECURSIVE"
|
|
192
|
+
*/
|
|
193
|
+
abstract RecursiveCTESyntax(): string;
|
|
194
|
+
/**
|
|
195
|
+
* Returns the data type mapping for this dialect.
|
|
196
|
+
*/
|
|
197
|
+
abstract get TypeMap(): DataTypeMap;
|
|
198
|
+
/**
|
|
199
|
+
* Convenience: maps a SQL Server type to this dialect's equivalent.
|
|
200
|
+
*/
|
|
201
|
+
MapDataType(sqlServerType: string, length?: number, precision?: number, scale?: number): MappedType;
|
|
202
|
+
/**
|
|
203
|
+
* Convenience: maps a SQL Server type to a full type string.
|
|
204
|
+
*/
|
|
205
|
+
MapDataTypeToString(sqlServerType: string, length?: number, precision?: number, scale?: number): string;
|
|
206
|
+
/**
|
|
207
|
+
* Returns a parameter placeholder for the given index.
|
|
208
|
+
* SQL Server: @p0, @p1, ... PostgreSQL: $1, $2, ...
|
|
209
|
+
*/
|
|
210
|
+
abstract ParameterPlaceholder(index: number): string;
|
|
211
|
+
/**
|
|
212
|
+
* Returns the string concatenation operator.
|
|
213
|
+
* SQL Server: "+", PostgreSQL: "||"
|
|
214
|
+
*/
|
|
215
|
+
abstract ConcatOperator(): string;
|
|
216
|
+
/**
|
|
217
|
+
* Returns a STRING_SPLIT or equivalent expression.
|
|
218
|
+
* SQL Server: STRING_SPLIT(value, delimiter)
|
|
219
|
+
* PostgreSQL: string_to_array(value, delimiter) or regexp_split_to_table
|
|
220
|
+
*/
|
|
221
|
+
abstract StringSplitFunction(value: string, delimiter: string): string;
|
|
222
|
+
/**
|
|
223
|
+
* Returns a JSON value extraction expression.
|
|
224
|
+
* SQL Server: JSON_VALUE(column, path)
|
|
225
|
+
* PostgreSQL: column->>'path' or jsonb_extract_path_text
|
|
226
|
+
*/
|
|
227
|
+
abstract JsonExtract(column: string, path: string): string;
|
|
228
|
+
/**
|
|
229
|
+
* Returns the SQL syntax for calling a stored procedure or function.
|
|
230
|
+
* SQL Server: EXEC [schema].[name] @p0, @p1
|
|
231
|
+
* PostgreSQL: SELECT * FROM schema.name($1, $2)
|
|
232
|
+
*/
|
|
233
|
+
abstract ProcedureCallSyntax(schema: string, name: string, params: string[]): string;
|
|
234
|
+
/**
|
|
235
|
+
* Generates trigger DDL for the platform.
|
|
236
|
+
*/
|
|
237
|
+
abstract TriggerDDL(options: TriggerOptions): string;
|
|
238
|
+
/**
|
|
239
|
+
* Generates index DDL for the platform.
|
|
240
|
+
*/
|
|
241
|
+
abstract IndexDDL(options: IndexOptions): string;
|
|
242
|
+
/**
|
|
243
|
+
* Returns a GRANT statement for the platform.
|
|
244
|
+
*/
|
|
245
|
+
abstract GrantPermission(permission: string, objectType: string, schema: string, object: string, role: string): string;
|
|
246
|
+
/**
|
|
247
|
+
* Returns a COMMENT ON statement (PostgreSQL) or sp_addextendedproperty (SQL Server).
|
|
248
|
+
*/
|
|
249
|
+
abstract CommentOnObject(objectType: string, schema: string, name: string, comment: string): string;
|
|
250
|
+
/**
|
|
251
|
+
* Returns platform-specific schema introspection queries.
|
|
252
|
+
*/
|
|
253
|
+
abstract SchemaIntrospectionQueries(): SchemaIntrospectionSQL;
|
|
254
|
+
/**
|
|
255
|
+
* Returns the platform's ISNULL/COALESCE equivalent.
|
|
256
|
+
* SQL Server: ISNULL(expr, fallback), PostgreSQL: COALESCE(expr, fallback)
|
|
257
|
+
* Note: COALESCE works on both, but ISNULL is SQL Server-specific.
|
|
258
|
+
*/
|
|
259
|
+
IsNull(expr: string, fallback: string): string;
|
|
260
|
+
/**
|
|
261
|
+
* Returns an IIF/CASE equivalent expression.
|
|
262
|
+
* SQL Server: IIF(condition, trueVal, falseVal)
|
|
263
|
+
* PostgreSQL: CASE WHEN condition THEN trueVal ELSE falseVal END
|
|
264
|
+
*/
|
|
265
|
+
abstract IIF(condition: string, trueVal: string, falseVal: string): string;
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=sqlDialect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlDialect.d.ts","sourceRoot":"","sources":["../src/sqlDialect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE3D;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,YAAY,CAAC;AAE1D;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAC9B,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACnC,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,eAAe,EAAE,MAAM,CAAC;IACxB,mDAAmD;IACnD,eAAe,EAAE,MAAM,CAAC;IACxB,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,YAAY,CAAC;IAC1C,mCAAmC;IACnC,MAAM,EAAE,CAAC,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC;IAC3C,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,OAAO,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,uBAAuB;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,qCAAqC;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0FAA0F;IAC1F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,8BAAsB,UAAU;IAC5B;;OAEG;IACH,QAAQ,KAAK,WAAW,IAAI,gBAAgB,CAAC;IAI7C;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAE9C;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAI5D;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,iBAAiB;IAIvE;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAE/C;;;OAGG;IACH,QAAQ,CAAC,mBAAmB,IAAI,MAAM;IAEtC;;;OAGG;IACH,QAAQ,CAAC,OAAO,IAAI,MAAM;IAE1B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIhD;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAEzC;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIzC;;;;OAIG;IACH,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM;IAEzD;;;OAGG;IACH,QAAQ,CAAC,yBAAyB,IAAI,MAAM;IAE5C;;;OAGG;IACH,QAAQ,CAAC,aAAa,IAAI,MAAM;IAEhC;;;OAGG;IACH,QAAQ,CAAC,uBAAuB,IAAI,MAAM;IAE1C;;;OAGG;IACH,QAAQ,CAAC,kBAAkB,IAAI,MAAM;IAIrC;;;OAGG;IACH,QAAQ,CAAC,cAAc,IAAI,MAAM;IAEjC;;;;;OAKG;IACH,QAAQ,CAAC,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAEpF;;;OAGG;IACH,QAAQ,CAAC,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAI9D;;;;OAIG;IACH,QAAQ,CAAC,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAE5E;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAIrF;;;OAGG;IACH,QAAQ,CAAC,kBAAkB,IAAI,MAAM;IAIrC;;OAEG;IACH,QAAQ,KAAK,OAAO,IAAI,WAAW,CAAC;IAEpC;;OAEG;IACH,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU;IAInG;;OAEG;IACH,mBAAmB,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAMvG;;;OAGG;IACH,QAAQ,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAEpD;;;OAGG;IACH,QAAQ,CAAC,cAAc,IAAI,MAAM;IAIjC;;;;OAIG;IACH,QAAQ,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAEtE;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAI1D;;;;OAIG;IACH,QAAQ,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;IAIpF;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM;IAEpD;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM;IAIhD;;OAEG;IACH,QAAQ,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAEtH;;OAEG;IACH,QAAQ,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAInG;;OAEG;IACH,QAAQ,CAAC,0BAA0B,IAAI,sBAAsB;IAI7D;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAI9C;;;;OAIG;IACH,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;CAC7E"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstract base class for SQL dialect implementations.
|
|
3
|
+
*
|
|
4
|
+
* Encapsulates ALL database-specific SQL syntax patterns into a single,
|
|
5
|
+
* testable abstraction. This is a pure string/logic layer with zero
|
|
6
|
+
* database driver dependencies.
|
|
7
|
+
*/
|
|
8
|
+
export class SQLDialect {
|
|
9
|
+
/**
|
|
10
|
+
* Returns the COALESCE expression wrapper.
|
|
11
|
+
*/
|
|
12
|
+
Coalesce(expr, fallback) {
|
|
13
|
+
return `COALESCE(${expr}, ${fallback})`;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Convenience: maps a SQL Server type to this dialect's equivalent.
|
|
17
|
+
*/
|
|
18
|
+
MapDataType(sqlServerType, length, precision, scale) {
|
|
19
|
+
return this.TypeMap.MapType(sqlServerType, length, precision, scale);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Convenience: maps a SQL Server type to a full type string.
|
|
23
|
+
*/
|
|
24
|
+
MapDataTypeToString(sqlServerType, length, precision, scale) {
|
|
25
|
+
return this.TypeMap.MapTypeToString(sqlServerType, length, precision, scale);
|
|
26
|
+
}
|
|
27
|
+
// ─── Null Handling ───────────────────────────────────────────────
|
|
28
|
+
/**
|
|
29
|
+
* Returns the platform's ISNULL/COALESCE equivalent.
|
|
30
|
+
* SQL Server: ISNULL(expr, fallback), PostgreSQL: COALESCE(expr, fallback)
|
|
31
|
+
* Note: COALESCE works on both, but ISNULL is SQL Server-specific.
|
|
32
|
+
*/
|
|
33
|
+
IsNull(expr, fallback) {
|
|
34
|
+
return this.Coalesce(expr, fallback);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=sqlDialect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlDialect.js","sourceRoot":"","sources":["../src/sqlDialect.ts"],"names":[],"mappings":"AAkFA;;;;;;GAMG;AACH,MAAM,OAAgB,UAAU;IAiD5B;;OAEG;IACH,QAAQ,CAAC,IAAY,EAAE,QAAgB;QACnC,OAAO,YAAY,IAAI,KAAK,QAAQ,GAAG,CAAC;IAC5C,CAAC;IAoGD;;OAEG;IACH,WAAW,CAAC,aAAqB,EAAE,MAAe,EAAE,SAAkB,EAAE,KAAc;QAClF,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACzE,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,aAAqB,EAAE,MAAe,EAAE,SAAkB,EAAE,KAAc;QAC1F,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACjF,CAAC;IAwED,oEAAoE;IAEpE;;;;OAIG;IACH,MAAM,CAAC,IAAY,EAAE,QAAgB;QACjC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC;CAQJ"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { DataTypeMap } from './dataTypeMap.js';
|
|
2
|
+
import { SQLDialect, DatabasePlatform, LimitClauseResult, SchemaIntrospectionSQL, TriggerOptions, IndexOptions } from './sqlDialect.js';
|
|
3
|
+
/**
|
|
4
|
+
* SQL Server dialect implementation.
|
|
5
|
+
* Uses [bracket] quoting, TOP for pagination, BIT for booleans, T-SQL functions.
|
|
6
|
+
*/
|
|
7
|
+
export declare class SQLServerDialect extends SQLDialect {
|
|
8
|
+
get PlatformKey(): DatabasePlatform;
|
|
9
|
+
QuoteIdentifier(name: string): string;
|
|
10
|
+
QuoteSchema(schema: string, object: string): string;
|
|
11
|
+
LimitClause(limit: number, offset?: number): LimitClauseResult;
|
|
12
|
+
BooleanLiteral(value: boolean): string;
|
|
13
|
+
CurrentTimestampUTC(): string;
|
|
14
|
+
NewUUID(): string;
|
|
15
|
+
CastToText(expr: string): string;
|
|
16
|
+
CastToUUID(expr: string): string;
|
|
17
|
+
ReturnInsertedClause(columns?: string[]): string;
|
|
18
|
+
AutoIncrementPKExpression(): string;
|
|
19
|
+
UUIDPKDefault(): string;
|
|
20
|
+
ScopeIdentityExpression(): string;
|
|
21
|
+
RowCountExpression(): string;
|
|
22
|
+
BatchSeparator(): string;
|
|
23
|
+
ExistenceCheckSQL(objectType: string, schema: string, name: string): string;
|
|
24
|
+
CreateOrReplaceSupported(_objectType: string): boolean;
|
|
25
|
+
FullTextSearchPredicate(column: string, searchTerm: string): string;
|
|
26
|
+
FullTextIndexDDL(table: string, columns: string[], catalog?: string): string;
|
|
27
|
+
RecursiveCTESyntax(): string;
|
|
28
|
+
get TypeMap(): DataTypeMap;
|
|
29
|
+
ParameterPlaceholder(index: number): string;
|
|
30
|
+
ConcatOperator(): string;
|
|
31
|
+
StringSplitFunction(value: string, delimiter: string): string;
|
|
32
|
+
JsonExtract(column: string, path: string): string;
|
|
33
|
+
ProcedureCallSyntax(schema: string, name: string, params: string[]): string;
|
|
34
|
+
TriggerDDL(options: TriggerOptions): string;
|
|
35
|
+
IndexDDL(options: IndexOptions): string;
|
|
36
|
+
GrantPermission(permission: string, _objectType: string, schema: string, object: string, role: string): string;
|
|
37
|
+
CommentOnObject(objectType: string, schema: string, name: string, comment: string): string;
|
|
38
|
+
SchemaIntrospectionQueries(): SchemaIntrospectionSQL;
|
|
39
|
+
IIF(condition: string, trueVal: string, falseVal: string): string;
|
|
40
|
+
private objectTypeToLevel1Type;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=sqlServerDialect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlServerDialect.d.ts","sourceRoot":"","sources":["../src/sqlServerDialect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAc,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EACH,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,YAAY,EACf,MAAM,iBAAiB,CAAC;AA6GzB;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,UAAU;IAC5C,IAAI,WAAW,IAAI,gBAAgB,CAElC;IAID,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIrC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAMnD,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,iBAAiB;IAS9D,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAItC,mBAAmB,IAAI,MAAM;IAI7B,OAAO,IAAI,MAAM;IAIjB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIhC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAMhC,oBAAoB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM;IAQhD,yBAAyB,IAAI,MAAM;IAInC,aAAa,IAAI,MAAM;IAIvB,uBAAuB,IAAI,MAAM;IAIjC,kBAAkB,IAAI,MAAM;IAM5B,cAAc,IAAI,MAAM;IAIxB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAkB3E,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAMtD,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAInE,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAc5E,kBAAkB,IAAI,MAAM;IAM5B,IAAI,OAAO,IAAI,WAAW,CAEzB;IAID,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI3C,cAAc,IAAI,MAAM;IAMxB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAI7D,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAMjD,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;IAO3E,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM;IAc3C,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM;IAavC,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAI9G,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAc1F,0BAA0B,IAAI,sBAAsB;IAkDpD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAMjE,OAAO,CAAC,sBAAsB;CASjC"}
|