Re: Fwd: PreparedStatement.setObject(...) fails for OffsetDateTime when used in a merge statement

Lance Java via Hsqldb-user <[email protected]> Tue, 7 Mar 2023 19:13:25 +0000
Newsgroups gmane.comp.java.hsqldb.user
Message-ID <CAN7Z0vQ=8gpqXx2jEi4wbGmZoHoRzwYy+wLPo_8391LFPuvykg@mail.gmail.com>
--===============5243337243805489251==
Content-Type: multipart/alternative; boundary="00000000000061f0be05f6543553"

--00000000000061f0be05f6543553
Content-Type: text/plain; charset="UTF-8"

Thanks, I'll try this... hopefully syntax works in hsqldb and oracle. I'm
assuming I'll be setting the parameter as OffsetDateTime and not String?

On Tue, 7 Mar 2023, 6:44 pm Fred Toussi via Hsqldb-user, <
[email protected]> wrote:

> I am aware that you don't need a cast for INSERT or UPDATE. You do need
> one for MERGE. The reason is it is not generally possible to determine the
> type of the stand-alone ? variable in a MERGE statement. The CAST gives it
> the intended type. This issue currently affects the data time types and
> will be fixed in the next release. Even after the fix, it is more efficient
> to use CASTs in MERGE statements, which avoids internal conversion to
> VARCHAR and back to the required type.
>
>
> On Tue, Mar 7, 2023, at 16:02, Lance Java via Hsqldb-user wrote:
>
> Please see the failng test case at
> https://gist.github.com/uklance/14fd8c27e34ffddbe504109009e4dcc3 which
> shows the column type is TIMESTAMP WITH TIME ZONE
>
>     @BeforeEach
>     public void beforeEach() throws Exception {
>         connection =
> DriverManager.getConnection("jdbc:hsqldb:mem:test;sql.syntax_ora=true",
> "test", "test");
>         connection.createStatement().execute(
>                 "CREATE TABLE SAMPLE (\n" +
>                 "   ID NUMERIC(12,0) PRIMARY KEY,\n" +
>                 "   CODE VARCHAR2(50)," +
>                 "   LAST_UPDATED TIMESTAMP WITH TIME ZONE,\n" +
>                 ")"
>         );
>     }
>
> > You can also use a CAST to the intended SQL type for the parameter
> The failing test case shows that PreparedStatement.setObject(...) works
> for OffsetDateTime for INSERT and UPDATE statements. Why is this only
> failing for MERGE?
>
> On Tue, 7 Mar 2023 at 15:51, Fred Toussi via Hsqldb-user <
> [email protected]> wrote:
>
>
> You can also use a CAST to the intended SQL type for the parameter.
> Assuming you want TIMESTAMP WITH TIME ZONE as the type:
>
> "MERGE INTO SAMPLE t " +
> "USING (SELECT ? AS ID, ? AS CODE, CAST(? AS TIMESTAMP WITH TIME ZONE) AS
> LAST_UPDATED FROM DUAL) val " +
>
>
> On Tue, Mar 7, 2023, at 15:11, Lance Java via Hsqldb-user wrote:
>
> HSQLDB seems to fail for PreparedStatement.setObject(...) for
> OffsetDateTime when used in a merge statement.
>
> This merge logic will fail
>
>     private void merge2Sample(long id, String code, OffsetDateTime
> createdDate) throws SQLException  {
>         String sql =
>                 "MERGE INTO SAMPLE t " +
>                 "USING (SELECT ? AS ID, ? AS CODE, ? AS LAST_UPDATED FROM
> DUAL) val " +
>                 "ON (t.ID = val.ID) " +
>                 "WHEN MATCHED THEN UPDATE SET t.CODE = val.CODE,
> t.LAST_UPDATED = val.LAST_UPDATED " +
>                 "WHEN NOT MATCHED THEN INSERT (ID, CODE, LAST_UPDATED)
> VALUES (val.ID, val.CODE, val.LAST_UPDATED)";
>         try (PreparedStatement ps = connection.prepareStatement(sql)) {
>             ps.setLong(1, id);
>             ps.setString(2, code);
>             ps.setObject(3, createdDate);
>             assertThat(ps.executeUpdate()).isEqualTo(1);
>         }
>     }
>
> As a workaround I can call PreparedStatement.setString(...) with a string
> formatted using a DateTimeFormatter but I'd prefer not to
>
>     private void merge1Sample(long id, String code, OffsetDateTime
> createdDate) throws SQLException  {
>         DateTimeFormatter dateFormatter =
> DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSxxxxx");
>         String sql =
>                 "MERGE INTO SAMPLE t " +
>                 "USING (SELECT ? AS ID, ? AS CODE, ? AS LAST_UPDATED FROM
> DUAL) val " +
>                 "ON (t.ID = val.ID) " +
>                 "WHEN MATCHED THEN UPDATE SET t.CODE = val.CODE,
> t.LAST_UPDATED = val.LAST_UPDATED " +
>                 "WHEN NOT MATCHED THEN INSERT (ID, CODE, LAST_UPDATED)
> VALUES (val.ID, val.CODE, val.LAST_UPDATED)";
>         try (PreparedStatement ps = connection.prepareStatement(sql)) {
>             ps.setLong(1, id);
>             ps.setString(2, code);
>             ps.setString(3, dateFormatter.format(createdDate));
>             assertThat(ps.executeUpdate()).isEqualTo(1);
>         }
>     }
>
> Please see the failing test case at
> https://gist.github.com/uklance/14fd8c27e34ffddbe504109009e4dcc3 which
> throws the following exception
>
> 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 Source)
>
>           at org.hsqldb.ExpressionOp.getValue(Unknown Source)
>
>           at org.hsqldb.StatementDML.getInsertData(Unknown Source)
>
>           at org.hsqldb.StatementDML.executeMergeStatement(Unknown Source)
>
>           at org.hsqldb.StatementDML.getResult(Unknown Source)
>
>           at org.hsqldb.StatementDMQL.execute(Unknown Source)
>
>           at org.hsqldb.Session.executeCompiledStatement(Unknown Source)
>
>           at org.hsqldb.Session.execute(Unknown Source)
>
>           ... 71 more
>
> _______________________________________________
> Hsqldb-user mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/hsqldb-user
>
>
> _______________________________________________
> Hsqldb-user mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/hsqldb-user
>
>
> _______________________________________________
> Hsqldb-user mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/hsqldb-user
>
>
> _______________________________________________
> Hsqldb-user mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/hsqldb-user
>

--00000000000061f0be05f6543553
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"auto"><div>Thanks, I&#39;ll try this... hopefully syntax works =
in hsqldb and oracle. I&#39;m assuming I&#39;ll be setting the parameter as=
 OffsetDateTime and not String?=C2=A0</div><div dir=3D"auto"><br><div class=
=3D"gmail_quote" dir=3D"auto"><div dir=3D"ltr" class=3D"gmail_attr">On Tue,=
 7 Mar 2023, 6:44 pm Fred Toussi via Hsqldb-user, &lt;<a href=3D"mailto:hsq=
[email protected]">[email protected]</a>&gt; w=
rote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex=
;border-left:1px #ccc solid;padding-left:1ex"><u></u><div><div style=3D"fon=
t-family:Arial">I am aware that you don&#39;t need a cast for INSERT or UPD=
ATE. You do need one for MERGE. The reason is it is not generally possible =
to determine the type of the stand-alone ? variable in a MERGE statement. T=
he CAST gives it the intended type. This issue currently affects the data t=
ime types and will be fixed in the next release. Even after the fix, it is =
more efficient to use CASTs in MERGE statements, which avoids internal conv=
ersion to VARCHAR and back to the required type.<br></div><div style=3D"fon=
t-family:Arial"><br></div><div style=3D"font-family:Arial"><br></div><div>O=
n Tue, Mar 7, 2023, at 16:02, Lance Java via Hsqldb-user wrote:<br></div><b=
lockquote type=3D"cite" id=3D"m_-2609216729337246027qt"><div dir=3D"ltr"><d=
iv>Please see the failng test case at <a href=3D"https://gist.github.com/uk=
lance/14fd8c27e34ffddbe504109009e4dcc3" target=3D"_blank" rel=3D"noreferrer=
">https://gist.github.com/uklance/14fd8c27e34ffddbe504109009e4dcc3</a> whic=
h shows the column type is=C2=A0TIMESTAMP WITH TIME ZONE<br></div><div><br>=
</div><div><div>=C2=A0 =C2=A0 @BeforeEach<br></div><div>=C2=A0 =C2=A0 publi=
c void beforeEach() throws Exception {<br></div><div>=C2=A0 =C2=A0 =C2=A0 =
=C2=A0 connection =3D DriverManager.getConnection(&quot;jdbc:hsqldb:mem:tes=
t;sql.syntax_ora=3Dtrue&quot;, &quot;test&quot;, &quot;test&quot;);<br></di=
v><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 connection.createStatement().execute(<br=
></div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &quot;C=
REATE TABLE SAMPLE (\n&quot; +<br></div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 &quot; =C2=A0 ID NUMERIC(12,0) PRIMARY KEY,\n&q=
uot; +<br></div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 &quot; =C2=A0 CODE VARCHAR2(50),&quot; +<br></div><div>=C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &quot; =C2=A0 LAST_UPDATED TIMEST=
AMP WITH TIME ZONE,\n&quot; +<br></div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 &quot;)&quot;<br></div><div>=C2=A0 =C2=A0 =C2=A0 =
=C2=A0 );<br></div><div>=C2=A0 =C2=A0 }<br></div></div><div><br></div><div>=
&gt;=C2=A0<span style=3D"font-family:Arial">You can also use a CAST to the =
intended SQL type for the parameter</span><br></div><div><span style=3D"fon=
t-family:Arial">The failing=C2=A0test case shows that PreparedStatement.set=
Object(...) works for OffsetDateTime for INSERT and UPDATE statements. Why =
is this only failing for MERGE?</span><br></div></div><div><br></div><div><=
div dir=3D"ltr">On Tue, 7 Mar 2023 at 15:51, Fred Toussi via Hsqldb-user &l=
t;<a href=3D"mailto:[email protected]" target=3D"_blank" re=
l=3D"noreferrer">[email protected]</a>&gt; wrote:<br></div>=
<blockquote style=3D"margin-top:0px;margin-right:0px;margin-bottom:0px;marg=
in-left:0.8ex;border-left-color:rgb(204,204,204);border-left-style:solid;bo=
rder-left-width:1px;padding-left:1ex"><div><div><u></u><br></div><div><div =
style=3D"font-family:Arial">You can also use a CAST to the intended SQL typ=
e for the parameter. Assuming you want TIMESTAMP WITH TIME ZONE as the type=
:<br></div><div style=3D"font-family:Arial"><br></div><blockquote type=3D"c=
ite" id=3D"m_-2609216729337246027qt-m_773025684330080279qt"><div dir=3D"ltr=
"><div><div dir=3D"ltr"><div><div>&quot;MERGE INTO SAMPLE t &quot; +<br></d=
iv><div>&quot;USING (SELECT ? AS ID, ? AS CODE, CAST(? AS TIMESTAMP WITH TI=
ME ZONE) AS LAST_UPDATED FROM DUAL) val &quot; +<br></div></div></div></div=
></div></blockquote><div style=3D"font-family:Arial"><br></div><div>On Tue,=
 Mar 7, 2023, at 15:11, Lance Java via Hsqldb-user wrote:<br></div><blockqu=
ote type=3D"cite" id=3D"m_-2609216729337246027qt-m_773025684330080279qt"><d=
iv dir=3D"ltr"><div><div dir=3D"ltr">HSQLDB seems to fail for PreparedState=
ment.setObject(...) for OffsetDateTime when used in a merge statement.<br><=
/div><div dir=3D"ltr"><div><br></div><div>This merge logic will fail<br></d=
iv><div><br></div><div><div>=C2=A0 =C2=A0 private void merge2Sample(long id=
, String code, OffsetDateTime createdDate) throws SQLException =C2=A0{<br><=
/div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 String sql =3D<br></div><div>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &quot;MERGE INTO SAMPLE t =
&quot; +<br></div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 &quot;USING (SELECT ? AS ID, ? AS CODE, ? AS LAST_UPDATED FROM DUAL) va=
l &quot; +<br></div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 &quot;ON (t.ID =3D val.ID) &quot; +<br></div><div>=C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &quot;WHEN MATCHED THEN UPDATE SET t=
.CODE =3D val.CODE, t.LAST_UPDATED =3D val.LAST_UPDATED &quot; +<br></div><=
div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &quot;WHEN NOT =
MATCHED THEN INSERT (ID, CODE, LAST_UPDATED) VALUES (val.ID, val.CODE, val.=
LAST_UPDATED)&quot;;<br></div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 try (Prepare=
dStatement ps =3D connection.prepareStatement(sql)) {<br></div><div>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ps.setLong(1, id);<br></div><div>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ps.setString(2, code);<br></div><div>=C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ps.setObject(3, createdDate);<br></d=
iv><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 assertThat(ps.executeUpda=
te()).isEqualTo(1);<br></div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 }<br></div><d=
iv>=C2=A0 =C2=A0 }<br></div></div><div><br></div><div>As a workaround I can=
 call PreparedStatement.setString(...) with a string formatted using a Date=
TimeFormatter but I&#39;d prefer not to<br></div><div><br></div><div><div>=
=C2=A0 =C2=A0 private void merge1Sample(long id, String code, OffsetDateTim=
e createdDate) throws SQLException =C2=A0{<br></div><div>=C2=A0 =C2=A0 =C2=
=A0 =C2=A0 DateTimeFormatter dateFormatter =3D DateTimeFormatter.ofPattern(=
&quot;yyyy-MM-dd HH:mm:ss.SSSxxxxx&quot;);<br></div><div>=C2=A0 =C2=A0 =C2=
=A0 =C2=A0 String sql =3D<br></div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 &quot;MERGE INTO SAMPLE t &quot; +<br></div><div>=C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &quot;USING (SELECT ? =
AS ID, ? AS CODE, ? AS LAST_UPDATED FROM DUAL) val &quot; +<br></div><div>=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &quot;ON (t.ID =3D =
val.ID) &quot; +<br></div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 &quot;WHEN MATCHED THEN UPDATE SET t.CODE =3D val.CODE, t.LAS=
T_UPDATED =3D val.LAST_UPDATED &quot; +<br></div><div>=C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &quot;WHEN NOT MATCHED THEN INSERT (ID, =
CODE, LAST_UPDATED) VALUES (val.ID, val.CODE, val.LAST_UPDATED)&quot;;<br><=
/div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 try (PreparedStatement ps =3D connect=
ion.prepareStatement(sql)) {<br></div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 ps.setLong(1, id);<br></div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 ps.setString(2, code);<br></div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0 =C2=A0 ps.setString(3, dateFormatter.format(createdDate));<br></div=
><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 assertThat(ps.executeUpdate=
()).isEqualTo(1);<br></div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 }<br></div><div=
>=C2=A0 =C2=A0 }<br></div></div><div><br></div><div>Please see the failing =
test case at=C2=A0<a href=3D"https://gist.github.com/uklance/14fd8c27e34ffd=
dbe504109009e4dcc3" style=3D"font-family:Verdana,&quot;sans-serif&quot;" ta=
rget=3D"_blank" rel=3D"noreferrer">https://gist.github.com/uklance/14fd8c27=
e34ffddbe504109009e4dcc3</a>=C2=A0which throws the following exception<br><=
/div><div><div><br></div><div><p><span style=3D"font-family:Verdana,&quot;s=
ans-serif&quot;">Caused by: org.hsqldb.HsqlException: data exception: inval=
id datetime format<u></u><u></u></span><br></p><p><span style=3D"font-famil=
y:Verdana,&quot;sans-serif&quot;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 at org.hsqldb.error.Error.error(Unknown Source)<u></u><u></=
u></span><br></p><p><span style=3D"font-family:Verdana,&quot;sans-serif&quo=
t;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.hsqldb.er=
ror.Error.error(Unknown Source)<u></u><u></u></span><br></p><p><span style=
=3D"font-family:Verdana,&quot;sans-serif&quot;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.hsqldb.types.DateTimeType.convertToDatet=
imeSpecial(Unknown Source)<u></u><u></u></span><br></p><p><span style=3D"fo=
nt-family:Verdana,&quot;sans-serif&quot;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0 at org.hsqldb.types.DateTimeType.convertToType(Unknow=
n Source)<u></u><u></u></span><br></p><p><span style=3D"font-family:Verdana=
,&quot;sans-serif&quot;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0 at org.hsqldb.ExpressionOp.getValue(Unknown Source)<u></u><u></u></s=
pan><br></p><p><span style=3D"font-family:Verdana,&quot;sans-serif&quot;">=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.hsqldb.Statem=
entDML.getInsertData(Unknown Source)<u></u><u></u></span><br></p><p><span s=
tyle=3D"font-family:Verdana,&quot;sans-serif&quot;">=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.hsqldb.StatementDML.executeMergeSt=
atement(Unknown Source)<u></u><u></u></span><br></p><p><span style=3D"font-=
family:Verdana,&quot;sans-serif&quot;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0 at org.hsqldb.StatementDML.getResult(Unknown Source)<u><=
/u><u></u></span><br></p><p><span style=3D"font-family:Verdana,&quot;sans-s=
erif&quot;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.h=
sqldb.StatementDMQL.execute(Unknown Source)<u></u><u></u></span><br></p><p>=
<span style=3D"font-family:Verdana,&quot;sans-serif&quot;">=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 at org.hsqldb.Session.executeCompil=
edStatement(Unknown Source)<u></u><u></u></span><br></p><p><span style=3D"f=
ont-family:Verdana,&quot;sans-serif&quot;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0 at org.hsqldb.Session.execute(Unknown Source)<u></=
u><u></u></span><br></p><p><span style=3D"font-family:Verdana,&quot;sans-se=
rif&quot;">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ... 71 mo=
re</span><br></p></div></div></div></div></div><div><br></div><div>________=
_______________________________________<br></div><div>Hsqldb-user mailing l=
ist<br></div><div><a href=3D"mailto:[email protected]" targ=
et=3D"_blank" rel=3D"noreferrer">[email protected]</a><br><=
/div><div><a href=3D"https://lists.sourceforge.net/lists/listinfo/hsqldb-us=
er" target=3D"_blank" rel=3D"noreferrer">https://lists.sourceforge.net/list=
s/listinfo/hsqldb-user</a><br></div><div><br></div></blockquote><div style=
=3D"font-family:Arial"><br></div></div><div>_______________________________=
________________<br></div><div>Hsqldb-user mailing list<br></div><div><a hr=
ef=3D"mailto:[email protected]" target=3D"_blank" rel=3D"no=
referrer">[email protected]</a><br></div><div><a href=3D"ht=
tps://lists.sourceforge.net/lists/listinfo/hsqldb-user" rel=3D"noreferrer n=
oreferrer" target=3D"_blank">https://lists.sourceforge.net/lists/listinfo/h=
sqldb-user</a><br></div></div></blockquote></div><div><br></div><div>______=
_________________________________________<br></div><div>Hsqldb-user mailing=
 list<br></div><div><a href=3D"mailto:[email protected]" ta=
rget=3D"_blank" rel=3D"noreferrer">[email protected]</a><br=
></div><div><a href=3D"https://lists.sourceforge.net/lists/listinfo/hsqldb-=
user" target=3D"_blank" rel=3D"noreferrer">https://lists.sourceforge.net/li=
sts/listinfo/hsqldb-user</a><br></div><div><br></div></blockquote><div styl=
e=3D"font-family:Arial"><br></div></div>___________________________________=
____________<br>
Hsqldb-user mailing list<br>
<a href=3D"mailto:[email protected]" target=3D"_blank" rel=
=3D"noreferrer">[email protected]</a><br>
<a href=3D"https://lists.sourceforge.net/lists/listinfo/hsqldb-user" rel=3D=
"noreferrer noreferrer" target=3D"_blank">https://lists.sourceforge.net/lis=
ts/listinfo/hsqldb-user</a><br>
</blockquote></div></div></div>

--00000000000061f0be05f6543553--


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


--===============5243337243805489251==
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

--===============5243337243805489251==--