make adding fractional seconds work on h2 and HSQL
Signed-off-by: Gavin King <gavin@hibernate.org>
This commit is contained in:
parent
87516a77b7
commit
5941aca7ac
|
@ -4821,7 +4821,8 @@ public abstract class Dialect implements ConversionContext, TypeContributor, Fun
|
||||||
public int getDefaultTimestampPrecision() {
|
public int getDefaultTimestampPrecision() {
|
||||||
//milliseconds or microseconds is the maximum
|
//milliseconds or microseconds is the maximum
|
||||||
//for most dialects that support explicit
|
//for most dialects that support explicit
|
||||||
//precision, with the exception of DB2 which
|
//precision, with the exception of Oracle,
|
||||||
|
//which accepts up to 9 digits, and DB2 which
|
||||||
//accepts up to 12 digits!
|
//accepts up to 12 digits!
|
||||||
return 6; //microseconds!
|
return 6; //microseconds!
|
||||||
}
|
}
|
||||||
|
|
|
@ -443,7 +443,11 @@ public class H2Dialect extends Dialect {
|
||||||
if ( intervalType != null ) {
|
if ( intervalType != null ) {
|
||||||
return "(?2+?3)";
|
return "(?2+?3)";
|
||||||
}
|
}
|
||||||
return "dateadd(?1,?2,?3)";
|
return unit == SECOND
|
||||||
|
//TODO: if we have an integral number of seconds
|
||||||
|
// (the common case) this is unnecessary
|
||||||
|
? "dateadd(nanosecond,?2*1e9,?3)"
|
||||||
|
: "dateadd(?1,?2,?3)";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -300,6 +300,11 @@ public class HSQLDialect extends Dialect {
|
||||||
case WEEK:
|
case WEEK:
|
||||||
pattern.append("dateadd('day',?2*7,");
|
pattern.append("dateadd('day',?2*7,");
|
||||||
break;
|
break;
|
||||||
|
case SECOND:
|
||||||
|
//TODO: if we have an integral number of seconds
|
||||||
|
// (the common case) this is unnecessary
|
||||||
|
pattern.append("timestampadd(sql_tsi_frac_second, ?2*1e9,");
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
pattern.append("dateadd('?1',?2,");
|
pattern.append("dateadd('?1',?2,");
|
||||||
}
|
}
|
||||||
|
|
|
@ -1303,7 +1303,7 @@ public class FunctionTests {
|
||||||
// really this could and should be made work on these dialects
|
// really this could and should be made work on these dialects
|
||||||
@SkipForDialect(dialectClass = DerbyDialect.class)
|
@SkipForDialect(dialectClass = DerbyDialect.class)
|
||||||
@SkipForDialect(dialectClass = SQLServerDialect.class)
|
@SkipForDialect(dialectClass = SQLServerDialect.class)
|
||||||
@SkipForDialect(dialectClass = SybaseDialect.class)
|
@SkipForDialect(dialectClass = SybaseDialect.class, matchSubTypes = true)
|
||||||
public void testAddSecondsWithFractionalPart(SessionFactoryScope scope) {
|
public void testAddSecondsWithFractionalPart(SessionFactoryScope scope) {
|
||||||
scope.inTransaction(
|
scope.inTransaction(
|
||||||
session -> {
|
session -> {
|
||||||
|
@ -1315,7 +1315,7 @@ public class FunctionTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@SkipForDialect(dialectClass = SybaseDialect.class)
|
@SkipForDialect(dialectClass = SybaseDialect.class, matchSubTypes = true)
|
||||||
public void testAddNanoseconds(SessionFactoryScope scope) {
|
public void testAddNanoseconds(SessionFactoryScope scope) {
|
||||||
scope.inTransaction(
|
scope.inTransaction(
|
||||||
session -> {
|
session -> {
|
||||||
|
|
Loading…
Reference in New Issue