Skip to content

Commit c4de0e4

Browse files
committed
Remove validation logics from PPLFuncImpTable
Signed-off-by: Yuanchun Shen <yuanchu@amazon.com>
1 parent 7f52976 commit c4de0e4

3 files changed

Lines changed: 167 additions & 356 deletions

File tree

core/src/main/java/org/opensearch/sql/calcite/CalciteRexNodeVisitor.java

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -454,26 +454,8 @@ public RexNode visitWindowFunction(WindowFunction node, CalcitePlanContext conte
454454
(arguments.isEmpty() || arguments.size() == 1)
455455
? Collections.emptyList()
456456
: arguments.subList(1, arguments.size());
457-
List<RexNode> nodes =
458-
PPLFuncImpTable.INSTANCE.validateAggFunctionSignature(
459-
functionName, field, args, context.rexBuilder);
460-
return nodes != null
461-
? PlanUtils.makeOver(
462-
context,
463-
functionName,
464-
nodes.getFirst(),
465-
nodes.size() <= 1 ? Collections.emptyList() : nodes.subList(1, nodes.size()),
466-
partitions,
467-
List.of(),
468-
node.getWindowFrame())
469-
: PlanUtils.makeOver(
470-
context,
471-
functionName,
472-
field,
473-
args,
474-
partitions,
475-
List.of(),
476-
node.getWindowFrame());
457+
return PlanUtils.makeOver(
458+
context, functionName, field, args, partitions, List.of(), node.getWindowFrame());
477459
})
478460
.orElseThrow(
479461
() ->

core/src/main/java/org/opensearch/sql/calcite/utils/PPLOperandTypes.java

Lines changed: 112 additions & 139 deletions
Original file line numberDiff line numberDiff line change
@@ -62,41 +62,34 @@ private PPLOperandTypes() {}
6262

6363
public static final UDFOperandMetadata NONE = UDFOperandMetadata.wrap(OperandTypes.family());
6464
public static final UDFOperandMetadata OPTIONAL_ANY =
65-
UDFOperandMetadata.wrap(
66-
(CompositeOperandTypeChecker)
67-
OperandTypes.family(SqlTypeFamily.ANY).or(OperandTypes.family()));
65+
UDFOperandMetadata.wrap(OperandTypes.family(SqlTypeFamily.ANY).or(OperandTypes.family()));
66+
6867
public static final UDFOperandMetadata OPTIONAL_INTEGER =
69-
UDFOperandMetadata.wrap(
70-
(CompositeOperandTypeChecker) OperandTypes.INTEGER.or(OperandTypes.family()));
71-
public static final UDFOperandMetadata STRING =
72-
UDFOperandMetadata.wrap((FamilyOperandTypeChecker) OperandTypes.CHARACTER);
73-
public static final UDFOperandMetadata INTEGER =
74-
UDFOperandMetadata.wrap((FamilyOperandTypeChecker) OperandTypes.INTEGER);
75-
public static final UDFOperandMetadata NUMERIC =
76-
UDFOperandMetadata.wrap((FamilyOperandTypeChecker) OperandTypes.NUMERIC);
68+
UDFOperandMetadata.wrap(OperandTypes.INTEGER.or(OperandTypes.family()));
69+
public static final UDFOperandMetadata STRING = UDFOperandMetadata.wrap(OperandTypes.CHARACTER);
70+
public static final UDFOperandMetadata INTEGER = UDFOperandMetadata.wrap(OperandTypes.INTEGER);
71+
public static final UDFOperandMetadata NUMERIC = UDFOperandMetadata.wrap(OperandTypes.NUMERIC);
7772

7873
public static final UDFOperandMetadata NUMERIC_OPTIONAL_STRING =
7974
UDFOperandMetadata.wrap(
80-
(CompositeOperandTypeChecker)
81-
OperandTypes.NUMERIC.or(
82-
OperandTypes.family(SqlTypeFamily.NUMERIC, SqlTypeFamily.CHARACTER)));
75+
OperandTypes.NUMERIC.or(
76+
OperandTypes.family(SqlTypeFamily.NUMERIC, SqlTypeFamily.CHARACTER)));
8377

8478
public static final UDFOperandMetadata ANY_OPTIONAL_INTEGER =
8579
UDFOperandMetadata.wrap(
86-
(CompositeOperandTypeChecker)
87-
OperandTypes.ANY.or(OperandTypes.family(SqlTypeFamily.ANY, SqlTypeFamily.INTEGER)));
80+
OperandTypes.ANY.or(OperandTypes.family(SqlTypeFamily.ANY, SqlTypeFamily.INTEGER)));
8881
public static final SqlOperandTypeChecker ANY_OPTIONAL_TIMESTAMP =
8982
OperandTypes.ANY.or(OperandTypes.family(SqlTypeFamily.ANY, SqlTypeFamily.TIMESTAMP));
9083
public static final UDFOperandMetadata INTEGER_INTEGER =
91-
UDFOperandMetadata.wrap((FamilyOperandTypeChecker) OperandTypes.INTEGER_INTEGER);
84+
UDFOperandMetadata.wrap(OperandTypes.INTEGER_INTEGER);
9285
public static final UDFOperandMetadata STRING_STRING =
93-
UDFOperandMetadata.wrap((FamilyOperandTypeChecker) OperandTypes.CHARACTER_CHARACTER);
86+
UDFOperandMetadata.wrap(OperandTypes.CHARACTER_CHARACTER);
9487
public static final UDFOperandMetadata STRING_STRING_STRING =
9588
UDFOperandMetadata.wrap(
9689
OperandTypes.family(
9790
SqlTypeFamily.CHARACTER, SqlTypeFamily.CHARACTER, SqlTypeFamily.CHARACTER));
9891
public static final UDFOperandMetadata NUMERIC_NUMERIC =
99-
UDFOperandMetadata.wrap((FamilyOperandTypeChecker) OperandTypes.NUMERIC_NUMERIC);
92+
UDFOperandMetadata.wrap(OperandTypes.NUMERIC_NUMERIC);
10093
public static final UDFOperandMetadata STRING_INTEGER =
10194
UDFOperandMetadata.wrap(OperandTypes.family(SqlTypeFamily.CHARACTER, SqlTypeFamily.INTEGER));
10295
public static final UDFOperandMetadata STRING_STRING_INTEGER =
@@ -106,9 +99,8 @@ private PPLOperandTypes() {}
10699

107100
public static final UDFOperandMetadata STRING_OR_STRING_INTEGER =
108101
UDFOperandMetadata.wrap(
109-
(CompositeOperandTypeChecker)
110-
OperandTypes.family(SqlTypeFamily.CHARACTER)
111-
.or(OperandTypes.family(SqlTypeFamily.CHARACTER, SqlTypeFamily.INTEGER)));
102+
OperandTypes.family(SqlTypeFamily.CHARACTER)
103+
.or(OperandTypes.family(SqlTypeFamily.CHARACTER, SqlTypeFamily.INTEGER)));
112104

113105
public static final UDFOperandMetadata STRING_STRING_INTEGER_INTEGER =
114106
UDFOperandMetadata.wrap(
@@ -120,9 +112,8 @@ private PPLOperandTypes() {}
120112

121113
public static final UDFOperandMetadata NUMERIC_STRING_OR_STRING_STRING =
122114
UDFOperandMetadata.wrap(
123-
(CompositeOperandTypeChecker)
124-
(OperandTypes.family(SqlTypeFamily.NUMERIC, SqlTypeFamily.STRING))
125-
.or(OperandTypes.family(SqlTypeFamily.STRING, SqlTypeFamily.STRING)));
115+
(OperandTypes.family(SqlTypeFamily.NUMERIC, SqlTypeFamily.STRING))
116+
.or(OperandTypes.family(SqlTypeFamily.STRING, SqlTypeFamily.STRING)));
126117

127118
public static final UDFOperandMetadata NUMERIC_NUMERIC_OPTIONAL_NUMERIC_SYMBOL =
128119
UDFOperandMetadata.wrap(
@@ -146,61 +137,61 @@ private PPLOperandTypes() {}
146137

147138
public static final UDFOperandMetadata WIDTH_BUCKET_OPERAND =
148139
UDFOperandMetadata.wrap(
149-
(CompositeOperandTypeChecker)
150-
// 1. Numeric fields: bin age span=10
151-
OperandTypes.family(
152-
SqlTypeFamily.NUMERIC,
140+
141+
// 1. Numeric fields: bin age span=10
142+
OperandTypes.family(
143+
SqlTypeFamily.NUMERIC,
144+
SqlTypeFamily.INTEGER,
145+
SqlTypeFamily.NUMERIC,
146+
SqlTypeFamily.NUMERIC)
147+
// 2. Timestamp fields with OpenSearch type system
148+
// Used in: Production + Integration tests (CalciteBinCommandIT)
149+
.or(
150+
OperandTypes.family(
151+
SqlTypeFamily.TIMESTAMP,
153152
SqlTypeFamily.INTEGER,
154-
SqlTypeFamily.NUMERIC,
155-
SqlTypeFamily.NUMERIC)
156-
// 2. Timestamp fields with OpenSearch type system
157-
// Used in: Production + Integration tests (CalciteBinCommandIT)
158-
.or(
159-
OperandTypes.family(
160-
SqlTypeFamily.TIMESTAMP,
161-
SqlTypeFamily.INTEGER,
162-
SqlTypeFamily.CHARACTER, // TIMESTAMP - TIMESTAMP = INTERVAL (as STRING)
163-
SqlTypeFamily.TIMESTAMP))
164-
// 3. Timestamp fields with Calcite SCOTT schema
165-
// Used in: Unit tests (CalcitePPLBinTest)
166-
.or(
167-
OperandTypes.family(
168-
SqlTypeFamily.TIMESTAMP,
169-
SqlTypeFamily.INTEGER,
170-
SqlTypeFamily.TIMESTAMP, // TIMESTAMP - TIMESTAMP = TIMESTAMP
171-
SqlTypeFamily.TIMESTAMP))
172-
// DATE field with OpenSearch type system
173-
// Used in: Production + Integration tests (CalciteBinCommandIT)
174-
.or(
175-
OperandTypes.family(
176-
SqlTypeFamily.DATE,
177-
SqlTypeFamily.INTEGER,
178-
SqlTypeFamily.CHARACTER, // DATE - DATE = INTERVAL (as STRING)
179-
SqlTypeFamily.DATE))
180-
// DATE field with Calcite SCOTT schema
181-
// Used in: Unit tests (CalcitePPLBinTest)
182-
.or(
183-
OperandTypes.family(
184-
SqlTypeFamily.DATE,
185-
SqlTypeFamily.INTEGER,
186-
SqlTypeFamily.DATE, // DATE - DATE = DATE
187-
SqlTypeFamily.DATE))
188-
// TIME field with OpenSearch type system
189-
// Used in: Production + Integration tests (CalciteBinCommandIT)
190-
.or(
191-
OperandTypes.family(
192-
SqlTypeFamily.TIME,
193-
SqlTypeFamily.INTEGER,
194-
SqlTypeFamily.CHARACTER, // TIME - TIME = INTERVAL (as STRING)
195-
SqlTypeFamily.TIME))
196-
// TIME field with Calcite SCOTT schema
197-
// Used in: Unit tests (CalcitePPLBinTest)
198-
.or(
199-
OperandTypes.family(
200-
SqlTypeFamily.TIME,
201-
SqlTypeFamily.INTEGER,
202-
SqlTypeFamily.TIME, // TIME - TIME = TIME
203-
SqlTypeFamily.TIME)));
153+
SqlTypeFamily.CHARACTER, // TIMESTAMP - TIMESTAMP = INTERVAL (as STRING)
154+
SqlTypeFamily.TIMESTAMP))
155+
// 3. Timestamp fields with Calcite SCOTT schema
156+
// Used in: Unit tests (CalcitePPLBinTest)
157+
.or(
158+
OperandTypes.family(
159+
SqlTypeFamily.TIMESTAMP,
160+
SqlTypeFamily.INTEGER,
161+
SqlTypeFamily.TIMESTAMP, // TIMESTAMP - TIMESTAMP = TIMESTAMP
162+
SqlTypeFamily.TIMESTAMP))
163+
// DATE field with OpenSearch type system
164+
// Used in: Production + Integration tests (CalciteBinCommandIT)
165+
.or(
166+
OperandTypes.family(
167+
SqlTypeFamily.DATE,
168+
SqlTypeFamily.INTEGER,
169+
SqlTypeFamily.CHARACTER, // DATE - DATE = INTERVAL (as STRING)
170+
SqlTypeFamily.DATE))
171+
// DATE field with Calcite SCOTT schema
172+
// Used in: Unit tests (CalcitePPLBinTest)
173+
.or(
174+
OperandTypes.family(
175+
SqlTypeFamily.DATE,
176+
SqlTypeFamily.INTEGER,
177+
SqlTypeFamily.DATE, // DATE - DATE = DATE
178+
SqlTypeFamily.DATE))
179+
// TIME field with OpenSearch type system
180+
// Used in: Production + Integration tests (CalciteBinCommandIT)
181+
.or(
182+
OperandTypes.family(
183+
SqlTypeFamily.TIME,
184+
SqlTypeFamily.INTEGER,
185+
SqlTypeFamily.CHARACTER, // TIME - TIME = INTERVAL (as STRING)
186+
SqlTypeFamily.TIME))
187+
// TIME field with Calcite SCOTT schema
188+
// Used in: Unit tests (CalcitePPLBinTest)
189+
.or(
190+
OperandTypes.family(
191+
SqlTypeFamily.TIME,
192+
SqlTypeFamily.INTEGER,
193+
SqlTypeFamily.TIME, // TIME - TIME = TIME
194+
SqlTypeFamily.TIME)));
204195

205196
public static final UDFOperandMetadata NUMERIC_NUMERIC_NUMERIC_NUMERIC_NUMERIC =
206197
UDFOperandMetadata.wrap(
@@ -212,103 +203,85 @@ private PPLOperandTypes() {}
212203
SqlTypeFamily.NUMERIC));
213204
public static final UDFOperandMetadata STRING_OR_INTEGER_INTEGER_INTEGER =
214205
UDFOperandMetadata.wrap(
215-
(CompositeOperandTypeChecker)
216-
OperandTypes.family(
217-
SqlTypeFamily.CHARACTER, SqlTypeFamily.INTEGER, SqlTypeFamily.INTEGER)
218-
.or(
219-
OperandTypes.family(
220-
SqlTypeFamily.INTEGER, SqlTypeFamily.INTEGER, SqlTypeFamily.INTEGER)));
206+
OperandTypes.family(SqlTypeFamily.CHARACTER, SqlTypeFamily.INTEGER, SqlTypeFamily.INTEGER)
207+
.or(
208+
OperandTypes.family(
209+
SqlTypeFamily.INTEGER, SqlTypeFamily.INTEGER, SqlTypeFamily.INTEGER)));
221210

222211
public static final UDFOperandMetadata OPTIONAL_DATE_OR_TIMESTAMP_OR_NUMERIC =
223212
UDFOperandMetadata.wrap(
224-
(CompositeOperandTypeChecker)
225-
OperandTypes.DATETIME.or(OperandTypes.NUMERIC).or(OperandTypes.family()));
213+
OperandTypes.DATETIME.or(OperandTypes.NUMERIC).or(OperandTypes.family()));
226214

227215
public static final UDFOperandMetadata DATETIME_OR_STRING =
228-
UDFOperandMetadata.wrap(
229-
(CompositeOperandTypeChecker) OperandTypes.DATETIME.or(OperandTypes.CHARACTER));
216+
UDFOperandMetadata.wrap(OperandTypes.DATETIME.or(OperandTypes.CHARACTER));
230217
public static final UDFOperandMetadata TIME_OR_TIMESTAMP_OR_STRING =
231218
UDFOperandMetadata.wrap(
232-
(CompositeOperandTypeChecker)
233-
OperandTypes.CHARACTER.or(OperandTypes.TIME).or(OperandTypes.TIMESTAMP));
219+
OperandTypes.CHARACTER.or(OperandTypes.TIME).or(OperandTypes.TIMESTAMP));
234220
public static final UDFOperandMetadata DATE_OR_TIMESTAMP_OR_STRING =
235-
UDFOperandMetadata.wrap(
236-
(CompositeOperandTypeChecker) OperandTypes.DATE_OR_TIMESTAMP.or(OperandTypes.CHARACTER));
221+
UDFOperandMetadata.wrap(OperandTypes.DATE_OR_TIMESTAMP.or(OperandTypes.CHARACTER));
237222
public static final UDFOperandMetadata DATETIME_OR_STRING_OR_INTEGER =
238223
UDFOperandMetadata.wrap(
239-
(CompositeOperandTypeChecker)
240-
OperandTypes.DATETIME.or(OperandTypes.CHARACTER).or(OperandTypes.INTEGER));
224+
OperandTypes.DATETIME.or(OperandTypes.CHARACTER).or(OperandTypes.INTEGER));
241225

242226
public static final UDFOperandMetadata DATETIME_OPTIONAL_INTEGER =
243227
UDFOperandMetadata.wrap(
244-
(CompositeOperandTypeChecker)
245-
OperandTypes.DATETIME.or(
246-
OperandTypes.family(SqlTypeFamily.DATETIME, SqlTypeFamily.INTEGER)));
228+
OperandTypes.DATETIME.or(
229+
OperandTypes.family(SqlTypeFamily.DATETIME, SqlTypeFamily.INTEGER)));
247230
public static final UDFOperandMetadata ANY_DATETIME_OR_STRING =
248231
UDFOperandMetadata.wrap(
249-
(CompositeOperandTypeChecker)
250-
OperandTypes.family(SqlTypeFamily.ANY)
251-
.or(OperandTypes.family(SqlTypeFamily.ANY, SqlTypeFamily.DATETIME))
252-
.or(OperandTypes.family(SqlTypeFamily.ANY, SqlTypeFamily.STRING)));
232+
OperandTypes.family(SqlTypeFamily.ANY)
233+
.or(OperandTypes.family(SqlTypeFamily.ANY, SqlTypeFamily.DATETIME))
234+
.or(OperandTypes.family(SqlTypeFamily.ANY, SqlTypeFamily.STRING)));
253235

254236
public static final UDFOperandMetadata DATETIME_DATETIME =
255237
UDFOperandMetadata.wrap(OperandTypes.family(SqlTypeFamily.DATETIME, SqlTypeFamily.DATETIME));
256238
public static final UDFOperandMetadata DATETIME_OR_STRING_STRING =
257239
UDFOperandMetadata.wrap(
258-
(CompositeOperandTypeChecker)
259-
OperandTypes.family(SqlTypeFamily.DATETIME, SqlTypeFamily.CHARACTER)
260-
.or(OperandTypes.CHARACTER_CHARACTER));
240+
OperandTypes.family(SqlTypeFamily.DATETIME, SqlTypeFamily.CHARACTER)
241+
.or(OperandTypes.CHARACTER_CHARACTER));
261242
public static final UDFOperandMetadata DATETIME_OR_STRING_DATETIME_OR_STRING =
262243
UDFOperandMetadata.wrap(
263-
(CompositeOperandTypeChecker)
264-
OperandTypes.CHARACTER_CHARACTER
265-
.or(OperandTypes.family(SqlTypeFamily.DATETIME, SqlTypeFamily.DATETIME))
266-
.or(OperandTypes.family(SqlTypeFamily.DATETIME, SqlTypeFamily.CHARACTER))
267-
.or(OperandTypes.family(SqlTypeFamily.CHARACTER, SqlTypeFamily.DATETIME)));
244+
OperandTypes.CHARACTER_CHARACTER
245+
.or(OperandTypes.family(SqlTypeFamily.DATETIME, SqlTypeFamily.DATETIME))
246+
.or(OperandTypes.family(SqlTypeFamily.DATETIME, SqlTypeFamily.CHARACTER))
247+
.or(OperandTypes.family(SqlTypeFamily.CHARACTER, SqlTypeFamily.DATETIME)));
268248
public static final UDFOperandMetadata STRING_TIMESTAMP =
269249
UDFOperandMetadata.wrap(
270250
OperandTypes.family(SqlTypeFamily.CHARACTER, SqlTypeFamily.TIMESTAMP));
271251
public static final UDFOperandMetadata STRING_DATETIME =
272252
UDFOperandMetadata.wrap(OperandTypes.family(SqlTypeFamily.CHARACTER, SqlTypeFamily.DATETIME));
273253
public static final UDFOperandMetadata DATETIME_INTERVAL =
274-
UDFOperandMetadata.wrap((FamilyOperandTypeChecker) OperandTypes.DATETIME_INTERVAL);
254+
UDFOperandMetadata.wrap(OperandTypes.DATETIME_INTERVAL);
275255
public static final UDFOperandMetadata TIME_TIME =
276256
UDFOperandMetadata.wrap(OperandTypes.family(SqlTypeFamily.TIME, SqlTypeFamily.TIME));
277257

278258
public static final UDFOperandMetadata TIMESTAMP_OR_STRING_STRING_STRING =
279259
UDFOperandMetadata.wrap(
280-
(CompositeOperandTypeChecker)
281-
OperandTypes.family(
282-
SqlTypeFamily.TIMESTAMP, SqlTypeFamily.CHARACTER, SqlTypeFamily.CHARACTER)
283-
.or(
284-
OperandTypes.family(
285-
SqlTypeFamily.CHARACTER,
286-
SqlTypeFamily.CHARACTER,
287-
SqlTypeFamily.CHARACTER)));
260+
OperandTypes.family(
261+
SqlTypeFamily.TIMESTAMP, SqlTypeFamily.CHARACTER, SqlTypeFamily.CHARACTER)
262+
.or(
263+
OperandTypes.family(
264+
SqlTypeFamily.CHARACTER, SqlTypeFamily.CHARACTER, SqlTypeFamily.CHARACTER)));
288265
public static final UDFOperandMetadata STRING_INTEGER_DATETIME_OR_STRING =
289266
UDFOperandMetadata.wrap(
290-
(CompositeOperandTypeChecker)
291-
OperandTypes.family(
292-
SqlTypeFamily.CHARACTER, SqlTypeFamily.INTEGER, SqlTypeFamily.CHARACTER)
293-
.or(
294-
OperandTypes.family(
295-
SqlTypeFamily.CHARACTER, SqlTypeFamily.INTEGER, SqlTypeFamily.DATETIME)));
267+
OperandTypes.family(
268+
SqlTypeFamily.CHARACTER, SqlTypeFamily.INTEGER, SqlTypeFamily.CHARACTER)
269+
.or(
270+
OperandTypes.family(
271+
SqlTypeFamily.CHARACTER, SqlTypeFamily.INTEGER, SqlTypeFamily.DATETIME)));
296272
public static final UDFOperandMetadata INTERVAL_DATETIME_DATETIME =
297273
UDFOperandMetadata.wrap(
298-
(CompositeOperandTypeChecker)
299-
OperandTypes.family(
300-
SqlTypeFamily.CHARACTER, SqlTypeFamily.DATETIME, SqlTypeFamily.DATETIME)
301-
.or(
302-
OperandTypes.family(
303-
SqlTypeFamily.CHARACTER, SqlTypeFamily.CHARACTER, SqlTypeFamily.DATETIME))
304-
.or(
305-
OperandTypes.family(
306-
SqlTypeFamily.CHARACTER, SqlTypeFamily.DATETIME, SqlTypeFamily.CHARACTER))
307-
.or(
308-
OperandTypes.family(
309-
SqlTypeFamily.CHARACTER,
310-
SqlTypeFamily.CHARACTER,
311-
SqlTypeFamily.CHARACTER)));
274+
OperandTypes.family(
275+
SqlTypeFamily.CHARACTER, SqlTypeFamily.DATETIME, SqlTypeFamily.DATETIME)
276+
.or(
277+
OperandTypes.family(
278+
SqlTypeFamily.CHARACTER, SqlTypeFamily.CHARACTER, SqlTypeFamily.DATETIME))
279+
.or(
280+
OperandTypes.family(
281+
SqlTypeFamily.CHARACTER, SqlTypeFamily.DATETIME, SqlTypeFamily.CHARACTER))
282+
.or(
283+
OperandTypes.family(
284+
SqlTypeFamily.CHARACTER, SqlTypeFamily.CHARACTER, SqlTypeFamily.CHARACTER)));
312285

313286
/**
314287
* Operand type checker that accepts any scalar type. This includes numeric types, strings,

0 commit comments

Comments
 (0)