Skip to content

Commit

Permalink
Accept PERCENTILE functions without OVER clause
Browse files Browse the repository at this point in the history
  • Loading branch information
tanclary committed Jan 9, 2024
1 parent 021a1e3 commit 4f32326
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -467,9 +467,8 @@ public Aggregate.AggCallBinding createBinding(
final RelDataTypeFactory typeFactory =
aggregateRelBase.getCluster().getTypeFactory();

if (aggFunction.getKind() == SqlKind.PERCENTILE_DISC
|| aggFunction.getKind() == SqlKind.PERCENTILE_CONT) {
assert collation.getKeys().size() == 1;
if (this.argList.size() == 1 && (aggFunction.getKind() == SqlKind.PERCENTILE_DISC
|| aggFunction.getKind() == SqlKind.PERCENTILE_CONT)) {
return new Aggregate.PercentileDiscAggCallBinding(typeFactory,
aggFunction, SqlTypeUtil.projectTypes(rowType, argList),
SqlTypeUtil.projectTypes(rowType, collation.getKeys()).get(0),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -658,7 +658,6 @@ static RelDataType deriveTypeSplit(SqlOperatorBinding operatorBinding,
ReturnTypes.DOUBLE,
OperandTypes.NUMERIC_UNIT_INTERVAL_NUMERIC_LITERAL)
.withFunctionType(SqlFunctionCategory.SYSTEM)
.withOver(true)
.withPercentile(true)
.withAllowsNullTreatment(true);

Expand All @@ -672,7 +671,6 @@ static RelDataType deriveTypeSplit(SqlOperatorBinding operatorBinding,
ReturnTypes.ARG0,
OperandTypes.NUMERIC_UNIT_INTERVAL_NUMERIC_LITERAL)
.withFunctionType(SqlFunctionCategory.SYSTEM)
.withOver(true)
.withPercentile(true)
.withAllowsNullTreatment(true);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6176,7 +6176,6 @@ private SqlNode navigationInDefine(SqlNode node, String alpha) {
break;
case 2:
assert op.allowsNullTreatment();
assert op.requiresOver();
assert op.requiresGroupOrder() == Optionality.FORBIDDEN;
break;
default:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1278,6 +1278,18 @@ private static String toSql(RelNode root, SqlDialect dialect,
.withMysql().ok(expectedMysql);
}

/** Looker-specific for now. BigQuery doesn't yet support PERCENTILE_*
* as aggregate functions, e.g. they cannot be used without OVER. If Calcite
* pretends it supports it that's good enough, for now. */
@Test void testPercentileFunctionWithoutWindow() {
final String query = "select percentile_cont(\"product_id\", .5) "
+ "from \"foodmart\".\"product\"";
final String expected = "SELECT PERCENTILE_CONT(product_id, 0.5)\n"
+ "FROM foodmart.product";

sql(query).withBigQuery().withLibrary(SqlLibrary.BIG_QUERY).ok(expected);
}

/** As {@link #testSum0BecomesCoalesce()} but for windowed aggregates. */
@Test void testWindowedSum0BecomesCoalesce() {
final String query = "select\n"
Expand Down

0 comments on commit 4f32326

Please sign in to comment.