@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,392 @@
|
|
|
1
|
+
import { SQLDialect, } from './sqlDialect.js';
|
|
2
|
+
/**
|
|
3
|
+
* PostgreSQL data type mapping.
|
|
4
|
+
* Maps SQL Server types to their PostgreSQL equivalents.
|
|
5
|
+
*/
|
|
6
|
+
class PostgreSQLDataTypeMap {
|
|
7
|
+
MapType(sourceType, sourceLength, sourcePrecision, sourceScale) {
|
|
8
|
+
const normalized = sourceType.toUpperCase().trim();
|
|
9
|
+
switch (normalized) {
|
|
10
|
+
case 'UNIQUEIDENTIFIER':
|
|
11
|
+
return { typeName: 'UUID', supportsLength: false, supportsPrecisionScale: false };
|
|
12
|
+
case 'NVARCHAR':
|
|
13
|
+
return this.mapNVarchar(sourceLength);
|
|
14
|
+
case 'VARCHAR':
|
|
15
|
+
return this.mapVarchar(sourceLength);
|
|
16
|
+
case 'NCHAR':
|
|
17
|
+
case 'CHAR':
|
|
18
|
+
return { typeName: 'CHAR', supportsLength: true, supportsPrecisionScale: false, defaultLength: sourceLength ?? 1 };
|
|
19
|
+
case 'INT':
|
|
20
|
+
case 'INTEGER':
|
|
21
|
+
return { typeName: 'INTEGER', supportsLength: false, supportsPrecisionScale: false };
|
|
22
|
+
case 'BIGINT':
|
|
23
|
+
return { typeName: 'BIGINT', supportsLength: false, supportsPrecisionScale: false };
|
|
24
|
+
case 'SMALLINT':
|
|
25
|
+
return { typeName: 'SMALLINT', supportsLength: false, supportsPrecisionScale: false };
|
|
26
|
+
case 'TINYINT':
|
|
27
|
+
return { typeName: 'SMALLINT', supportsLength: false, supportsPrecisionScale: false };
|
|
28
|
+
case 'BIT':
|
|
29
|
+
return { typeName: 'BOOLEAN', supportsLength: false, supportsPrecisionScale: false };
|
|
30
|
+
case 'DECIMAL':
|
|
31
|
+
case 'NUMERIC':
|
|
32
|
+
return { typeName: 'NUMERIC', supportsLength: false, supportsPrecisionScale: true };
|
|
33
|
+
case 'FLOAT':
|
|
34
|
+
return this.mapFloat(sourcePrecision);
|
|
35
|
+
case 'REAL':
|
|
36
|
+
return { typeName: 'REAL', supportsLength: false, supportsPrecisionScale: false };
|
|
37
|
+
case 'MONEY':
|
|
38
|
+
return { typeName: 'NUMERIC(19,4)', supportsLength: false, supportsPrecisionScale: false };
|
|
39
|
+
case 'SMALLMONEY':
|
|
40
|
+
return { typeName: 'NUMERIC(10,4)', supportsLength: false, supportsPrecisionScale: false };
|
|
41
|
+
case 'DATE':
|
|
42
|
+
return { typeName: 'DATE', supportsLength: false, supportsPrecisionScale: false };
|
|
43
|
+
case 'DATETIME':
|
|
44
|
+
case 'DATETIME2':
|
|
45
|
+
return { typeName: 'TIMESTAMP', supportsLength: false, supportsPrecisionScale: false };
|
|
46
|
+
case 'DATETIMEOFFSET':
|
|
47
|
+
return { typeName: 'TIMESTAMPTZ', supportsLength: false, supportsPrecisionScale: false };
|
|
48
|
+
case 'SMALLDATETIME':
|
|
49
|
+
return { typeName: 'TIMESTAMP(0)', supportsLength: false, supportsPrecisionScale: false };
|
|
50
|
+
case 'TIME':
|
|
51
|
+
return { typeName: 'TIME', supportsLength: false, supportsPrecisionScale: false };
|
|
52
|
+
case 'TEXT':
|
|
53
|
+
case 'NTEXT':
|
|
54
|
+
return { typeName: 'TEXT', supportsLength: false, supportsPrecisionScale: false };
|
|
55
|
+
case 'IMAGE':
|
|
56
|
+
return { typeName: 'BYTEA', supportsLength: false, supportsPrecisionScale: false };
|
|
57
|
+
case 'VARBINARY':
|
|
58
|
+
return { typeName: 'BYTEA', supportsLength: false, supportsPrecisionScale: false };
|
|
59
|
+
case 'BINARY':
|
|
60
|
+
return { typeName: 'BYTEA', supportsLength: false, supportsPrecisionScale: false };
|
|
61
|
+
case 'XML':
|
|
62
|
+
return { typeName: 'XML', supportsLength: false, supportsPrecisionScale: false };
|
|
63
|
+
// PostgreSQL native types (pass through)
|
|
64
|
+
case 'UUID':
|
|
65
|
+
return { typeName: 'UUID', supportsLength: false, supportsPrecisionScale: false };
|
|
66
|
+
case 'BOOLEAN':
|
|
67
|
+
return { typeName: 'BOOLEAN', supportsLength: false, supportsPrecisionScale: false };
|
|
68
|
+
case 'TIMESTAMPTZ':
|
|
69
|
+
return { typeName: 'TIMESTAMPTZ', supportsLength: false, supportsPrecisionScale: false };
|
|
70
|
+
case 'TIMESTAMP':
|
|
71
|
+
return { typeName: 'TIMESTAMP', supportsLength: false, supportsPrecisionScale: false };
|
|
72
|
+
case 'BYTEA':
|
|
73
|
+
return { typeName: 'BYTEA', supportsLength: false, supportsPrecisionScale: false };
|
|
74
|
+
case 'JSONB':
|
|
75
|
+
return { typeName: 'JSONB', supportsLength: false, supportsPrecisionScale: false };
|
|
76
|
+
case 'JSON':
|
|
77
|
+
return { typeName: 'JSON', supportsLength: false, supportsPrecisionScale: false };
|
|
78
|
+
case 'SERIAL':
|
|
79
|
+
return { typeName: 'SERIAL', supportsLength: false, supportsPrecisionScale: false };
|
|
80
|
+
case 'BIGSERIAL':
|
|
81
|
+
return { typeName: 'BIGSERIAL', supportsLength: false, supportsPrecisionScale: false };
|
|
82
|
+
case 'DOUBLE PRECISION':
|
|
83
|
+
return { typeName: 'DOUBLE PRECISION', supportsLength: false, supportsPrecisionScale: false };
|
|
84
|
+
default:
|
|
85
|
+
return { typeName: normalized, supportsLength: false, supportsPrecisionScale: false };
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
MapTypeToString(sourceType, sourceLength, sourcePrecision, sourceScale) {
|
|
89
|
+
const mapped = this.MapType(sourceType, sourceLength, sourcePrecision, sourceScale);
|
|
90
|
+
return formatTypeString(mapped, sourceLength, sourcePrecision, sourceScale);
|
|
91
|
+
}
|
|
92
|
+
mapNVarchar(length) {
|
|
93
|
+
if (length === -1 || length === undefined) {
|
|
94
|
+
return { typeName: 'TEXT', supportsLength: false, supportsPrecisionScale: false };
|
|
95
|
+
}
|
|
96
|
+
return { typeName: 'VARCHAR', supportsLength: true, supportsPrecisionScale: false, defaultLength: length };
|
|
97
|
+
}
|
|
98
|
+
mapVarchar(length) {
|
|
99
|
+
if (length === -1 || length === undefined) {
|
|
100
|
+
return { typeName: 'TEXT', supportsLength: false, supportsPrecisionScale: false };
|
|
101
|
+
}
|
|
102
|
+
return { typeName: 'VARCHAR', supportsLength: true, supportsPrecisionScale: false, defaultLength: length };
|
|
103
|
+
}
|
|
104
|
+
mapFloat(precision) {
|
|
105
|
+
// SQL Server FLOAT(1-24) = REAL, FLOAT(25-53) = DOUBLE PRECISION
|
|
106
|
+
if (precision != null && precision <= 24) {
|
|
107
|
+
return { typeName: 'REAL', supportsLength: false, supportsPrecisionScale: false };
|
|
108
|
+
}
|
|
109
|
+
return { typeName: 'DOUBLE PRECISION', supportsLength: false, supportsPrecisionScale: false };
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Helper to format a MappedType into a full SQL type string.
|
|
114
|
+
*/
|
|
115
|
+
function formatTypeString(mapped, length, precision, scale) {
|
|
116
|
+
if (mapped.supportsPrecisionScale && precision != null) {
|
|
117
|
+
return scale != null
|
|
118
|
+
? `${mapped.typeName}(${precision},${scale})`
|
|
119
|
+
: `${mapped.typeName}(${precision})`;
|
|
120
|
+
}
|
|
121
|
+
if (mapped.supportsLength) {
|
|
122
|
+
const len = length ?? mapped.defaultLength;
|
|
123
|
+
if (len != null) {
|
|
124
|
+
return len === -1 ? 'TEXT' : `${mapped.typeName}(${len})`;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return mapped.typeName;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* PostgreSQL dialect implementation.
|
|
131
|
+
* Uses "double-quote" identifiers, LIMIT/OFFSET pagination, native BOOLEAN, PL/pgSQL functions.
|
|
132
|
+
*/
|
|
133
|
+
export class PostgreSQLDialect extends SQLDialect {
|
|
134
|
+
get PlatformKey() {
|
|
135
|
+
return 'postgresql';
|
|
136
|
+
}
|
|
137
|
+
// ─── Identifier Quoting ──────────────────────────────────────────
|
|
138
|
+
QuoteIdentifier(name) {
|
|
139
|
+
return `"${name}"`;
|
|
140
|
+
}
|
|
141
|
+
QuoteSchema(schema, object) {
|
|
142
|
+
return `${schema}."${object}"`;
|
|
143
|
+
}
|
|
144
|
+
// ─── Pagination ──────────────────────────────────────────────────
|
|
145
|
+
LimitClause(limit, offset) {
|
|
146
|
+
const parts = [`LIMIT ${limit}`];
|
|
147
|
+
if (offset != null) {
|
|
148
|
+
parts.push(`OFFSET ${offset}`);
|
|
149
|
+
}
|
|
150
|
+
return { prefix: '', suffix: parts.join(' ') };
|
|
151
|
+
}
|
|
152
|
+
// ─── Literals & Expressions ──────────────────────────────────────
|
|
153
|
+
BooleanLiteral(value) {
|
|
154
|
+
return value ? 'true' : 'false';
|
|
155
|
+
}
|
|
156
|
+
CurrentTimestampUTC() {
|
|
157
|
+
return "(NOW() AT TIME ZONE 'UTC')";
|
|
158
|
+
}
|
|
159
|
+
NewUUID() {
|
|
160
|
+
return 'gen_random_uuid()';
|
|
161
|
+
}
|
|
162
|
+
CastToText(expr) {
|
|
163
|
+
return `CAST(${expr} AS TEXT)`;
|
|
164
|
+
}
|
|
165
|
+
CastToUUID(expr) {
|
|
166
|
+
return `CAST(${expr} AS UUID)`;
|
|
167
|
+
}
|
|
168
|
+
// ─── INSERT/UPDATE Return Patterns ───────────────────────────────
|
|
169
|
+
ReturnInsertedClause(columns) {
|
|
170
|
+
if (columns && columns.length > 0) {
|
|
171
|
+
const cols = columns.map(c => `"${c}"`).join(', ');
|
|
172
|
+
return `RETURNING ${cols}`;
|
|
173
|
+
}
|
|
174
|
+
return 'RETURNING *';
|
|
175
|
+
}
|
|
176
|
+
AutoIncrementPKExpression() {
|
|
177
|
+
return 'GENERATED ALWAYS AS IDENTITY';
|
|
178
|
+
}
|
|
179
|
+
UUIDPKDefault() {
|
|
180
|
+
return 'gen_random_uuid()';
|
|
181
|
+
}
|
|
182
|
+
ScopeIdentityExpression() {
|
|
183
|
+
return 'lastval()';
|
|
184
|
+
}
|
|
185
|
+
RowCountExpression() {
|
|
186
|
+
// In PL/pgSQL, use GET DIAGNOSTICS row_count = ROW_COUNT
|
|
187
|
+
return 'ROW_COUNT';
|
|
188
|
+
}
|
|
189
|
+
// ─── Batch & DDL Control ─────────────────────────────────────────
|
|
190
|
+
BatchSeparator() {
|
|
191
|
+
return ''; // PostgreSQL does not need batch separators
|
|
192
|
+
}
|
|
193
|
+
ExistenceCheckSQL(objectType, schema, name) {
|
|
194
|
+
const normalizedType = objectType.toUpperCase();
|
|
195
|
+
switch (normalizedType) {
|
|
196
|
+
case 'TABLE':
|
|
197
|
+
return `SELECT EXISTS (SELECT 1 FROM pg_catalog.pg_tables WHERE schemaname = '${schema}' AND tablename = '${name}')`;
|
|
198
|
+
case 'VIEW':
|
|
199
|
+
return `SELECT EXISTS (SELECT 1 FROM pg_catalog.pg_views WHERE schemaname = '${schema}' AND viewname = '${name}')`;
|
|
200
|
+
case 'FUNCTION':
|
|
201
|
+
return `SELECT EXISTS (SELECT 1 FROM pg_catalog.pg_proc p JOIN pg_catalog.pg_namespace n ON p.pronamespace = n.oid WHERE n.nspname = '${schema}' AND p.proname = '${name}')`;
|
|
202
|
+
case 'PROCEDURE':
|
|
203
|
+
return `SELECT EXISTS (SELECT 1 FROM pg_catalog.pg_proc p JOIN pg_catalog.pg_namespace n ON p.pronamespace = n.oid WHERE n.nspname = '${schema}' AND p.proname = '${name}' AND p.prokind = 'p')`;
|
|
204
|
+
case 'TRIGGER':
|
|
205
|
+
return `SELECT EXISTS (SELECT 1 FROM pg_catalog.pg_trigger WHERE tgname = '${name}')`;
|
|
206
|
+
default:
|
|
207
|
+
return `SELECT EXISTS (SELECT 1 FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON c.relnamespace = n.oid WHERE n.nspname = '${schema}' AND c.relname = '${name}')`;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
CreateOrReplaceSupported(objectType) {
|
|
211
|
+
const normalized = objectType.toUpperCase();
|
|
212
|
+
return normalized === 'FUNCTION' || normalized === 'VIEW' || normalized === 'PROCEDURE';
|
|
213
|
+
}
|
|
214
|
+
// ─── Full-Text Search ────────────────────────────────────────────
|
|
215
|
+
FullTextSearchPredicate(column, searchTerm) {
|
|
216
|
+
return `${column} @@ plainto_tsquery('english', ${searchTerm})`;
|
|
217
|
+
}
|
|
218
|
+
FullTextIndexDDL(table, columns, _catalog) {
|
|
219
|
+
const colList = columns.map(c => `"${c}"`).join(', ');
|
|
220
|
+
const cleanTable = table.replace(/"/g, '');
|
|
221
|
+
const triggerCols = columns.map(c => `"${c}"`).join(', ');
|
|
222
|
+
const lines = [];
|
|
223
|
+
// Add tsvector column
|
|
224
|
+
lines.push(`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS __mj_fts_vector TSVECTOR;`);
|
|
225
|
+
lines.push('');
|
|
226
|
+
// Create GIN index on the tsvector column
|
|
227
|
+
lines.push(`CREATE INDEX IF NOT EXISTS idx_fts_${cleanTable.replace(/\./g, '_')} ON ${table} USING GIN(__mj_fts_vector);`);
|
|
228
|
+
lines.push('');
|
|
229
|
+
// Create update trigger
|
|
230
|
+
lines.push(`CREATE OR REPLACE FUNCTION ${this.extractSchema(table)}.fn_trg_fts_${this.extractName(table)}()`);
|
|
231
|
+
lines.push('RETURNS TRIGGER AS $$');
|
|
232
|
+
lines.push('BEGIN');
|
|
233
|
+
lines.push(` NEW.__mj_fts_vector := to_tsvector('english', ${columns.map(c => `COALESCE(NEW."${c}", '')`).join(" || ' ' || ")});`);
|
|
234
|
+
lines.push(' RETURN NEW;');
|
|
235
|
+
lines.push('END;');
|
|
236
|
+
lines.push('$$ LANGUAGE plpgsql;');
|
|
237
|
+
lines.push('');
|
|
238
|
+
lines.push(`DROP TRIGGER IF EXISTS trg_fts_${this.extractName(table)} ON ${table};`);
|
|
239
|
+
lines.push(`CREATE TRIGGER trg_fts_${this.extractName(table)}`);
|
|
240
|
+
lines.push(` BEFORE INSERT OR UPDATE ON ${table}`);
|
|
241
|
+
lines.push(` FOR EACH ROW EXECUTE FUNCTION ${this.extractSchema(table)}.fn_trg_fts_${this.extractName(table)}();`);
|
|
242
|
+
return lines.join('\n');
|
|
243
|
+
}
|
|
244
|
+
// ─── CTE / Recursion ─────────────────────────────────────────────
|
|
245
|
+
RecursiveCTESyntax() {
|
|
246
|
+
return 'WITH RECURSIVE';
|
|
247
|
+
}
|
|
248
|
+
// ─── Data Types ──────────────────────────────────────────────────
|
|
249
|
+
get TypeMap() {
|
|
250
|
+
return new PostgreSQLDataTypeMap();
|
|
251
|
+
}
|
|
252
|
+
// ─── Parameters ──────────────────────────────────────────────────
|
|
253
|
+
ParameterPlaceholder(index) {
|
|
254
|
+
return `$${index + 1}`; // PostgreSQL uses 1-based indexing
|
|
255
|
+
}
|
|
256
|
+
ConcatOperator() {
|
|
257
|
+
return '||';
|
|
258
|
+
}
|
|
259
|
+
// ─── String Functions ────────────────────────────────────────────
|
|
260
|
+
StringSplitFunction(value, delimiter) {
|
|
261
|
+
return `unnest(string_to_array(${value}, ${delimiter}))`;
|
|
262
|
+
}
|
|
263
|
+
JsonExtract(column, path) {
|
|
264
|
+
// PostgreSQL JSONB operator for text extraction
|
|
265
|
+
return `${column}->>'${path}'`;
|
|
266
|
+
}
|
|
267
|
+
// ─── Procedure / Function Calls ──────────────────────────────────
|
|
268
|
+
ProcedureCallSyntax(schema, name, params) {
|
|
269
|
+
const paramList = params.join(', ');
|
|
270
|
+
return `SELECT * FROM ${schema}."${name}"(${paramList})`;
|
|
271
|
+
}
|
|
272
|
+
// ─── DDL Generation ──────────────────────────────────────────────
|
|
273
|
+
TriggerDDL(options) {
|
|
274
|
+
const events = options.events.join(' OR ');
|
|
275
|
+
const forEach = options.forEach ?? 'ROW';
|
|
276
|
+
const funcName = options.functionName ?? `fn_${options.triggerName}`;
|
|
277
|
+
const lines = [];
|
|
278
|
+
// PostgreSQL triggers require a companion function
|
|
279
|
+
lines.push(`CREATE OR REPLACE FUNCTION ${options.schema}."${funcName}"()`);
|
|
280
|
+
lines.push('RETURNS TRIGGER AS $$');
|
|
281
|
+
lines.push('BEGIN');
|
|
282
|
+
lines.push(` ${options.body}`);
|
|
283
|
+
lines.push('END;');
|
|
284
|
+
lines.push('$$ LANGUAGE plpgsql;');
|
|
285
|
+
lines.push('');
|
|
286
|
+
lines.push(`DROP TRIGGER IF EXISTS "${options.triggerName}" ON ${options.schema}."${options.tableName}";`);
|
|
287
|
+
lines.push(`CREATE TRIGGER "${options.triggerName}"`);
|
|
288
|
+
lines.push(` ${options.timing} ${events} ON ${options.schema}."${options.tableName}"`);
|
|
289
|
+
lines.push(` FOR EACH ${forEach}`);
|
|
290
|
+
lines.push(` EXECUTE FUNCTION ${options.schema}."${funcName}"();`);
|
|
291
|
+
return lines.join('\n');
|
|
292
|
+
}
|
|
293
|
+
IndexDDL(options) {
|
|
294
|
+
const unique = options.unique ? 'UNIQUE ' : '';
|
|
295
|
+
const method = options.method ? ` USING ${options.method}` : '';
|
|
296
|
+
const cols = options.columns.map(c => `"${c}"`).join(', ');
|
|
297
|
+
let ddl = `CREATE ${unique}INDEX IF NOT EXISTS "${options.indexName}" ON ${options.schema}."${options.tableName}"${method}(${cols})`;
|
|
298
|
+
if (options.where) {
|
|
299
|
+
ddl += ` WHERE ${options.where}`;
|
|
300
|
+
}
|
|
301
|
+
return ddl;
|
|
302
|
+
}
|
|
303
|
+
// ─── Permissions ─────────────────────────────────────────────────
|
|
304
|
+
GrantPermission(permission, _objectType, schema, object, role) {
|
|
305
|
+
return `GRANT ${permission} ON ${schema}."${object}" TO "${role}"`;
|
|
306
|
+
}
|
|
307
|
+
CommentOnObject(objectType, schema, name, comment) {
|
|
308
|
+
const escapedComment = comment.replace(/'/g, "''");
|
|
309
|
+
const normalizedType = objectType.toUpperCase();
|
|
310
|
+
return `COMMENT ON ${normalizedType} ${schema}."${name}" IS '${escapedComment}'`;
|
|
311
|
+
}
|
|
312
|
+
// ─── Schema Introspection ────────────────────────────────────────
|
|
313
|
+
SchemaIntrospectionQueries() {
|
|
314
|
+
return {
|
|
315
|
+
listTables: `
|
|
316
|
+
SELECT schemaname AS schema_name, tablename AS table_name
|
|
317
|
+
FROM pg_catalog.pg_tables
|
|
318
|
+
WHERE schemaname = $1
|
|
319
|
+
ORDER BY tablename`,
|
|
320
|
+
listColumns: `
|
|
321
|
+
SELECT c.column_name, c.data_type, c.character_maximum_length AS max_length,
|
|
322
|
+
c.numeric_precision AS precision, c.numeric_scale AS scale,
|
|
323
|
+
c.is_nullable, c.column_default AS default_value,
|
|
324
|
+
CASE WHEN c.column_default LIKE '%nextval%' THEN true ELSE false END AS is_identity
|
|
325
|
+
FROM information_schema.columns c
|
|
326
|
+
WHERE c.table_schema = $1 AND c.table_name = $2
|
|
327
|
+
ORDER BY c.ordinal_position`,
|
|
328
|
+
listConstraints: `
|
|
329
|
+
SELECT tc.constraint_name, tc.constraint_type, kcu.column_name
|
|
330
|
+
FROM information_schema.table_constraints tc
|
|
331
|
+
JOIN information_schema.key_column_usage kcu
|
|
332
|
+
ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema
|
|
333
|
+
WHERE tc.table_schema = $1 AND tc.table_name = $2
|
|
334
|
+
ORDER BY tc.constraint_type, kcu.ordinal_position`,
|
|
335
|
+
listForeignKeys: `
|
|
336
|
+
SELECT
|
|
337
|
+
tc.constraint_name AS fk_name,
|
|
338
|
+
tc.table_schema AS source_schema,
|
|
339
|
+
tc.table_name AS source_table,
|
|
340
|
+
kcu.column_name AS source_column,
|
|
341
|
+
ccu.table_schema AS target_schema,
|
|
342
|
+
ccu.table_name AS target_table,
|
|
343
|
+
ccu.column_name AS target_column
|
|
344
|
+
FROM information_schema.table_constraints tc
|
|
345
|
+
JOIN information_schema.key_column_usage kcu
|
|
346
|
+
ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema
|
|
347
|
+
JOIN information_schema.constraint_column_usage ccu
|
|
348
|
+
ON tc.constraint_name = ccu.constraint_name AND tc.table_schema = ccu.table_schema
|
|
349
|
+
WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_schema = $1
|
|
350
|
+
ORDER BY tc.constraint_name`,
|
|
351
|
+
listIndexes: `
|
|
352
|
+
SELECT
|
|
353
|
+
i.relname AS index_name,
|
|
354
|
+
ix.indisunique AS is_unique,
|
|
355
|
+
am.amname AS type_desc,
|
|
356
|
+
a.attname AS column_name,
|
|
357
|
+
false AS is_included_column
|
|
358
|
+
FROM pg_catalog.pg_index ix
|
|
359
|
+
JOIN pg_catalog.pg_class t ON t.oid = ix.indrelid
|
|
360
|
+
JOIN pg_catalog.pg_class i ON i.oid = ix.indexrelid
|
|
361
|
+
JOIN pg_catalog.pg_namespace n ON n.oid = t.relnamespace
|
|
362
|
+
JOIN pg_catalog.pg_am am ON am.oid = i.relam
|
|
363
|
+
JOIN pg_catalog.pg_attribute a ON a.attrelid = t.oid AND a.attnum = ANY(ix.indkey)
|
|
364
|
+
WHERE n.nspname = $1 AND t.relname = $2
|
|
365
|
+
ORDER BY i.relname`,
|
|
366
|
+
objectExists: `
|
|
367
|
+
SELECT EXISTS (
|
|
368
|
+
SELECT 1 FROM pg_catalog.pg_class c
|
|
369
|
+
JOIN pg_catalog.pg_namespace n ON c.relnamespace = n.oid
|
|
370
|
+
WHERE n.nspname = $1 AND c.relname = $2
|
|
371
|
+
) AS exists`,
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
// ─── IIF ─────────────────────────────────────────────────────────
|
|
375
|
+
IIF(condition, trueVal, falseVal) {
|
|
376
|
+
return `CASE WHEN ${condition} THEN ${trueVal} ELSE ${falseVal} END`;
|
|
377
|
+
}
|
|
378
|
+
// ─── Private Helpers ─────────────────────────────────────────────
|
|
379
|
+
extractSchema(qualifiedName) {
|
|
380
|
+
const dotIndex = qualifiedName.indexOf('.');
|
|
381
|
+
if (dotIndex === -1)
|
|
382
|
+
return 'public';
|
|
383
|
+
return qualifiedName.substring(0, dotIndex).replace(/"/g, '');
|
|
384
|
+
}
|
|
385
|
+
extractName(qualifiedName) {
|
|
386
|
+
const dotIndex = qualifiedName.indexOf('.');
|
|
387
|
+
if (dotIndex === -1)
|
|
388
|
+
return qualifiedName.replace(/"/g, '');
|
|
389
|
+
return qualifiedName.substring(dotIndex + 1).replace(/"/g, '');
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
//# sourceMappingURL=postgresqlDialect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgresqlDialect.js","sourceRoot":"","sources":["../src/postgresqlDialect.ts"],"names":[],"mappings":"AACA,OAAO,EACH,UAAU,GAMb,MAAM,iBAAiB,CAAC;AAEzB;;;GAGG;AACH,MAAM,qBAAqB;IACvB,OAAO,CAAC,UAAkB,EAAE,YAAqB,EAAE,eAAwB,EAAE,WAAoB;QAC7F,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAEnD,QAAQ,UAAU,EAAE,CAAC;YACjB,KAAK,kBAAkB;gBACnB,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YACtF,KAAK,UAAU;gBACX,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YAC1C,KAAK,SAAS;gBACV,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YACzC,KAAK,OAAO,CAAC;YACb,KAAK,MAAM;gBACP,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,aAAa,EAAE,YAAY,IAAI,CAAC,EAAE,CAAC;YACvH,KAAK,KAAK,CAAC;YACX,KAAK,SAAS;gBACV,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YACzF,KAAK,QAAQ;gBACT,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YACxF,KAAK,UAAU;gBACX,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YAC1F,KAAK,SAAS;gBACV,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YAC1F,KAAK,KAAK;gBACN,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YACzF,KAAK,SAAS,CAAC;YACf,KAAK,SAAS;gBACV,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC;YACxF,KAAK,OAAO;gBACR,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;YAC1C,KAAK,MAAM;gBACP,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YACtF,KAAK,OAAO;gBACR,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YAC/F,KAAK,YAAY;gBACb,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YAC/F,KAAK,MAAM;gBACP,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YACtF,KAAK,UAAU,CAAC;YAChB,KAAK,WAAW;gBACZ,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YAC3F,KAAK,gBAAgB;gBACjB,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YAC7F,KAAK,eAAe;gBAChB,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YAC9F,KAAK,MAAM;gBACP,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YACtF,KAAK,MAAM,CAAC;YACZ,KAAK,OAAO;gBACR,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YACtF,KAAK,OAAO;gBACR,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YACvF,KAAK,WAAW;gBACZ,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YACvF,KAAK,QAAQ;gBACT,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YACvF,KAAK,KAAK;gBACN,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YACrF,yCAAyC;YACzC,KAAK,MAAM;gBACP,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YACtF,KAAK,SAAS;gBACV,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YACzF,KAAK,aAAa;gBACd,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YAC7F,KAAK,WAAW;gBACZ,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YAC3F,KAAK,OAAO;gBACR,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YACvF,KAAK,OAAO;gBACR,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YACvF,KAAK,MAAM;gBACP,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YACtF,KAAK,QAAQ;gBACT,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YACxF,KAAK,WAAW;gBACZ,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YAC3F,KAAK,kBAAkB;gBACnB,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;YAClG;gBACI,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;QAC9F,CAAC;IACL,CAAC;IAED,eAAe,CAAC,UAAkB,EAAE,YAAqB,EAAE,eAAwB,EAAE,WAAoB;QACrG,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC;QACpF,OAAO,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC;IAChF,CAAC;IAEO,WAAW,CAAC,MAAe;QAC/B,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;QACtF,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;IAC/G,CAAC;IAEO,UAAU,CAAC,MAAe;QAC9B,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;QACtF,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;IAC/G,CAAC;IAEO,QAAQ,CAAC,SAAkB;QAC/B,iEAAiE;QACjE,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,IAAI,EAAE,EAAE,CAAC;YACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;QACtF,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;IAClG,CAAC;CACJ;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,MAAkB,EAAE,MAAe,EAAE,SAAkB,EAAE,KAAc;IAC7F,IAAI,MAAM,CAAC,sBAAsB,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;QACrD,OAAO,KAAK,IAAI,IAAI;YAChB,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,IAAI,SAAS,IAAI,KAAK,GAAG;YAC7C,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,IAAI,SAAS,GAAG,CAAC;IAC7C,CAAC;IACD,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,MAAM,IAAI,MAAM,CAAC,aAAa,CAAC;QAC3C,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YACd,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,IAAI,GAAG,GAAG,CAAC;QAC9D,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,iBAAkB,SAAQ,UAAU;IAC7C,IAAI,WAAW;QACX,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,oEAAoE;IAEpE,eAAe,CAAC,IAAY;QACxB,OAAO,IAAI,IAAI,GAAG,CAAC;IACvB,CAAC;IAED,WAAW,CAAC,MAAc,EAAE,MAAc;QACtC,OAAO,GAAG,MAAM,KAAK,MAAM,GAAG,CAAC;IACnC,CAAC;IAED,oEAAoE;IAEpE,WAAW,CAAC,KAAa,EAAE,MAAe;QACtC,MAAM,KAAK,GAAG,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;QACjC,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACnD,CAAC;IAED,oEAAoE;IAEpE,cAAc,CAAC,KAAc;QACzB,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IACpC,CAAC;IAED,mBAAmB;QACf,OAAO,4BAA4B,CAAC;IACxC,CAAC;IAED,OAAO;QACH,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAED,UAAU,CAAC,IAAY;QACnB,OAAO,QAAQ,IAAI,WAAW,CAAC;IACnC,CAAC;IAED,UAAU,CAAC,IAAY;QACnB,OAAO,QAAQ,IAAI,WAAW,CAAC;IACnC,CAAC;IAED,oEAAoE;IAEpE,oBAAoB,CAAC,OAAkB;QACnC,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnD,OAAO,aAAa,IAAI,EAAE,CAAC;QAC/B,CAAC;QACD,OAAO,aAAa,CAAC;IACzB,CAAC;IAED,yBAAyB;QACrB,OAAO,8BAA8B,CAAC;IAC1C,CAAC;IAED,aAAa;QACT,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAED,uBAAuB;QACnB,OAAO,WAAW,CAAC;IACvB,CAAC;IAED,kBAAkB;QACd,yDAAyD;QACzD,OAAO,WAAW,CAAC;IACvB,CAAC;IAED,oEAAoE;IAEpE,cAAc;QACV,OAAO,EAAE,CAAC,CAAC,4CAA4C;IAC3D,CAAC;IAED,iBAAiB,CAAC,UAAkB,EAAE,MAAc,EAAE,IAAY;QAC9D,MAAM,cAAc,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;QAChD,QAAQ,cAAc,EAAE,CAAC;YACrB,KAAK,OAAO;gBACR,OAAO,yEAAyE,MAAM,sBAAsB,IAAI,IAAI,CAAC;YACzH,KAAK,MAAM;gBACP,OAAO,wEAAwE,MAAM,qBAAqB,IAAI,IAAI,CAAC;YACvH,KAAK,UAAU;gBACX,OAAO,iIAAiI,MAAM,sBAAsB,IAAI,IAAI,CAAC;YACjL,KAAK,WAAW;gBACZ,OAAO,iIAAiI,MAAM,sBAAsB,IAAI,wBAAwB,CAAC;YACrM,KAAK,SAAS;gBACV,OAAO,sEAAsE,IAAI,IAAI,CAAC;YAC1F;gBACI,OAAO,kIAAkI,MAAM,sBAAsB,IAAI,IAAI,CAAC;QACtL,CAAC;IACL,CAAC;IAED,wBAAwB,CAAC,UAAkB;QACvC,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;QAC5C,OAAO,UAAU,KAAK,UAAU,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,WAAW,CAAC;IAC5F,CAAC;IAED,oEAAoE;IAEpE,uBAAuB,CAAC,MAAc,EAAE,UAAkB;QACtD,OAAO,GAAG,MAAM,kCAAkC,UAAU,GAAG,CAAC;IACpE,CAAC;IAED,gBAAgB,CAAC,KAAa,EAAE,OAAiB,EAAE,QAAiB;QAChE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,sBAAsB;QACtB,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,qDAAqD,CAAC,CAAC;QACtF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,0CAA0C;QAC1C,KAAK,CAAC,IAAI,CAAC,sCAAsC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,KAAK,8BAA8B,CAAC,CAAC;QAC3H,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,wBAAwB;QACxB,KAAK,CAAC,IAAI,CAAC,8BAA8B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9G,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,qDAAqD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACtI,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,CAAC,IAAI,CAAC,kCAAkC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC;QACrF,KAAK,CAAC,IAAI,CAAC,0BAA0B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChE,KAAK,CAAC,IAAI,CAAC,kCAAkC,KAAK,EAAE,CAAC,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,qCAAqC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEtH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,oEAAoE;IAEpE,kBAAkB;QACd,OAAO,gBAAgB,CAAC;IAC5B,CAAC;IAED,oEAAoE;IAEpE,IAAI,OAAO;QACP,OAAO,IAAI,qBAAqB,EAAE,CAAC;IACvC,CAAC;IAED,oEAAoE;IAEpE,oBAAoB,CAAC,KAAa;QAC9B,OAAO,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,mCAAmC;IAC/D,CAAC;IAED,cAAc;QACV,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,oEAAoE;IAEpE,mBAAmB,CAAC,KAAa,EAAE,SAAiB;QAChD,OAAO,0BAA0B,KAAK,KAAK,SAAS,IAAI,CAAC;IAC7D,CAAC;IAED,WAAW,CAAC,MAAc,EAAE,IAAY;QACpC,gDAAgD;QAChD,OAAO,GAAG,MAAM,OAAO,IAAI,GAAG,CAAC;IACnC,CAAC;IAED,oEAAoE;IAEpE,mBAAmB,CAAC,MAAc,EAAE,IAAY,EAAE,MAAgB;QAC9D,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,OAAO,iBAAiB,MAAM,KAAK,IAAI,KAAK,SAAS,GAAG,CAAC;IAC7D,CAAC;IAED,oEAAoE;IAEpE,UAAU,CAAC,OAAuB;QAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;QACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,IAAI,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC;QACrE,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,mDAAmD;QACnD,KAAK,CAAC,IAAI,CAAC,8BAA8B,OAAO,CAAC,MAAM,KAAK,QAAQ,KAAK,CAAC,CAAC;QAC3E,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,CAAC,IAAI,CAAC,2BAA2B,OAAO,CAAC,WAAW,QAAQ,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC;QAC3G,KAAK,CAAC,IAAI,CAAC,mBAAmB,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,MAAM,IAAI,MAAM,OAAO,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QAC1F,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,wBAAwB,OAAO,CAAC,MAAM,KAAK,QAAQ,MAAM,CAAC,CAAC;QAEtE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,QAAQ,CAAC,OAAqB;QAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,GAAG,GAAG,UAAU,MAAM,wBAAwB,OAAO,CAAC,SAAS,QAAQ,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,SAAS,IAAI,MAAM,IAAI,IAAI,GAAG,CAAC;QACrI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,GAAG,IAAI,UAAU,OAAO,CAAC,KAAK,EAAE,CAAC;QACrC,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,oEAAoE;IAEpE,eAAe,CAAC,UAAkB,EAAE,WAAmB,EAAE,MAAc,EAAE,MAAc,EAAE,IAAY;QACjG,OAAO,SAAS,UAAU,OAAO,MAAM,KAAK,MAAM,SAAS,IAAI,GAAG,CAAC;IACvE,CAAC;IAED,eAAe,CAAC,UAAkB,EAAE,MAAc,EAAE,IAAY,EAAE,OAAe;QAC7E,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACnD,MAAM,cAAc,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;QAChD,OAAO,cAAc,cAAc,IAAI,MAAM,KAAK,IAAI,SAAS,cAAc,GAAG,CAAC;IACrF,CAAC;IAED,oEAAoE;IAEpE,0BAA0B;QACtB,OAAO;YACH,UAAU,EAAE;;;;mCAIW;YACvB,WAAW,EAAE;;;;;;;4CAOmB;YAChC,eAAe,EAAE;;;;;;kEAMqC;YACtD,eAAe,EAAE;;;;;;;;;;;;;;;4CAee;YAChC,WAAW,EAAE;;;;;;;;;;;;;;mCAcU;YACvB,YAAY,EAAE;;;;;4BAKE;SACnB,CAAC;IACN,CAAC;IAED,oEAAoE;IAEpE,GAAG,CAAC,SAAiB,EAAE,OAAe,EAAE,QAAgB;QACpD,OAAO,aAAa,SAAS,SAAS,OAAO,SAAS,QAAQ,MAAM,CAAC;IACzE,CAAC;IAED,oEAAoE;IAE5D,aAAa,CAAC,aAAqB;QACvC,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,QAAQ,KAAK,CAAC,CAAC;YAAE,OAAO,QAAQ,CAAC;QACrC,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAClE,CAAC;IAEO,WAAW,CAAC,aAAqB;QACrC,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,QAAQ,KAAK,CAAC,CAAC;YAAE,OAAO,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC5D,OAAO,aAAa,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACnE,CAAC;CACJ"}
|