Skip to content

Commit 4271380

Browse files
committed
Feat: add percentile_disc function
1 parent 1a3f507 commit 4271380

File tree

3 files changed

+32
-1
lines changed

3 files changed

+32
-1
lines changed

traindb-core/src/main/java/traindb/adapter/TiberoSqlDialect.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.apache.calcite.sql.SqlAlienSystemTypeNameSpec;
2121
import org.apache.calcite.sql.SqlDataTypeSpec;
2222
import org.apache.calcite.sql.SqlDialect;
23+
import org.apache.calcite.sql.SqlKind;
2324
import org.apache.calcite.sql.SqlNode;
2425
import org.apache.calcite.sql.SqlWriter;
2526
import org.apache.calcite.sql.parser.SqlParserPos;
@@ -49,6 +50,22 @@ public SqlDialect getDefaultSqlDialect() {
4950
return DEFAULT;
5051
}
5152

53+
@Override
54+
public boolean supportsAggregateFunction(SqlKind kind) {
55+
switch (kind) {
56+
case COUNT:
57+
case SUM:
58+
case SUM0:
59+
case MIN:
60+
case MAX:
61+
case PERCENTILE_DISC:
62+
return true;
63+
default:
64+
break;
65+
}
66+
return false;
67+
}
68+
5269
@Override
5370
public boolean supportCatalogs() {
5471
return false;

traindb-core/src/main/java/traindb/adapter/jdbc/JdbcRules.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,12 @@
6363
import org.apache.calcite.schema.ModifiableTable;
6464
import org.apache.calcite.sql.SqlDialect;
6565
import org.apache.calcite.sql.SqlFunction;
66+
import org.apache.calcite.sql.SqlKind;
6667
import org.apache.calcite.sql.SqlOperator;
68+
import org.apache.calcite.sql.dialect.Db2SqlDialect;
69+
import org.apache.calcite.sql.dialect.MssqlSqlDialect;
70+
import org.apache.calcite.sql.dialect.OracleSqlDialect;
71+
import org.apache.calcite.sql.dialect.PostgresqlSqlDialect;
6772
import org.apache.calcite.sql.validate.SqlValidatorUtil;
6873
import org.apache.calcite.tools.RelBuilder;
6974
import org.apache.calcite.tools.RelBuilderFactory;
@@ -663,6 +668,14 @@ protected JdbcAggregateRule(Config config) {
663668
* function. */
664669
private static boolean canImplement(AggregateCall aggregateCall,
665670
SqlDialect sqlDialect) {
671+
if (aggregateCall.getAggregation().getKind() == SqlKind.PERCENTILE_DISC) {
672+
if (sqlDialect instanceof PostgresqlSqlDialect
673+
|| sqlDialect instanceof Db2SqlDialect
674+
|| sqlDialect instanceof MssqlSqlDialect
675+
|| sqlDialect instanceof OracleSqlDialect) {
676+
return true;
677+
}
678+
}
666679
return sqlDialect.supportsAggregateFunction(
667680
aggregateCall.getAggregation().getKind())
668681
&& aggregateCall.distinctKeys == null;

traindb-core/src/main/java/traindb/planner/rules/ApproxAggregateUtil.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ public class ApproxAggregateUtil {
5656
"CORR",
5757
"MAX",
5858
"MIN",
59-
"MODE"
59+
"MODE",
60+
"PERCENTILE_DISC"
6061
);
6162

6263
private static final List<String> scalingAggregateFuncList = Arrays.asList(

0 commit comments

Comments
 (0)