connectivity/source/drivers/firebird/DatabaseMetaData.cxx | 2 connectivity/source/drivers/firebird/PreparedStatement.cxx | 112 +++---------- connectivity/source/drivers/firebird/PreparedStatement.hxx | 6 connectivity/source/drivers/firebird/Util.cxx | 6 4 files changed, 43 insertions(+), 83 deletions(-)
New commits: commit 0501026fb882de656887cb5af696f1cf7ceab3e9 Author: Andrzej J.R. Hunt <andr...@ahunt.org> Date: Wed Aug 28 17:47:45 2013 +0100 Implement set[Float|Double]. (firebird-sdbc) Change-Id: I70d5ab9bacdeabe6c4edf6f70a9ba283b46c180f diff --git a/connectivity/source/drivers/firebird/PreparedStatement.cxx b/connectivity/source/drivers/firebird/PreparedStatement.cxx index 3078c7d..fdbb0a4 100644 --- a/connectivity/source/drivers/firebird/PreparedStatement.cxx +++ b/connectivity/source/drivers/firebird/PreparedStatement.cxx @@ -376,6 +376,19 @@ void SAL_CALL OPreparedStatement::setLong(sal_Int32 nIndex, sal_Int64 nValue) { setValue< sal_Int64 >(nIndex, nValue, SQL_INT64); } + +void SAL_CALL OPreparedStatement::setFloat(sal_Int32 nIndex, float nValue) + throw(SQLException, RuntimeException) +{ + setValue< sal_Int64 >(nIndex, nValue, SQL_FLOAT); +} + +void SAL_CALL OPreparedStatement::setDouble(sal_Int32 nIndex, double nValue) + throw(SQLException, RuntimeException) +{ + setValue< sal_Int64 >(nIndex, nValue, SQL_DOUBLE); // TODO: SQL_D_FLOAT? +} + // ------------------------------------------------------------------------- void SAL_CALL OPreparedStatement::setDate( sal_Int32 parameterIndex, const Date& aData ) throw(SQLException, RuntimeException) @@ -409,27 +422,6 @@ void SAL_CALL OPreparedStatement::setTimestamp( sal_Int32 parameterIndex, const } // ------------------------------------------------------------------------- -void SAL_CALL OPreparedStatement::setDouble( sal_Int32 parameterIndex, double x ) throw(SQLException, RuntimeException) -{ - (void) parameterIndex; - (void) x; - ::osl::MutexGuard aGuard( m_pConnection->getMutex() ); - checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed); - -} - -// ------------------------------------------------------------------------- - -void SAL_CALL OPreparedStatement::setFloat( sal_Int32 parameterIndex, float x ) throw(SQLException, RuntimeException) -{ - (void) parameterIndex; - (void) x; - ::osl::MutexGuard aGuard( m_pConnection->getMutex() ); - checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed); - -} -// ------------------------------------------------------------------------- - void SAL_CALL OPreparedStatement::setClob( sal_Int32 parameterIndex, const Reference< XClob >& x ) throw(SQLException, RuntimeException) { (void) parameterIndex; commit 9310cf2b9f121cd2b11a06596e0db44244fba59b Author: Andrzej J.R. Hunt <andr...@ahunt.org> Date: Wed Aug 28 17:46:51 2013 +0100 Firebird uses "DOUBLE PRECISION" for doubles. (firebird-sdbc) Change-Id: I99bac2cfde956d2b91dce33fc12ce9044a9c219a diff --git a/connectivity/source/drivers/firebird/DatabaseMetaData.cxx b/connectivity/source/drivers/firebird/DatabaseMetaData.cxx index 215d84f..c35e03d 100644 --- a/connectivity/source/drivers/firebird/DatabaseMetaData.cxx +++ b/connectivity/source/drivers/firebird/DatabaseMetaData.cxx @@ -949,7 +949,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo() aRow[15] = new ORowSetValueDecorator(sal_Int16(7)); // Max scale aResults.push_back(aRow); // SQL_DOUBLE - aRow[1] = new ORowSetValueDecorator(OUString("REAL")); + aRow[1] = new ORowSetValueDecorator(OUString("DOUBLE PRECISION")); aRow[2] = new ORowSetValueDecorator(getColumnTypeFromFBType(SQL_DOUBLE)); aRow[3] = new ORowSetValueDecorator(sal_Int16(15)); // Precision aRow[14] = new ORowSetValueDecorator(sal_Int16(1)); // Minimum scale commit 3eddbbec432bf0aa66a4edc4ef68ec83ecac4ee4 Author: Andrzej J.R. Hunt <andr...@ahunt.org> Date: Wed Aug 28 17:29:02 2013 +0100 SQL_FLOAT corresponds to DataType::FLOAT. Change-Id: Id5e2aab669ba047e9ecb392187aae7c4aa384dda diff --git a/connectivity/source/drivers/firebird/Util.cxx b/connectivity/source/drivers/firebird/Util.cxx index 6d176db..6941835 100644 --- a/connectivity/source/drivers/firebird/Util.cxx +++ b/connectivity/source/drivers/firebird/Util.cxx @@ -69,11 +69,11 @@ sal_Int32 firebird::getColumnTypeFromFBType(short aType) case SQL_LONG: return DataType::INTEGER; case SQL_FLOAT: - return DataType::REAL; + return DataType::FLOAT; case SQL_DOUBLE: return DataType::DOUBLE; case SQL_D_FLOAT: - return DataType::FLOAT; + return DataType::DOUBLE; case SQL_TIMESTAMP: return DataType::TIMESTAMP; case SQL_BLOB: commit c2602a4c2e4bd76634c90adc495a9e79a62974ba Author: Andrzej J.R. Hunt <andr...@ahunt.org> Date: Wed Aug 28 17:11:42 2013 +0100 Use correct type for SQL_FLOAT. (firebird-sdbc) Change-Id: Ic27e886643128edeb5b2d5c81e86681f4dd8d33b diff --git a/connectivity/source/drivers/firebird/Util.cxx b/connectivity/source/drivers/firebird/Util.cxx index 47661db..6d176db 100644 --- a/connectivity/source/drivers/firebird/Util.cxx +++ b/connectivity/source/drivers/firebird/Util.cxx @@ -207,7 +207,7 @@ void firebird::mallocSQLVAR(XSQLDA* pSqlda) pVar->sqldata = (char *)malloc(sizeof(long)); break; case SQL_FLOAT: - pVar->sqldata = (char *)malloc(sizeof(double)); + pVar->sqldata = (char *)malloc(sizeof(float)); break; case SQL_DOUBLE: pVar->sqldata = (char *)malloc(sizeof(double)); commit fe8e3be835cce5fc3e22f550567dd2d650766657 Author: Andrzej J.R. Hunt <andr...@ahunt.org> Date: Wed Aug 28 16:30:40 2013 +0100 Remove unused code (firebird-sdbc) Change-Id: I88f47ee442ade499c7f4018ce8b1ffe54b362067 diff --git a/connectivity/source/drivers/firebird/PreparedStatement.cxx b/connectivity/source/drivers/firebird/PreparedStatement.cxx index ffa3124..3078c7d 100644 --- a/connectivity/source/drivers/firebird/PreparedStatement.cxx +++ b/connectivity/source/drivers/firebird/PreparedStatement.cxx @@ -106,22 +106,7 @@ void OPreparedStatement::ensurePrepared() 1, m_pInSqlda); } -// char aItems[] = { -// isc_info_sql_num_variables -// }; -// char aResultBuffer[8]; -// isc_dsql_sql_info(m_statusVector, -// &m_aStatementHandle, -// sizeof(aItems), -// aItems, -// sizeof(aResultBuffer), -// aResultBuffer); -// if (aResultBuffer[0] == isc_info_sql_num_variables) -// { -// short aVarLength = (short) isc_vax_integer(aResultBuffer+1, 2); -// m_nNumParams = isc_vax_integer(aResultBuffer+3, aVarLength); -// } -// } + if (!aErr) mallocSQLVAR(m_pInSqlda); else commit c338f1cf704ac5061d6eb290beb69d7503c95eee Author: Andrzej J.R. Hunt <andr...@ahunt.org> Date: Wed Aug 28 16:09:54 2013 +0100 Use template to set integer parameters. (firebird-sdbc) Change-Id: I8a6c9f335574196a50827db7eb44b82f9ea4df16 diff --git a/connectivity/source/drivers/firebird/PreparedStatement.cxx b/connectivity/source/drivers/firebird/PreparedStatement.cxx index 2c59931..ffa3124 100644 --- a/connectivity/source/drivers/firebird/PreparedStatement.cxx +++ b/connectivity/source/drivers/firebird/PreparedStatement.cxx @@ -345,18 +345,9 @@ void SAL_CALL OPreparedStatement::setBoolean(sal_Int32 nIndex, sal_Bool x) // it might be best to just determine the db type and set as appropriate? } -void SAL_CALL OPreparedStatement::setByte(sal_Int32 nIndex, sal_Int8 nValue) - throw(SQLException, RuntimeException) -{ - (void) nIndex; - (void) nValue; - ::dbtools::throwFunctionNotSupportedException("setByte not supported in firebird", - *this, - Any()); -} - -void SAL_CALL OPreparedStatement::setShort(sal_Int32 nIndex, sal_Int16 nValue) - throw(SQLException, RuntimeException) +template <typename T> +void OPreparedStatement::setValue(sal_Int32 nIndex, T nValue, ISC_SHORT nType) + throw(SQLException) { MutexGuard aGuard( m_pConnection->getMutex() ); checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed); @@ -367,52 +358,38 @@ void SAL_CALL OPreparedStatement::setShort(sal_Int32 nIndex, sal_Int16 nValue) XSQLVAR* pVar = m_pInSqlda->sqlvar + (nIndex - 1); - int dtype = (pVar->sqltype & ~1); // drop flag bit for now - - if (dtype != SQL_SHORT) + if ((pVar->sqltype & ~1) != nType) throw SQLException(); // TODO: cast instead? memcpy(pVar->sqldata, &nValue, sizeof(nValue)); } -void SAL_CALL OPreparedStatement::setInt(sal_Int32 nIndex, sal_Int32 nValue) +void SAL_CALL OPreparedStatement::setByte(sal_Int32 nIndex, sal_Int8 nValue) throw(SQLException, RuntimeException) { - MutexGuard aGuard( m_pConnection->getMutex() ); - checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed); - ensurePrepared(); - - checkParameterIndex(nIndex); - setParameterNull(nIndex, false); - - XSQLVAR* pVar = m_pInSqlda->sqlvar + (nIndex - 1); - - int dtype = (pVar->sqltype & ~1); // drop flag bit for now + (void) nIndex; + (void) nValue; + ::dbtools::throwFunctionNotSupportedException("setByte not supported in firebird", + *this, + Any()); +} - if (dtype != SQL_LONG) - throw SQLException(); // TODO: cast instead? +void SAL_CALL OPreparedStatement::setShort(sal_Int32 nIndex, sal_Int16 nValue) + throw(SQLException, RuntimeException) +{ + setValue< sal_Int16 >(nIndex, nValue, SQL_SHORT); +} - memcpy(pVar->sqldata, &nValue, sizeof(nValue)); +void SAL_CALL OPreparedStatement::setInt(sal_Int32 nIndex, sal_Int32 nValue) + throw(SQLException, RuntimeException) +{ + setValue< sal_Int32 >(nIndex, nValue, SQL_LONG); } void SAL_CALL OPreparedStatement::setLong(sal_Int32 nIndex, sal_Int64 nValue) throw(SQLException, RuntimeException) { - MutexGuard aGuard( m_pConnection->getMutex() ); - checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed); - ensurePrepared(); - - checkParameterIndex(nIndex); - setParameterNull(nIndex, false); - - XSQLVAR* pVar = m_pInSqlda->sqlvar + (nIndex - 1); - - int dtype = (pVar->sqltype & ~1); // drop flag bit for now - - if (dtype != SQL_INT64) - throw SQLException(); // TODO: cast instead? - - memcpy(pVar->sqldata, &nValue, sizeof(nValue)); + setValue< sal_Int64 >(nIndex, nValue, SQL_INT64); } // ------------------------------------------------------------------------- diff --git a/connectivity/source/drivers/firebird/PreparedStatement.hxx b/connectivity/source/drivers/firebird/PreparedStatement.hxx index 4434a64..5392a93 100644 --- a/connectivity/source/drivers/firebird/PreparedStatement.hxx +++ b/connectivity/source/drivers/firebird/PreparedStatement.hxx @@ -74,6 +74,12 @@ namespace connectivity void checkParameterIndex(sal_Int32 nParameterIndex) throw(::com::sun::star::sdbc::SQLException); + /** + * Set a numeric value in the input SQLDA. If the destination + * parameter is not of nType then an Exception will be thrown. + */ + template <typename T> void setValue(sal_Int32 nIndex, T nValue, ISC_SHORT nType) + throw(::com::sun::star::sdbc::SQLException); void setParameterNull(sal_Int32 nParameterIndex, bool bSetNull = true); void ensurePrepared() _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits