@malloydata/malloy-tests 0.0.138-dev240404193102 → 0.0.138-dev240405003346
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/jest.setup.ts +28 -0
- package/package.json +8 -8
- package/src/databases/all/db_index.spec.ts +4 -6
- package/src/databases/all/expr.spec.ts +27 -36
- package/src/databases/all/join.spec.ts +4 -4
- package/src/databases/all/nomodel.spec.ts +79 -99
- package/src/databases/all/orderby.spec.ts +7 -7
- package/src/databases/all/time.spec.ts +22 -30
- package/src/render/render.spec.ts +52 -55
- package/src/util/index.ts +0 -11
- package/tsconfig.json +2 -2
- package/types/jest.d.ts +8 -0
- package/dist/bin/ping_db.d.ts +0 -1
- package/dist/bin/ping_db.js +0 -44
- package/dist/bin/ping_db.js.map +0 -1
- package/dist/src/api.spec.d.ts +0 -1
- package/dist/src/api.spec.js +0 -113
- package/dist/src/api.spec.js.map +0 -1
- package/dist/src/databases/all/db_index.spec.d.ts +0 -1
- package/dist/src/databases/all/db_index.spec.js +0 -126
- package/dist/src/databases/all/db_index.spec.js.map +0 -1
- package/dist/src/databases/all/expr.spec.d.ts +0 -1
- package/dist/src/databases/all/expr.spec.js +0 -717
- package/dist/src/databases/all/expr.spec.js.map +0 -1
- package/dist/src/databases/all/functions.spec.d.ts +0 -1
- package/dist/src/databases/all/functions.spec.js +0 -1180
- package/dist/src/databases/all/functions.spec.js.map +0 -1
- package/dist/src/databases/all/join.spec.d.ts +0 -1
- package/dist/src/databases/all/join.spec.js +0 -255
- package/dist/src/databases/all/join.spec.js.map +0 -1
- package/dist/src/databases/all/lenses.spec.d.ts +0 -1
- package/dist/src/databases/all/lenses.spec.js +0 -374
- package/dist/src/databases/all/lenses.spec.js.map +0 -1
- package/dist/src/databases/all/nomodel.spec.d.ts +0 -1
- package/dist/src/databases/all/nomodel.spec.js +0 -1071
- package/dist/src/databases/all/nomodel.spec.js.map +0 -1
- package/dist/src/databases/all/orderby.spec.d.ts +0 -1
- package/dist/src/databases/all/orderby.spec.js +0 -170
- package/dist/src/databases/all/orderby.spec.js.map +0 -1
- package/dist/src/databases/all/problems.spec.d.ts +0 -1
- package/dist/src/databases/all/problems.spec.js +0 -106
- package/dist/src/databases/all/problems.spec.js.map +0 -1
- package/dist/src/databases/all/sql_expressions.spec.d.ts +0 -1
- package/dist/src/databases/all/sql_expressions.spec.js +0 -73
- package/dist/src/databases/all/sql_expressions.spec.js.map +0 -1
- package/dist/src/databases/all/time.spec.d.ts +0 -1
- package/dist/src/databases/all/time.spec.js +0 -602
- package/dist/src/databases/all/time.spec.js.map +0 -1
- package/dist/src/databases/bigquery/double_truncation.spec.d.ts +0 -1
- package/dist/src/databases/bigquery/double_truncation.spec.js +0 -50
- package/dist/src/databases/bigquery/double_truncation.spec.js.map +0 -1
- package/dist/src/databases/bigquery/handexpr.spec.d.ts +0 -1
- package/dist/src/databases/bigquery/handexpr.spec.js +0 -723
- package/dist/src/databases/bigquery/handexpr.spec.js.map +0 -1
- package/dist/src/databases/bigquery/injestion_time_partitioning.spec.d.ts +0 -1
- package/dist/src/databases/bigquery/injestion_time_partitioning.spec.js +0 -235
- package/dist/src/databases/bigquery/injestion_time_partitioning.spec.js.map +0 -1
- package/dist/src/databases/bigquery/joined_filters.spec.d.ts +0 -1
- package/dist/src/databases/bigquery/joined_filters.spec.js +0 -72
- package/dist/src/databases/bigquery/joined_filters.spec.js.map +0 -1
- package/dist/src/databases/bigquery/json.spec.d.ts +0 -1
- package/dist/src/databases/bigquery/json.spec.js +0 -66
- package/dist/src/databases/bigquery/json.spec.js.map +0 -1
- package/dist/src/databases/bigquery/malloy_query.spec.d.ts +0 -1
- package/dist/src/databases/bigquery/malloy_query.spec.js +0 -840
- package/dist/src/databases/bigquery/malloy_query.spec.js.map +0 -1
- package/dist/src/databases/bigquery/performance.skipped.spec.d.ts +0 -1
- package/dist/src/databases/bigquery/performance.skipped.spec.js +0 -70
- package/dist/src/databases/bigquery/performance.skipped.spec.js.map +0 -1
- package/dist/src/databases/bigquery/time.spec.d.ts +0 -1
- package/dist/src/databases/bigquery/time.spec.js +0 -52
- package/dist/src/databases/bigquery/time.spec.js.map +0 -1
- package/dist/src/databases/bigquery/wildcard_table_names.spec.d.ts +0 -1
- package/dist/src/databases/bigquery/wildcard_table_names.spec.js +0 -212
- package/dist/src/databases/bigquery/wildcard_table_names.spec.js.map +0 -1
- package/dist/src/databases/bigquery-duckdb/nested_source_table.spec.d.ts +0 -1
- package/dist/src/databases/bigquery-duckdb/nested_source_table.spec.js +0 -213
- package/dist/src/databases/bigquery-duckdb/nested_source_table.spec.js.map +0 -1
- package/dist/src/databases/duckdb/duckdb.spec.d.ts +0 -1
- package/dist/src/databases/duckdb/duckdb.spec.js +0 -124
- package/dist/src/databases/duckdb/duckdb.spec.js.map +0 -1
- package/dist/src/databases/duckdb/streaming.spec.d.ts +0 -1
- package/dist/src/databases/duckdb/streaming.spec.js +0 -142
- package/dist/src/databases/duckdb/streaming.spec.js.map +0 -1
- package/dist/src/databases/multi-connection/multi_connection.spec.d.ts +0 -1
- package/dist/src/databases/multi-connection/multi_connection.spec.js +0 -120
- package/dist/src/databases/multi-connection/multi_connection.spec.js.map +0 -1
- package/dist/src/databases/postgres/postgres.spec.d.ts +0 -1
- package/dist/src/databases/postgres/postgres.spec.js +0 -140
- package/dist/src/databases/postgres/postgres.spec.js.map +0 -1
- package/dist/src/databases/shared/test_list.d.ts +0 -3
- package/dist/src/databases/shared/test_list.js +0 -5
- package/dist/src/databases/shared/test_list.js.map +0 -1
- package/dist/src/databases/streaming/streaming.spec.d.ts +0 -1
- package/dist/src/databases/streaming/streaming.spec.js +0 -93
- package/dist/src/databases/streaming/streaming.spec.js.map +0 -1
- package/dist/src/dependencies.spec.d.ts +0 -1
- package/dist/src/dependencies.spec.js +0 -63
- package/dist/src/dependencies.spec.js.map +0 -1
- package/dist/src/index.d.ts +0 -4
- package/dist/src/index.js +0 -49
- package/dist/src/index.js.map +0 -1
- package/dist/src/jestMatcher.spec.d.ts +0 -1
- package/dist/src/jestMatcher.spec.js +0 -81
- package/dist/src/jestMatcher.spec.js.map +0 -1
- package/dist/src/model/sql_source.spec.d.ts +0 -1
- package/dist/src/model/sql_source.spec.js +0 -47
- package/dist/src/model/sql_source.spec.js.map +0 -1
- package/dist/src/models/faa_model.d.ts +0 -5
- package/dist/src/models/faa_model.js +0 -997
- package/dist/src/models/faa_model.js.map +0 -1
- package/dist/src/models/medicare_model.d.ts +0 -4
- package/dist/src/models/medicare_model.js +0 -259
- package/dist/src/models/medicare_model.js.map +0 -1
- package/dist/src/render/drill.spec.d.ts +0 -1
- package/dist/src/render/drill.spec.js +0 -107
- package/dist/src/render/drill.spec.js.map +0 -1
- package/dist/src/render/render.spec.d.ts +0 -1
- package/dist/src/render/render.spec.js +0 -548
- package/dist/src/render/render.spec.js.map +0 -1
- package/dist/src/runtimes.d.ts +0 -35
- package/dist/src/runtimes.js +0 -181
- package/dist/src/runtimes.js.map +0 -1
- package/dist/src/tags.spec.d.ts +0 -8
- package/dist/src/tags.spec.js +0 -490
- package/dist/src/tags.spec.js.map +0 -1
- package/dist/src/util/db-jest-matchers.d.ts +0 -30
- package/dist/src/util/db-jest-matchers.js +0 -157
- package/dist/src/util/db-jest-matchers.js.map +0 -1
- package/dist/src/util/index.d.ts +0 -15
- package/dist/src/util/index.js +0 -182
- package/dist/src/util/index.js.map +0 -1
- package/jest.setup.js +0 -8
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
*/
|
|
24
24
|
|
|
25
25
|
import {RuntimeList, allDatabases} from '../../runtimes';
|
|
26
|
-
import {databasesFromEnvironmentOr
|
|
26
|
+
import {databasesFromEnvironmentOr} from '../../util';
|
|
27
27
|
import '../../util/db-jest-matchers';
|
|
28
28
|
|
|
29
29
|
const runtimes = new RuntimeList(databasesFromEnvironmentOr(allDatabases));
|
|
@@ -87,9 +87,9 @@ describe.each(runtimes.runtimeList)('%s', (databaseName, runtime) => {
|
|
|
87
87
|
`).malloyResultMatches(orderByModel, {});
|
|
88
88
|
});
|
|
89
89
|
|
|
90
|
-
test(
|
|
90
|
+
test.when(runtime.supportsNesting)(
|
|
91
91
|
`reserved words are quoted in turtles - ${databaseName}`,
|
|
92
|
-
|
|
92
|
+
async () => {
|
|
93
93
|
await expect(`
|
|
94
94
|
run: models->{
|
|
95
95
|
nest: withx is {
|
|
@@ -102,7 +102,7 @@ describe.each(runtimes.runtimeList)('%s', (databaseName, runtime) => {
|
|
|
102
102
|
fetch is withx.fetch
|
|
103
103
|
}
|
|
104
104
|
`).malloyResultMatches(orderByModel, {});
|
|
105
|
-
}
|
|
105
|
+
}
|
|
106
106
|
);
|
|
107
107
|
|
|
108
108
|
it.skip('reserved words in structure definitions', async () => {
|
|
@@ -142,9 +142,9 @@ describe.each(runtimes.runtimeList)('%s', (databaseName, runtime) => {
|
|
|
142
142
|
`).malloyResultMatches(orderByModel, {model_count: 102});
|
|
143
143
|
});
|
|
144
144
|
|
|
145
|
-
test(
|
|
145
|
+
test.when(runtime.supportsNesting)(
|
|
146
146
|
`modeled having complex - ${databaseName}`,
|
|
147
|
-
|
|
147
|
+
async () => {
|
|
148
148
|
await expect(`
|
|
149
149
|
source: popular_names is models->{
|
|
150
150
|
having: model_count > 100
|
|
@@ -161,7 +161,7 @@ describe.each(runtimes.runtimeList)('%s', (databaseName, runtime) => {
|
|
|
161
161
|
select: manufacturer, model_count
|
|
162
162
|
}
|
|
163
163
|
`).malloyResultMatches(orderByModel, {model_count: 102});
|
|
164
|
-
}
|
|
164
|
+
}
|
|
165
165
|
);
|
|
166
166
|
|
|
167
167
|
it(`turtle references joined element - ${databaseName}`, async () => {
|
|
@@ -24,12 +24,7 @@
|
|
|
24
24
|
|
|
25
25
|
import {RuntimeList, allDatabases} from '../../runtimes';
|
|
26
26
|
import '../../util/db-jest-matchers';
|
|
27
|
-
import {
|
|
28
|
-
databasesFromEnvironmentOr,
|
|
29
|
-
mkSqlEqWith,
|
|
30
|
-
onlyIf,
|
|
31
|
-
runQuery,
|
|
32
|
-
} from '../../util';
|
|
27
|
+
import {databasesFromEnvironmentOr, mkSqlEqWith, runQuery} from '../../util';
|
|
33
28
|
import {DateTime as LuxonDateTime} from 'luxon';
|
|
34
29
|
|
|
35
30
|
const runtimes = new RuntimeList(databasesFromEnvironmentOr(allDatabases));
|
|
@@ -490,9 +485,9 @@ describe.each(runtimes.runtimeList)('%s date and time', (dbName, runtime) => {
|
|
|
490
485
|
});
|
|
491
486
|
|
|
492
487
|
// TODO don't need to run this on all connections, so onlyIf not needed
|
|
493
|
-
test(
|
|
488
|
+
test.when(runtime.supportsNesting)(
|
|
494
489
|
'timezone set in view inside source',
|
|
495
|
-
|
|
490
|
+
async () => {
|
|
496
491
|
expect(
|
|
497
492
|
(
|
|
498
493
|
await runQuery(
|
|
@@ -515,13 +510,13 @@ describe.each(runtimes.runtimeList)('%s date and time', (dbName, runtime) => {
|
|
|
515
510
|
{name: 'la_query', queryTimezone: 'America/Los_Angeles'},
|
|
516
511
|
],
|
|
517
512
|
});
|
|
518
|
-
}
|
|
513
|
+
}
|
|
519
514
|
);
|
|
520
515
|
|
|
521
|
-
// TODO don't need to run this on all connections, so
|
|
522
|
-
test(
|
|
516
|
+
// TODO don't need to run this on all connections, so .when() not needed
|
|
517
|
+
test.when(runtime.supportsNesting)(
|
|
523
518
|
'timezone set in query using source',
|
|
524
|
-
|
|
519
|
+
async () => {
|
|
525
520
|
expect(
|
|
526
521
|
(
|
|
527
522
|
await runQuery(
|
|
@@ -539,15 +534,13 @@ describe.each(runtimes.runtimeList)('%s date and time', (dbName, runtime) => {
|
|
|
539
534
|
)
|
|
540
535
|
).resultExplore.queryTimezone
|
|
541
536
|
).toBe('America/Los_Angeles');
|
|
542
|
-
}
|
|
537
|
+
}
|
|
543
538
|
);
|
|
544
539
|
|
|
545
|
-
test(
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
runtime,
|
|
550
|
-
`run: ${dbName}.sql('SELECT 1 as one') extend {
|
|
540
|
+
test.when(runtime.supportsNesting)('multiple timezones', async () => {
|
|
541
|
+
const theQuery = await runQuery(
|
|
542
|
+
runtime,
|
|
543
|
+
`run: ${dbName}.sql('SELECT 1 as one') extend {
|
|
551
544
|
timezone: 'America/New_York'
|
|
552
545
|
dimension: ny_time is @2021-02-24 03:05:06
|
|
553
546
|
view: la_query is {
|
|
@@ -562,17 +555,16 @@ describe.each(runtimes.runtimeList)('%s date and time', (dbName, runtime) => {
|
|
|
562
555
|
group_by: ny_time
|
|
563
556
|
nest: la_query, mex_query
|
|
564
557
|
}`
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
);
|
|
558
|
+
);
|
|
559
|
+
expect(theQuery.resultExplore.structDef).toMatchObject({
|
|
560
|
+
queryTimezone: 'America/New_York',
|
|
561
|
+
fields: [
|
|
562
|
+
{},
|
|
563
|
+
{name: 'la_query', queryTimezone: 'America/Los_Angeles'},
|
|
564
|
+
{name: 'mex_query', queryTimezone: 'America/Mexico_City'},
|
|
565
|
+
],
|
|
566
|
+
});
|
|
567
|
+
});
|
|
576
568
|
});
|
|
577
569
|
});
|
|
578
570
|
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
|
|
24
24
|
import {ModelMaterializer} from '@malloydata/malloy';
|
|
25
25
|
import {RuntimeList, runtimeFor} from '../runtimes';
|
|
26
|
-
import {describeIfDatabaseAvailable
|
|
26
|
+
import {describeIfDatabaseAvailable} from '../util';
|
|
27
27
|
import {HTMLView} from '@malloydata/render';
|
|
28
28
|
import {JSDOM} from 'jsdom';
|
|
29
29
|
|
|
@@ -66,171 +66,168 @@ describe('rendering results', () => {
|
|
|
66
66
|
await runtimes.closeAll();
|
|
67
67
|
});
|
|
68
68
|
|
|
69
|
-
test(
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
if (runtime) {
|
|
75
|
-
const src = `
|
|
69
|
+
test.when(databases.includes('bigquery'))('can render table', async () => {
|
|
70
|
+
const runtime = runtimes.runtimeMap.get('bigquery');
|
|
71
|
+
expect(runtime).toBeDefined();
|
|
72
|
+
if (runtime) {
|
|
73
|
+
const src = `
|
|
76
74
|
run: bigquery.table('malloy-data.faa.flights') -> {
|
|
77
75
|
group_by: carrier
|
|
78
76
|
aggregate: flight_count is count()
|
|
79
77
|
}
|
|
80
78
|
`;
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
);
|
|
79
|
+
const result = await runtime.loadQuery(src).run();
|
|
80
|
+
const document = new JSDOM().window.document;
|
|
81
|
+
await new HTMLView(document).render(result, {
|
|
82
|
+
dataStyles: {},
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
});
|
|
89
86
|
|
|
90
|
-
test(
|
|
87
|
+
test.when(databases.includes('bigquery'))(
|
|
91
88
|
'can render unsupported bigquery geo types',
|
|
92
|
-
|
|
89
|
+
async () => {
|
|
93
90
|
await runUnsupportedRenderTest(
|
|
94
91
|
'bigquery',
|
|
95
92
|
runtimes,
|
|
96
93
|
"ST_GEOGFROMTEXT('LINESTRING(1 2, 3 4)')",
|
|
97
94
|
'LINESTRING(1 2, 3 4)'
|
|
98
95
|
);
|
|
99
|
-
}
|
|
96
|
+
}
|
|
100
97
|
);
|
|
101
98
|
|
|
102
|
-
test(
|
|
99
|
+
test.when(databases.includes('bigquery'))(
|
|
103
100
|
'can render unsupported bigquery ip types',
|
|
104
|
-
|
|
101
|
+
async () => {
|
|
105
102
|
await runUnsupportedRenderTest(
|
|
106
103
|
'bigquery',
|
|
107
104
|
runtimes,
|
|
108
105
|
"NET.IP_FROM_STRING('192.168.1.1')",
|
|
109
106
|
'{"type":"Buffer","data":[192,168,1,1]}'
|
|
110
107
|
);
|
|
111
|
-
}
|
|
108
|
+
}
|
|
112
109
|
);
|
|
113
110
|
|
|
114
|
-
test(
|
|
111
|
+
test.when(databases.includes('bigquery'))(
|
|
115
112
|
'can render unsupported bigquery interval types',
|
|
116
|
-
|
|
113
|
+
async () => {
|
|
117
114
|
await runUnsupportedRenderTest(
|
|
118
115
|
'bigquery',
|
|
119
116
|
runtimes,
|
|
120
117
|
'INTERVAL 1 YEAR',
|
|
121
118
|
'1-0 0 0:0:0'
|
|
122
119
|
);
|
|
123
|
-
}
|
|
120
|
+
}
|
|
124
121
|
);
|
|
125
122
|
|
|
126
|
-
test(
|
|
123
|
+
test.when(databases.includes('bigquery'))(
|
|
127
124
|
'can render unsupported bigquery time types',
|
|
128
|
-
|
|
125
|
+
async () => {
|
|
129
126
|
await runUnsupportedRenderTest(
|
|
130
127
|
'bigquery',
|
|
131
128
|
runtimes,
|
|
132
129
|
'TIME(10, 10, 1)',
|
|
133
130
|
'10:10:01'
|
|
134
131
|
);
|
|
135
|
-
}
|
|
132
|
+
}
|
|
136
133
|
);
|
|
137
134
|
|
|
138
|
-
test(
|
|
135
|
+
test.when(databases.includes('postgres'))(
|
|
139
136
|
'can render unsupported postgres interval types',
|
|
140
|
-
|
|
137
|
+
async () => {
|
|
141
138
|
await runUnsupportedRenderTest(
|
|
142
139
|
'postgres',
|
|
143
140
|
runtimes,
|
|
144
141
|
'make_interval(days => 12)',
|
|
145
142
|
'12 days'
|
|
146
143
|
);
|
|
147
|
-
}
|
|
144
|
+
}
|
|
148
145
|
);
|
|
149
146
|
|
|
150
|
-
test(
|
|
147
|
+
test.when(databases.includes('postgres'))(
|
|
151
148
|
'can render unsupported postgres uuid types',
|
|
152
|
-
|
|
149
|
+
async () => {
|
|
153
150
|
await runUnsupportedRenderTest(
|
|
154
151
|
'postgres',
|
|
155
152
|
runtimes,
|
|
156
153
|
"CAST('a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11' AS UUID)",
|
|
157
154
|
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'
|
|
158
155
|
);
|
|
159
|
-
}
|
|
156
|
+
}
|
|
160
157
|
);
|
|
161
158
|
|
|
162
|
-
test(
|
|
159
|
+
test.when(databases.includes('postgres'))(
|
|
163
160
|
'can render unsupported postgres inet types',
|
|
164
|
-
|
|
161
|
+
async () => {
|
|
165
162
|
await runUnsupportedRenderTest(
|
|
166
163
|
'postgres',
|
|
167
164
|
runtimes,
|
|
168
165
|
"'192.168.1.1'::inet",
|
|
169
166
|
'192.168.1.1'
|
|
170
167
|
);
|
|
171
|
-
}
|
|
168
|
+
}
|
|
172
169
|
);
|
|
173
170
|
|
|
174
|
-
test(
|
|
171
|
+
test.when(databases.includes('postgres'))(
|
|
175
172
|
'can render unsupported postgres macaddr types',
|
|
176
|
-
|
|
173
|
+
async () => {
|
|
177
174
|
await runUnsupportedRenderTest(
|
|
178
175
|
'postgres',
|
|
179
176
|
runtimes,
|
|
180
177
|
"'00:04:E2:36:95:C0'::macaddr",
|
|
181
178
|
'00:04:e2:36:95:c0'
|
|
182
179
|
);
|
|
183
|
-
}
|
|
180
|
+
}
|
|
184
181
|
);
|
|
185
182
|
|
|
186
|
-
test(
|
|
183
|
+
test.when(databases.includes('postgres'))(
|
|
187
184
|
'can render supported postgres types',
|
|
188
|
-
|
|
185
|
+
async () => {
|
|
189
186
|
await runUnsupportedRenderTest('postgres', runtimes, '12345', '12,345');
|
|
190
|
-
}
|
|
187
|
+
}
|
|
191
188
|
);
|
|
192
189
|
|
|
193
|
-
test(
|
|
190
|
+
test.when(databases.includes('duckdb'))(
|
|
194
191
|
'can render supported duckdb types',
|
|
195
|
-
|
|
192
|
+
async () => {
|
|
196
193
|
await runUnsupportedRenderTest('duckdb', runtimes, '12345', '12,345');
|
|
197
|
-
}
|
|
194
|
+
}
|
|
198
195
|
);
|
|
199
196
|
|
|
200
|
-
test(
|
|
197
|
+
test.when(databases.includes('duckdb'))(
|
|
201
198
|
'can render unsupported duckdb blob types',
|
|
202
|
-
|
|
199
|
+
async () => {
|
|
203
200
|
await runUnsupportedRenderTest(
|
|
204
201
|
'duckdb',
|
|
205
202
|
runtimes,
|
|
206
203
|
"'\\xAA'::BLOB",
|
|
207
204
|
'{"type":"Buffer","data":[170]}'
|
|
208
205
|
);
|
|
209
|
-
}
|
|
206
|
+
}
|
|
210
207
|
);
|
|
211
208
|
|
|
212
|
-
test(
|
|
209
|
+
test.when(databases.includes('duckdb'))(
|
|
213
210
|
'can render unsupported duckdb uuid types',
|
|
214
|
-
|
|
211
|
+
async () => {
|
|
215
212
|
await runUnsupportedRenderTest(
|
|
216
213
|
'duckdb',
|
|
217
214
|
runtimes,
|
|
218
215
|
"'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'::UUID",
|
|
219
216
|
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'
|
|
220
217
|
);
|
|
221
|
-
}
|
|
218
|
+
}
|
|
222
219
|
);
|
|
223
220
|
|
|
224
|
-
test(
|
|
221
|
+
test.when(databases.includes('bigquery'))(
|
|
225
222
|
'can render null unsupported types',
|
|
226
|
-
|
|
223
|
+
async () => {
|
|
227
224
|
await runUnsupportedRenderTest(
|
|
228
225
|
'bigquery',
|
|
229
226
|
runtimes,
|
|
230
227
|
'CAST(NULL AS GEOGRAPHY)',
|
|
231
228
|
'<span class="value-null">∅</span>'
|
|
232
229
|
);
|
|
233
|
-
}
|
|
230
|
+
}
|
|
234
231
|
);
|
|
235
232
|
|
|
236
233
|
describe('html renderer', () => {
|
package/src/util/index.ts
CHANGED
|
@@ -182,14 +182,3 @@ export async function runQuery(runtime: Runtime, querySrc: string) {
|
|
|
182
182
|
|
|
183
183
|
return result;
|
|
184
184
|
}
|
|
185
|
-
|
|
186
|
-
export function onlyIf(
|
|
187
|
-
cond: boolean,
|
|
188
|
-
condTest: jest.ProvidesCallback
|
|
189
|
-
): jest.ProvidesCallback {
|
|
190
|
-
if (cond) {
|
|
191
|
-
return condTest;
|
|
192
|
-
} else {
|
|
193
|
-
return () => {};
|
|
194
|
-
}
|
|
195
|
-
}
|
package/tsconfig.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"extends": "../tsconfig.packages.json",
|
|
3
3
|
"compilerOptions": {
|
|
4
|
-
"
|
|
4
|
+
"noEmit": true,
|
|
5
5
|
"composite": true
|
|
6
6
|
},
|
|
7
|
-
"include": ["src", "bin"],
|
|
7
|
+
"include": ["src", "bin", "./jest.setup.ts", "./types/jest.d.ts"],
|
|
8
8
|
"references": [
|
|
9
9
|
{
|
|
10
10
|
"path": "../packages/malloy-interfaces"
|
package/types/jest.d.ts
ADDED
package/dist/bin/ping_db.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/bin/ping_db.js
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
* Copyright 2023 Google LLC
|
|
4
|
-
*
|
|
5
|
-
* Permission is hereby granted, free of charge, to any person obtaining
|
|
6
|
-
* a copy of this software and associated documentation files
|
|
7
|
-
* (the "Software"), to deal in the Software without restriction,
|
|
8
|
-
* including without limitation the rights to use, copy, modify, merge,
|
|
9
|
-
* publish, distribute, sublicense, and/or sell copies of the Software,
|
|
10
|
-
* and to permit persons to whom the Software is furnished to do so,
|
|
11
|
-
* subject to the following conditions:
|
|
12
|
-
*
|
|
13
|
-
* The above copyright notice and this permission notice shall be
|
|
14
|
-
* included in all copies or substantial portions of the Software.
|
|
15
|
-
*
|
|
16
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
-
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
18
|
-
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
19
|
-
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
20
|
-
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
21
|
-
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
22
|
-
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
23
|
-
*/
|
|
24
|
-
/* eslint-disable no-console */
|
|
25
|
-
/* eslint-disable no-process-exit */
|
|
26
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
-
const runtimes_1 = require("../src/runtimes");
|
|
28
|
-
const main = async () => {
|
|
29
|
-
if (process.argv.length < 3) {
|
|
30
|
-
console.info(`usage ${process.argv[1]} [database]`);
|
|
31
|
-
process.exit(1);
|
|
32
|
-
}
|
|
33
|
-
const runtime = (0, runtimes_1.runtimeFor)(process.argv[2]);
|
|
34
|
-
try {
|
|
35
|
-
await runtime.connection.runSQL('SELECT 1');
|
|
36
|
-
console.log('Success');
|
|
37
|
-
}
|
|
38
|
-
catch (e) {
|
|
39
|
-
console.error('Failed', e.toString());
|
|
40
|
-
process.exit(1);
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
main();
|
|
44
|
-
//# sourceMappingURL=ping_db.js.map
|
package/dist/bin/ping_db.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ping_db.js","sourceRoot":"","sources":["../../bin/ping_db.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,+BAA+B;AAC/B,oCAAoC;;AAEpC,8CAA2C;AAE3C,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;IACtB,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QAC3B,OAAO,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IACD,MAAM,OAAO,GAAG,IAAA,qBAAU,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,IAAI;QACF,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;KACxB;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;AACH,CAAC,CAAC;AAEF,IAAI,EAAE,CAAC"}
|
package/dist/src/api.spec.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import './util/db-jest-matchers';
|
package/dist/src/api.spec.js
DELETED
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/* eslint-disable no-console */
|
|
3
|
-
/*
|
|
4
|
-
* Copyright 2023 Google LLC
|
|
5
|
-
*
|
|
6
|
-
* Permission is hereby granted, free of charge, to any person obtaining
|
|
7
|
-
* a copy of this software and associated documentation files
|
|
8
|
-
* (the "Software"), to deal in the Software without restriction,
|
|
9
|
-
* including without limitation the rights to use, copy, modify, merge,
|
|
10
|
-
* publish, distribute, sublicense, and/or sell copies of the Software,
|
|
11
|
-
* and to permit persons to whom the Software is furnished to do so,
|
|
12
|
-
* subject to the following conditions:
|
|
13
|
-
*
|
|
14
|
-
* The above copyright notice and this permission notice shall be
|
|
15
|
-
* included in all copies or substantial portions of the Software.
|
|
16
|
-
*
|
|
17
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
18
|
-
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
19
|
-
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
20
|
-
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
21
|
-
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
22
|
-
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
23
|
-
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
24
|
-
*/
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
const runtimes_1 = require("./runtimes");
|
|
27
|
-
require("./util/db-jest-matchers");
|
|
28
|
-
const runtime = (0, runtimes_1.runtimeFor)('duckdb');
|
|
29
|
-
const envDatabases = (process.env['MALLOY_DATABASES'] ||
|
|
30
|
-
process.env['MALLOY_DATABASE'] ||
|
|
31
|
-
'duckdb').split(',');
|
|
32
|
-
let describe = globalThis.describe;
|
|
33
|
-
if (!envDatabases.includes('duckdb')) {
|
|
34
|
-
describe = describe.skip;
|
|
35
|
-
describe.skip = describe;
|
|
36
|
-
}
|
|
37
|
-
describe('extendModel', () => {
|
|
38
|
-
test('can run query in extend section', async () => {
|
|
39
|
-
const model = runtime.loadModel(`
|
|
40
|
-
query: q1 is duckdb.table('malloytest.aircraft')->{
|
|
41
|
-
where: state = 'CA'
|
|
42
|
-
group_by: state
|
|
43
|
-
}
|
|
44
|
-
`);
|
|
45
|
-
const q1 = model.loadQueryByName('q1');
|
|
46
|
-
const oneState = await q1.run();
|
|
47
|
-
expect(oneState.data.path(0, 'state').value).toBe('CA');
|
|
48
|
-
const extended = model.extendModel(`
|
|
49
|
-
query: q2 is duckdb.table('malloytest.aircraft')->{
|
|
50
|
-
where: state = 'NV'
|
|
51
|
-
group_by: state
|
|
52
|
-
}
|
|
53
|
-
`);
|
|
54
|
-
const q2 = extended.loadQueryByName('q2');
|
|
55
|
-
const twoState = await q2.run();
|
|
56
|
-
expect(twoState.data.path(0, 'state').value).toBe('NV');
|
|
57
|
-
});
|
|
58
|
-
test('can reference query from previous section ', async () => {
|
|
59
|
-
const model = runtime.loadModel(`
|
|
60
|
-
query: q1 is duckdb.table('malloytest.aircraft')->{
|
|
61
|
-
where: state = 'CA'
|
|
62
|
-
group_by: state
|
|
63
|
-
}
|
|
64
|
-
`);
|
|
65
|
-
const q1 = model.loadQueryByName('q1');
|
|
66
|
-
const oneState = await q1.run();
|
|
67
|
-
expect(oneState.data.path(0, 'state').value).toBe('CA');
|
|
68
|
-
const extended = model.extendModel('query: q2 is q1 -> { select: * }');
|
|
69
|
-
const q2 = extended.loadQueryByName('q2');
|
|
70
|
-
const twoState = await q2.run();
|
|
71
|
-
expect(twoState.data.path(0, 'state').value).toBe('CA');
|
|
72
|
-
});
|
|
73
|
-
test('returns helpful error message if named query does not exist', async () => {
|
|
74
|
-
await expect(runtime.getQueryByName('', 'Dummy Query')).rejects.toThrow('Given query name does not refer to a named query.');
|
|
75
|
-
});
|
|
76
|
-
test('extending models keep annotations', async () => {
|
|
77
|
-
await runtime
|
|
78
|
-
.loadModel(`
|
|
79
|
-
##! experimental { compilerTestExperimentParse compilerTestExperimentTranslate }
|
|
80
|
-
;;[ "x" ]
|
|
81
|
-
`)
|
|
82
|
-
.extendModel(';;[ "x" ]')
|
|
83
|
-
.extendModel(';;[ "x" ]')
|
|
84
|
-
.getModel();
|
|
85
|
-
});
|
|
86
|
-
describe('noThrowOnError', () => {
|
|
87
|
-
it('throws when not set', async () => {
|
|
88
|
-
await expect(runtime.getModel('source: foo is bar')).rejects.toThrow("Reference to undefined object 'bar'");
|
|
89
|
-
});
|
|
90
|
-
it('throws when false', async () => {
|
|
91
|
-
await expect(runtime.getModel('source: foo is bar', { noThrowOnError: false })).rejects.toThrow("Reference to undefined object 'bar'");
|
|
92
|
-
});
|
|
93
|
-
it('does not throw when true', async () => {
|
|
94
|
-
await expect(runtime.getModel('source: foo is bar', { noThrowOnError: true })).resolves.toEqual(expect.objectContaining({
|
|
95
|
-
'problems': [
|
|
96
|
-
{
|
|
97
|
-
'at': {
|
|
98
|
-
'range': {
|
|
99
|
-
'end': { 'character': 18, 'line': 0 },
|
|
100
|
-
'start': { 'character': 15, 'line': 0 },
|
|
101
|
-
},
|
|
102
|
-
'url': 'internal://internal.malloy',
|
|
103
|
-
},
|
|
104
|
-
'message': "Reference to undefined object 'bar'",
|
|
105
|
-
'severity': 'error',
|
|
106
|
-
},
|
|
107
|
-
],
|
|
108
|
-
}));
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
afterAll(async () => await runtime.connection.close());
|
|
113
|
-
//# sourceMappingURL=api.spec.js.map
|
package/dist/src/api.spec.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api.spec.js","sourceRoot":"","sources":["../../src/api.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import '../../util/db-jest-matchers';
|