List:Commits« Previous MessageNext Message »
From:pharvey Date:August 9 2006 11:13pm
Subject:Connector/ODBC 5 commit: r478 - in trunk: MYODBCDriver/MYODBCDriverLib MYSQLPlus/MYSQLPlusLib
View as plain text  
Modified:
   trunk/MYODBCDriver/MYODBCDriverLib/SQLGetFunctions.cpp
   trunk/MYSQLPlus/MYSQLPlusLib/MDescriptorRecord.cpp
   trunk/MYSQLPlus/MYSQLPlusLib/MDescriptorRecord.h
   trunk/MYSQLPlus/MYSQLPlusLib/MDescriptorRecordIRD.cpp
   trunk/MYSQLPlus/MYSQLPlusLib/MStatement.cpp
Log:
- added support for SQLDescribeParam

Modified: trunk/MYODBCDriver/MYODBCDriverLib/SQLGetFunctions.cpp
===================================================================
--- trunk/MYODBCDriver/MYODBCDriverLib/SQLGetFunctions.cpp	2006-08-08 05:00:43 UTC (rev
477)
+++ trunk/MYODBCDriver/MYODBCDriverLib/SQLGetFunctions.cpp	2006-08-09 23:13:18 UTC (rev
478)
@@ -101,7 +101,7 @@
 /*  SQL_API_SQLBROWSECONNECT,           */
 /*  SQL_API_SQLCOLATTRIBUTES,       Dep */
 /*  SQL_API_SQLCOLUMNPRIVILEGES,        */
-/*  SQL_API_SQLDESCRIBEPARAM,           */
+    SQL_API_SQLDESCRIBEPARAM,
     SQL_API_SQLDRIVERCONNECT,
 /*  SQL_API_SQLDRIVERS,             DM  */
 /*  SQL_API_SQLEXTENDEDFETCH,       Dep */

Modified: trunk/MYSQLPlus/MYSQLPlusLib/MDescriptorRecord.cpp
===================================================================
--- trunk/MYSQLPlus/MYSQLPlusLib/MDescriptorRecord.cpp	2006-08-08 05:00:43 UTC (rev 477)
+++ trunk/MYSQLPlus/MYSQLPlusLib/MDescriptorRecord.cpp	2006-08-09 23:13:18 UTC (rev 478)
@@ -1145,6 +1145,82 @@
     MYODBCDbgReturn3( "%p", (MDescriptor*)(parent()) );
 }
 
+SQLRETURN MDescriptorRecord::getColumnSizeSQL( SQLUINTEGER *pnColumnSize, SQLSMALLINT
*pnDecimalDigits )
+{
+    MYODBCDbgEnter();
+
+    SQLUINTEGER nColumnSize;
+    SQLSMALLINT nDecimalDigits;
+
+    if ( !pnColumnSize )    pnColumnSize    = &nColumnSize;
+    if ( !pnDecimalDigits ) pnDecimalDigits = &nDecimalDigits;
+
+    switch ( getType() )
+    {
+        case SQL_CHAR:
+        case SQL_VARCHAR:
+        case SQL_LONGVARCHAR:
+        case SQL_WCHAR:
+        case SQL_WVARCHAR:
+        case SQL_WLONGVARCHAR:
+            *pnColumnSize    = getLength();
+            *pnDecimalDigits = getScale();
+            break;
+        case SQL_DECIMAL:
+        case SQL_NUMERIC:
+            *pnColumnSize    = getPrecision();
+            *pnDecimalDigits = getScale();
+            break;
+        case SQL_SMALLINT:
+        case SQL_INTEGER:
+        case SQL_REAL:
+        case SQL_FLOAT:
+        case SQL_DOUBLE:
+            *pnColumnSize    = getPrecision();
+            *pnDecimalDigits = getScale();
+            break;
+        case SQL_BIT:
+            *pnColumnSize    = getLength();
+            *pnDecimalDigits = 0;
+            break;
+        case SQL_TINYINT:
+        case SQL_BIGINT:
+            *pnColumnSize    = getPrecision();
+            *pnDecimalDigits = 0;
+            break;
+        case SQL_BINARY:
+        case SQL_VARBINARY:
+        case SQL_LONGVARBINARY:
+        case SQL_DATETIME:
+            *pnColumnSize    = getLength();
+            *pnDecimalDigits = 0;
+            break;
+        case SQL_INTERVAL:
+            switch ( getConciseType() )
+            {
+                case SQL_INTERVAL_SECOND:
+                case SQL_INTERVAL_DAY_TO_SECOND:
+                case SQL_INTERVAL_HOUR_TO_SECOND:
+                case SQL_INTERVAL_MINUTE_TO_SECOND:
+                    *pnColumnSize    = getLength();
+                    *pnDecimalDigits = getPrecision();
+                    break;
+                default:
+                    *pnColumnSize    = getLength();
+                    *pnDecimalDigits = 0;
+                    break;
+            }
+        case SQL_GUID:
+            *pnColumnSize    = getLength();
+            *pnDecimalDigits = 0;
+            break;
+        default:
+            MYODBCDbgReturn( getDescriptor()->getDiagnostic()->doAppend(
MDiagnostic::DIA_HY000, 0, QString( "%1 %2" ).arg( tr("Unexpected SQL type") ).arg(
getType() ) ) );
+    }
+
+    MYODBCDbgReturn( SQL_SUCCESS );
+}
+
 SQLINTEGER MDescriptorRecord::getAutoUniqueValue()
 {
     MYODBCDbgEnter();

Modified: trunk/MYSQLPlus/MYSQLPlusLib/MDescriptorRecord.h
===================================================================
--- trunk/MYSQLPlus/MYSQLPlusLib/MDescriptorRecord.h	2006-08-08 05:00:43 UTC (rev 477)
+++ trunk/MYSQLPlus/MYSQLPlusLib/MDescriptorRecord.h	2006-08-09 23:13:18 UTC (rev 478)
@@ -100,6 +100,8 @@
 
     /* getters */
     MDescriptor *       getDescriptor();
+    SQLRETURN           getColumnSizeSQL( SQLUINTEGER *pnColumnSize, SQLSMALLINT
*pnDecimalDigits );
+
     virtual SQLINTEGER  getAutoUniqueValue();
     virtual QString     getBaseColumnName();
     virtual QString     getBaseTableName();

Modified: trunk/MYSQLPlus/MYSQLPlusLib/MDescriptorRecordIRD.cpp
===================================================================
--- trunk/MYSQLPlus/MYSQLPlusLib/MDescriptorRecordIRD.cpp	2006-08-08 05:00:43 UTC (rev
477)
+++ trunk/MYSQLPlus/MYSQLPlusLib/MDescriptorRecordIRD.cpp	2006-08-09 23:13:18 UTC (rev
478)
@@ -38,76 +38,7 @@
 {
     MYODBCDbgEnter();
 
-    SQLUINTEGER nColumnSize;
-    SQLSMALLINT nDecimalDigits;
-
-    if ( !pnColumnSize )    pnColumnSize    = &nColumnSize;
-    if ( !pnDecimalDigits ) pnDecimalDigits = &nDecimalDigits;
-
-    switch ( getType() )
-    {
-        case SQL_CHAR:
-        case SQL_VARCHAR:
-        case SQL_LONGVARCHAR:
-        case SQL_WCHAR:
-        case SQL_WVARCHAR:
-        case SQL_WLONGVARCHAR:
-            *pnColumnSize    = getLength();
-            *pnDecimalDigits = getScale();
-            break;
-        case SQL_DECIMAL:
-        case SQL_NUMERIC:
-            *pnColumnSize    = getPrecision();
-            *pnDecimalDigits = getScale();
-            break;
-        case SQL_SMALLINT:
-        case SQL_INTEGER:
-        case SQL_REAL:
-        case SQL_FLOAT:
-        case SQL_DOUBLE:
-            *pnColumnSize    = getPrecision();
-            *pnDecimalDigits = getScale();
-            break;
-        case SQL_BIT:
-            *pnColumnSize    = getLength();
-            *pnDecimalDigits = 0;
-            break;
-        case SQL_TINYINT:
-        case SQL_BIGINT:
-            *pnColumnSize    = getPrecision();
-            *pnDecimalDigits = 0;
-            break;
-        case SQL_BINARY:
-        case SQL_VARBINARY:
-        case SQL_LONGVARBINARY:
-        case SQL_DATETIME:
-            *pnColumnSize    = getLength();
-            *pnDecimalDigits = 0;
-            break;
-        case SQL_INTERVAL:
-            switch ( getConciseType() )
-            {
-                case SQL_INTERVAL_SECOND:
-                case SQL_INTERVAL_DAY_TO_SECOND:
-                case SQL_INTERVAL_HOUR_TO_SECOND:
-                case SQL_INTERVAL_MINUTE_TO_SECOND:
-                    *pnColumnSize    = getLength();
-                    *pnDecimalDigits = getPrecision();
-                    break;
-                default:
-                    *pnColumnSize    = getLength();
-                    *pnDecimalDigits = 0;
-                    break;
-            }
-        case SQL_GUID:
-            *pnColumnSize    = getLength();
-            *pnDecimalDigits = 0;
-            break;
-        default:
-            MYODBCDbgReturn( getDescriptor()->getDiagnostic()->doAppend(
MDiagnostic::DIA_HY000, 0, QString( "%1 %2" ).arg( tr("Unexpected SQL type") ).arg(
getType() ) ) );
-    }
-
-    MYODBCDbgReturn( SQL_SUCCESS );
+    MYODBCDbgReturn( getColumnSizeSQL( pnColumnSize, pnDecimalDigits ) );
 }
 
 BOOLEAN MDescriptorRecordIRD::isVariableLength( SQLSMALLINT nConciseType )

Modified: trunk/MYSQLPlus/MYSQLPlusLib/MStatement.cpp
===================================================================
--- trunk/MYSQLPlus/MYSQLPlusLib/MStatement.cpp	2006-08-08 05:00:43 UTC (rev 477)
+++ trunk/MYSQLPlus/MYSQLPlusLib/MStatement.cpp	2006-08-09 23:13:18 UTC (rev 478)
@@ -2214,7 +2214,79 @@
     */
     pDiagnostic->doClear();
 
-    MYODBCDbgReturn( SQL_ERROR );
+    /*!
+        \internal ODBC RULE (DM)
+
+        The function was called prior to calling SQLPrepare, SQLExecute, or a catalog
function on 
+        the statement handle.
+    */
+    if ( !isPrepared() )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
+    /*!
+        \internal ODBC RULE (DM)
+
+        An asynchronously executing function was called for the 
+        StatementHandle and was still executing when this function 
+        was called.
+    */
+    if ( isAsyncInProgress() )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
+    /*!
+        \internal ODBC RULE (DM)
+
+        SQLExecute, SQLExecDirect, SQLBulkOperations, or SQLSetPos was 
+        called for the StatementHandle and returned SQL_NEED_DATA. 
+        This function was called before data was sent for all 
+        data-at-execution parameters or columns.
+    */
+    if ( isDataNeeded() )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY010 ) );
+
+    /*!
+        \internal ODBC RULE (DM)
+
+        The value specified for the argument ParameterNumber is less than 1.
+    */
+    if ( nParameterNumber < 1 )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07009 ) );
+
+    /*!
+        \internal ODBC RULE
+
+        The value specified for the argument ParameterNumber was greater than the 
+        number of parameters in the associated SQL statement.
+    */
+    MDescriptor *pDescriptor = getImpParamDesc();
+    if ( nParameterNumber > pDescriptor->getCount() )
+        MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_07009 ) );
+
+    /*!
+        \internal ODBC RULE
+        \todo
+
+        The parameter marker was part of a non-DML statement.
+    */
+
+    /*!
+        \internal ODBC RULE
+        \todo
+
+        The parameter marker was part of a SELECT list.
+    */
+
+
+    /* get info from IPD */
+    MDescriptorRecord *pDescriptorRecord = pDescriptor->getRecord( nParameterNumber );
+
+    if ( pnDataTypePtr )
+        *pnDataTypePtr = pDescriptorRecord->getConciseType();
+
+    if ( pnNullablePtr )
+        *pnNullablePtr = pDescriptorRecord->getNullable();
+
+    MYODBCDbgReturn( pDescriptorRecord->getColumnSizeSQL( pnParameterSizePtr,
pnDecimalDigitsPtr ) );
 }
 
 SQLRETURN MStatement::doExecDirect( SQLWCHAR *psStatementText, SQLINTEGER nTextLength )

Thread
Connector/ODBC 5 commit: r478 - in trunk: MYODBCDriver/MYODBCDriverLib MYSQLPlus/MYSQLPlusLibpharvey10 Aug