Skip to content

Commit f5f92b8

Browse files
committed
add tests for trunc() and date_trunc(), even though they're non-"standard"
see https://hibernate.atlassian.net/browse/HHH-15855
1 parent b704e31 commit f5f92b8

File tree

4 files changed

+58
-0
lines changed

4 files changed

+58
-0
lines changed

hibernate-core/src/main/java/org/hibernate/dialect/H2Dialect.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,8 @@ public void initializeFunctionRegistry(QueryEngine queryEngine) {
276276
if ( useLocalTime ) {
277277
functionFactory.localtimeLocaltimestamp();
278278
}
279+
functionFactory.trunc();
280+
functionFactory.dateTrunc();
279281
functionFactory.bitLength();
280282
functionFactory.octetLength();
281283
functionFactory.ascii();

hibernate-core/src/main/java/org/hibernate/dialect/OracleDialect.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@ public void initializeFunctionRegistry(QueryEngine queryEngine) {
216216
functionFactory.bitand();
217217
functionFactory.lastDay();
218218
functionFactory.toCharNumberDateTimestamp();
219+
functionFactory.dateTrunc_trunc();
219220
functionFactory.ceiling_ceil();
220221
functionFactory.concat_pipeOperator();
221222
functionFactory.rownumRowid();

hibernate-core/src/main/java/org/hibernate/dialect/function/CommonFunctionFactory.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2448,4 +2448,13 @@ public void dateTrunc() {
24482448
.register();
24492449
}
24502450

2451+
public void dateTrunc_trunc() {
2452+
functionRegistry.patternDescriptorBuilder( "date_trunc", "trunc(?2,'?1')" )
2453+
.setInvariantType(timestampType)
2454+
.setExactArgumentCount( 2 )
2455+
.setParameterTypes(TEMPORAL_UNIT, TEMPORAL)
2456+
.setArgumentListSignature( "(TEMPORAL_UNIT field, TEMPORAL datetime)" )
2457+
.register();
2458+
}
2459+
24512460
}

hibernate-core/src/test/java/org/hibernate/orm/test/query/hql/FunctionTests.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,16 @@
88

99
import org.hibernate.QueryException;
1010
import org.hibernate.dialect.CockroachDialect;
11+
import org.hibernate.dialect.DB2Dialect;
1112
import org.hibernate.dialect.DerbyDialect;
1213

14+
import org.hibernate.dialect.H2Dialect;
1315
import org.hibernate.dialect.MariaDBDialect;
1416
import org.hibernate.dialect.MySQLDialect;
17+
import org.hibernate.dialect.OracleDialect;
18+
import org.hibernate.dialect.PostgreSQLDialect;
19+
import org.hibernate.dialect.SQLServerDialect;
20+
import org.hibernate.dialect.SybaseDialect;
1521
import org.hibernate.dialect.TiDBDialect;
1622

1723
import org.hibernate.testing.TestForIssue;
@@ -473,6 +479,46 @@ public void testMathFunctions(SessionFactoryScope scope) {
473479
);
474480
}
475481

482+
@Test
483+
@SkipForDialect(dialectClass = MySQLDialect.class, matchSubTypes = true)
484+
@SkipForDialect(dialectClass = SQLServerDialect.class)
485+
@SkipForDialect(dialectClass = SybaseDialect.class, matchSubTypes = true)
486+
@SkipForDialect(dialectClass = DerbyDialect.class)
487+
public void testTruncFunction(SessionFactoryScope scope) {
488+
scope.inTransaction(
489+
session -> {
490+
assertThat( session.createQuery("select trunc(32.92345)").getSingleResult(), is(32d) );
491+
assertThat( session.createQuery("select trunc(32.92345,3)").getSingleResult(), is(32.923d) );
492+
}
493+
);
494+
}
495+
496+
@Test
497+
@RequiresDialect(MySQLDialect.class)
498+
@RequiresDialect(SQLServerDialect.class)
499+
@RequiresDialect(DB2Dialect.class)
500+
@RequiresDialect(H2Dialect.class)
501+
public void testTruncateFunction(SessionFactoryScope scope) {
502+
scope.inTransaction(
503+
session -> {
504+
assertThat( session.createQuery("select truncate(32.92345,3)").getSingleResult(), is(32.923d) );
505+
}
506+
);
507+
}
508+
509+
@Test
510+
@RequiresDialect(H2Dialect.class)
511+
@RequiresDialect(DB2Dialect.class)
512+
@RequiresDialect(OracleDialect.class)
513+
@RequiresDialect(PostgreSQLDialect.class)
514+
public void testDateTruncFunction(SessionFactoryScope scope) {
515+
scope.inTransaction(
516+
session -> {
517+
session.createQuery("select date_trunc(year,current_timestamp)").getSingleResult();
518+
}
519+
);
520+
}
521+
476522
@Test
477523
public void testLowerUpperFunctions(SessionFactoryScope scope) {
478524
scope.inTransaction(

0 commit comments

Comments
 (0)