@malloydata/malloy-tests 0.0.299 → 0.0.301

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.
@@ -21,239 +21,77 @@
21
21
  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  */
23
23
 
24
- import type {SourceDef} from '@malloydata/malloy';
25
- import {composeSQLExpr} from '@malloydata/malloy';
26
- import {fToQF} from '../util';
24
+ export const medicareModel = `
25
+ source: medicare_test is bigquery.table('malloytest.bq_medicare_test') extend {
26
+ primary_key: id
27
27
 
28
- // will it build?
28
+ rename:
29
+ discharges is total_discharges
29
30
 
30
- /** Medicare Model */
31
- export const medicareModel: SourceDef = {
32
- as: 'medicare_test',
33
- dialect: 'standardsql',
34
- fields: [
35
- // Fields in the flights table.
36
- {name: 'id', numberType: 'integer', type: 'number'},
37
- {name: 'drg_definition', type: 'string'},
38
- {name: 'provider_id', numberType: 'integer', type: 'number'},
39
- {name: 'provider_name', type: 'string'},
40
- {name: 'provider_street', type: 'string'},
41
- {name: 'provider_city', type: 'string'},
42
- {name: 'provider_state', type: 'string'},
43
- {name: 'provider_zipcode', numberType: 'integer', type: 'number'},
44
- {name: 'hospital_referral_region_description', type: 'string'},
45
- {
46
- as: 'discharges',
47
- name: 'total_discharges',
48
- numberType: 'float',
49
- type: 'number',
50
- },
51
- {
52
- name: 'average_covered_charges',
53
- numberType: 'float',
54
- type: 'number',
55
- },
56
- {
57
- name: 'average_total_payments',
58
- numberType: 'float',
59
- type: 'number',
60
- },
61
- {
62
- name: 'average_medicare_payments',
63
- numberType: 'float',
64
- type: 'number',
65
- },
66
- {
67
- type: 'number',
68
- name: 'count_of_drugs',
69
- expressionType: 'aggregate',
70
- e: {node: 'aggregate', function: 'count', e: {node: ''}},
71
- },
72
- {
73
- type: 'number',
74
- name: 'provider_count',
75
- expressionType: 'aggregate',
76
- e: composeSQLExpr([
77
- 'COUNT(DISTINCT ',
78
- {node: 'field', path: ['provider_id']},
79
- ')',
80
- ]),
81
- },
82
- {
83
- type: 'number',
84
- name: 'total_discharges',
85
- expressionType: 'aggregate',
86
- e: {
87
- node: 'aggregate',
88
- function: 'sum',
89
- e: {node: 'field', path: ['discharges']},
90
- },
91
- },
31
+ measure:
32
+ count_of_drugs is count()
33
+ provider_count is count(provider_id)
34
+ total_discharges is discharges.sum()
92
35
 
93
- {
94
- type: 'turtle',
95
- name: 'discharges_by_state',
96
- pipeline: [
97
- {
98
- queryFields: fToQF(['provider_state', 'total_discharges']),
99
- orderBy: [{dir: 'desc', field: 2}],
100
- type: 'reduce',
101
- },
102
- ],
103
- },
104
- {
105
- type: 'turtle',
106
- name: 'discharges_by_city',
107
- pipeline: [
108
- {
109
- queryFields: fToQF(['provider_city', 'total_discharges']),
110
- orderBy: [{dir: 'desc', field: 2}],
111
- type: 'reduce',
112
- },
113
- ],
114
- },
115
- {
116
- type: 'turtle',
117
- name: 'bigturtle_state',
118
- pipeline: [
119
- {
120
- queryFields: fToQF([
121
- 'provider_state',
122
- 'total_discharges',
123
- 'discharges_by_city',
124
- 'discharges_by_zip',
125
- ]),
126
- orderBy: [{dir: 'desc', field: 1}],
127
- type: 'reduce',
128
- },
129
- ],
130
- },
131
- {
132
- type: 'turtle',
133
- name: 'discharges_by_zip',
134
- pipeline: [
135
- {
136
- queryFields: fToQF(['provider_zipcode', 'total_discharges']),
137
- orderBy: [{dir: 'desc', field: 2}],
138
- type: 'reduce',
139
- },
140
- ],
141
- },
142
- {
143
- type: 'turtle',
144
- name: 'turtle_city_zip',
145
- pipeline: [
146
- {
147
- queryFields: fToQF([
148
- 'provider_city',
149
- 'total_discharges',
150
- 'discharges_by_zip',
151
- ]),
152
- orderBy: [{dir: 'desc', field: 1}],
153
- type: 'reduce',
154
- },
155
- ],
156
- },
157
- {
158
- type: 'turtle',
159
- name: 'triple_turtle',
160
- pipeline: [
161
- {
162
- queryFields: fToQF([
163
- 'provider_state',
164
- 'total_discharges',
165
- 'turtle_city_zip',
166
- ]),
167
- orderBy: [{dir: 'desc', field: 1}],
168
- type: 'reduce',
169
- },
170
- ],
171
- },
172
- {
173
- type: 'turtle',
174
- name: 'rollup_by_location',
175
- pipeline: [
176
- {
177
- queryFields: fToQF([
178
- 'provider_state',
179
- 'total_discharges',
180
- {
181
- type: 'turtle',
182
- name: 'turtle_city_zip',
183
- pipeline: [
184
- {
185
- queryFields: fToQF([
186
- 'provider_city',
187
- 'total_discharges',
188
- {
189
- type: 'turtle',
190
- name: 'discharges_by_zip',
191
- pipeline: [
192
- {
193
- queryFields: fToQF([
194
- 'provider_zipcode',
195
- 'total_discharges',
196
- ]),
197
- orderBy: [{dir: 'desc', field: 2}],
198
- type: 'reduce',
199
- },
200
- ],
201
- },
202
- ]),
203
- orderBy: [{dir: 'desc', field: 1}],
204
- type: 'reduce',
205
- },
206
- ],
207
- },
208
- ]),
209
- orderBy: [{dir: 'desc', field: 1}],
210
- type: 'reduce',
211
- },
212
- ],
213
- },
214
- ],
215
- name: 'malloydata-org.malloytest.bq_medicare_test',
216
- primaryKey: 'id',
217
- connection: 'bigquery',
218
- type: 'table',
219
- tablePath: 'malloydata-org.malloytest.bq_medicare_test',
220
- };
36
+ view: discharges_by_state is {
37
+ group_by: provider_state
38
+ aggregate: total_discharges
39
+ order_by: 2 desc
40
+ }
221
41
 
222
- export const medicareStateFacts: SourceDef = {
223
- fields: [],
224
- name: 'medicare_state_facts',
225
- dialect: 'standardsql',
226
- connection: 'bigquery',
227
- type: 'query_source',
228
- query: {
229
- structRef: 'medicare_test',
230
- pipeline: [
231
- {
232
- queryFields: fToQF([
233
- 'provider_state',
234
- {
235
- type: 'number',
236
- name: 'num_providers',
237
- expressionType: 'aggregate',
238
- e: composeSQLExpr([
239
- 'COUNT(DISTINCT ',
240
- {node: 'field', path: ['provider_id']},
241
- ')',
242
- ]),
243
- },
244
- ]),
245
- type: 'reduce',
246
- },
247
- ],
248
- },
249
- };
42
+ view: discharges_by_city is {
43
+ group_by: provider_city
44
+ aggregate: total_discharges
45
+ order_by: 2 desc
46
+ }
250
47
 
251
- // export const medicareStateFacts: StructDef = {
252
- // type: 'struct',
253
- // name: '(SELECT provider_state, COUNT(DISTINCT provider_id) as num_providers FROM malloytest.medicare_test GROUP BY 1)',
254
- // as: 'medicare_state_facts',
255
- // structRelationship: {type:'basetable'},
256
- // structSource: {type:'table'},
257
- // primaryKey: 'provider_state',
258
- // fields: [{type:'string', name:'provider_state'}, {type:'number', name: 'num_providers', numberType: 'integer'}]
259
- // }
48
+ view: discharges_by_zip is {
49
+ group_by: provider_zipcode
50
+ aggregate: total_discharges
51
+ order_by: 2 desc
52
+ }
53
+
54
+ view: bigturtle_state is {
55
+ group_by: provider_state
56
+ aggregate: total_discharges
57
+ nest:
58
+ discharges_by_city
59
+ discharges_by_zip
60
+ }
61
+
62
+ view: turtle_city_zip is {
63
+ group_by: provider_city
64
+ aggregate: total_discharges
65
+ nest: discharges_by_zip
66
+ order_by: 1 desc
67
+ }
68
+
69
+ view: triple_turtle is {
70
+ group_by: provider_state
71
+ aggregate: total_discharges
72
+ nest: turtle_city_zip
73
+ order_by: 1 desc
74
+ }
75
+
76
+ view: rollup_by_location is {
77
+ group_by: provider_state
78
+ aggregate: total_discharges
79
+ nest: turtle_city_zip is {
80
+ group_by: provider_city
81
+ aggregate: total_discharges
82
+ nest: discharges_by_zip is {
83
+ group_by: provider_zipcode
84
+ aggregate: total_discharges
85
+ order_by: 2 desc
86
+ }
87
+ order_by: 1 desc
88
+ }
89
+ order_by: 1 desc
90
+ }
91
+ }
92
+
93
+ source: medicare_state_facts is medicare_test -> {
94
+ group_by: provider_state
95
+ aggregate: num_providers is count(provider_id)
96
+ }
97
+ `;
package/src/util/index.ts CHANGED
@@ -22,74 +22,13 @@
22
22
  */
23
23
 
24
24
  import type {
25
- FilterCondition,
26
- QueryFieldDef,
27
- IndexFieldDef,
28
25
  QueryMaterializer,
29
26
  Result,
30
27
  Runtime,
31
- Expr,
32
28
  SingleConnectionRuntime,
33
29
  } from '@malloydata/malloy';
34
- import {composeSQLExpr} from '@malloydata/malloy';
35
30
  export * from '@malloydata/malloy/test';
36
31
 
37
- // these two helper functions are here just to make older hand built models
38
- // easier to use in the new world were refs are not strings
39
- export function fToQF(fs: (QueryFieldDef | string)[]): QueryFieldDef[] {
40
- return fs.map(f =>
41
- typeof f === 'string' ? {type: 'fieldref', path: f.split('.')} : f
42
- );
43
- }
44
-
45
- export function fToIF(fs: string[]): IndexFieldDef[] {
46
- return fs.map(f =>
47
- typeof f === 'string' ? {type: 'fieldref', path: f.split('.')} : f
48
- );
49
- }
50
-
51
- export function fStringEq(field: string, value: string): FilterCondition {
52
- return {
53
- node: 'filterCondition',
54
- e: {
55
- node: '=',
56
- kids: {
57
- left: {node: 'field', path: field.split('.')},
58
- right: {node: 'stringLiteral', literal: value},
59
- },
60
- },
61
- code: `${field}='${value}'`,
62
- expressionType: 'scalar',
63
- };
64
- }
65
-
66
- export function fStringLike(field: string, value: string): FilterCondition {
67
- return {
68
- node: 'filterCondition',
69
- e: {
70
- node: 'like',
71
- kids: {
72
- left: {node: 'field', path: field.split('.')},
73
- right: {node: 'stringLiteral', literal: value},
74
- },
75
- },
76
- code: `${field}~'${value}'`,
77
- expressionType: 'scalar',
78
- };
79
- }
80
-
81
- export function fYearEq(field: string, year: number): FilterCondition {
82
- const yBegin = `'${year}-01-01 00:00:00'`;
83
- const yEnd = `'${year + 1}-01-01 00:00:00'`;
84
- const fx: Expr = {node: 'field', path: field.split('.')};
85
- return {
86
- node: 'filterCondition',
87
- e: composeSQLExpr([fx, `>=${yBegin} and `, fx, `<${yEnd}`]),
88
- code: `${field}:@${year}`,
89
- expressionType: 'scalar',
90
- };
91
- }
92
-
93
32
  interface InitValues {
94
33
  sql?: string;
95
34
  malloy?: string;