@malloydata/malloy-tests 0.0.66-dev230807232724

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 (169) hide show
  1. package/README.md +29 -0
  2. package/bin/dump_malloytest.sh +1 -0
  3. package/bin/postgres_init.sh +9 -0
  4. package/bin/postgres_start.sh +2 -0
  5. package/bin/postgres_stop.sh +2 -0
  6. package/data/duckdb/README.md +4 -0
  7. package/data/duckdb/aircraft.parquet +0 -0
  8. package/data/duckdb/aircraft_models.parquet +0 -0
  9. package/data/duckdb/airports.parquet +0 -0
  10. package/data/duckdb/alltypes.parquet +0 -0
  11. package/data/duckdb/alltypes2.parquet +0 -0
  12. package/data/duckdb/bq_medicare_test.parquet +0 -0
  13. package/data/duckdb/carriers.parquet +0 -0
  14. package/data/duckdb/flights/part.0.parquet +0 -0
  15. package/data/duckdb/flights/part.1.parquet +0 -0
  16. package/data/duckdb/flights/part.2.parquet +0 -0
  17. package/data/duckdb/flights.parquet +0 -0
  18. package/data/duckdb/flights_partitioned.parquet +0 -0
  19. package/data/duckdb/ga_sample.parquet +0 -0
  20. package/data/duckdb/numbers.parquet +0 -0
  21. package/data/duckdb/state_facts.parquet +0 -0
  22. package/data/duckdb/test.json +3 -0
  23. package/data/duckdb/words.parquet +0 -0
  24. package/data/duckdb/words_bigger.parquet +0 -0
  25. package/data/postgres/malloytest-postgres.sql.gz +0 -0
  26. package/data/postgres/state_facts.sql +366 -0
  27. package/dist/api.spec.d.ts +1 -0
  28. package/dist/api.spec.js +77 -0
  29. package/dist/api.spec.js.map +1 -0
  30. package/dist/databases/all/expr.spec.d.ts +3 -0
  31. package/dist/databases/all/expr.spec.js +581 -0
  32. package/dist/databases/all/expr.spec.js.map +1 -0
  33. package/dist/databases/all/functions.spec.d.ts +2 -0
  34. package/dist/databases/all/functions.spec.js +784 -0
  35. package/dist/databases/all/functions.spec.js.map +1 -0
  36. package/dist/databases/all/index.spec.d.ts +2 -0
  37. package/dist/databases/all/index.spec.js +154 -0
  38. package/dist/databases/all/index.spec.js.map +1 -0
  39. package/dist/databases/all/join.spec.d.ts +2 -0
  40. package/dist/databases/all/join.spec.js +309 -0
  41. package/dist/databases/all/join.spec.js.map +1 -0
  42. package/dist/databases/all/nomodel.spec.d.ts +2 -0
  43. package/dist/databases/all/nomodel.spec.js +957 -0
  44. package/dist/databases/all/nomodel.spec.js.map +1 -0
  45. package/dist/databases/all/orderby.spec.d.ts +2 -0
  46. package/dist/databases/all/orderby.spec.js +224 -0
  47. package/dist/databases/all/orderby.spec.js.map +1 -0
  48. package/dist/databases/all/problems.spec.d.ts +2 -0
  49. package/dist/databases/all/problems.spec.js +113 -0
  50. package/dist/databases/all/problems.spec.js.map +1 -0
  51. package/dist/databases/all/sql_expressions.spec.d.ts +2 -0
  52. package/dist/databases/all/sql_expressions.spec.js +96 -0
  53. package/dist/databases/all/sql_expressions.spec.js.map +1 -0
  54. package/dist/databases/all/time.spec.d.ts +3 -0
  55. package/dist/databases/all/time.spec.js +647 -0
  56. package/dist/databases/all/time.spec.js.map +1 -0
  57. package/dist/databases/bigquery/double_truncation.spec.d.ts +1 -0
  58. package/dist/databases/bigquery/double_truncation.spec.js +50 -0
  59. package/dist/databases/bigquery/double_truncation.spec.js.map +1 -0
  60. package/dist/databases/bigquery/handexpr.spec.d.ts +1 -0
  61. package/dist/databases/bigquery/handexpr.spec.js +713 -0
  62. package/dist/databases/bigquery/handexpr.spec.js.map +1 -0
  63. package/dist/databases/bigquery/injestion_time_partitioning.spec.d.ts +1 -0
  64. package/dist/databases/bigquery/injestion_time_partitioning.spec.js +235 -0
  65. package/dist/databases/bigquery/injestion_time_partitioning.spec.js.map +1 -0
  66. package/dist/databases/bigquery/joined_filters.spec.d.ts +1 -0
  67. package/dist/databases/bigquery/joined_filters.spec.js +72 -0
  68. package/dist/databases/bigquery/joined_filters.spec.js.map +1 -0
  69. package/dist/databases/bigquery/json.spec.d.ts +1 -0
  70. package/dist/databases/bigquery/json.spec.js +86 -0
  71. package/dist/databases/bigquery/json.spec.js.map +1 -0
  72. package/dist/databases/bigquery/malloy_query.spec.d.ts +1 -0
  73. package/dist/databases/bigquery/malloy_query.spec.js +906 -0
  74. package/dist/databases/bigquery/malloy_query.spec.js.map +1 -0
  75. package/dist/databases/bigquery/performance.skipped.spec.d.ts +1 -0
  76. package/dist/databases/bigquery/performance.skipped.spec.js +70 -0
  77. package/dist/databases/bigquery/performance.skipped.spec.js.map +1 -0
  78. package/dist/databases/bigquery/time.spec.d.ts +1 -0
  79. package/dist/databases/bigquery/time.spec.js +55 -0
  80. package/dist/databases/bigquery/time.spec.js.map +1 -0
  81. package/dist/databases/bigquery/wildcard_table_names.spec.d.ts +1 -0
  82. package/dist/databases/bigquery/wildcard_table_names.spec.js +212 -0
  83. package/dist/databases/bigquery/wildcard_table_names.spec.js.map +1 -0
  84. package/dist/databases/bigquery-duckdb/nested_source_table.spec.d.ts +1 -0
  85. package/dist/databases/bigquery-duckdb/nested_source_table.spec.js +247 -0
  86. package/dist/databases/bigquery-duckdb/nested_source_table.spec.js.map +1 -0
  87. package/dist/databases/bigquery-postgres/multi_connection.spec.d.ts +1 -0
  88. package/dist/databases/bigquery-postgres/multi_connection.spec.js +138 -0
  89. package/dist/databases/bigquery-postgres/multi_connection.spec.js.map +1 -0
  90. package/dist/databases/bigquery-postgres/streaming.spec.d.ts +1 -0
  91. package/dist/databases/bigquery-postgres/streaming.spec.js +88 -0
  92. package/dist/databases/bigquery-postgres/streaming.spec.js.map +1 -0
  93. package/dist/databases/duckdb/duckdb.spec.d.ts +1 -0
  94. package/dist/databases/duckdb/duckdb.spec.js +116 -0
  95. package/dist/databases/duckdb/duckdb.spec.js.map +1 -0
  96. package/dist/databases/postgres/postgres.spec.d.ts +1 -0
  97. package/dist/databases/postgres/postgres.spec.js +137 -0
  98. package/dist/databases/postgres/postgres.spec.js.map +1 -0
  99. package/dist/databases/shared/test_list.d.ts +3 -0
  100. package/dist/databases/shared/test_list.js +24 -0
  101. package/dist/databases/shared/test_list.js.map +1 -0
  102. package/dist/dependencies.spec.d.ts +1 -0
  103. package/dist/dependencies.spec.js +63 -0
  104. package/dist/dependencies.spec.js.map +1 -0
  105. package/dist/index.d.ts +11 -0
  106. package/dist/index.js +49 -0
  107. package/dist/index.js.map +1 -0
  108. package/dist/model/utils.spec.d.ts +1 -0
  109. package/dist/model/utils.spec.js +38 -0
  110. package/dist/model/utils.spec.js.map +1 -0
  111. package/dist/models/faa_model.d.ts +5 -0
  112. package/dist/models/faa_model.js +977 -0
  113. package/dist/models/faa_model.js.map +1 -0
  114. package/dist/models/medicare_model.d.ts +4 -0
  115. package/dist/models/medicare_model.js +243 -0
  116. package/dist/models/medicare_model.js.map +1 -0
  117. package/dist/render/render.spec.d.ts +1 -0
  118. package/dist/render/render.spec.js +551 -0
  119. package/dist/render/render.spec.js.map +1 -0
  120. package/dist/runtimes.d.ts +33 -0
  121. package/dist/runtimes.js +147 -0
  122. package/dist/runtimes.js.map +1 -0
  123. package/dist/tags.spec.d.ts +1 -0
  124. package/dist/tags.spec.js +259 -0
  125. package/dist/tags.spec.js.map +1 -0
  126. package/dist/util/db-jest-matchers.d.ts +19 -0
  127. package/dist/util/db-jest-matchers.js +90 -0
  128. package/dist/util/db-jest-matchers.js.map +1 -0
  129. package/dist/util/index.d.ts +16 -0
  130. package/dist/util/index.js +171 -0
  131. package/dist/util/index.js.map +1 -0
  132. package/package.json +35 -0
  133. package/src/api.spec.ts +84 -0
  134. package/src/databases/all/expr.spec.ts +704 -0
  135. package/src/databases/all/functions.spec.ts +1135 -0
  136. package/src/databases/all/index.spec.ts +178 -0
  137. package/src/databases/all/join.spec.ts +350 -0
  138. package/src/databases/all/nomodel.spec.ts +1159 -0
  139. package/src/databases/all/orderby.spec.ts +268 -0
  140. package/src/databases/all/problems.spec.ts +121 -0
  141. package/src/databases/all/sql_expressions.spec.ts +107 -0
  142. package/src/databases/all/time.spec.ts +793 -0
  143. package/src/databases/bigquery/double_truncation.spec.ts +51 -0
  144. package/src/databases/bigquery/handexpr.spec.ts +782 -0
  145. package/src/databases/bigquery/injestion_time_partitioning.spec.ts +268 -0
  146. package/src/databases/bigquery/joined_filters.spec.ts +75 -0
  147. package/src/databases/bigquery/json.spec.ts +95 -0
  148. package/src/databases/bigquery/malloy_query.spec.ts +1036 -0
  149. package/src/databases/bigquery/performance.skipped.spec.ts +73 -0
  150. package/src/databases/bigquery/time.spec.ts +59 -0
  151. package/src/databases/bigquery/wildcard_table_names.spec.ts +233 -0
  152. package/src/databases/bigquery-duckdb/nested_source_table.spec.ts +268 -0
  153. package/src/databases/bigquery-postgres/multi_connection.spec.ts +143 -0
  154. package/src/databases/bigquery-postgres/streaming.spec.ts +100 -0
  155. package/src/databases/duckdb/duckdb.spec.ts +131 -0
  156. package/src/databases/postgres/postgres.spec.ts +167 -0
  157. package/src/databases/shared/test_list.ts +24 -0
  158. package/src/dependencies.spec.ts +62 -0
  159. package/src/index.ts +36 -0
  160. package/src/model/utils.spec.ts +37 -0
  161. package/src/models/faa_model.ts +995 -0
  162. package/src/models/medicare_model.ts +246 -0
  163. package/src/render/__snapshots__/render.spec.ts.snap +12574 -0
  164. package/src/render/render.spec.ts +670 -0
  165. package/src/runtimes.ts +182 -0
  166. package/src/tags.spec.ts +277 -0
  167. package/src/util/db-jest-matchers.ts +128 -0
  168. package/src/util/index.ts +191 -0
  169. package/tsconfig.json +25 -0
@@ -0,0 +1,995 @@
1
+ /*
2
+ * Copyright 2023 Google LLC
3
+ *
4
+ * Permission is hereby granted, free of charge, to any person obtaining
5
+ * a copy of this software and associated documentation files
6
+ * (the "Software"), to deal in the Software without restriction,
7
+ * including without limitation the rights to use, copy, modify, merge,
8
+ * publish, distribute, sublicense, and/or sell copies of the Software,
9
+ * and to permit persons to whom the Software is furnished to do so,
10
+ * subject to the following conditions:
11
+ *
12
+ * The above copyright notice and this permission notice shall be
13
+ * included in all copies or substantial portions of the Software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ */
23
+
24
+ import {ModelDef, StructDef, StructRelationship} from '@malloydata/malloy';
25
+
26
+ import {fStringEq, fYearEq} from '../util';
27
+
28
+ import {medicareModel, medicareStateFacts} from './medicare_model';
29
+
30
+ function withJoin(leftKey: string, rightKey: string): StructRelationship {
31
+ return {
32
+ type: 'one',
33
+ onExpression: [
34
+ {type: 'field', path: `${leftKey}`},
35
+ '=',
36
+ {type: 'field', path: `${rightKey}`},
37
+ ],
38
+ };
39
+ }
40
+
41
+ /** Flight Model */
42
+ export const FLIGHTS_EXPLORE: StructDef = {
43
+ type: 'struct',
44
+ name: 'malloy-data.malloytest.flights',
45
+ as: 'flights',
46
+ dialect: 'standardsql',
47
+ structSource: {
48
+ type: 'table',
49
+ tablePath: 'malloy-data.malloytest.flights',
50
+ },
51
+ structRelationship: {type: 'basetable', connectionName: 'bigquery'},
52
+ primaryKey: 'id2',
53
+ fields: [
54
+ // Fields in the flights table.
55
+ {type: 'string', name: 'carrier'},
56
+ {type: 'string', name: 'origin', as: 'origin_code'},
57
+ {type: 'timestamp', name: 'dep_time'},
58
+ {type: 'string', name: 'destination', as: 'destination_code'},
59
+ {type: 'string', name: 'flight_num'},
60
+ {type: 'number', name: 'flight_time', numberType: 'integer'},
61
+ {type: 'string', name: 'tail_num'},
62
+ {type: 'number', name: 'dep_delay', numberType: 'integer'},
63
+ {type: 'number', name: 'arr_delay', numberType: 'integer'},
64
+ {type: 'number', name: 'taxi_out', numberType: 'integer'},
65
+ {type: 'number', name: 'taxi_in', numberType: 'integer'},
66
+ {type: 'number', name: 'distance', numberType: 'integer'},
67
+ {type: 'string', name: 'cancelled'},
68
+ {type: 'string', name: 'diverted'},
69
+ {type: 'number', name: 'id2', numberType: 'integer'},
70
+ {
71
+ type: 'number',
72
+ name: 'flight_count',
73
+ expressionType: 'aggregate',
74
+ e: [{type: 'aggregate', function: 'count', e: []}],
75
+ },
76
+ {
77
+ type: 'number',
78
+ name: 'total_distance',
79
+ expressionType: 'aggregate',
80
+ e: [
81
+ {
82
+ type: 'aggregate',
83
+ function: 'sum',
84
+ e: [{type: 'field', path: 'distance'}],
85
+ },
86
+ ],
87
+ },
88
+
89
+ // carriers
90
+ {
91
+ type: 'struct',
92
+ name: 'malloy-data.malloytest.carriers',
93
+ as: 'carriers',
94
+ dialect: 'standardsql',
95
+ structSource: {
96
+ type: 'table',
97
+ tablePath: 'malloy-data.malloytest.carriers',
98
+ },
99
+ structRelationship: {
100
+ type: 'one',
101
+ onExpression: [
102
+ {type: 'field', path: 'carrier'},
103
+ '=',
104
+ {type: 'field', path: 'carriers.code'},
105
+ ],
106
+ },
107
+ primaryKey: 'code',
108
+ fields: [
109
+ {type: 'string', name: 'code'},
110
+ {type: 'string', name: 'name'},
111
+ {type: 'string', name: 'nickname'},
112
+ ],
113
+ },
114
+
115
+ // aircraft
116
+ {
117
+ type: 'struct',
118
+ name: 'malloy-data.malloytest.aircraft',
119
+ as: 'aircraft',
120
+ dialect: 'standardsql',
121
+ structSource: {
122
+ type: 'table',
123
+ tablePath: 'malloy-data.malloytest.aircraft',
124
+ },
125
+ structRelationship: withJoin('tail_num', 'aircraft.tail_num'),
126
+ primaryKey: 'tail_num',
127
+ fields: [
128
+ {type: 'string', name: 'tail_num'},
129
+ {type: 'string', name: 'aircraft_serial'},
130
+ {type: 'string', name: 'aircraft_model_code'},
131
+ {type: 'string', name: 'aircraft_engine_code'},
132
+ {type: 'number', name: 'year_built', numberType: 'integer'},
133
+ {
134
+ type: 'number',
135
+ name: 'aircraft_type_id',
136
+ numberType: 'integer',
137
+ },
138
+ {
139
+ type: 'number',
140
+ name: 'aircraft_engine_type_id',
141
+ numberType: 'integer',
142
+ },
143
+ {
144
+ type: 'number',
145
+ name: 'registrant_type_id',
146
+ numberType: 'integer',
147
+ },
148
+ {type: 'string', name: 'name'},
149
+ {type: 'string', name: 'address1'},
150
+ {type: 'string', name: 'address2'},
151
+ {type: 'string', name: 'city'},
152
+ {type: 'string', name: 'state'},
153
+ {type: 'string', name: 'zip'},
154
+ {type: 'string', name: 'region'},
155
+ {type: 'string', name: 'county'},
156
+ {type: 'string', name: 'country'},
157
+ {type: 'string', name: 'certification'},
158
+ {type: 'string', name: 'status_code'},
159
+ {type: 'string', name: 'mode_s_code'},
160
+ {type: 'string', name: 'fract_owner'},
161
+ {
162
+ type: 'number',
163
+ name: 'aircraft_count',
164
+ expressionType: 'aggregate',
165
+ e: [{type: 'aggregate', function: 'count', e: []}],
166
+ },
167
+ {
168
+ type: 'number',
169
+ name: 'total_engines',
170
+ expressionType: 'aggregate',
171
+ e: [
172
+ {
173
+ type: 'aggregate',
174
+ function: 'sum',
175
+ e: [{type: 'field', path: 'aircraft_models.engines'}],
176
+ },
177
+ ],
178
+ },
179
+
180
+ // subjoin aircraft models
181
+ {
182
+ type: 'struct',
183
+ name: 'malloy-data.malloytest.aircraft_models',
184
+ as: 'aircraft_models',
185
+ dialect: 'standardsql',
186
+ primaryKey: 'aircraft_model_code',
187
+ structSource: {
188
+ type: 'table',
189
+ tablePath: 'malloy-data.malloytest.aircraft_models',
190
+ },
191
+ structRelationship: withJoin(
192
+ 'aircraft_model_code',
193
+ 'aircraft_models.aircraft_model_code'
194
+ ),
195
+ fields: [
196
+ {type: 'string', name: 'aircraft_model_code'},
197
+ {type: 'string', name: 'manufacturer'},
198
+ {type: 'string', name: 'model'},
199
+ {
200
+ type: 'number',
201
+ name: 'aircraft_type_id',
202
+ numberType: 'integer',
203
+ },
204
+ {
205
+ type: 'number',
206
+ name: 'aircraft_engine_type_id',
207
+ numberType: 'integer',
208
+ },
209
+ {
210
+ type: 'number',
211
+ name: 'aircraft_category_id',
212
+ numberType: 'integer',
213
+ },
214
+ {type: 'number', name: 'amateur', numberType: 'integer'},
215
+ {type: 'number', name: 'engines', numberType: 'integer'},
216
+ {type: 'number', name: 'seats', numberType: 'integer'},
217
+ {type: 'number', name: 'weight', numberType: 'integer'},
218
+ {type: 'number', name: 'speed', numberType: 'integer'},
219
+ {
220
+ type: 'number',
221
+ expressionType: 'aggregate',
222
+ name: 'total_seats',
223
+ e: [
224
+ {
225
+ type: 'aggregate',
226
+ function: 'sum',
227
+ e: [{type: 'field', path: 'seats'}],
228
+ },
229
+ ],
230
+ },
231
+ ],
232
+ },
233
+ ],
234
+ },
235
+
236
+ // origin
237
+ {
238
+ type: 'struct',
239
+ name: 'malloy-data.malloytest.airports',
240
+ as: 'origin',
241
+ dialect: 'standardsql',
242
+ structSource: {
243
+ type: 'table',
244
+ tablePath: 'malloy-data.malloytest.airports',
245
+ },
246
+ structRelationship: withJoin('origin_code', 'origin.code'),
247
+ primaryKey: 'code',
248
+ fields: [
249
+ {type: 'number', name: 'id', numberType: 'integer'},
250
+ {type: 'string', name: 'code'},
251
+ {type: 'string', name: 'site_number'},
252
+ {type: 'string', name: 'fac_type', as: 'facility_type'},
253
+ {type: 'string', name: 'fac_use', as: 'facility_use'},
254
+ {type: 'string', name: 'faa_region'},
255
+ {type: 'string', name: 'faa_dist'},
256
+ {type: 'string', name: 'city'},
257
+ {type: 'string', name: 'county'},
258
+ {type: 'string', name: 'state'},
259
+ {type: 'string', name: 'full_name'},
260
+ {type: 'string', name: 'own_type'},
261
+ {type: 'number', name: 'longitude', numberType: 'float'},
262
+ {type: 'number', name: 'latitude', numberType: 'float'},
263
+ {type: 'number', name: 'elevation', numberType: 'integer'},
264
+ {type: 'string', name: 'aero_cht'},
265
+ {type: 'number', name: 'cbd_dist', numberType: 'integer'},
266
+ {type: 'string', name: 'cbd_dir'},
267
+ {type: 'string', name: 'act_date'},
268
+ {type: 'string', name: 'cert'},
269
+ {type: 'string', name: 'fed_agree'},
270
+ {type: 'string', name: 'cust_intl'},
271
+ {type: 'string', name: 'c_ldg_rts'},
272
+ {type: 'string', name: 'joint_use'},
273
+ {type: 'string', name: 'mil_rts'},
274
+ {type: 'string', name: 'cntl_twr'},
275
+ {type: 'string', name: 'major'},
276
+ {
277
+ type: 'number',
278
+ name: 'count',
279
+ expressionType: 'aggregate',
280
+ e: [{type: 'aggregate', function: 'count', e: []}],
281
+ },
282
+ ],
283
+ },
284
+
285
+ // destination
286
+ {
287
+ type: 'struct',
288
+ name: 'malloy-data.malloytest.airports',
289
+ as: 'destination',
290
+ dialect: 'standardsql',
291
+ structSource: {
292
+ type: 'table',
293
+ tablePath: 'malloy-data.malloytest.airports',
294
+ },
295
+ structRelationship: withJoin('destination_code', 'destination.code'),
296
+ primaryKey: 'code',
297
+ fields: [
298
+ {type: 'number', name: 'id', numberType: 'integer'},
299
+ {type: 'string', name: 'code'},
300
+ {type: 'string', name: 'site_number'},
301
+ {type: 'string', name: 'fac_type', as: 'facility_type'},
302
+ {type: 'string', name: 'fac_use', as: 'facility_use'},
303
+ {type: 'string', name: 'faa_region'},
304
+ {type: 'string', name: 'faa_dist'},
305
+ {type: 'string', name: 'city'},
306
+ {type: 'string', name: 'county'},
307
+ {type: 'string', name: 'state'},
308
+ {type: 'string', name: 'full_name'},
309
+ {type: 'string', name: 'own_type'},
310
+ {type: 'number', name: 'longitude', numberType: 'float'},
311
+ {type: 'number', name: 'latitude', numberType: 'float'},
312
+ {type: 'number', name: 'elevation', numberType: 'integer'},
313
+ {type: 'string', name: 'aero_cht'},
314
+ {type: 'number', name: 'cbd_dist', numberType: 'integer'},
315
+ {type: 'string', name: 'cbd_dir'},
316
+ {type: 'string', name: 'act_date'},
317
+ {type: 'string', name: 'cert'},
318
+ {type: 'string', name: 'fed_agree'},
319
+ {type: 'string', name: 'cust_intl'},
320
+ {type: 'string', name: 'c_ldg_rts'},
321
+ {type: 'string', name: 'joint_use'},
322
+ {type: 'string', name: 'mil_rts'},
323
+ {type: 'string', name: 'cntl_twr'},
324
+ {type: 'string', name: 'major'},
325
+ {
326
+ type: 'number',
327
+ name: 'count',
328
+ expressionType: 'aggregate',
329
+ e: [{type: 'aggregate', function: 'count', e: []}],
330
+ },
331
+ ],
332
+ },
333
+
334
+ // derived table from a named query.
335
+ {
336
+ type: 'struct',
337
+ name: 'aircraft_facts',
338
+ dialect: 'standardsql',
339
+ structSource: {
340
+ type: 'query',
341
+ query: {
342
+ type: 'query',
343
+ structRef: 'flights',
344
+ pipeHead: {name: 'aircraft_facts_query'},
345
+ pipeline: [],
346
+ },
347
+ },
348
+ structRelationship: withJoin('tail_num', 'aircraft_facts.tail_num'),
349
+ primaryKey: 'tail_num',
350
+ fields: [
351
+ {type: 'string', name: 'tail_num'},
352
+ {type: 'number', name: 'lifetime_distance'},
353
+ ],
354
+ },
355
+
356
+ // // Inline derived table
357
+ // {
358
+ // type: 'struct',
359
+ // name: "aircraft_facts2",
360
+ // structSource: {
361
+ // type: 'query',
362
+ // query: {
363
+ // type: 'reduce',
364
+ // fields: [
365
+ // 'tail_num',
366
+ // {name: 'total_distance', as: 'lifetime_distance'}
367
+ // ]
368
+ // }
369
+ // },
370
+ // structRelationship: {type: 'foreignKey', keyExpression: [{ type: "field", path: 'tail_num'},
371
+ // fields: [
372
+ // ]
373
+ // },
374
+ // query definition
375
+ // EXPLORE flights | REDUCE carriers.name, flight_count ORDER BY 1
376
+ {
377
+ type: 'turtle',
378
+ name: 'flights_by_carrier',
379
+ pipeline: [
380
+ {
381
+ type: 'reduce',
382
+ fields: [
383
+ 'carriers.name',
384
+ 'flight_count',
385
+ // { name: "origin.count", as: "origin_count" },
386
+ {
387
+ type: 'number',
388
+ name: 'origin_count',
389
+ expressionType: 'aggregate',
390
+ e: [
391
+ {
392
+ type: 'aggregate',
393
+ function: 'count',
394
+ e: [],
395
+ structPath: 'origin',
396
+ },
397
+ ],
398
+ },
399
+ {
400
+ type: 'number',
401
+ name: 'my_total_distance',
402
+ expressionType: 'aggregate',
403
+ e: [
404
+ {
405
+ type: 'aggregate',
406
+ function: 'sum',
407
+ e: [{type: 'field', path: 'distance'}],
408
+ },
409
+ ],
410
+ },
411
+ ],
412
+ orderBy: [{field: 'name', dir: 'asc'}],
413
+ },
414
+ ],
415
+ },
416
+ {
417
+ type: 'turtle',
418
+ name: 'flights_by_carrier_2001_2002',
419
+ pipeline: [
420
+ {
421
+ type: 'reduce',
422
+
423
+ fields: [
424
+ 'carriers.name',
425
+ {
426
+ name: 'flights_2001',
427
+ type: 'number',
428
+ expressionType: 'aggregate',
429
+ e: [
430
+ {
431
+ type: 'filterExpression',
432
+ filterList: [fYearEq('dep_time', 2001)],
433
+ e: [
434
+ {
435
+ type: 'aggregate',
436
+ function: 'count',
437
+ e: [],
438
+ },
439
+ ],
440
+ },
441
+ ],
442
+ },
443
+ {
444
+ name: 'flights_2002',
445
+ type: 'number',
446
+ expressionType: 'aggregate',
447
+ e: [
448
+ {
449
+ type: 'filterExpression',
450
+ filterList: [fYearEq('dep_time', 2001)],
451
+ e: [
452
+ {
453
+ type: 'aggregate',
454
+ function: 'count',
455
+ e: [],
456
+ },
457
+ ],
458
+ },
459
+ ],
460
+ },
461
+ ],
462
+ orderBy: [{field: 'name', dir: 'asc'}],
463
+ },
464
+ ],
465
+ },
466
+ // EXPLORE flights | REDUCE destination.city, flight_count ORDER BY 2 desc
467
+ {
468
+ type: 'turtle',
469
+ name: 'flights_by_city_top_5',
470
+ pipeline: [
471
+ {
472
+ type: 'reduce',
473
+ fields: ['destination.city', 'flight_count'],
474
+ orderBy: [{field: 2, dir: 'desc'}],
475
+ limit: 5,
476
+ },
477
+ ],
478
+ },
479
+ // EXPLORE flights [origin.state:'CA] | REDUCE aircraft.aircraft_models.manufacturer, aircraft.aircraft_models.manufacturer.
480
+ // aircraft.aircraft_count, flight_count ORDER BY flight_count LIMIT 5
481
+ {
482
+ type: 'turtle',
483
+ name: 'flights_by_model',
484
+ pipeline: [
485
+ {
486
+ type: 'reduce',
487
+ fields: [
488
+ 'aircraft.aircraft_models.manufacturer',
489
+ 'aircraft.aircraft_models.model',
490
+ 'aircraft.aircraft_count',
491
+ 'flight_count',
492
+ ],
493
+ orderBy: [{field: 'flight_count', dir: 'desc'}],
494
+ filterList: [fStringEq('origin.state', 'CA')],
495
+ limit: 5,
496
+ },
497
+ ],
498
+ },
499
+ // EXPLORE flights | REDUCE tail_num, total_distance as lifetime_distance
500
+ {
501
+ type: 'turtle',
502
+ name: 'aircraft_facts_query',
503
+ pipeline: [
504
+ {
505
+ type: 'reduce',
506
+
507
+ fields: [
508
+ 'tail_num',
509
+ {
510
+ type: 'number',
511
+ name: 'lifetime_distance',
512
+ expressionType: 'aggregate',
513
+ e: [
514
+ {
515
+ type: 'aggregate',
516
+ function: 'sum',
517
+ e: [{type: 'field', path: 'distance'}],
518
+ },
519
+ ],
520
+ },
521
+ ],
522
+ },
523
+ ],
524
+ },
525
+ // expore flights | reduce carriers.name, aircraft.total_engines, flight_count
526
+ {
527
+ type: 'turtle',
528
+ name: 'carriers_by_total_engines',
529
+ pipeline: [
530
+ {
531
+ type: 'reduce',
532
+ fields: ['carriers.name', 'aircraft.total_engines', 'flight_count'],
533
+ },
534
+ ],
535
+ },
536
+ // expore flights | reduce aircraft_facts.lifetime_distance, flight_count
537
+ {
538
+ type: 'turtle',
539
+ name: 'aircraft_facts_test',
540
+ pipeline: [
541
+ {
542
+ type: 'reduce',
543
+ fields: ['aircraft_facts.lifetime_distance', 'flight_count'],
544
+ },
545
+ ],
546
+ },
547
+ // expore flights | reduce flight_count, origin.city, origin.state
548
+ {
549
+ type: 'turtle',
550
+ name: 'measures_first',
551
+ pipeline: [
552
+ {
553
+ type: 'reduce',
554
+ fields: ['flight_count', 'origin.city', 'origin.state'],
555
+ },
556
+ ],
557
+ },
558
+
559
+ // explore flights
560
+ // | reduce
561
+ // carrier
562
+ // flight_count
563
+ // top_5_routes is (reduce top 5 order by 3 desc
564
+ // origin_code
565
+ // destination_code,
566
+ // flight_count
567
+ // )
568
+ {
569
+ type: 'turtle',
570
+ name: 'first_turtle',
571
+ pipeline: [
572
+ {
573
+ type: 'reduce',
574
+ fields: [
575
+ 'carrier',
576
+ 'flight_count',
577
+ {
578
+ type: 'turtle',
579
+ name: 'top_5_routes',
580
+ pipeline: [
581
+ {
582
+ type: 'reduce',
583
+ fields: ['origin_code', 'destination_code', 'flight_count'],
584
+ limit: 5,
585
+ orderBy: [{field: 'flight_count', dir: 'desc'}],
586
+ },
587
+ ],
588
+ },
589
+ ],
590
+ },
591
+ ],
592
+ },
593
+ // explore flights
594
+ // | reduce order by 3 desc
595
+ // origin_code
596
+ // destination_code
597
+ // flight_count
598
+ {
599
+ type: 'turtle',
600
+ name: 'top_5_routes',
601
+ pipeline: [
602
+ {
603
+ type: 'reduce',
604
+ fields: ['origin_code', 'destination_code', 'flight_count'],
605
+ limit: 5,
606
+ orderBy: [{field: 'flight_count', dir: 'desc'}],
607
+ },
608
+ ],
609
+ },
610
+ // EXPLORE flights | REDUCE carrier, flight_count, top_5_routes
611
+ {
612
+ type: 'turtle',
613
+ name: 'carriers_routes',
614
+ pipeline: [
615
+ {
616
+ type: 'reduce',
617
+ fields: ['carrier', 'flight_count', 'top_5_routes'],
618
+ },
619
+ ],
620
+ },
621
+ // EXPLORE flights [destination.state: 'NY] | REDUCE destination.code as newyork_airport, flight_count ORDER BY 2 DESC
622
+ {
623
+ type: 'turtle',
624
+ name: 'new_york_airports',
625
+ pipeline: [
626
+ {
627
+ type: 'reduce',
628
+ fields: ['destination.code', 'flight_count'],
629
+ filterList: [fStringEq('destination.state', 'NY')],
630
+ orderBy: [{field: 'flight_count', dir: 'desc'}],
631
+ },
632
+ ],
633
+ },
634
+ // EXPLORE flights | REDUCE aircraft.aircraft_models.manufacturer, aircraft.aircraft_count, flight_count ORDER BY 3 DESC
635
+ {
636
+ type: 'turtle',
637
+ name: 'flights_by_manufacturer',
638
+ pipeline: [
639
+ {
640
+ type: 'reduce',
641
+ fields: [
642
+ 'aircraft.aircraft_models.manufacturer',
643
+ 'aircraft.aircraft_count',
644
+ 'flight_count',
645
+ ],
646
+ orderBy: [{field: 'flight_count', dir: 'desc'}],
647
+ limit: 5,
648
+ },
649
+ ],
650
+ },
651
+ // EXPLORE flights [origin.state:'CA'x] | REDUCE carrier, flight_count, top_5_routes, flights_by_manufacturer
652
+ {
653
+ type: 'turtle',
654
+ name: 'carriers_routes_manufacturer',
655
+ pipeline: [
656
+ {
657
+ type: 'reduce',
658
+ fields: [
659
+ 'carrier',
660
+ 'flight_count',
661
+ 'top_5_routes',
662
+ 'flights_by_manufacturer',
663
+ ],
664
+ filterList: [fStringEq('origin.state', 'CA')],
665
+ },
666
+ ],
667
+ },
668
+ {
669
+ type: 'turtle',
670
+ name: 'top_5_routes_carriers',
671
+ pipeline: [
672
+ {
673
+ type: 'reduce',
674
+ fields: [
675
+ 'origin_code',
676
+ 'destination_code',
677
+ 'flight_count',
678
+ 'flights_by_carrier',
679
+ ],
680
+ limit: 5,
681
+ orderBy: [{field: 'flight_count', dir: 'desc'}],
682
+ },
683
+ ],
684
+ },
685
+ {
686
+ type: 'turtle',
687
+ name: 'flights_by_carrier_with_totals',
688
+ pipeline: [
689
+ {
690
+ type: 'reduce',
691
+ filterList: [fStringEq('origin.state', 'CA')],
692
+ fields: [
693
+ {
694
+ type: 'turtle',
695
+ name: 'main',
696
+ pipeline: [
697
+ {
698
+ type: 'reduce',
699
+ fields: [
700
+ 'carriers.name',
701
+ 'flight_count',
702
+ //{ name: "origin.count", as: "origin_count" },
703
+ {
704
+ type: 'number',
705
+ name: 'origin_count',
706
+ expressionType: 'aggregate',
707
+ e: [
708
+ {
709
+ type: 'aggregate',
710
+ function: 'count',
711
+ e: [],
712
+ structPath: 'origin',
713
+ },
714
+ ],
715
+ },
716
+ ],
717
+ orderBy: [{field: 'flight_count', dir: 'desc'}],
718
+ },
719
+ ],
720
+ },
721
+ {
722
+ type: 'turtle',
723
+ name: 'totals',
724
+ pipeline: [
725
+ {
726
+ type: 'reduce',
727
+ fields: ['flight_count'],
728
+ },
729
+ ],
730
+ },
731
+ ],
732
+ },
733
+ ],
734
+ },
735
+ {
736
+ type: 'turtle',
737
+ name: 'flight_detail',
738
+ pipeline: [
739
+ {
740
+ type: 'reduce',
741
+ orderBy: [{field: 'dep_time', dir: 'asc'}],
742
+ fields: [
743
+ 'id2',
744
+ 'dep_time',
745
+ 'tail_num',
746
+ 'carrier',
747
+ 'origin_code',
748
+ 'destination_code',
749
+ 'distance',
750
+ 'dep_delay',
751
+ ],
752
+ limit: 500,
753
+ },
754
+ ],
755
+ },
756
+ {
757
+ type: 'turtle',
758
+ name: 'some_measures',
759
+ pipeline: [
760
+ {
761
+ type: 'reduce',
762
+ fields: ['flight_count', 'total_distance', 'aircraft.aircraft_count'],
763
+ },
764
+ ],
765
+ },
766
+ {
767
+ type: 'turtle',
768
+ name: 'flights_routes_sessionized',
769
+ pipeline: [
770
+ {
771
+ type: 'reduce',
772
+ filterList: [
773
+ fStringEq('origin.state', 'CA'),
774
+ fStringEq('carrier', 'UA'),
775
+ ],
776
+ limit: 20,
777
+ fields: [
778
+ {
779
+ type: 'timestamp',
780
+ name: 'dep_time',
781
+ as: 'dep_date',
782
+ timeframe: 'day',
783
+ },
784
+ 'carrier',
785
+ {
786
+ type: 'turtle',
787
+ name: 'routes',
788
+ pipeline: [
789
+ {
790
+ type: 'reduce',
791
+ fields: [
792
+ 'origin_code',
793
+ 'destination_code',
794
+ 'flight_count',
795
+ {
796
+ type: 'turtle',
797
+ name: 'flight_detail',
798
+ pipeline: [
799
+ {
800
+ type: 'reduce',
801
+ orderBy: [{field: 'dep_time', dir: 'asc'}],
802
+ limit: 5,
803
+ fields: [
804
+ 'id2',
805
+ 'dep_time',
806
+ 'tail_num',
807
+ 'flight_num',
808
+ 'dep_delay',
809
+ ],
810
+ },
811
+ ],
812
+ },
813
+ ],
814
+ orderBy: [{field: 'flight_count', dir: 'desc'}],
815
+ },
816
+ ],
817
+ },
818
+ ],
819
+ },
820
+ ],
821
+ },
822
+ /*
823
+ FROM flights |
824
+ REDUCE
825
+ dep_time.date as dep_date,
826
+ carrier,
827
+ flight_count,
828
+ (REDUCE
829
+ tail_num,
830
+ flight_count,
831
+ (REDUCE
832
+ id2, dep_time, origin_code, destination_code, flight_num, dep_delay
833
+ ORDER BY 2
834
+ )
835
+ ) as aircraft
836
+ */
837
+ {
838
+ type: 'turtle',
839
+ name: 'flights_aircraft_sessionized',
840
+ pipeline: [
841
+ {
842
+ type: 'reduce',
843
+ filterList: [fStringEq('carrier', 'UA')],
844
+ limit: 2,
845
+ fields: [
846
+ {
847
+ type: 'timestamp',
848
+ name: 'dep_time',
849
+ as: 'dep_date',
850
+ timeframe: 'day',
851
+ },
852
+ 'carrier',
853
+ 'flight_count',
854
+ {
855
+ type: 'turtle',
856
+ name: 'aircraft',
857
+ pipeline: [
858
+ {
859
+ type: 'reduce',
860
+ limit: 10,
861
+ fields: [
862
+ 'tail_num',
863
+ 'flight_count',
864
+ {
865
+ type: 'turtle',
866
+ name: 'flight_detail',
867
+ pipeline: [
868
+ {
869
+ type: 'reduce',
870
+ orderBy: [{field: 'dep_time', dir: 'asc'}],
871
+ fields: [
872
+ 'id2',
873
+ 'dep_time',
874
+ 'origin_code',
875
+ 'destination_code',
876
+ 'flight_num',
877
+ 'dep_delay',
878
+ ],
879
+ },
880
+ ],
881
+ },
882
+ ],
883
+ orderBy: [{field: 'flight_count', dir: 'desc'}],
884
+ },
885
+ ],
886
+ },
887
+ ],
888
+ },
889
+ ],
890
+ },
891
+ {
892
+ type: 'turtle',
893
+ name: 'search_index',
894
+ pipeline: [
895
+ {
896
+ type: 'index',
897
+ weightMeasure: 'flight_count',
898
+ fields: [
899
+ 'carrier',
900
+ 'origin_code',
901
+ 'destination_code',
902
+ 'carriers.name',
903
+ 'carriers.nickname',
904
+ 'carriers.code',
905
+ 'origin.code',
906
+ 'origin.full_name',
907
+ 'origin.city',
908
+ 'origin.state',
909
+ 'destination.code',
910
+ 'destination.full_name',
911
+ 'destination.city',
912
+ 'destination.state',
913
+ 'aircraft.aircraft_model_code',
914
+ 'aircraft.aircraft_models.manufacturer',
915
+ 'aircraft.aircraft_models.model',
916
+ ],
917
+ },
918
+ ],
919
+ },
920
+ // {
921
+ // type: "reduce",
922
+ // name: "some_measures",
923
+ // fields: ["flight_count", "total_distance"],
924
+ // },
925
+ ],
926
+ };
927
+
928
+ const tableAirports: StructDef = {
929
+ type: 'struct',
930
+ name: 'malloy-data.malloytest.airports',
931
+ as: 'table_airports',
932
+ dialect: 'standardsql',
933
+ structSource: {
934
+ type: 'table',
935
+ tablePath: 'malloy-data.malloytest.airports',
936
+ },
937
+ structRelationship: {type: 'basetable', connectionName: 'bigquery'},
938
+ primaryKey: 'code',
939
+ fields: [
940
+ {type: 'number', name: 'id', numberType: 'integer'},
941
+ {type: 'string', name: 'code'},
942
+ {type: 'string', name: 'site_number'},
943
+ {type: 'string', name: 'fac_type', as: 'facility_type'},
944
+ {type: 'string', name: 'fac_use', as: 'facility_use'},
945
+ {type: 'string', name: 'faa_region'},
946
+ {type: 'string', name: 'faa_dist'},
947
+ {type: 'string', name: 'city'},
948
+ {type: 'string', name: 'county'},
949
+ {type: 'string', name: 'state'},
950
+ {type: 'string', name: 'full_name'},
951
+ {type: 'string', name: 'own_type'},
952
+ {type: 'number', name: 'longitude', numberType: 'float'},
953
+ {type: 'number', name: 'latitude', numberType: 'float'},
954
+ {type: 'number', name: 'elevation', numberType: 'integer'},
955
+ {type: 'string', name: 'aero_cht'},
956
+ {type: 'number', name: 'cbd_dist', numberType: 'integer'},
957
+ {type: 'string', name: 'cbd_dir'},
958
+ {type: 'string', name: 'act_date'},
959
+ {type: 'string', name: 'cert'},
960
+ {type: 'string', name: 'fed_agree'},
961
+ {type: 'string', name: 'cust_intl'},
962
+ {type: 'string', name: 'c_ldg_rts'},
963
+ {type: 'string', name: 'joint_use'},
964
+ {type: 'string', name: 'mil_rts'},
965
+ {type: 'string', name: 'cntl_twr'},
966
+ {type: 'string', name: 'major'},
967
+ {
968
+ type: 'number',
969
+ name: 'count',
970
+ expressionType: 'aggregate',
971
+ e: [{type: 'aggregate', function: 'count', e: []}],
972
+ },
973
+ ],
974
+ };
975
+
976
+ /** Test model */
977
+ export const testModel: ModelDef = {
978
+ name: 'Hand Coded Models',
979
+ exports: [
980
+ 'flights',
981
+ 'table_airports',
982
+ 'medicare_test',
983
+ 'medicare_state_facts',
984
+ // "aircraft",
985
+ ],
986
+ contents: {
987
+ flights: FLIGHTS_EXPLORE,
988
+ table_airports: tableAirports,
989
+ medicare_test: medicareModel,
990
+ medicare_state_facts: medicareStateFacts,
991
+ // aircraft: aircraftHandStructDef,
992
+ },
993
+ };
994
+
995
+ // // clang-format on