Modified:
trunk/SDK/C/Library/MYODBCC.cpp
trunk/SDK/C/include/MYODBCC.h
trunk/SDK/MYSQLPlus/Library/MResultRes.cpp
trunk/SDK/MYSQLPlus/Library/MResultRes.h
trunk/SDK/MYSQLPlus/Library/MResult_data_toSQL.cpp
Log:
Changed to handling parameters as QByteArray for bin/string.
Fixed sending binary data.
Modified: trunk/SDK/C/Library/MYODBCC.cpp
===================================================================
--- trunk/SDK/C/Library/MYODBCC.cpp 2007-01-31 23:43:18 UTC (rev 783)
+++ trunk/SDK/C/Library/MYODBCC.cpp 2007-02-01 01:00:26 UTC (rev 784)
@@ -397,14 +397,13 @@
return (pc - pszzKeywordValues);
}
-template<class T>
-QString MYODBCC::getEscaped( T data )
+QByteArray MYODBCC::getEscaped( QByteArray data )
{
- QString stringEscaped;
+ QByteArray stringEscaped;
for ( int pos = 0; pos < data.size(); pos++ )
{
- switch ( ((QChar)data[pos]).unicode() )
+ switch ( data[pos] )
{
case 0: /* Must be escaped for 'mysql' */
stringEscaped += "\\0";
@@ -512,9 +511,6 @@
return stringEscaped;
}
-template QString MYODBCC::getEscaped<QString>( QString data );
-template QString MYODBCC::getEscaped<QByteArray>( QByteArray data );
-
QString MYODBCC::getConnectAttrString( SQLINTEGER nAttribute )
{
switch ( nAttribute )
Modified: trunk/SDK/C/include/MYODBCC.h
===================================================================
--- trunk/SDK/C/include/MYODBCC.h 2007-01-31 23:43:18 UTC (rev 783)
+++ trunk/SDK/C/include/MYODBCC.h 2007-02-01 01:00:26 UTC (rev 784)
@@ -514,8 +514,7 @@
*/
static int getKeywordValuesLength( LPCWSTR pszKeywordValues );
- template<class T>
- static QString getEscaped( T bytearrayBinary );
+ static QByteArray getEscaped( QByteArray data );
/*!
\name Get string version of a numeric "#define"
Modified: trunk/SDK/MYSQLPlus/Library/MResultRes.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResultRes.cpp 2007-01-31 23:43:18 UTC (rev 783)
+++ trunk/SDK/MYSQLPlus/Library/MResultRes.cpp 2007-02-01 01:00:26 UTC (rev 784)
@@ -356,15 +356,15 @@
\sa doSubmitCommand
*/
-QString MResultRes::getCommandString()
+QByteArray MResultRes::getCommandString()
{
MYODBCDbgEnter();
- QString stringCommand;
+ QByteArray stringCommand;
MCommand *pCommand = getCommand();
if ( !pCommand )
- MYODBCDbgReturn1( stringCommand );
+ MYODBCDbgReturnObj( stringCommand );
QStringList stringlistSegments = pCommand->getSegments();
uint nSegment = 0;
@@ -383,7 +383,7 @@
else
{
/* Simply append the command segment... */
- stringCommand += stringlistSegments.at( nSegment );
+ stringCommand += stringlistSegments.at( nSegment ).toUtf8();
}
/* advance... */
@@ -392,27 +392,40 @@
} // while segments
/* All parameters inserted. */
- MYODBCDbgReturn1( stringCommand );
+ MYODBCDbgReturnObj( stringCommand );
}
-QString MResultRes::getParameterString( uint nParameter )
+QByteArray MResultRes::getParameterString( uint nParameter )
{
MYODBCDbgEnter();
- QString stringParameter;
+ QByteArray stringParameter;
if ( nParameter >= stateExecute.vectorParameters.count() )
{
getDiagnostic()->doAppend( MDiagnostic::STATE_HY000, 0, tr("Parameter count
mismatch.") );
- MYODBCDbgReturn1( stringParameter );
+ MYODBCDbgReturnObj( stringParameter );
}
- if ( stateExecute.vectorParameters.at( nParameter ).isNull() )
- stringParameter = "NULL";
+ QVariant param = stateExecute.vectorParameters.at( nParameter );
+
+ if ( param.isNull() )
+ {
+ stringParameter = QString( "NULL" ).toUtf8();
+ }
else
- stringParameter = stateExecute.vectorParameters.at( nParameter ).toString();
+ {
+ if ( param.type() == QVariant::ByteArray )
+ {
+ stringParameter = param.toByteArray();
+ }
+ else
+ {
+ stringParameter = param.toString().toUtf8();
+ }
+ }
- MYODBCDbgReturn1( stringParameter );
+ MYODBCDbgReturnObj( stringParameter );
}
@@ -559,7 +572,7 @@
SQLRETURN nReturn = SQL_SUCCESS;
SQLRETURN nReturnInternal;
- QString stringCommand = getCommandString();
+ QByteArray stringCommand = getCommandString();
/*!
\internal
@@ -568,14 +581,14 @@
Submit command to server as utf8. We probably want to be smarter about what
encoding we use here.
*/
#if MYODBC_DBG > 1
- MYODBCDbgInfo( QString( "Command Complete=%1" ).arg( stringCommand ) );
+ /*! \todo figure out a straightforward way to print this */
+ //MYODBCDbgInfo( QString( "Command Complete=%1" ).arg( stringCommand ) );
#endif
- QByteArray utf8QueryString = stringCommand.toUtf8();
+ if ( mysql_real_query( getMySQL(), stringCommand.constData(), stringCommand.length()
) )
+ MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY000,
+ mysql_errno( getMySQL() ), mysql_error( getMySQL() ) ) );
- if ( mysql_real_query( getMySQL(), utf8QueryString.constData(),
utf8QueryString.length() ) )
- MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::STATE_HY000,
mysql_errno( getMySQL() ), mysql_error( getMySQL() ) ) );
-
switch ( getBuffered() )
{
case BUFFERED_UNBUFFERED:
Modified: trunk/SDK/MYSQLPlus/Library/MResultRes.h
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResultRes.h 2007-01-31 23:43:18 UTC (rev 783)
+++ trunk/SDK/MYSQLPlus/Library/MResultRes.h 2007-02-01 01:00:26 UTC (rev 784)
@@ -44,8 +44,8 @@
protected:
/* getters */
- QString getCommandString();
- QString getParameterString( uint nParameter );
+ QByteArray getCommandString();
+ QByteArray getParameterString( uint nParameter );
/* doers */
SQLRETURN doGetParameters();
Modified: trunk/SDK/MYSQLPlus/Library/MResult_data_toSQL.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResult_data_toSQL.cpp 2007-01-31 23:43:18 UTC (rev 783)
+++ trunk/SDK/MYSQLPlus/Library/MResult_data_toSQL.cpp 2007-02-01 01:00:26 UTC (rev 784)
@@ -337,9 +337,14 @@
case SQL_WCHAR:
case SQL_WVARCHAR:
case SQL_WLONGVARCHAR:
- pStatePutData->variantData.setValue( "'" + MYODBCC::getEscaped(
- pStatePutData->variantData.toString() ) + "'" );
+ {
+ QByteArray escaped = MYODBCC::getEscaped(
+ pStatePutData->variantData.toString().toUtf8() );
+ escaped.prepend( "'" );
+ escaped.append( "'" );
+ pStatePutData->variantData.setValue( escaped );
MYODBCDbgReturn( SQL_SUCCESS );
+ }
case SQL_DECIMAL:
case SQL_NUMERIC:
case SQL_TINYINT:
@@ -603,7 +608,11 @@
Both the client and the server have their own max_allowed_packet
variable, so if you want to handle big packets,
you must increase this variable both in the client and in the server.
*/
- pStatePutData->variantData.setValue( "'" + MYODBCC::getEscaped(
pStatePutData->variantData.toByteArray() ) + "'" );
+ QByteArray escaped = MYODBCC::getEscaped(
+ pStatePutData->variantData.toByteArray() );
+ escaped.prepend( "_BINARY'" );
+ escaped.append( "'" );
+ pStatePutData->variantData.setValue( escaped );
MYODBCDbgReturn( SQL_SUCCESS );
}
| Thread |
|---|
| • Connector/ODBC 5 commit: r784 - in trunk/SDK: C/Library C/include MYSQLPlus/Library | jbalint | 1 Feb |