From: Date: June 28 2006 1:16pm Subject: Connector/ODBC 5 commit: r412 - in trunk: MYODBCDriver/MYODBCDriverLib MYSQLPlus/MYSQLPlusLib List-Archive: http://lists.mysql.com/commits/8396 Message-Id: <200606281116.k5SBGA2Q022236@bk-internal.mysql.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 ODBC 1.0 API +
+ 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 )