[Libreoffice-commits] core.git: 2 commits - connectivity/source
Andrzej J.R. Hunt
andrzej at ahunt.org
Fri Aug 23 09:55:21 PDT 2013
connectivity/source/drivers/firebird/PreparedStatement.cxx | 16 +++++++++++++
connectivity/source/drivers/firebird/PreparedStatement.hxx | 2 +
2 files changed, 18 insertions(+)
New commits:
commit 35ab624acdfb78db429e118c51bea783ace57e95
Author: Andrzej J.R. Hunt <andrzej at ahunt.org>
Date: Fri Aug 23 12:57:05 2013 +0100
Set Null indicator in input SQLDA as appropriate. (firebird-sdbc)
If this is incorrectly (or randomly set) then firebird will end up just
ignoring any input parameters (previously the case). The documentation
claims that -1 is the null indicator, however the inevitably-random
values previously provided (from malloc) also caused firebird to treat
all input data as null.
Change-Id: I79b9704df0a307ec493e74e782551b9b0ff109a2
diff --git a/connectivity/source/drivers/firebird/PreparedStatement.cxx b/connectivity/source/drivers/firebird/PreparedStatement.cxx
index 506e145..9f4637a 100644
--- a/connectivity/source/drivers/firebird/PreparedStatement.cxx
+++ b/connectivity/source/drivers/firebird/PreparedStatement.cxx
@@ -207,6 +207,7 @@ void SAL_CALL OPreparedStatement::setString(sal_Int32 nParameterIndex,
ensurePrepared();
checkParameterIndex(nParameterIndex);
+ setParameterNull(nParameterIndex, false);
OString str = OUStringToOString(x , RTL_TEXTENCODING_UTF8 );
@@ -590,5 +591,17 @@ void OPreparedStatement::checkParameterIndex(sal_Int32 nParameterIndex)
// TODO: sane error message here.
}
+void OPreparedStatement::setParameterNull(sal_Int32 nParameterIndex,
+ bool bSetNull)
+{
+ XSQLVAR* pVar = m_pInSqlda->sqlvar + (nParameterIndex - 1);
+ if (pVar->sqltype & 1)
+ {
+ if (bSetNull)
+ *pVar->sqlind = -1;
+ else
+ *pVar->sqlind = 0;
+ }
+}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/firebird/PreparedStatement.hxx b/connectivity/source/drivers/firebird/PreparedStatement.hxx
index 8d4a0e1..eca8562 100644
--- a/connectivity/source/drivers/firebird/PreparedStatement.hxx
+++ b/connectivity/source/drivers/firebird/PreparedStatement.hxx
@@ -74,6 +74,8 @@ namespace connectivity
void checkParameterIndex(sal_Int32 nParameterIndex)
throw(::com::sun::star::sdbc::SQLException);
+ void setParameterNull(sal_Int32 nParameterIndex, bool bSetNull = true);
+
void ensurePrepared()
throw(::com::sun::star::sdbc::SQLException);
commit 1f50aee94df71bcd4c99cee44af0464ce46193a3
Author: Andrzej J.R. Hunt <andrzej at ahunt.org>
Date: Fri Aug 23 12:16:11 2013 +0100
Improve comment. (firebird-sdbc)
Change-Id: Iec5c5a434a371d73bba0345362f991a948d28c6a
diff --git a/connectivity/source/drivers/firebird/PreparedStatement.cxx b/connectivity/source/drivers/firebird/PreparedStatement.cxx
index ddb10e0..506e145 100644
--- a/connectivity/source/drivers/firebird/PreparedStatement.cxx
+++ b/connectivity/source/drivers/firebird/PreparedStatement.cxx
@@ -269,6 +269,9 @@ sal_Bool SAL_CALL OPreparedStatement::execute()
{
disposeResultSet();
// Closes the cursor from the last run.
+ // This doesn't actually free the statement -- using DSQL_close closes
+ // the cursor and keeps the statement, using DSQL_drop frees the statement
+ // (and associated cursors).
aErr = isc_dsql_free_statement(m_statusVector,
&m_aStatementHandle,
DSQL_close);
More information about the Libreoffice-commits
mailing list