@query-doctor/core 0.5.0 → 0.6.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/dist/index.d.cts CHANGED
@@ -550,6 +550,7 @@ declare class IndexOptimizer {
550
550
  private indexesToCreate;
551
551
  private toDefinition;
552
552
  private toGinDefinition;
553
+ private toExpressionDefinition;
553
554
  private groupGinCandidatesByColumn;
554
555
  private ginIndexAlreadyExists;
555
556
  /**
@@ -591,6 +592,7 @@ type RootIndexCandidate = {
591
592
  nulltest?: NullTestType;
592
593
  };
593
594
  jsonbOperator?: JsonbOperator;
595
+ jsonbExtraction?: string;
594
596
  };
595
597
  type PermutedIndexCandidate = {
596
598
  schema: string;
@@ -604,7 +606,7 @@ declare const PROCEED: unique symbol;
604
606
  declare const SKIP: unique symbol;
605
607
  //#endregion
606
608
  //#region src/sql/nudges.d.ts
607
- type NudgeKind = "LARGE_IMPROVEMENT_FOUND" | "SMALL_IMPROVEMENT_FOUND" | "AVOID_SELECT_STAR" | "AVOID_FUNCTIONS_ON_COLUMNS_IN_WHERE" | "MISSING_WHERE_CLAUSE" | "MISSING_LIMIT_CLAUSE" | "USE_IS_NULL_NOT_EQUALS" | "AVOID_DISTINCT_WITHOUT_REASON" | "MISSING_JOIN_CONDITION" | "AVOID_LEADING_WILDCARD_LIKE" | "CONSIDER_IN_INSTEAD_OF_MANY_ORS" | "REPLACE_LARGE_IN_TUPLE_WITH_ANY_ARRAY" | "PREFER_NOT_EXISTS_OVER_NOT_IN" | "AVOID_ORDER_BY_RANDOM" | "PREFER_FILTER_OVER_CASE_IN_AGGREGATE" | "PREFER_UNION_ALL_OVER_UNION" | "NULLS_FIRST_IN_DESC_ORDER" | "AVOID_SCALAR_SUBQUERY_IN_SELECT" | "USE_EXISTS_NOT_COUNT_FOR_EXISTENCE_CHECK" | "PREFER_COUNT_STAR_OVER_COUNT_COLUMN" | "PREFER_WHERE_OVER_HAVING_FOR_NON_AGGREGATES";
609
+ type NudgeKind = "LARGE_IMPROVEMENT_FOUND" | "SMALL_IMPROVEMENT_FOUND" | "AVOID_SELECT_STAR" | "AVOID_FUNCTIONS_ON_COLUMNS_IN_WHERE" | "MISSING_WHERE_CLAUSE" | "MISSING_LIMIT_CLAUSE" | "USE_IS_NULL_NOT_EQUALS" | "AVOID_DISTINCT_WITHOUT_REASON" | "MISSING_JOIN_CONDITION" | "AVOID_LEADING_WILDCARD_LIKE" | "CONSIDER_IN_INSTEAD_OF_MANY_ORS" | "REPLACE_LARGE_IN_TUPLE_WITH_ANY_ARRAY" | "PREFER_NOT_EXISTS_OVER_NOT_IN" | "AVOID_ORDER_BY_RANDOM" | "PREFER_FILTER_OVER_CASE_IN_AGGREGATE" | "PREFER_UNION_ALL_OVER_UNION" | "NULLS_FIRST_IN_DESC_ORDER" | "AVOID_SCALAR_SUBQUERY_IN_SELECT" | "USE_EXISTS_NOT_COUNT_FOR_EXISTENCE_CHECK" | "PREFER_COUNT_STAR_OVER_COUNT_COLUMN" | "PREFER_WHERE_OVER_HAVING_FOR_NON_AGGREGATES" | "CONSIDER_JSONB_CONTAINMENT_OPERATOR";
608
610
  type Nudge = {
609
611
  kind: NudgeKind;
610
612
  severity: "CRITICAL" | "WARNING" | "INFO";
@@ -679,8 +681,9 @@ type DiscoveredColumnReference = {
679
681
  nulltest?: NullTestType;
680
682
  };
681
683
  jsonbOperator?: JsonbOperator;
684
+ jsonbExtraction?: string;
682
685
  };
683
- type JsonbOperator = "@>" | "?" | "?|" | "?&";
686
+ type JsonbOperator = "@>" | "?" | "?|" | "?&" | "@@" | "@?";
684
687
  /** A function defined by @pgsql/parser */
685
688
  type Parser = (query: string) => Promise<unknown>;
686
689
  type TableReference = {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/sql/pg-identifier.ts","../src/sql/builder.ts","../src/sql/database.ts","../src/optimizer/statistics.ts","../src/optimizer/genalgo.ts","../src/sql/nudges.ts","../src/sql/walker.ts","../src/sql/analyzer.ts","../src/sql/indexes.ts","../src/optimizer/pss-rewriter.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/sql/pg-identifier.ts","../src/sql/builder.ts","../src/sql/database.ts","../src/optimizer/statistics.ts","../src/optimizer/genalgo.ts","../src/sql/nudges.ts","../src/sql/walker.ts","../src/sql/analyzer.ts","../src/sql/indexes.ts","../src/optimizer/pss-rewriter.ts"],"mappings":"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"}
package/dist/index.d.mts CHANGED
@@ -550,6 +550,7 @@ declare class IndexOptimizer {
550
550
  private indexesToCreate;
551
551
  private toDefinition;
552
552
  private toGinDefinition;
553
+ private toExpressionDefinition;
553
554
  private groupGinCandidatesByColumn;
554
555
  private ginIndexAlreadyExists;
555
556
  /**
@@ -591,6 +592,7 @@ type RootIndexCandidate = {
591
592
  nulltest?: NullTestType;
592
593
  };
593
594
  jsonbOperator?: JsonbOperator;
595
+ jsonbExtraction?: string;
594
596
  };
595
597
  type PermutedIndexCandidate = {
596
598
  schema: string;
@@ -604,7 +606,7 @@ declare const PROCEED: unique symbol;
604
606
  declare const SKIP: unique symbol;
605
607
  //#endregion
606
608
  //#region src/sql/nudges.d.ts
607
- type NudgeKind = "LARGE_IMPROVEMENT_FOUND" | "SMALL_IMPROVEMENT_FOUND" | "AVOID_SELECT_STAR" | "AVOID_FUNCTIONS_ON_COLUMNS_IN_WHERE" | "MISSING_WHERE_CLAUSE" | "MISSING_LIMIT_CLAUSE" | "USE_IS_NULL_NOT_EQUALS" | "AVOID_DISTINCT_WITHOUT_REASON" | "MISSING_JOIN_CONDITION" | "AVOID_LEADING_WILDCARD_LIKE" | "CONSIDER_IN_INSTEAD_OF_MANY_ORS" | "REPLACE_LARGE_IN_TUPLE_WITH_ANY_ARRAY" | "PREFER_NOT_EXISTS_OVER_NOT_IN" | "AVOID_ORDER_BY_RANDOM" | "PREFER_FILTER_OVER_CASE_IN_AGGREGATE" | "PREFER_UNION_ALL_OVER_UNION" | "NULLS_FIRST_IN_DESC_ORDER" | "AVOID_SCALAR_SUBQUERY_IN_SELECT" | "USE_EXISTS_NOT_COUNT_FOR_EXISTENCE_CHECK" | "PREFER_COUNT_STAR_OVER_COUNT_COLUMN" | "PREFER_WHERE_OVER_HAVING_FOR_NON_AGGREGATES";
609
+ type NudgeKind = "LARGE_IMPROVEMENT_FOUND" | "SMALL_IMPROVEMENT_FOUND" | "AVOID_SELECT_STAR" | "AVOID_FUNCTIONS_ON_COLUMNS_IN_WHERE" | "MISSING_WHERE_CLAUSE" | "MISSING_LIMIT_CLAUSE" | "USE_IS_NULL_NOT_EQUALS" | "AVOID_DISTINCT_WITHOUT_REASON" | "MISSING_JOIN_CONDITION" | "AVOID_LEADING_WILDCARD_LIKE" | "CONSIDER_IN_INSTEAD_OF_MANY_ORS" | "REPLACE_LARGE_IN_TUPLE_WITH_ANY_ARRAY" | "PREFER_NOT_EXISTS_OVER_NOT_IN" | "AVOID_ORDER_BY_RANDOM" | "PREFER_FILTER_OVER_CASE_IN_AGGREGATE" | "PREFER_UNION_ALL_OVER_UNION" | "NULLS_FIRST_IN_DESC_ORDER" | "AVOID_SCALAR_SUBQUERY_IN_SELECT" | "USE_EXISTS_NOT_COUNT_FOR_EXISTENCE_CHECK" | "PREFER_COUNT_STAR_OVER_COUNT_COLUMN" | "PREFER_WHERE_OVER_HAVING_FOR_NON_AGGREGATES" | "CONSIDER_JSONB_CONTAINMENT_OPERATOR";
608
610
  type Nudge = {
609
611
  kind: NudgeKind;
610
612
  severity: "CRITICAL" | "WARNING" | "INFO";
@@ -679,8 +681,9 @@ type DiscoveredColumnReference = {
679
681
  nulltest?: NullTestType;
680
682
  };
681
683
  jsonbOperator?: JsonbOperator;
684
+ jsonbExtraction?: string;
682
685
  };
683
- type JsonbOperator = "@>" | "?" | "?|" | "?&";
686
+ type JsonbOperator = "@>" | "?" | "?|" | "?&" | "@@" | "@?";
684
687
  /** A function defined by @pgsql/parser */
685
688
  type Parser = (query: string) => Promise<unknown>;
686
689
  type TableReference = {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/sql/pg-identifier.ts","../src/sql/builder.ts","../src/sql/database.ts","../src/optimizer/statistics.ts","../src/optimizer/genalgo.ts","../src/sql/nudges.ts","../src/sql/walker.ts","../src/sql/analyzer.ts","../src/sql/indexes.ts","../src/optimizer/pss-rewriter.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/sql/pg-identifier.ts","../src/sql/builder.ts","../src/sql/database.ts","../src/optimizer/statistics.ts","../src/optimizer/genalgo.ts","../src/sql/nudges.ts","../src/sql/walker.ts","../src/sql/analyzer.ts","../src/sql/indexes.ts","../src/optimizer/pss-rewriter.ts"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -200,6 +200,17 @@ function parseNudges(node, stack) {
200
200
  });
201
201
  }
202
202
  }
203
+ if (is$1(node, "FuncCall")) {
204
+ if (stack.some((item) => item === "whereClause") && node.FuncCall.args) {
205
+ const name = getFuncName(node);
206
+ if (name && JSONB_SET_RETURNING_FUNCTIONS.has(name) && containsColumnRef(node.FuncCall.args)) nudges.push({
207
+ kind: "CONSIDER_JSONB_CONTAINMENT_OPERATOR",
208
+ severity: "INFO",
209
+ message: "JSONB set-returning functions (e.g. jsonb_array_elements) cannot be used as an index access path. If the query checks for containment or key existence, GIN-compatible operators (@>, ?, ?|, ?&, @?, @@) may allow index usage.",
210
+ location: node.FuncCall.location
211
+ });
212
+ }
213
+ }
203
214
  if (is$1(node, "A_Expr")) {
204
215
  if (node.A_Expr.kind === "AEXPR_IN") {
205
216
  let list;
@@ -287,6 +298,23 @@ function getStringConstantValue(node) {
287
298
  if (isANode$1(node) && is$1(node, "A_Const") && node.A_Const.sval) return node.A_Const.sval.sval || null;
288
299
  return null;
289
300
  }
301
+ const JSONB_SET_RETURNING_FUNCTIONS = new Set([
302
+ "jsonb_array_elements",
303
+ "json_array_elements",
304
+ "jsonb_array_elements_text",
305
+ "json_array_elements_text",
306
+ "jsonb_each",
307
+ "json_each",
308
+ "jsonb_each_text",
309
+ "json_each_text"
310
+ ]);
311
+ function getFuncName(node) {
312
+ const names = node.FuncCall.funcname;
313
+ if (!names || names.length === 0) return null;
314
+ const last = names[names.length - 1];
315
+ if (isANode$1(last) && is$1(last, "String") && last.String.sval) return last.String.sval;
316
+ return null;
317
+ }
290
318
  function getLastColumnRefField(columnRef) {
291
319
  const fields = columnRef.ColumnRef.fields;
292
320
  if (!fields || fields.length === 0) return null;
@@ -429,6 +457,20 @@ function _defineProperty(e, r, t) {
429
457
 
430
458
  //#endregion
431
459
  //#region src/sql/walker.ts
460
+ const JSONB_EXTRACTION_OPS = new Set(["->", "->>"]);
461
+ const COMPARISON_OPS = new Set([
462
+ "=",
463
+ "<>",
464
+ "!=",
465
+ "<",
466
+ "<=",
467
+ ">",
468
+ ">=",
469
+ "~~",
470
+ "~~*",
471
+ "!~~",
472
+ "!~~*"
473
+ ]);
432
474
  /**
433
475
  * Walks the AST of a sql query and extracts query metadata.
434
476
  * This pattern is used to segregate the mutable state that's more common for the
@@ -509,11 +551,16 @@ var Walker = class Walker {
509
551
  }
510
552
  if (is(node, "A_Expr") && node.A_Expr.kind === "AEXPR_OP") {
511
553
  const opName = node.A_Expr.name?.[0] && is(node.A_Expr.name[0], "String") && node.A_Expr.name[0].String.sval;
512
- if (opName && (opName === "@>" || opName === "?" || opName === "?|" || opName === "?&")) {
554
+ if (opName && (opName === "@>" || opName === "?" || opName === "?|" || opName === "?&" || opName === "@@" || opName === "@?")) {
513
555
  const jsonbOperator = opName;
514
556
  if (node.A_Expr.lexpr && is(node.A_Expr.lexpr, "ColumnRef")) this.add(node.A_Expr.lexpr, { jsonbOperator });
515
557
  if (node.A_Expr.rexpr && is(node.A_Expr.rexpr, "ColumnRef")) this.add(node.A_Expr.rexpr, { jsonbOperator });
516
558
  }
559
+ if (opName && COMPARISON_OPS.has(opName)) for (const operand of [node.A_Expr.lexpr, node.A_Expr.rexpr]) {
560
+ if (!operand) continue;
561
+ const extraction = extractJsonbPath(operand);
562
+ if (extraction) this.add(extraction.columnRef, { jsonbExtraction: extraction.expression });
563
+ }
517
564
  }
518
565
  if (is(node, "ColumnRef")) {
519
566
  for (let i = 0; i < stack.length; i++) {
@@ -597,6 +644,7 @@ var Walker = class Walker {
597
644
  if (options?.sort) ref.sort = options.sort;
598
645
  if (options?.where) ref.where = options.where;
599
646
  if (options?.jsonbOperator) ref.jsonbOperator = options.jsonbOperator;
647
+ if (options?.jsonbExtraction) ref.jsonbExtraction = options.jsonbExtraction;
600
648
  this.highlights.push(ref);
601
649
  }
602
650
  /**
@@ -664,6 +712,57 @@ function isANode(node) {
664
712
  const keys = Object.keys(node);
665
713
  return keys.length === 1 && /^[A-Z]/.test(keys[0]);
666
714
  }
715
+ /**
716
+ * Given an operand of a comparison (e.g. the left side of `=`), check whether
717
+ * it is a JSONB path extraction expression such as `data->>'email'` or
718
+ * `(data->>'age')::int`. If so, return the root ColumnRef (for the walker to
719
+ * register) and the full expression string (for use in the expression index).
720
+ *
721
+ * Handles:
722
+ * - `data->>'email'` — simple extraction
723
+ * - `(data->>'age')::int` — extraction with cast
724
+ * - `data->'addr'->>'city'` — chained extraction
725
+ * - `t.data->>'email'` — table-qualified (strips qualifier from expression)
726
+ */
727
+ function extractJsonbPath(node) {
728
+ let exprNode = node;
729
+ if (is(exprNode, "TypeCast") && exprNode.TypeCast.arg) exprNode = exprNode.TypeCast.arg;
730
+ if (!is(exprNode, "A_Expr") || exprNode.A_Expr.kind !== "AEXPR_OP") return;
731
+ const innerOp = exprNode.A_Expr.name?.[0] && is(exprNode.A_Expr.name[0], "String") && exprNode.A_Expr.name[0].String.sval;
732
+ if (!innerOp || !JSONB_EXTRACTION_OPS.has(innerOp)) return;
733
+ const rootCol = findRootColumnRef(exprNode);
734
+ if (!rootCol) return;
735
+ const cloned = JSON.parse(JSON.stringify(node));
736
+ stripTableQualifiers(cloned);
737
+ return {
738
+ columnRef: rootCol,
739
+ expression: deparseSync(cloned)
740
+ };
741
+ }
742
+ /**
743
+ * Walk the left side of a chain of `->` / `->>` operators to find the
744
+ * root ColumnRef (the JSONB column itself).
745
+ */
746
+ function findRootColumnRef(node) {
747
+ if (is(node, "ColumnRef")) return node;
748
+ if (is(node, "A_Expr") && node.A_Expr.lexpr) return findRootColumnRef(node.A_Expr.lexpr);
749
+ if (is(node, "TypeCast") && node.TypeCast.arg) return findRootColumnRef(node.TypeCast.arg);
750
+ }
751
+ /**
752
+ * Remove table/schema qualifiers from ColumnRef nodes inside the
753
+ * expression so the deparsed expression contains only the column name.
754
+ * e.g. `t.data->>'email'` → `data->>'email'`
755
+ */
756
+ function stripTableQualifiers(node) {
757
+ if (typeof node !== "object" || node === null) return;
758
+ if ("ColumnRef" in node && node.ColumnRef?.fields) {
759
+ const fields = node.ColumnRef.fields;
760
+ if (fields.length > 1) node.ColumnRef.fields = [fields[fields.length - 1]];
761
+ return;
762
+ }
763
+ for (const value of Object.values(node)) if (Array.isArray(value)) for (const item of value) stripTableQualifiers(item);
764
+ else if (typeof value === "object" && value !== null) stripTableQualifiers(value);
765
+ }
667
766
 
668
767
  //#endregion
669
768
  //#region src/sql/analyzer.ts
@@ -705,10 +804,11 @@ var Analyzer = class {
705
804
  const queryBeforeMatch = currQuery.slice(0, highlight.position.start);
706
805
  const queryAfterToken = currQuery.slice(highlight.position.end);
707
806
  currQuery = `${queryBeforeMatch}${color(queryRepr)}${this.colorizeKeywords(queryAfterToken, color)}`;
708
- if (indexRepresentations.has(queryRepr)) skip = true;
807
+ const reprKey = highlight.jsonbExtraction ? `${queryRepr}::${highlight.jsonbExtraction}` : queryRepr;
808
+ if (indexRepresentations.has(reprKey)) skip = true;
709
809
  if (!skip) {
710
810
  indexesToCheck.push(highlight);
711
- indexRepresentations.add(queryRepr);
811
+ indexRepresentations.add(reprKey);
712
812
  }
713
813
  }
714
814
  const referencedTables = [];
@@ -741,7 +841,8 @@ var Analyzer = class {
741
841
  const allIndexes = [];
742
842
  const seenIndexes = /* @__PURE__ */ new Set();
743
843
  function addIndex(index) {
744
- const key = `"${index.schema}":"${index.table}":"${index.column}"`;
844
+ const extractionSuffix = index.jsonbExtraction ? `:"${index.jsonbExtraction}"` : "";
845
+ const key = `"${index.schema}":"${index.table}":"${index.column}"${extractionSuffix}`;
745
846
  if (seenIndexes.has(key)) return;
746
847
  seenIndexes.add(key);
747
848
  allIndexes.push(index);
@@ -765,6 +866,7 @@ var Analyzer = class {
765
866
  if (colReference.sort) index.sort = colReference.sort;
766
867
  if (colReference.where) index.where = colReference.where;
767
868
  if (colReference.jsonbOperator) index.jsonbOperator = colReference.jsonbOperator;
869
+ if (colReference.jsonbExtraction) index.jsonbExtraction = colReference.jsonbExtraction;
768
870
  addIndex(index);
769
871
  }
770
872
  } else if (tableReference) {
@@ -781,6 +883,7 @@ var Analyzer = class {
781
883
  if (colReference.sort) index.sort = colReference.sort;
782
884
  if (colReference.where) index.where = colReference.where;
783
885
  if (colReference.jsonbOperator) index.jsonbOperator = colReference.jsonbOperator;
886
+ if (colReference.jsonbExtraction) index.jsonbExtraction = colReference.jsonbExtraction;
784
887
  addIndex(index);
785
888
  }
786
889
  } else if (fullReference) {
@@ -793,6 +896,7 @@ var Analyzer = class {
793
896
  if (colReference.sort) index.sort = colReference.sort;
794
897
  if (colReference.where) index.where = colReference.where;
795
898
  if (colReference.jsonbOperator) index.jsonbOperator = colReference.jsonbOperator;
899
+ if (colReference.jsonbExtraction) index.jsonbExtraction = colReference.jsonbExtraction;
796
900
  addIndex(index);
797
901
  } else {
798
902
  console.error("Column reference has too many parts. The query is malformed", colReference);
@@ -1343,7 +1447,8 @@ var IndexOptimizer = class IndexOptimizer {
1343
1447
  * Derive the list of indexes [tableA(X, Y, Z), tableB(H, I, J)]
1344
1448
  **/
1345
1449
  indexesToCreate(rootCandidates) {
1346
- const btreeCandidates = rootCandidates.filter((c) => !c.jsonbOperator);
1450
+ const expressionCandidates = rootCandidates.filter((c) => c.jsonbExtraction);
1451
+ const btreeCandidates = rootCandidates.filter((c) => !c.jsonbOperator && !c.jsonbExtraction);
1347
1452
  const ginCandidates = rootCandidates.filter((c) => c.jsonbOperator);
1348
1453
  const nextStage = [];
1349
1454
  const permutedIndexes = this.groupPotentialIndexColumnsByTable(btreeCandidates);
@@ -1374,7 +1479,7 @@ var IndexOptimizer = class IndexOptimizer {
1374
1479
  const { schema: rawSchema, table: rawTable, column, operators } = group;
1375
1480
  const schema = PgIdentifier.fromString(rawSchema);
1376
1481
  const table = PgIdentifier.fromString(rawTable);
1377
- const opclass = operators.some((op) => op === "?" || op === "?|" || op === "?&") ? void 0 : "jsonb_path_ops";
1482
+ const opclass = operators.some((op) => op !== "@>") ? void 0 : "jsonb_path_ops";
1378
1483
  if (this.ginIndexAlreadyExists(table.toString(), column)) continue;
1379
1484
  const indexName = this.indexName();
1380
1485
  const candidate = {
@@ -1398,6 +1503,28 @@ var IndexOptimizer = class IndexOptimizer {
1398
1503
  opclass
1399
1504
  });
1400
1505
  }
1506
+ const seenExpressions = /* @__PURE__ */ new Set();
1507
+ for (const candidate of expressionCandidates) {
1508
+ const expression = candidate.jsonbExtraction;
1509
+ const key = `${candidate.schema}.${candidate.table}.${expression}`;
1510
+ if (seenExpressions.has(key)) continue;
1511
+ seenExpressions.add(key);
1512
+ const schema = PgIdentifier.fromString(candidate.schema);
1513
+ const table = PgIdentifier.fromString(candidate.table);
1514
+ const indexName = this.indexName();
1515
+ const definition = this.toExpressionDefinition({
1516
+ table,
1517
+ schema,
1518
+ expression
1519
+ });
1520
+ nextStage.push({
1521
+ name: indexName,
1522
+ schema: schema.toString(),
1523
+ table: table.toString(),
1524
+ columns: [candidate],
1525
+ definition
1526
+ });
1527
+ }
1401
1528
  return nextStage;
1402
1529
  }
1403
1530
  toDefinition({ schema, table, columns }) {
@@ -1428,6 +1555,12 @@ var IndexOptimizer = class IndexOptimizer {
1428
1555
  const opclassSuffix = opclass ? ` ${opclass}` : "";
1429
1556
  return `${fullyQualifiedTable} using gin (${column}${opclassSuffix})`;
1430
1557
  }
1558
+ toExpressionDefinition({ schema, table, expression }) {
1559
+ let fullyQualifiedTable;
1560
+ if (schema.toString() === "public") fullyQualifiedTable = table;
1561
+ else fullyQualifiedTable = PgIdentifier.fromParts(schema, table);
1562
+ return `${fullyQualifiedTable}((${expression}))`;
1563
+ }
1431
1564
  groupGinCandidatesByColumn(candidates) {
1432
1565
  const groups = /* @__PURE__ */ new Map();
1433
1566
  for (const c of candidates) {
@@ -2087,6 +2220,7 @@ var Statistics = class Statistics {
2087
2220
  ON n.oid = cl.relnamespace
2088
2221
  WHERE c.table_name NOT LIKE 'pg_%'
2089
2222
  AND n.nspname <> 'information_schema'
2223
+ AND n.nspname NOT IN ('tiger', 'tiger_data', 'topology')
2090
2224
  AND c.table_name NOT IN ('pg_stat_statements', 'pg_stat_statements_info')
2091
2225
  GROUP BY c.table_name, c.table_schema, cl.reltuples, cl.relpages, cl.relallvisible, n.nspname
2092
2226
  ),
@@ -2108,6 +2242,7 @@ var Statistics = class Statistics {
2108
2242
  JOIN pg_namespace n ON n.oid = t.relnamespace
2109
2243
  WHERE t.relname NOT LIKE 'pg_%'
2110
2244
  AND n.nspname <> 'information_schema'
2245
+ AND n.nspname NOT IN ('tiger', 'tiger_data', 'topology')
2111
2246
  GROUP BY t.relname
2112
2247
  )
2113
2248
  SELECT json_agg(