Modified:
trunk/MYODBCDriver/MYODBCDriverLib/SQLForeignKeysW.cpp
trunk/MYODBCDriver/MYODBCDriverLib/SQLGetFunctions.cpp
trunk/MYSQLPlus/MYSQLPlusLib/MStatement.cpp
Log:
started work on SQLForeignKeys
Modified: trunk/MYODBCDriver/MYODBCDriverLib/SQLForeignKeysW.cpp
===================================================================
--- trunk/MYODBCDriver/MYODBCDriverLib/SQLForeignKeysW.cpp 2006-06-28 11:01:40 UTC (rev
411)
+++ trunk/MYODBCDriver/MYODBCDriverLib/SQLForeignKeysW.cpp 2006-06-28 11:16:10 UTC (rev
412)
@@ -8,6 +8,38 @@
*/
#include "MYODBCDriverInternal.h"
+/*!
+ \brief <B>ODBC 1.0 API</B>
+ <BR>
+ Returns;
+ - A list of foreign keys in the specified table (columns
+ in the specified table that refer to primary keys in
+ other tables).
+ - A list of foreign keys in other tables that refer to the primary
+ key in the specified table
+
+ \param hStm Viable statement handle.
+ \param pszPKCatalogName Primary key table catalog name.
+ \param nNameLength1 Length of pszPKCatalogName.
+ \param pszPKSchemaName Primary key table schema name.
+ \param nNameLength2 Length of pszPKSchemaName.
+ \param pszPKTableName Primary key table name.
+ \param nNameLength3 Length of pszPKTableName.
+ \param pszFKCatalogName Foreign key table catalog name.
+ \param nNameLength4 Length of pszFKCatalogName.
+ \param pszFKSchemaName Foreign key table schema name.
+ \param nNameLength5 Length of pszFKSchemaName.
+ \param pszFKTableName Foreign key table name.
+ \param nNameLength6 Length of pszFKTableName.
+
+ \return SQLRETURN
+
+ \retval SQL_SUCCESS Request processed ok.
+ \retval SQL_SUCCESS_WITH_INFO Request was probably processed ok - check diagnostic.
+ \retval SQL_STILL_EXECUTING Still executing from a previous call.
+ \retval SQL_ERROR Request failed.
+ \retval SQL_INVALID_HANDLE Invalid handle was provided.
+*/
SQLRETURN SQL_API SQLForeignKeysW( SQLHSTMT hStm,
SQLWCHAR * psPKCatalogName,
SQLSMALLINT nNameLength1,
Modified: trunk/MYODBCDriver/MYODBCDriverLib/SQLGetFunctions.cpp
===================================================================
--- trunk/MYODBCDriver/MYODBCDriverLib/SQLGetFunctions.cpp 2006-06-28 11:01:40 UTC (rev
411)
+++ trunk/MYODBCDriver/MYODBCDriverLib/SQLGetFunctions.cpp 2006-06-28 11:16:10 UTC (rev
412)
@@ -105,7 +105,7 @@
SQL_API_SQLDRIVERCONNECT,
/* SQL_API_SQLDRIVERS, DM */
/* SQL_API_SQLEXTENDEDFETCH, Dep */
-/* SQL_API_SQLFOREIGNKEYS, */
+ SQL_API_SQLFOREIGNKEYS,
/* SQL_API_SQLMORERESULTS, */
SQL_API_SQLNATIVESQL,
SQL_API_SQLNUMPARAMS,
Modified: trunk/MYSQLPlus/MYSQLPlusLib/MStatement.cpp
===================================================================
--- trunk/MYSQLPlus/MYSQLPlusLib/MStatement.cpp 2006-06-28 11:01:40 UTC (rev 411)
+++ trunk/MYSQLPlus/MYSQLPlusLib/MStatement.cpp 2006-06-28 11:16:10 UTC (rev 412)
@@ -2427,7 +2427,7 @@
MYODBCDbgReturn( SQL_ERROR );
}
-SQLRETURN MStatement::doForeignKeys( SQLWCHAR *psPKCatalogName, SQLSMALLINT nNameLength1,
SQLWCHAR *psPKSchemaName, SQLSMALLINT nNameLength2, SQLWCHAR *psPKTableName, SQLSMALLINT
nNameLength3, SQLWCHAR *psFKCatalogName, SQLSMALLINT nNameLength4, SQLWCHAR
*psFKSchemaName, SQLSMALLINT nNameLength5, SQLWCHAR *psFKTableName, SQLSMALLINT
nNameLength6 )
+SQLRETURN MStatement::doForeignKeys( SQLWCHAR *psPKCatalog, SQLSMALLINT nLength1,
SQLWCHAR *psPKSchema, SQLSMALLINT nLength2, SQLWCHAR *psPKTable, SQLSMALLINT nLength3,
SQLWCHAR *psFKCatalog, SQLSMALLINT nLength4, SQLWCHAR *psFKSchema, SQLSMALLINT nLength5,
SQLWCHAR *psFKTable, SQLSMALLINT nLength6 )
{
MYODBCDbgEnter();
@@ -2438,7 +2438,105 @@
*/
getDiagnostic()->doClear();
- MYODBCDbgReturn( SQL_ERROR );
+ /*!
+ \internal ODBC RULE (DM)
+
+ A cursor was open on the StatementHandle, and SQLFetch or
+ SQLFetchScroll had been called.
+ */
+ if ( getState() == STATE_S6 )
+ MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_24000 ) );
+
+ /*!
+ \internal ODBC RULE (DM)
+
+ A cursor was open on the StatementHandle, but SQLFetch or SQLFetchScroll
+ had not been called.
+ */
+ if ( getState() == STATE_S5 )
+ MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_24000 ) );
+
+ /*!
+ \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 of one of the length arguments was less than 0 but
+ not equal to SQL_NTS.
+ */
+ if ( nLength1 < 0 && nLength1 != SQL_NTS )
+ MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY090 ) );
+ if ( nLength2 < 0 && nLength2 != SQL_NTS )
+ MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY090 ) );
+ if ( nLength3 < 0 && nLength3 != SQL_NTS )
+ MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY090 ) );
+ if ( nLength4 < 0 && nLength4 != SQL_NTS )
+ MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY090 ) );
+ if ( nLength5 < 0 && nLength5 != SQL_NTS )
+ MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY090 ) );
+ if ( nLength6 < 0 && nLength6 != SQL_NTS )
+ MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY090 ) );
+
+ /*!
+ \internal ODBC RULE (DM)
+
+ The value of one of the name length arguments exceeded the maximum length
+ value for the corresponding name.
+ */
+ if ( nLength1 > getConnection()->getInfoMaxCatalogNameLen() )
+ MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY090 ) );
+ if ( nLength2 > getConnection()->getInfoMaxSchemaNameLen() )
+ MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY090 ) );
+ if ( nLength3 > getConnection()->getInfoMaxTableNameLen() )
+ MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY090 ) );
+ if ( nLength4 > getConnection()->getInfoMaxCatalogNameLen() )
+ MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY090 ) );
+ if ( nLength5 > getConnection()->getInfoMaxSchemaNameLen() )
+ MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY090 ) );
+ if ( nLength6 > getConnection()->getInfoMaxTableNameLen() )
+ MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY090 ) );
+
+ /* do it */
+ QString stringPKCatalog;
+ QString stringPKSchema;
+ QString stringPKTable;
+ QString stringFKCatalog;
+ QString stringFKSchema;
+ QString stringFKTable;
+
+ if ( psPKCatalog && nLength1 != 0 )
+ stringPKCatalog = QString::fromUtf16( psPKCatalog, ( nLength1 == SQL_NTS ? -1 :
nLength1 ) );
+ if ( psPKSchema && nLength2 != 0 )
+ stringPKSchema = QString::fromUtf16( psPKSchema, ( nLength2 == SQL_NTS ? -1 :
nLength2 ) );
+ if ( psPKTable && nLength3 != 0 )
+ stringPKTable = QString::fromUtf16( psPKTable, ( nLength3 == SQL_NTS ? -1 :
nLength3 ) );
+ if ( psFKCatalog && nLength4 != 0 )
+ stringFKCatalog = QString::fromUtf16( psFKCatalog, ( nLength4 == SQL_NTS ? -1 :
nLength4 ) );
+ if ( psFKSchema && nLength5 != 0 )
+ stringFKSchema = QString::fromUtf16( psFKSchema, ( nLength5 == SQL_NTS ? -1 :
nLength5 ) );
+ if ( psFKTable && nLength6 != 0 )
+ stringFKTable = QString::fromUtf16( psFKTable, ( nLength6 == SQL_NTS ? -1 :
nLength6 ) );
+
+ MYODBCDbgReturn( SQL_SUCCESS );
}
SQLRETURN MStatement::doFreeStmt( SQLUSMALLINT nOption )
| Thread |
|---|
| • Connector/ODBC 5 commit: r412 - in trunk: MYODBCDriver/MYODBCDriverLib MYSQLPlus/MYSQLPlusLib | pharvey | 28 Jun |