@malloydata/malloy-tests 0.0.95-dev231019211822 → 0.0.95
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/README.md +213 -1
- package/dist/api.spec.d.ts +1 -1
- package/dist/api.spec.js +6 -13
- package/dist/api.spec.js.map +1 -1
- package/dist/databases/all/db_index.spec.js +21 -41
- package/dist/databases/all/db_index.spec.js.map +1 -1
- package/dist/databases/all/expr.spec.js +262 -339
- package/dist/databases/all/expr.spec.js.map +1 -1
- package/dist/databases/all/functions.spec.js +37 -35
- package/dist/databases/all/functions.spec.js.map +1 -1
- package/dist/databases/all/join.spec.js +125 -169
- package/dist/databases/all/join.spec.js.map +1 -1
- package/dist/databases/all/nomodel.spec.js +335 -594
- package/dist/databases/all/nomodel.spec.js.map +1 -1
- package/dist/databases/all/orderby.spec.js +82 -128
- package/dist/databases/all/orderby.spec.js.map +1 -1
- package/dist/databases/all/sql_expressions.spec.js +27 -43
- package/dist/databases/all/sql_expressions.spec.js.map +1 -1
- package/dist/databases/all/time.spec.js +63 -103
- package/dist/databases/all/time.spec.js.map +1 -1
- package/dist/databases/bigquery/double_truncation.spec.js +1 -1
- package/dist/databases/bigquery/handexpr.spec.js +12 -12
- package/dist/databases/bigquery/injestion_time_partitioning.spec.js +22 -22
- package/dist/databases/bigquery/joined_filters.spec.js +3 -3
- package/dist/databases/bigquery/json.spec.d.ts +1 -1
- package/dist/databases/bigquery/json.spec.js +25 -45
- package/dist/databases/bigquery/json.spec.js.map +1 -1
- package/dist/databases/bigquery/malloy_query.spec.d.ts +1 -1
- package/dist/databases/bigquery/malloy_query.spec.js +47 -48
- package/dist/databases/bigquery/malloy_query.spec.js.map +1 -1
- package/dist/databases/bigquery/time.spec.js +9 -13
- package/dist/databases/bigquery/time.spec.js.map +1 -1
- package/dist/databases/bigquery/wildcard_table_names.spec.js +19 -19
- package/dist/databases/bigquery-duckdb/nested_source_table.spec.js +53 -87
- package/dist/databases/bigquery-duckdb/nested_source_table.spec.js.map +1 -1
- package/dist/databases/bigquery-postgres/multi_connection.spec.js +5 -20
- package/dist/databases/bigquery-postgres/multi_connection.spec.js.map +1 -1
- package/dist/databases/bigquery-postgres/streaming.spec.js +6 -6
- package/dist/databases/bigquery-postgres/streaming.spec.js.map +1 -1
- package/dist/databases/duckdb/duckdb.spec.js +24 -33
- package/dist/databases/duckdb/duckdb.spec.js.map +1 -1
- package/dist/databases/postgres/postgres.spec.js +46 -67
- package/dist/databases/postgres/postgres.spec.js.map +1 -1
- package/dist/jestMatcher.spec.d.ts +1 -0
- package/dist/jestMatcher.spec.js +81 -0
- package/dist/jestMatcher.spec.js.map +1 -0
- package/dist/render/render.spec.js +10 -12
- package/dist/render/render.spec.js.map +1 -1
- package/dist/tags.spec.js +22 -2
- package/dist/tags.spec.js.map +1 -1
- package/dist/util/db-jest-matchers.d.ts +17 -6
- package/dist/util/db-jest-matchers.js +81 -20
- package/dist/util/db-jest-matchers.js.map +1 -1
- package/dist/util/index.d.ts +1 -2
- package/dist/util/index.js +11 -13
- package/dist/util/index.js.map +1 -1
- package/package.json +6 -6
- package/src/api.spec.ts +7 -16
- package/src/databases/all/db_index.spec.ts +22 -48
- package/src/databases/all/expr.spec.ts +273 -431
- package/src/databases/all/functions.spec.ts +37 -35
- package/src/databases/all/join.spec.ts +130 -196
- package/src/databases/all/nomodel.spec.ts +333 -689
- package/src/databases/all/orderby.spec.ts +87 -161
- package/src/databases/all/sql_expressions.spec.ts +29 -49
- package/src/databases/all/time.spec.ts +73 -130
- package/src/databases/bigquery/double_truncation.spec.ts +1 -1
- package/src/databases/bigquery/handexpr.spec.ts +12 -12
- package/src/databases/bigquery/injestion_time_partitioning.spec.ts +22 -22
- package/src/databases/bigquery/joined_filters.spec.ts +3 -3
- package/src/databases/bigquery/json.spec.ts +25 -49
- package/src/databases/bigquery/malloy_query.spec.ts +47 -54
- package/src/databases/bigquery/time.spec.ts +13 -17
- package/src/databases/bigquery/wildcard_table_names.spec.ts +19 -19
- package/src/databases/bigquery-duckdb/nested_source_table.spec.ts +56 -98
- package/src/databases/bigquery-postgres/multi_connection.spec.ts +5 -23
- package/src/databases/bigquery-postgres/streaming.spec.ts +12 -6
- package/src/databases/duckdb/duckdb.spec.ts +31 -43
- package/src/databases/postgres/postgres.spec.ts +54 -84
- package/src/jestMatcher.spec.ts +88 -0
- package/src/render/render.spec.ts +10 -12
- package/src/tags.spec.ts +22 -2
- package/src/util/db-jest-matchers.ts +106 -32
- package/src/util/index.ts +16 -14
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/* eslint-disable no-console */
|
|
2
3
|
/*
|
|
3
4
|
* Copyright 2023 Google LLC
|
|
4
5
|
*
|
|
@@ -22,6 +23,7 @@
|
|
|
22
23
|
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
23
24
|
*/
|
|
24
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
const malloy_1 = require("@malloydata/malloy");
|
|
25
27
|
expect.extend({
|
|
26
28
|
/**
|
|
27
29
|
* Check the return of `sqlEQ(expr1,expr2)` and error if the database
|
|
@@ -41,50 +43,109 @@ expect.extend({
|
|
|
41
43
|
message: () => 'SQL expression matched',
|
|
42
44
|
};
|
|
43
45
|
},
|
|
44
|
-
async
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
async malloyResultMatches(querySrc, runtime, shouldEqual) {
|
|
47
|
+
// TODO -- THIS IS NOT OK BUT I AM NOT FIXING IT NOW
|
|
48
|
+
if (querySrc.indexOf('nest:') >= 0) {
|
|
49
|
+
if (runtime instanceof malloy_1.Runtime) {
|
|
50
|
+
return {
|
|
51
|
+
pass: true,
|
|
52
|
+
message: () => 'Test was skipped since connection does not support nesting.',
|
|
53
|
+
};
|
|
54
|
+
}
|
|
50
55
|
}
|
|
51
56
|
let query;
|
|
52
57
|
try {
|
|
53
58
|
query = runtime.loadQuery(querySrc);
|
|
54
59
|
}
|
|
55
60
|
catch (e) {
|
|
56
|
-
return {
|
|
61
|
+
return {
|
|
62
|
+
pass: false,
|
|
63
|
+
message: () => `loadQuery failed: ${e.message}`,
|
|
64
|
+
};
|
|
57
65
|
}
|
|
58
66
|
let result;
|
|
59
67
|
try {
|
|
60
68
|
result = await query.run();
|
|
61
69
|
}
|
|
62
70
|
catch (e) {
|
|
63
|
-
|
|
71
|
+
let failMsg = `query.run failed: ${e.message}`;
|
|
72
|
+
if (e instanceof malloy_1.MalloyError) {
|
|
73
|
+
failMsg = `Error in query compilation\n${errorLogToString(querySrc, e.problems)}`;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
try {
|
|
77
|
+
failMsg += `\nSQL: ${await query.getSQL()}`;
|
|
78
|
+
}
|
|
79
|
+
catch (e2) {
|
|
80
|
+
// we could not show the SQL for unknown reasons
|
|
81
|
+
}
|
|
82
|
+
}
|
|
64
83
|
return { pass: false, message: () => failMsg };
|
|
65
84
|
}
|
|
85
|
+
const allRows = Array.isArray(shouldEqual) ? shouldEqual : [shouldEqual];
|
|
86
|
+
let i = 0;
|
|
66
87
|
const fails = [];
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
const actuallyGot = got instanceof Date ? got.getTime() : got;
|
|
72
|
-
if (actuallyGot !== mustBe) {
|
|
73
|
-
fails.push(`Expected {${name}: ${value}} Got: ${got}`);
|
|
74
|
-
}
|
|
88
|
+
const gotRows = result.data.toObject().length;
|
|
89
|
+
if (Array.isArray(shouldEqual)) {
|
|
90
|
+
if (gotRows !== allRows.length) {
|
|
91
|
+
fails.push(`Expected result.rows=${allRows.length} Got: ${gotRows}`);
|
|
75
92
|
}
|
|
76
|
-
|
|
77
|
-
|
|
93
|
+
}
|
|
94
|
+
for (const expected of allRows) {
|
|
95
|
+
for (const [name, value] of Object.entries(expected)) {
|
|
96
|
+
const pExpect = JSON.stringify(value);
|
|
97
|
+
const row = allRows.length > 1 ? `[${i}]` : '';
|
|
98
|
+
const expected = `Expected ${row}{${name}: ${pExpect}}`;
|
|
99
|
+
try {
|
|
100
|
+
const nestOne = name.split('.');
|
|
101
|
+
const resultPath = [i, nestOne[0]];
|
|
102
|
+
for (const child of nestOne.slice(1)) {
|
|
103
|
+
resultPath.push(0);
|
|
104
|
+
resultPath.push(child);
|
|
105
|
+
}
|
|
106
|
+
const got = result.data.path(...resultPath).value;
|
|
107
|
+
const pGot = JSON.stringify(got);
|
|
108
|
+
const mustBe = value instanceof Date ? value.getTime() : value;
|
|
109
|
+
const actuallyGot = got instanceof Date ? got.getTime() : got;
|
|
110
|
+
if (typeof mustBe === 'number' && typeof actuallyGot !== 'number') {
|
|
111
|
+
fails.push(`${expected} Got: Non Numeric '${pGot}'`);
|
|
112
|
+
}
|
|
113
|
+
else if (actuallyGot !== mustBe) {
|
|
114
|
+
fails.push(`${expected} Got: ${pGot}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch (e) {
|
|
118
|
+
fails.push(`${expected} Error: ${e.message}`);
|
|
119
|
+
}
|
|
78
120
|
}
|
|
121
|
+
i += 1;
|
|
79
122
|
}
|
|
80
123
|
if (fails.length !== 0) {
|
|
81
|
-
const
|
|
124
|
+
const fromSQL = ' ' + (await query.getSQL()).split('\n').join('\n ');
|
|
125
|
+
const failMsg = `SQL Generated:\n${fromSQL}\n${fails.join('\n')}`;
|
|
82
126
|
return { pass: false, message: () => failMsg };
|
|
83
127
|
}
|
|
84
128
|
return {
|
|
85
129
|
pass: true,
|
|
86
|
-
message: () =>
|
|
130
|
+
message: () => 'All rows matched expected results',
|
|
87
131
|
};
|
|
88
132
|
},
|
|
89
133
|
});
|
|
134
|
+
function errorLogToString(src, msgs) {
|
|
135
|
+
let lovely = '';
|
|
136
|
+
let lineNo = 0;
|
|
137
|
+
for (const line of src.split('\n')) {
|
|
138
|
+
lovely += ` | ${line}\n`;
|
|
139
|
+
for (const entry of msgs) {
|
|
140
|
+
if (entry.at) {
|
|
141
|
+
if (entry.at.range.start.line === lineNo) {
|
|
142
|
+
const charFrom = entry.at.range.start.character;
|
|
143
|
+
lovely += `!!!!! ${' '.repeat(charFrom)}^ ${entry.message}\n`;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
lineNo += 1;
|
|
148
|
+
}
|
|
149
|
+
return lovely;
|
|
150
|
+
}
|
|
90
151
|
//# sourceMappingURL=db-jest-matchers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-jest-matchers.js","sourceRoot":"","sources":["../../src/util/db-jest-matchers.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;
|
|
1
|
+
{"version":3,"file":"db-jest-matchers.js","sourceRoot":"","sources":["../../src/util/db-jest-matchers.ts"],"names":[],"mappings":"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"}
|
package/dist/util/index.d.ts
CHANGED
|
@@ -8,9 +8,8 @@ export declare function describeIfDatabaseAvailable(acceptableDatabases: string[
|
|
|
8
8
|
interface InitValues {
|
|
9
9
|
sql?: string;
|
|
10
10
|
malloy?: string;
|
|
11
|
-
connection?: string;
|
|
12
11
|
}
|
|
13
|
-
export declare function mkSqlEqWith(runtime: Runtime, initV?: InitValues): (expr: string, result: string | boolean | number) => Promise<Result>;
|
|
12
|
+
export declare function mkSqlEqWith(runtime: Runtime, cName: string, initV?: InitValues): (expr: string, result: string | boolean | number) => Promise<Result>;
|
|
14
13
|
export declare function runQuery(runtime: Runtime, querySrc: string): Promise<Result>;
|
|
15
14
|
export declare const testIf: (condition: boolean) => jest.It;
|
|
16
15
|
export {};
|
package/dist/util/index.js
CHANGED
|
@@ -75,18 +75,14 @@ function sqlSafe(str) {
|
|
|
75
75
|
.replace(/\\/g, '{backslash}')
|
|
76
76
|
.replace(/"/g, '{double-quote}');
|
|
77
77
|
}
|
|
78
|
-
function mkSqlEqWith(runtime, initV) {
|
|
78
|
+
function mkSqlEqWith(runtime, cName, initV) {
|
|
79
79
|
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
80
80
|
return async function (expr, result) {
|
|
81
81
|
const qExpr = expr.replace(/'/g, '`');
|
|
82
82
|
const sqlV = (initV === null || initV === void 0 ? void 0 : initV.sql) || 'SELECT 1 as one';
|
|
83
83
|
const malloyV = (initV === null || initV === void 0 ? void 0 : initV.malloy) || '';
|
|
84
|
-
const select = (initV === null || initV === void 0 ? void 0 : initV.connection)
|
|
85
|
-
? ` connection: "${initV.connection}" select`
|
|
86
|
-
: 'select';
|
|
87
84
|
const sourceDef = `
|
|
88
|
-
|
|
89
|
-
source: basicTypes is from_sql(sqlData) ${malloyV}
|
|
85
|
+
source: basicTypes is ${cName}.sql("""${sqlV}""") ${malloyV}
|
|
90
86
|
`;
|
|
91
87
|
let query;
|
|
92
88
|
if (typeof result === 'boolean') {
|
|
@@ -97,18 +93,20 @@ function mkSqlEqWith(runtime, initV) {
|
|
|
97
93
|
: `${notEq} when ${varName}`;
|
|
98
94
|
const elsePick = result ? notEq : "'='";
|
|
99
95
|
query = `${sourceDef}
|
|
100
|
-
|
|
96
|
+
run: basicTypes
|
|
101
97
|
-> {
|
|
102
|
-
|
|
98
|
+
extend: {dimension: ${varName} is ${expr}}
|
|
103
99
|
select: calc is pick ${whenPick} else ${elsePick}
|
|
104
100
|
}`;
|
|
105
101
|
}
|
|
106
102
|
else if (typeof result === 'number') {
|
|
107
103
|
query = `${sourceDef}
|
|
108
|
-
|
|
104
|
+
run: basicTypes
|
|
109
105
|
-> {
|
|
110
|
-
|
|
111
|
-
|
|
106
|
+
extend: {
|
|
107
|
+
dimension: expect is ${result}
|
|
108
|
+
dimension: got is ${expr}
|
|
109
|
+
}
|
|
112
110
|
select: calc is
|
|
113
111
|
pick '=' when expect = got
|
|
114
112
|
else concat('sqlEq failed', CHR(10), ' Expected: ${qExpr} == ${result}', CHR(10), ' Received: ', got::string)
|
|
@@ -119,7 +117,7 @@ function mkSqlEqWith(runtime, initV) {
|
|
|
119
117
|
const resultNoBacks = result.replace(/\\/g, '\\\\');
|
|
120
118
|
const qResult = `'${resultNoBacks.replace(/'/g, "\\'")}'`;
|
|
121
119
|
query = `${sourceDef}
|
|
122
|
-
|
|
120
|
+
run: basicTypes
|
|
123
121
|
-> {
|
|
124
122
|
select: expect is ${qResult}
|
|
125
123
|
select: got is ${expr}
|
|
@@ -132,7 +130,7 @@ function mkSqlEqWith(runtime, initV) {
|
|
|
132
130
|
else {
|
|
133
131
|
const qResult = result.replace(/'/g, '`');
|
|
134
132
|
query = `${sourceDef}
|
|
135
|
-
|
|
133
|
+
run: basicTypes
|
|
136
134
|
-> {
|
|
137
135
|
select: expect is ${result}
|
|
138
136
|
select: got is ${expr}
|
package/dist/util/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;AAUH,SAAgB,SAAS,CAAC,KAAa,EAAE,KAAa;IACpD,OAAO;QACL,UAAU,EAAE,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAC,EAAE,KAAK,KAAK,GAAG,CAAC;QACzD,IAAI,EAAE,GAAG,KAAK,KAAK,KAAK,GAAG;QAC3B,cAAc,EAAE,QAAQ;KACzB,CAAC;AACJ,CAAC;AAND,8BAMC;AAED,SAAgB,WAAW,CAAC,KAAa,EAAE,KAAa;IACtD,OAAO;QACL,UAAU,EAAE,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAC,EAAE,UAAU,KAAK,GAAG,CAAC;QAC9D,IAAI,EAAE,GAAG,KAAK,KAAK,KAAK,GAAG;QAC3B,cAAc,EAAE,QAAQ;KACzB,CAAC;AACJ,CAAC;AAND,kCAMC;AAED,SAAgB,OAAO,CAAC,KAAa,EAAE,IAAY;IACjD,MAAM,MAAM,GAAG,IAAI,IAAI,kBAAkB,CAAC;IAC1C,MAAM,IAAI,GAAG,IAAI,IAAI,GAAG,CAAC,kBAAkB,CAAC;IAC5C,MAAM,EAAE,GAAa,EAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAC,CAAC;IAClD,OAAO;QACL,UAAU,EAAE,CAAC,EAAE,EAAE,KAAK,MAAM,OAAO,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC;QACpD,IAAI,EAAE,GAAG,KAAK,KAAK,IAAI,EAAE;QACzB,cAAc,EAAE,QAAQ;KACzB,CAAC;AACJ,CAAC;AATD,0BASC;AAED,oGAAoG;AACpG,0GAA0G;AAC1G,SAAgB,0BAA0B,CACxC,gBAA0B;IAE1B,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QACpC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QAC5C,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;YAChC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAClC,CAAC,CAAC,gBAAgB,CAAC;AACvB,CAAC;AARD,gEAQC;AAED,+GAA+G;AAC/G,qFAAqF;AACrF,6FAA6F;AAC7F,SAAgB,2BAA2B,CACzC,mBAA6B;IAE7B,MAAM,gBAAgB,GAAG,0BAA0B,CAAC,mBAAmB,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9E,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC7E,CAAC;AAPD,kEAOC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -18,11 +18,11 @@
|
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"@jest/globals": "^29.4.3",
|
|
21
|
-
"@malloydata/db-bigquery": "^0.0.95
|
|
22
|
-
"@malloydata/db-duckdb": "^0.0.95
|
|
23
|
-
"@malloydata/db-postgres": "^0.0.95
|
|
24
|
-
"@malloydata/malloy": "^0.0.95
|
|
25
|
-
"@malloydata/render": "^0.0.95
|
|
21
|
+
"@malloydata/db-bigquery": "^0.0.95",
|
|
22
|
+
"@malloydata/db-duckdb": "^0.0.95",
|
|
23
|
+
"@malloydata/db-postgres": "^0.0.95",
|
|
24
|
+
"@malloydata/malloy": "^0.0.95",
|
|
25
|
+
"@malloydata/render": "^0.0.95",
|
|
26
26
|
"jsdom": "^22.1.0",
|
|
27
27
|
"luxon": "^1.26.4",
|
|
28
28
|
"madge": "^6.0.0"
|
|
@@ -31,5 +31,5 @@
|
|
|
31
31
|
"@types/jsdom": "^21.1.1",
|
|
32
32
|
"@types/luxon": "^1.26.4"
|
|
33
33
|
},
|
|
34
|
-
"version": "0.0.95
|
|
34
|
+
"version": "0.0.95"
|
|
35
35
|
}
|
package/src/api.spec.ts
CHANGED
|
@@ -23,13 +23,14 @@
|
|
|
23
23
|
*/
|
|
24
24
|
|
|
25
25
|
import {runtimeFor} from './runtimes';
|
|
26
|
+
import './util/db-jest-matchers';
|
|
26
27
|
|
|
27
28
|
const runtime = runtimeFor('duckdb');
|
|
28
29
|
|
|
29
30
|
describe('extendModel', () => {
|
|
30
31
|
test('can run query in extend section', async () => {
|
|
31
32
|
const model = runtime.loadModel(`
|
|
32
|
-
query: q1 is table('malloytest.aircraft')->{
|
|
33
|
+
query: q1 is duckdb.table('malloytest.aircraft')->{
|
|
33
34
|
where: state = 'CA'
|
|
34
35
|
group_by: state
|
|
35
36
|
}
|
|
@@ -39,7 +40,7 @@ describe('extendModel', () => {
|
|
|
39
40
|
expect(oneState.data.path(0, 'state').value).toBe('CA');
|
|
40
41
|
|
|
41
42
|
const extended = model.extendModel(`
|
|
42
|
-
query: q2 is table('malloytest.aircraft')->{
|
|
43
|
+
query: q2 is duckdb.table('malloytest.aircraft')->{
|
|
43
44
|
where: state = 'NV'
|
|
44
45
|
group_by: state
|
|
45
46
|
}
|
|
@@ -50,7 +51,7 @@ describe('extendModel', () => {
|
|
|
50
51
|
});
|
|
51
52
|
test('can reference query from previous section ', async () => {
|
|
52
53
|
const model = runtime.loadModel(`
|
|
53
|
-
query: q1 is table('malloytest.aircraft')->{
|
|
54
|
+
query: q1 is duckdb.table('malloytest.aircraft')->{
|
|
54
55
|
where: state = 'CA'
|
|
55
56
|
group_by: state
|
|
56
57
|
}
|
|
@@ -59,19 +60,7 @@ describe('extendModel', () => {
|
|
|
59
60
|
const oneState = await q1.run();
|
|
60
61
|
expect(oneState.data.path(0, 'state').value).toBe('CA');
|
|
61
62
|
|
|
62
|
-
const extended = model.extendModel('query: q2 is
|
|
63
|
-
const q2 = extended.loadQueryByName('q2');
|
|
64
|
-
const twoState = await q2.run();
|
|
65
|
-
expect(twoState.data.path(0, 'state').value).toBe('CA');
|
|
66
|
-
});
|
|
67
|
-
test('can reference sql from previous section ', async () => {
|
|
68
|
-
const model = runtime.loadModel(`
|
|
69
|
-
sql: q1 is { connection: "duckdb" select: """SELECT 'CA' as state""" }
|
|
70
|
-
`);
|
|
71
|
-
|
|
72
|
-
const extended = model.extendModel(
|
|
73
|
-
'query: q2 is from_sql(q1)->{select: *}'
|
|
74
|
-
);
|
|
63
|
+
const extended = model.extendModel('query: q2 is q1 -> { select: * }');
|
|
75
64
|
const q2 = extended.loadQueryByName('q2');
|
|
76
65
|
const twoState = await q2.run();
|
|
77
66
|
expect(twoState.data.path(0, 'state').value).toBe('CA');
|
|
@@ -82,3 +71,5 @@ describe('extendModel', () => {
|
|
|
82
71
|
);
|
|
83
72
|
});
|
|
84
73
|
});
|
|
74
|
+
|
|
75
|
+
afterAll(async () => await runtime.connection.close());
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
26
26
|
|
|
27
27
|
import {RuntimeList, allDatabases} from '../../runtimes';
|
|
28
|
-
import {databasesFromEnvironmentOr} from '../../util';
|
|
28
|
+
import {databasesFromEnvironmentOr, testIf} from '../../util';
|
|
29
29
|
import '../../util/db-jest-matchers';
|
|
30
30
|
|
|
31
31
|
const runtimes = new RuntimeList(databasesFromEnvironmentOr(allDatabases));
|
|
@@ -39,7 +39,7 @@ runtimes.runtimeMap.forEach((runtime, databaseName) => {
|
|
|
39
39
|
it(`basic index - ${databaseName}`, async () => {
|
|
40
40
|
const model = await runtime.loadModel(
|
|
41
41
|
`
|
|
42
|
-
source: airports is table('malloytest.airports') {
|
|
42
|
+
source: airports is ${databaseName}.table('malloytest.airports') extend {
|
|
43
43
|
}
|
|
44
44
|
`
|
|
45
45
|
);
|
|
@@ -69,7 +69,7 @@ runtimes.runtimeMap.forEach((runtime, databaseName) => {
|
|
|
69
69
|
it(`index value map - ${databaseName}`, async () => {
|
|
70
70
|
const model = await runtime.loadModel(
|
|
71
71
|
`
|
|
72
|
-
source: airports is table('malloytest.airports') {
|
|
72
|
+
source: airports is ${databaseName}.table('malloytest.airports') extend {
|
|
73
73
|
}
|
|
74
74
|
`
|
|
75
75
|
);
|
|
@@ -87,68 +87,42 @@ runtimes.runtimeMap.forEach((runtime, databaseName) => {
|
|
|
87
87
|
});
|
|
88
88
|
|
|
89
89
|
it(`index no sample rows - ${databaseName}`, async () => {
|
|
90
|
-
|
|
91
|
-
.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
query: t-> {index:one, state }
|
|
98
|
-
-> {select: fieldName, weight, fieldValue; order_by: 2 desc; where: fieldName = 'one'}
|
|
99
|
-
`
|
|
100
|
-
)
|
|
101
|
-
.run();
|
|
102
|
-
// console.log(result.data.toObject());
|
|
103
|
-
expect(result.data.path(0, 'fieldName').value).toBe('one');
|
|
104
|
-
expect(result.data.path(0, 'weight').value).toBe(51);
|
|
90
|
+
await expect(`
|
|
91
|
+
run: ${databaseName}.table('malloytest.state_facts') extend {
|
|
92
|
+
dimension: one is 'one'
|
|
93
|
+
} -> {index:one, state }
|
|
94
|
+
-> {select: fieldName, weight, fieldValue; order_by: 2 desc; where: fieldName = 'one'}
|
|
95
|
+
`).malloyResultMatches(runtime, {fieldName: 'one', weight: 51});
|
|
105
96
|
});
|
|
106
97
|
|
|
107
98
|
// bigquery doesn't support row count based sampling.
|
|
108
|
-
(databaseName
|
|
99
|
+
testIf(databaseName !== 'bigquery')(
|
|
109
100
|
`index rows count - ${databaseName}`,
|
|
110
101
|
async () => {
|
|
111
|
-
|
|
112
|
-
.
|
|
113
|
-
`
|
|
114
|
-
source: t is table('malloytest.state_facts') {
|
|
102
|
+
await expect(`
|
|
103
|
+
run: ${databaseName}.table('malloytest.state_facts') extend {
|
|
115
104
|
dimension: one is 'one'
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
-> {select: fieldName, weight, fieldValue; order_by: 2 desc; where: fieldName = 'one'}
|
|
120
|
-
`
|
|
121
|
-
)
|
|
122
|
-
.run();
|
|
123
|
-
expect(result.data.path(0, 'fieldName').value).toBe('one');
|
|
124
|
-
expect(result.data.path(0, 'weight').value).toBe(10);
|
|
105
|
+
} -> {index:one, state; sample: 10 }
|
|
106
|
+
-> {select: fieldName, weight, fieldValue; order_by: 2 desc; where: fieldName = 'one'}
|
|
107
|
+
`).malloyResultMatches(runtime, {fieldName: 'one', weight: 10});
|
|
125
108
|
}
|
|
126
109
|
);
|
|
127
110
|
|
|
128
111
|
it(`index rows count - ${databaseName}`, async () => {
|
|
129
|
-
|
|
130
|
-
.
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
query: t-> {index:one, tailnum; sample: 50% }
|
|
137
|
-
-> {select: fieldName, weight, fieldValue; order_by: 2 desc; where: fieldName = 'one'}
|
|
138
|
-
`
|
|
139
|
-
)
|
|
140
|
-
.run();
|
|
141
|
-
// console.log(result.sql);
|
|
112
|
+
await expect(`
|
|
113
|
+
run: ${databaseName}.table('malloytest.flights') extend {
|
|
114
|
+
dimension: one is 'one'
|
|
115
|
+
} -> {index:one, tailnum; sample: 50% }
|
|
116
|
+
-> {select: fieldName, weight, fieldValue; order_by: 2 desc; where: fieldName = 'one'}
|
|
117
|
+
`).malloyResultMatches(runtime, {fieldName: 'one'});
|
|
142
118
|
// Hard to get consistent results here so just check that we get a value back.
|
|
143
|
-
//console.log(result.data.toObject());
|
|
144
|
-
expect(result.data.path(0, 'fieldName').value).toBe('one');
|
|
145
119
|
});
|
|
146
120
|
|
|
147
121
|
// it(`fanned data index - ${databaseName}`, async () => {
|
|
148
122
|
// const result = await runtime
|
|
149
123
|
// .loadModel(
|
|
150
124
|
// `
|
|
151
|
-
// source: movies is table('malloy-303216.imdb.movies') {
|
|
125
|
+
// source: movies is ${databaseName}.table('malloy-303216.imdb.movies') extend {
|
|
152
126
|
// }
|
|
153
127
|
// `
|
|
154
128
|
// )
|