@intentius/chant-lexicon-sql 0.124.48 → 0.124.49
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/clickhouse/plan/statements.d.ts +29 -0
- package/dist/clickhouse/plan/statements.d.ts.map +1 -0
- package/dist/clickhouse/plan/statements.js +334 -0
- package/dist/codegen/classifier-page.d.ts.map +1 -1
- package/dist/codegen/classifier-page.js +23 -0
- package/dist/codegen/postgres-classifier-page.js +2 -2
- package/dist/codegen/registry.d.ts.map +1 -1
- package/dist/codegen/registry.js +5 -0
- package/dist/core/statement-class.d.ts +55 -0
- package/dist/core/statement-class.d.ts.map +1 -0
- package/dist/core/statement-class.js +43 -0
- package/dist/coverage/postgres.json +6 -6
- package/dist/drizzle.d.ts.map +1 -1
- package/dist/drizzle.js +5 -0
- package/dist/files/postgres.d.ts.map +1 -1
- package/dist/files/postgres.js +23 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/integrity.json +5 -5
- package/dist/lint/post-synth/postgres-names.d.ts.map +1 -1
- package/dist/lint/post-synth/postgres-names.js +3 -0
- package/dist/lint/rules/postgres-templates.js +2 -2
- package/dist/lsp/postgres-template.d.ts.map +1 -1
- package/dist/lsp/postgres-template.js +10 -0
- package/dist/manifest.json +1 -1
- package/dist/mcp/postgres.js +1 -1
- package/dist/meta.json +25 -0
- package/dist/migration-classify.d.ts +23 -0
- package/dist/migration-classify.d.ts.map +1 -0
- package/dist/migration-classify.js +44 -0
- package/dist/okf/index.md +5 -0
- package/dist/okf/types/PostgresForeignTable.md +9 -0
- package/dist/okf/types/PostgresOperatorClass.md +9 -0
- package/dist/okf/types/PostgresOperatorFamily.md +9 -0
- package/dist/okf/types/PostgresTextSearchConfiguration.md +9 -0
- package/dist/okf/types/PostgresTextSearchDictionary.md +9 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +13 -0
- package/dist/postgres/access/acl.js +1 -1
- package/dist/postgres/access/import.js +1 -1
- package/dist/postgres/apply/apply.js +5 -0
- package/dist/postgres/apply/statements.d.ts.map +1 -1
- package/dist/postgres/apply/statements.js +156 -2
- package/dist/postgres/entities.d.ts +120 -2
- package/dist/postgres/entities.d.ts.map +1 -1
- package/dist/postgres/entities.js +180 -5
- package/dist/postgres/entity-types.d.ts +5 -0
- package/dist/postgres/entity-types.d.ts.map +1 -1
- package/dist/postgres/entity-types.js +5 -0
- package/dist/postgres/import/generator.d.ts.map +1 -1
- package/dist/postgres/import/generator.js +16 -1
- package/dist/postgres/live/catalog-kinds.d.ts +6 -0
- package/dist/postgres/live/catalog-kinds.d.ts.map +1 -1
- package/dist/postgres/live/catalog-kinds.js +246 -0
- package/dist/postgres/live/describe-resources.d.ts.map +1 -1
- package/dist/postgres/live/describe-resources.js +2 -0
- package/dist/postgres/migrate/observe.d.ts.map +1 -1
- package/dist/postgres/migrate/observe.js +4 -1
- package/dist/postgres/migrate/replication.d.ts +42 -0
- package/dist/postgres/migrate/replication.d.ts.map +1 -1
- package/dist/postgres/migrate/replication.js +53 -0
- package/dist/postgres/parser.d.ts +73 -1
- package/dist/postgres/parser.d.ts.map +1 -1
- package/dist/postgres/parser.js +181 -7
- package/dist/postgres/plan/deep.d.ts.map +1 -1
- package/dist/postgres/plan/deep.js +15 -4
- package/dist/postgres/plan/diff.d.ts.map +1 -1
- package/dist/postgres/plan/diff.js +120 -5
- package/dist/postgres/plan/normalize.d.ts +12 -1
- package/dist/postgres/plan/normalize.d.ts.map +1 -1
- package/dist/postgres/plan/normalize.js +151 -0
- package/dist/postgres/plan/rules.d.ts +3 -0
- package/dist/postgres/plan/rules.d.ts.map +1 -1
- package/dist/postgres/plan/rules.js +5 -2
- package/dist/postgres/plan/schema.js +1 -1
- package/dist/postgres/plan/statements.d.ts +26 -0
- package/dist/postgres/plan/statements.d.ts.map +1 -0
- package/dist/postgres/plan/statements.js +364 -0
- package/dist/postgres/testing/roundtrip-schema.d.ts +3 -2
- package/dist/postgres/testing/roundtrip-schema.d.ts.map +1 -1
- package/dist/postgres/testing/roundtrip-schema.js +12 -1
- package/dist/postgres.d.ts +1 -1
- package/dist/postgres.d.ts.map +1 -1
- package/dist/postgres.js +1 -1
- package/dist/rules/postgres-names.ts +2 -0
- package/dist/rules/postgres-templates.ts +2 -2
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +5 -0
- package/package.json +2 -2
- package/src/clickhouse/plan/statements.test.ts +61 -0
- package/src/clickhouse/plan/statements.ts +306 -0
- package/src/codegen/classifier-page.ts +23 -0
- package/src/codegen/postgres-classifier-page.ts +2 -2
- package/src/codegen/registry.ts +5 -0
- package/src/core/statement-class.ts +88 -0
- package/src/coverage/postgres.json +6 -6
- package/src/drizzle.ts +5 -0
- package/src/files/postgres.ts +22 -1
- package/src/generated/lexicon-sql.json +25 -0
- package/src/index.ts +1 -1
- package/src/lint/post-synth/postgres-checks.test.ts +8 -1
- package/src/lint/post-synth/postgres-names.ts +2 -0
- package/src/lint/rules/postgres-templates.ts +2 -2
- package/src/lsp/postgres-template.ts +9 -0
- package/src/mcp/postgres.ts +1 -1
- package/src/migration-classify.test.ts +150 -0
- package/src/migration-classify.ts +45 -0
- package/src/op/watch-pipeline.test.ts +8 -1
- package/src/plugin.ts +14 -0
- package/src/postgres/access/acl.ts +1 -1
- package/src/postgres/access/import.ts +1 -1
- package/src/postgres/apply/apply.ts +5 -0
- package/src/postgres/apply/statements.ts +151 -3
- package/src/postgres/database-kinds.test.ts +498 -17
- package/src/postgres/entities.ts +276 -5
- package/src/postgres/entity-types.ts +5 -0
- package/src/postgres/import/generator.ts +13 -1
- package/src/postgres/live/catalog-kinds.ts +271 -0
- package/src/postgres/live/describe-resources.ts +2 -0
- package/src/postgres/migrate/observe.ts +3 -1
- package/src/postgres/migrate/replication.ts +66 -0
- package/src/postgres/migrate/subscriber.e2e.test.ts +141 -0
- package/src/postgres/migrate/subscriber.test.ts +59 -0
- package/src/postgres/parser.ts +225 -6
- package/src/postgres/plan/deep.ts +15 -4
- package/src/postgres/plan/diff.ts +107 -6
- package/src/postgres/plan/normalize.ts +155 -0
- package/src/postgres/plan/rules.ts +25 -4
- package/src/postgres/plan/schema.ts +1 -1
- package/src/postgres/plan/statements.test.ts +78 -0
- package/src/postgres/plan/statements.ts +299 -0
- package/src/postgres/testing/roundtrip-schema.ts +12 -1
- package/src/postgres.ts +17 -0
- package/src/skills/chant-sql-postgres-migration.md +1 -0
- package/src/skills/chant-sql-postgres.md +5 -0
- package/src/sql-files.test.ts +33 -0
- package/src/validate.ts +5 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observe.d.ts","sourceRoot":"","sources":["../../../src/postgres/migrate/observe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAGlE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAI7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAuB,qBAAqB,EAAgC,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;AACxH,OAAO,
|
|
1
|
+
{"version":3,"file":"observe.d.ts","sourceRoot":"","sources":["../../../src/postgres/migrate/observe.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,7 +42,7 @@ import { PG_CLASSIFIER_RULES } from "../plan/rules.js";
|
|
|
42
42
|
import { qualifiedKey } from "../plan/schema.js";
|
|
43
43
|
import { POSTGRES_ENTITY_TYPES } from "../entity-types.js";
|
|
44
44
|
import { col, migrationNames, MIGRATION_TRAILER_KEY, pgName } from "./names.js";
|
|
45
|
-
import { publicationsOf } from "./replication.js";
|
|
45
|
+
import { publicationsOf, subscriptionRefusal, subscriptionsOf } from "./replication.js";
|
|
46
46
|
import { keyText } from "./batches.js";
|
|
47
47
|
import { carriedStates, carriedSubject, columnSequence, discoverDependents, replaceColumn, storedType } from "./carry.js";
|
|
48
48
|
/** A refusal: the migration cannot start, or cannot go on, for a reason a person has to act on. */
|
|
@@ -265,6 +265,9 @@ export async function observeMigration(input) {
|
|
|
265
265
|
`Leave the column out of the publication with a column list (15 and later), or migrate the subscriber's table as well and run this Op on a table no publication sends. ` +
|
|
266
266
|
`A migration of the publisher and the subscriber together is chant #3332.`);
|
|
267
267
|
}
|
|
268
|
+
const subscriptions = await subscriptionsOf(client, schema, table, major);
|
|
269
|
+
if (subscriptions.length > 0)
|
|
270
|
+
throw new MigrationRefusal(subscriptionRefusal(where, input.column, subscriptions));
|
|
268
271
|
}
|
|
269
272
|
// After a rename's switch the old column still holds the default or the identity the contract moves, and its sequence is read for it.
|
|
270
273
|
if (state === "switched" && old && (old.identity || old.default?.includes("nextval("))) {
|
|
@@ -34,6 +34,32 @@
|
|
|
34
34
|
* publication sends the migrated column of, naming each publication. A
|
|
35
35
|
* publication with a column list (15 and later) that leaves the column out
|
|
36
36
|
* sends neither it nor the new one, and does not stop the migration.
|
|
37
|
+
*
|
|
38
|
+
* ## Subscriptions (#4405)
|
|
39
|
+
*
|
|
40
|
+
* The other side: a table that is the target of a subscription. The
|
|
41
|
+
* subscription's apply worker runs with `session_replication_role = replica`
|
|
42
|
+
* ("Logical Replication", Architecture,
|
|
43
|
+
* https://www.postgresql.org/docs/18/logical-replication-architecture.html),
|
|
44
|
+
* and a trigger made by plain `CREATE TRIGGER` is `ENABLE ORIGIN`: it fires
|
|
45
|
+
* only while the setting is `origin` or `local`
|
|
46
|
+
* (https://www.postgresql.org/docs/18/runtime-config-client.html#GUC-SESSION-REPLICATION-ROLE).
|
|
47
|
+
* Only `ENABLE REPLICA` and `ENABLE ALWAYS` triggers fire for the worker
|
|
48
|
+
* (https://www.postgresql.org/docs/18/sql-altertable.html, the TRIGGER
|
|
49
|
+
* clauses). The architecture page says "by default, triggers and rules will
|
|
50
|
+
* not fire on a subscriber" and points to `ENABLE TRIGGER` to change it. So the dual write
|
|
51
|
+
* never sees a replicated row, and the new column goes stale. The initial
|
|
52
|
+
* table copy is the exception: it is a `COPY` and fires plain triggers.
|
|
53
|
+
*
|
|
54
|
+
* `ENABLE ALWAYS` would make the trigger fire, and the Plan phase refuses
|
|
55
|
+
* the table instead, because the Op's later steps assume it controls every
|
|
56
|
+
* writer of the old column. The publisher keeps sending the old column's name
|
|
57
|
+
* and the subscriber applies by name, so a rename's contract (which drops the
|
|
58
|
+
* old column) would stop the apply at the next row, and the switch of a
|
|
59
|
+
* type change would change the column under a running apply worker. Neither
|
|
60
|
+
* order can be made inside this Op's one connection to one server; that is
|
|
61
|
+
* the same limit #3332 recorded for the publisher side. The refusal names
|
|
62
|
+
* each subscription.
|
|
37
63
|
*/
|
|
38
64
|
import type { PostgresClient } from "../live/client.js";
|
|
39
65
|
export interface ReplicationLagBound {
|
|
@@ -77,4 +103,20 @@ export interface PublicationHit {
|
|
|
77
103
|
* before 15 there are no column lists, and any publication of the table is.
|
|
78
104
|
*/
|
|
79
105
|
export declare function publicationsOf(client: Pick<PostgresClient, "query">, schema: string, table: string, column: string, major: number): Promise<PublicationHit[]>;
|
|
106
|
+
/** One subscription that has the table, or a partition of it, as a target. */
|
|
107
|
+
export interface SubscriptionHit {
|
|
108
|
+
name: string;
|
|
109
|
+
enabled: boolean;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* The subscriptions of the current database with a row in `pg_subscription_rel`
|
|
113
|
+
* for `schema.table` (and, on a partitioned table, for any of its
|
|
114
|
+
* partitions, which is where a subscription to a partitioned table lists the
|
|
115
|
+
* tables it applies to). Read at plan time; `pg_subscription_rel` is
|
|
116
|
+
* per database and `pg_subscription` is shared, so the join keeps this
|
|
117
|
+
* database's rows (`subdbid`).
|
|
118
|
+
*/
|
|
119
|
+
export declare function subscriptionsOf(client: Pick<PostgresClient, "query">, schema: string, table: string, major: number): Promise<SubscriptionHit[]>;
|
|
120
|
+
/** The Plan phase's refusal for a table that a subscription applies to. */
|
|
121
|
+
export declare function subscriptionRefusal(where: string, column: string, hits: SubscriptionHit[]): string;
|
|
80
122
|
//# sourceMappingURL=replication.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replication.d.ts","sourceRoot":"","sources":["../../../src/postgres/migrate/replication.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"replication.d.ts","sourceRoot":"","sources":["../../../src/postgres/migrate/replication.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,WAAW,mBAAmB;IAClC,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,uBAAuB,EAAE,mBAA+D,CAAC;AAEtG,sFAAsF;AACtF,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,UAAU;IACzB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,kFAAkF;AAClF,wBAAsB,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAO9F;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,EACrC,KAAK,EAAE,mBAAmB,EAC1B,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CAAO,GACjJ,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAED,sDAAsD;AACtD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAanK;AAgBD,8EAA8E;AAC9E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAarJ;AAED,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,MAAM,CAQlG"}
|
|
@@ -34,6 +34,32 @@
|
|
|
34
34
|
* publication sends the migrated column of, naming each publication. A
|
|
35
35
|
* publication with a column list (15 and later) that leaves the column out
|
|
36
36
|
* sends neither it nor the new one, and does not stop the migration.
|
|
37
|
+
*
|
|
38
|
+
* ## Subscriptions (#4405)
|
|
39
|
+
*
|
|
40
|
+
* The other side: a table that is the target of a subscription. The
|
|
41
|
+
* subscription's apply worker runs with `session_replication_role = replica`
|
|
42
|
+
* ("Logical Replication", Architecture,
|
|
43
|
+
* https://www.postgresql.org/docs/18/logical-replication-architecture.html),
|
|
44
|
+
* and a trigger made by plain `CREATE TRIGGER` is `ENABLE ORIGIN`: it fires
|
|
45
|
+
* only while the setting is `origin` or `local`
|
|
46
|
+
* (https://www.postgresql.org/docs/18/runtime-config-client.html#GUC-SESSION-REPLICATION-ROLE).
|
|
47
|
+
* Only `ENABLE REPLICA` and `ENABLE ALWAYS` triggers fire for the worker
|
|
48
|
+
* (https://www.postgresql.org/docs/18/sql-altertable.html, the TRIGGER
|
|
49
|
+
* clauses). The architecture page says "by default, triggers and rules will
|
|
50
|
+
* not fire on a subscriber" and points to `ENABLE TRIGGER` to change it. So the dual write
|
|
51
|
+
* never sees a replicated row, and the new column goes stale. The initial
|
|
52
|
+
* table copy is the exception: it is a `COPY` and fires plain triggers.
|
|
53
|
+
*
|
|
54
|
+
* `ENABLE ALWAYS` would make the trigger fire, and the Plan phase refuses
|
|
55
|
+
* the table instead, because the Op's later steps assume it controls every
|
|
56
|
+
* writer of the old column. The publisher keeps sending the old column's name
|
|
57
|
+
* and the subscriber applies by name, so a rename's contract (which drops the
|
|
58
|
+
* old column) would stop the apply at the next row, and the switch of a
|
|
59
|
+
* type change would change the column under a running apply worker. Neither
|
|
60
|
+
* order can be made inside this Op's one connection to one server; that is
|
|
61
|
+
* the same limit #3332 recorded for the publisher side. The refusal names
|
|
62
|
+
* each subscription.
|
|
37
63
|
*/
|
|
38
64
|
export const DEFAULT_REPLICATION_LAG = { maxLagMs: 10000, waitMs: 30 * 60000 };
|
|
39
65
|
/** A replica that stayed behind past the wait, or whose lag this role cannot read. */
|
|
@@ -104,3 +130,30 @@ function sleepFor(ms, signal) {
|
|
|
104
130
|
}, { once: true });
|
|
105
131
|
});
|
|
106
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* The subscriptions of the current database with a row in `pg_subscription_rel`
|
|
135
|
+
* for `schema.table` (and, on a partitioned table, for any of its
|
|
136
|
+
* partitions, which is where a subscription to a partitioned table lists the
|
|
137
|
+
* tables it applies to). Read at plan time; `pg_subscription_rel` is
|
|
138
|
+
* per database and `pg_subscription` is shared, so the join keeps this
|
|
139
|
+
* database's rows (`subdbid`).
|
|
140
|
+
*/
|
|
141
|
+
export async function subscriptionsOf(client, schema, table, major) {
|
|
142
|
+
const rel = "pg_catalog.to_regclass(pg_catalog.quote_ident($1) || '.' || pg_catalog.quote_ident($2))";
|
|
143
|
+
const tables = major >= 12 ? `SELECT relid FROM pg_catalog.pg_partition_tree(${rel})` : `SELECT ${rel}::oid AS relid`;
|
|
144
|
+
const rows = await client.query(`SELECT DISTINCT s.subname, s.subenabled
|
|
145
|
+
FROM pg_catalog.pg_subscription_rel sr
|
|
146
|
+
JOIN pg_catalog.pg_subscription s ON s.oid = sr.srsubid
|
|
147
|
+
WHERE s.subdbid = (SELECT oid FROM pg_catalog.pg_database WHERE datname = pg_catalog.current_database())
|
|
148
|
+
AND sr.srrelid IN (${tables})
|
|
149
|
+
ORDER BY s.subname`, [schema, table]);
|
|
150
|
+
return rows.map((r) => ({ name: r.subname, enabled: r.subenabled }));
|
|
151
|
+
}
|
|
152
|
+
/** The Plan phase's refusal for a table that a subscription applies to. */
|
|
153
|
+
export function subscriptionRefusal(where, column, hits) {
|
|
154
|
+
return (`${where} is a target of logical replication subscription(s) ${hits.map((h) => `${h.name}${h.enabled ? "" : " (disabled)"}`).join(", ")}. ` +
|
|
155
|
+
`A subscription's apply worker runs with session_replication_role = replica, where a trigger made by CREATE TRIGGER does not fire, so the dual write would never see a replicated row and the new column of ${column} would go stale ` +
|
|
156
|
+
`(https://www.postgresql.org/docs/18/runtime-config-client.html#GUC-SESSION-REPLICATION-ROLE). ` +
|
|
157
|
+
`ENABLE ALWAYS would fire it, but the publisher keeps sending the old column's name and the subscriber applies by name, so the contract (or the switch of a type change) would stop the apply, and one Op cannot change both servers. ` +
|
|
158
|
+
`Take the table out of the subscription (drop it from the publication and ALTER SUBSCRIPTION ... REFRESH PUBLICATION), or migrate the publisher and the subscriber by hand. A migration of both together is chant #3332.`);
|
|
159
|
+
}
|
|
@@ -105,6 +105,8 @@ export interface ColumnNode {
|
|
|
105
105
|
always: boolean;
|
|
106
106
|
options?: Span;
|
|
107
107
|
};
|
|
108
|
+
/** A foreign table column's `OPTIONS (...)`. */
|
|
109
|
+
options?: GenericOption[];
|
|
108
110
|
/** Column constraints other than NOT NULL, NULL, DEFAULT and GENERATED. */
|
|
109
111
|
constraints: ConstraintNode[];
|
|
110
112
|
}
|
|
@@ -289,6 +291,74 @@ export interface GenericOption {
|
|
|
289
291
|
nameSpan: Span;
|
|
290
292
|
value: Span;
|
|
291
293
|
}
|
|
294
|
+
/** `CREATE FOREIGN TABLE [IF NOT EXISTS] name (columns) SERVER server [OPTIONS (...)]`. */
|
|
295
|
+
export interface ForeignTableNode {
|
|
296
|
+
statement: "foreignTable";
|
|
297
|
+
/** Clauses the parser does not know (#3872), kept in the DDL as written; absent when there are none. */
|
|
298
|
+
unknown?: UnknownClause[];
|
|
299
|
+
ifNotExists: boolean;
|
|
300
|
+
name: NameNode;
|
|
301
|
+
columns: ColumnNode[];
|
|
302
|
+
constraints: ConstraintNode[];
|
|
303
|
+
server: NameNode;
|
|
304
|
+
options: GenericOption[];
|
|
305
|
+
}
|
|
306
|
+
/** One member of an operator class: an operator, a support function, or the storage type. */
|
|
307
|
+
export type OperatorClassItem = {
|
|
308
|
+
kind: "operator";
|
|
309
|
+
number: Span;
|
|
310
|
+
operator: NameNode;
|
|
311
|
+
types?: Span;
|
|
312
|
+
orderBy?: NameNode;
|
|
313
|
+
} | {
|
|
314
|
+
kind: "function";
|
|
315
|
+
number: Span;
|
|
316
|
+
types?: Span;
|
|
317
|
+
function: NameNode;
|
|
318
|
+
args: Span;
|
|
319
|
+
} | {
|
|
320
|
+
kind: "storage";
|
|
321
|
+
type: Span;
|
|
322
|
+
};
|
|
323
|
+
/** `CREATE OPERATOR CLASS name [DEFAULT] FOR TYPE type USING method [FAMILY family] AS item, ...`. */
|
|
324
|
+
export interface OperatorClassNode {
|
|
325
|
+
statement: "operatorClass";
|
|
326
|
+
name: NameNode;
|
|
327
|
+
default: boolean;
|
|
328
|
+
type: Span;
|
|
329
|
+
/** The index access method, folded. */
|
|
330
|
+
method: string;
|
|
331
|
+
family?: NameNode;
|
|
332
|
+
items: OperatorClassItem[];
|
|
333
|
+
}
|
|
334
|
+
/** `CREATE OPERATOR FAMILY name USING method`. */
|
|
335
|
+
export interface OperatorFamilyNode {
|
|
336
|
+
statement: "operatorFamily";
|
|
337
|
+
name: NameNode;
|
|
338
|
+
method: string;
|
|
339
|
+
}
|
|
340
|
+
/** `CREATE TEXT SEARCH DICTIONARY name (TEMPLATE = t [, option = value, ...])`; the template is the `template` option. */
|
|
341
|
+
export interface TextSearchDictionaryNode {
|
|
342
|
+
statement: "textSearchDictionary";
|
|
343
|
+
name: NameNode;
|
|
344
|
+
options: DefElem[];
|
|
345
|
+
}
|
|
346
|
+
/** `CREATE TEXT SEARCH CONFIGURATION name (PARSER = p)`. */
|
|
347
|
+
export interface TextSearchConfigurationNode {
|
|
348
|
+
statement: "textSearchConfiguration";
|
|
349
|
+
name: NameNode;
|
|
350
|
+
options: DefElem[];
|
|
351
|
+
}
|
|
352
|
+
/** `ALTER TEXT SEARCH CONFIGURATION name ADD MAPPING FOR token_type, ... WITH dictionary, ...`: a configuration's mapping, written after its CREATE. */
|
|
353
|
+
export interface TextSearchMappingNode {
|
|
354
|
+
statement: "textSearchMapping";
|
|
355
|
+
name: NameNode;
|
|
356
|
+
tokens: Array<{
|
|
357
|
+
name: string;
|
|
358
|
+
span: Span;
|
|
359
|
+
}>;
|
|
360
|
+
dictionaries: NameNode[];
|
|
361
|
+
}
|
|
292
362
|
/** `CREATE FOREIGN DATA WRAPPER name [HANDLER f | NO HANDLER] [VALIDATOR f | NO VALIDATOR] [OPTIONS (...)]`. */
|
|
293
363
|
export interface ForeignDataWrapperNode {
|
|
294
364
|
statement: "foreignDataWrapper";
|
|
@@ -499,6 +569,8 @@ export interface CommentNode {
|
|
|
499
569
|
on?: NameNode;
|
|
500
570
|
/** For `COMMENT ON FUNCTION f(...)` and `AGGREGATE a(...)`: the parameter list, parentheses excluded. */
|
|
501
571
|
args?: Span;
|
|
572
|
+
/** For `COMMENT ON OPERATOR CLASS c USING m` and `OPERATOR FAMILY`: the index method, folded. */
|
|
573
|
+
using?: string;
|
|
502
574
|
/** For `COMMENT ON CAST (source AS target)`: the two types. */
|
|
503
575
|
cast?: {
|
|
504
576
|
source: Span;
|
|
@@ -507,7 +579,7 @@ export interface CommentNode {
|
|
|
507
579
|
/** The comment, a string, or undefined for `IS NULL`. */
|
|
508
580
|
text?: Span;
|
|
509
581
|
}
|
|
510
|
-
export type StatementNode = TableNode | IndexNode | ViewNode | SequenceNode | SchemaNode | EnumNode | CompositeNode | RangeNode | AggregateNode | CollationNode | CastNode | EventTriggerNode | OperatorNode | StatisticsNode | ForeignDataWrapperNode | ForeignServerNode | PublicationNode | DomainNode | ExtensionNode | RoutineNode | TriggerNode | PolicyNode | RoleNode | GrantNode | RowSecurityNode | CommentNode;
|
|
582
|
+
export type StatementNode = TableNode | IndexNode | ViewNode | SequenceNode | SchemaNode | EnumNode | CompositeNode | RangeNode | AggregateNode | CollationNode | CastNode | EventTriggerNode | OperatorNode | OperatorClassNode | OperatorFamilyNode | ForeignTableNode | TextSearchDictionaryNode | TextSearchConfigurationNode | TextSearchMappingNode | StatisticsNode | ForeignDataWrapperNode | ForeignServerNode | PublicationNode | DomainNode | ExtensionNode | RoutineNode | TriggerNode | PolicyNode | RoleNode | GrantNode | RowSecurityNode | CommentNode;
|
|
511
583
|
/** `CREATE TYPE ... AS RANGE`'s options (sql-createtype). */
|
|
512
584
|
export declare const RANGE_OPTIONS: string[];
|
|
513
585
|
/** `CREATE AGGREGATE`'s options (sql-createaggregate), the old form's `basetype` aside. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/postgres/parser.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/postgres/parser.ts"],"names":[],"mappings":"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"}
|
package/dist/postgres/parser.js
CHANGED
|
@@ -420,7 +420,7 @@ class PgParser extends SqlCursor {
|
|
|
420
420
|
node.span = this.span(from, []);
|
|
421
421
|
return node;
|
|
422
422
|
}
|
|
423
|
-
column(typed) {
|
|
423
|
+
column(typed, foreign = false) {
|
|
424
424
|
const { text, span } = this.nameTok("a column name");
|
|
425
425
|
const col = { name: text, nameSpan: span, constraints: [] };
|
|
426
426
|
if (!typed)
|
|
@@ -432,7 +432,11 @@ class PgParser extends SqlCursor {
|
|
|
432
432
|
else if (typed)
|
|
433
433
|
this.fail("expected a column type");
|
|
434
434
|
for (;;) {
|
|
435
|
-
if (this.
|
|
435
|
+
if (foreign && kw(this.peek(), "OPTIONS") && this.isPunct("(", 1)) {
|
|
436
|
+
this.p++;
|
|
437
|
+
col.options = this.genericOptions();
|
|
438
|
+
}
|
|
439
|
+
else if (this.accept("COMPRESSION"))
|
|
436
440
|
col.compression = this.expr(COLUMN_CLAUSE);
|
|
437
441
|
else if (this.accept("STORAGE"))
|
|
438
442
|
col.storage = this.expr(COLUMN_CLAUSE);
|
|
@@ -696,6 +700,8 @@ class PgParser extends SqlCursor {
|
|
|
696
700
|
return this.grant(true, false);
|
|
697
701
|
if (this.acceptSeq("ALTER", "DEFAULT", "PRIVILEGES"))
|
|
698
702
|
return this.defaultPrivileges();
|
|
703
|
+
if (this.acceptSeq("ALTER", "TEXT", "SEARCH", "CONFIGURATION"))
|
|
704
|
+
return this.textSearchMapping();
|
|
699
705
|
if (this.acceptSeq("ALTER", "TABLE"))
|
|
700
706
|
return this.rowSecurity();
|
|
701
707
|
this.expect("CREATE");
|
|
@@ -731,10 +737,24 @@ class PgParser extends SqlCursor {
|
|
|
731
737
|
return this.cast();
|
|
732
738
|
if (this.acceptSeq("EVENT", "TRIGGER"))
|
|
733
739
|
return this.eventTrigger();
|
|
734
|
-
if (this.accept("OPERATOR"))
|
|
740
|
+
if (this.accept("OPERATOR")) {
|
|
741
|
+
// CLASS and FAMILY are words an operator's schema may be named: `class.+` is still an operator.
|
|
742
|
+
if (kw(this.peek(), "CLASS") && !this.isPunct(".", 1)) {
|
|
743
|
+
this.p++;
|
|
744
|
+
return this.operatorClass();
|
|
745
|
+
}
|
|
746
|
+
if (kw(this.peek(), "FAMILY") && !this.isPunct(".", 1)) {
|
|
747
|
+
this.p++;
|
|
748
|
+
return this.operatorFamily();
|
|
749
|
+
}
|
|
735
750
|
return this.operator();
|
|
751
|
+
}
|
|
752
|
+
if (this.acceptSeq("TEXT", "SEARCH"))
|
|
753
|
+
return this.textSearch();
|
|
736
754
|
if (this.accept("STATISTICS"))
|
|
737
755
|
return this.statistics();
|
|
756
|
+
if (this.acceptSeq("FOREIGN", "TABLE"))
|
|
757
|
+
return this.foreignTable();
|
|
738
758
|
if (this.acceptSeq("FOREIGN", "DATA", "WRAPPER"))
|
|
739
759
|
return this.foreignDataWrapper();
|
|
740
760
|
if (this.accept("SERVER"))
|
|
@@ -756,7 +776,7 @@ class PgParser extends SqlCursor {
|
|
|
756
776
|
return this.view(true, false, false, false);
|
|
757
777
|
if (this.accept("VIEW"))
|
|
758
778
|
return this.view(false, orReplace, persistence === "temporary", recursive);
|
|
759
|
-
return this.fail("expected SCHEMA, TABLE, INDEX, VIEW, MATERIALIZED VIEW, SEQUENCE, TYPE, DOMAIN, EXTENSION, FUNCTION, PROCEDURE, AGGREGATE, TRIGGER, EVENT TRIGGER, COLLATION, CAST, OPERATOR, STATISTICS, FOREIGN DATA WRAPPER, SERVER, PUBLICATION, POLICY or ROLE");
|
|
779
|
+
return this.fail("expected SCHEMA, TABLE, INDEX, VIEW, MATERIALIZED VIEW, SEQUENCE, TYPE, DOMAIN, EXTENSION, FUNCTION, PROCEDURE, AGGREGATE, TRIGGER, EVENT TRIGGER, COLLATION, CAST, OPERATOR, OPERATOR CLASS, OPERATOR FAMILY, TEXT SEARCH CONFIGURATION, TEXT SEARCH DICTIONARY, STATISTICS, FOREIGN TABLE, FOREIGN DATA WRAPPER, SERVER, PUBLICATION, POLICY or ROLE");
|
|
760
780
|
}
|
|
761
781
|
schema() {
|
|
762
782
|
const node = { statement: "schema", ifNotExists: this.ifNotExists() };
|
|
@@ -1065,8 +1085,6 @@ class PgParser extends SqlCursor {
|
|
|
1065
1085
|
return { pieces, span: this.span(from, refs) };
|
|
1066
1086
|
}
|
|
1067
1087
|
operator() {
|
|
1068
|
-
if (kw(this.peek(), "CLASS", "FAMILY") && !this.isPunct(".", 1))
|
|
1069
|
-
this.fail("expected the operator's name (CREATE OPERATOR CLASS and CREATE OPERATOR FAMILY are not declared)");
|
|
1070
1088
|
const name = this.operatorName();
|
|
1071
1089
|
const options = this.definition("an operator option");
|
|
1072
1090
|
this.checkDefinition(options, OPERATOR_OPTIONS, [], "an operator");
|
|
@@ -1074,6 +1092,140 @@ class PgParser extends SqlCursor {
|
|
|
1074
1092
|
this.fail("expected FUNCTION (an operator needs the function it calls)", this.lastSeen());
|
|
1075
1093
|
return { statement: "operator", name, options };
|
|
1076
1094
|
}
|
|
1095
|
+
/** The member list of `CREATE OPERATOR CLASS ... AS`: an operator, a support function or the storage type. */
|
|
1096
|
+
operatorClassItem() {
|
|
1097
|
+
const number = () => {
|
|
1098
|
+
const t = this.next();
|
|
1099
|
+
if (t.kind !== "number" && t.kind !== "ref")
|
|
1100
|
+
this.fail("expected the strategy or support number", t);
|
|
1101
|
+
return this.span(this.idx(-1), t.kind === "ref" ? [t.part] : []);
|
|
1102
|
+
};
|
|
1103
|
+
if (this.accept("OPERATOR")) {
|
|
1104
|
+
const item = { kind: "operator", number: number(), operator: this.operatorName() };
|
|
1105
|
+
if (this.isPunct("("))
|
|
1106
|
+
item.types = this.parenthesized();
|
|
1107
|
+
if (this.accept("FOR")) {
|
|
1108
|
+
if (this.accept("SEARCH"))
|
|
1109
|
+
return item;
|
|
1110
|
+
if (!this.acceptSeq("ORDER", "BY"))
|
|
1111
|
+
this.fail("expected SEARCH or ORDER BY");
|
|
1112
|
+
item.orderBy = this.qualifiedName("a sort operator family");
|
|
1113
|
+
}
|
|
1114
|
+
return item;
|
|
1115
|
+
}
|
|
1116
|
+
if (this.accept("FUNCTION")) {
|
|
1117
|
+
const n = number();
|
|
1118
|
+
const types = this.isPunct("(") ? this.parenthesized() : undefined;
|
|
1119
|
+
const fn = this.qualifiedName("a function name");
|
|
1120
|
+
if (!this.isPunct("("))
|
|
1121
|
+
this.fail("expected '(' and the function's argument types");
|
|
1122
|
+
return { kind: "function", number: n, ...(types ? { types } : {}), function: fn, args: this.parenthesized() };
|
|
1123
|
+
}
|
|
1124
|
+
if (this.accept("STORAGE"))
|
|
1125
|
+
return { kind: "storage", type: this.typeName() };
|
|
1126
|
+
return this.fail("expected OPERATOR, FUNCTION or STORAGE");
|
|
1127
|
+
}
|
|
1128
|
+
operatorClass() {
|
|
1129
|
+
const name = this.qualifiedName("an operator class name");
|
|
1130
|
+
const isDefault = this.accept("DEFAULT");
|
|
1131
|
+
this.expect("FOR");
|
|
1132
|
+
this.expect("TYPE");
|
|
1133
|
+
const type = this.typeName();
|
|
1134
|
+
this.expect("USING");
|
|
1135
|
+
const method = this.nameTok("an index access method").text;
|
|
1136
|
+
const node = { statement: "operatorClass", name, default: isDefault, type, method, items: [] };
|
|
1137
|
+
if (this.accept("FAMILY"))
|
|
1138
|
+
node.family = this.qualifiedName("an operator family name");
|
|
1139
|
+
this.expect("AS");
|
|
1140
|
+
do
|
|
1141
|
+
node.items.push(this.operatorClassItem());
|
|
1142
|
+
while (this.acceptPunct(","));
|
|
1143
|
+
return node;
|
|
1144
|
+
}
|
|
1145
|
+
operatorFamily() {
|
|
1146
|
+
const name = this.qualifiedName("an operator family name");
|
|
1147
|
+
this.expect("USING");
|
|
1148
|
+
return { statement: "operatorFamily", name, method: this.nameTok("an index access method").text };
|
|
1149
|
+
}
|
|
1150
|
+
/** After `CREATE TEXT SEARCH`: a dictionary or a configuration. A parser and a template are C code. */
|
|
1151
|
+
textSearch() {
|
|
1152
|
+
if (this.accept("DICTIONARY")) {
|
|
1153
|
+
const name = this.qualifiedName("a text search dictionary name");
|
|
1154
|
+
const options = this.definition("a dictionary option");
|
|
1155
|
+
// The options past TEMPLATE belong to the template; a name given twice is still wrong.
|
|
1156
|
+
this.checkDefinition(options, options.map((o) => o.name), ["template"], "a text search dictionary");
|
|
1157
|
+
return { statement: "textSearchDictionary", name, options };
|
|
1158
|
+
}
|
|
1159
|
+
if (this.accept("CONFIGURATION")) {
|
|
1160
|
+
const name = this.qualifiedName("a text search configuration name");
|
|
1161
|
+
const options = this.definition("a configuration option");
|
|
1162
|
+
this.checkDefinition(options, ["parser", "copy"], [], "a text search configuration");
|
|
1163
|
+
if (options.some((o) => o.name === "copy"))
|
|
1164
|
+
this.fail("expected PARSER (COPY copies mappings chant does not read; name the parser and write the mappings)", this.tokens[options.find((o) => o.name === "copy").nameSpan.from]);
|
|
1165
|
+
if (!options.some((o) => o.name === "parser"))
|
|
1166
|
+
this.fail("expected PARSER (a configuration needs the parser that splits text into tokens)", this.lastSeen());
|
|
1167
|
+
return { statement: "textSearchConfiguration", name, options };
|
|
1168
|
+
}
|
|
1169
|
+
return this.fail("expected DICTIONARY or CONFIGURATION (a text search parser and a text search template are C code an extension installs)");
|
|
1170
|
+
}
|
|
1171
|
+
/** `ALTER TEXT SEARCH CONFIGURATION name ADD MAPPING FOR token_type [, ...] WITH dictionary [, ...]`. */
|
|
1172
|
+
textSearchMapping() {
|
|
1173
|
+
const name = this.qualifiedName("a text search configuration name");
|
|
1174
|
+
if (!this.acceptSeq("ADD", "MAPPING"))
|
|
1175
|
+
this.fail("expected ADD MAPPING (a configuration's mappings are declared with ADD MAPPING after its CREATE)");
|
|
1176
|
+
this.expect("FOR");
|
|
1177
|
+
const node = { statement: "textSearchMapping", name, tokens: [], dictionaries: [] };
|
|
1178
|
+
do
|
|
1179
|
+
node.tokens.push((({ text, span }) => ({ name: text, span }))(this.nameTok("a token type")));
|
|
1180
|
+
while (this.acceptPunct(","));
|
|
1181
|
+
this.expect("WITH");
|
|
1182
|
+
do
|
|
1183
|
+
node.dictionaries.push(this.qualifiedName("a text search dictionary name"));
|
|
1184
|
+
while (this.acceptPunct(","));
|
|
1185
|
+
return node;
|
|
1186
|
+
}
|
|
1187
|
+
/** `CREATE FOREIGN TABLE`: the column list form. A key, a generated column, INHERITS and PARTITION OF are not declared. */
|
|
1188
|
+
foreignTable() {
|
|
1189
|
+
const ifNotExists = this.ifNotExists();
|
|
1190
|
+
const name = this.qualifiedName("a foreign table name");
|
|
1191
|
+
if (kw(this.peek(), "PARTITION"))
|
|
1192
|
+
this.fail("expected the column list (a foreign table that is a partition, PARTITION OF, is not declared here)");
|
|
1193
|
+
const node = { statement: "foreignTable", ifNotExists, name, columns: [], constraints: [], server: { pieces: [], span: this.span(this.idx(), []) }, options: [] };
|
|
1194
|
+
this.expectPunct("(");
|
|
1195
|
+
if (!this.acceptPunct(")")) {
|
|
1196
|
+
for (;;) {
|
|
1197
|
+
if (kw(this.peek(), "LIKE"))
|
|
1198
|
+
this.fail("LIKE is not declared on a foreign table; write its columns");
|
|
1199
|
+
const c = this.tableConstraint();
|
|
1200
|
+
if (c)
|
|
1201
|
+
node.constraints.push(c);
|
|
1202
|
+
else
|
|
1203
|
+
node.columns.push(this.column(true, true));
|
|
1204
|
+
if (this.acceptPunct(","))
|
|
1205
|
+
continue;
|
|
1206
|
+
this.expectPunct(")");
|
|
1207
|
+
break;
|
|
1208
|
+
}
|
|
1209
|
+
}
|
|
1210
|
+
if (kw(this.peek(), "INHERITS"))
|
|
1211
|
+
this.fail("expected SERVER (INHERITS is not declared on a foreign table)");
|
|
1212
|
+
this.expect("SERVER");
|
|
1213
|
+
node.server = this.databaseName("a server name");
|
|
1214
|
+
if (this.accept("OPTIONS"))
|
|
1215
|
+
node.options = this.genericOptions();
|
|
1216
|
+
// A foreign table has CHECK and NOT NULL constraints and a default; Postgres refuses the rest, and a generated column is not read.
|
|
1217
|
+
const bad = (c, what) => this.fail(`${what} (a foreign table holds CHECK and NOT NULL constraints only; the remote server keeps the rest)`, this.tokens[c.span.from]);
|
|
1218
|
+
for (const c of [...node.constraints, ...node.columns.flatMap((x) => x.constraints)]) {
|
|
1219
|
+
if (c.kind !== "CHECK" && c.kind !== "NOT NULL")
|
|
1220
|
+
bad(c, `expected CHECK or NOT NULL, not ${c.kind}`);
|
|
1221
|
+
if (c.notEnforced !== undefined)
|
|
1222
|
+
bad(c, "ENFORCED and NOT ENFORCED are 18's and are not declared on a foreign table");
|
|
1223
|
+
}
|
|
1224
|
+
for (const col of node.columns)
|
|
1225
|
+
if (col.generated)
|
|
1226
|
+
this.fail(`expected no generated column (${col.name} is GENERATED ${col.generated.kind.toUpperCase()}; a foreign table's generated columns are not declared)`, this.tokens[col.nameSpan.from]);
|
|
1227
|
+
return node;
|
|
1228
|
+
}
|
|
1077
1229
|
statistics() {
|
|
1078
1230
|
const ifNotExists = this.ifNotExists();
|
|
1079
1231
|
const name = this.qualifiedName("a statistics name");
|
|
@@ -1928,6 +2080,28 @@ class PgParser extends SqlCursor {
|
|
|
1928
2080
|
objectType = "FOREIGN DATA WRAPPER";
|
|
1929
2081
|
target = this.qualifiedName("a foreign data wrapper name");
|
|
1930
2082
|
}
|
|
2083
|
+
else if (kw(this.peek(), "OPERATOR") && kw(this.peek(1), "CLASS", "FAMILY") && !this.isPunct(".", 2)) {
|
|
2084
|
+
this.p++;
|
|
2085
|
+
objectType = `OPERATOR ${this.next().text.toUpperCase()}`;
|
|
2086
|
+
target = this.qualifiedName(`an ${objectType.toLowerCase()} name`);
|
|
2087
|
+
this.expect("USING");
|
|
2088
|
+
const using = this.nameTok("an index access method").text;
|
|
2089
|
+
this.expect("IS");
|
|
2090
|
+
const node = { statement: "comment", objectType, target, using };
|
|
2091
|
+
if (!this.accept("NULL"))
|
|
2092
|
+
node.text = this.commentText();
|
|
2093
|
+
return node;
|
|
2094
|
+
}
|
|
2095
|
+
else if (this.acceptSeq("TEXT", "SEARCH")) {
|
|
2096
|
+
if (!this.accept("CONFIGURATION", "DICTIONARY"))
|
|
2097
|
+
this.fail("expected CONFIGURATION or DICTIONARY");
|
|
2098
|
+
objectType = `TEXT SEARCH ${this.lastSeen().text.toUpperCase()}`;
|
|
2099
|
+
target = this.qualifiedName(`a ${objectType.toLowerCase()} name`);
|
|
2100
|
+
}
|
|
2101
|
+
else if (this.acceptSeq("FOREIGN", "TABLE")) {
|
|
2102
|
+
objectType = "FOREIGN TABLE";
|
|
2103
|
+
target = this.qualifiedName("a foreign table name");
|
|
2104
|
+
}
|
|
1931
2105
|
else if (this.accept("OPERATOR")) {
|
|
1932
2106
|
objectType = "OPERATOR";
|
|
1933
2107
|
target = this.operatorName();
|
|
@@ -1955,7 +2129,7 @@ class PgParser extends SqlCursor {
|
|
|
1955
2129
|
objectType = this.tokens[this.idx(-1)].text.toUpperCase();
|
|
1956
2130
|
}
|
|
1957
2131
|
else
|
|
1958
|
-
return this.fail("expected TABLE, COLUMN, INDEX, VIEW, MATERIALIZED VIEW, SEQUENCE, TYPE, DOMAIN, SCHEMA, EXTENSION, FUNCTION, PROCEDURE, AGGREGATE, COLLATION, CAST, OPERATOR, TRIGGER, EVENT TRIGGER, STATISTICS, FOREIGN DATA WRAPPER, SERVER, PUBLICATION, POLICY, ROLE or CONSTRAINT");
|
|
2132
|
+
return this.fail("expected TABLE, COLUMN, INDEX, VIEW, MATERIALIZED VIEW, SEQUENCE, TYPE, DOMAIN, SCHEMA, EXTENSION, FUNCTION, PROCEDURE, AGGREGATE, COLLATION, CAST, OPERATOR, TRIGGER, EVENT TRIGGER, STATISTICS, FOREIGN TABLE, FOREIGN DATA WRAPPER, SERVER, PUBLICATION, OPERATOR CLASS, OPERATOR FAMILY, TEXT SEARCH CONFIGURATION, TEXT SEARCH DICTIONARY, POLICY, ROLE or CONSTRAINT");
|
|
1959
2133
|
target = this.qualifiedName("an object name");
|
|
1960
2134
|
if ((objectType === "FUNCTION" || objectType === "PROCEDURE") && this.isPunct("("))
|
|
1961
2135
|
args = this.parenthesized();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deep.d.ts","sourceRoot":"","sources":["../../../src/postgres/plan/deep.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAmB,KAAK,qBAAqB,EAAwD,MAAM,mCAAmC,CAAC;AAEtJ,OAAO,EAAyC,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAA2B,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI7E,OAAO,EAAkD,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAMrG,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"deep.d.ts","sourceRoot":"","sources":["../../../src/postgres/plan/deep.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAmB,KAAK,qBAAqB,EAAwD,MAAM,mCAAmC,CAAC;AAEtJ,OAAO,EAAyC,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAA2B,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI7E,OAAO,EAAkD,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAMrG,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAqCrC,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,CAAC,EAAE,YAAY,GAAG,KAAK,CAGhD;AA6GD,uGAAuG;AACvG,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,GAAG,KAAK,CA4EpH;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE;IACP,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;CAC/E,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,GACnC,OAAO,CAAC,qBAAqB,CAAC,CAyEhC"}
|