From 4451611311f36712304c4f2e2a3a54a6752b56d9 Mon Sep 17 00:00:00 2001 From: Gavin King Date: Thu, 6 Oct 2022 20:13:21 +0200 Subject: [PATCH] HHH-15518 bless degrees() and radians() as standard - add a test - emulate them on HANA and Oracle --- .../chapters/query/hql/QueryLanguage.adoc | 2 + .../dialect/AbstractHANADialect.java | 3 ++ .../java/org/hibernate/dialect/Dialect.java | 2 + .../org/hibernate/dialect/OracleDialect.java | 3 ++ .../function/CommonFunctionFactory.java | 38 +++++++++++++++---- .../dialect/function/CountFunction.java | 1 - .../test/query/hql/StandardFunctionTests.java | 16 ++++++++ 7 files changed, 56 insertions(+), 9 deletions(-) diff --git a/documentation/src/main/asciidoc/userguide/chapters/query/hql/QueryLanguage.adoc b/documentation/src/main/asciidoc/userguide/chapters/query/hql/QueryLanguage.adoc index ae71dfbc3b..5217ba4888 100644 --- a/documentation/src/main/asciidoc/userguide/chapters/query/hql/QueryLanguage.adoc +++ b/documentation/src/main/asciidoc/userguide/chapters/query/hql/QueryLanguage.adoc @@ -1002,6 +1002,8 @@ Of course, we also have a number of functions for working with numeric values. | `pi` | π | `pi` | ✗ | `sin()`, `cos()`, `tan()`, `asin()`, `acos()`, `atan()`, `atan2()` | Basic trigonometric functions | `sin(theta)`, `cos(theta)`, `atan2(opposite, adjacent)` | ✗ +| `degrees()` | Convert radians to degrees | `degrees(x)` | ✗ +| `radians()` | Convert degrees to radians | `radians(x)` | ✗ | `least()` | Return the smallest of the given arguments | `least(x, y, z)` |✗ | `greatest()` | Return the largest of the given arguments | `greatest(x, y, z)` | ✗ |=== diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/AbstractHANADialect.java b/hibernate-core/src/main/java/org/hibernate/dialect/AbstractHANADialect.java index 31dbd5680f..767a2f7ea1 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/AbstractHANADialect.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/AbstractHANADialect.java @@ -377,6 +377,9 @@ public abstract class AbstractHANADialect extends Dialect { functionFactory.inverseDistributionOrderedSetAggregates(); functionFactory.hypotheticalOrderedSetAggregates_windowEmulation(); + functionFactory.radians_acos(); + functionFactory.degrees_acos(); + queryEngine.getSqmFunctionRegistry().register( "timestampadd", new IntegralTimestampaddFunction( this, typeConfiguration ) ); } diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/Dialect.java b/hibernate-core/src/main/java/org/hibernate/dialect/Dialect.java index 8adb3e5a68..a8a2488dee 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/Dialect.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/Dialect.java @@ -787,6 +787,8 @@ public abstract class Dialect implements ConversionContext { *
  • round(arg0, arg1) *
  • least(arg0, arg1, ...) *
  • greatest(arg0, arg1, ...) + *
  • degrees(arg) + *
  • radians(arg) * * *