@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.
Files changed (84) hide show
  1. package/README.md +213 -1
  2. package/dist/api.spec.d.ts +1 -1
  3. package/dist/api.spec.js +6 -13
  4. package/dist/api.spec.js.map +1 -1
  5. package/dist/databases/all/db_index.spec.js +21 -41
  6. package/dist/databases/all/db_index.spec.js.map +1 -1
  7. package/dist/databases/all/expr.spec.js +262 -339
  8. package/dist/databases/all/expr.spec.js.map +1 -1
  9. package/dist/databases/all/functions.spec.js +37 -35
  10. package/dist/databases/all/functions.spec.js.map +1 -1
  11. package/dist/databases/all/join.spec.js +125 -169
  12. package/dist/databases/all/join.spec.js.map +1 -1
  13. package/dist/databases/all/nomodel.spec.js +335 -594
  14. package/dist/databases/all/nomodel.spec.js.map +1 -1
  15. package/dist/databases/all/orderby.spec.js +82 -128
  16. package/dist/databases/all/orderby.spec.js.map +1 -1
  17. package/dist/databases/all/sql_expressions.spec.js +27 -43
  18. package/dist/databases/all/sql_expressions.spec.js.map +1 -1
  19. package/dist/databases/all/time.spec.js +63 -103
  20. package/dist/databases/all/time.spec.js.map +1 -1
  21. package/dist/databases/bigquery/double_truncation.spec.js +1 -1
  22. package/dist/databases/bigquery/handexpr.spec.js +12 -12
  23. package/dist/databases/bigquery/injestion_time_partitioning.spec.js +22 -22
  24. package/dist/databases/bigquery/joined_filters.spec.js +3 -3
  25. package/dist/databases/bigquery/json.spec.d.ts +1 -1
  26. package/dist/databases/bigquery/json.spec.js +25 -45
  27. package/dist/databases/bigquery/json.spec.js.map +1 -1
  28. package/dist/databases/bigquery/malloy_query.spec.d.ts +1 -1
  29. package/dist/databases/bigquery/malloy_query.spec.js +47 -48
  30. package/dist/databases/bigquery/malloy_query.spec.js.map +1 -1
  31. package/dist/databases/bigquery/time.spec.js +9 -13
  32. package/dist/databases/bigquery/time.spec.js.map +1 -1
  33. package/dist/databases/bigquery/wildcard_table_names.spec.js +19 -19
  34. package/dist/databases/bigquery-duckdb/nested_source_table.spec.js +53 -87
  35. package/dist/databases/bigquery-duckdb/nested_source_table.spec.js.map +1 -1
  36. package/dist/databases/bigquery-postgres/multi_connection.spec.js +5 -20
  37. package/dist/databases/bigquery-postgres/multi_connection.spec.js.map +1 -1
  38. package/dist/databases/bigquery-postgres/streaming.spec.js +6 -6
  39. package/dist/databases/bigquery-postgres/streaming.spec.js.map +1 -1
  40. package/dist/databases/duckdb/duckdb.spec.js +24 -33
  41. package/dist/databases/duckdb/duckdb.spec.js.map +1 -1
  42. package/dist/databases/postgres/postgres.spec.js +46 -67
  43. package/dist/databases/postgres/postgres.spec.js.map +1 -1
  44. package/dist/jestMatcher.spec.d.ts +1 -0
  45. package/dist/jestMatcher.spec.js +81 -0
  46. package/dist/jestMatcher.spec.js.map +1 -0
  47. package/dist/render/render.spec.js +10 -12
  48. package/dist/render/render.spec.js.map +1 -1
  49. package/dist/tags.spec.js +22 -2
  50. package/dist/tags.spec.js.map +1 -1
  51. package/dist/util/db-jest-matchers.d.ts +17 -6
  52. package/dist/util/db-jest-matchers.js +81 -20
  53. package/dist/util/db-jest-matchers.js.map +1 -1
  54. package/dist/util/index.d.ts +1 -2
  55. package/dist/util/index.js +11 -13
  56. package/dist/util/index.js.map +1 -1
  57. package/package.json +6 -6
  58. package/src/api.spec.ts +7 -16
  59. package/src/databases/all/db_index.spec.ts +22 -48
  60. package/src/databases/all/expr.spec.ts +273 -431
  61. package/src/databases/all/functions.spec.ts +37 -35
  62. package/src/databases/all/join.spec.ts +130 -196
  63. package/src/databases/all/nomodel.spec.ts +333 -689
  64. package/src/databases/all/orderby.spec.ts +87 -161
  65. package/src/databases/all/sql_expressions.spec.ts +29 -49
  66. package/src/databases/all/time.spec.ts +73 -130
  67. package/src/databases/bigquery/double_truncation.spec.ts +1 -1
  68. package/src/databases/bigquery/handexpr.spec.ts +12 -12
  69. package/src/databases/bigquery/injestion_time_partitioning.spec.ts +22 -22
  70. package/src/databases/bigquery/joined_filters.spec.ts +3 -3
  71. package/src/databases/bigquery/json.spec.ts +25 -49
  72. package/src/databases/bigquery/malloy_query.spec.ts +47 -54
  73. package/src/databases/bigquery/time.spec.ts +13 -17
  74. package/src/databases/bigquery/wildcard_table_names.spec.ts +19 -19
  75. package/src/databases/bigquery-duckdb/nested_source_table.spec.ts +56 -98
  76. package/src/databases/bigquery-postgres/multi_connection.spec.ts +5 -23
  77. package/src/databases/bigquery-postgres/streaming.spec.ts +12 -6
  78. package/src/databases/duckdb/duckdb.spec.ts +31 -43
  79. package/src/databases/postgres/postgres.spec.ts +54 -84
  80. package/src/jestMatcher.spec.ts +88 -0
  81. package/src/render/render.spec.ts +10 -12
  82. package/src/tags.spec.ts +22 -2
  83. package/src/util/db-jest-matchers.ts +106 -32
  84. 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 queryMatches(runtime, querySrc, expected) {
45
- if (!runtime.supportsNesting && querySrc.indexOf('nest:') >= 0) {
46
- return {
47
- pass: true,
48
- message: () => 'Test was skipped since connection does not support nesting.',
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 { pass: false, message: () => `loadQuery failed: ${e.message}` };
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
- const failMsg = `query.run failed: ${e.message}\n` + `SQL: ${await query.getSQL()}`;
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
- for (const [name, value] of Object.entries(expected)) {
68
- try {
69
- const got = result.data.path(0, name).value;
70
- const mustBe = value instanceof Date ? value.getTime() : value;
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
- catch (e) {
77
- fails.push(`Expected {${name}: ${value}} Error: ${e.message}`);
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 failMsg = `SQL: ${await query.getSQL()}\n${fails.join('\n')}`;
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: () => `First row matched ${JSON.stringify(expected)}`,
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":"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"}
1
+ {"version":3,"file":"db-jest-matchers.js","sourceRoot":"","sources":["../../src/util/db-jest-matchers.ts"],"names":[],"mappings":"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"}
@@ -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 {};
@@ -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
- sql: sqlData is {${select}: """${sqlV}""" }
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
- query: basicTypes
96
+ run: basicTypes
101
97
  -> {
102
- declare: ${varName} is ${expr}
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
- query: basicTypes
104
+ run: basicTypes
109
105
  -> {
110
- declare: expect is ${result}
111
- declare: got is ${expr}
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
- query: basicTypes
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
- query: basicTypes
133
+ run: basicTypes
136
134
  -> {
137
135
  select: expect is ${result}
138
136
  select: got is ${expr}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"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"}
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-dev231019211822",
22
- "@malloydata/db-duckdb": "^0.0.95-dev231019211822",
23
- "@malloydata/db-postgres": "^0.0.95-dev231019211822",
24
- "@malloydata/malloy": "^0.0.95-dev231019211822",
25
- "@malloydata/render": "^0.0.95-dev231019211822",
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-dev231019211822"
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 ->q1 -> { select: * }');
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
- const result = await runtime
91
- .loadQuery(
92
- `
93
- source: t is table('malloytest.state_facts') {
94
- dimension: one is 'one'
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 === 'bigquery' ? it.skip : it)(
99
+ testIf(databaseName !== 'bigquery')(
109
100
  `index rows count - ${databaseName}`,
110
101
  async () => {
111
- const result = await runtime
112
- .loadQuery(
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
- query: t-> {index:one, state; sample: 10 }
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
- const result = await runtime
130
- .loadQuery(
131
- `
132
- source: t is table('malloytest.flights') {
133
- dimension: one is 'one'
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
  // )