Modified:
MYODBCC/include/MYODBCC.h
MYODBCDia/MYODBCDiaLib/MYODBCDia.cpp
MYODBCDia/MYODBCDiaLib/MYODBCDiaLib.pro
MYODBCDia/MYODBCDiaLib/MYODBCDiaRecord.cpp
MYODBCDia/include/MYODBCDia.h
MYODBCDia/include/MYODBCDiaRecord.h
Log:
UNICODE:
- MYODBCDia (diagnostics) library now builds
Modified: MYODBCC/include/MYODBCC.h
===================================================================
--- MYODBCC/include/MYODBCC.h 2005-12-29 09:54:08 UTC (rev 21)
+++ MYODBCC/include/MYODBCC.h 2005-12-29 19:48:18 UTC (rev 22)
@@ -154,6 +154,7 @@
#ifdef WIN32
#define MYODBCCfprintf _ftprintf_s
#define MYODBCCstrlen wcslen
+ #define MYODBCCstrncpy wcsncpy_s
#else
#endif
Modified: MYODBCDia/MYODBCDiaLib/MYODBCDia.cpp
===================================================================
--- MYODBCDia/MYODBCDiaLib/MYODBCDia.cpp 2005-12-29 09:54:08 UTC (rev 21)
+++ MYODBCDia/MYODBCDiaLib/MYODBCDia.cpp 2005-12-29 19:48:18 UTC (rev 22)
@@ -104,17 +104,8 @@
\retval SQL_SUCCESS_WITH_INFO Altered value used.
\retval SQL_ERROR General error.
*/
-SQLRETURN MYODBCDia::setField( SQLSMALLINT nRecord /* 1 based */, SQLSMALLINT nField,
SQLPOINTER pValue, SQLINTEGER nStringLength )
+SQLRETURN MYODBCDia::setField( SQLSMALLINT /* nRecord */ /* 1 based */, SQLSMALLINT
nField, SQLPOINTER pValue, SQLINTEGER /* nStringLength */ )
{
- MYODBC_DIA_PTR pDia = (MYODBC_DIA_PTR)hDia;
-
-#if MYODBC_DEV > 0
- if ( !hDia )
- MYODBCCAssert( "hDia" );
- if ( MYODBCRttiType( hDia ) != MYODBC_RTTI_DIA )
- MYODBCCAssert( "hDia" );
-#endif
-
/*
These are the fields we know about listed by category
(header/record) and in _alpha_ order.
@@ -130,7 +121,7 @@
return SQL_ERROR;
case SQL_DIAG_ROW_COUNT:
- pDia->diag_row_count = (SQLINTEGER)pValue;
+ setRowCount( (SQLINTEGER)pValue );
break;
/* RECORD FIELD */
@@ -267,7 +258,7 @@
\sa MYODBCDiaAppend
*/
-const MYODBCDiaRecord &MYODBCDia::getRecord( SQLSMALLINT nRecord /* 1 based */ )
+MYODBCDiaRecord *MYODBCDia::getRecord( SQLSMALLINT nRecord /* 1 based */ )
{
return listRecords.at(nRecord - 1);
}
@@ -293,16 +284,11 @@
*/
SQLRETURN MYODBCDia::getField( SQLSMALLINT nRecord /* 1 based */, SQLSMALLINT nField,
SQLPOINTER pBuffer, SQLSMALLINT nBufferLength, SQLSMALLINT *pnStrLenPtr )
{
- MYODBC_DIA_PTR pDia = (MYODBC_DIA_PTR)hDia;
- MYODBC_DIA_REC_PTR pDiaRec;
- SQLSMALLINT nStrLen;
+ SQLSMALLINT nStrLen;
-#if MYODBC_DEV > 0
- if ( !hDia )
- MYODBCCAssert( "hDia" );
- if ( MYODBCRttiType( hDia ) != MYODBC_RTTI_DIA )
- MYODBCCAssert( "hDia" );
-#endif
+ /* sanity checks */
+ if ( nRecord < 1 )
+ return SQL_ERROR;
/* use dummy when no pnStrLenPtr */
if ( !pnStrLenPtr )
@@ -316,153 +302,57 @@
{
/* GET HEADER FIELD */
case SQL_DIAG_CURSOR_ROW_COUNT:
- *(SQLINTEGER*)pBuffer = pDia->diag_cursor_row_count;
+ *(SQLINTEGER*)pBuffer = nCursorRowCount;
break;
case SQL_DIAG_DYNAMIC_FUNCTION:
- if ( !MYODBCCStrCopyOut( (SQLCHAR*)pBuffer, nBufferLength,
pDia->diag_dynamic_function, (SQLINTEGER*)pnStrLenPtr ) )
- return SQL_SUCCESS_WITH_INFO;
+ {
+ QString stringDynamicFunction = getDynamicFunction();
+ if ( nBufferLength < 1 || stringDynamicFunction.isNull() )
+ return SQL_ERROR;
+
+ MYODBCCstrncpy( (SQLWCHAR*)pBuffer, nBufferLength / sizeof(SQLWCHAR),
stringDynamicFunction.utf16(), _TRUNCATE );
+ *pnStrLenPtr = stringDynamicFunction.length() * sizeof(SQLWCHAR);
+
+ if ( *pnStrLenPtr > nBufferLength )
+ return SQL_SUCCESS_WITH_INFO;
+ }
break;
case SQL_DIAG_DYNAMIC_FUNCTION_CODE:
- *(SQLINTEGER*)pBuffer = pDia->diag_dynamic_function_code;
+ *(SQLINTEGER*)pBuffer = nDynamicFunctionCode;
break;
case SQL_DIAG_NUMBER:
- *(SQLINTEGER*)pBuffer = pDia->diag_number;
+ *(SQLINTEGER*)pBuffer = getNumber();
break;
case SQL_DIAG_RETURNCODE:
- *(SQLRETURN*)pBuffer = pDia->diag_returncode;
+ *(SQLRETURN*)pBuffer = nReturnCode;
break;
case SQL_DIAG_ROW_COUNT:
- *(SQLINTEGER*)pBuffer = pDia->diag_row_count;
+ *(SQLINTEGER*)pBuffer = nRowCount;
break;
- /* GET RECORD FIELD */
+ /* GET RECORD FIELD */
case SQL_DIAG_CLASS_ORIGIN:
- if ( nBufferLength < 0 )
- return SQL_ERROR;
- if ( nRecord < 1 )
- return SQL_ERROR;
- if ( nRecord > pDia->diag_number )
- return SQL_NO_DATA;
-
- pDiaRec = MYODBCDiaGet( hDia, nRecord );
- if ( !MYODBCCStrCopyOut( (SQLCHAR*)pBuffer, nBufferLength,
pDiaRec->diag_class_origin, (SQLINTEGER*)pnStrLenPtr ) )
- return SQL_SUCCESS_WITH_INFO;
- break;
-
case SQL_DIAG_COLUMN_NUMBER:
- if ( nRecord < 1 )
- return SQL_ERROR;
- if ( nRecord > pDia->diag_number )
- return SQL_NO_DATA;
-
- pDiaRec = MYODBCDiaGet( hDia, nRecord );
- *(SQLINTEGER*)pBuffer = pDiaRec->diag_column_number;
- break;
-
case SQL_DIAG_CONNECTION_NAME:
- if ( nBufferLength < 0 )
- return SQL_ERROR;
- if ( nRecord < 1 )
- return SQL_ERROR;
- if ( nRecord > pDia->diag_number )
- return SQL_NO_DATA;
-
- pDiaRec = MYODBCDiaGet( hDia, nRecord );
- if ( !MYODBCCStrCopyOut( (SQLCHAR*)pBuffer, nBufferLength,
pDiaRec->diag_connection_name, (SQLINTEGER*)pnStrLenPtr ) )
- return SQL_SUCCESS_WITH_INFO;
- break;
-
case SQL_DIAG_MESSAGE_TEXT:
- if ( nBufferLength < 0 )
- return SQL_ERROR;
- if ( nRecord < 1 )
- return SQL_ERROR;
- if ( nRecord > pDia->diag_number )
- return SQL_NO_DATA;
-
- pDiaRec = MYODBCDiaGet( hDia, nRecord );
- if ( !MYODBCCStrCopyOut( (SQLCHAR*)pBuffer, nBufferLength,
pDiaRec->diag_message_text, (SQLINTEGER*)pnStrLenPtr ) )
- return SQL_SUCCESS_WITH_INFO;
- break;
-
case SQL_DIAG_NATIVE:
- if ( nRecord < 1 )
- return SQL_ERROR;
- if ( nRecord > pDia->diag_number )
- return SQL_NO_DATA;
-
- pDiaRec = MYODBCDiaGet( hDia, nRecord );
- *(SQLINTEGER*)pBuffer = pDiaRec->diag_native;
- break;
-
case SQL_DIAG_ROW_NUMBER:
- if ( nRecord < 1 )
- return SQL_ERROR;
- if ( nRecord > pDia->diag_number )
- return SQL_NO_DATA;
-
- pDiaRec = MYODBCDiaGet( hDia, nRecord );
- *(SQLINTEGER*)pBuffer = pDiaRec->diag_row_number;
- break;
-
case SQL_DIAG_SERVER_NAME:
- if ( nBufferLength < 0 )
- return SQL_ERROR;
- if ( nRecord < 1 )
- return SQL_ERROR;
- if ( nRecord > pDia->diag_number )
- return SQL_NO_DATA;
-
- pDiaRec = MYODBCDiaGet( hDia, nRecord );
- if ( !MYODBCCStrCopyOut( (SQLCHAR*)pBuffer, nBufferLength,
pDiaRec->diag_server_name, (SQLINTEGER*)pnStrLenPtr ) )
- return SQL_SUCCESS_WITH_INFO;
- break;
-
case SQL_DIAG_SQLSTATE:
- {
- SQLINTEGER n;
-
- if ( nBufferLength < 0 )
- return SQL_ERROR;
- if ( nRecord < 1 )
- return SQL_ERROR;
- if ( nRecord > pDia->diag_number )
- return SQL_NO_DATA;
-
- pDiaRec = MYODBCDiaGet( hDia, nRecord );
- if ( !MYODBCCStrCopyOut( (SQLCHAR*)pBuffer,
- nBufferLength,
- pDiaRec->diag_sqlstate,
- &n ) )
- {
- *pnStrLenPtr = (SQLSMALLINT)n;
- return SQL_SUCCESS_WITH_INFO;
- }
- *pnStrLenPtr = (SQLSMALLINT)n;
- }
- break;
-
case SQL_DIAG_SUBCLASS_ORIGIN:
- if ( nBufferLength < 0 )
- return SQL_ERROR;
- if ( nRecord < 1 )
- return SQL_ERROR;
- if ( nRecord > pDia->diag_number )
+ if ( nRecord > listRecords.count() )
return SQL_NO_DATA;
+ return listRecords[nRecord]->getField( nField, pBuffer, nBufferLength,
pnStrLenPtr );
- pDiaRec = MYODBCDiaGet( hDia, nRecord );
- if ( !MYODBCCStrCopyOut( (SQLCHAR*)pBuffer, nBufferLength,
pDiaRec->diag_sqlstate, (SQLINTEGER*)pnStrLenPtr ) )
- return SQL_SUCCESS_WITH_INFO;
- break;
-
default:
return SQL_ERROR;
}
+
return SQL_SUCCESS;
}
@@ -522,12 +412,10 @@
SQLRETURN MYODBCDia::doAppend( MYODBC_DIA_ID nState, SQLINTEGER nNative, const QString
&stringMessage, SQLINTEGER nRowNumber, SQLINTEGER nColumnNumber )
{
/* sanity checks */
- if ( nState >= MYODBC_DIA_MAX )
- MYODBCCAssert( "nState out of range" );
+ Q_ASSERT( nState >= MYODBC_DIA_MAX );
- MYODBCDiaRecord pdiarecord = new MYODBCDiaRecord( this, nState );
- pdiarecord->setConnectionName( "unknown connection name" ); /*! \todo get real
connection name */
- pdiarecord->setServerName( "unknown server name" ); /*! \todo get real
server name */
+ MYODBCDiaRecord *pdiarecord = new MYODBCDiaRecord( this, nState );
+ pdiarecord->setNative( nNative );
pdiarecord->setColumnNumber( nColumnNumber );
pdiarecord->setRowNumber( nRowNumber );
pdiarecord->setMessage( stringMessage );
@@ -547,7 +435,7 @@
\sa MYODBCDiaAlloc
MYODBCDiaFree
*/
-void MYODBCDia::clear()
+void MYODBCDia::doClear()
{
/* delete any records we may have */
while (!listRecords.isEmpty())
@@ -592,6 +480,8 @@
return false;
delete listRecords[nRecord - 1];
+
+ return true;
}
/*!
@@ -611,7 +501,7 @@
stream << "SQL_DIAG_RETURNCODE : " << rval.nReturnCode <<
endl;
stream << "SQL_DIAG_ROW_COUNT : " << rval.nRowCount <<
endl;
- QListIterator<MYODBCDiaRecord*> i( listRecords );
+ QListIterator<MYODBCDiaRecord*> i( rval.listRecords );
while ( i.hasNext() )
{
stream << "Record..." << endl;
Modified: MYODBCDia/MYODBCDiaLib/MYODBCDiaLib.pro
===================================================================
--- MYODBCDia/MYODBCDiaLib/MYODBCDiaLib.pro 2005-12-29 09:54:08 UTC (rev 21)
+++ MYODBCDia/MYODBCDiaLib/MYODBCDiaLib.pro 2005-12-29 19:48:18 UTC (rev 22)
@@ -39,6 +39,6 @@
MYODBCDiaInternal.h
SOURCES = \
- MYODBCDia.cpp \
+ MYODBCDia.cpp \
MYODBCDiaRecord.cpp
Modified: MYODBCDia/MYODBCDiaLib/MYODBCDiaRecord.cpp
===================================================================
--- MYODBCDia/MYODBCDiaLib/MYODBCDiaRecord.cpp 2005-12-29 09:54:08 UTC (rev 21)
+++ MYODBCDia/MYODBCDiaLib/MYODBCDiaRecord.cpp 2005-12-29 19:48:18 UTC (rev 22)
@@ -212,10 +212,6 @@
return true;
}
-SQLRETURN MYODBCDiaRecord::setField( SQLSMALLINT nField, SQLPOINTER pValue, SQLINTEGER
nStringLength )
-{
-}
-
QString MYODBCDiaRecord::getClassOrigin()
{
return MYODBCDia_pStates[nState].diag_class_origin;
@@ -234,7 +230,7 @@
QString MYODBCDiaRecord::getMessageText()
{
/* this message formated according to odbc spec */
- if ( diag_native )
+ if ( nNative )
{
/* server message */
if ( stringMessage.isEmpty() )
@@ -311,6 +307,118 @@
return pdiaOwner;
}
+SQLRETURN MYODBCDiaRecord::getField( SQLSMALLINT nField, SQLPOINTER pBuffer, SQLSMALLINT
nBufferLength, SQLSMALLINT *pnStrLenPtr )
+{
+ SQLSMALLINT nStrLen;
+
+ /* use dummy when no pnStrLenPtr */
+ if ( !pnStrLenPtr )
+ pnStrLenPtr = &nStrLen;
+
+ /* which record field? */
+ switch ( nField )
+ {
+ case SQL_DIAG_CLASS_ORIGIN:
+ {
+ QString stringClassOrigin = getClassOrigin();
+ if ( nBufferLength < 1 || stringClassOrigin.isNull() )
+ return SQL_ERROR;
+
+ MYODBCCstrncpy( (SQLWCHAR*)pBuffer, nBufferLength / sizeof(SQLWCHAR),
stringClassOrigin.utf16(), _TRUNCATE );
+ *pnStrLenPtr = stringClassOrigin.length() * sizeof(SQLWCHAR);
+
+ if ( *pnStrLenPtr > nBufferLength )
+ return SQL_SUCCESS_WITH_INFO;
+ }
+ break;
+
+ case SQL_DIAG_COLUMN_NUMBER:
+ *(SQLINTEGER*)pBuffer = nColumnNumber;
+ break;
+
+ case SQL_DIAG_CONNECTION_NAME:
+ {
+ if ( nBufferLength < 1 || stringConnectionName.isNull() )
+ return SQL_ERROR;
+
+ MYODBCCstrncpy( (SQLWCHAR*)pBuffer, nBufferLength / sizeof(SQLWCHAR),
stringConnectionName.utf16(), _TRUNCATE );
+ *pnStrLenPtr = stringConnectionName.length() * sizeof(SQLWCHAR);
+
+ if ( *pnStrLenPtr > nBufferLength )
+ return SQL_SUCCESS_WITH_INFO;
+ }
+ break;
+
+ case SQL_DIAG_MESSAGE_TEXT:
+ {
+ QString stringMessageText = getMessageText();
+ if ( nBufferLength < 1 || stringMessageText.isNull() )
+ return SQL_ERROR;
+
+ MYODBCCstrncpy( (SQLWCHAR*)pBuffer, nBufferLength / sizeof(SQLWCHAR),
stringMessageText.utf16(), _TRUNCATE );
+ *pnStrLenPtr = stringMessageText.length() * sizeof(SQLWCHAR);
+
+ if ( *pnStrLenPtr > nBufferLength )
+ return SQL_SUCCESS_WITH_INFO;
+ }
+ break;
+
+ case SQL_DIAG_NATIVE:
+ *(SQLINTEGER*)pBuffer = nNative;
+ break;
+
+ case SQL_DIAG_ROW_NUMBER:
+ *(SQLINTEGER*)pBuffer = nRowNumber;
+ break;
+
+ case SQL_DIAG_SERVER_NAME:
+ {
+ if ( nBufferLength < 1 || stringServerName.isNull() )
+ return SQL_ERROR;
+
+ MYODBCCstrncpy( (SQLWCHAR*)pBuffer, nBufferLength / sizeof(SQLWCHAR),
stringServerName.utf16(), _TRUNCATE );
+ *pnStrLenPtr = stringServerName.length() * sizeof(SQLWCHAR);
+
+ if ( *pnStrLenPtr > nBufferLength )
+ return SQL_SUCCESS_WITH_INFO;
+ }
+ break;
+
+ case SQL_DIAG_SQLSTATE:
+ {
+ QString stringSQLState = getSQLState();
+ if ( nBufferLength < 1 || stringSQLState.isNull() )
+ return SQL_ERROR;
+
+ MYODBCCstrncpy( (SQLWCHAR*)pBuffer, nBufferLength / sizeof(SQLWCHAR),
stringSQLState.utf16(), _TRUNCATE );
+ *pnStrLenPtr = stringSQLState.length() * sizeof(SQLWCHAR);
+
+ if ( *pnStrLenPtr > nBufferLength )
+ return SQL_SUCCESS_WITH_INFO;
+ }
+ break;
+
+ case SQL_DIAG_SUBCLASS_ORIGIN:
+ {
+ QString stringSubClassOrigin = getSubClassOrigin();
+ if ( nBufferLength < 1 || stringSubClassOrigin.isNull() )
+ return SQL_ERROR;
+
+ MYODBCCstrncpy( (SQLWCHAR*)pBuffer, nBufferLength / sizeof(SQLWCHAR),
stringSubClassOrigin.utf16(), _TRUNCATE );
+ *pnStrLenPtr = stringSubClassOrigin.length() * sizeof(SQLWCHAR);
+
+ if ( *pnStrLenPtr > nBufferLength )
+ return SQL_SUCCESS_WITH_INFO;
+ }
+ break;
+
+ default:
+ return SQL_ERROR;
+ }
+
+ return SQL_SUCCESS;
+}
+
/*!
\internal
\brief Dumps the contents to stream.
@@ -321,20 +429,17 @@
*/
QTextStream &operator<<( QTextStream &stream, const MYODBCDiaRecord
&rval )
{
- stream << "SQL_DIAG_CLASS_ORIGIN : " <<
rval.MYODBCDia_pStates[nState].diag_class_origin << endl;
+ stream << "SQL_DIAG_CLASS_ORIGIN : " <<
MYODBCDia_pStates[rval.nState].diag_class_origin << endl;
stream << "SQL_DIAG_COLUMN_NUMBER : " << rval.nColumnNumber <<
endl;
stream << "SQL_DIAG_CONNECTION_NAME : " << rval.stringConnectionName
<< endl;
stream << "SQL_DIAG_MESSAGE_TEXT : " << rval.stringMessage <<
endl;
stream << "SQL_DIAG_NATIVE : " << rval.nNative << endl;
stream << "SQL_DIAG_ROW_NUMBER : " << rval.nRowNumber << endl;
stream << "SQL_DIAG_SERVER_NAME : " << rval.stringServerName <<
endl;
- stream << "SQL_DIAG_SQLSTATE : " <<
rval.MYODBCDia_pStates[nState].diag_sqlstate << endl;
- stream << "SQL_DIAG_SUBCLASS_ORIGIN : " <<
rval.MYODBCDia_pStates[nState].diag_class_origin << endl;
+ stream << "SQL_DIAG_SQLSTATE : " <<
MYODBCDia_pStates[rval.nState].diag_sqlstate << endl;
+ stream << "SQL_DIAG_SUBCLASS_ORIGIN : " <<
MYODBCDia_pStates[rval.nState].diag_class_origin << endl;
return stream;
}
-SQLRETURN MYODBCDiaRecord::getField( SQLSMALLINT nField, SQLPOINTER pBuffer, SQLSMALLINT
nBufferLength, SQLSMALLINT *pnStrLenPtr )
-{
-}
Modified: MYODBCDia/include/MYODBCDia.h
===================================================================
--- MYODBCDia/include/MYODBCDia.h 2005-12-29 09:54:08 UTC (rev 21)
+++ MYODBCDia/include/MYODBCDia.h 2005-12-29 19:48:18 UTC (rev 22)
@@ -28,6 +28,14 @@
#ifndef MYODBC_DIA_H
#define MYODBC_DIA_H
+#include <MYODBCC.h>
+#include <MYODBCDbg.h>
+
+#include <QList>
+#include <QString>
+#include <QStringList>
+#include <QTextStream>
+
#include "MYODBCDiaRecord.h"
/*!
@@ -62,7 +70,7 @@
SQLINTEGER getRowCount();
QString getConnectionName();
QString getServerName();
- const MYODBCDiaRecord &getRecord( SQLSMALLINT nRecord /* 1 based */ );
+ MYODBCDiaRecord *getRecord( SQLSMALLINT nRecord /* 1 based */ );
SQLRETURN getField( SQLSMALLINT nRecord /* 1 based */, SQLSMALLINT nField, SQLPOINTER
pBuffer, SQLSMALLINT nBufferLength, SQLSMALLINT *pnStrLenPtr );
SQLRETURN doAppend( MYODBC_DIA_ID nState, SQLINTEGER nNative, const QString
&stringMessage );
@@ -72,16 +80,15 @@
protected:
SQLINTEGER nCursorRowCount; /*!< Count of rows in the cursor.
*/
-/* SQLCHAR * diag_dynamic_function; */
SQLINTEGER nDynamicFunctionCode; /*!< Code indicating type of SQL executed (ie
SQL_DIAG_UPDATE_WHERE) */
SQLRETURN nReturnCode; /*!< Return code (as in SQLRETURN) returned by
the function. */
SQLINTEGER nRowCount; /*!< The number of rows affected by an insert,
delete, or update. */
/* these values are copied by new records */
- QString stringConnectionName; /*!< This is dbc->server.
*/
- Qstring stringServerName; /*!< This is dbc->dsn. Same as
SQL_DATA_SOURCE_NAME in SQLGetInfo(). */
+ QString stringConnectionName; /*!< This is dbc->server.
*/
+ QString stringServerName; /*!< This is dbc->dsn. Same as
SQL_DATA_SOURCE_NAME in SQLGetInfo(). */
- QList<MYODBCDiaRecord*> listRecords;/*!< the records we own
*/
+ QList<MYODBCDiaRecord*> listRecords;/*!< the records we own
*/
};
Modified: MYODBCDia/include/MYODBCDiaRecord.h
===================================================================
--- MYODBCDia/include/MYODBCDiaRecord.h 2005-12-29 09:54:08 UTC (rev 21)
+++ MYODBCDia/include/MYODBCDiaRecord.h 2005-12-29 19:48:18 UTC (rev 22)
@@ -208,7 +208,6 @@
bool setMessage( const QString &stringMessage );
bool setNative( SQLINTEGER nNative );
bool setRowNumber( SQLINTEGER nRowNumber );
- SQLRETURN setField( SQLSMALLINT nField, SQLPOINTER pValue, SQLINTEGER nStringLength
);
QString getClassOrigin(); /*!< Doc that defines the class portion of the
SQLSTATE val in this rec. */
SQLINTEGER getColumnNumber();
| Thread |
|---|
| • Connector/ODBC 5 commit: r22 - MYODBCC/include MYODBCDia/MYODBCDiaLib MYODBCDia/include | pharvey | 29 Dec |