BuiltinFunctionName.java

1
/*
2
 * Copyright OpenSearch Contributors
3
 * SPDX-License-Identifier: Apache-2.0
4
 */
5
6
package org.opensearch.sql.expression.function;
7
8
import com.google.common.collect.ImmutableMap;
9
import java.util.Locale;
10
import java.util.Map;
11
import java.util.Optional;
12
import lombok.Getter;
13
import lombok.RequiredArgsConstructor;
14
15
/**
16
 * Builtin Function Name.
17
 */
18
@Getter
19
@RequiredArgsConstructor
20
public enum BuiltinFunctionName {
21
  /**
22
   * Mathematical Functions.
23
   */
24
  ABS(FunctionName.of("abs")),
25
  CEIL(FunctionName.of("ceil")),
26
  CEILING(FunctionName.of("ceiling")),
27
  CONV(FunctionName.of("conv")),
28
  CRC32(FunctionName.of("crc32")),
29
  E(FunctionName.of("e")),
30
  EXP(FunctionName.of("exp")),
31
  FLOOR(FunctionName.of("floor")),
32
  LN(FunctionName.of("ln")),
33
  LOG(FunctionName.of("log")),
34
  LOG10(FunctionName.of("log10")),
35
  LOG2(FunctionName.of("log2")),
36
  MOD(FunctionName.of("mod")),
37
  PI(FunctionName.of("pi")),
38
  POW(FunctionName.of("pow")),
39
  POWER(FunctionName.of("power")),
40
  RAND(FunctionName.of("rand")),
41
  ROUND(FunctionName.of("round")),
42
  SIGN(FunctionName.of("sign")),
43
  SQRT(FunctionName.of("sqrt")),
44
  TRUNCATE(FunctionName.of("truncate")),
45
46
  ACOS(FunctionName.of("acos")),
47
  ASIN(FunctionName.of("asin")),
48
  ATAN(FunctionName.of("atan")),
49
  ATAN2(FunctionName.of("atan2")),
50
  COS(FunctionName.of("cos")),
51
  COT(FunctionName.of("cot")),
52
  DEGREES(FunctionName.of("degrees")),
53
  RADIANS(FunctionName.of("radians")),
54
  SIN(FunctionName.of("sin")),
55
  TAN(FunctionName.of("tan")),
56
57
  /**
58
   * Date and Time Functions.
59
   */
60
  ADDDATE(FunctionName.of("adddate")),
61
  CONVERT_TZ(FunctionName.of("convert_tz")),
62
  DATE(FunctionName.of("date")),
63
  DATETIME(FunctionName.of("datetime")),
64
  DATE_ADD(FunctionName.of("date_add")),
65
  DATE_SUB(FunctionName.of("date_sub")),
66
  DAY(FunctionName.of("day")),
67
  DAYNAME(FunctionName.of("dayname")),
68
  DAYOFMONTH(FunctionName.of("dayofmonth")),
69
  DAYOFWEEK(FunctionName.of("dayofweek")),
70
  DAYOFYEAR(FunctionName.of("dayofyear")),
71
  FROM_DAYS(FunctionName.of("from_days")),
72
  FROM_UNIXTIME(FunctionName.of("from_unixtime")),
73
  HOUR(FunctionName.of("hour")),
74
  MAKEDATE(FunctionName.of("makedate")),
75
  MAKETIME(FunctionName.of("maketime")),
76
  MICROSECOND(FunctionName.of("microsecond")),
77
  MINUTE(FunctionName.of("minute")),
78
  MONTH(FunctionName.of("month")),
79
  MONTHNAME(FunctionName.of("monthname")),
80
  PERIOD_ADD(FunctionName.of("period_add")),
81
  PERIOD_DIFF(FunctionName.of("period_diff")),
82
  QUARTER(FunctionName.of("quarter")),
83
  SECOND(FunctionName.of("second")),
84
  SUBDATE(FunctionName.of("subdate")),
85
  TIME(FunctionName.of("time")),
86
  TIME_TO_SEC(FunctionName.of("time_to_sec")),
87
  TIMESTAMP(FunctionName.of("timestamp")),
88
  DATE_FORMAT(FunctionName.of("date_format")),
89
  TO_DAYS(FunctionName.of("to_days")),
90
  UNIX_TIMESTAMP(FunctionName.of("unix_timestamp")),
91
  WEEK(FunctionName.of("week")),
92
  YEAR(FunctionName.of("year")),
93
  // `now`-like functions
94
  NOW(FunctionName.of("now")),
95
  CURDATE(FunctionName.of("curdate")),
96
  CURRENT_DATE(FunctionName.of("current_date")),
97
  CURTIME(FunctionName.of("curtime")),
98
  CURRENT_TIME(FunctionName.of("current_time")),
99
  LOCALTIME(FunctionName.of("localtime")),
100
  CURRENT_TIMESTAMP(FunctionName.of("current_timestamp")),
101
  LOCALTIMESTAMP(FunctionName.of("localtimestamp")),
102
  SYSDATE(FunctionName.of("sysdate")),
103
  /**
104
   * Text Functions.
105
   */
106
  TOSTRING(FunctionName.of("tostring")),
107
108
  /**
109
   * Arithmetic Operators.
110
   */
111
  ADD(FunctionName.of("+")),
112
  SUBTRACT(FunctionName.of("-")),
113
  MULTIPLY(FunctionName.of("*")),
114
  DIVIDE(FunctionName.of("/")),
115
  MODULES(FunctionName.of("%")),
116
117
  /**
118
   * Boolean Operators.
119
   */
120
  AND(FunctionName.of("and")),
121
  OR(FunctionName.of("or")),
122
  XOR(FunctionName.of("xor")),
123
  NOT(FunctionName.of("not")),
124
  EQUAL(FunctionName.of("=")),
125
  NOTEQUAL(FunctionName.of("!=")),
126
  LESS(FunctionName.of("<")),
127
  LTE(FunctionName.of("<=")),
128
  GREATER(FunctionName.of(">")),
129
  GTE(FunctionName.of(">=")),
130
  LIKE(FunctionName.of("like")),
131
  NOT_LIKE(FunctionName.of("not like")),
132
133
  /**
134
   * Aggregation Function.
135
   */
136
  AVG(FunctionName.of("avg")),
137
  SUM(FunctionName.of("sum")),
138
  COUNT(FunctionName.of("count")),
139
  MIN(FunctionName.of("min")),
140
  MAX(FunctionName.of("max")),
141
  // sample variance
142
  VARSAMP(FunctionName.of("var_samp")),
143
  // population standard variance
144
  VARPOP(FunctionName.of("var_pop")),
145
  // sample standard deviation.
146
  STDDEV_SAMP(FunctionName.of("stddev_samp")),
147
  // population standard deviation.
148
  STDDEV_POP(FunctionName.of("stddev_pop")),
149
  // take top documents from aggregation bucket.
150
  TAKE(FunctionName.of("take")),
151
152
  /**
153
   * Text Functions.
154
   */
155
  SUBSTR(FunctionName.of("substr")),
156
  SUBSTRING(FunctionName.of("substring")),
157
  RTRIM(FunctionName.of("rtrim")),
158
  LTRIM(FunctionName.of("ltrim")),
159
  TRIM(FunctionName.of("trim")),
160
  UPPER(FunctionName.of("upper")),
161
  LOWER(FunctionName.of("lower")),
162
  REGEXP(FunctionName.of("regexp")),
163
  CONCAT(FunctionName.of("concat")),
164
  CONCAT_WS(FunctionName.of("concat_ws")),
165
  LENGTH(FunctionName.of("length")),
166
  STRCMP(FunctionName.of("strcmp")),
167
  RIGHT(FunctionName.of("right")),
168
  LEFT(FunctionName.of("left")),
169
  ASCII(FunctionName.of("ascii")),
170
  LOCATE(FunctionName.of("locate")),
171
  REPLACE(FunctionName.of("replace")),
172
173
  /**
174
   * NULL Test.
175
   */
176
  IS_NULL(FunctionName.of("is null")),
177
  IS_NOT_NULL(FunctionName.of("is not null")),
178
  IFNULL(FunctionName.of("ifnull")),
179
  IF(FunctionName.of("if")),
180
  NULLIF(FunctionName.of("nullif")),
181
  ISNULL(FunctionName.of("isnull")),
182
183
  ROW_NUMBER(FunctionName.of("row_number")),
184
  RANK(FunctionName.of("rank")),
185
  DENSE_RANK(FunctionName.of("dense_rank")),
186
187
  INTERVAL(FunctionName.of("interval")),
188
189
  /**
190
   * Data Type Convert Function.
191
   */
192
  CAST_TO_STRING(FunctionName.of("cast_to_string")),
193
  CAST_TO_BYTE(FunctionName.of("cast_to_byte")),
194
  CAST_TO_SHORT(FunctionName.of("cast_to_short")),
195
  CAST_TO_INT(FunctionName.of("cast_to_int")),
196
  CAST_TO_LONG(FunctionName.of("cast_to_long")),
197
  CAST_TO_FLOAT(FunctionName.of("cast_to_float")),
198
  CAST_TO_DOUBLE(FunctionName.of("cast_to_double")),
199
  CAST_TO_BOOLEAN(FunctionName.of("cast_to_boolean")),
200
  CAST_TO_DATE(FunctionName.of("cast_to_date")),
201
  CAST_TO_TIME(FunctionName.of("cast_to_time")),
202
  CAST_TO_TIMESTAMP(FunctionName.of("cast_to_timestamp")),
203
  CAST_TO_DATETIME(FunctionName.of("cast_to_datetime")),
204
  TYPEOF(FunctionName.of("typeof")),
205
206
  /**
207
   * Relevance Function.
208
   */
209
  MATCH(FunctionName.of("match")),
210
  SIMPLE_QUERY_STRING(FunctionName.of("simple_query_string")),
211
  MATCH_PHRASE(FunctionName.of("match_phrase")),
212
  MATCHPHRASE(FunctionName.of("matchphrase")),
213
  QUERY_STRING(FunctionName.of("query_string")),
214
  MATCH_BOOL_PREFIX(FunctionName.of("match_bool_prefix")),
215
  HIGHLIGHT(FunctionName.of("highlight")),
216
  MATCH_PHRASE_PREFIX(FunctionName.of("match_phrase_prefix")),
217
  /**
218
   * Legacy Relevance Function.
219
   */
220
  QUERY(FunctionName.of("query")),
221
  MATCH_QUERY(FunctionName.of("match_query")),
222
  MATCHQUERY(FunctionName.of("matchquery")),
223
  MULTI_MATCH(FunctionName.of("multi_match"));
224
225
  private final FunctionName name;
226
227
  private static final Map<FunctionName, BuiltinFunctionName> ALL_NATIVE_FUNCTIONS;
228
229
  static {
230
    ImmutableMap.Builder<FunctionName, BuiltinFunctionName> builder = new ImmutableMap.Builder<>();
231
    for (BuiltinFunctionName func : BuiltinFunctionName.values()) {
232
      builder.put(func.getName(), func);
233
    }
234
    ALL_NATIVE_FUNCTIONS = builder.build();
235
  }
236
237
  private static final Map<String, BuiltinFunctionName> AGGREGATION_FUNC_MAPPING =
238
      new ImmutableMap.Builder<String, BuiltinFunctionName>()
239
          .put("max", BuiltinFunctionName.MAX)
240
          .put("min", BuiltinFunctionName.MIN)
241
          .put("avg", BuiltinFunctionName.AVG)
242
          .put("count", BuiltinFunctionName.COUNT)
243
          .put("sum", BuiltinFunctionName.SUM)
244
          .put("var_pop", BuiltinFunctionName.VARPOP)
245
          .put("var_samp", BuiltinFunctionName.VARSAMP)
246
          .put("variance", BuiltinFunctionName.VARPOP)
247
          .put("std", BuiltinFunctionName.STDDEV_POP)
248
          .put("stddev", BuiltinFunctionName.STDDEV_POP)
249
          .put("stddev_pop", BuiltinFunctionName.STDDEV_POP)
250
          .put("stddev_samp", BuiltinFunctionName.STDDEV_SAMP)
251
          .put("take", BuiltinFunctionName.TAKE)
252
          .build();
253
254
  public static Optional<BuiltinFunctionName> of(String str) {
255 1 1. of : replaced return value with Optional.empty for org/opensearch/sql/expression/function/BuiltinFunctionName::of → KILLED
    return Optional.ofNullable(ALL_NATIVE_FUNCTIONS.getOrDefault(FunctionName.of(str), null));
256
  }
257
258
  public static Optional<BuiltinFunctionName> ofAggregation(String functionName) {
259 1 1. ofAggregation : replaced return value with Optional.empty for org/opensearch/sql/expression/function/BuiltinFunctionName::ofAggregation → KILLED
    return Optional.ofNullable(
260
        AGGREGATION_FUNC_MAPPING.getOrDefault(functionName.toLowerCase(Locale.ROOT), null));
261
  }
262
}

Mutations

255

1.1
Location : of
Killed by : org.opensearch.sql.expression.function.BuiltinFunctionNameTest.[engine:junit-jupiter]/[class:org.opensearch.sql.expression.function.BuiltinFunctionNameTest]/[test-template:of(java.lang.String, org.opensearch.sql.expression.function.BuiltinFunctionName)]/[test-template-invocation:#125]
replaced return value with Optional.empty for org/opensearch/sql/expression/function/BuiltinFunctionName::of → KILLED

259

1.1
Location : ofAggregation
Killed by : org.opensearch.sql.analysis.ExpressionAnalyzerTest.[engine:junit-jupiter]/[class:org.opensearch.sql.analysis.ExpressionAnalyzerTest]/[method:distinct_count()]
replaced return value with Optional.empty for org/opensearch/sql/expression/function/BuiltinFunctionName::ofAggregation → KILLED

Active mutators

Tests examined


Report generated by PIT 1.9.0