[Libreoffice-commits] core.git: connectivity/source
Andrzej J.R. Hunt
andrzej at ahunt.org
Thu Jul 18 09:15:05 PDT 2013
connectivity/source/drivers/firebird/FResultSet.cxx | 218 ++++++--------------
connectivity/source/drivers/firebird/FResultSet.hxx | 31 +-
connectivity/source/drivers/firebird/FStatement.cxx | 2
3 files changed, 90 insertions(+), 161 deletions(-)
New commits:
commit 92750635f260175ae5e37eabfbe29974b29623e7
Author: Andrzej J.R. Hunt <andrzej at ahunt.org>
Date: Thu Jul 18 18:04:42 2013 +0200
Use ORowSetValue (FValue) for storage in FResultSet.
Change-Id: I39b1f5ddf81a7e4cc881b17bf0567aadcbcb0d52
diff --git a/connectivity/source/drivers/firebird/FResultSet.cxx b/connectivity/source/drivers/firebird/FResultSet.cxx
index 48bf0ab..7331913 100644
--- a/connectivity/source/drivers/firebird/FResultSet.cxx
+++ b/connectivity/source/drivers/firebird/FResultSet.cxx
@@ -48,6 +48,7 @@
#include <com/sun/star/sdbcx/CompareBookmark.hpp>
using namespace ::comphelper;
+using namespace ::connectivity;
using namespace ::connectivity::firebird;
using namespace ::cppu;
using namespace ::osl;
@@ -109,38 +110,38 @@ void OResultSet::ensureDataAvailable() throw (SQLException)
{
m_rowCount++;
- TRow aRow(m_fieldCount);
+ m_sqlData.emplace_back(m_fieldCount);
+ TRow& rRow = m_sqlData.back();
+
XSQLVAR* pVar = m_pSqlda->sqlvar;
for (int i = 0; i < m_fieldCount; pVar++, i++)
{
-// if ((pVar->sqltype & 1) == 0) // Cannot contain NULL
-// {
-// }
-// else // Can contain NULL
-// {
-// }
-// switch (pVar->sqltype)
-// {
-// }
- if ( pVar->sqltype == SQL_SHORT ||
- pVar->sqltype == SQL_SHORT + 1 ||
- pVar->sqltype == SQL_LONG ||
- pVar->sqltype == SQL_LONG + 1 ||
- pVar->sqltype == SQL_INT64 ||
- pVar->sqltype == SQL_INT64 + 1)
+ if ((pVar->sqltype & 1) == 0) // Means: Cannot contain NULL
+ {
+ // TODO: test for null here and set as appropriate
+ }
+ else // Means: Can contain NULL
{
- aRow[i] = OString::valueOf((sal_Int16) *pVar->sqldata);
- fprintf(stderr, "N_" );
- // TODO: sqlscale here.
+ // otherwise we need to test for SQL_TYPE and SQL_TYPE+1 below
+ pVar->sqltype--;
}
- else
+ switch (pVar->sqltype)
{
- // For now store as string
- aRow[i] = OString(pVar->sqldata, pVar->sqllen);
+ case SQL_SHORT:
+ rRow[i] = (sal_Int16) *pVar->sqldata;
+ break;
+ case SQL_LONG:
+ rRow[i] = (sal_Int32) *pVar->sqldata;
+ break;
+ case SQL_INT64:
+ rRow[i] = (sal_Int64) *pVar->sqldata;
+ break;
+ // TODO: remember sqlscale for decimal types
+ default:
+ rRow[i] = OUString(pVar->sqldata, pVar->sqllen, RTL_TEXTENCODING_UTF8);
+ break;
}
}
- m_sqlData.push_back(aRow);
- fprintf( stderr, "\n" );
}
ISC_STATUS aErr = isc_dsql_free_statement(m_statusVector,
@@ -162,7 +163,7 @@ void OResultSet::ensureDataAvailable() throw (SQLException)
}
}
-const OString& OResultSet::getSqlData(sal_Int32 aRow, sal_Int32 aColumn)
+const ORowSetValueDecorator& OResultSet::getSqlData(sal_Int32 aRow, sal_Int32 aColumn)
throw(SQLException)
{
// Validate input (throws Exceptions as appropriate)
@@ -457,114 +458,87 @@ uno::Reference< XInputStream > SAL_CALL OResultSet::getCharacterStream( sal_Int3
return NULL;
}
-sal_Bool SAL_CALL OResultSet::getBoolean(sal_Int32 columnIndex)
- throw(SQLException, RuntimeException)
+// ---- Simple Numerical types -----------------------------------------------
+const ORowSetValue& OResultSet::safelyRetrieveValue(sal_Int32 columnIndex)
+ throw(SQLException)
{
- MutexGuard aGuard( m_aMutex );
+ MutexGuard aGuard(m_aMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
ensureDataAvailable();
- const OString& aData = getSqlData(m_currentRow,columnIndex);
-
- if(aData.getLength())
- {
- switch(aData[0])
- {
- case '1':
- case 't':
- case 'T':
- case 'y':
- case 'Y':
- return sal_True;
- }
- }
- return sal_False;
+ return getSqlData(m_currentRow,columnIndex).getValue();
}
-// -------------------------------------------------------------------------
-sal_Int8 SAL_CALL OResultSet::getByte( sal_Int32 columnIndex ) throw(SQLException, RuntimeException)
+sal_Bool SAL_CALL OResultSet::getBoolean(sal_Int32 columnIndex)
+ throw(SQLException, RuntimeException)
{
- (void) columnIndex;
- MutexGuard aGuard( m_aMutex );
- checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
- ensureDataAvailable();
-
-
- sal_Int8 nRet = 0;
- return nRet;
+ return safelyRetrieveValue(columnIndex);
}
-// -------------------------------------------------------------------------
-Sequence< sal_Int8 > SAL_CALL OResultSet::getBytes( sal_Int32 columnIndex ) throw(SQLException, RuntimeException)
+sal_Int8 SAL_CALL OResultSet::getByte( sal_Int32 columnIndex )
+ throw(SQLException, RuntimeException)
{
- (void) columnIndex;
- checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
- ensureDataAvailable();
- MutexGuard aGuard( m_aMutex );
-
- return Sequence< sal_Int8 >();
+ return safelyRetrieveValue(columnIndex);
}
-// -------------------------------------------------------------------------
-Date SAL_CALL OResultSet::getDate( sal_Int32 columnIndex ) throw(SQLException, RuntimeException)
+Sequence< sal_Int8 > SAL_CALL OResultSet::getBytes(sal_Int32 columnIndex)
+ throw(SQLException, RuntimeException)
{
- (void) columnIndex;
- MutexGuard aGuard( m_aMutex );
- checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
- ensureDataAvailable();
-
+ return safelyRetrieveValue(columnIndex);
+}
- Date nRet;
- return nRet;
+sal_Int16 SAL_CALL OResultSet::getShort(sal_Int32 columnIndex)
+ throw(SQLException, RuntimeException)
+{
+ return safelyRetrieveValue(columnIndex);
}
-double SAL_CALL OResultSet::getDouble(sal_Int32 columnIndex)
+sal_Int32 SAL_CALL OResultSet::getInt(sal_Int32 columnIndex)
throw(SQLException, RuntimeException)
{
- (void) columnIndex;
- MutexGuard aGuard( m_aMutex );
- checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
- ensureDataAvailable();
+ return safelyRetrieveValue(columnIndex);
+}
- const OString& aData = getSqlData(m_currentRow,columnIndex);
- return aData.toDouble();
+sal_Int64 SAL_CALL OResultSet::getLong(sal_Int32 columnIndex)
+ throw(SQLException, RuntimeException)
+{
+ return safelyRetrieveValue(columnIndex);
}
float SAL_CALL OResultSet::getFloat(sal_Int32 columnIndex)
throw(SQLException, RuntimeException)
{
- MutexGuard aGuard( m_aMutex );
- checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
- ensureDataAvailable();
+ return safelyRetrieveValue(columnIndex);
+}
- const OString& aData = getSqlData(m_currentRow,columnIndex);
- return aData.toFloat();
+double SAL_CALL OResultSet::getDouble(sal_Int32 columnIndex)
+ throw(SQLException, RuntimeException)
+{
+ return safelyRetrieveValue(columnIndex);
}
-sal_Int32 SAL_CALL OResultSet::getInt(sal_Int32 columnIndex)
+// ---- More complex types ---------------------------------------------------
+OUString SAL_CALL OResultSet::getString(sal_Int32 columnIndex)
throw(SQLException, RuntimeException)
{
- MutexGuard aGuard( m_aMutex );
- checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
- ensureDataAvailable();
+ return safelyRetrieveValue(columnIndex);
+}
- // TODO: check in the sqlda somehow?
- const OString& aData = getSqlData(m_currentRow,columnIndex);
- return aData.toInt32();
+Time SAL_CALL OResultSet::getTime( sal_Int32 columnIndex ) throw(SQLException, RuntimeException)
+{
+ return safelyRetrieveValue(columnIndex);
}
-sal_Int64 SAL_CALL OResultSet::getLong(sal_Int32 columnIndex)
- throw(SQLException, RuntimeException)
+DateTime SAL_CALL OResultSet::getTimestamp( sal_Int32 columnIndex ) throw(SQLException, RuntimeException)
{
- MutexGuard aGuard( m_aMutex );
- checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
- ensureDataAvailable();
+ return safelyRetrieveValue(columnIndex);
+}
- const OString& aData = getSqlData(m_currentRow,columnIndex);
- return aData.toInt64();
+Date SAL_CALL OResultSet::getDate( sal_Int32 columnIndex ) throw(SQLException, RuntimeException)
+{
+ return safelyRetrieveValue(columnIndex);
}
// -------------------------------------------------------------------------
-
uno::Reference< XResultSetMetaData > SAL_CALL OResultSet::getMetaData( ) throw(SQLException, RuntimeException)
{
MutexGuard aGuard( m_aMutex );
@@ -632,57 +606,7 @@ Any SAL_CALL OResultSet::getObject( sal_Int32 columnIndex, const uno::Reference<
return Any();
}
-sal_Int16 SAL_CALL OResultSet::getShort(sal_Int32 columnIndex)
- throw(SQLException, RuntimeException)
-{
- MutexGuard aGuard( m_aMutex );
- checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
- ensureDataAvailable();
-
- const OString& aData = getSqlData(m_currentRow,columnIndex);
- return aData.toInt32();
-}
-
-OUString SAL_CALL OResultSet::getString(sal_Int32 columnIndex)
- throw(SQLException, RuntimeException)
-{
- MutexGuard aGuard( m_aMutex );
- checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
- ensureDataAvailable();
- checkColumnIndex( columnIndex );
- checkRowIndex( sal_True /* must be on row */ );
-
- return OStringToOUString(getSqlData(m_currentRow,columnIndex),
- RTL_TEXTENCODING_UTF8);
-}
-// -------------------------------------------------------------------------
-
-Time SAL_CALL OResultSet::getTime( sal_Int32 columnIndex ) throw(SQLException, RuntimeException)
-{
- (void) columnIndex;
- checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
- ensureDataAvailable();
-
- MutexGuard aGuard( m_aMutex );
- Time nRet;
- return nRet;
-}
-// -------------------------------------------------------------------------
-
-
-DateTime SAL_CALL OResultSet::getTimestamp( sal_Int32 columnIndex ) throw(SQLException, RuntimeException)
-{
- (void) columnIndex;
- checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
- ensureDataAvailable();
-
-
- MutexGuard aGuard( m_aMutex );
-
- DateTime nRet;
- return nRet;
-}
// -------------------------------------------------------------------------
diff --git a/connectivity/source/drivers/firebird/FResultSet.hxx b/connectivity/source/drivers/firebird/FResultSet.hxx
index 3b00fd7..3230186 100644
--- a/connectivity/source/drivers/firebird/FResultSet.hxx
+++ b/connectivity/source/drivers/firebird/FResultSet.hxx
@@ -36,30 +36,34 @@
#ifndef CONNECTIVITY_SRESULTSET_HXX
#define CONNECTIVITY_SRESULTSET_HXX
+#include "FStatement.hxx"
+
+#include <ibase.h>
+
+#include <connectivity/FValue.hxx>
+#include <connectivity/OSubComponent.hxx>
+#include <cppuhelper/compbase12.hxx>
+
+#include <com/sun/star/util/XCancellable.hpp>
+#include <com/sun/star/sdbc/XCloseable.hpp>
+#include <com/sun/star/sdbc/XColumnLocate.hpp>
#include <com/sun/star/sdbc/XResultSet.hpp>
#include <com/sun/star/sdbc/XRow.hpp>
#include <com/sun/star/sdbc/XResultSetMetaDataSupplier.hpp>
-#include <com/sun/star/sdbc/XCloseable.hpp>
-#include <com/sun/star/sdbc/XColumnLocate.hpp>
-#include <com/sun/star/util/XCancellable.hpp>
-#include <com/sun/star/sdbc/XWarningsSupplier.hpp>
#include <com/sun/star/sdbc/XResultSetUpdate.hpp>
#include <com/sun/star/sdbc/XRowUpdate.hpp>
-#include <com/sun/star/sdbcx/XRowLocate.hpp>
+#include <com/sun/star/sdbc/XWarningsSupplier.hpp>
#include <com/sun/star/sdbcx/XDeleteRows.hpp>
-#include <cppuhelper/compbase12.hxx>
-#include "FStatement.hxx"
-#include "connectivity/OSubComponent.hxx"
+#include <com/sun/star/sdbcx/XRowLocate.hpp>
-#include <ibase.h>
namespace connectivity
{
namespace firebird
{
- typedef std::vector< ::rtl::OString > TRow;
- typedef std::vector< TRow > TTable;
+ typedef ::std::vector< ::connectivity::ORowSetValueDecorator > TRow;
+ typedef ::std::vector< TRow > TTable;
/*
** OResultSet
@@ -101,9 +105,12 @@ namespace connectivity
void ensureDataAvailable()
throw (::com::sun::star::sdbc::SQLException);
- const OString& getSqlData(sal_Int32 aRow, sal_Int32 aColumn)
+ const ORowSetValueDecorator& getSqlData(sal_Int32 aRow, sal_Int32 aColumn)
throw (::com::sun::star::sdbc::SQLException);
+ const ::connectivity::ORowSetValue& safelyRetrieveValue(sal_Int32 columnIndex)
+ throw(::com::sun::star::sdbc::SQLException);
+
// OPropertyArrayUsageHelper
virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const;
// OPropertySetHelper
diff --git a/connectivity/source/drivers/firebird/FStatement.cxx b/connectivity/source/drivers/firebird/FStatement.cxx
index 728b9c8..ac14ac6 100644
--- a/connectivity/source/drivers/firebird/FStatement.cxx
+++ b/connectivity/source/drivers/firebird/FStatement.cxx
@@ -33,8 +33,6 @@
*
*************************************************************************/
-#include <stdio.h>
-
#include "propertyids.hxx"
#include "FStatement.hxx"
#include "FConnection.hxx"
More information about the Libreoffice-commits
mailing list