List:Commits« Previous MessageNext Message »
From:jbalint Date:November 9 2006 11:49pm
Subject:Connector/ODBC 5 commit: r665 - in trunk: . SDK/MYSQLPlus/Library
View as plain text  
Modified:
   trunk/Build.bat
   trunk/PostBuildTest.bat
   trunk/SDK/MYSQLPlus/Library/MResult.cpp
   trunk/SDK/MYSQLPlus/Library/MStatement.cpp
Log:
Changed build and test scripts to return a result code if they succeeded or not.
Allow SQLDescribeCol to be called to retrieve the length of the column name, but not the
name itself.
Updated column metadata to use MYSQL_FIELD->length if MYSQL_FIELD->max_length isn't
available.
Made distinction between CHAR/BINARY (and VAR versions), fix from jimw for bug#24097

Modified: trunk/Build.bat
===================================================================
--- trunk/Build.bat	2006-11-09 21:46:43 UTC (rev 664)
+++ trunk/Build.bat	2006-11-09 22:49:52 UTC (rev 665)
@@ -43,6 +43,6 @@
 ECHO "| or Upgrade.bat next.                                |"
 ECHO "|                                                     |"
 ECHO "+-----------------------------------------------------+"
-EXIT /B 0
+EXIT /B %ERRORLEVEL%
 
 

Modified: trunk/PostBuildTest.bat
===================================================================
--- trunk/PostBuildTest.bat	2006-11-09 21:46:43 UTC (rev 664)
+++ trunk/PostBuildTest.bat	2006-11-09 22:49:52 UTC (rev 665)
@@ -24,8 +24,11 @@
 cd SDK\bin
 REM MYODBCCTest
 MYODBCDbgTest
+if not ERRORLEVEL 0 goto doFailed
 MYODBCInsTest
+if not ERRORLEVEL 0 goto doFailed
 MYSQLPlusTest
+if not ERRORLEVEL 0 goto doFailed
 cd ..\..
 
 REM
@@ -33,6 +36,7 @@
 REM
 cd Driver\bin
 MYODBCDriverTest
+if not ERRORLEVEL 0 goto doFailed
 cd ..\..
 
 goto doDone
@@ -50,4 +54,15 @@
 ECHO "+-----------------------------------------------------+"
 EXIT /B 0
 
+:doFailed
+ECHO "+-----------------------------------------------------+"
+ECHO "| POST-BUILD TESTS FAILED                             |"
+ECHO "+-----------------------------------------------------+"
+ECHO "|                                                     |"
+ECHO "| At least one of the tests failed. Please review the |"
+ECHO "| output to determine the problem.                    |"
+ECHO "|                                                     |"
+ECHO "+-----------------------------------------------------+"
 
+EXIT /b %ERRORLEVEL%
+

Modified: trunk/SDK/MYSQLPlus/Library/MResult.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MResult.cpp	2006-11-09 21:46:43 UTC (rev 664)
+++ trunk/SDK/MYSQLPlus/Library/MResult.cpp	2006-11-09 22:49:52 UTC (rev 665)
@@ -130,7 +130,7 @@
     nRowSetSize         = 1;                                // single row cursor
     nState              = STATE_UNINITIALIZED;              // our state
     nSimulateCursor     = SQL_SC_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( nRowSetSize );
+    vectorStatus.resize( nRowSetSize );
 
     /*!
         \internal
@@ -4461,6 +4461,8 @@
     */
     MDescriptorRecord *pDescriptorRecord = pDescriptor->getRecord( nField );
 
+    int max_length = pField->max_length ? pField->max_length : pField->length;
+
     pDescriptorRecord->setAutoUniqueValue( (pField->flags &&
AUTO_INCREMENT_FLAG) ? SQL_TRUE : SQL_FALSE );
     pDescriptorRecord->setBaseColumnName( (pField->org_name ? pField->org_name :
"") );
     pDescriptorRecord->setBaseTableName( (pField->org_table ? pField->org_table
: "") );
@@ -4470,7 +4472,7 @@
 /*  pDescriptorRecord->setdata_ptr;                     - N/A               */
 /*  pDescriptorRecord->setdatetime_interval_code;       - type specific     */
     pDescriptorRecord->setDatetimeIntervalPrecision( 10 );       /* this is a
conservative guess - not sure what precision we get when we diff 2 times */
-    pDescriptorRecord->setDisplaySize( pField->max_length ? pField->max_length :
pField->length );   /* - also type specific   */
+    pDescriptorRecord->setDisplaySize( max_length );   /* - also type specific   */
     pDescriptorRecord->setFixedPrecScale( SQL_FALSE );            /* - also type
specific   */
 /*  pDescriptorRecord->setindicator_ptr;                - N/A               */
     pDescriptorRecord->setLabel( pField->name );
@@ -4512,9 +4514,9 @@
     switch ( pField->type )
     {
         case MYSQL_TYPE_BLOB:
-            pDescriptorRecord->setLength( pField->max_length );
+            pDescriptorRecord->setLength( max_length );
             pDescriptorRecord->setNumPrecRadix( 0 );
-            pDescriptorRecord->setOctetLength( pField->max_length );
+            pDescriptorRecord->setOctetLength( max_length );
             if ( pField->flags & BINARY_FLAG )
             {
                 pDescriptorRecord->setLiteralPrefix( "" );
@@ -4536,7 +4538,7 @@
             pDescriptorRecord->setLiteralPrefix( "\"'" );
             pDescriptorRecord->setLiteralSuffix( "\"'" );
             pDescriptorRecord->setNumPrecRadix( 0 );
-            pDescriptorRecord->setOctetLength( pField->max_length );
+            pDescriptorRecord->setOctetLength( max_length );
             pDescriptorRecord->setPrecision( 10 );
             pDescriptorRecord->setTypeName( "date" );
             if ( getEnvironment()->getODBCVersion() == SQL_OV_ODBC2 )
@@ -4550,7 +4552,7 @@
             pDescriptorRecord->setLiteralPrefix( "\"'" );
             pDescriptorRecord->setLiteralSuffix( "\"'" );
             pDescriptorRecord->setNumPrecRadix( 0 );
-            pDescriptorRecord->setOctetLength( pField->max_length );
+            pDescriptorRecord->setOctetLength( max_length );
             pDescriptorRecord->setPrecision( 19 );
             pDescriptorRecord->setTypeName( "datetime" );
             if ( getEnvironment()->getODBCVersion() == SQL_OV_ODBC2 )
@@ -4560,22 +4562,22 @@
             break;
         case MYSQL_TYPE_DECIMAL:
         case MYSQL_TYPE_NEWDECIMAL:
-            pDescriptorRecord->setDisplaySize( std::max( pField->length,
pField->max_length ) - test( !( pField->flags & UNSIGNED_FLAG ) ) - test(
pField->decimals ) );
+            pDescriptorRecord->setDisplaySize( max_length - test( !( pField->flags
& UNSIGNED_FLAG ) ) - test( pField->decimals ) );
             pDescriptorRecord->setFixedPrecScale( pField->decimals ? SQL_TRUE :
SQL_FALSE );
-            pDescriptorRecord->setLength( pField->max_length );
+            pDescriptorRecord->setLength( max_length );
             pDescriptorRecord->setLiteralPrefix( "" );
             pDescriptorRecord->setLiteralSuffix( "" );
             pDescriptorRecord->setNumPrecRadix( 10 );
-            pDescriptorRecord->setPrecision( (SQLSMALLINT)std::max( pField->length,
pField->max_length ) - test( !( pField->flags & UNSIGNED_FLAG ) ) - test(
pField->decimals ) );
+            pDescriptorRecord->setPrecision( (SQLSMALLINT)max_length - test( !(
pField->flags & UNSIGNED_FLAG ) ) - test( pField->decimals ) );
             pDescriptorRecord->setTypeName( "decimal" );
             pDescriptorRecord->setConciseType( SQL_DECIMAL );
             break;
         case MYSQL_TYPE_DOUBLE:
-            pDescriptorRecord->setLength( pField->max_length );
+            pDescriptorRecord->setLength( max_length );
             pDescriptorRecord->setLiteralPrefix( "" );
             pDescriptorRecord->setLiteralSuffix( "" );
             pDescriptorRecord->setNumPrecRadix( 2 );
-            pDescriptorRecord->setPrecision( (SQLSMALLINT)pField->max_length );
+            pDescriptorRecord->setPrecision( (SQLSMALLINT)max_length );
             if ( pField->flags & UNSIGNED_FLAG )
                 pDescriptorRecord->setTypeName( "double unsigned" );
             else
@@ -4583,20 +4585,20 @@
             pDescriptorRecord->setConciseType( SQL_DOUBLE );
             break;
         case MYSQL_TYPE_ENUM:
-            pDescriptorRecord->setLength( pField->max_length );
+            pDescriptorRecord->setLength( max_length );
             pDescriptorRecord->setLiteralPrefix( "\"'" );
             pDescriptorRecord->setLiteralSuffix( "\"'" );
             pDescriptorRecord->setNumPrecRadix( 0 );
-            pDescriptorRecord->setOctetLength( pField->max_length );
+            pDescriptorRecord->setOctetLength( max_length );
             pDescriptorRecord->setTypeName( "enum" );
             pDescriptorRecord->setConciseType( SQL_CHAR );
             break;
         case MYSQL_TYPE_FLOAT:
-            pDescriptorRecord->setLength( pField->max_length );
+            pDescriptorRecord->setLength( max_length );
             pDescriptorRecord->setLiteralPrefix( "" );
             pDescriptorRecord->setLiteralSuffix( "" );
             pDescriptorRecord->setNumPrecRadix( 2 );
-            pDescriptorRecord->setPrecision( (SQLSMALLINT)pField->max_length );
+            pDescriptorRecord->setPrecision( (SQLSMALLINT)max_length );
             if ( pField->flags & UNSIGNED_FLAG )
                 pDescriptorRecord->setTypeName( "float unsigned" );
             else
@@ -4604,20 +4606,20 @@
             pDescriptorRecord->setConciseType( SQL_REAL );
             break;
         case MYSQL_TYPE_GEOMETRY:
-            pDescriptorRecord->setLength( pField->max_length );
+            pDescriptorRecord->setLength( max_length );
             pDescriptorRecord->setLiteralPrefix( "" );
             pDescriptorRecord->setLiteralSuffix( "" );
             pDescriptorRecord->setNumPrecRadix( 0 );
-            pDescriptorRecord->setOctetLength( pField->max_length );
+            pDescriptorRecord->setOctetLength( max_length );
             pDescriptorRecord->setTypeName( "blob" );
             pDescriptorRecord->setConciseType( SQL_LONGVARBINARY );
             break;
         case MYSQL_TYPE_INT24:
-            pDescriptorRecord->setLength( pField->max_length );
+            pDescriptorRecord->setLength( max_length );
             pDescriptorRecord->setLiteralPrefix( "" );
             pDescriptorRecord->setLiteralSuffix( "" );
             pDescriptorRecord->setNumPrecRadix( 2 );
-            pDescriptorRecord->setPrecision( (SQLSMALLINT)pField->max_length );
+            pDescriptorRecord->setPrecision( (SQLSMALLINT)max_length );
             if ( pField->flags & UNSIGNED_FLAG )
                 pDescriptorRecord->setTypeName( "mediumint unsigned" );
             else
@@ -4625,11 +4627,11 @@
             pDescriptorRecord->setConciseType( SQL_INTEGER );
             break;
         case MYSQL_TYPE_LONG:
-            pDescriptorRecord->setLength( pField->max_length );
+            pDescriptorRecord->setLength( max_length );
             pDescriptorRecord->setLiteralPrefix( "" );
             pDescriptorRecord->setLiteralSuffix( "" );
             pDescriptorRecord->setNumPrecRadix( 2 );
-            pDescriptorRecord->setPrecision( (SQLSMALLINT)pField->max_length );
+            pDescriptorRecord->setPrecision( (SQLSMALLINT)max_length );
             if ( pField->flags & UNSIGNED_FLAG )
                 pDescriptorRecord->setTypeName( "integer unsigned" );
             else
@@ -4637,11 +4639,11 @@
             pDescriptorRecord->setConciseType( SQL_INTEGER );
             break;
         case MYSQL_TYPE_LONG_BLOB:
-            pDescriptorRecord->setLength( pField->max_length );
+            pDescriptorRecord->setLength( max_length );
             pDescriptorRecord->setLiteralPrefix( "" );
             pDescriptorRecord->setLiteralSuffix( "" );
             pDescriptorRecord->setNumPrecRadix( 0 );
-            pDescriptorRecord->setOctetLength( pField->max_length );
+            pDescriptorRecord->setOctetLength( max_length );
             if (pField->flags & BINARY_FLAG)
             {
                 pDescriptorRecord->setTypeName( "longblob" );
@@ -4654,7 +4656,7 @@
             }
             break;
         case MYSQL_TYPE_LONGLONG:
-            pDescriptorRecord->setLength( pField->max_length );
+            pDescriptorRecord->setLength( max_length );
             pDescriptorRecord->setLiteralPrefix( "" );
             pDescriptorRecord->setLiteralSuffix( "" );
             pDescriptorRecord->setNumPrecRadix( 2 );
@@ -4671,11 +4673,11 @@
             pDescriptorRecord->setConciseType( SQL_BIGINT );
             break;
         case MYSQL_TYPE_MEDIUM_BLOB:
-            pDescriptorRecord->setLength( pField->max_length );
+            pDescriptorRecord->setLength( max_length );
             pDescriptorRecord->setLiteralPrefix( "" );
             pDescriptorRecord->setLiteralSuffix( "" );
             pDescriptorRecord->setNumPrecRadix( 0 );
-            pDescriptorRecord->setOctetLength( pField->max_length );
+            pDescriptorRecord->setOctetLength( max_length );
             if ( pField->flags & BINARY_FLAG )
             {
                 pDescriptorRecord->setTypeName( "mediumblob" );
@@ -4689,11 +4691,11 @@
             break;
         case MYSQL_TYPE_NEWDATE:
             pDescriptorRecord->setDisplaySize( 10 );
-            pDescriptorRecord->setLength( pField->max_length );
+            pDescriptorRecord->setLength( max_length );
             pDescriptorRecord->setLiteralPrefix( "\"'" );
             pDescriptorRecord->setLiteralSuffix( "\"'" );
             pDescriptorRecord->setNumPrecRadix( 0 );
-            pDescriptorRecord->setOctetLength( pField->max_length );
+            pDescriptorRecord->setOctetLength( max_length );
             pDescriptorRecord->setPrecision( 10 );
             pDescriptorRecord->setTypeName( "date" );
             if ( getEnvironment()->getODBCVersion() == SQL_OV_ODBC2 )
@@ -4702,7 +4704,7 @@
                 pDescriptorRecord->setConciseType( SQL_TYPE_DATE );
             break;
         case MYSQL_TYPE_NULL:
-            pDescriptorRecord->setLength( pField->max_length );
+            pDescriptorRecord->setLength( max_length );
             pDescriptorRecord->setLiteralPrefix( "" );
             pDescriptorRecord->setLiteralSuffix( "" );
             pDescriptorRecord->setNumPrecRadix( 0 );
@@ -4710,11 +4712,11 @@
             pDescriptorRecord->setConciseType( SQL_VARCHAR );
             break;
         case MYSQL_TYPE_SHORT:
-            pDescriptorRecord->setLength( pField->max_length );
+            pDescriptorRecord->setLength( max_length );
             pDescriptorRecord->setLiteralPrefix( "" );
             pDescriptorRecord->setLiteralSuffix( "" );
             pDescriptorRecord->setNumPrecRadix( 2 );
-            pDescriptorRecord->setPrecision( (SQLSMALLINT)pField->max_length );
+            pDescriptorRecord->setPrecision( (SQLSMALLINT)max_length );
             if ( pField->flags & UNSIGNED_FLAG )
                 pDescriptorRecord->setTypeName( "smallint unsigned" );
             else
@@ -4723,11 +4725,11 @@
             break;
         case MYSQL_TYPE_TIME:
             pDescriptorRecord->setDisplaySize( 8 );
-            pDescriptorRecord->setLength( pField->max_length );
+            pDescriptorRecord->setLength( max_length );
             pDescriptorRecord->setLiteralPrefix( "\"'" );
             pDescriptorRecord->setLiteralSuffix( "\"'" );
             pDescriptorRecord->setNumPrecRadix( 0 );
-            pDescriptorRecord->setOctetLength( pField->max_length );
+            pDescriptorRecord->setOctetLength( max_length );
             pDescriptorRecord->setPrecision( 8 );
             pDescriptorRecord->setTypeName( "time" );
             if ( getEnvironment()->getODBCVersion() == SQL_OV_ODBC2 )
@@ -4737,11 +4739,11 @@
             break;
         case MYSQL_TYPE_TIMESTAMP:
             pDescriptorRecord->setDisplaySize( 19 );
-            pDescriptorRecord->setLength( pField->max_length );
+            pDescriptorRecord->setLength( max_length );
             pDescriptorRecord->setLiteralPrefix( "\"'" );
             pDescriptorRecord->setLiteralSuffix( "\"'" );
             pDescriptorRecord->setNumPrecRadix( 0 );
-            pDescriptorRecord->setOctetLength( pField->max_length );
+            pDescriptorRecord->setOctetLength( max_length );
             pDescriptorRecord->setPrecision( 19 );
             pDescriptorRecord->setRowver( SQL_TRUE );
             pDescriptorRecord->setTypeName( "timestamp" );
@@ -4751,30 +4753,40 @@
                 pDescriptorRecord->setConciseType( SQL_TYPE_TIMESTAMP );
             break;
         case MYSQL_TYPE_SET:
-            pDescriptorRecord->setLength( pField->max_length );
+            pDescriptorRecord->setLength( max_length );
             pDescriptorRecord->setLiteralPrefix( "\"'" );
             pDescriptorRecord->setLiteralSuffix( "\"'" );
             pDescriptorRecord->setNumPrecRadix( 0 );
-            pDescriptorRecord->setOctetLength( pField->max_length );
+            pDescriptorRecord->setOctetLength( max_length );
             pDescriptorRecord->setTypeName( "set" );
             pDescriptorRecord->setConciseType( SQL_CHAR );
             break;
         case MYSQL_TYPE_STRING:
-            pDescriptorRecord->setDisplaySize( pField->length ? pField->length :
255 );
-            pDescriptorRecord->setLength( pField->max_length );
-            pDescriptorRecord->setLiteralPrefix( "\"'" );
-            pDescriptorRecord->setLiteralSuffix( "\"'" );
+            pDescriptorRecord->setDisplaySize( max_length );
+            pDescriptorRecord->setLength( max_length );
             pDescriptorRecord->setNumPrecRadix( 0 );
-            pDescriptorRecord->setOctetLength( pField->max_length );
-            pDescriptorRecord->setTypeName( "char" );
-            pDescriptorRecord->setConciseType( SQL_CHAR );
+            pDescriptorRecord->setOctetLength( max_length );
+            if ( pField->flags & BINARY_FLAG )
+            {
+                pDescriptorRecord->setLiteralPrefix( "" );
+                pDescriptorRecord->setLiteralSuffix( "" );
+                pDescriptorRecord->setTypeName( "binary" );
+                pDescriptorRecord->setConciseType( SQL_BINARY );
+            }
+            else
+            {
+                pDescriptorRecord->setLiteralPrefix( "\"'" );
+                pDescriptorRecord->setLiteralSuffix( "\"'" );
+                pDescriptorRecord->setTypeName( "char" );
+                pDescriptorRecord->setConciseType( SQL_CHAR );
+            }
             break;
         case MYSQL_TYPE_TINY: 
-            pDescriptorRecord->setLength( pField->max_length );
+            pDescriptorRecord->setLength( max_length );
             pDescriptorRecord->setLiteralPrefix( "" );
             pDescriptorRecord->setLiteralSuffix( "" );
             pDescriptorRecord->setNumPrecRadix( 2 );
-            pDescriptorRecord->setPrecision( (SQLSMALLINT)pField->max_length );
+            pDescriptorRecord->setPrecision( (SQLSMALLINT)max_length );
             if ( pField->flags & NUM_FLAG )
             {
                 if ( pField->flags & UNSIGNED_FLAG )
@@ -4793,11 +4805,11 @@
             }
             break;
         case MYSQL_TYPE_TINY_BLOB:
-            pDescriptorRecord->setLength( pField->max_length );
+            pDescriptorRecord->setLength( max_length );
             pDescriptorRecord->setLiteralPrefix( "" );
             pDescriptorRecord->setLiteralSuffix( "" );
             pDescriptorRecord->setNumPrecRadix( 0 );
-            pDescriptorRecord->setOctetLength( pField->max_length );
+            pDescriptorRecord->setOctetLength( max_length );
             if ( pField->flags & BINARY_FLAG )
             {
                 pDescriptorRecord->setTypeName( "tinyblob" );
@@ -4810,22 +4822,32 @@
             }
             break;
         case MYSQL_TYPE_VAR_STRING:
-            pDescriptorRecord->setDisplaySize( pField->length ? pField->length :
255 );
-            pDescriptorRecord->setLength( pField->max_length );
-            pDescriptorRecord->setLiteralPrefix( "\"'" );
-            pDescriptorRecord->setLiteralSuffix( "\"'" );
+            pDescriptorRecord->setDisplaySize( max_length );
+            pDescriptorRecord->setLength( max_length );
             pDescriptorRecord->setNumPrecRadix( 0 );
-            pDescriptorRecord->setOctetLength( pField->max_length );
-            pDescriptorRecord->setTypeName( "varchar" );
-            pDescriptorRecord->setConciseType( SQL_VARCHAR );
+            pDescriptorRecord->setOctetLength( max_length );
+            if ( pField->flags & BINARY_FLAG )
+            {
+                pDescriptorRecord->setLiteralPrefix( "" );
+                pDescriptorRecord->setLiteralSuffix( "" );
+                pDescriptorRecord->setTypeName( "varbinary" );
+                pDescriptorRecord->setConciseType( SQL_VARBINARY );
+            }
+            else
+            {
+                pDescriptorRecord->setLiteralPrefix( "\"'" );
+                pDescriptorRecord->setLiteralSuffix( "\"'" );
+                pDescriptorRecord->setTypeName( "varchar" );
+                pDescriptorRecord->setConciseType( SQL_VARCHAR );
+            }
             break;
         case MYSQL_TYPE_YEAR:
-            pDescriptorRecord->setLength( pField->max_length );
+            pDescriptorRecord->setLength( max_length );
             pDescriptorRecord->setLiteralPrefix( "\"'" );
             pDescriptorRecord->setLiteralSuffix( "\"'" );
             pDescriptorRecord->setNumPrecRadix( 0 );
-            pDescriptorRecord->setOctetLength( pField->max_length );
-            pDescriptorRecord->setPrecision( (SQLSMALLINT)pField->max_length );
+            pDescriptorRecord->setOctetLength( max_length );
+            pDescriptorRecord->setPrecision( (SQLSMALLINT)max_length );
             pDescriptorRecord->setTypeName( "year" );
             pDescriptorRecord->setConciseType( SQL_SMALLINT );
             break;

Modified: trunk/SDK/MYSQLPlus/Library/MStatement.cpp
===================================================================
--- trunk/SDK/MYSQLPlus/Library/MStatement.cpp	2006-11-09 21:46:43 UTC (rev 664)
+++ trunk/SDK/MYSQLPlus/Library/MStatement.cpp	2006-11-09 22:49:52 UTC (rev 665)
@@ -2736,8 +2736,10 @@
     			pDescriptorRecord->getName(), &nCharsOut ) )
         nReturn = getDiagnostic()->doAppend( MDiagnostic::STATE_01004 );
 
-    if ( pnNameLength )
+    if ( pszColumn && pnNameLength )
         *pnNameLength = nCharsOut;
+	else if( pnNameLength )
+		*pnNameLength = pDescriptorRecord->getName().length();
 
     if ( pnDataType )
         *pnDataType = pDescriptorRecord->getConciseType();

Thread
Connector/ODBC 5 commit: r665 - in trunk: . SDK/MYSQLPlus/Libraryjbalint9 Nov