Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion deno.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
"@libpg-query/parser": "npm:@libpg-query/parser@^17.6.3",
"@opentelemetry/api": "jsr:@opentelemetry/api@^1.9.0",
"@pgsql/types": "npm:@pgsql/types@^17.6.1",
"@query-doctor/core": "npm:@query-doctor/core@^0.2.5",
"@query-doctor/core": "npm:@query-doctor/core@^0.3.0",
"@rabbit-company/rate-limiter": "jsr:@rabbit-company/rate-limiter@^3.0.0",
"@std/assert": "jsr:@std/assert@^1.0.14",
"@std/collections": "jsr:@std/collections@^1.1.3",
Expand Down
8 changes: 4 additions & 4 deletions deno.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 7 additions & 7 deletions src/remote/query-optimizer.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,11 @@ Deno.test({
const conn = Connectable.fromString(pg.getConnectionUri());
const optimizer = new QueryOptimizer(manager, conn);

const expectedImprovements = ["select * from testing where a = $1"];
const expectedImprovements = ["select * from testing where a = $1;"];
const expectedNoImprovements = [
"select * from testing where b = $1",
"select * from testing where b > $1",
"select * from testing where b < $1",
"select * from testing where b = $1;",
"select * from testing where b > $1;",
"select * from testing where b < $1;",
];

let improvements: string[] = [];
Expand Down Expand Up @@ -121,9 +121,9 @@ Deno.test({
new RecentQuery(
{
calls: "0",
formattedQuery: "select * from testing where a >= $1",
formattedQuery: "select * from testing where a >= $1;",
meanTime: 100,
query: "select * from testing where a >= $1",
query: "select * from testing where a >= $1;",
rows: "1",
topLevel: true,
username: "test",
Expand All @@ -143,7 +143,7 @@ Deno.test({
),
]);
assertArrayIncludes(
[...expectedImprovements, "select * from testing where a >= $1"],
[...expectedImprovements, "select * from testing where a >= $1;"],
improvements,
);
assertArrayIncludes(expectedNoImprovements, noImprovements);
Expand Down
12 changes: 5 additions & 7 deletions src/remote/remote.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,8 @@ Deno.test({

const queries = optimizedQueries.map((f) => f.query);
assertArrayIncludes(queries, [
"create table testing(a int, b text)",
"select * from testing where a = $1",
"create table testing(a int, b text);",
"select * from testing where a = $1;",
]);

assertOk(result.schema);
Expand Down Expand Up @@ -407,10 +407,10 @@ Deno.test({
const queryStrings = queries.map((q) => q.query);

assertArrayIncludes(queryStrings, [
"select * from conditions where time < now()",
"select * from conditions where time < now();",
]);
const indexesAfter = await t.exec(
"select indexname from pg_indexes where schemaname = 'public'",
"select indexname from pg_indexes where schemaname = 'public';",
);
assertEquals(
indexesAfter.length,
Expand Down Expand Up @@ -490,9 +490,7 @@ Deno.test({
"fulfilled",
"Schema poll should succeed",
);
const diffs = diffsResult.status === "fulfilled"
? diffsResult.value
: [];
const diffs = diffsResult.status === "fulfilled" ? diffsResult.value : [];

assertEquals(
diffs.length,
Expand Down
13 changes: 11 additions & 2 deletions src/sql/recent-query.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
Analyzer,
DiscoveredColumnReference,
Nudge,
PostgresQueryBuilder,
PssRewriter,
SQLCommenterTag,
type TableReference,
Expand All @@ -19,6 +20,7 @@ import type { LiveQueryOptimization } from "../remote/optimization.ts";
* and supplying the date the query was last seen
*/
export class RecentQuery {
private static HARDCODED_LIMIT = 50;
private static rewriter = new PssRewriter();

readonly formattedQuery: string;
Expand Down Expand Up @@ -70,8 +72,8 @@ export class RecentQuery {
seenAt: number,
) {
const analyzer = new Analyzer(parse);
const rewrittenQuery = RecentQuery.rewriter.rewrite(data.query);
const analysis = await analyzer.analyze(rewrittenQuery);
const query = this.rewriteQuery(data.query);
const analysis = await analyzer.analyze(query);
const formattedQuery = await RecentQuery.formatQuery(
analysis.queryWithoutTags,
);
Expand All @@ -86,6 +88,13 @@ export class RecentQuery {
);
}

private static rewriteQuery(rawQuery: string): string {
const query = new PostgresQueryBuilder(rawQuery).replaceLimit(
RecentQuery.HARDCODED_LIMIT,
).build();
return RecentQuery.rewriter.rewrite(query);
}

private static async formatQuery(query: string): Promise<string> {
try {
return await prettier.format(query, {
Expand Down