pg-to-sqlite 0.4.16 → 0.4.17
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/dist/pg-sqlite-compiler/passes/index.d.ts.map +1 -1
- package/dist/pg-sqlite-compiler/passes/index.js +4 -0
- package/dist/pg-sqlite-compiler/passes/index.js.map +1 -1
- package/dist/pg-sqlite-compiler/passes/schema.d.ts +3 -0
- package/dist/pg-sqlite-compiler/passes/schema.d.ts.map +1 -0
- package/dist/pg-sqlite-compiler/passes/schema.js +113 -0
- package/dist/pg-sqlite-compiler/passes/schema.js.map +1 -0
- package/dist/pg-sqlite-compiler/passes/unsupported.d.ts +3 -0
- package/dist/pg-sqlite-compiler/passes/unsupported.d.ts.map +1 -0
- package/dist/pg-sqlite-compiler/passes/unsupported.js +33 -0
- package/dist/pg-sqlite-compiler/passes/unsupported.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pg-sqlite-compiler/passes/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pg-sqlite-compiler/passes/index.ts"],"names":[],"mappings":"AAMA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEpD,eAAO,MAAM,cAAc,EAAE,IAAI,EAWhC,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAc9D"}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import { catalogPass } from './catalog.js';
|
|
2
2
|
import { datetimePass } from './datetime.js';
|
|
3
|
+
import { schemaPass } from './schema.js';
|
|
3
4
|
import { typesPass } from './types.js';
|
|
5
|
+
import { unsupportedPass } from './unsupported.js';
|
|
4
6
|
export const DEFAULT_PASSES = [
|
|
5
7
|
typesPass,
|
|
6
8
|
datetimePass,
|
|
7
9
|
catalogPass,
|
|
10
|
+
schemaPass,
|
|
11
|
+
unsupportedPass,
|
|
8
12
|
// future:
|
|
9
13
|
// castPass,
|
|
10
14
|
// arrayPass,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pg-sqlite-compiler/passes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pg-sqlite-compiler/passes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAalD,MAAM,CAAC,MAAM,cAAc,GAAW;IACpC,SAAS;IACT,YAAY;IACZ,WAAW;IACX,UAAU;IACV,eAAe;IACf,UAAU;IACV,cAAc;IACd,eAAe;IACf,cAAc;IACd,gBAAgB;CACjB,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,OAAY,EAAE,GAAgB;IACtD,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,OAAO,CAAA;IACrC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAM;IAC7C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,cAAc,CAAA;IAC3C,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QACrB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,QAAQ,IAAI,CAAC,IAAI,WAAW,GAAG,CAAC,OAAO,EAAE;aACnD,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/pg-sqlite-compiler/passes/schema.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAkFvC,eAAO,MAAM,UAAU,EAAE,IAwBxB,CAAA"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { walkAst } from './ast-utils.js';
|
|
2
|
+
function stringNode(value) {
|
|
3
|
+
return { String: { sval: value } };
|
|
4
|
+
}
|
|
5
|
+
function stringValue(node) {
|
|
6
|
+
return node?.String?.sval ?? node?.String?.str ?? null;
|
|
7
|
+
}
|
|
8
|
+
function flattenSchemaName(schema, name) {
|
|
9
|
+
if (schema === 'public' && name === 'migrations')
|
|
10
|
+
return 'public_migrations';
|
|
11
|
+
if (schema === 'public')
|
|
12
|
+
return name;
|
|
13
|
+
if (schema === '_orez' && name === '_zero_changes')
|
|
14
|
+
return '_zero_changes';
|
|
15
|
+
if (schema === '_orez' && name === '_zero_replication_slots')
|
|
16
|
+
return '_orez__zero_replication_slots';
|
|
17
|
+
if (schema === '_orez')
|
|
18
|
+
return `_orez__${name}`;
|
|
19
|
+
if (schema === '_zero')
|
|
20
|
+
return `_zero_${name}`;
|
|
21
|
+
return `${schema}_${name}`;
|
|
22
|
+
}
|
|
23
|
+
function flattenRangeVar(rangeVar) {
|
|
24
|
+
if (!rangeVar?.schemaname || !rangeVar.relname)
|
|
25
|
+
return rangeVar?.relname ?? null;
|
|
26
|
+
const flattened = flattenSchemaName(rangeVar.schemaname, rangeVar.relname);
|
|
27
|
+
rangeVar.relname = flattened;
|
|
28
|
+
delete rangeVar.schemaname;
|
|
29
|
+
return flattened;
|
|
30
|
+
}
|
|
31
|
+
function flattenColumnRef(columnRef) {
|
|
32
|
+
const fields = columnRef?.fields;
|
|
33
|
+
if (!Array.isArray(fields) || fields.length < 3)
|
|
34
|
+
return;
|
|
35
|
+
const schema = stringValue(fields[0]);
|
|
36
|
+
const table = stringValue(fields[1]);
|
|
37
|
+
if (!schema || !table)
|
|
38
|
+
return;
|
|
39
|
+
fields.splice(0, 2, stringNode(flattenSchemaName(schema, table)));
|
|
40
|
+
}
|
|
41
|
+
function rewriteColumnRefQualifier(node, from, to) {
|
|
42
|
+
if (!node || typeof node !== 'object')
|
|
43
|
+
return;
|
|
44
|
+
if (Array.isArray(node)) {
|
|
45
|
+
for (const item of node)
|
|
46
|
+
rewriteColumnRefQualifier(item, from, to);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const fields = node.ColumnRef?.fields;
|
|
50
|
+
if (Array.isArray(fields) && fields.length > 1 && stringValue(fields[0]) === from) {
|
|
51
|
+
fields[0] = stringNode(to);
|
|
52
|
+
}
|
|
53
|
+
for (const child of Object.values(node)) {
|
|
54
|
+
rewriteColumnRefQualifier(child, from, to);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function flattenSelectRangeVarQualifiers(stmt) {
|
|
58
|
+
const visitFromNode = (node) => {
|
|
59
|
+
if (!node || typeof node !== 'object')
|
|
60
|
+
return;
|
|
61
|
+
const rangeVar = node.RangeVar;
|
|
62
|
+
if (rangeVar?.schemaname && rangeVar.relname) {
|
|
63
|
+
const from = rangeVar.alias?.aliasname ? null : rangeVar.relname;
|
|
64
|
+
const to = flattenRangeVar(rangeVar);
|
|
65
|
+
if (from && to)
|
|
66
|
+
rewriteColumnRefQualifier(stmt, from, to);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const join = node.JoinExpr;
|
|
70
|
+
if (join) {
|
|
71
|
+
visitFromNode(join.larg);
|
|
72
|
+
visitFromNode(join.rarg);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
for (const fromNode of stmt?.fromClause ?? [])
|
|
76
|
+
visitFromNode(fromNode);
|
|
77
|
+
}
|
|
78
|
+
function flattenWriteTargetQualifiers(stmt) {
|
|
79
|
+
const relation = stmt?.relation;
|
|
80
|
+
const from = relation?.alias?.aliasname ?? (relation?.schemaname ? relation.relname : null);
|
|
81
|
+
const to = flattenRangeVar(relation);
|
|
82
|
+
if (!from || !to)
|
|
83
|
+
return;
|
|
84
|
+
if (relation?.alias?.aliasname)
|
|
85
|
+
delete relation.alias;
|
|
86
|
+
rewriteColumnRefQualifier(stmt, from, to);
|
|
87
|
+
}
|
|
88
|
+
export const schemaPass = {
|
|
89
|
+
name: 'schema',
|
|
90
|
+
run(rawStmt) {
|
|
91
|
+
walkAst(rawStmt, {
|
|
92
|
+
SelectStmt: (node) => {
|
|
93
|
+
flattenSelectRangeVarQualifiers(node);
|
|
94
|
+
},
|
|
95
|
+
InsertStmt: (node) => {
|
|
96
|
+
flattenWriteTargetQualifiers(node);
|
|
97
|
+
},
|
|
98
|
+
UpdateStmt: (node) => {
|
|
99
|
+
flattenWriteTargetQualifiers(node);
|
|
100
|
+
},
|
|
101
|
+
DeleteStmt: (node) => {
|
|
102
|
+
flattenRangeVar(node.relation);
|
|
103
|
+
},
|
|
104
|
+
RangeVar: (node) => {
|
|
105
|
+
flattenRangeVar(node);
|
|
106
|
+
},
|
|
107
|
+
ColumnRef: (node) => {
|
|
108
|
+
flattenColumnRef(node);
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/pg-sqlite-compiler/passes/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unsupported.d.ts","sourceRoot":"","sources":["../../../src/pg-sqlite-compiler/passes/unsupported.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAiBvC,eAAO,MAAM,eAAe,EAAE,IAe7B,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { walkAst } from './ast-utils.js';
|
|
2
|
+
const UNSUPPORTED_FUNCTIONS = new Set([
|
|
3
|
+
'date_trunc',
|
|
4
|
+
'gen_random_uuid',
|
|
5
|
+
'right',
|
|
6
|
+
'unnest',
|
|
7
|
+
]);
|
|
8
|
+
function functionName(func) {
|
|
9
|
+
const parts = func?.funcname;
|
|
10
|
+
if (!Array.isArray(parts) || parts.length === 0)
|
|
11
|
+
return null;
|
|
12
|
+
const last = parts[parts.length - 1];
|
|
13
|
+
const value = last?.String?.sval ?? last?.String?.str;
|
|
14
|
+
return typeof value === 'string' ? value.toLowerCase() : null;
|
|
15
|
+
}
|
|
16
|
+
export const unsupportedPass = {
|
|
17
|
+
name: 'unsupported',
|
|
18
|
+
run(rawStmt, ctx) {
|
|
19
|
+
walkAst(rawStmt, {
|
|
20
|
+
FuncCall: (node) => {
|
|
21
|
+
const name = functionName(node);
|
|
22
|
+
if (!name || !UNSUPPORTED_FUNCTIONS.has(name))
|
|
23
|
+
return;
|
|
24
|
+
ctx.warnings.push({
|
|
25
|
+
kind: 'unsupported-function',
|
|
26
|
+
near: 'FuncCall',
|
|
27
|
+
message: `${name}() is not supported by pg-to-sqlite`,
|
|
28
|
+
});
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=unsupported.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unsupported.js","sourceRoot":"","sources":["../../../src/pg-sqlite-compiler/passes/unsupported.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAIxC,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,YAAY;IACZ,iBAAiB;IACjB,OAAO;IACP,QAAQ;CACT,CAAC,CAAA;AAEF,SAAS,YAAY,CAAC,IAAS;IAC7B,MAAM,KAAK,GAAG,IAAI,EAAE,QAAQ,CAAA;IAC5B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAC5D,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACpC,MAAM,KAAK,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,IAAI,EAAE,MAAM,EAAE,GAAG,CAAA;IACrD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;AAC/D,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAS;IACnC,IAAI,EAAE,aAAa;IACnB,GAAG,CAAC,OAAO,EAAE,GAAG;QACd,OAAO,CAAC,OAAO,EAAE;YACf,QAAQ,EAAE,CAAC,IAAS,EAAE,EAAE;gBACtB,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;gBAC/B,IAAI,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,OAAM;gBACrD,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,sBAAsB;oBAC5B,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,GAAG,IAAI,qCAAqC;iBACtD,CAAC,CAAA;YACJ,CAAC;SACF,CAAC,CAAA;IACJ,CAAC;CACF,CAAA"}
|