Modified:
trunk/MYSQLPlus/MYSQLPlusLib/MResult.cpp
trunk/MYSQLPlus/MYSQLPlusLib/MResultRes.cpp
trunk/MYSQLPlus/MYSQLPlusLib/MStatement.cpp
trunk/MYSQLPlus/MYSQLPlusTest/MYSQLPlusTest.cpp
Log:
Simple SQLBindParameter works.
Modified: trunk/MYSQLPlus/MYSQLPlusLib/MResult.cpp
===================================================================
--- trunk/MYSQLPlus/MYSQLPlusLib/MResult.cpp 2006-06-16 06:23:12 UTC (rev 343)
+++ trunk/MYSQLPlus/MYSQLPlusLib/MResult.cpp 2006-06-16 07:50:16 UTC (rev 344)
@@ -115,7 +115,13 @@
bBuffered = true;
nRowsAffected = 0;
nStatementType = STATEMENT_TYPE_NULL;
- pStatement->getImpParamDesc()->doClear();
+ /*!
+ \internal
+ \note
+
+ We do not clear IPD as that disrupts doBindParameter.
+ */
+ // pStatement->getImpParamDesc()->doClear();
pStatement->getImpRowDesc()->doClear();
MYODBCDbgReturn2();
@@ -2465,10 +2471,15 @@
{
MYODBCDbgEnter();
+ /*!
+ \internal ODBC RULE (?)
+
+ Incoming character data is always null terminated (so ignore OctetLength).
+ */
if ( pResultPutData->pDescriptorRecordAPD->getConciseType() == SQL_C_WCHAR )
- pResultPutData->variantData.setValue( QString::fromUtf16(
(SQLWCHAR*)pResultPutData->pDescriptorRecordAPD->getDataPtr(),
pResultPutData->pDescriptorRecordAPD->getOctetLength() ) );
+ pResultPutData->variantData.setValue( QString::fromUtf16(
(SQLWCHAR*)pResultPutData->pDescriptorRecordAPD->getDataPtr() ) );
else
- pResultPutData->variantData.setValue( QString::fromAscii(
(char*)pResultPutData->pDescriptorRecordAPD->getDataPtr(),
pResultPutData->pDescriptorRecordAPD->getOctetLength() ) );
+ pResultPutData->variantData.setValue( QString::fromAscii(
(char*)pResultPutData->pDescriptorRecordAPD->getDataPtr() ) );
switch ( pResultPutData->pDescriptorRecordIPD->getConciseType() )
{
Modified: trunk/MYSQLPlus/MYSQLPlusLib/MResultRes.cpp
===================================================================
--- trunk/MYSQLPlus/MYSQLPlusLib/MResultRes.cpp 2006-06-16 06:23:12 UTC (rev 343)
+++ trunk/MYSQLPlus/MYSQLPlusLib/MResultRes.cpp 2006-06-16 07:50:16 UTC (rev 344)
@@ -520,6 +520,8 @@
MYODBCDbgReturn( nReturnInternal );
}
stringStatement += resultPutData.variantData.toString();
+ nParameter++;
+ continue;
}
/* plain statement segment */
@@ -804,7 +806,7 @@
QChar cChar = stringStatement.at( nChar );
/* parameter marker */
- if ( !cQuote.isNull() && cChar == cMarker )
+ if ( cQuote.isNull() && cChar == cMarker )
{
if ( !stringStatementSegment.isNull() )
stringlistStatement += stringStatementSegment;
@@ -826,9 +828,6 @@
stringlistStatement += stringStatementSegment;
}
-
-// bytearrayStatementTemplate = stringStatement.toUtf8().data();
-
setStatementType( stringStatement );
setState( STATE_PREPARED );
Modified: trunk/MYSQLPlus/MYSQLPlusLib/MStatement.cpp
===================================================================
--- trunk/MYSQLPlus/MYSQLPlusLib/MStatement.cpp 2006-06-16 06:23:12 UTC (rev 343)
+++ trunk/MYSQLPlus/MYSQLPlusLib/MStatement.cpp 2006-06-16 07:50:16 UTC (rev 344)
@@ -2117,8 +2117,18 @@
SQL_RESET_PARAMS: Sets the SQL_DESC_COUNT field of the APD to 0,
releasing all parameter buffers set by
SQLBindParameter for the given StatementHandle.
*/
- MYODBCDbgReturn( getAppParamDesc()->setCount( 0, true ) );
+ /*!
+ \internal MYODBC RULE
+ We also clear out the IPD as this should be in synch with the APD.
+ */
+ {
+ SQLRETURN nReturn;
+ nReturn = getAppParamDesc()->setCount( 0, true );
+ nReturn = getImpParamDesc()->setCount( 0, true );
+ MYODBCDbgReturn( nReturn );
+ }
+
default:
/*!
\internal ODBC RULE (DM)
Modified: trunk/MYSQLPlus/MYSQLPlusTest/MYSQLPlusTest.cpp
===================================================================
--- trunk/MYSQLPlus/MYSQLPlusTest/MYSQLPlusTest.cpp 2006-06-16 06:23:12 UTC (rev 343)
+++ trunk/MYSQLPlus/MYSQLPlusTest/MYSQLPlusTest.cpp 2006-06-16 07:50:16 UTC (rev 344)
@@ -155,8 +155,7 @@
nReturn = statement.doExecDirect( TEXT("INSERT INTO tbMyODBCTest ( vcName ) VALUES (
'name1' )"), SQL_NTS );
if ( nReturn != SQL_SUCCESS )
- *gpMYODBCDbg << endl << statement.getDiagnostics().join( "\n" )
<< endl;
-// textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
+ textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
nReturn = statement.doExecDirect( TEXT("INSERT INTO tbMyODBCTest ( vcName ) VALUES (
'name2' )"), SQL_NTS );
@@ -270,25 +269,21 @@
SQLINTEGER nStrLenOrIndCreated = 0;
SQLINTEGER nRowCount = 0;
-printf( "[PAH][%s][%d]\n", __FILE__, __LINE__ );
- nReturn = statement.doBindParameter( 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 100,
0, szName, 0, &nStrLenOrIndName );
+ nReturn = statement.doBindParameter( 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 100,
0, szCreated, 0, &nStrLenOrIndCreated );
if ( nReturn != SQL_SUCCESS )
textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
-printf( "[PAH][%s][%d]\n", __FILE__, __LINE__ );
- nReturn = statement.doBindParameter( 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 100,
0, szCreated, 0, &nStrLenOrIndCreated );
+ nReturn = statement.doBindParameter( 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 100,
0, szName, sizeof(szName), &nStrLenOrIndName );
if ( nReturn != SQL_SUCCESS )
textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
-printf( "[PAH][%s][%d]\n", __FILE__, __LINE__ );
nReturn = statement.doPrepare( TEXT("UPDATE tbMyODBCTest SET dCreated = ? WHERE
vcName = ?"), SQL_NTS );
if ( nReturn != SQL_SUCCESS )
textstreamStdOut << endl << endl <<
statement.getDiagnostics().join( "\n" ) << endl << endl;
QCOMPARE( nReturn, (SQLRETURN)SQL_SUCCESS );
-printf( "[PAH][%s][%d]\n", __FILE__, __LINE__ );
strcpy( (char*)szName, "name2" );
sprintf( (char*)szCreated, "1963-08-17 01:45:00" );
| Thread |
|---|
| • Connector/ODBC 5 commit: r344 - in trunk/MYSQLPlus: MYSQLPlusLib MYSQLPlusTest | pharvey | 16 Jun |