@query-doctor/core 0.4.1-rc.2 → 0.4.1-rc.4

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
@@ -553,6 +553,7 @@ declare class IndexOptimizer {
553
553
  private toDefinition;
554
554
  private toGinDefinition;
555
555
  private toGistDefinition;
556
+ private toExpressionDefinition;
556
557
  private groupGinCandidatesByColumn;
557
558
  private ginIndexAlreadyExists;
558
559
  private groupGistCandidatesByColumn;
@@ -597,6 +598,7 @@ type RootIndexCandidate = {
597
598
  };
598
599
  jsonbOperator?: JsonbOperator;
599
600
  gistOperator?: GistOperator;
601
+ jsonbExtraction?: string;
600
602
  };
601
603
  type PermutedIndexCandidate = {
602
604
  schema: string;
@@ -610,7 +612,7 @@ declare const PROCEED: unique symbol;
610
612
  declare const SKIP: unique symbol;
611
613
  //#endregion
612
614
  //#region src/sql/nudges.d.ts
613
- 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" | "PREFER_UNION_ALL_OVER_UNION" | "AVOID_ORDER_BY_RANDOM" | "AVOID_OFFSET_FOR_PAGINATION" | "PREFER_COUNT_STAR_OVER_COUNT_COLUMN" | "USE_EXISTS_NOT_COUNT_FOR_EXISTENCE_CHECK" | "PREFER_WHERE_OVER_HAVING_FOR_NON_AGGREGATES" | "PREFER_FILTER_OVER_CASE_IN_AGGREGATE" | "CONSIDER_GIST_INDEX" | "NULLS_FIRST_IN_DESC_ORDER" | "CONSIDER_EXPRESSION_INDEX_FOR_JSONB_EXTRACTION" | "AVOID_EXPRESSIONS_ON_COLUMNS_IN_WHERE" | "AVOID_SCALAR_SUBQUERY_IN_SELECT" | "NOOP_ORDER_BY" | "UPGRADE_DISTINCT_PG17" | "INDEX_ONLY_SCAN_HEAP_FETCHES" | "FLATTEN_NOT_EXISTS_OR" | "AVOID_SORTING_ON_GENERATED_VALUES";
615
+ 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" | "PREFER_UNION_ALL_OVER_UNION" | "AVOID_ORDER_BY_RANDOM" | "AVOID_OFFSET_FOR_PAGINATION" | "PREFER_COUNT_STAR_OVER_COUNT_COLUMN" | "USE_EXISTS_NOT_COUNT_FOR_EXISTENCE_CHECK" | "PREFER_WHERE_OVER_HAVING_FOR_NON_AGGREGATES" | "PREFER_FILTER_OVER_CASE_IN_AGGREGATE" | "CONSIDER_GIST_INDEX" | "NULLS_FIRST_IN_DESC_ORDER" | "CONSIDER_EXPRESSION_INDEX_FOR_JSONB_EXTRACTION" | "AVOID_EXPRESSIONS_ON_COLUMNS_IN_WHERE" | "AVOID_SCALAR_SUBQUERY_IN_SELECT" | "NOOP_ORDER_BY" | "UPGRADE_DISTINCT_PG17" | "INDEX_ONLY_SCAN_HEAP_FETCHES" | "FLATTEN_NOT_EXISTS_OR" | "AVOID_SORTING_ON_GENERATED_VALUES" | "CONSIDER_JSONB_CONTAINMENT_OPERATOR";
614
616
  type Nudge = {
615
617
  kind: NudgeKind;
616
618
  severity: "CRITICAL" | "WARNING" | "INFO";
@@ -698,8 +700,9 @@ type DiscoveredColumnReference = {
698
700
  };
699
701
  jsonbOperator?: JsonbOperator;
700
702
  gistOperator?: GistOperator;
703
+ jsonbExtraction?: string;
701
704
  };
702
- type JsonbOperator = "@>" | "?" | "?|" | "?&";
705
+ type JsonbOperator = "@>" | "?" | "?|" | "?&" | "@@" | "@?";
703
706
  type GistOperator = "&&" | "-|-";
704
707
  /** A function defined by @pgsql/parser */
705
708
  type Parser = (query: string) => Promise<unknown>;
@@ -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
@@ -553,6 +553,7 @@ declare class IndexOptimizer {
553
553
  private toDefinition;
554
554
  private toGinDefinition;
555
555
  private toGistDefinition;
556
+ private toExpressionDefinition;
556
557
  private groupGinCandidatesByColumn;
557
558
  private ginIndexAlreadyExists;
558
559
  private groupGistCandidatesByColumn;
@@ -597,6 +598,7 @@ type RootIndexCandidate = {
597
598
  };
598
599
  jsonbOperator?: JsonbOperator;
599
600
  gistOperator?: GistOperator;
601
+ jsonbExtraction?: string;
600
602
  };
601
603
  type PermutedIndexCandidate = {
602
604
  schema: string;
@@ -610,7 +612,7 @@ declare const PROCEED: unique symbol;
610
612
  declare const SKIP: unique symbol;
611
613
  //#endregion
612
614
  //#region src/sql/nudges.d.ts
613
- 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" | "PREFER_UNION_ALL_OVER_UNION" | "AVOID_ORDER_BY_RANDOM" | "AVOID_OFFSET_FOR_PAGINATION" | "PREFER_COUNT_STAR_OVER_COUNT_COLUMN" | "USE_EXISTS_NOT_COUNT_FOR_EXISTENCE_CHECK" | "PREFER_WHERE_OVER_HAVING_FOR_NON_AGGREGATES" | "PREFER_FILTER_OVER_CASE_IN_AGGREGATE" | "CONSIDER_GIST_INDEX" | "NULLS_FIRST_IN_DESC_ORDER" | "CONSIDER_EXPRESSION_INDEX_FOR_JSONB_EXTRACTION" | "AVOID_EXPRESSIONS_ON_COLUMNS_IN_WHERE" | "AVOID_SCALAR_SUBQUERY_IN_SELECT" | "NOOP_ORDER_BY" | "UPGRADE_DISTINCT_PG17" | "INDEX_ONLY_SCAN_HEAP_FETCHES" | "FLATTEN_NOT_EXISTS_OR" | "AVOID_SORTING_ON_GENERATED_VALUES";
615
+ 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" | "PREFER_UNION_ALL_OVER_UNION" | "AVOID_ORDER_BY_RANDOM" | "AVOID_OFFSET_FOR_PAGINATION" | "PREFER_COUNT_STAR_OVER_COUNT_COLUMN" | "USE_EXISTS_NOT_COUNT_FOR_EXISTENCE_CHECK" | "PREFER_WHERE_OVER_HAVING_FOR_NON_AGGREGATES" | "PREFER_FILTER_OVER_CASE_IN_AGGREGATE" | "CONSIDER_GIST_INDEX" | "NULLS_FIRST_IN_DESC_ORDER" | "CONSIDER_EXPRESSION_INDEX_FOR_JSONB_EXTRACTION" | "AVOID_EXPRESSIONS_ON_COLUMNS_IN_WHERE" | "AVOID_SCALAR_SUBQUERY_IN_SELECT" | "NOOP_ORDER_BY" | "UPGRADE_DISTINCT_PG17" | "INDEX_ONLY_SCAN_HEAP_FETCHES" | "FLATTEN_NOT_EXISTS_OR" | "AVOID_SORTING_ON_GENERATED_VALUES" | "CONSIDER_JSONB_CONTAINMENT_OPERATOR";
614
616
  type Nudge = {
615
617
  kind: NudgeKind;
616
618
  severity: "CRITICAL" | "WARNING" | "INFO";
@@ -698,8 +700,9 @@ type DiscoveredColumnReference = {
698
700
  };
699
701
  jsonbOperator?: JsonbOperator;
700
702
  gistOperator?: GistOperator;
703
+ jsonbExtraction?: string;
701
704
  };
702
- type JsonbOperator = "@>" | "?" | "?|" | "?&";
705
+ type JsonbOperator = "@>" | "?" | "?|" | "?&" | "@@" | "@?";
703
706
  type GistOperator = "&&" | "-|-";
704
707
  /** A function defined by @pgsql/parser */
705
708
  type Parser = (query: string) => Promise<unknown>;
@@ -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
@@ -27,7 +27,7 @@ const SPATIAL_FUNCTIONS = new Set([
27
27
  "st_overlaps",
28
28
  "st_touches"
29
29
  ]);
30
- const JSONB_EXTRACTION_OPS = new Set([
30
+ const JSONB_EXTRACTION_OPS$1 = new Set([
31
31
  "->>",
32
32
  "->",
33
33
  "#>>",
@@ -45,7 +45,7 @@ function getAExprOpName(node) {
45
45
  function findExtractionExpr(node) {
46
46
  if (is$1(node, "A_Expr")) {
47
47
  const op = getAExprOpName(node);
48
- if (op && JSONB_EXTRACTION_OPS.has(op)) {
48
+ if (op && JSONB_EXTRACTION_OPS$1.has(op)) {
49
49
  if (node.A_Expr.lexpr && hasColumnRefInNode(node.A_Expr.lexpr)) return node;
50
50
  return null;
51
51
  }
@@ -115,7 +115,7 @@ const findJsonbExtractionInWhere = (whereClause) => {
115
115
  function walk(node) {
116
116
  if (is$1(node, "A_Expr")) {
117
117
  const op = getAExprOpName(node);
118
- if (op && JSONB_EXTRACTION_OPS.has(op)) return;
118
+ if (op && JSONB_EXTRACTION_OPS$1.has(op)) return;
119
119
  if (node.A_Expr.lexpr) emit(node.A_Expr.lexpr);
120
120
  if (node.A_Expr.rexpr) emit(node.A_Expr.rexpr);
121
121
  return;
@@ -371,6 +371,17 @@ function parseNudges(node, stack) {
371
371
  location: node.FuncCall.location
372
372
  });
373
373
  }
374
+ if (is$1(node, "FuncCall")) {
375
+ if (stack.some((item) => item === "whereClause") && node.FuncCall.args) {
376
+ const name = getFuncName(node);
377
+ if (name && JSONB_SET_RETURNING_FUNCTIONS.has(name) && containsColumnRef(node.FuncCall.args)) nudges.push({
378
+ kind: "CONSIDER_JSONB_CONTAINMENT_OPERATOR",
379
+ severity: "INFO",
380
+ 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.",
381
+ location: node.FuncCall.location
382
+ });
383
+ }
384
+ }
374
385
  if (is$1(node, "A_Expr") && node.A_Expr.kind === "AEXPR_OP" && node.A_Expr.name && node.A_Expr.name.length > 0) {
375
386
  const opNode = node.A_Expr.name[0];
376
387
  const op = is$1(opNode, "String") ? opNode.String.sval : null;
@@ -538,6 +549,23 @@ function containsAggregate(node) {
538
549
  for (const child of Object.values(node)) if (containsAggregate(child)) return true;
539
550
  return false;
540
551
  }
552
+ const JSONB_SET_RETURNING_FUNCTIONS = new Set([
553
+ "jsonb_array_elements",
554
+ "json_array_elements",
555
+ "jsonb_array_elements_text",
556
+ "json_array_elements_text",
557
+ "jsonb_each",
558
+ "json_each",
559
+ "jsonb_each_text",
560
+ "json_each_text"
561
+ ]);
562
+ function getFuncName(node) {
563
+ const names = node.FuncCall.funcname;
564
+ if (!names || names.length === 0) return null;
565
+ const last = names[names.length - 1];
566
+ if (isANode$1(last) && is$1(last, "String") && last.String.sval) return last.String.sval;
567
+ return null;
568
+ }
541
569
  function getLastColumnRefField(columnRef) {
542
570
  const fields = columnRef.ColumnRef.fields;
543
571
  if (!fields || fields.length === 0) return null;
@@ -723,6 +751,20 @@ function _defineProperty(e, r, t) {
723
751
 
724
752
  //#endregion
725
753
  //#region src/sql/walker.ts
754
+ const JSONB_EXTRACTION_OPS = new Set(["->", "->>"]);
755
+ const COMPARISON_OPS = new Set([
756
+ "=",
757
+ "<>",
758
+ "!=",
759
+ "<",
760
+ "<=",
761
+ ">",
762
+ ">=",
763
+ "~~",
764
+ "~~*",
765
+ "!~~",
766
+ "!~~*"
767
+ ]);
726
768
  /**
727
769
  * Walks the AST of a sql query and extracts query metadata.
728
770
  * This pattern is used to segregate the mutable state that's more common for the
@@ -803,7 +845,7 @@ var Walker = class Walker {
803
845
  }
804
846
  if (is(node, "A_Expr") && node.A_Expr.kind === "AEXPR_OP") {
805
847
  const opName = node.A_Expr.name?.[0] && is(node.A_Expr.name[0], "String") && node.A_Expr.name[0].String.sval;
806
- if (opName && (opName === "@>" || opName === "?" || opName === "?|" || opName === "?&")) {
848
+ if (opName && (opName === "@>" || opName === "?" || opName === "?|" || opName === "?&" || opName === "@@" || opName === "@?")) {
807
849
  const jsonbOperator = opName;
808
850
  if (node.A_Expr.lexpr && is(node.A_Expr.lexpr, "ColumnRef")) this.add(node.A_Expr.lexpr, { jsonbOperator });
809
851
  if (node.A_Expr.rexpr && is(node.A_Expr.rexpr, "ColumnRef")) this.add(node.A_Expr.rexpr, { jsonbOperator });
@@ -813,6 +855,11 @@ var Walker = class Walker {
813
855
  if (node.A_Expr.lexpr && is(node.A_Expr.lexpr, "ColumnRef")) this.add(node.A_Expr.lexpr, { gistOperator });
814
856
  if (node.A_Expr.rexpr && is(node.A_Expr.rexpr, "ColumnRef")) this.add(node.A_Expr.rexpr, { gistOperator });
815
857
  }
858
+ if (opName && COMPARISON_OPS.has(opName)) for (const operand of [node.A_Expr.lexpr, node.A_Expr.rexpr]) {
859
+ if (!operand) continue;
860
+ const extraction = extractJsonbPath(operand);
861
+ if (extraction) this.add(extraction.columnRef, { jsonbExtraction: extraction.expression });
862
+ }
816
863
  }
817
864
  if (is(node, "ColumnRef")) {
818
865
  for (let i = 0; i < stack.length; i++) {
@@ -897,6 +944,7 @@ var Walker = class Walker {
897
944
  if (options?.where) ref.where = options.where;
898
945
  if (options?.jsonbOperator) ref.jsonbOperator = options.jsonbOperator;
899
946
  if (options?.gistOperator) ref.gistOperator = options.gistOperator;
947
+ if (options?.jsonbExtraction) ref.jsonbExtraction = options.jsonbExtraction;
900
948
  this.highlights.push(ref);
901
949
  }
902
950
  /**
@@ -964,6 +1012,57 @@ function isANode(node) {
964
1012
  const keys = Object.keys(node);
965
1013
  return keys.length === 1 && /^[A-Z]/.test(keys[0]);
966
1014
  }
1015
+ /**
1016
+ * Given an operand of a comparison (e.g. the left side of `=`), check whether
1017
+ * it is a JSONB path extraction expression such as `data->>'email'` or
1018
+ * `(data->>'age')::int`. If so, return the root ColumnRef (for the walker to
1019
+ * register) and the full expression string (for use in the expression index).
1020
+ *
1021
+ * Handles:
1022
+ * - `data->>'email'` — simple extraction
1023
+ * - `(data->>'age')::int` — extraction with cast
1024
+ * - `data->'addr'->>'city'` — chained extraction
1025
+ * - `t.data->>'email'` — table-qualified (strips qualifier from expression)
1026
+ */
1027
+ function extractJsonbPath(node) {
1028
+ let exprNode = node;
1029
+ if (is(exprNode, "TypeCast") && exprNode.TypeCast.arg) exprNode = exprNode.TypeCast.arg;
1030
+ if (!is(exprNode, "A_Expr") || exprNode.A_Expr.kind !== "AEXPR_OP") return;
1031
+ const innerOp = exprNode.A_Expr.name?.[0] && is(exprNode.A_Expr.name[0], "String") && exprNode.A_Expr.name[0].String.sval;
1032
+ if (!innerOp || !JSONB_EXTRACTION_OPS.has(innerOp)) return;
1033
+ const rootCol = findRootColumnRef(exprNode);
1034
+ if (!rootCol) return;
1035
+ const cloned = JSON.parse(JSON.stringify(node));
1036
+ stripTableQualifiers(cloned);
1037
+ return {
1038
+ columnRef: rootCol,
1039
+ expression: deparseSync(cloned)
1040
+ };
1041
+ }
1042
+ /**
1043
+ * Walk the left side of a chain of `->` / `->>` operators to find the
1044
+ * root ColumnRef (the JSONB column itself).
1045
+ */
1046
+ function findRootColumnRef(node) {
1047
+ if (is(node, "ColumnRef")) return node;
1048
+ if (is(node, "A_Expr") && node.A_Expr.lexpr) return findRootColumnRef(node.A_Expr.lexpr);
1049
+ if (is(node, "TypeCast") && node.TypeCast.arg) return findRootColumnRef(node.TypeCast.arg);
1050
+ }
1051
+ /**
1052
+ * Remove table/schema qualifiers from ColumnRef nodes inside the
1053
+ * expression so the deparsed expression contains only the column name.
1054
+ * e.g. `t.data->>'email'` → `data->>'email'`
1055
+ */
1056
+ function stripTableQualifiers(node) {
1057
+ if (typeof node !== "object" || node === null) return;
1058
+ if ("ColumnRef" in node && node.ColumnRef?.fields) {
1059
+ const fields = node.ColumnRef.fields;
1060
+ if (fields.length > 1) node.ColumnRef.fields = [fields[fields.length - 1]];
1061
+ return;
1062
+ }
1063
+ for (const value of Object.values(node)) if (Array.isArray(value)) for (const item of value) stripTableQualifiers(item);
1064
+ else if (typeof value === "object" && value !== null) stripTableQualifiers(value);
1065
+ }
967
1066
 
968
1067
  //#endregion
969
1068
  //#region src/sql/analyzer.ts
@@ -1005,10 +1104,11 @@ var Analyzer = class {
1005
1104
  const queryBeforeMatch = currQuery.slice(0, highlight.position.start);
1006
1105
  const queryAfterToken = currQuery.slice(highlight.position.end);
1007
1106
  currQuery = `${queryBeforeMatch}${color(queryRepr)}${this.colorizeKeywords(queryAfterToken, color)}`;
1008
- if (indexRepresentations.has(queryRepr)) skip = true;
1107
+ const reprKey = highlight.jsonbExtraction ? `${queryRepr}::${highlight.jsonbExtraction}` : queryRepr;
1108
+ if (indexRepresentations.has(reprKey)) skip = true;
1009
1109
  if (!skip) {
1010
1110
  indexesToCheck.push(highlight);
1011
- indexRepresentations.add(queryRepr);
1111
+ indexRepresentations.add(reprKey);
1012
1112
  }
1013
1113
  }
1014
1114
  const referencedTables = [];
@@ -1041,7 +1141,8 @@ var Analyzer = class {
1041
1141
  const allIndexes = [];
1042
1142
  const seenIndexes = /* @__PURE__ */ new Set();
1043
1143
  function addIndex(index) {
1044
- const key = `"${index.schema}":"${index.table}":"${index.column}"`;
1144
+ const extractionSuffix = index.jsonbExtraction ? `:"${index.jsonbExtraction}"` : "";
1145
+ const key = `"${index.schema}":"${index.table}":"${index.column}"${extractionSuffix}`;
1045
1146
  if (seenIndexes.has(key)) return;
1046
1147
  seenIndexes.add(key);
1047
1148
  allIndexes.push(index);
@@ -1066,6 +1167,7 @@ var Analyzer = class {
1066
1167
  if (colReference.where) index.where = colReference.where;
1067
1168
  if (colReference.jsonbOperator) index.jsonbOperator = colReference.jsonbOperator;
1068
1169
  if (colReference.gistOperator) index.gistOperator = colReference.gistOperator;
1170
+ if (colReference.jsonbExtraction) index.jsonbExtraction = colReference.jsonbExtraction;
1069
1171
  addIndex(index);
1070
1172
  }
1071
1173
  } else if (tableReference) {
@@ -1083,6 +1185,7 @@ var Analyzer = class {
1083
1185
  if (colReference.where) index.where = colReference.where;
1084
1186
  if (colReference.jsonbOperator) index.jsonbOperator = colReference.jsonbOperator;
1085
1187
  if (colReference.gistOperator) index.gistOperator = colReference.gistOperator;
1188
+ if (colReference.jsonbExtraction) index.jsonbExtraction = colReference.jsonbExtraction;
1086
1189
  addIndex(index);
1087
1190
  }
1088
1191
  } else if (fullReference) {
@@ -1096,6 +1199,7 @@ var Analyzer = class {
1096
1199
  if (colReference.where) index.where = colReference.where;
1097
1200
  if (colReference.jsonbOperator) index.jsonbOperator = colReference.jsonbOperator;
1098
1201
  if (colReference.gistOperator) index.gistOperator = colReference.gistOperator;
1202
+ if (colReference.jsonbExtraction) index.jsonbExtraction = colReference.jsonbExtraction;
1099
1203
  addIndex(index);
1100
1204
  } else {
1101
1205
  console.error("Column reference has too many parts. The query is malformed", colReference);
@@ -1641,7 +1745,8 @@ var IndexOptimizer = class IndexOptimizer {
1641
1745
  * Derive the list of indexes [tableA(X, Y, Z), tableB(H, I, J)]
1642
1746
  **/
1643
1747
  indexesToCreate(rootCandidates) {
1644
- const btreeCandidates = rootCandidates.filter((c) => !c.jsonbOperator && !c.gistOperator);
1748
+ const expressionCandidates = rootCandidates.filter((c) => c.jsonbExtraction);
1749
+ const btreeCandidates = rootCandidates.filter((c) => !c.jsonbOperator && !c.gistOperator && !c.jsonbExtraction);
1645
1750
  const ginCandidates = rootCandidates.filter((c) => c.jsonbOperator);
1646
1751
  const gistCandidates = rootCandidates.filter((c) => c.gistOperator);
1647
1752
  const nextStage = [];
@@ -1673,7 +1778,7 @@ var IndexOptimizer = class IndexOptimizer {
1673
1778
  const { schema: rawSchema, table: rawTable, column, operators } = group;
1674
1779
  const schema = PgIdentifier.fromString(rawSchema);
1675
1780
  const table = PgIdentifier.fromString(rawTable);
1676
- const opclass = operators.some((op) => op === "?" || op === "?|" || op === "?&") ? void 0 : "jsonb_path_ops";
1781
+ const opclass = operators.some((op) => op !== "@>") ? void 0 : "jsonb_path_ops";
1677
1782
  if (this.ginIndexAlreadyExists(table.toString(), column)) continue;
1678
1783
  const indexName = this.indexName();
1679
1784
  const candidate = {
@@ -1723,6 +1828,28 @@ var IndexOptimizer = class IndexOptimizer {
1723
1828
  indexMethod: "gist"
1724
1829
  });
1725
1830
  }
1831
+ const seenExpressions = /* @__PURE__ */ new Set();
1832
+ for (const candidate of expressionCandidates) {
1833
+ const expression = candidate.jsonbExtraction;
1834
+ const key = `${candidate.schema}.${candidate.table}.${expression}`;
1835
+ if (seenExpressions.has(key)) continue;
1836
+ seenExpressions.add(key);
1837
+ const schema = PgIdentifier.fromString(candidate.schema);
1838
+ const table = PgIdentifier.fromString(candidate.table);
1839
+ const indexName = this.indexName();
1840
+ const definition = this.toExpressionDefinition({
1841
+ table,
1842
+ schema,
1843
+ expression
1844
+ });
1845
+ nextStage.push({
1846
+ name: indexName,
1847
+ schema: schema.toString(),
1848
+ table: table.toString(),
1849
+ columns: [candidate],
1850
+ definition
1851
+ });
1852
+ }
1726
1853
  return nextStage;
1727
1854
  }
1728
1855
  toDefinition({ schema, table, columns }) {
@@ -1759,6 +1886,12 @@ var IndexOptimizer = class IndexOptimizer {
1759
1886
  else fullyQualifiedTable = PgIdentifier.fromParts(schema, table);
1760
1887
  return `${fullyQualifiedTable} using gist (${column})`;
1761
1888
  }
1889
+ toExpressionDefinition({ schema, table, expression }) {
1890
+ let fullyQualifiedTable;
1891
+ if (schema.toString() === "public") fullyQualifiedTable = table;
1892
+ else fullyQualifiedTable = PgIdentifier.fromParts(schema, table);
1893
+ return `${fullyQualifiedTable}((${expression}))`;
1894
+ }
1762
1895
  groupGinCandidatesByColumn(candidates) {
1763
1896
  const groups = /* @__PURE__ */ new Map();
1764
1897
  for (const c of candidates) {