User: obo Date: 06/01/16 07:04:19 Modified: /dba/connectivity/source/drivers/odbc/ OConnection.cxx
Log: INTEGRATION: CWS dba202b (1.32.36); FILE MERGED 2005/11/28 08:34:06 oj 1.32.36.1: #126818# change buildTypeInfo File Changes: Directory: /dba/connectivity/source/drivers/odbc/ ================================================= File [changed]: OConnection.cxx Url: http://dba.openoffice.org/source/browse/dba/connectivity/source/drivers/odbc/OConnection.cxx?r1=1.32&r2=1.33 Delta lines: +75 -19 --------------------- --- OConnection.cxx 8 Sep 2005 06:33:26 -0000 1.32 +++ OConnection.cxx 16 Jan 2006 15:04:15 -0000 1.33 @@ -71,6 +71,9 @@ #ifndef _DBHELPER_DBCHARSET_HXX_ #include <connectivity/dbcharset.hxx> #endif +#ifndef _CONNECTIVITY_FILE_VALUE_HXX_ +#include <connectivity/FValue.hxx> +#endif #ifndef _COMPHELPER_EXTRACT_HXX_ #include <comphelper/extract.hxx> #endif @@ -537,29 +540,82 @@ Reference< XRow> xRow(xRs,UNO_QUERY); // Information for a single SQL type + ::connectivity::ORowSetValue aValue; + ::std::vector<sal_Int32> aTypes; + Reference<XResultSetMetaData> xResultSetMetaData = Reference<XResultSetMetaDataSupplier>(xRs,UNO_QUERY)->getMetaData(); // Loop on the result set until we reach end of file - while (xRs->next ()) { OTypeInfo aInfo; - aInfo.aTypeName = xRow->getString (1); - aInfo.nType = xRow->getShort (2); - aInfo.nPrecision = xRow->getInt (3); - aInfo.aLiteralPrefix = xRow->getString (4); - aInfo.aLiteralSuffix = xRow->getString (5); - aInfo.aCreateParams = xRow->getString (6); - aInfo.bNullable = xRow->getBoolean (7) == ColumnValue::NULLABLE; - aInfo.bCaseSensitive = xRow->getBoolean (8); - aInfo.nSearchType = xRow->getShort (9); - aInfo.bUnsigned = xRow->getBoolean (10); - aInfo.bCurrency = xRow->getBoolean (11); - aInfo.bAutoIncrement = xRow->getBoolean (12); - aInfo.aLocalTypeName = xRow->getString (13); - aInfo.nMinimumScale = xRow->getShort (14); - aInfo.nMaximumScale = xRow->getShort (15); - aInfo.nNumPrecRadix = (sal_Int16)xRow->getInt(18); - - + sal_Int32 nPos = 1; + if ( aTypes.empty() ) + { + sal_Int32 nCount = xResultSetMetaData->getColumnCount(); + if ( nCount < 1 ) + nCount = 18; + aTypes.reserve(nCount+1); + aTypes.push_back(-1); + for (sal_Int32 j = 1; j <= nCount ; ++j) + aTypes.push_back(xResultSetMetaData->getColumnType(j)); + } + + aValue.fill(nPos,aTypes[nPos],xRow); + aInfo.aTypeName = aValue; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + aInfo.nType = aValue; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + aInfo.nPrecision = aValue; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + aInfo.aLiteralPrefix = aValue; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + aInfo.aLiteralSuffix = aValue; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + aInfo.aCreateParams = aValue; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + aInfo.bNullable = (sal_Int32)aValue == ColumnValue::NULLABLE; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + aInfo.bCaseSensitive = aValue; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + aInfo.nSearchType = aValue; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + aInfo.bUnsigned = aValue; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + aInfo.bCurrency = aValue; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + aInfo.bAutoIncrement = aValue; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + aInfo.aLocalTypeName = aValue; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + aInfo.nMinimumScale = aValue; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + aInfo.nMaximumScale = aValue; + nPos = 18; + aValue.fill(nPos,aTypes[nPos],xRow); + aInfo.nNumPrecRadix = aValue; + + // check if values are less than zero like it happens in a oracle jdbc driver + if( aInfo.nPrecision < 0) + aInfo.nPrecision = 0; + if( aInfo.nMinimumScale < 0) + aInfo.nMinimumScale = 0; + if( aInfo.nMaximumScale < 0) + aInfo.nMaximumScale = 0; + if( aInfo.nNumPrecRadix < 0) + aInfo.nNumPrecRadix = 10; // Now that we have the type info, save it // in the Hashtable if we don't already have an --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
