@malloydata/malloy 0.0.177-dev240828173040 → 0.0.177-dev240829030921

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 (121) hide show
  1. package/dist/dialect/dialect.d.ts +23 -13
  2. package/dist/dialect/dialect.js +33 -27
  3. package/dist/dialect/duckdb/duckdb.d.ts +7 -11
  4. package/dist/dialect/duckdb/duckdb.js +34 -100
  5. package/dist/dialect/duckdb/functions/greatest_and_least.js +5 -12
  6. package/dist/dialect/functions/concat.js +1 -1
  7. package/dist/dialect/functions/greatest_and_least.js +1 -1
  8. package/dist/dialect/functions/simple_numeric_functions.js +1 -1
  9. package/dist/dialect/functions/sql.js +5 -15
  10. package/dist/dialect/functions/string_agg.js +2 -2
  11. package/dist/dialect/functions/trim_functions.js +2 -2
  12. package/dist/dialect/functions/util.d.ts +6 -9
  13. package/dist/dialect/functions/util.js +29 -38
  14. package/dist/dialect/index.d.ts +1 -1
  15. package/dist/dialect/index.js +1 -2
  16. package/dist/dialect/pg_impl.d.ts +15 -0
  17. package/dist/dialect/pg_impl.js +91 -0
  18. package/dist/dialect/postgres/functions/greatest_and_least.js +1 -3
  19. package/dist/dialect/postgres/functions/string_agg.js +2 -2
  20. package/dist/dialect/postgres/postgres.d.ts +7 -11
  21. package/dist/dialect/postgres/postgres.js +29 -92
  22. package/dist/dialect/snowflake/functions/string_agg.js +2 -2
  23. package/dist/dialect/snowflake/snowflake.d.ts +9 -9
  24. package/dist/dialect/snowflake/snowflake.js +41 -48
  25. package/dist/dialect/standardsql/functions/string_agg.js +4 -4
  26. package/dist/dialect/standardsql/standardsql.d.ts +9 -9
  27. package/dist/dialect/standardsql/standardsql.js +56 -51
  28. package/dist/dialect/trino/functions/concat.js +1 -1
  29. package/dist/dialect/trino/functions/string_agg.js +2 -2
  30. package/dist/dialect/trino/trino.d.ts +11 -12
  31. package/dist/dialect/trino/trino.js +59 -83
  32. package/dist/index.d.ts +3 -3
  33. package/dist/index.js +3 -4
  34. package/dist/lang/ast/ast-utils.d.ts +1 -1
  35. package/dist/lang/ast/ast-utils.js +2 -2
  36. package/dist/lang/ast/expressions/apply.js +1 -2
  37. package/dist/lang/ast/expressions/binary-boolean.d.ts +2 -1
  38. package/dist/lang/ast/expressions/binary-boolean.js +6 -3
  39. package/dist/lang/ast/expressions/binary-numeric.d.ts +2 -1
  40. package/dist/lang/ast/expressions/boolean.js +1 -1
  41. package/dist/lang/ast/expressions/constant-expression.d.ts +3 -3
  42. package/dist/lang/ast/expressions/constant-expression.js +0 -23
  43. package/dist/lang/ast/expressions/expr-aggregate-function.js +24 -34
  44. package/dist/lang/ast/expressions/expr-alternation-tree.d.ts +6 -3
  45. package/dist/lang/ast/expressions/expr-alternation-tree.js +10 -5
  46. package/dist/lang/ast/expressions/expr-cast.js +1 -2
  47. package/dist/lang/ast/expressions/expr-coalesce.js +4 -1
  48. package/dist/lang/ast/expressions/expr-compare.d.ts +3 -3
  49. package/dist/lang/ast/expressions/expr-count-distinct.js +1 -1
  50. package/dist/lang/ast/expressions/expr-count.js +3 -3
  51. package/dist/lang/ast/expressions/expr-func.js +15 -18
  52. package/dist/lang/ast/expressions/expr-granular-time.js +8 -10
  53. package/dist/lang/ast/expressions/expr-id-reference.js +2 -2
  54. package/dist/lang/ast/expressions/expr-minus.js +5 -4
  55. package/dist/lang/ast/expressions/expr-not.js +1 -1
  56. package/dist/lang/ast/expressions/expr-now.js +1 -6
  57. package/dist/lang/ast/expressions/expr-null.js +1 -1
  58. package/dist/lang/ast/expressions/expr-number.js +1 -1
  59. package/dist/lang/ast/expressions/expr-parens.js +1 -1
  60. package/dist/lang/ast/expressions/expr-props.js +4 -7
  61. package/dist/lang/ast/expressions/expr-regex.js +1 -3
  62. package/dist/lang/ast/expressions/expr-string.js +1 -7
  63. package/dist/lang/ast/expressions/expr-time-extract.js +12 -16
  64. package/dist/lang/ast/expressions/expr-time.d.ts +2 -2
  65. package/dist/lang/ast/expressions/expr-time.js +4 -6
  66. package/dist/lang/ast/expressions/expr-ungroup.js +2 -2
  67. package/dist/lang/ast/expressions/for-range.d.ts +2 -1
  68. package/dist/lang/ast/expressions/function-ordering.js +5 -5
  69. package/dist/lang/ast/expressions/partial-compare.d.ts +3 -3
  70. package/dist/lang/ast/expressions/pick-when.js +24 -8
  71. package/dist/lang/ast/expressions/range.d.ts +2 -1
  72. package/dist/lang/ast/expressions/range.js +4 -2
  73. package/dist/lang/ast/expressions/time-literal.d.ts +4 -3
  74. package/dist/lang/ast/expressions/time-literal.js +5 -10
  75. package/dist/lang/ast/expressions/top-by.js +1 -2
  76. package/dist/lang/ast/expressions/utils.d.ts +3 -12
  77. package/dist/lang/ast/expressions/utils.js +8 -56
  78. package/dist/lang/ast/field-space/reference-field.js +1 -1
  79. package/dist/lang/ast/index.d.ts +1 -1
  80. package/dist/lang/ast/index.js +1 -1
  81. package/dist/lang/ast/query-builders/index-builder.d.ts +2 -2
  82. package/dist/lang/ast/query-builders/reduce-builder.d.ts +2 -2
  83. package/dist/lang/ast/query-items/field-declaration.js +1 -5
  84. package/dist/lang/ast/query-properties/filters.d.ts +3 -3
  85. package/dist/lang/ast/query-properties/filters.js +6 -5
  86. package/dist/lang/ast/query-properties/top.js +1 -2
  87. package/dist/lang/ast/source-elements/refined-source.js +1 -1
  88. package/dist/lang/ast/source-properties/joins.js +11 -10
  89. package/dist/lang/ast/time-utils.d.ts +5 -7
  90. package/dist/lang/ast/time-utils.js +17 -57
  91. package/dist/lang/ast/types/binary_operators.d.ts +9 -0
  92. package/dist/lang/ast/types/binary_operators.js +28 -0
  93. package/dist/lang/ast/types/expr-result.d.ts +3 -3
  94. package/dist/lang/ast/types/expression-def.d.ts +4 -3
  95. package/dist/lang/ast/types/expression-def.js +43 -50
  96. package/dist/lang/lib/Malloy/MalloyParser.d.ts +0 -11
  97. package/dist/lang/lib/Malloy/MalloyParser.js +803 -858
  98. package/dist/lang/lib/Malloy/MalloyParserListener.d.ts +0 -13
  99. package/dist/lang/lib/Malloy/MalloyParserVisitor.d.ts +0 -8
  100. package/dist/lang/malloy-to-ast.d.ts +0 -1
  101. package/dist/lang/malloy-to-ast.js +0 -4
  102. package/dist/lang/test/expressions.spec.js +42 -86
  103. package/dist/lang/test/field-symbols.spec.js +8 -6
  104. package/dist/lang/test/literals.spec.js +6 -6
  105. package/dist/lang/test/model_serialization.spec.js +5 -5
  106. package/dist/lang/test/test-translator.js +9 -7
  107. package/dist/malloy.d.ts +3 -3
  108. package/dist/malloy.js +1 -1
  109. package/dist/model/index.d.ts +1 -1
  110. package/dist/model/index.js +2 -1
  111. package/dist/model/malloy_query.d.ts +24 -19
  112. package/dist/model/malloy_query.js +272 -244
  113. package/dist/model/malloy_types.d.ts +224 -205
  114. package/dist/model/malloy_types.js +19 -98
  115. package/dist/model/utils.d.ts +10 -3
  116. package/dist/model/utils.js +84 -219
  117. package/package.json +1 -1
  118. package/dist/lang/ast/types/comparison.d.ts +0 -11
  119. package/dist/lang/ast/types/comparison.js +0 -41
  120. package/dist/lang/ast/types/equality.d.ts +0 -7
  121. package/dist/lang/ast/types/equality.js +0 -37
@@ -1,4 +1,218 @@
1
1
  /// <reference types="node" />
2
+ /**
3
+ * Field computations are compiled into an expression tree of "Expr"
4
+ * type nodes. Each node is one of these three interfaces. The
5
+ * final type "Expr" is a union type of all known nodes, so
6
+ * that you can use "if (expr.node === 'nodeType')" instead of
7
+ * having to write discriminator functions for every node type.
8
+ */
9
+ export interface ExprLeaf {
10
+ node: string;
11
+ dataType?: AtomicFieldType;
12
+ sql?: string;
13
+ }
14
+ export interface ExprE extends ExprLeaf {
15
+ e: Expr;
16
+ }
17
+ export interface ExprOptionalE extends ExprLeaf {
18
+ e?: Expr;
19
+ }
20
+ export interface ExprWithKids extends ExprLeaf {
21
+ kids: Record<string, Expr | Expr[]>;
22
+ }
23
+ export type AnyExpr = ExprE | ExprOptionalE | ExprWithKids | ExprLeaf;
24
+ export declare function exprHasKids(e: AnyExpr): e is ExprWithKids;
25
+ export declare function exprHasE(e: AnyExpr): e is ExprE;
26
+ export declare function exprIsLeaf(e: AnyExpr): boolean;
27
+ export type Expr = BinaryExpr | UnaryExpr | FunctionCallNode | OutputFieldNode | FilterCondition | FilteredExpr | AggregateExpr | EmptyExpr | UngroupNode | FunctionParameterNode | SpreadExpr | AggregateOrderByNode | AggregateLimitNode | FieldnameNode | SourceReferenceNode | ParameterNode | NowNode | MeasureTimeExpr | TimeDeltaExpr | TimeTruncExpr | TimeExtractExpr | TypecastExpr | RegexMatchExpr | RegexLiteralNode | TimeLiteralNode | StringLiteralNode | NumberLiteralNode | BooleanLiteralNode | FunctionOrderBy | GenericSQLExpr | NullNode | PickExpr | ErrorNode;
28
+ interface HasDataType {
29
+ dataType: AtomicFieldType;
30
+ }
31
+ export type TypedExpr = Expr & HasDataType;
32
+ export type BinaryOperator = '+' | '-' | '*' | '%' | '/' | 'and' | 'or' | '=' | '!=' | '>' | '<' | '>=' | '<=' | 'coalesce' | 'like' | '!like';
33
+ export interface BinaryExpr extends ExprWithKids {
34
+ node: BinaryOperator;
35
+ kids: {
36
+ left: Expr;
37
+ right: Expr;
38
+ };
39
+ }
40
+ export type UnaryOperator = '()' | 'not' | 'unary-' | 'is-null' | 'is-not-null';
41
+ export interface UnaryExpr extends ExprE {
42
+ node: UnaryOperator;
43
+ e: Expr;
44
+ }
45
+ export interface FunctionCallNode extends ExprWithKids {
46
+ node: 'function_call';
47
+ name: string;
48
+ overload: FunctionOverloadDef;
49
+ expressionType: ExpressionType;
50
+ kids: {
51
+ args: Expr[];
52
+ orderBy?: FunctionOrderBy[];
53
+ };
54
+ limit?: number;
55
+ partitionBy?: string[];
56
+ structPath?: string[];
57
+ }
58
+ export interface OutputFieldNode extends ExprLeaf {
59
+ node: 'outputField';
60
+ name: string;
61
+ }
62
+ export interface FilterCondition extends ExprE {
63
+ node: 'filterCondition';
64
+ code: string;
65
+ expressionType: ExpressionType;
66
+ }
67
+ export interface FilteredExpr extends ExprWithKids {
68
+ node: 'filteredExpr';
69
+ kids: {
70
+ e: Expr;
71
+ filterList: FilterCondition[];
72
+ };
73
+ }
74
+ export type AggregateFunctionType = 'sum' | 'avg' | 'count' | 'distinct' | 'max' | 'min';
75
+ export interface AggregateExpr extends ExprE {
76
+ node: 'aggregate';
77
+ function: AggregateFunctionType;
78
+ structPath?: string[];
79
+ }
80
+ export declare function isAsymmetricExpr(f: Expr): f is AggregateExpr;
81
+ export interface EmptyExpr extends ExprLeaf {
82
+ node: '';
83
+ }
84
+ export interface UngroupNode extends ExprE {
85
+ node: 'all' | 'exclude';
86
+ fields?: string[];
87
+ }
88
+ export interface FunctionParameterNode extends ExprLeaf {
89
+ node: 'function_parameter';
90
+ name: string;
91
+ }
92
+ export interface AggregateOrderByNode extends ExprLeaf {
93
+ node: 'aggregate_order_by';
94
+ prefix?: string;
95
+ suffix?: string;
96
+ }
97
+ export interface AggregateLimitNode extends ExprLeaf {
98
+ node: 'aggregate_limit';
99
+ }
100
+ export interface SpreadExpr extends ExprE {
101
+ node: 'spread';
102
+ prefix: string | undefined;
103
+ suffix: string | undefined;
104
+ }
105
+ export interface FieldnameNode extends ExprLeaf {
106
+ node: 'field';
107
+ path: string[];
108
+ }
109
+ export interface SourceReferenceNode extends ExprLeaf {
110
+ node: 'source-reference';
111
+ path?: string[];
112
+ }
113
+ export interface ParameterNode extends ExprLeaf {
114
+ node: 'parameter';
115
+ path: string[];
116
+ }
117
+ export interface NowNode extends ExprLeaf {
118
+ node: 'now';
119
+ }
120
+ interface HasTimeValue {
121
+ dataType: TimeFieldType;
122
+ }
123
+ type TimeExpr = Expr & HasTimeValue;
124
+ export interface MeasureTimeExpr extends ExprWithKids {
125
+ node: 'timeDiff';
126
+ units: TimestampUnit;
127
+ kids: {
128
+ left: TimeExpr;
129
+ right: TimeExpr;
130
+ };
131
+ }
132
+ export interface TimeDeltaExpr extends ExprWithKids {
133
+ node: 'delta';
134
+ kids: {
135
+ base: TimeExpr;
136
+ delta: Expr;
137
+ };
138
+ op: '+' | '-';
139
+ units: TimestampUnit;
140
+ }
141
+ export interface TimeTruncExpr extends ExprE {
142
+ node: 'trunc';
143
+ e: TimeExpr;
144
+ units: TimestampUnit;
145
+ }
146
+ export interface TimeExtractExpr extends ExprE {
147
+ node: 'extract';
148
+ e: TimeExpr;
149
+ units: ExtractUnit;
150
+ }
151
+ export interface TypecastExpr extends ExprE {
152
+ node: 'cast';
153
+ safe: boolean;
154
+ e: Expr;
155
+ dstType: CastType | {
156
+ raw: string;
157
+ };
158
+ srcType?: AtomicFieldType;
159
+ }
160
+ export interface RegexMatchExpr extends ExprWithKids {
161
+ node: 'regexpMatch';
162
+ kids: {
163
+ expr: Expr;
164
+ regex: Expr;
165
+ };
166
+ }
167
+ export interface TimeLiteralNode extends ExprLeaf {
168
+ node: 'timeLiteral';
169
+ literal: string;
170
+ dataType: TimeFieldType;
171
+ timezone?: string;
172
+ }
173
+ export interface StringLiteralNode extends ExprLeaf {
174
+ node: 'stringLiteral';
175
+ literal: string;
176
+ }
177
+ export interface RegexLiteralNode extends ExprLeaf {
178
+ node: 'regexpLiteral';
179
+ literal: string;
180
+ }
181
+ export interface NumberLiteralNode extends ExprLeaf {
182
+ node: 'numberLiteral';
183
+ literal: string;
184
+ }
185
+ export interface BooleanLiteralNode extends ExprLeaf {
186
+ node: 'true' | 'false';
187
+ }
188
+ export interface ErrorNode extends ExprLeaf {
189
+ node: 'error';
190
+ message?: string;
191
+ }
192
+ export interface GenericSQLExpr extends ExprWithKids {
193
+ node: 'genericSQLExpr';
194
+ kids: {
195
+ args: Expr[];
196
+ };
197
+ src: string[];
198
+ }
199
+ export interface NullNode extends ExprLeaf {
200
+ node: 'null';
201
+ }
202
+ export interface PickExpr extends ExprWithKids {
203
+ node: 'pick';
204
+ kids: {
205
+ pickWhen: Expr[];
206
+ pickThen: Expr[];
207
+ pickElse: Expr;
208
+ };
209
+ }
210
+ export type ExpressionType = 'scalar' | 'aggregate' | 'scalar_analytic' | 'aggregate_analytic' | 'ungrouped_aggregate';
211
+ export interface Expression {
212
+ e?: Expr;
213
+ expressionType?: ExpressionType;
214
+ code?: string;
215
+ }
2
216
  type ConstantExpr = Expr;
3
217
  export interface Parameter {
4
218
  value: ConstantExpr | null;
@@ -69,7 +283,7 @@ export interface ResultMetadataDef {
69
283
  sourceField: string;
70
284
  sourceExpression?: string;
71
285
  sourceClasses: string[];
72
- filterList?: FilterExpression[];
286
+ filterList?: FilterCondition[];
73
287
  fieldKind: 'measure' | 'dimension' | 'struct';
74
288
  }
75
289
  export interface ResultStructMetadataDef extends ResultMetadataDef {
@@ -82,195 +296,6 @@ export interface ResultMetadata {
82
296
  export interface ResultStructMetadata {
83
297
  resultMetadata?: ResultStructMetadataDef;
84
298
  }
85
- export interface OutputFieldFragment {
86
- type: 'outputField';
87
- name: string;
88
- }
89
- export declare function isOutputFieldFragment(f: Fragment): f is OutputFieldFragment;
90
- export interface FilterFragment {
91
- type: 'filterExpression';
92
- filterList: FilterExpression[];
93
- e: Expr;
94
- }
95
- export declare function isFilterFragment(f: Fragment): f is FilterFragment;
96
- export declare function isDialectFragment(f: Fragment): f is DialectFragment;
97
- export type AggregateFunctionType = 'sum' | 'avg' | 'count' | 'count_distinct' | 'max' | 'min';
98
- export interface AggregateFragment {
99
- type: 'aggregate';
100
- function: AggregateFunctionType;
101
- e: Expr;
102
- structPath?: string[];
103
- }
104
- export declare function isAggregateFragment(f: Fragment): f is AggregateFragment;
105
- export declare function isAsymmetricFragment(f: Fragment): f is AggregateFragment;
106
- export interface UngroupFragment {
107
- type: 'all' | 'exclude';
108
- e: Expr;
109
- fields?: string[];
110
- }
111
- export declare function isUngroupFragment(f: Fragment): f is UngroupFragment;
112
- export interface FunctionParameterFragment {
113
- type: 'function_parameter';
114
- name: string;
115
- }
116
- export declare function isFunctionParameterFragment(f: Fragment): f is FunctionParameterFragment;
117
- export interface AggregateOrderByFragment {
118
- type: 'aggregate_order_by';
119
- prefix?: string;
120
- suffix?: string;
121
- }
122
- export interface AggregateLimitFragment {
123
- type: 'aggregate_limit';
124
- }
125
- export interface FunctionCallFragment {
126
- type: 'function_call';
127
- name: string;
128
- overload: FunctionOverloadDef;
129
- expressionType: ExpressionType;
130
- args: Expr[];
131
- orderBy?: FunctionOrderBy[];
132
- limit?: number;
133
- partitionBy?: string[];
134
- structPath?: string[];
135
- }
136
- export declare function isFunctionCallFragment(f: Fragment): f is FunctionCallFragment;
137
- export interface SQLExpressionFragment {
138
- type: 'sql_expression';
139
- e: Expr;
140
- }
141
- export declare function isSQLExpressionFragment(f: Fragment): f is SQLExpressionFragment;
142
- export interface SpreadFragment {
143
- type: 'spread';
144
- e: Expr;
145
- prefix: string | undefined;
146
- suffix: string | undefined;
147
- }
148
- export declare function isSpreadFragment(f: Fragment): f is SpreadFragment;
149
- export interface FieldFragment {
150
- type: 'field';
151
- path: string[];
152
- }
153
- export declare function isFieldFragment(f: Fragment): f is FieldFragment;
154
- export interface SqlStringFragment {
155
- type: 'sql-string';
156
- e: Expr;
157
- }
158
- export declare function isSqlStringFragment(f: Fragment): f is SqlStringFragment;
159
- export interface SourceReferenceFragment {
160
- type: 'source-reference';
161
- path?: string[];
162
- }
163
- export declare function isSourceReferenceFragment(f: Fragment): f is SourceReferenceFragment;
164
- export interface ParameterFragment {
165
- type: 'parameter';
166
- path: string[];
167
- }
168
- export declare function isParameterFragment(f: Fragment): f is ParameterFragment;
169
- export interface ApplyValueFragment {
170
- type: 'applyVal';
171
- }
172
- export declare function isApplyValue(f: Fragment): f is ApplyValueFragment;
173
- export interface ApplyFragment {
174
- type: 'apply';
175
- value: Expr;
176
- to: Expr;
177
- }
178
- export declare function isApplyFragment(f: Fragment): f is ApplyFragment;
179
- interface DialectFragmentBase {
180
- type: 'dialect';
181
- function: string;
182
- }
183
- export interface NowFragment extends DialectFragmentBase {
184
- function: 'now';
185
- }
186
- export interface TimeDiffFragment extends DialectFragmentBase {
187
- function: 'timeDiff';
188
- units: TimestampUnit;
189
- left: TimeValue;
190
- right: TimeValue;
191
- }
192
- export interface TimeDeltaFragment extends DialectFragmentBase {
193
- function: 'delta';
194
- base: TimeValue;
195
- op: '+' | '-';
196
- delta: Expr;
197
- units: TimestampUnit;
198
- }
199
- export interface TimeTruncFragment extends DialectFragmentBase {
200
- function: 'trunc';
201
- expr: TimeValue;
202
- units: TimestampUnit;
203
- }
204
- export interface TimeExtractFragment extends DialectFragmentBase {
205
- function: 'extract';
206
- expr: TimeValue;
207
- units: ExtractUnit;
208
- }
209
- export interface TypecastFragment extends DialectFragmentBase {
210
- function: 'cast';
211
- safe: boolean;
212
- expr: Expr;
213
- dstType: CastType | {
214
- raw: string;
215
- };
216
- srcType?: AtomicFieldType;
217
- }
218
- export interface RegexpMatchFragment extends DialectFragmentBase {
219
- function: 'regexpMatch';
220
- expr: Expr;
221
- regexp: Expr;
222
- }
223
- export interface DivModFragment extends DialectFragmentBase {
224
- function: 'div' | 'mod';
225
- numerator: Expr;
226
- denominator: Expr;
227
- }
228
- export interface TimeLiteralFragment extends DialectFragmentBase {
229
- function: 'timeLiteral';
230
- literal: string;
231
- literalType: TimeFieldType;
232
- timezone?: string;
233
- }
234
- export interface StringLiteralFragment extends DialectFragmentBase {
235
- function: 'stringLiteral';
236
- literal: string;
237
- }
238
- export interface RegexpLiteralFragment extends DialectFragmentBase {
239
- function: 'regexpLiteral';
240
- literal: string;
241
- }
242
- export interface NumberLiteralFragment extends DialectFragmentBase {
243
- function: 'numberLiteral';
244
- literal: string;
245
- }
246
- export type DialectFragment = DivModFragment | TimeLiteralFragment | NowFragment | TimeDeltaFragment | TimeDiffFragment | TimeTruncFragment | TypecastFragment | TimeExtractFragment | StringLiteralFragment | RegexpLiteralFragment | NumberLiteralFragment | RegexpMatchFragment;
247
- export type Fragment = string | ApplyFragment | ApplyValueFragment | FieldFragment | SourceReferenceFragment | SqlStringFragment | ParameterFragment | FilterFragment | OutputFieldFragment | AggregateFragment | UngroupFragment | DialectFragment | FunctionParameterFragment | AggregateOrderByFragment | AggregateLimitFragment | FunctionCallFragment | SQLExpressionFragment | SpreadFragment;
248
- export type Expr = Fragment[];
249
- export interface TypedValue {
250
- value: Expr;
251
- valueType: AtomicFieldType;
252
- }
253
- export interface TimeValue extends TypedValue {
254
- valueType: TimeFieldType;
255
- }
256
- type TagElement = Expr | string;
257
- /**
258
- * Return an Expr based on the string template, subsittutions can be
259
- * either strings, or other Exprs.
260
-
261
- * ```
262
- * units = "inches"
263
- * len: Expr = [ "something", "returning", "a length "]
264
- * computeExpr = mkExpr`MEASURE(${len} in ${units})`;
265
- * ```
266
- */
267
- export declare function mkExpr(src: TemplateStringsArray, ...exprs: TagElement[]): Expr;
268
- export type ExpressionType = 'scalar' | 'aggregate' | 'scalar_analytic' | 'aggregate_analytic' | 'ungrouped_aggregate';
269
- export interface Expression {
270
- e?: Expr;
271
- expressionType?: ExpressionType;
272
- code?: string;
273
- }
274
299
  export declare function expressionIsScalar(e: ExpressionType | undefined): boolean;
275
300
  export declare function expressionIsAggregate(e: ExpressionType | undefined): boolean;
276
301
  export declare function expressionIsUngroupedAggregate(e: ExpressionType | undefined): boolean;
@@ -381,12 +406,12 @@ export interface OrderBy {
381
406
  field: string | number;
382
407
  dir?: 'asc' | 'desc';
383
408
  }
384
- export interface FunctionOrderByExpression {
385
- e: Expr;
409
+ export interface FunctionOrderByExpression extends ExprE {
410
+ node: 'functionOrderBy';
386
411
  dir?: 'asc' | 'desc';
387
412
  }
388
- export interface FunctionOrderByDefaultExpression {
389
- e: undefined;
413
+ export interface FunctionOrderByDefaultExpression extends ExprLeaf {
414
+ node: 'functionDefaultOrderBy';
390
415
  dir: 'asc' | 'desc';
391
416
  }
392
417
  export type FunctionOrderBy = FunctionOrderByExpression | FunctionOrderByDefaultExpression;
@@ -415,7 +440,7 @@ export interface JoinedStruct {
415
440
  as: string;
416
441
  }
417
442
  export interface Filtered {
418
- filterList?: FilterExpression[];
443
+ filterList?: FilterCondition[];
419
444
  }
420
445
  /**
421
446
  * First element in a pipeline might be a reference to a turtle
@@ -512,11 +537,11 @@ export type StructRelationship = {
512
537
  fieldName: string;
513
538
  isArray: boolean;
514
539
  };
515
- export interface SQLFragment {
540
+ export interface SQLStringSegment {
516
541
  sql: string;
517
542
  }
518
- export type SQLPhrase = Query | SQLFragment;
519
- export declare function isSQLFragment(f: SQLPhrase): f is SQLFragment;
543
+ export type SQLPhrase = Query | SQLStringSegment;
544
+ export declare function isSQLFragment(f: SQLPhrase): f is SQLStringSegment;
520
545
  /**
521
546
  * A source reference to an SQL block. The compiler uses these to request
522
547
  * an SQLBlock with it's schema and structdef defined. Use the factory
@@ -643,12 +668,6 @@ export interface RefToField {
643
668
  export type FieldRefOrDef = FieldDef | RefToField;
644
669
  /** which field is the primary key in this struct */
645
670
  export type PrimaryKeyRef = string;
646
- /** filters */
647
- export interface FilterExpression {
648
- expression: Expr;
649
- code: string;
650
- expressionType: ExpressionType;
651
- }
652
671
  /** Get the output name for a NamedObject */
653
672
  export declare function getIdentifier(n: AliasedName): string;
654
673
  export type NamedModelObject = StructDef | NamedQuery | FunctionDef | ConnectionDef;
@@ -698,7 +717,7 @@ export type MalloyQueryData = {
698
717
  };
699
718
  export interface DrillSource {
700
719
  sourceExplore: string;
701
- sourceFilters?: FilterExpression[];
720
+ sourceFilters?: FilterCondition[];
702
721
  }
703
722
  export interface CompiledQuery extends DrillSource {
704
723
  structs: StructDef[];
@@ -22,108 +22,29 @@
22
22
  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
23
  */
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
- exports.isIndexSegment = exports.isRawSegment = exports.isSamplingEnable = exports.isSamplingPercent = exports.isSamplingRows = exports.isQuerySegment = exports.isProjectSegment = exports.isPartialSegment = exports.isReduceSegment = exports.structHasErrors = exports.segmentHasErrors = exports.refIsStructDef = exports.isByExpression = exports.isByName = exports.ValueType = exports.isExtractUnit = exports.isTimestampUnit = exports.isDateUnit = exports.FieldIsIntrinsic = exports.isCastType = exports.isAtomicFieldType = exports.isTimeFieldType = exports.hasExpression = exports.maxOfExpressionTypes = exports.maxExpressionType = exports.isExpressionTypeLEQ = exports.expressionIsAnalytic = exports.expressionIsCalculation = exports.expressionInvolvesAggregate = exports.expressionIsUngroupedAggregate = exports.expressionIsAggregate = exports.expressionIsScalar = exports.mkExpr = exports.isApplyFragment = exports.isApplyValue = exports.isParameterFragment = exports.isSourceReferenceFragment = exports.isSqlStringFragment = exports.isFieldFragment = exports.isSpreadFragment = exports.isSQLExpressionFragment = exports.isFunctionCallFragment = exports.isFunctionParameterFragment = exports.isUngroupFragment = exports.isAsymmetricFragment = exports.isAggregateFragment = exports.isDialectFragment = exports.isFilterFragment = exports.isOutputFieldFragment = exports.paramHasValue = void 0;
26
- exports.isValueDate = exports.isValueTimestamp = exports.isValueBoolean = exports.isValueNumber = exports.isValueString = exports.isMeasureLike = exports.getPhysicalFields = exports.getDimensions = exports.isPhysical = exports.isDimensional = exports.isAtomicField = exports.isTurtleDef = exports.getIdentifier = exports.isFieldStructDef = exports.isFieldTimeBased = exports.isFieldTypeDef = exports.isSQLBlockStruct = exports.mergeEvalSpaces = exports.isLiteral = exports.isSQLFragment = exports.isJoinOn = exports.isMatrixOperation = void 0;
25
+ exports.isDimensional = exports.isAtomicField = exports.isTurtleDef = exports.getIdentifier = exports.isFieldStructDef = exports.isFieldTimeBased = exports.isFieldTypeDef = exports.isSQLBlockStruct = exports.mergeEvalSpaces = exports.isLiteral = exports.isSQLFragment = exports.isJoinOn = exports.isMatrixOperation = exports.isIndexSegment = exports.isRawSegment = exports.isSamplingEnable = exports.isSamplingPercent = exports.isSamplingRows = exports.isQuerySegment = exports.isProjectSegment = exports.isPartialSegment = exports.isReduceSegment = exports.structHasErrors = exports.segmentHasErrors = exports.refIsStructDef = exports.isByExpression = exports.isByName = exports.ValueType = exports.isExtractUnit = exports.isTimestampUnit = exports.isDateUnit = exports.FieldIsIntrinsic = exports.isCastType = exports.isAtomicFieldType = exports.isTimeFieldType = exports.hasExpression = exports.maxOfExpressionTypes = exports.maxExpressionType = exports.isExpressionTypeLEQ = exports.expressionIsAnalytic = exports.expressionIsCalculation = exports.expressionInvolvesAggregate = exports.expressionIsUngroupedAggregate = exports.expressionIsAggregate = exports.expressionIsScalar = exports.paramHasValue = exports.isAsymmetricExpr = exports.exprIsLeaf = exports.exprHasE = exports.exprHasKids = void 0;
26
+ exports.isValueDate = exports.isValueTimestamp = exports.isValueBoolean = exports.isValueNumber = exports.isValueString = exports.isMeasureLike = exports.getPhysicalFields = exports.getDimensions = exports.isPhysical = void 0;
27
+ function exprHasKids(e) {
28
+ return 'kids' in e;
29
+ }
30
+ exports.exprHasKids = exprHasKids;
31
+ function exprHasE(e) {
32
+ return 'e' in e;
33
+ }
34
+ exports.exprHasE = exprHasE;
35
+ function exprIsLeaf(e) {
36
+ return !(exprHasKids(e) || exprHasE(e));
37
+ }
38
+ exports.exprIsLeaf = exprIsLeaf;
39
+ function isAsymmetricExpr(f) {
40
+ return (f.node === 'aggregate' &&
41
+ ['sum', 'avg', 'count', 'distinct'].includes(f.function));
42
+ }
43
+ exports.isAsymmetricExpr = isAsymmetricExpr;
27
44
  function paramHasValue(p) {
28
45
  return p.value !== null;
29
46
  }
30
47
  exports.paramHasValue = paramHasValue;
31
- function isOutputFieldFragment(f) {
32
- return (f === null || f === void 0 ? void 0 : f.type) === 'outputField';
33
- }
34
- exports.isOutputFieldFragment = isOutputFieldFragment;
35
- function isFilterFragment(f) {
36
- return (f === null || f === void 0 ? void 0 : f.type) === 'filterExpression';
37
- }
38
- exports.isFilterFragment = isFilterFragment;
39
- function isDialectFragment(f) {
40
- return (f === null || f === void 0 ? void 0 : f.type) === 'dialect';
41
- }
42
- exports.isDialectFragment = isDialectFragment;
43
- function isAggregateFragment(f) {
44
- return (f === null || f === void 0 ? void 0 : f.type) === 'aggregate';
45
- }
46
- exports.isAggregateFragment = isAggregateFragment;
47
- function isAsymmetricFragment(f) {
48
- return isAggregateFragment(f) && ['sum', 'avg', 'count'].includes(f.function);
49
- }
50
- exports.isAsymmetricFragment = isAsymmetricFragment;
51
- function isUngroupFragment(f) {
52
- const ftype = f === null || f === void 0 ? void 0 : f.type;
53
- return ftype === 'all' || ftype === 'exclude';
54
- }
55
- exports.isUngroupFragment = isUngroupFragment;
56
- function isFunctionParameterFragment(f) {
57
- return (f === null || f === void 0 ? void 0 : f.type) === 'function_parameter';
58
- }
59
- exports.isFunctionParameterFragment = isFunctionParameterFragment;
60
- function isFunctionCallFragment(f) {
61
- return (f === null || f === void 0 ? void 0 : f.type) === 'function_call';
62
- }
63
- exports.isFunctionCallFragment = isFunctionCallFragment;
64
- function isSQLExpressionFragment(f) {
65
- return (f === null || f === void 0 ? void 0 : f.type) === 'sql_expression';
66
- }
67
- exports.isSQLExpressionFragment = isSQLExpressionFragment;
68
- function isSpreadFragment(f) {
69
- return (f === null || f === void 0 ? void 0 : f.type) === 'spread';
70
- }
71
- exports.isSpreadFragment = isSpreadFragment;
72
- function isFieldFragment(f) {
73
- return (f === null || f === void 0 ? void 0 : f.type) === 'field';
74
- }
75
- exports.isFieldFragment = isFieldFragment;
76
- function isSqlStringFragment(f) {
77
- return (f === null || f === void 0 ? void 0 : f.type) === 'sql-string';
78
- }
79
- exports.isSqlStringFragment = isSqlStringFragment;
80
- function isSourceReferenceFragment(f) {
81
- return (f === null || f === void 0 ? void 0 : f.type) === 'source-reference';
82
- }
83
- exports.isSourceReferenceFragment = isSourceReferenceFragment;
84
- function isParameterFragment(f) {
85
- return (f === null || f === void 0 ? void 0 : f.type) === 'parameter';
86
- }
87
- exports.isParameterFragment = isParameterFragment;
88
- function isApplyValue(f) {
89
- return (f === null || f === void 0 ? void 0 : f.type) === 'applyVal';
90
- }
91
- exports.isApplyValue = isApplyValue;
92
- function isApplyFragment(f) {
93
- return (f === null || f === void 0 ? void 0 : f.type) === 'apply';
94
- }
95
- exports.isApplyFragment = isApplyFragment;
96
- /**
97
- * Return an Expr based on the string template, subsittutions can be
98
- * either strings, or other Exprs.
99
-
100
- * ```
101
- * units = "inches"
102
- * len: Expr = [ "something", "returning", "a length "]
103
- * computeExpr = mkExpr`MEASURE(${len} in ${units})`;
104
- * ```
105
- */
106
- function mkExpr(src, ...exprs) {
107
- const ret = [];
108
- let index;
109
- for (index = 0; index < exprs.length; index++) {
110
- const el = exprs[index];
111
- if (src[index].length > 0) {
112
- ret.push(src[index]);
113
- }
114
- if (typeof el === 'string') {
115
- ret.push(el);
116
- }
117
- else {
118
- ret.push(...el);
119
- }
120
- }
121
- if (src[index].length > 0) {
122
- ret.push(src[index]);
123
- }
124
- return ret;
125
- }
126
- exports.mkExpr = mkExpr;
127
48
  function expressionIsScalar(e) {
128
49
  return e === undefined || e === 'scalar';
129
50
  }
@@ -1,4 +1,4 @@
1
- import { Expr, Fragment } from './malloy_types';
1
+ import { Expr, GenericSQLExpr } from './malloy_types';
2
2
  /** simple indent function */
3
3
  export declare function indent(s: string): string;
4
4
  /**
@@ -21,7 +21,14 @@ export declare class AndChain {
21
21
  sql(whereOrHaving?: 'where' | 'having'): string;
22
22
  }
23
23
  export declare function generateHash(input: string): string;
24
- export declare function exprMap(expr: Expr, func: (fragment: Fragment) => Expr): Expr;
25
- export declare function exprWalk(expr: Expr, func: (fragment: Fragment) => void): void;
26
24
  export declare function joinWith<T>(els: T[][], sep: T): T[];
27
25
  export declare function range(start: number, end: number): number[];
26
+ export declare function exprKids(eNode: Expr): IterableIterator<Expr>;
27
+ export declare function exprWalk(eNode: Expr, order?: 'pre' | 'post'): IterableIterator<Expr>;
28
+ export declare function exprMap(eNode: Expr, mapFunc: (e: Expr) => Expr): Expr;
29
+ export type SQLExprElement = string | Expr;
30
+ /**
31
+ * Take a mixed array of strings and Expr and turn it into an SQLExpr
32
+ * expression node.
33
+ */
34
+ export declare function composeSQLExpr(from: SQLExprElement[]): GenericSQLExpr;