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/Library | jbalint | 9 Nov |