Re: Merge fails for OffsetDateTime when offset is UTC (+00:00)

Fred Toussi via Hsqldb-user <[email protected]> Fri, 09 Jun 2023 17:09:50 +0100
Newsgroups gmane.comp.java.hsqldb.user
Message-ID <[email protected]>
--===============1360941517229529747==
Content-Type: multipart/alternative;
 boundary=d88062bef6df4c6a9048260f39a2f84f

--d88062bef6df4c6a9048260f39a2f84f
Content-Type: text/plain;charset=utf-8
Content-Transfer-Encoding: quoted-printable

It should work if you add a CAST to the required type:

"using (select ? as code, cast(? as timestamp with time zone) as updated=
 from dual) val " +

On Fri, Jun 9, 2023, at 16:42, Lance Java via Hsqldb-user wrote:
> I=E2=80=99m having an issue with the following merge logic if I use an=
 OffsetDateTime with offset +00:00
> __ __
>     private static final String MERGE_SQL =3D____
>             "merge into sample t " +____
>             "using (select ? as code, ? as updated from dual) val " +_=
___
>             "on (t.code =3D val.code) " +____
>             "when matched then update set t.updated =3D val.updated " =
+____
>             "when not matched then insert(code, updated) values (val.c=
ode, val.updated)";____
> __ __
>     private int merge(String code, OffsetDateTime updated) throws SQLE=
xception {____
>         try (PreparedStatement statement =3D connection.prepareStateme=
nt(MERGE_SQL)) {____
>             statement.setString(1, code);____
>             statement.setObject(2, updated, Types.TIMESTAMP_WITH_TIMEZ=
ONE);____
>             return statement.executeUpdate();____
>         }____
>     }____
> __ __
> The merge statement works fine for all offsets except UTC (eg offset +=
01:00 works)____
> I think this is caused by the fact that toString() of an OffsetDateTim=
e at UTC has the Z suffix instead of +00:00____
> It seems that an INSERT statement does not have the same problem as ME=
RGE____
> __ __
> As a workaround I can do the following____
> __ __
>     private static final DateTimeFormatter FORMATTER =3D new DateTimeF=
ormatterBuilder()____
>             .appendPattern("yyyy-MM-dd HH:mm:ss.SSS")____
>             .appendOffset("+HH:MM", "+00:00")____
>             .toFormatter();____
> __ __
>     private int merge(String code, OffsetDateTime updated) throws SQLE=
xception {____
>         try (PreparedStatement statement =3D connection.prepareStateme=
nt(MERGE_SQL)) {____
>             statement.setString(1, code);____
>             statement.setString(2, FORMATTER.format(updated));____
>             return statement.executeUpdate();____
>         }____
>     }____
> __ __
> Failing test attached, output below____
> __ __
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D____
> __ __
> 2023-06-09 15:18:15.020 1 INSERT INTO SYSTEM_LOBS.BLOCKS VALUES(:0 ,:1=
 ,:2 ) (0,2147483647,0)____
> 2023-06-09 15:18:15.022 1 COMMIT____
> 2023-06-09 15:18:15.024 2 COMMIT____
> 2023-06-09 15:18:15.025 2 create table sample (code varchar2(50), upda=
ted timestamp with time zone)____
> 2023-06-09 15:18:15.025 2 COMMIT____
> 2023-06-09 15:18:15.040 2 merge into sample t using (select :0  as cod=
e, :1  as updated from dual) val on (t.code =3D val.code) when matched t=
hen update set t.updated =3D val.updated when not matched then insert(co=
de, updated) values (val.code, val.updated) ('code1','2007-12-03 10:15:3=
0+01:00')____
> 2023-06-09 15:18:15.040 2 COMMIT____
> 2023-06-09 15:18:15.041 2 merge into sample t using (select :0  as cod=
e, :1  as updated from dual) val on (t.code =3D val.code) when matched t=
hen update set t.updated =3D val.updated when not matched then insert(co=
de, updated) values (val.code, val.updated) ('code2','2007-12-03 10:15:3=
0Z')____
> 2023-06-09 15:18:15.041 2 ROLLBACK____
> 2023-06-09 15:18:15.046 2 ROLLBACK____
> __ __
> java.sql.SQLDataException: data exception: invalid datetime format____
> __ __
>             at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)__=
__
>             at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)__=
__
>             at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(Unkno=
wn Source)____
>             at org.hsqldb.jdbc.JDBCPreparedStatement.executeUpdate(Unk=
nown Source)____
>             at com.sample.DeletemeHsqlBugTest.merge(DeletemeHsqlBugTes=
t.java:79)____
>             at com.sample.DeletemeHsqlBugTest.testMerge(DeletemeHsqlBu=
gTest.java:58)____
>             at java.base/jdk.internal.reflect.NativeMethodAccessorImpl=
.invoke0(Native Method)____
>             =E2=80=A6____
> Caused by: org.hsqldb.HsqlException: data exception: invalid datetime =
format____
>             at org.hsqldb.error.Error.error(Unknown Source)____
>             at org.hsqldb.error.Error.error(Unknown Source)____
>             at org.hsqldb.types.DateTimeType.convertToDatetimeSpecial(=
Unknown Source)____
>             at org.hsqldb.types.DateTimeType.convertToType(Unknown Sou=
rce)____
>             at org.hsqldb.ExpressionOp.getValue(Unknown Source)____
>             at org.hsqldb.StatementDML.getInsertData(Unknown Source)__=
__
>             at org.hsqldb.StatementDML.executeMergeStatement(Unknown S=
ource)____
>             at org.hsqldb.StatementDML.getResult(Unknown Source)____
>             at org.hsqldb.StatementDMQL.execute(Unknown Source)____
>             at org.hsqldb.Session.executeCompiledStatement(Unknown Sou=
rce)____
>             at org.hsqldb.Session.execute(Unknown Source)____
>             ... 73 more____
> __ __
>=20
>=20
>=20
> _______________________________________________
> Hsqldb-user mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/hsqldb-user
>=20
>=20
> *Attachments:*
>  =E2=80=A2 DeletemeHsqlBugTest.java

--d88062bef6df4c6a9048260f39a2f84f
Content-Type: text/html;charset=utf-8
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html><html><head><title></title><style type=3D"text/css">p.Mso=
Normal,p.MsoNoSpacing{margin:0}</style></head><body><div style=3D"font-f=
amily:Arial;">It should work if you add a CAST to the required type:<br>=
</div><div style=3D"font-family:Arial;"><br></div><div style=3D"font-fam=
ily:Arial;"><span class=3D"font" style=3D"font-family:&quot;Arial&quot;,=
 sans-serif;"><span class=3D"size" style=3D"font-size:10pt;">"using (sel=
ect ? as code, cast(? as timestamp with time zone) as updated from dual)=
 val " +</span></span><br></div><div style=3D"font-family:Arial;"><br></=
div><div>On Fri, Jun 9, 2023, at 16:42, Lance Java via Hsqldb-user wrote=
:<br></div><blockquote type=3D"cite" id=3D"qt" style=3D""><div dir=3D"au=
to"><div class=3D"qt-gmail_quote" dir=3D"auto"><div dir=3D"ltr" class=3D=
"qt-gmail_attr"><span class=3D"font" style=3D"font-family:Arial, sans-se=
rif;"><span class=3D"size" style=3D"font-size:10pt;">I=E2=80=99m having =
an issue with the following merge logic if I use an OffsetDateTime with =
offset +00:00</span></span><br></div><div style=3D"overflow-wrap:break-w=
ord;" lang=3D"EN-GB"><div class=3D"qt-m_-2110861338389721347WordSection1=
"><p class=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-family:&q=
uot;Arial&quot;, sans-serif;"><span class=3D"size" style=3D"font-size:10=
pt;"><u></u>&nbsp;<u></u></span></span><br></p><p class=3D"qt-MsoNormal"=
><span class=3D"font" style=3D"font-family:&quot;Arial&quot;, sans-serif=
;"><span class=3D"size" style=3D"font-size:10pt;">&nbsp;&nbsp;&nbsp; pri=
vate static final String MERGE_SQL =3D<u></u><u></u></span></span><br></=
p><p class=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-family:&q=
uot;Arial&quot;, sans-serif;"><span class=3D"size" style=3D"font-size:10=
pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
"merge into sample t " +<u></u><u></u></span></span><br></p><p class=3D"=
qt-MsoNormal"><span class=3D"font" style=3D"font-family:&quot;Arial&quot=
;, sans-serif;"><span class=3D"size" style=3D"font-size:10pt;">&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "using (select=
 ? as code, ? as updated from dual) val " +<u></u><u></u></span></span><=
br></p><p class=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-fami=
ly:&quot;Arial&quot;, sans-serif;"><span class=3D"size" style=3D"font-si=
ze:10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp; </span></span><span class=3D"font" style=3D"font-family:&quot;Arial=
&quot;, sans-serif;"><span class=3D"size" style=3D"font-size:10pt;">"on =
(t.code =3D val.code) " +<u></u><u></u></span></span><br></p><p class=3D=
"qt-MsoNormal"><span class=3D"font" style=3D"font-family:&quot;Arial&quo=
t;, sans-serif;"><span class=3D"size" style=3D"font-size:10pt;">&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span=
><span class=3D"font" style=3D"font-family:&quot;Arial&quot;, sans-serif=
;"><span class=3D"size" style=3D"font-size:10pt;">"when matched then upd=
ate set t.updated =3D val.updated " +<u></u><u></u></span></span><br></p=
><p class=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-family:&qu=
ot;Arial&quot;, sans-serif;"><span class=3D"size" style=3D"font-size:10p=
t;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "=
when not matched then insert(code, updated) values (val.code, val.update=
d)";<u></u><u></u></span></span><br></p><p class=3D"qt-MsoNormal"><span =
class=3D"font" style=3D"font-family:&quot;Arial&quot;, sans-serif;"><spa=
n class=3D"size" style=3D"font-size:10pt;"><u></u>&nbsp;<u></u></span></=
span><br></p><p class=3D"qt-MsoNormal"><span class=3D"font" style=3D"fon=
t-family:&quot;Arial&quot;, sans-serif;"><span class=3D"size" style=3D"f=
ont-size:10pt;">&nbsp;&nbsp;&nbsp; private int merge(String code, Offset=
DateTime updated) throws SQLException {<u></u><u></u></span></span><br><=
/p><p class=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-family:&=
quot;Arial&quot;, sans-serif;"><span class=3D"size" style=3D"font-size:1=
0pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try (PreparedStatement =
statement =3D connection.prepareStatement(MERGE_SQL)) {<u></u><u></u></s=
pan></span><br></p><p class=3D"qt-MsoNormal"><span class=3D"font" style=3D=
"font-family:&quot;Arial&quot;, sans-serif;"><span class=3D"size" style=3D=
"font-size:10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp; statement.setString(1, code);<u></u><u></u></span></span><b=
r></p><p class=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-famil=
y:&quot;Arial&quot;, sans-serif;"><span class=3D"size" style=3D"font-siz=
e:10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp; statement.setObject(2, updated, Types.TIMESTAMP_WITH_TIMEZONE);<u></=
u><u></u></span></span><br></p><p class=3D"qt-MsoNormal"><span class=3D"=
font" style=3D"font-family:&quot;Arial&quot;, sans-serif;"><span class=3D=
"size" style=3D"font-size:10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp; return statement.executeUpdate();<u></u><u><=
/u></span></span><br></p><p class=3D"qt-MsoNormal"><span class=3D"font" =
style=3D"font-family:&quot;Arial&quot;, sans-serif;"><span class=3D"size=
" style=3D"font-size:10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }=
<u></u><u></u></span></span><br></p><p class=3D"qt-MsoNormal"><span clas=
s=3D"font" style=3D"font-family:&quot;Arial&quot;, sans-serif;"><span cl=
ass=3D"size" style=3D"font-size:10pt;">&nbsp;&nbsp;&nbsp; }<u></u><u></u=
></span></span><br></p><p class=3D"qt-MsoNormal"><span class=3D"font" st=
yle=3D"font-family:&quot;Arial&quot;, sans-serif;"><span class=3D"size" =
style=3D"font-size:10pt;"><u></u>&nbsp;<u></u></span></span><br></p><p c=
lass=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-family:&quot;Ar=
ial&quot;, sans-serif;"><span class=3D"size" style=3D"font-size:10pt;">T=
he merge statement works fine for all offsets except UTC (eg offset +01:=
00 works)<u></u><u></u></span></span><br></p><p class=3D"qt-MsoNormal"><=
span class=3D"font" style=3D"font-family:&quot;Arial&quot;, sans-serif;"=
><span class=3D"size" style=3D"font-size:10pt;">I think this is caused b=
y the fact that toString() of an OffsetDateTime at UTC has the Z suffix =
instead of +00:00<u></u><u></u></span></span><br></p><p class=3D"qt-MsoN=
ormal"><span class=3D"font" style=3D"font-family:&quot;Arial&quot;, sans=
-serif;"><span class=3D"size" style=3D"font-size:10pt;">It seems that an=
 INSERT statement does not have the same problem as MERGE<u></u><u></u><=
/span></span><br></p><p class=3D"qt-MsoNormal"><span class=3D"font" styl=
e=3D"font-family:&quot;Arial&quot;, sans-serif;"><span class=3D"size" st=
yle=3D"font-size:10pt;"><u></u>&nbsp;<u></u></span></span><br></p><p cla=
ss=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-family:&quot;Aria=
l&quot;, sans-serif;"><span class=3D"size" style=3D"font-size:10pt;">As =
a workaround I can do the following<u></u><u></u></span></span><br></p><=
p class=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-family:&quot=
;Arial&quot;, sans-serif;"><span class=3D"size" style=3D"font-size:10pt;=
"><u></u>&nbsp;<u></u></span></span><br></p><p class=3D"qt-MsoNormal"><s=
pan class=3D"font" style=3D"font-family:&quot;Arial&quot;, sans-serif;">=
<span class=3D"size" style=3D"font-size:10pt;">&nbsp;&nbsp;&nbsp; privat=
e static final DateTimeFormatter FORMATTER =3D new DateTimeFormatterBuil=
der()<u></u><u></u></span></span><br></p><p class=3D"qt-MsoNormal"><span=
 class=3D"font" style=3D"font-family:&quot;Arial&quot;, sans-serif;"><sp=
an class=3D"size" style=3D"font-size:10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .appendPattern("yyyy-MM-dd HH:mm:=
ss.SSS")<u></u><u></u></span></span><br></p><p class=3D"qt-MsoNormal"><s=
pan class=3D"font" style=3D"font-family:&quot;Arial&quot;, sans-serif;">=
<span class=3D"size" style=3D"font-size:10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .appendOffset("+HH:MM", "+00:0=
0")<u></u><u></u></span></span><br></p><p class=3D"qt-MsoNormal"><span c=
lass=3D"font" style=3D"font-family:&quot;Arial&quot;, sans-serif;"><span=
 class=3D"size" style=3D"font-size:10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .toFormatter();<u></u><u></u></span=
></span><br></p><p class=3D"qt-MsoNormal"><span class=3D"font" style=3D"=
font-family:&quot;Arial&quot;, sans-serif;"><span class=3D"size" style=3D=
"font-size:10pt;"><u></u>&nbsp;<u></u></span></span><br></p><p class=3D"=
qt-MsoNormal"><span class=3D"font" style=3D"font-family:&quot;Arial&quot=
;, sans-serif;"><span class=3D"size" style=3D"font-size:10pt;">&nbsp;&nb=
sp;&nbsp; private int merge(String code, OffsetDateTime updated) throws =
SQLException {<u></u><u></u></span></span><br></p><p class=3D"qt-MsoNorm=
al"><span class=3D"font" style=3D"font-family:&quot;Arial&quot;, sans-se=
rif;"><span class=3D"size" style=3D"font-size:10pt;">&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp; try (PreparedStatement statement =3D connection.=
prepareStatement(MERGE_SQL)) {<u></u><u></u></span></span><br></p><p cla=
ss=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-family:&quot;Aria=
l&quot;, sans-serif;"><span class=3D"size" style=3D"font-size:10pt;">&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; statemen=
t.setString(1, code);<u></u><u></u></span></span><br></p><p class=3D"qt-=
MsoNormal"><span class=3D"font" style=3D"font-family:&quot;Arial&quot;, =
sans-serif;"><span class=3D"size" style=3D"font-size:10pt;">&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; statement.setStri=
ng(2, FORMATTER.format(updated));<u></u><u></u></span></span><br></p><p =
class=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-family:&quot;A=
rial&quot;, sans-serif;"><span class=3D"size" style=3D"font-size:10pt;">=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; retur=
n statement.executeUpdate();<u></u><u></u></span></span><br></p><p class=
=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-family:&quot;Arial&=
quot;, sans-serif;"><span class=3D"size" style=3D"font-size:10pt;">&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<u></u><u></u></span></span><br><=
/p><p class=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-family:&=
quot;Arial&quot;, sans-serif;"><span class=3D"size" style=3D"font-size:1=
0pt;">&nbsp;&nbsp;&nbsp; }<u></u><u></u></span></span><br></p><p class=3D=
"qt-MsoNormal"><span class=3D"font" style=3D"font-family:&quot;Arial&quo=
t;, sans-serif;"><span class=3D"size" style=3D"font-size:10pt;"><u></u>&=
nbsp;<u></u></span></span><br></p><p class=3D"qt-MsoNormal"><span class=3D=
"font" style=3D"font-family:&quot;Arial&quot;, sans-serif;"><span class=3D=
"size" style=3D"font-size:10pt;">Failing test attached, output below<u><=
/u><u></u></span></span><br></p><p class=3D"qt-MsoNormal"><span class=3D=
"font" style=3D"font-family:&quot;Arial&quot;, sans-serif;"><span class=3D=
"size" style=3D"font-size:10pt;"><u></u>&nbsp;<u></u></span></span><br><=
/p><p class=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-family:&=
quot;Arial&quot;, sans-serif;"><span class=3D"size" style=3D"font-size:1=
0pt;">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D<u></u><u></u></span></span><br></p><p =
class=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-family:&quot;A=
rial&quot;, sans-serif;"><span class=3D"size" style=3D"font-size:10pt;">=
<u></u>&nbsp;<u></u></span></span><br></p><p class=3D"qt-MsoNormal"><spa=
n class=3D"font" style=3D"font-family:&quot;Arial&quot;, sans-serif;"><s=
pan class=3D"size" style=3D"font-size:10pt;">2023-06-09 15:18:15.020 1 I=
NSERT INTO SYSTEM_LOBS.BLOCKS VALUES(:0 ,:1 ,:2 ) (0,2147483647,0)<u></u=
><u></u></span></span><br></p><p class=3D"qt-MsoNormal"><span class=3D"f=
ont" style=3D"font-family:&quot;Arial&quot;, sans-serif;"><span class=3D=
"size" style=3D"font-size:10pt;">2023-06-09 15:18:15.022 1 COMMIT<u></u>=
<u></u></span></span><br></p><p class=3D"qt-MsoNormal"><span class=3D"fo=
nt" style=3D"font-family:&quot;Arial&quot;, sans-serif;"><span class=3D"=
size" style=3D"font-size:10pt;">2023-06-09 15:18:15.024 2 COMMIT<u></u><=
u></u></span></span><br></p><p class=3D"qt-MsoNormal"><span class=3D"fon=
t" style=3D"font-family:&quot;Arial&quot;, sans-serif;"><span class=3D"s=
ize" style=3D"font-size:10pt;">2023-06-09 15:18:15.025 2 create table sa=
mple (code varchar2(50), updated timestamp with time zone)<u></u><u></u>=
</span></span><br></p><p class=3D"qt-MsoNormal"><span class=3D"font" sty=
le=3D"font-family:&quot;Arial&quot;, sans-serif;"><span class=3D"size" s=
tyle=3D"font-size:10pt;">2023-06-09 15:18:15.025 2 COMMIT<u></u><u></u><=
/span></span><br></p><p class=3D"qt-MsoNormal"><span class=3D"font" styl=
e=3D"font-family:&quot;Arial&quot;, sans-serif;"><span class=3D"size" st=
yle=3D"font-size:10pt;">2023-06-09 15:18:15.040 2 merge into sample t us=
ing (select :0&nbsp; as code, :1&nbsp; as updated from dual) val on (t.c=
ode =3D val.code) when matched then update set t.updated =3D val.updated
 when not matched then insert(code, updated) values (val.code, val.updat=
ed) ('code1','2007-12-03 10:15:30+01:00')<u></u><u></u></span></span><br=
></p><p class=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-family=
:&quot;Arial&quot;, sans-serif;"><span class=3D"size" style=3D"font-size=
:10pt;">2023-06-09 15:18:15.040 2 COMMIT<u></u><u></u></span></span><br>=
</p><p class=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-family:=
&quot;Arial&quot;, sans-serif;"><span class=3D"size" style=3D"font-size:=
10pt;">2023-06-09 15:18:15.041 2 merge into sample t using (select :0&nb=
sp; as code, :1&nbsp; as updated from dual) val on (t.code =3D val.code)=
 when matched then update set t.updated =3D val.updated
 when not matched then insert(code, updated) values (val.code, val.updat=
ed) ('code2','2007-12-03 10:15:30Z')<u></u><u></u></span></span><br></p>=
<p class=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-family:&quo=
t;Arial&quot;, sans-serif;"><span class=3D"size" style=3D"font-size:10pt=
;">2023-06-09 15:18:15.041 2 ROLLBACK<u></u><u></u></span></span><br></p=
><p class=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-family:&qu=
ot;Arial&quot;, sans-serif;"><span class=3D"size" style=3D"font-size:10p=
t;">2023-06-09 15:18:15.046 2 ROLLBACK<u></u><u></u></span></span><br></=
p><p class=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-family:&q=
uot;Arial&quot;, sans-serif;"><span class=3D"size" style=3D"font-size:10=
pt;"><u></u>&nbsp;<u></u></span></span><br></p><p class=3D"qt-MsoNormal"=
><span class=3D"font" style=3D"font-family:&quot;Arial&quot;, sans-serif=
;"><span class=3D"size" style=3D"font-size:10pt;">java.sql.SQLDataExcept=
ion: data exception: invalid datetime format<u></u><u></u></span></span>=
<br></p><p class=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-fam=
ily:&quot;Arial&quot;, sans-serif;"><span class=3D"size" style=3D"font-s=
ize:10pt;"><u></u>&nbsp;<u></u></span></span><br></p><p class=3D"qt-MsoN=
ormal"><span class=3D"font" style=3D"font-family:&quot;Arial&quot;, sans=
-serif;"><span class=3D"size" style=3D"font-size:10pt;">&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.hsqldb.jdbc.JD=
BCUtil.sqlException(Unknown Source)<u></u><u></u></span></span><br></p><=
p class=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-family:&quot=
;Arial&quot;, sans-serif;"><span class=3D"size" style=3D"font-size:10pt;=
">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at =
org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)<u></u><u></u></spa=
n></span><br></p><p class=3D"qt-MsoNormal"><span class=3D"font" style=3D=
"font-family:&quot;Arial&quot;, sans-serif;"><span class=3D"size" style=3D=
"font-size:10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp; at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(Unknow=
n Source)<u></u><u></u></span></span><br></p><p class=3D"qt-MsoNormal"><=
span class=3D"font" style=3D"font-family:&quot;Arial&quot;, sans-serif;"=
><span class=3D"size" style=3D"font-size:10pt;">&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.hsqldb.jdbc.JDBCPrepar=
edStatement.executeUpdate(Unknown Source)<u></u><u></u></span></span><br=
></p><p class=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-family=
:&quot;Arial&quot;, sans-serif;"><span class=3D"size" style=3D"font-size=
:10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p; at com.sample.DeletemeHsqlBugTest.merge(DeletemeHsqlBugTest.java:79)<=
u></u><u></u></span></span><br></p><p class=3D"qt-MsoNormal"><span class=
=3D"font" style=3D"font-family:&quot;Arial&quot;, sans-serif;"><span cla=
ss=3D"size" style=3D"font-size:10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.sample.DeletemeHsqlBugTest.testM=
erge(DeletemeHsqlBugTest.java:58)<u></u><u></u></span></span><br></p><p =
class=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-family:&quot;A=
rial&quot;, sans-serif;"><span class=3D"size" style=3D"font-size:10pt;">=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at ja=
va.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Met=
hod)<u></u><u></u></span></span><br></p><p class=3D"qt-MsoNormal"><span =
class=3D"font" style=3D"font-family:&quot;Arial&quot;, sans-serif;"><spa=
n class=3D"size" style=3D"font-size:10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =E2=80=A6</span></span><span class=
=3D"font" style=3D"font-family:&quot;Arial&quot;, sans-serif;"><span cla=
ss=3D"size" style=3D"font-size:10pt;"><u></u><u></u></span></span><br></=
p><p class=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-family:&q=
uot;Arial&quot;, sans-serif;"><span class=3D"size" style=3D"font-size:10=
pt;">Caused by: org.hsqldb.HsqlException: data exception: invalid dateti=
me format<u></u><u></u></span></span><br></p><p class=3D"qt-MsoNormal"><=
span class=3D"font" style=3D"font-family:&quot;Arial&quot;, sans-serif;"=
><span class=3D"size" style=3D"font-size:10pt;">&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.hsqldb.error.Error.err=
or(Unknown Source)<u></u><u></u></span></span><br></p><p class=3D"qt-Mso=
Normal"><span class=3D"font" style=3D"font-family:&quot;Arial&quot;, san=
s-serif;"><span class=3D"size" style=3D"font-size:10pt;">&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.hsqldb.error.=
Error.error(Unknown Source)<u></u><u></u></span></span><br></p><p class=3D=
"qt-MsoNormal"><span class=3D"font" style=3D"font-family:&quot;Arial&quo=
t;, sans-serif;"><span class=3D"size" style=3D"font-size:10pt;">&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.hsqldb=
.types.DateTimeType.convertToDatetimeSpecial(Unknown Source)<u></u><u></=
u></span></span><br></p><p class=3D"qt-MsoNormal"><span class=3D"font" s=
tyle=3D"font-family:&quot;Arial&quot;, sans-serif;"><span class=3D"size"=
 style=3D"font-size:10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp; at org.hsqldb.types.DateTimeType.convertToType(Unk=
nown Source)<u></u><u></u></span></span><br></p><p class=3D"qt-MsoNormal=
"><span class=3D"font" style=3D"font-family:&quot;Arial&quot;, sans-seri=
f;"><span class=3D"size" style=3D"font-size:10pt;">&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.hsqldb.ExpressionOp=
.getValue(Unknown Source)<u></u><u></u></span></span><br></p><p class=3D=
"qt-MsoNormal"><span class=3D"font" style=3D"font-family:&quot;Arial&quo=
t;, sans-serif;"><span class=3D"size" style=3D"font-size:10pt;">&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.hsqldb=
.StatementDML.getInsertData(Unknown Source)<u></u><u></u></span></span><=
br></p><p class=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-fami=
ly:&quot;Arial&quot;, sans-serif;"><span class=3D"size" style=3D"font-si=
ze:10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp; at org.hsqldb.StatementDML.executeMergeStatement(Unknown Source)<u>=
</u><u></u></span></span><br></p><p class=3D"qt-MsoNormal"><span class=3D=
"font" style=3D"font-family:&quot;Arial&quot;, sans-serif;"><span class=3D=
"size" style=3D"font-size:10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp; at org.hsqldb.StatementDML.getResult(Unknown=
 Source)<u></u><u></u></span></span><br></p><p class=3D"qt-MsoNormal"><s=
pan class=3D"font" style=3D"font-family:&quot;Arial&quot;, sans-serif;">=
<span class=3D"size" style=3D"font-size:10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.hsqldb.StatementDMQL.ex=
ecute(Unknown Source)<u></u><u></u></span></span><br></p><p class=3D"qt-=
MsoNormal"><span class=3D"font" style=3D"font-family:&quot;Arial&quot;, =
sans-serif;"><span class=3D"size" style=3D"font-size:10pt;">&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.hsqldb.Ses=
sion.executeCompiledStatement(Unknown Source)<u></u><u></u></span></span=
><br></p><p class=3D"qt-MsoNormal"><span class=3D"font" style=3D"font-fa=
mily:&quot;Arial&quot;, sans-serif;"><span class=3D"size" style=3D"font-=
size:10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp; at org.hsqldb.Session.execute(Unknown Source)<u></u><u></u></span=
></span><br></p><p class=3D"qt-MsoNormal"><span class=3D"font" style=3D"=
font-family:&quot;Arial&quot;, sans-serif;"><span class=3D"size" style=3D=
"font-size:10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp; ... 73 more<u></u><u></u></span></span><br></p><p class=3D"=
qt-MsoNormal"><span class=3D"font" style=3D"font-family:&quot;Arial&quot=
;, sans-serif;"><span class=3D"size" style=3D"font-size:10pt;"><u></u>&n=
bsp;<u></u></span></span><br></p></div><p><br></p></div></div></div><div=
><br></div><div>_______________________________________________<br></div=
><div>Hsqldb-user mailing list<br></div><div><a href=3D"mailto:Hsqldb-us=
[email protected]">[email protected]</a><br></div=
><div><a href=3D"https://lists.sourceforge.net/lists/listinfo/hsqldb-use=
r">https://lists.sourceforge.net/lists/listinfo/hsqldb-user</a><br></div=
><div><br></div><div><br></div><div><b>Attachments:</b><br></div><ul><li=
>DeletemeHsqlBugTest.java<br></li></ul></blockquote><div style=3D"font-f=
amily:Arial;"><br></div></body></html>
--d88062bef6df4c6a9048260f39a2f84f--


--===============1360941517229529747==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline


--===============1360941517229529747==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Hsqldb-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/hsqldb-user

--===============1360941517229529747==--