[Libreoffice-commits] core.git: Branch 'private/ajrhunt/firebird-improvement' - 3 commits - connectivity/source
Andrzej Hunt
andrzej.hunt at collabora.com
Wed Mar 19 13:53:14 PDT 2014
connectivity/source/drivers/firebird/PreparedStatement.cxx | 55 +------------
connectivity/source/drivers/firebird/PreparedStatement.hxx | 2
connectivity/source/drivers/firebird/wrapper/Sqlda.cxx | 20 ++++
connectivity/source/drivers/firebird/wrapper/Sqlda.hxx | 8 +
4 files changed, 32 insertions(+), 53 deletions(-)
New commits:
commit dc0af89801e0f6a2105487915259a879533083df
Author: Andrzej Hunt <andrzej.hunt at collabora.com>
Date: Wed Mar 19 20:51:59 2014 +0000
firebird-sdbc: upgrade PreparedStatement to use Sqlda wrapper.
Change-Id: If79a8b1cfe76292054db4417c452f6443e663fda
diff --git a/connectivity/source/drivers/firebird/PreparedStatement.cxx b/connectivity/source/drivers/firebird/PreparedStatement.cxx
index 3ddf3b5..4814b91 100644
--- a/connectivity/source/drivers/firebird/PreparedStatement.cxx
+++ b/connectivity/source/drivers/firebird/PreparedStatement.cxx
@@ -56,7 +56,6 @@ OPreparedStatement::OPreparedStatement( Connection* _pConnection,
:OStatementCommonBase(_pConnection)
,m_aTypeInfo(_TypeInfo)
,m_sSqlStatement(sql)
- ,m_pInSqlda(0)
{
SAL_INFO("connectivity.firebird", "OPreparedStatement(). "
"sql: " << sql);
@@ -71,46 +70,12 @@ void OPreparedStatement::ensurePrepared()
if (m_aStatementHandle)
return;
- ISC_STATUS aErr = 0;
-
- if (!m_pInSqlda)
- {
- m_pInSqlda = (XSQLDA*) malloc(XSQLDA_LENGTH(10));
- m_pInSqlda->version = SQLDA_VERSION1;
- m_pInSqlda->sqln = 10;
- }
-
prepareAndDescribeStatement(m_sSqlStatement,
m_aOutSqlda,
- m_pInSqlda);
-
-
- aErr = isc_dsql_describe_bind(m_statusVector,
- &m_aStatementHandle,
- 1,
- m_pInSqlda);
+ &m_aInSqlda);
- if (aErr)
- {
- SAL_WARN("connectivity.firebird", "isc_dsql_describe_bind failed");
- }
- else if (m_pInSqlda->sqld > m_pInSqlda->sqln) // Not large enough
- {
- short nItems = m_pInSqlda->sqld;
- free(m_pInSqlda);
- m_pInSqlda = (XSQLDA*) malloc(XSQLDA_LENGTH(nItems));
- m_pInSqlda->version = SQLDA_VERSION1;
- m_pInSqlda->sqln = nItems;
- isc_dsql_describe_bind(m_statusVector,
- &m_aStatementHandle,
- 1,
- m_pInSqlda);
- }
- if (!aErr)
- mallocSQLVAR(m_pInSqlda);
- else
- evaluateStatusVector(m_statusVector, m_sSqlStatement, *this);
+ m_aInSqlda.describeStatement(m_aStatementHandle, true);
}
OPreparedStatement::~OPreparedStatement()
@@ -162,12 +127,6 @@ void SAL_CALL OPreparedStatement::close() throw(SQLException, RuntimeException,
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
OStatementCommonBase::close();
- if (m_pInSqlda)
- {
- freeSQLVAR(m_pInSqlda);
- free(m_pInSqlda);
- m_pInSqlda = 0;
- }
}
void SAL_CALL OPreparedStatement::disposing()
@@ -191,7 +150,7 @@ void SAL_CALL OPreparedStatement::setString(sal_Int32 nParameterIndex,
OString str = OUStringToOString(x , RTL_TEXTENCODING_UTF8 );
- XSQLVAR* pVar = m_pInSqlda->sqlvar + (nParameterIndex - 1);
+ XSQLVAR* pVar = m_aInSqlda->sqlvar + (nParameterIndex - 1);
int dtype = (pVar->sqltype & ~1); // drop flag bit for now
@@ -268,7 +227,7 @@ sal_Bool SAL_CALL OPreparedStatement::execute()
&m_pConnection->getTransaction(),
&m_aStatementHandle,
1,
- m_pInSqlda);
+ &m_aInSqlda);
if (aErr)
{
SAL_WARN("connectivity.firebird", "isc_dsql_execute failed" );
@@ -331,7 +290,7 @@ void OPreparedStatement::setValue(sal_Int32 nIndex, T& nValue, ISC_SHORT nType)
checkParameterIndex(nIndex);
setParameterNull(nIndex, false);
- XSQLVAR* pVar = m_pInSqlda->sqlvar + (nIndex - 1);
+ XSQLVAR* pVar = m_aInSqlda->sqlvar + (nIndex - 1);
if ((pVar->sqltype & ~1) != nType)
{
@@ -686,7 +645,7 @@ void OPreparedStatement::checkParameterIndex(sal_Int32 nParameterIndex)
throw(SQLException, RuntimeException)
{
ensurePrepared();
- if ((nParameterIndex == 0) || (nParameterIndex > m_pInSqlda->sqld))
+ if ((nParameterIndex == 0) || (nParameterIndex > m_aInSqlda->sqld))
{
::dbtools::throwSQLException(
"No column " + OUString::number(nParameterIndex),
@@ -698,7 +657,7 @@ void OPreparedStatement::checkParameterIndex(sal_Int32 nParameterIndex)
void OPreparedStatement::setParameterNull(sal_Int32 nParameterIndex,
bool bSetNull)
{
- XSQLVAR* pVar = m_pInSqlda->sqlvar + (nParameterIndex - 1);
+ XSQLVAR* pVar = m_aInSqlda->sqlvar + (nParameterIndex - 1);
if (pVar->sqltype & 1)
{
if (bSetNull)
diff --git a/connectivity/source/drivers/firebird/PreparedStatement.hxx b/connectivity/source/drivers/firebird/PreparedStatement.hxx
index 688063a..b75b6b0 100644
--- a/connectivity/source/drivers/firebird/PreparedStatement.hxx
+++ b/connectivity/source/drivers/firebird/PreparedStatement.hxx
@@ -71,7 +71,7 @@ namespace connectivity
::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSetMetaData > m_xMetaData;
wrapper::Sqlda m_aOutSqlda;
- XSQLDA* m_pInSqlda;
+ wrapper::Sqlda m_aInSqlda;
void checkParameterIndex(sal_Int32 nParameterIndex)
throw(::com::sun::star::sdbc::SQLException,
::com::sun::star::uno::RuntimeException);
commit 2a7ce8dc71129c0d90ed9447bd37805a34c17139
Author: Andrzej Hunt <andrzej.hunt at collabora.com>
Date: Wed Mar 19 20:51:15 2014 +0000
firebird-sdbc: Sqlda wrapper also needs operator->.
Change-Id: I12a57dff5183365e3b05d107204d593c3d4ca6a6
diff --git a/connectivity/source/drivers/firebird/wrapper/Sqlda.hxx b/connectivity/source/drivers/firebird/wrapper/Sqlda.hxx
index f51252b..eb26d8d 100644
--- a/connectivity/source/drivers/firebird/wrapper/Sqlda.hxx
+++ b/connectivity/source/drivers/firebird/wrapper/Sqlda.hxx
@@ -32,6 +32,7 @@ namespace connectivity
Sqlda();
~Sqlda();
XSQLDA* operator&() { return mpSqlda; };
+ XSQLDA* operator->() { return mpSqlda; };
/**
* Set up the Sqlda for a given statement, is equivalent to
commit e1c1dca297055631876827d94e6a73683a68ae18
Author: Andrzej Hunt <andrzej.hunt at collabora.com>
Date: Wed Mar 19 20:42:00 2014 +0000
firebird-sdbc: Allow describe-bind for Sqlda wrapper.
Is needed to handle input XSQLDAs.
Change-Id: I7b57dd97e0ff5cebedae245e5a609f2aac1a5820
diff --git a/connectivity/source/drivers/firebird/wrapper/Sqlda.cxx b/connectivity/source/drivers/firebird/wrapper/Sqlda.cxx
index 9cca23d..f3c520c 100644
--- a/connectivity/source/drivers/firebird/wrapper/Sqlda.cxx
+++ b/connectivity/source/drivers/firebird/wrapper/Sqlda.cxx
@@ -152,7 +152,9 @@ Sqlda::~Sqlda()
}
}
-void Sqlda::describeStatement(isc_stmt_handle& aStatementHandle)
+void Sqlda::describeStatement(
+ isc_stmt_handle& aStatementHandle,
+ bool bDescribeBind)
{
if (!mpSqlda)
{
@@ -169,7 +171,13 @@ void Sqlda::describeStatement(isc_stmt_handle& aStatementHandle)
{
ISC_STATUS_ARRAY aStatusVector;
- if (isc_dsql_describe(aStatusVector,
+ if (!bDescribeBind ?
+ isc_dsql_describe(aStatusVector,
+ &aStatementHandle,
+ FIREBIRD_SQL_DIALECT,
+ mpSqlda)
+ :
+ isc_dsql_describe_bind(aStatusVector,
&aStatementHandle,
FIREBIRD_SQL_DIALECT,
mpSqlda))
@@ -184,7 +192,13 @@ void Sqlda::describeStatement(isc_stmt_handle& aStatementHandle)
mpSqlda = lcl_allocateSqlda(mpSqlda->sqld);
}
- if (isc_dsql_describe(aStatusVector,
+ if (!bDescribeBind ?
+ isc_dsql_describe(aStatusVector,
+ &aStatementHandle,
+ FIREBIRD_SQL_DIALECT,
+ mpSqlda)
+ :
+ isc_dsql_describe_bind(aStatusVector,
&aStatementHandle,
FIREBIRD_SQL_DIALECT,
mpSqlda))
diff --git a/connectivity/source/drivers/firebird/wrapper/Sqlda.hxx b/connectivity/source/drivers/firebird/wrapper/Sqlda.hxx
index 0c395db..f51252b 100644
--- a/connectivity/source/drivers/firebird/wrapper/Sqlda.hxx
+++ b/connectivity/source/drivers/firebird/wrapper/Sqlda.hxx
@@ -37,8 +37,13 @@ namespace connectivity
* Set up the Sqlda for a given statement, is equivalent to
* using isc_dsql_describe, but with all the details handled
* within.
+ *
+ * Use bDescribeBind if we are binding an input sqlda, i.e.
+ * if we want isc_dsql_describe_bind instead of isc_dsql_describe.
*/
- void describeStatement(isc_stmt_handle& aStatementHandle);
+ void describeStatement(
+ isc_stmt_handle& aStatementHandle,
+ bool bDescribeBind = false);
};
}
}
More information about the Libreoffice-commits
mailing list