Modified:
trunk/Install.bat
trunk/SDK/MYSQLPlus/Library/MResult.cpp
trunk/SDK/MYSQLPlus/Library/MResultPlus.cpp
trunk/SDK/MYSQLPlus/Library/MResultRes.cpp
trunk/SDK/MYSQLPlus/Library/MStatement.cpp
trunk/SDK/MYSQLPlus/Tests/MYSQLPlusTest.cpp
trunk/Uninstall.bat
trunk/connector-odbc.vpw
Log:
- brought some of the batch files up-to-date (mostly path issues)
- tracked down a few, obvious, bugs in MySQLPlus in quest to get post-build-tests to run
ok (mostly ResultSet and RowSet buffer and state issues)
- this code should build fine on win32 with vs2003 but has some debug lines in it
Modified: trunk/Install.bat
===================================================================
--- trunk/Install.bat 2006-09-19 05:51:29 UTC (rev 554)
+++ trunk/Install.bat 2006-09-25 11:20:29 UTC (rev 555)
@@ -16,16 +16,16 @@
:doNormal
IF EXIST %SystemRoot%\System32\MYODBCDriver5.dll GOTO :doError4
-IF NOT EXIST lib\MYODBCDriver5.dll GOTO :doError2
-IF NOT EXIST lib\MYODBCSetup5.dll GOTO :doError2
+IF NOT EXIST Driver\lib\MYODBCDriver5.dll GOTO :doError2
+IF NOT EXIST Driver\lib\MYODBCSetup5.dll GOTO :doError2
REM ****
REM * Copying myodbc libraries and executables to install dir...
REM ****
-copy lib\MYODBCDriver5.dll %SystemRoot%\System32
-copy lib\MYODBCDriver5.lib %SystemRoot%\System32
-copy lib\MYODBCSetup5.dll %SystemRoot%\System32
-copy lib\MYODBCSetup5.lib %SystemRoot%\System32
+copy Driver\lib\MYODBCDriver5.dll %SystemRoot%\System32
+copy Driver\lib\MYODBCDriver5.lib %SystemRoot%\System32
+copy Driver\lib\MYODBCSetup5.dll %SystemRoot%\System32
+copy Driver\lib\MYODBCSetup5.lib %SystemRoot%\System32
REM \todo "Program Files\MySQL\Connector ODBC 5\bin"
REM copy bin\MYODBCInstaller.exe %SystemRoot%\System32
@@ -42,27 +42,27 @@
REM * as 64bit windows but ODBCConf is not as powerful.
REM ****
-bin\MYODBCInstaller -a -d -n "MySQL Connector/ODBC v5 Driver" -t
"DRIVER=MYODBCDriver5.dll;SETUP=MYODBCSetup5.dll"
+Tools\bin\MYODBCInstaller -a -d -n "MySQL Connector/ODBC v5 Driver" -t
"DRIVER=MYODBCDriver5.dll;SETUP=MYODBCSetup5.dll"
REM bin\MYODBCInstaller -a -d -n "MySQL Connector/ODBC v5 Driver" -t
"DRIVER=MYODBCDriver5.dll;SETUP=myodbc3S.dll"
GOTO doSuccess
:doDebug
IF EXIST %SystemRoot%\System32\MYODBCDriver5d.dll GOTO :doError4
-IF NOT EXIST lib\MYODBCDriver5d.dll goto doError3
-IF NOT EXIST lib\MYODBCSetup5d.dll goto doError3
+IF NOT EXIST Driver\lib\MYODBCDriver5d.dll goto doError3
+IF NOT EXIST Driver\lib\MYODBCSetup5d.dll goto doError3
REM ****
REM * Copying myodbc debug libraries to install dir...
REM ****
-copy lib\MYODBCDriver5d.dll %SystemRoot%\System32
-copy lib\MYODBCDriver5d.lib %SystemRoot%\System32
-copy lib\MYODBCSetup5d.dll %SystemRoot%\System32
-copy lib\MYODBCSetup5d.lib %SystemRoot%\System32
+copy Driver\lib\MYODBCDriver5d.dll %SystemRoot%\System32
+copy Driver\lib\MYODBCDriver5d.lib %SystemRoot%\System32
+copy Driver\lib\MYODBCSetup5d.dll %SystemRoot%\System32
+copy Driver\lib\MYODBCSetup5d.lib %SystemRoot%\System32
REM ****
REM * Registering driver...
REM ****
-bin\MYODBCInstaller -a -d -n "MySQL Connector/ODBC v5 Driver (debug)" -t
"DRIVER=MYODBCDriver5d.dll;SETUP=MYODBCSetup5d.dll"
+Tools\bin\MYODBCInstaller -a -d -n "MySQL Connector/ODBC v5 Driver (debug)" -t
"DRIVER=MYODBCDriver5d.dll;SETUP=MYODBCSetup5d.dll"
goto doSuccess
Modified: trunk/SDK/MYSQLPlus/Library/MResult.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResult.cpp 2006-09-19 05:51:29 UTC (rev 554)
+++ trunk/SDK/MYSQLPlus/Library/MResult.cpp 2006-09-25 11:20:29 UTC (rev 555)
@@ -130,9 +130,6 @@
nState = STATE_UNINITIALIZED; // our state
nSimulateCursor = SIMULATE_CURSOR_TRY_UNIQUE; // we try to ensure pos
update/delete affects 1 row but in case of no unique row id - we may affect more than 1
row
- vectorStatus.resize( 1 );
- vectorStatus[0] = SQL_ROW_NOROW;
-
/*!
\internal
\note
@@ -898,16 +895,19 @@
{
MYODBCDbgEnter();
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
if ( getState() < STATE_EXECUTED )
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
resultSetData.doClear();
resultGetData.doClear();
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
SQLRETURN nReturn = doNext_();
if ( !SQL_SUCCEEDED( nReturn ) )
MYODBCDbgReturn( nReturn );
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
/*!
\internal ODBC RULE
@@ -916,6 +916,7 @@
if ( !getResultSetRows() )
MYODBCDbgReturn( setBeforeStart() );
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
/*!
\internal ODBC RULE
@@ -937,6 +938,7 @@
MYODBCDbgReturn( SQL_SUCCESS );
}
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
/*!
\internal ODBC RULE
@@ -949,6 +951,7 @@
if ( isAfterEnd() )
MYODBCDbgReturn( setAfterEnd() ); // just be sure all vars set
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
/*!
\internal ODBC RULE
@@ -970,6 +973,7 @@
MYODBCDbgReturn( SQL_SUCCESS );
}
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
/*!
\internal ODBC RULE
@@ -982,6 +986,7 @@
if ( nResultSetRow + nRowSetSize > getResultSetRows() )
MYODBCDbgReturn( setAfterEnd() );
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0, tr("Unknown
condition in doNext().") ) );
}
@@ -1815,6 +1820,7 @@
this->nRowSetRows = nRowSetRows;
+ /* mark rows beyond the ResultSet as SQL_ROW_NOROW */
while ( nRowSetRows < getRowSetSize() )
{
vectorStatus[nRowSetRows] = SQL_ROW_NOROW;
Modified: trunk/SDK/MYSQLPlus/Library/MResultPlus.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResultPlus.cpp 2006-09-19 05:51:29 UTC (rev 554)
+++ trunk/SDK/MYSQLPlus/Library/MResultPlus.cpp 2006-09-25 11:20:29 UTC (rev 555)
@@ -145,6 +145,7 @@
SQLRETURN nReturn = doApplyCursorRestrictions();
doClear();
+ vectorStatus.resize( getRowSetSize() );
pDescriptor = getImpRowDesc();
pDescriptor->doAppend( SQL_VARCHAR, "TABLE_CAT", SQL_NULLABLE );
@@ -210,6 +211,7 @@
SQLRETURN nReturn2 = doApplyCursorRestrictions();
doClear();
+ vectorStatus.resize( getRowSetSize() );
pDescriptor = getImpRowDesc();
pDescriptor->doAppend( SQL_VARCHAR, "TABLE_CAT", SQL_NULLABLE );
@@ -254,6 +256,7 @@
SQLRETURN nReturn2 = doApplyCursorRestrictions();
doClear();
+ vectorStatus.resize( getRowSetSize() );
pDescriptor = getImpRowDesc();
pDescriptor->doAppend( SQL_VARCHAR, "PKTABLE_CAT", SQL_NULLABLE );
@@ -317,6 +320,7 @@
SQLRETURN nReturn2 = doApplyCursorRestrictions();
doClear();
+ vectorStatus.resize( getRowSetSize() );
pDescriptor = getImpRowDesc();
pDescriptor->doAppend( SQL_VARCHAR, "TABLE_CAT", SQL_NULLABLE );
@@ -372,6 +376,7 @@
SQLRETURN nReturn = doApplyCursorRestrictions();
doClear();
+ vectorStatus.resize( getRowSetSize() );
pDescriptor = getImpRowDesc();
pDescriptor->doAppend( SQL_VARCHAR, "PROCEDURE_CAT", SQL_NULLABLE );
@@ -458,6 +463,7 @@
MDescriptor *pDescriptor;
doClear();
+ vectorStatus.resize( getRowSetSize() );
pDescriptor = getImpRowDesc();
pDescriptor->doAppend( SQL_VARCHAR, "PROCEDURE_CAT", SQL_NULLABLE );
@@ -528,6 +534,7 @@
SQLRETURN nReturn2 = doApplyCursorRestrictions();
doClear();
+ vectorStatus.resize( getRowSetSize() );
pDescriptor = getImpRowDesc();
pDescriptor->doAppend( SQL_SMALLINT, "SCOPE", SQL_NULLABLE );
@@ -591,6 +598,7 @@
SQLRETURN nReturn = doApplyCursorRestrictions();
doClear();
+ vectorStatus.resize( getRowSetSize() );
pDescriptor = getImpRowDesc();
pDescriptor->doAppend( SQL_VARCHAR, "TABLE_CAT", SQL_NULLABLE );
@@ -677,6 +685,7 @@
SQLRETURN nReturn = doApplyCursorRestrictions();
doClear();
+ vectorStatus.resize( getRowSetSize() );
pDescriptor = getImpRowDesc();
pDescriptor->doAppend( SQL_VARCHAR, "TABLE_CAT", SQL_NULLABLE );
@@ -738,6 +747,7 @@
SQLRETURN nReturn2 = doApplyCursorRestrictions();
doClear();
+ vectorStatus.resize( getRowSetSize() );
pDescriptor = getImpRowDesc();
pDescriptor->doAppend( SQL_VARCHAR, "TABLE_CAT", SQL_NULLABLE );
@@ -817,6 +827,7 @@
SQLRETURN nReturn2 = doApplyCursorRestrictions();
doClear();
+ vectorStatus.resize( getRowSetSize() );
pDescriptor = getImpRowDesc();
pDescriptor->doAppend( SQL_VARCHAR, "TYPE_NAME", SQL_NO_NULLS );
@@ -972,6 +983,7 @@
case STATE_EXECUTED:
vectorRows.clear();
+ vectorStatus.clear();
setResultSetRows( 0, true );
setRowsAffected( 0 );
setBeforeStart();
Modified: trunk/SDK/MYSQLPlus/Library/MResultRes.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResultRes.cpp 2006-09-19 05:51:29 UTC (rev 554)
+++ trunk/SDK/MYSQLPlus/Library/MResultRes.cpp 2006-09-25 11:20:29 UTC (rev 555)
@@ -14,6 +14,7 @@
pRes = NULL;
pCommand = NULL;
+ setState( STATE_INITIALIZED );
MYODBCDbgReturn2();
}
@@ -249,18 +250,25 @@
}
}
- /* submit command to server */
+ /*!
+ \internal
+ \todo
+
+ Submit command to server as utf8. We probably want to be smarter about what
encoding we use here.
+ */
if ( mysql_real_query( getMySQL(), stringStatement.toUtf8().constData(),
stringStatement.length() ) )
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000,
mysql_errno( getMySQL() ), mysql_error( getMySQL() ) ) );
switch ( getBuffered() )
{
case BUFFERED_UNBUFFERED:
+ pRes = mysql_use_result( getMySQL() ); // bring rows to client as needed
// bring rows to client as needed
+ break;
case BUFFERED_MYSQL_PLUS:
- pRes = mysql_use_result( getMySQL() ); // bring rows to client as needed
+ pRes = mysql_use_result( getMySQL() ); // bring rows to client as needed
break;
case BUFFERED_MYSQL_CLIENT:
- pRes = mysql_store_result( getMySQL() ); // bring all rows to client now
+ pRes = mysql_store_result( getMySQL() ); // bring all rows to client now
break;
default:
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("Unknown buffer type.") ) );
@@ -284,6 +292,27 @@
MYODBCDbgReturn( nReturnInternal );
}
+ switch ( getBuffered() )
+ {
+ case BUFFERED_UNBUFFERED:
+ // *we* will buffer RowSet only
+ for ( SQLUINTEGER n = 0; n < getRowSetSize(); n++ ) { vectorRows.append(
MResultColumns( getColumns() ) ); }
+ vectorStatus.resize( getRowSetSize() );
+ break;
+ case BUFFERED_MYSQL_PLUS:
+ // *we* will buffer ResultSet but only as needed/used
+ vectorRows.resize( 0 );
+ vectorStatus.resize( getRowSetSize() );
+ break;
+ case BUFFERED_MYSQL_CLIENT:
+ // *we* will buffer RowSet only
+ for ( SQLUINTEGER n = 0; n < getRowSetSize(); n++ ) { vectorRows.append(
MResultColumns( getColumns() ) ); }
+ vectorStatus.resize( getRowSetSize() );
+ break;
+ default:
+ MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("Unknown buffer type.") ) );
+ }
+
/* we need STATE_EXECUTED here so getRows() will work */
setState( STATE_EXECUTED );
@@ -413,14 +442,19 @@
{
MYODBCDbgEnter();
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
SQLRETURN nReturn1 = SQL_SUCCESS;
switch ( getBuffered() )
{
case BUFFERED_UNBUFFERED:
+
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY106 ) );
case BUFFERED_MYSQL_PLUS:
+
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
if ( !isResultSetRowsKnown() )
{
if ( getResultSetRows() < getRowSetSize() )
@@ -429,6 +463,8 @@
break;
case BUFFERED_MYSQL_CLIENT:
+
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
if ( getResultSetRows() )
{
mysql_data_seek( pRes, 0 );
@@ -440,6 +476,7 @@
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("Unknown buffer type.") ) );
}
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
MYODBCDbgReturn( nReturn1 );
}
@@ -559,21 +596,29 @@
{
MYODBCDbgEnter();
- if ( isBeforeStart() )
- MYODBCDbgReturn( doFirst_() );
+printf( "[PAH][%s][%s][%d] Rows: %d\n", __FILE__, __FUNCTION__, __LINE__,
vectorRows.count() );
+if ( vectorRows.count() )
+ printf( "[PAH][%s][%s][%d] Columns: %d\n", __FILE__, __FUNCTION__, __LINE__,
vectorRows[0].count() );
if ( isAfterEnd() )
MYODBCDbgReturn( SQL_SUCCESS );
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
SQLRETURN nReturn1 = SQL_SUCCESS;
switch ( getBuffered() )
{
case BUFFERED_UNBUFFERED:
+
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
nReturn1 = getRowSetData();
break;
case BUFFERED_MYSQL_PLUS:
+ if ( isBeforeStart() )
+ MYODBCDbgReturn( doFirst_() );
+
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
while ( !isResultSetRowsKnown() && getResultSetRow() +
getRowSetSize() >= getResultSetRows() )
{
nReturn1 = getRowSetData();
@@ -583,6 +628,10 @@
break;
case BUFFERED_MYSQL_CLIENT:
+ if ( isBeforeStart() )
+ MYODBCDbgReturn( doFirst_() );
+
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
if ( getResultSetRow() + getRowSetSize() < getResultSetRows() )
{
mysql_data_seek( pRes, getResultSetRow() + getRowSetSize() );
@@ -594,6 +643,7 @@
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("Unknown buffer type.") ) );
}
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
MYODBCDbgReturn( nReturn1 );
}
@@ -800,6 +850,7 @@
mysql_free_result( pRes );
pRes = NULL;
vectorRows.clear();
+ vectorStatus.clear();
setResultSetRows( 0, true );
setRowsAffected( 0 );
setBeforeStart();
@@ -838,6 +889,10 @@
SQLUSMALLINT nRowSetRow = 0;
+printf( "[PAH][%s][%s][%d] Rows: %d\n", __FILE__, __FUNCTION__, __LINE__,
vectorRows.count() );
+if ( vectorRows.count() )
+ printf( "[PAH][%s][%s][%d] Columns: %d\n", __FILE__, __FUNCTION__, __LINE__,
vectorRows[0].count() );
+
if ( getRowSetSize() < 1 )
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000, 0,
tr("RowSetSize < 1") ) );
@@ -845,19 +900,24 @@
{
case BUFFERED_UNBUFFERED:
case BUFFERED_MYSQL_CLIENT:
+
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
/* load next RowSetRows from res - replace RowSet */
{
- vectorRows.clear();
+ // vectorRows.clear();
while ( nRowSetRow < getRowSetSize() )
{
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
MYSQL_ROW pRow = mysql_fetch_row( pRes );
if ( pRow )
{
+printf( "[PAH][%s][%s][%d] %d %d\n", __FILE__, __FUNCTION__, __LINE__,
vectorStatus.count(), nRowSetRow );
vectorStatus[nRowSetRow] = getRowSetRowData( pRow, nRowSetRow );
nRowSetRow++;
}
else
{
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
if ( getBuffered() == BUFFERED_UNBUFFERED )
setResultSetRows( getResultSetRows() + nRowSetRow, true );
MYODBCDbgReturn( SQL_SUCCESS );
@@ -866,6 +926,8 @@
if ( getBuffered() == BUFFERED_UNBUFFERED )
setResultSetRows( getResultSetRows() + nRowSetRow );
}
+
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
break;
case BUFFERED_MYSQL_PLUS:
@@ -921,11 +983,20 @@
{
MYODBCDbgEnter();
+printf( "[PAH][%s][%s][%d] Rows: %d\n", __FILE__, __FUNCTION__, __LINE__,
vectorRows.count() );
+if ( vectorRows.count() )
+ printf( "[PAH][%s][%s][%d] Columns: %d\n", __FILE__, __FUNCTION__, __LINE__,
vectorRows[0].count() );
+
SQLUSMALLINT nColumns = getColumns();
SQLUSMALLINT nColumn = 0;
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
for ( nColumn = 0; nColumn < nColumns; nColumn++ )
{
+printf( "[PAH][%s][%s][%d] Rows: %d\n", __FILE__, __FUNCTION__, __LINE__,
vectorRows.count() );
+if ( vectorRows.count() )
+ printf( "[PAH][%s][%s][%d] Columns: %d\n", __FILE__, __FUNCTION__, __LINE__,
vectorRows[0].count() );
+
if ( pRow[nColumn] )
{
MYSQL_FIELD *pField = mysql_fetch_field_direct( pRes, nColumn );
@@ -956,7 +1027,12 @@
case MYSQL_TYPE_SET:
case MYSQL_TYPE_STRING:
case MYSQL_TYPE_GEOMETRY:
+printf( "[PAH][%s][%s][%d] Rows: %d\n", __FILE__, __FUNCTION__, __LINE__,
vectorRows.count() );
+if ( vectorRows.count() )
+ printf( "[PAH][%s][%s][%d] Columns: %d\n", __FILE__, __FUNCTION__, __LINE__,
vectorRows[0].count() );
+
vectorRows[nRow][nColumn].setValue( QString( (const char
*)pRow[nColumn] ) );
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
break;
case MYSQL_TYPE_VAR_STRING:
case MYSQL_TYPE_TINY_BLOB:
Modified: trunk/SDK/MYSQLPlus/Library/MStatement.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MStatement.cpp 2006-09-19 05:51:29 UTC (rev 554)
+++ trunk/SDK/MYSQLPlus/Library/MStatement.cpp 2006-09-25 11:20:29 UTC (rev 555)
@@ -2870,6 +2870,7 @@
{
MYODBCDbgEnter();
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
/*!
\internal ODBC RULE
@@ -2965,6 +2966,7 @@
if ( nFetchOrientation == SQL_FETCH_BOOKMARK && getFetchBookmarkPtr() == NULL
)
MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY111 ) );
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
setState( STATE_S6 );
switch ( nFetchOrientation )
@@ -3788,6 +3790,7 @@
goto doPrepareExit1;
}
+
/* first command is current by default - this is the one we will prepare for execute
now */
nReturn = doPrepare( pCommands->getCommand() );
if ( !SQL_SUCCEEDED( nReturn ) )
Modified: trunk/SDK/MYSQLPlus/Tests/MYSQLPlusTest.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Tests/MYSQLPlusTest.cpp 2006-09-19 05:51:29 UTC (rev 554)
+++ trunk/SDK/MYSQLPlus/Tests/MYSQLPlusTest.cpp 2006-09-25 11:20:29 UTC (rev 555)
@@ -137,6 +137,7 @@
MStatement statement( pConnection );
SQLRETURN nReturn = statement.doExecDirect( psSQL, SQL_NTS );
+
if ( nReturn != SQL_SUCCESS )
textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
@@ -175,12 +176,41 @@
{
MStatement statement( pConnection );
SQLRETURN nReturn;
+ SQLINTEGER nRows = 0;
nReturn = statement.doExecDirect( TEXT("INSERT INTO tbMyODBCTest ( vcName ) VALUES (
'name1' )"), SQL_NTS );
if ( nReturn != SQL_SUCCESS )
textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
+ /* RowsAffected (non-cached)... */
+ nReturn = statement.getDiagField( 0, SQL_DIAG_ROW_COUNT, &nRows, SQL_IS_INTEGER,
NULL );
+ if ( nReturn != SQL_SUCCESS )
+ textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
+ QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
+ QCOMPARE( nRows, (SQLINTEGER)1 );
+
+ /* RowsAffected (cached)... */
+ nReturn = statement.doRowCount( &nRows );
+ if ( nReturn != SQL_SUCCESS )
+ textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
+ QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
+ QCOMPARE( nRows, (SQLINTEGER)1 );
+
+ /* RowsAffected (non-cached again)... */
+ nReturn = statement.getDiagField( 0, SQL_DIAG_ROW_COUNT, &nRows, SQL_IS_INTEGER,
NULL );
+ if ( nReturn != SQL_SUCCESS )
+ textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
+ QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
+ QCOMPARE( nRows, (SQLINTEGER)0 );
+
+ /* ResultSetRows... */
+ nReturn = statement.getDiagField( 0, SQL_DIAG_CURSOR_ROW_COUNT, &nRows,
SQL_IS_INTEGER, NULL );
+ if ( nReturn != SQL_SUCCESS )
+ textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
+ QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
+ QCOMPARE( nRows, (SQLINTEGER)0 );
+
nReturn = statement.doExecDirect( TEXT("INSERT INTO tbMyODBCTest ( vcName ) VALUES (
'name2' )"), SQL_NTS );
if ( nReturn != SQL_SUCCESS )
textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
@@ -211,30 +241,47 @@
SQLWCHAR szNameWide[100];
SQLINTEGER nStrLenOrInd;
- /* this *should* error out so do not show diag message */
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
+ /* this *should* error out so we do not show diag message - diagnostics will be
cleared by next call */
nReturn = statement.doNumResultCols( &nCols );
QCOMPARE( nReturn, (SQLRETURN)SQL_ERROR );
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
nReturn = statement.doExecDirect( TEXT("SELECT * FROM tbMyODBCTest"), SQL_NTS );
if ( nReturn != SQL_SUCCESS )
textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
- nReturn = statement.doNumResultCols( &nCols );
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
+ /* ResultSetRows... */
+ nReturn = statement.getDiagField( 0, SQL_DIAG_CURSOR_ROW_COUNT, &nRows,
SQL_IS_INTEGER, NULL );
if ( nReturn != SQL_SUCCESS )
textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
- QCOMPARE( nCols, (SQLSMALLINT)3 );
+ QCOMPARE( nRows, (SQLINTEGER)0 ); /* 0 not 3 (as one may expect) because we are by
default using a non-buffered result */
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
+ /* RowsAffected... */
nReturn = statement.doRowCount( &nRows );
if ( nReturn != SQL_SUCCESS )
textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
- QCOMPARE( nRows, (SQLINTEGER)3 );
+ QCOMPARE( nRows, (SQLINTEGER)0 );
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
+ /* Columns... */
+ nReturn = statement.doNumResultCols( &nCols );
+ if ( nReturn != SQL_SUCCESS )
+ textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
+ QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
+ QCOMPARE( nCols, (SQLSMALLINT)3 );
+
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
+ /* ResultSet data... */
nRows = 0;
while ( 1 )
{
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
nReturn = statement.doFetch();
if ( nReturn == SQL_NO_DATA )
break;
@@ -243,6 +290,7 @@
nRows++;
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
nReturn = statement.getData( 1, SQL_C_LONG, &nUserID, 0, &nStrLenOrInd );
if ( nReturn != SQL_SUCCESS )
textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
@@ -251,6 +299,7 @@
if ( nRows == 1 )
{
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
nReturn = statement.getData( 2, SQL_C_CHAR, &szName, 100,
&nStrLenOrInd );
QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
QVERIFY( nStrLenOrInd == 0 );
@@ -258,6 +307,7 @@
}
else if ( nRows == 2 )
{
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
nReturn = statement.getData( 2, SQL_C_WCHAR, &szNameWide, 100,
&nStrLenOrInd );
QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
QVERIFY( nStrLenOrInd == 0 );
@@ -265,12 +315,14 @@
}
else if ( nRows == 3 )
{
+printf( "[PAH][%s][%s][%d]\n", __FILE__, __FUNCTION__, __LINE__ );
nReturn = statement.getData( 2, SQL_C_CHAR, &szName, 100,
&nStrLenOrInd );
QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
QVERIFY( nStrLenOrInd == 0 );
QVERIFY( strcmp( (const char*)szName, "name3" ) == 0 );
}
}
+ /* ResultSetRows (buffered or unbuffered this is what we got)...*/
QCOMPARE( nRows, (SQLINTEGER)3 );
}
Modified: trunk/Uninstall.bat
===================================================================
--- trunk/Uninstall.bat 2006-09-19 05:51:29 UTC (rev 554)
+++ trunk/Uninstall.bat 2006-09-25 11:20:29 UTC (rev 555)
@@ -19,7 +19,7 @@
REM ****
REM * Deregistering driver...
REM ****
-bin\MYODBCInstaller -d -r -n "MySQL Connector/ODBC v5 Driver"
+Tools\bin\MYODBCInstaller -d -r -n "MySQL Connector/ODBC v5 Driver"
REM ****
REM * Removing files...
@@ -40,7 +40,7 @@
REM ****
REM * Deregistering driver...
REM ****
-bin\MYODBCInstaller -d -r -n "MySQL Connector/ODBC v5 Driver (debug)"
+Tools\bin\MYODBCInstaller -d -r -n "MySQL Connector/ODBC v5 Driver (debug)"
REM ****
REM * Removing files...
Modified: trunk/connector-odbc.vpw
===================================================================
--- trunk/connector-odbc.vpw 2006-09-19 05:51:29 UTC (rev 554)
+++ trunk/connector-odbc.vpw 2006-09-25 11:20:29 UTC (rev 555)
@@ -16,6 +16,7 @@
<Project File="SDK/Installer/Library/InsLibrary.vpj" />
<Project File="Tools/Installer/Installer.vpj" />
<Project File="SDK/Installer/Tests/InsTests.vpj" />
+ <Project File="../../mysql-include.vpj" />
<Project File="SDK/MYSQLPlus/MYSQLPlus.vpj" />
<Project File="SDK/MYSQLPlus/Library/MYSQLPlusLibrary.vpj" />
<Project File="SDK/MYSQLPlus/Tests/MYSQLPlusTests.vpj" />
| Thread |
|---|
| • Connector/ODBC 5 commit: r555 - in trunk: . SDK/MYSQLPlus/Library SDK/MYSQLPlus/Tests | pharvey | 25 Sep |