@query-doctor/core 0.8.1 → 0.8.2-rc.1

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.
Files changed (118) hide show
  1. package/dist/_virtual/_@oxc-project_runtime@0.122.0/helpers/defineProperty.cjs +13 -0
  2. package/dist/_virtual/_@oxc-project_runtime@0.122.0/helpers/defineProperty.mjs +13 -0
  3. package/dist/_virtual/_@oxc-project_runtime@0.122.0/helpers/toPrimitive.cjs +15 -0
  4. package/dist/_virtual/_@oxc-project_runtime@0.122.0/helpers/toPrimitive.mjs +15 -0
  5. package/dist/_virtual/_@oxc-project_runtime@0.122.0/helpers/toPropertyKey.cjs +10 -0
  6. package/dist/_virtual/_@oxc-project_runtime@0.122.0/helpers/toPropertyKey.mjs +10 -0
  7. package/dist/_virtual/_@oxc-project_runtime@0.122.0/helpers/typeof.cjs +17 -0
  8. package/dist/_virtual/_@oxc-project_runtime@0.122.0/helpers/typeof.mjs +12 -0
  9. package/dist/_virtual/_rolldown/runtime.cjs +24 -0
  10. package/dist/index.cjs +33 -2568
  11. package/dist/index.d.cts +11 -781
  12. package/dist/index.d.mts +11 -781
  13. package/dist/index.mjs +10 -2522
  14. package/dist/optimizer/genalgo.cjs +365 -0
  15. package/dist/optimizer/genalgo.cjs.map +1 -0
  16. package/dist/optimizer/genalgo.d.cts +111 -0
  17. package/dist/optimizer/genalgo.d.cts.map +1 -0
  18. package/dist/optimizer/genalgo.d.mts +111 -0
  19. package/dist/optimizer/genalgo.d.mts.map +1 -0
  20. package/dist/optimizer/genalgo.mjs +362 -0
  21. package/dist/optimizer/genalgo.mjs.map +1 -0
  22. package/dist/optimizer/pss-rewriter.cjs +31 -0
  23. package/dist/optimizer/pss-rewriter.cjs.map +1 -0
  24. package/dist/optimizer/pss-rewriter.d.cts +16 -0
  25. package/dist/optimizer/pss-rewriter.d.cts.map +1 -0
  26. package/dist/optimizer/pss-rewriter.d.mts +16 -0
  27. package/dist/optimizer/pss-rewriter.d.mts.map +1 -0
  28. package/dist/optimizer/pss-rewriter.mjs +31 -0
  29. package/dist/optimizer/pss-rewriter.mjs.map +1 -0
  30. package/dist/optimizer/statistics.cjs +738 -0
  31. package/dist/optimizer/statistics.cjs.map +1 -0
  32. package/dist/optimizer/statistics.d.cts +389 -0
  33. package/dist/optimizer/statistics.d.cts.map +1 -0
  34. package/dist/optimizer/statistics.d.mts +389 -0
  35. package/dist/optimizer/statistics.d.mts.map +1 -0
  36. package/dist/optimizer/statistics.mjs +729 -0
  37. package/dist/optimizer/statistics.mjs.map +1 -0
  38. package/dist/sentry.cjs +13 -0
  39. package/dist/sentry.cjs.map +1 -0
  40. package/dist/sentry.d.cts +7 -0
  41. package/dist/sentry.d.cts.map +1 -0
  42. package/dist/sentry.d.mts +7 -0
  43. package/dist/sentry.d.mts.map +1 -0
  44. package/dist/sentry.mjs +13 -0
  45. package/dist/sentry.mjs.map +1 -0
  46. package/dist/sql/analyzer.cjs +242 -0
  47. package/dist/sql/analyzer.cjs.map +1 -0
  48. package/dist/sql/analyzer.d.cts +112 -0
  49. package/dist/sql/analyzer.d.cts.map +1 -0
  50. package/dist/sql/analyzer.d.mts +112 -0
  51. package/dist/sql/analyzer.d.mts.map +1 -0
  52. package/dist/sql/analyzer.mjs +240 -0
  53. package/dist/sql/analyzer.mjs.map +1 -0
  54. package/dist/sql/ast-utils.cjs +19 -0
  55. package/dist/sql/ast-utils.cjs.map +1 -0
  56. package/dist/sql/ast-utils.d.cts +9 -0
  57. package/dist/sql/ast-utils.d.cts.map +1 -0
  58. package/dist/sql/ast-utils.d.mts +9 -0
  59. package/dist/sql/ast-utils.d.mts.map +1 -0
  60. package/dist/sql/ast-utils.mjs +17 -0
  61. package/dist/sql/ast-utils.mjs.map +1 -0
  62. package/dist/sql/builder.cjs +94 -0
  63. package/dist/sql/builder.cjs.map +1 -0
  64. package/dist/sql/builder.d.cts +37 -0
  65. package/dist/sql/builder.d.cts.map +1 -0
  66. package/dist/sql/builder.d.mts +37 -0
  67. package/dist/sql/builder.d.mts.map +1 -0
  68. package/dist/sql/builder.mjs +94 -0
  69. package/dist/sql/builder.mjs.map +1 -0
  70. package/dist/sql/database.cjs +35 -0
  71. package/dist/sql/database.cjs.map +1 -0
  72. package/dist/sql/database.d.cts +91 -0
  73. package/dist/sql/database.d.cts.map +1 -0
  74. package/dist/sql/database.d.mts +91 -0
  75. package/dist/sql/database.d.mts.map +1 -0
  76. package/dist/sql/database.mjs +32 -0
  77. package/dist/sql/database.mjs.map +1 -0
  78. package/dist/sql/indexes.cjs +17 -0
  79. package/dist/sql/indexes.cjs.map +1 -0
  80. package/dist/sql/indexes.d.cts +14 -0
  81. package/dist/sql/indexes.d.cts.map +1 -0
  82. package/dist/sql/indexes.d.mts +14 -0
  83. package/dist/sql/indexes.d.mts.map +1 -0
  84. package/dist/sql/indexes.mjs +16 -0
  85. package/dist/sql/indexes.mjs.map +1 -0
  86. package/dist/sql/nudges.cjs +484 -0
  87. package/dist/sql/nudges.cjs.map +1 -0
  88. package/dist/sql/nudges.d.cts +21 -0
  89. package/dist/sql/nudges.d.cts.map +1 -0
  90. package/dist/sql/nudges.d.mts +21 -0
  91. package/dist/sql/nudges.d.mts.map +1 -0
  92. package/dist/sql/nudges.mjs +484 -0
  93. package/dist/sql/nudges.mjs.map +1 -0
  94. package/dist/sql/permutations.cjs +28 -0
  95. package/dist/sql/permutations.cjs.map +1 -0
  96. package/dist/sql/permutations.mjs +28 -0
  97. package/dist/sql/permutations.mjs.map +1 -0
  98. package/dist/sql/pg-identifier.cjs +216 -0
  99. package/dist/sql/pg-identifier.cjs.map +1 -0
  100. package/dist/sql/pg-identifier.d.cts +31 -0
  101. package/dist/sql/pg-identifier.d.cts.map +1 -0
  102. package/dist/sql/pg-identifier.d.mts +31 -0
  103. package/dist/sql/pg-identifier.d.mts.map +1 -0
  104. package/dist/sql/pg-identifier.mjs +216 -0
  105. package/dist/sql/pg-identifier.mjs.map +1 -0
  106. package/dist/sql/walker.cjs +314 -0
  107. package/dist/sql/walker.cjs.map +1 -0
  108. package/dist/sql/walker.d.cts +15 -0
  109. package/dist/sql/walker.d.cts.map +1 -0
  110. package/dist/sql/walker.d.mts +15 -0
  111. package/dist/sql/walker.d.mts.map +1 -0
  112. package/dist/sql/walker.mjs +313 -0
  113. package/dist/sql/walker.mjs.map +1 -0
  114. package/package.json +2 -1
  115. package/dist/index.cjs.map +0 -1
  116. package/dist/index.d.cts.map +0 -1
  117. package/dist/index.d.mts.map +0 -1
  118. package/dist/index.mjs.map +0 -1
@@ -0,0 +1,37 @@
1
+ 'use client';
2
+
3
+ import { PgIdentifier } from "./pg-identifier.mjs";
4
+
5
+ //#region src/sql/builder.d.ts
6
+ type PostgresQueryBuilderCommand = "bitmapscan" | "indexscan" | "seqscan";
7
+ declare class PostgresQueryBuilder {
8
+ private query;
9
+ private readonly commands;
10
+ private isIntrospection;
11
+ private explainFlags;
12
+ private _preamble;
13
+ private parameters;
14
+ private limitSubstitution?;
15
+ constructor(query: string);
16
+ get preamble(): number;
17
+ static createIndex(definition: string, name?: PgIdentifier): PostgresQueryBuilder;
18
+ enable(command: PostgresQueryBuilderCommand, value?: boolean): this;
19
+ withQuery(query: string): this;
20
+ introspect(): this;
21
+ explain(flags: string[]): this;
22
+ parameterize(parameters: Record<Parameter, number>): this;
23
+ replaceLimit(limit: number): this;
24
+ build(): string;
25
+ /** Return the "set a=b" parts of the command in the query separate from the explain select ... part */
26
+ buildParts(): {
27
+ commands: string;
28
+ query: string;
29
+ };
30
+ private generateSetCommands;
31
+ private generateExplain;
32
+ private substituteQuery;
33
+ }
34
+ type Parameter = `$${string}`;
35
+ //#endregion
36
+ export { Parameter, PostgresQueryBuilder, PostgresQueryBuilderCommand };
37
+ //# sourceMappingURL=builder.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.d.mts","names":[],"sources":["../../src/sql/builder.ts"],"mappings":";;;;;KAEY,2BAAA;AAAA,cAKC,oBAAA;EAAA,QASS,KAAA;EAAA,iBARH,QAAA;EAAA,QACT,eAAA;EAAA,QACA,YAAA;EAAA,QACA,SAAA;EAAA,QACA,UAAA;EAAA,QAEA,iBAAA;cAEY,KAAA;EAAA,IAEhB,QAAA,CAAA;EAAA,OAIG,WAAA,CAAY,UAAA,UAAoB,IAAA,GAAO,YAAA,GAAY,oBAAA;EAS1D,MAAA,CAAO,OAAA,EAAS,2BAAA,EAA6B,KAAA;EAU7C,SAAA,CAAU,KAAA;EAKV,UAAA,CAAA;EAKA,OAAA,CAAQ,KAAA;EAKR,YAAA,CAAa,UAAA,EAAY,MAAA,CAAO,SAAA;EAKhC,YAAA,CAAa,KAAA;EAKb,KAAA,CAAA;EA1DiB;EAoEjB,UAAA,CAAA;;;;UAUQ,mBAAA;EAAA,QASA,eAAA;EAAA,QAaA,eAAA;AAAA;AAAA,KAeE,SAAA"}
@@ -0,0 +1,94 @@
1
+ "use client";
2
+ import { _defineProperty } from "../_virtual/_@oxc-project_runtime@0.122.0/helpers/defineProperty.mjs";
3
+ //#region src/sql/builder.ts
4
+ var PostgresQueryBuilder = class PostgresQueryBuilder {
5
+ constructor(query) {
6
+ this.query = query;
7
+ _defineProperty(this, "commands", {});
8
+ _defineProperty(this, "isIntrospection", false);
9
+ _defineProperty(this, "explainFlags", []);
10
+ _defineProperty(this, "_preamble", 0);
11
+ _defineProperty(this, "parameters", {});
12
+ _defineProperty(this, "limitSubstitution", void 0);
13
+ }
14
+ get preamble() {
15
+ return this._preamble;
16
+ }
17
+ static createIndex(definition, name) {
18
+ if (name) return new PostgresQueryBuilder(`create index "${name}" on ${definition};`);
19
+ return new PostgresQueryBuilder(`create index on ${definition};`);
20
+ }
21
+ enable(command, value = true) {
22
+ const commandString = `enable_${command}`;
23
+ if (value) this.commands[commandString] = "on";
24
+ else this.commands[commandString] = "off";
25
+ return this;
26
+ }
27
+ withQuery(query) {
28
+ this.query = query;
29
+ return this;
30
+ }
31
+ introspect() {
32
+ this.isIntrospection = true;
33
+ return this;
34
+ }
35
+ explain(flags) {
36
+ this.explainFlags = flags;
37
+ return this;
38
+ }
39
+ parameterize(parameters) {
40
+ Object.assign(this.parameters, parameters);
41
+ return this;
42
+ }
43
+ replaceLimit(limit) {
44
+ this.limitSubstitution = limit;
45
+ return this;
46
+ }
47
+ build() {
48
+ let commands = this.generateSetCommands();
49
+ commands += this.generateExplain().query;
50
+ if (this.isIntrospection) commands += " -- @qd_introspection";
51
+ return commands;
52
+ }
53
+ /** Return the "set a=b" parts of the command in the query separate from the explain select ... part */
54
+ buildParts() {
55
+ const commands = this.generateSetCommands();
56
+ const explain = this.generateExplain();
57
+ this._preamble = explain.preamble;
58
+ if (this.isIntrospection) explain.query += " -- @qd_introspection";
59
+ return {
60
+ commands,
61
+ query: explain.query
62
+ };
63
+ }
64
+ generateSetCommands() {
65
+ let commands = "";
66
+ for (const key in this.commands) {
67
+ const value = this.commands[key];
68
+ commands += `set local ${key}=${value};\n`;
69
+ }
70
+ return commands;
71
+ }
72
+ generateExplain() {
73
+ let finalQuery = "";
74
+ if (this.explainFlags.length > 0) finalQuery += `explain (${this.explainFlags.join(", ")}) `;
75
+ const query = this.substituteQuery();
76
+ const semicolon = query.endsWith(";") ? "" : ";";
77
+ const preamble = finalQuery.length;
78
+ finalQuery += `${query}${semicolon}`;
79
+ return {
80
+ query: finalQuery,
81
+ preamble
82
+ };
83
+ }
84
+ substituteQuery() {
85
+ let query = this.query;
86
+ if (this.limitSubstitution !== void 0) query = query.replace(/limit\s+\$\d+/g, `limit ${this.limitSubstitution}`);
87
+ for (const [key, value] of Object.entries(this.parameters)) query = query.replaceAll(`\\$${key}`, value.toString());
88
+ return query;
89
+ }
90
+ };
91
+ //#endregion
92
+ export { PostgresQueryBuilder };
93
+
94
+ //# sourceMappingURL=builder.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.mjs","names":[],"sources":["../../src/sql/builder.ts"],"sourcesContent":["import { PgIdentifier } from \"./pg-identifier\";\n\nexport type PostgresQueryBuilderCommand =\n | \"bitmapscan\"\n | \"indexscan\"\n | \"seqscan\";\n\nexport class PostgresQueryBuilder {\n private readonly commands: Record<string, string> = {};\n private isIntrospection: boolean = false;\n private explainFlags: string[] = [];\n private _preamble = 0;\n private parameters: Record<Parameter, number> = {};\n // substitution for `limit $1` -> `limit 5`\n private limitSubstitution?: number;\n\n constructor(private query: string) {}\n\n get preamble(): number {\n return this._preamble;\n }\n\n static createIndex(definition: string, name?: PgIdentifier) {\n if (name) {\n return new PostgresQueryBuilder(\n `create index \"${name}\" on ${definition};`,\n );\n }\n return new PostgresQueryBuilder(`create index on ${definition};`);\n }\n\n enable(command: PostgresQueryBuilderCommand, value: boolean = true): this {\n const commandString = `enable_${command}`;\n if (value) {\n this.commands[commandString] = \"on\";\n } else {\n this.commands[commandString] = \"off\";\n }\n return this;\n }\n\n withQuery(query: string): this {\n this.query = query;\n return this;\n }\n\n introspect(): this {\n this.isIntrospection = true;\n return this;\n }\n\n explain(flags: string[]): this {\n this.explainFlags = flags;\n return this;\n }\n\n parameterize(parameters: Record<Parameter, number>) {\n Object.assign(this.parameters, parameters);\n return this;\n }\n\n replaceLimit(limit: number) {\n this.limitSubstitution = limit;\n return this;\n }\n\n build(): string {\n let commands = this.generateSetCommands();\n commands += this.generateExplain().query;\n if (this.isIntrospection) {\n commands += \" -- @qd_introspection\";\n }\n return commands;\n }\n\n /** Return the \"set a=b\" parts of the command in the query separate from the explain select ... part */\n buildParts() {\n const commands = this.generateSetCommands();\n const explain = this.generateExplain();\n this._preamble = explain.preamble;\n if (this.isIntrospection) {\n explain.query += \" -- @qd_introspection\";\n }\n return { commands, query: explain.query };\n }\n\n private generateSetCommands() {\n let commands = \"\";\n for (const key in this.commands) {\n const value = this.commands[key];\n commands += `set local ${key}=${value};\\n`;\n }\n return commands;\n }\n\n private generateExplain() {\n let finalQuery = \"\";\n if (this.explainFlags.length > 0) {\n finalQuery += `explain (${this.explainFlags.join(\", \")}) `;\n }\n const query = this.substituteQuery();\n const semicolon = query.endsWith(\";\") ? \"\" : \";\";\n\n const preamble = finalQuery.length;\n finalQuery += `${query}${semicolon}`;\n return { query: finalQuery, preamble };\n }\n\n private substituteQuery() {\n let query = this.query;\n if (this.limitSubstitution !== undefined) {\n query = query.replace(\n /limit\\s+\\$\\d+/g,\n `limit ${this.limitSubstitution}`,\n );\n }\n for (const [key, value] of Object.entries(this.parameters)) {\n query = query.replaceAll(`\\\\$${key}`, value.toString());\n }\n return query;\n }\n}\n\nexport type Parameter = `$${string}`;\n"],"mappings":";;;AAOA,IAAa,uBAAb,MAAa,qBAAqB;CAShC,YAAY,OAAuB;AAAf,OAAA,QAAA;wBARH,YAAmC,EAAE,CAAC;wBAC/C,mBAA2B,MAAM;wBACjC,gBAAyB,EAAE,CAAC;wBAC5B,aAAY,EAAE;wBACd,cAAwC,EAAE,CAAC;wBAE3C,qBAAA,KAAA,EAA2B;;CAInC,IAAI,WAAmB;AACrB,SAAO,KAAK;;CAGd,OAAO,YAAY,YAAoB,MAAqB;AAC1D,MAAI,KACF,QAAO,IAAI,qBACT,iBAAiB,KAAK,OAAO,WAAW,GACzC;AAEH,SAAO,IAAI,qBAAqB,mBAAmB,WAAW,GAAG;;CAGnE,OAAO,SAAsC,QAAiB,MAAY;EACxE,MAAM,gBAAgB,UAAU;AAChC,MAAI,MACF,MAAK,SAAS,iBAAiB;MAE/B,MAAK,SAAS,iBAAiB;AAEjC,SAAO;;CAGT,UAAU,OAAqB;AAC7B,OAAK,QAAQ;AACb,SAAO;;CAGT,aAAmB;AACjB,OAAK,kBAAkB;AACvB,SAAO;;CAGT,QAAQ,OAAuB;AAC7B,OAAK,eAAe;AACpB,SAAO;;CAGT,aAAa,YAAuC;AAClD,SAAO,OAAO,KAAK,YAAY,WAAW;AAC1C,SAAO;;CAGT,aAAa,OAAe;AAC1B,OAAK,oBAAoB;AACzB,SAAO;;CAGT,QAAgB;EACd,IAAI,WAAW,KAAK,qBAAqB;AACzC,cAAY,KAAK,iBAAiB,CAAC;AACnC,MAAI,KAAK,gBACP,aAAY;AAEd,SAAO;;;CAIT,aAAa;EACX,MAAM,WAAW,KAAK,qBAAqB;EAC3C,MAAM,UAAU,KAAK,iBAAiB;AACtC,OAAK,YAAY,QAAQ;AACzB,MAAI,KAAK,gBACP,SAAQ,SAAS;AAEnB,SAAO;GAAE;GAAU,OAAO,QAAQ;GAAO;;CAG3C,sBAA8B;EAC5B,IAAI,WAAW;AACf,OAAK,MAAM,OAAO,KAAK,UAAU;GAC/B,MAAM,QAAQ,KAAK,SAAS;AAC5B,eAAY,aAAa,IAAI,GAAG,MAAM;;AAExC,SAAO;;CAGT,kBAA0B;EACxB,IAAI,aAAa;AACjB,MAAI,KAAK,aAAa,SAAS,EAC7B,eAAc,YAAY,KAAK,aAAa,KAAK,KAAK,CAAC;EAEzD,MAAM,QAAQ,KAAK,iBAAiB;EACpC,MAAM,YAAY,MAAM,SAAS,IAAI,GAAG,KAAK;EAE7C,MAAM,WAAW,WAAW;AAC5B,gBAAc,GAAG,QAAQ;AACzB,SAAO;GAAE,OAAO;GAAY;GAAU;;CAGxC,kBAA0B;EACxB,IAAI,QAAQ,KAAK;AACjB,MAAI,KAAK,sBAAsB,KAAA,EAC7B,SAAQ,MAAM,QACZ,kBACA,SAAS,KAAK,oBACf;AAEH,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,KAAK,WAAW,CACxD,SAAQ,MAAM,WAAW,MAAM,OAAO,MAAM,UAAU,CAAC;AAEzD,SAAO"}
@@ -0,0 +1,35 @@
1
+ "use client";
2
+ require("../_virtual/_rolldown/runtime.cjs");
3
+ let zod = require("zod");
4
+ //#region src/sql/database.ts
5
+ const PostgresVersion = zod.z.string().brand("PostgresVersion");
6
+ /** Zod schema for PostgresExplainStage — validates common fields, passes through variant-specific ones. */
7
+ const PostgresExplainStageSchema = zod.z.lazy(() => zod.z.object({
8
+ "Node Type": zod.z.string(),
9
+ "Total Cost": zod.z.number(),
10
+ "Plan Width": zod.z.number(),
11
+ "Node Id": zod.z.number().optional(),
12
+ Plans: zod.z.array(PostgresExplainStageSchema).optional()
13
+ }).passthrough());
14
+ /**
15
+ * Drops a disabled index. Rollsback if it fails for any reason
16
+ * @returns Did dropping the index succeed?
17
+ */
18
+ async function dropIndex(tx, index) {
19
+ try {
20
+ await tx.exec(`
21
+ savepoint idx_drop;
22
+ drop index if exists ${index} cascade;
23
+ `);
24
+ return true;
25
+ } catch {
26
+ await tx.exec(`rollback to idx_drop`);
27
+ return false;
28
+ }
29
+ }
30
+ //#endregion
31
+ exports.PostgresExplainStageSchema = PostgresExplainStageSchema;
32
+ exports.PostgresVersion = PostgresVersion;
33
+ exports.dropIndex = dropIndex;
34
+
35
+ //# sourceMappingURL=database.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.cjs","names":["z"],"sources":["../../src/sql/database.ts"],"sourcesContent":["import { z } from \"zod\";\nimport type { PgIdentifier } from \"./pg-identifier\";\n\nexport const PostgresVersion = z.string().brand(\"PostgresVersion\");\nexport type PostgresVersion = z.infer<typeof PostgresVersion>;\n\nexport interface PostgresTransaction {\n /**\n * Exec a query and return the result as an array of objects.\n */\n exec<T>(query: string, params?: unknown[]): Promise<T[]>;\n}\n\n/**\n * A shared interface for all postgres connections.\n * This is required to allow interop between pglite and regular postgres drivers\n */\nexport interface Postgres extends PostgresTransaction {\n transaction<T>(callback: (tx: PostgresTransaction) => Promise<T>): Promise<T>;\n cursor?<T>(\n query: string,\n params?: unknown[],\n options?: { size?: number },\n ): AsyncGenerator<T, void, unknown>;\n // postgres returns versions as a string\n serverNum(): Promise<PostgresVersion>;\n}\n\nexport type PostgresConnectionInput = {\n url: string;\n};\n\nexport type PostgresFactory = (input: PostgresConnectionInput) => Postgres;\n\n// PostgreSQL EXPLAIN plan types\ndeclare const StageId: unique symbol;\nexport type PostgresStageId = number & { [StageId]: \"StageId\" };\n\nexport type PostgresStage =\n | \"Seq Scan\"\n | \"Limit\"\n | \"Bitmap Heap Scan\"\n | \"Bitmap Index Scan\"\n | \"Index Only Scan\"\n | \"Index Scan\"\n | \"BitmapOr\";\n\nexport type PostgresExplainStageCommon = {\n \"Node Type\": PostgresStage;\n // available only when doing a trace explain using the\n // query doctor postgres binary\n \"Node Id\": PostgresStageId;\n Plans?: PostgresExplainStage[];\n \"Plan Width\": number;\n \"Total Cost\": number;\n};\n\nexport type PostgresExplainStage =\n | (PostgresExplainStageCommon & {\n \"Node Type\": \"Index Scan\";\n \"Index Name\": string;\n \"Relation Name\": string;\n Alias: string;\n \"Rows Removed by Filter\": number;\n })\n | (PostgresExplainStageCommon & {\n \"Node Type\": \"Seq Scan\";\n \"Relation Name\": string;\n Filter?: string;\n \"Actual Rows\": number;\n \"Actual Loops\": number;\n \"Rows Removed by Filter\": number;\n })\n | (PostgresExplainStageCommon & {\n \"Node Type\": \"Bitmap Heap Scan\";\n \"Relation Name\": string;\n Filter?: string;\n \"Actual Rows\": number;\n \"Actual Loops\": number;\n \"Rows Removed by Filter\": number;\n })\n | (PostgresExplainStageCommon & {\n \"Node Type\": \"Bitmap Index Scan\";\n \"Index Name\": string;\n Filter?: string;\n \"Actual Rows\": number;\n \"Actual Loops\": number;\n \"Rows Removed by Filter\": number;\n })\n | (PostgresExplainStageCommon & {\n \"Node Type\": \"Index Only Scan\";\n \"Index Name\": string;\n Filter?: string;\n \"Actual Rows\": number;\n \"Actual Loops\": number;\n \"Rows Removed by Filter\": number;\n })\n | PostgresExplainStageCommon;\n\n/** Zod schema for PostgresExplainStage — validates common fields, passes through variant-specific ones. */\nexport const PostgresExplainStageSchema: z.ZodType<PostgresExplainStage> =\n z.lazy(() =>\n z\n .object({\n \"Node Type\": z.string(),\n \"Total Cost\": z.number(),\n \"Plan Width\": z.number(),\n \"Node Id\": z.number().optional(),\n Plans: z.array(PostgresExplainStageSchema).optional(),\n })\n .passthrough(),\n ) as z.ZodType<PostgresExplainStage>;\n\nexport type PostgresExplainResult = {\n \"QUERY PLAN\": {\n Plan: PostgresExplainStage;\n }[];\n};\n\n/**\n * Drops a disabled index. Rollsback if it fails for any reason\n * @returns Did dropping the index succeed?\n */\nexport async function dropIndex(\n tx: PostgresTransaction,\n index: PgIdentifier,\n): Promise<boolean> {\n try {\n await tx.exec(`\n savepoint idx_drop;\n drop index if exists ${index} cascade;\n `);\n return true;\n } catch {\n // no problem if droping the index fails. It should throw an error\n await tx.exec(`rollback to idx_drop`);\n return false;\n }\n}\n"],"mappings":";;;;AAGA,MAAa,kBAAkBA,IAAAA,EAAE,QAAQ,CAAC,MAAM,kBAAkB;;AAiGlE,MAAa,6BACXA,IAAAA,EAAE,WACAA,IAAAA,EACG,OAAO;CACN,aAAaA,IAAAA,EAAE,QAAQ;CACvB,cAAcA,IAAAA,EAAE,QAAQ;CACxB,cAAcA,IAAAA,EAAE,QAAQ;CACxB,WAAWA,IAAAA,EAAE,QAAQ,CAAC,UAAU;CAChC,OAAOA,IAAAA,EAAE,MAAM,2BAA2B,CAAC,UAAU;CACtD,CAAC,CACD,aAAa,CACjB;;;;;AAYH,eAAsB,UACpB,IACA,OACkB;AAClB,KAAI;AACF,QAAM,GAAG,KAAK;;6BAEW,MAAM;MAC7B;AACF,SAAO;SACD;AAEN,QAAM,GAAG,KAAK,uBAAuB;AACrC,SAAO"}
@@ -0,0 +1,91 @@
1
+ 'use client';
2
+
3
+ import { PgIdentifier } from "./pg-identifier.cjs";
4
+ import { z } from "zod";
5
+
6
+ //#region src/sql/database.d.ts
7
+ declare const PostgresVersion: z.core.$ZodBranded<z.ZodString, "PostgresVersion">;
8
+ type PostgresVersion = z.infer<typeof PostgresVersion>;
9
+ interface PostgresTransaction {
10
+ /**
11
+ * Exec a query and return the result as an array of objects.
12
+ */
13
+ exec<T>(query: string, params?: unknown[]): Promise<T[]>;
14
+ }
15
+ /**
16
+ * A shared interface for all postgres connections.
17
+ * This is required to allow interop between pglite and regular postgres drivers
18
+ */
19
+ interface Postgres extends PostgresTransaction {
20
+ transaction<T>(callback: (tx: PostgresTransaction) => Promise<T>): Promise<T>;
21
+ cursor?<T>(query: string, params?: unknown[], options?: {
22
+ size?: number;
23
+ }): AsyncGenerator<T, void, unknown>;
24
+ serverNum(): Promise<PostgresVersion>;
25
+ }
26
+ type PostgresConnectionInput = {
27
+ url: string;
28
+ };
29
+ type PostgresFactory = (input: PostgresConnectionInput) => Postgres;
30
+ declare const StageId: unique symbol;
31
+ type PostgresStageId = number & {
32
+ [StageId]: "StageId";
33
+ };
34
+ type PostgresStage = "Seq Scan" | "Limit" | "Bitmap Heap Scan" | "Bitmap Index Scan" | "Index Only Scan" | "Index Scan" | "BitmapOr";
35
+ type PostgresExplainStageCommon = {
36
+ "Node Type": PostgresStage;
37
+ "Node Id": PostgresStageId;
38
+ Plans?: PostgresExplainStage[];
39
+ "Plan Width": number;
40
+ "Total Cost": number;
41
+ };
42
+ type PostgresExplainStage = (PostgresExplainStageCommon & {
43
+ "Node Type": "Index Scan";
44
+ "Index Name": string;
45
+ "Relation Name": string;
46
+ Alias: string;
47
+ "Rows Removed by Filter": number;
48
+ }) | (PostgresExplainStageCommon & {
49
+ "Node Type": "Seq Scan";
50
+ "Relation Name": string;
51
+ Filter?: string;
52
+ "Actual Rows": number;
53
+ "Actual Loops": number;
54
+ "Rows Removed by Filter": number;
55
+ }) | (PostgresExplainStageCommon & {
56
+ "Node Type": "Bitmap Heap Scan";
57
+ "Relation Name": string;
58
+ Filter?: string;
59
+ "Actual Rows": number;
60
+ "Actual Loops": number;
61
+ "Rows Removed by Filter": number;
62
+ }) | (PostgresExplainStageCommon & {
63
+ "Node Type": "Bitmap Index Scan";
64
+ "Index Name": string;
65
+ Filter?: string;
66
+ "Actual Rows": number;
67
+ "Actual Loops": number;
68
+ "Rows Removed by Filter": number;
69
+ }) | (PostgresExplainStageCommon & {
70
+ "Node Type": "Index Only Scan";
71
+ "Index Name": string;
72
+ Filter?: string;
73
+ "Actual Rows": number;
74
+ "Actual Loops": number;
75
+ "Rows Removed by Filter": number;
76
+ }) | PostgresExplainStageCommon;
77
+ /** Zod schema for PostgresExplainStage — validates common fields, passes through variant-specific ones. */
78
+ declare const PostgresExplainStageSchema: z.ZodType<PostgresExplainStage>;
79
+ type PostgresExplainResult = {
80
+ "QUERY PLAN": {
81
+ Plan: PostgresExplainStage;
82
+ }[];
83
+ };
84
+ /**
85
+ * Drops a disabled index. Rollsback if it fails for any reason
86
+ * @returns Did dropping the index succeed?
87
+ */
88
+ declare function dropIndex(tx: PostgresTransaction, index: PgIdentifier): Promise<boolean>;
89
+ //#endregion
90
+ export { Postgres, PostgresConnectionInput, PostgresExplainResult, PostgresExplainStage, PostgresExplainStageCommon, PostgresExplainStageSchema, PostgresFactory, PostgresStage, PostgresStageId, PostgresTransaction, PostgresVersion, dropIndex };
91
+ //# sourceMappingURL=database.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.cts","names":[],"sources":["../../src/sql/database.ts"],"mappings":";;;;;;cAGa,eAAA,EAAe,CAAA,CAAA,IAAA,CAAA,WAAA,CAAA,CAAA,CAAA,SAAA;AAAA,KAChB,eAAA,GAAkB,CAAA,CAAE,KAAA,QAAa,eAAA;AAAA,UAE5B,mBAAA;EAHJ;;;EAOX,IAAA,IAAQ,KAAA,UAAe,MAAA,eAAqB,OAAA,CAAQ,CAAA;AAAA;;;;;UAOrC,QAAA,SAAiB,mBAAA;EAChC,WAAA,IAAe,QAAA,GAAW,EAAA,EAAI,mBAAA,KAAwB,OAAA,CAAQ,CAAA,IAAK,OAAA,CAAQ,CAAA;EAC3E,MAAA,KACE,KAAA,UACA,MAAA,cACA,OAAA;IAAY,IAAA;EAAA,IACX,cAAA,CAAe,CAAA;EAElB,SAAA,IAAa,OAAA,CAAQ,eAAA;AAAA;AAAA,KAGX,uBAAA;EACV,GAAA;AAAA;AAAA,KAGU,eAAA,IAAmB,KAAA,EAAO,uBAAA,KAA4B,QAAA;AAAA,cAGpD,OAAA;AAAA,KACF,eAAA;EAAA,CAA8B,OAAA;AAAA;AAAA,KAE9B,aAAA;AAAA,KASA,0BAAA;EACV,WAAA,EAAa,aAAA;EAGb,SAAA,EAAW,eAAA;EACX,KAAA,GAAQ,oBAAA;EACR,YAAA;EACA,YAAA;AAAA;AAAA,KAGU,oBAAA,IACP,0BAAA;EACC,WAAA;EACA,YAAA;EACA,eAAA;EACA,KAAA;EACA,wBAAA;AAAA,MAED,0BAAA;EACC,WAAA;EACA,eAAA;EACA,MAAA;EACA,aAAA;EACA,cAAA;EACA,wBAAA;AAAA,MAED,0BAAA;EACC,WAAA;EACA,eAAA;EACA,MAAA;EACA,aAAA;EACA,cAAA;EACA,wBAAA;AAAA,MAED,0BAAA;EACC,WAAA;EACA,YAAA;EACA,MAAA;EACA,aAAA;EACA,cAAA;EACA,wBAAA;AAAA,MAED,0BAAA;EACC,WAAA;EACA,YAAA;EACA,MAAA;EACA,aAAA;EACA,cAAA;EACA,wBAAA;AAAA,KAEF,0BAAA;;cAGS,0BAAA,EAA4B,CAAA,CAAE,OAAA,CAAQ,oBAAA;AAAA,KAavC,qBAAA;EACV,YAAA;IACE,IAAA,EAAM,oBAAA;EAAA;AAAA;;AAnFV;;;iBA2FsB,SAAA,CACpB,EAAA,EAAI,mBAAA,EACJ,KAAA,EAAO,YAAA,GACN,OAAA"}
@@ -0,0 +1,91 @@
1
+ 'use client';
2
+
3
+ import { PgIdentifier } from "./pg-identifier.mjs";
4
+ import { z } from "zod";
5
+
6
+ //#region src/sql/database.d.ts
7
+ declare const PostgresVersion: z.core.$ZodBranded<z.ZodString, "PostgresVersion">;
8
+ type PostgresVersion = z.infer<typeof PostgresVersion>;
9
+ interface PostgresTransaction {
10
+ /**
11
+ * Exec a query and return the result as an array of objects.
12
+ */
13
+ exec<T>(query: string, params?: unknown[]): Promise<T[]>;
14
+ }
15
+ /**
16
+ * A shared interface for all postgres connections.
17
+ * This is required to allow interop between pglite and regular postgres drivers
18
+ */
19
+ interface Postgres extends PostgresTransaction {
20
+ transaction<T>(callback: (tx: PostgresTransaction) => Promise<T>): Promise<T>;
21
+ cursor?<T>(query: string, params?: unknown[], options?: {
22
+ size?: number;
23
+ }): AsyncGenerator<T, void, unknown>;
24
+ serverNum(): Promise<PostgresVersion>;
25
+ }
26
+ type PostgresConnectionInput = {
27
+ url: string;
28
+ };
29
+ type PostgresFactory = (input: PostgresConnectionInput) => Postgres;
30
+ declare const StageId: unique symbol;
31
+ type PostgresStageId = number & {
32
+ [StageId]: "StageId";
33
+ };
34
+ type PostgresStage = "Seq Scan" | "Limit" | "Bitmap Heap Scan" | "Bitmap Index Scan" | "Index Only Scan" | "Index Scan" | "BitmapOr";
35
+ type PostgresExplainStageCommon = {
36
+ "Node Type": PostgresStage;
37
+ "Node Id": PostgresStageId;
38
+ Plans?: PostgresExplainStage[];
39
+ "Plan Width": number;
40
+ "Total Cost": number;
41
+ };
42
+ type PostgresExplainStage = (PostgresExplainStageCommon & {
43
+ "Node Type": "Index Scan";
44
+ "Index Name": string;
45
+ "Relation Name": string;
46
+ Alias: string;
47
+ "Rows Removed by Filter": number;
48
+ }) | (PostgresExplainStageCommon & {
49
+ "Node Type": "Seq Scan";
50
+ "Relation Name": string;
51
+ Filter?: string;
52
+ "Actual Rows": number;
53
+ "Actual Loops": number;
54
+ "Rows Removed by Filter": number;
55
+ }) | (PostgresExplainStageCommon & {
56
+ "Node Type": "Bitmap Heap Scan";
57
+ "Relation Name": string;
58
+ Filter?: string;
59
+ "Actual Rows": number;
60
+ "Actual Loops": number;
61
+ "Rows Removed by Filter": number;
62
+ }) | (PostgresExplainStageCommon & {
63
+ "Node Type": "Bitmap Index Scan";
64
+ "Index Name": string;
65
+ Filter?: string;
66
+ "Actual Rows": number;
67
+ "Actual Loops": number;
68
+ "Rows Removed by Filter": number;
69
+ }) | (PostgresExplainStageCommon & {
70
+ "Node Type": "Index Only Scan";
71
+ "Index Name": string;
72
+ Filter?: string;
73
+ "Actual Rows": number;
74
+ "Actual Loops": number;
75
+ "Rows Removed by Filter": number;
76
+ }) | PostgresExplainStageCommon;
77
+ /** Zod schema for PostgresExplainStage — validates common fields, passes through variant-specific ones. */
78
+ declare const PostgresExplainStageSchema: z.ZodType<PostgresExplainStage>;
79
+ type PostgresExplainResult = {
80
+ "QUERY PLAN": {
81
+ Plan: PostgresExplainStage;
82
+ }[];
83
+ };
84
+ /**
85
+ * Drops a disabled index. Rollsback if it fails for any reason
86
+ * @returns Did dropping the index succeed?
87
+ */
88
+ declare function dropIndex(tx: PostgresTransaction, index: PgIdentifier): Promise<boolean>;
89
+ //#endregion
90
+ export { Postgres, PostgresConnectionInput, PostgresExplainResult, PostgresExplainStage, PostgresExplainStageCommon, PostgresExplainStageSchema, PostgresFactory, PostgresStage, PostgresStageId, PostgresTransaction, PostgresVersion, dropIndex };
91
+ //# sourceMappingURL=database.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.mts","names":[],"sources":["../../src/sql/database.ts"],"mappings":";;;;;;cAGa,eAAA,EAAe,CAAA,CAAA,IAAA,CAAA,WAAA,CAAA,CAAA,CAAA,SAAA;AAAA,KAChB,eAAA,GAAkB,CAAA,CAAE,KAAA,QAAa,eAAA;AAAA,UAE5B,mBAAA;EAHJ;;;EAOX,IAAA,IAAQ,KAAA,UAAe,MAAA,eAAqB,OAAA,CAAQ,CAAA;AAAA;;;;;UAOrC,QAAA,SAAiB,mBAAA;EAChC,WAAA,IAAe,QAAA,GAAW,EAAA,EAAI,mBAAA,KAAwB,OAAA,CAAQ,CAAA,IAAK,OAAA,CAAQ,CAAA;EAC3E,MAAA,KACE,KAAA,UACA,MAAA,cACA,OAAA;IAAY,IAAA;EAAA,IACX,cAAA,CAAe,CAAA;EAElB,SAAA,IAAa,OAAA,CAAQ,eAAA;AAAA;AAAA,KAGX,uBAAA;EACV,GAAA;AAAA;AAAA,KAGU,eAAA,IAAmB,KAAA,EAAO,uBAAA,KAA4B,QAAA;AAAA,cAGpD,OAAA;AAAA,KACF,eAAA;EAAA,CAA8B,OAAA;AAAA;AAAA,KAE9B,aAAA;AAAA,KASA,0BAAA;EACV,WAAA,EAAa,aAAA;EAGb,SAAA,EAAW,eAAA;EACX,KAAA,GAAQ,oBAAA;EACR,YAAA;EACA,YAAA;AAAA;AAAA,KAGU,oBAAA,IACP,0BAAA;EACC,WAAA;EACA,YAAA;EACA,eAAA;EACA,KAAA;EACA,wBAAA;AAAA,MAED,0BAAA;EACC,WAAA;EACA,eAAA;EACA,MAAA;EACA,aAAA;EACA,cAAA;EACA,wBAAA;AAAA,MAED,0BAAA;EACC,WAAA;EACA,eAAA;EACA,MAAA;EACA,aAAA;EACA,cAAA;EACA,wBAAA;AAAA,MAED,0BAAA;EACC,WAAA;EACA,YAAA;EACA,MAAA;EACA,aAAA;EACA,cAAA;EACA,wBAAA;AAAA,MAED,0BAAA;EACC,WAAA;EACA,YAAA;EACA,MAAA;EACA,aAAA;EACA,cAAA;EACA,wBAAA;AAAA,KAEF,0BAAA;;cAGS,0BAAA,EAA4B,CAAA,CAAE,OAAA,CAAQ,oBAAA;AAAA,KAavC,qBAAA;EACV,YAAA;IACE,IAAA,EAAM,oBAAA;EAAA;AAAA;;AAnFV;;;iBA2FsB,SAAA,CACpB,EAAA,EAAI,mBAAA,EACJ,KAAA,EAAO,YAAA,GACN,OAAA"}
@@ -0,0 +1,32 @@
1
+ "use client";
2
+ import { z } from "zod";
3
+ //#region src/sql/database.ts
4
+ const PostgresVersion = z.string().brand("PostgresVersion");
5
+ /** Zod schema for PostgresExplainStage — validates common fields, passes through variant-specific ones. */
6
+ const PostgresExplainStageSchema = z.lazy(() => z.object({
7
+ "Node Type": z.string(),
8
+ "Total Cost": z.number(),
9
+ "Plan Width": z.number(),
10
+ "Node Id": z.number().optional(),
11
+ Plans: z.array(PostgresExplainStageSchema).optional()
12
+ }).passthrough());
13
+ /**
14
+ * Drops a disabled index. Rollsback if it fails for any reason
15
+ * @returns Did dropping the index succeed?
16
+ */
17
+ async function dropIndex(tx, index) {
18
+ try {
19
+ await tx.exec(`
20
+ savepoint idx_drop;
21
+ drop index if exists ${index} cascade;
22
+ `);
23
+ return true;
24
+ } catch {
25
+ await tx.exec(`rollback to idx_drop`);
26
+ return false;
27
+ }
28
+ }
29
+ //#endregion
30
+ export { PostgresExplainStageSchema, PostgresVersion, dropIndex };
31
+
32
+ //# sourceMappingURL=database.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.mjs","names":[],"sources":["../../src/sql/database.ts"],"sourcesContent":["import { z } from \"zod\";\nimport type { PgIdentifier } from \"./pg-identifier\";\n\nexport const PostgresVersion = z.string().brand(\"PostgresVersion\");\nexport type PostgresVersion = z.infer<typeof PostgresVersion>;\n\nexport interface PostgresTransaction {\n /**\n * Exec a query and return the result as an array of objects.\n */\n exec<T>(query: string, params?: unknown[]): Promise<T[]>;\n}\n\n/**\n * A shared interface for all postgres connections.\n * This is required to allow interop between pglite and regular postgres drivers\n */\nexport interface Postgres extends PostgresTransaction {\n transaction<T>(callback: (tx: PostgresTransaction) => Promise<T>): Promise<T>;\n cursor?<T>(\n query: string,\n params?: unknown[],\n options?: { size?: number },\n ): AsyncGenerator<T, void, unknown>;\n // postgres returns versions as a string\n serverNum(): Promise<PostgresVersion>;\n}\n\nexport type PostgresConnectionInput = {\n url: string;\n};\n\nexport type PostgresFactory = (input: PostgresConnectionInput) => Postgres;\n\n// PostgreSQL EXPLAIN plan types\ndeclare const StageId: unique symbol;\nexport type PostgresStageId = number & { [StageId]: \"StageId\" };\n\nexport type PostgresStage =\n | \"Seq Scan\"\n | \"Limit\"\n | \"Bitmap Heap Scan\"\n | \"Bitmap Index Scan\"\n | \"Index Only Scan\"\n | \"Index Scan\"\n | \"BitmapOr\";\n\nexport type PostgresExplainStageCommon = {\n \"Node Type\": PostgresStage;\n // available only when doing a trace explain using the\n // query doctor postgres binary\n \"Node Id\": PostgresStageId;\n Plans?: PostgresExplainStage[];\n \"Plan Width\": number;\n \"Total Cost\": number;\n};\n\nexport type PostgresExplainStage =\n | (PostgresExplainStageCommon & {\n \"Node Type\": \"Index Scan\";\n \"Index Name\": string;\n \"Relation Name\": string;\n Alias: string;\n \"Rows Removed by Filter\": number;\n })\n | (PostgresExplainStageCommon & {\n \"Node Type\": \"Seq Scan\";\n \"Relation Name\": string;\n Filter?: string;\n \"Actual Rows\": number;\n \"Actual Loops\": number;\n \"Rows Removed by Filter\": number;\n })\n | (PostgresExplainStageCommon & {\n \"Node Type\": \"Bitmap Heap Scan\";\n \"Relation Name\": string;\n Filter?: string;\n \"Actual Rows\": number;\n \"Actual Loops\": number;\n \"Rows Removed by Filter\": number;\n })\n | (PostgresExplainStageCommon & {\n \"Node Type\": \"Bitmap Index Scan\";\n \"Index Name\": string;\n Filter?: string;\n \"Actual Rows\": number;\n \"Actual Loops\": number;\n \"Rows Removed by Filter\": number;\n })\n | (PostgresExplainStageCommon & {\n \"Node Type\": \"Index Only Scan\";\n \"Index Name\": string;\n Filter?: string;\n \"Actual Rows\": number;\n \"Actual Loops\": number;\n \"Rows Removed by Filter\": number;\n })\n | PostgresExplainStageCommon;\n\n/** Zod schema for PostgresExplainStage — validates common fields, passes through variant-specific ones. */\nexport const PostgresExplainStageSchema: z.ZodType<PostgresExplainStage> =\n z.lazy(() =>\n z\n .object({\n \"Node Type\": z.string(),\n \"Total Cost\": z.number(),\n \"Plan Width\": z.number(),\n \"Node Id\": z.number().optional(),\n Plans: z.array(PostgresExplainStageSchema).optional(),\n })\n .passthrough(),\n ) as z.ZodType<PostgresExplainStage>;\n\nexport type PostgresExplainResult = {\n \"QUERY PLAN\": {\n Plan: PostgresExplainStage;\n }[];\n};\n\n/**\n * Drops a disabled index. Rollsback if it fails for any reason\n * @returns Did dropping the index succeed?\n */\nexport async function dropIndex(\n tx: PostgresTransaction,\n index: PgIdentifier,\n): Promise<boolean> {\n try {\n await tx.exec(`\n savepoint idx_drop;\n drop index if exists ${index} cascade;\n `);\n return true;\n } catch {\n // no problem if droping the index fails. It should throw an error\n await tx.exec(`rollback to idx_drop`);\n return false;\n }\n}\n"],"mappings":";;;AAGA,MAAa,kBAAkB,EAAE,QAAQ,CAAC,MAAM,kBAAkB;;AAiGlE,MAAa,6BACX,EAAE,WACA,EACG,OAAO;CACN,aAAa,EAAE,QAAQ;CACvB,cAAc,EAAE,QAAQ;CACxB,cAAc,EAAE,QAAQ;CACxB,WAAW,EAAE,QAAQ,CAAC,UAAU;CAChC,OAAO,EAAE,MAAM,2BAA2B,CAAC,UAAU;CACtD,CAAC,CACD,aAAa,CACjB;;;;;AAYH,eAAsB,UACpB,IACA,OACkB;AAClB,KAAI;AACF,QAAM,GAAG,KAAK;;6BAEW,MAAM;MAC7B;AACF,SAAO;SACD;AAEN,QAAM,GAAG,KAAK,uBAAuB;AACrC,SAAO"}
@@ -0,0 +1,17 @@
1
+ "use client";
2
+ //#region src/sql/indexes.ts
3
+ function isIndexSupported(index) {
4
+ return index.index_type === "btree" || index.index_type === "gin";
5
+ }
6
+ /**
7
+ * Doesn't necessarily decide whether the index can be dropped but can be
8
+ * used to not even try dropping indexes that _definitely_ cannot be dropped
9
+ */
10
+ function isIndexProbablyDroppable(index) {
11
+ return !index.is_primary && !index.is_unique;
12
+ }
13
+ //#endregion
14
+ exports.isIndexProbablyDroppable = isIndexProbablyDroppable;
15
+ exports.isIndexSupported = isIndexSupported;
16
+
17
+ //# sourceMappingURL=indexes.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexes.cjs","names":[],"sources":["../../src/sql/indexes.ts"],"sourcesContent":["import type { IndexedTable } from \"../optimizer/statistics.js\";\n\nexport function isIndexSupported(index: IndexedTable) {\n return index.index_type === \"btree\" || index.index_type === \"gin\";\n}\n\n/**\n * Doesn't necessarily decide whether the index can be dropped but can be\n * used to not even try dropping indexes that _definitely_ cannot be dropped\n */\nexport function isIndexProbablyDroppable(index: IndexedTable) {\n /* TODO: until we have a better solution, this is the best we have */\n /* The is_unique check is problematic only if the column is declared as unique */\n return !index.is_primary && !index.is_unique;\n}\n"],"mappings":";;AAEA,SAAgB,iBAAiB,OAAqB;AACpD,QAAO,MAAM,eAAe,WAAW,MAAM,eAAe;;;;;;AAO9D,SAAgB,yBAAyB,OAAqB;AAG5D,QAAO,CAAC,MAAM,cAAc,CAAC,MAAM"}
@@ -0,0 +1,14 @@
1
+ 'use client';
2
+
3
+ import { IndexedTable } from "../optimizer/statistics.cjs";
4
+
5
+ //#region src/sql/indexes.d.ts
6
+ declare function isIndexSupported(index: IndexedTable): boolean;
7
+ /**
8
+ * Doesn't necessarily decide whether the index can be dropped but can be
9
+ * used to not even try dropping indexes that _definitely_ cannot be dropped
10
+ */
11
+ declare function isIndexProbablyDroppable(index: IndexedTable): boolean;
12
+ //#endregion
13
+ export { isIndexProbablyDroppable, isIndexSupported };
14
+ //# sourceMappingURL=indexes.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexes.d.cts","names":[],"sources":["../../src/sql/indexes.ts"],"mappings":";;;;;iBAEgB,gBAAA,CAAiB,KAAA,EAAO,YAAA;;;AAAxC;;iBAQgB,wBAAA,CAAyB,KAAA,EAAO,YAAA"}
@@ -0,0 +1,14 @@
1
+ 'use client';
2
+
3
+ import { IndexedTable } from "../optimizer/statistics.mjs";
4
+
5
+ //#region src/sql/indexes.d.ts
6
+ declare function isIndexSupported(index: IndexedTable): boolean;
7
+ /**
8
+ * Doesn't necessarily decide whether the index can be dropped but can be
9
+ * used to not even try dropping indexes that _definitely_ cannot be dropped
10
+ */
11
+ declare function isIndexProbablyDroppable(index: IndexedTable): boolean;
12
+ //#endregion
13
+ export { isIndexProbablyDroppable, isIndexSupported };
14
+ //# sourceMappingURL=indexes.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexes.d.mts","names":[],"sources":["../../src/sql/indexes.ts"],"mappings":";;;;;iBAEgB,gBAAA,CAAiB,KAAA,EAAO,YAAA;;;AAAxC;;iBAQgB,wBAAA,CAAyB,KAAA,EAAO,YAAA"}
@@ -0,0 +1,16 @@
1
+ "use client";
2
+ //#region src/sql/indexes.ts
3
+ function isIndexSupported(index) {
4
+ return index.index_type === "btree" || index.index_type === "gin";
5
+ }
6
+ /**
7
+ * Doesn't necessarily decide whether the index can be dropped but can be
8
+ * used to not even try dropping indexes that _definitely_ cannot be dropped
9
+ */
10
+ function isIndexProbablyDroppable(index) {
11
+ return !index.is_primary && !index.is_unique;
12
+ }
13
+ //#endregion
14
+ export { isIndexProbablyDroppable, isIndexSupported };
15
+
16
+ //# sourceMappingURL=indexes.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexes.mjs","names":[],"sources":["../../src/sql/indexes.ts"],"sourcesContent":["import type { IndexedTable } from \"../optimizer/statistics.js\";\n\nexport function isIndexSupported(index: IndexedTable) {\n return index.index_type === \"btree\" || index.index_type === \"gin\";\n}\n\n/**\n * Doesn't necessarily decide whether the index can be dropped but can be\n * used to not even try dropping indexes that _definitely_ cannot be dropped\n */\nexport function isIndexProbablyDroppable(index: IndexedTable) {\n /* TODO: until we have a better solution, this is the best we have */\n /* The is_unique check is problematic only if the column is declared as unique */\n return !index.is_primary && !index.is_unique;\n}\n"],"mappings":";;AAEA,SAAgB,iBAAiB,OAAqB;AACpD,QAAO,MAAM,eAAe,WAAW,MAAM,eAAe;;;;;;AAO9D,SAAgB,yBAAyB,OAAqB;AAG5D,QAAO,CAAC,MAAM,cAAc,CAAC,MAAM"}