-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathperf-test.ts
85 lines (81 loc) · 2.21 KB
/
perf-test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import fs from "fs";
import path from "path";
import benchmark from "benchmark";
import { parse } from "../lib/main";
// Using test data from Chinook database
// https://github.com/lerocha/chinook-database
function getTestData(dialect: string) {
return fs.readFileSync(
path.resolve(__dirname, `./data-${dialect}.sql`),
"utf-8"
);
}
function createTestData(variant: string) {
if (variant === "func") {
const sql = "SELECT foo(bar(baz()))";
return {
sqlite: sql,
mysql: sql,
bigquery: sql,
postgresql: sql,
};
} else if (variant === "paren") {
const sql = "SELECT ((((((1))))))";
return {
sqlite: sql,
mysql: sql,
bigquery: sql,
postgresql: sql,
};
} else if (variant === "list") {
const sql = "SELECT ((1, 2, 3), (4, 5, 6), (7, 8, 9))";
return {
sqlite: sql,
mysql: sql,
bigquery: sql,
postgresql: sql,
};
} else if (variant === "big") {
return {
sqlite: getTestData("sqlite"),
mysql: getTestData("mysql"),
bigquery: getTestData("bigquery"),
postgresql: getTestData("sqlite"), // TODO: postgresql
};
} else if (variant === "select") {
return {
sqlite: getTestData("select"),
mysql: getTestData("select"),
bigquery: getTestData("select"),
postgresql: getTestData("select"),
};
} else if (variant === "case") {
return {
sqlite: getTestData("case"),
mysql: getTestData("case"),
bigquery: getTestData("case"),
postgresql: getTestData("case"),
};
} else {
throw new Error(`Unknown test data variant: ${variant}`);
}
}
const testData = createTestData(process.argv[2]);
const suite = new benchmark.Suite();
suite.add("sqlite", () => {
parse(testData.sqlite, { dialect: "sqlite" });
});
suite.add("mysql", () => {
parse(testData.mysql, { dialect: "mysql" });
});
suite.add("bigquery", () => {
parse(testData.bigquery, { dialect: "bigquery" });
});
suite.add("postgresql", () => {
parse(testData.postgresql, { dialect: "postgresql" });
});
suite.on("cycle", (event: benchmark.Event) => {
console.log(String(event.target));
console.log(` Mean: ${event.target.stats?.mean.toFixed(4) || ""} seconds`);
});
suite.run();