List:Commits« Previous MessageNext Message »
From:jbalint Date:February 1 2007 2:00am
Subject:Connector/ODBC 5 commit: r784 - in trunk/SDK: C/Library C/include MYSQLPlus/Library
View as plain text  
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/Libraryjbalint1 Feb