Skip to content

Commit

Permalink
[CALCITE-6196] Accept BigQuery PERCENTILE functions without OVER clause
Browse files Browse the repository at this point in the history
  • Loading branch information
tanclary committed Jan 11, 2024
1 parent 135e963 commit 7e01bcf
Show file tree
Hide file tree
Showing 4 changed files with 26 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 @@ -711,7 +711,6 @@ static RelDataType deriveTypeSplit(SqlOperatorBinding operatorBinding,
ReturnTypes.DOUBLE,
OperandTypes.NUMERIC_UNIT_INTERVAL_NUMERIC_LITERAL)
.withFunctionType(SqlFunctionCategory.SYSTEM)
.withOver(true)
.withPercentile(true)
.withAllowsNullTreatment(true)
.withAllowsFraming(false);
Expand All @@ -726,7 +725,6 @@ static RelDataType deriveTypeSplit(SqlOperatorBinding operatorBinding,
ReturnTypes.ARG0,
OperandTypes.NUMERIC_UNIT_INTERVAL_NUMERIC_LITERAL)
.withFunctionType(SqlFunctionCategory.SYSTEM)
.withOver(true)
.withPercentile(true)
.withAllowsNullTreatment(true)
.withAllowsFraming(false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6235,7 +6235,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 @@ -1296,6 +1296,30 @@ private static String toSql(RelNode root, SqlDialect dialect,
.withMysql().ok(expectedMysql);
}

/** Test case for
* <a href="https://issues.apache.org/jira/browse/CALCITE-6196">[CALCITE-6196]
* Remove OVER requirement for BigQuery PERCENTILE_CONT/DISC</a>. */
@Test void testPercentileContFunctionWithoutOver() {
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);
}

/** Test case for
* <a href="https://issues.apache.org/jira/browse/CALCITE-6196">[CALCITE-6196]
* Remove OVER requirement for BigQuery PERCENTILE_CONT/DISC</a>. */
@Test void testPercentileDiscFunctionWithoutOver() {
final String query = "select percentile_disc(\"product_id\", .5) "
+ "from \"foodmart\".\"product\"";
final String expected = "SELECT PERCENTILE_DISC(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 7e01bcf

Please sign in to comment.