2010-11-22 02:39 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)

* contrib/hbodbc/odbc.c
    ! Fixed remaining wrappers to not make decisions based on
      result returned by C level ODBC function, and always
      pass everything back as is.
    % Applied minor optimization as a result of above.
    ! Deprecated SQLEXECUTESCALAR() fixed to initialize buffer
      and length before calling C level ODBC function.
    ! Fixed one double assignment typo from prev commit.
This commit is contained in:
Viktor Szakats
2010-11-22 01:40:16 +00:00
parent b901bd2241
commit f8215eacfd
2 changed files with 62 additions and 69 deletions

View File

@@ -16,6 +16,16 @@
The license applies to all entries newer than 2009-04-28.
*/
2010-11-22 02:39 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* contrib/hbodbc/odbc.c
! Fixed remaining wrappers to not make decisions based on
result returned by C level ODBC function, and always
pass everything back as is.
% Applied minor optimization as a result of above.
! Deprecated SQLEXECUTESCALAR() fixed to initialize buffer
and length before calling C level ODBC function.
! Fixed one double assignment typo from prev commit.
2010-11-21 21:17 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* contrib/hbsqlit3/hdbcsqlt.prg
* contrib/hbpgsql/hdbcpg.prg
@@ -122,7 +132,7 @@
(it's not wrapper's job to check success value and act anything
depending on it).
; TOFIX: There are some more wrappers which do that: SQLDESCRIBECOL(),
SQLCOLATTRIBUTES(), SQLGETCONNECTATTR(), SQLGETSTMTATTR().
SQLCOLATTRIBUTES(), SQLGETCONNECTATTR(), SQLGETSTMTATTR(). [DONE]
% SQLROWCOUNT(), SQLGETINFO(), SQLNUMRESULTCOLS(), SQLCOLATTRIBUTE(): Minor optimization.
! SQLGETINFO(), SQLNUMRESULTCOLS(), SQLGETSTMTATTR(), SQLSETCONNECTATTR(),
SQLGETCONNECTATTR(), SQLDESCRIBECOL(): Setting initial value to parameter retrieved by reference.

View File

@@ -243,7 +243,6 @@ HB_FUNC( SQLGETDATA ) /* hStmt, nField, nType, nLen, @cBuffer --> nRetCode */
if( lLen <= 0 )
lLen = 64;
lInitBuff = lLen;
lBuffLen = 0;
bBuffer = hb_xgrab( ( HB_SIZE ) lLen + 1 );
result = ! SQL_NO_DATA;
@@ -314,7 +313,6 @@ HB_FUNC( SQLDESCRIBECOL ) /* hStmt, nCol, @cName, nLen, @nBufferLen, @nDataType,
SQLSMALLINT wDecimals = ( SQLUSMALLINT ) hb_parni( 8 );
SQLSMALLINT wNullable = ( SQLUSMALLINT ) hb_parni( 9 );
SQLTCHAR * buffer;
SQLRETURN result;
if( lLen <= 0 )
lLen = 64;
@@ -322,28 +320,24 @@ HB_FUNC( SQLDESCRIBECOL ) /* hStmt, nCol, @cName, nLen, @nBufferLen, @nDataType,
buffer = ( SQLTCHAR * ) hb_xgrab( lLen * sizeof( SQLTCHAR ) );
buffer[ 0 ] = '\0';
result = SQLDescribeCol( ( SQLHSTMT ) hb_parptr( 1 ),
( SQLUSMALLINT ) hb_parni( 2 ),
( SQLTCHAR * ) buffer,
( SQLSMALLINT ) lLen,
( SQLSMALLINT * ) &wBufLen,
( SQLSMALLINT * ) &wDataType,
( SQLULEN * ) &wColSize,
( SQLSMALLINT * ) &wDecimals,
( SQLSMALLINT * ) &wNullable );
hb_retni( SQLDescribeCol( ( SQLHSTMT ) hb_parptr( 1 ),
( SQLUSMALLINT ) hb_parni( 2 ),
( SQLTCHAR * ) buffer,
( SQLSMALLINT ) lLen,
( SQLSMALLINT * ) &wBufLen,
( SQLSMALLINT * ) &wDataType,
( SQLULEN * ) &wColSize,
( SQLSMALLINT * ) &wDecimals,
( SQLSMALLINT * ) &wNullable ) );
if( result == SQL_SUCCESS || result == SQL_SUCCESS_WITH_INFO )
{
O_HB_STORSTRLEN( ( O_HB_CHAR * ) buffer, ( HB_SIZE ) wBufLen, 3 );
hb_storni( ( int ) wBufLen, 5 );
hb_storni( ( int ) wDataType, 6 );
hb_stornint( wColSize, 7 );
hb_storni( ( int ) wDecimals, 8 );
hb_storni( ( int ) wNullable, 9 );
}
O_HB_STORSTRLEN( ( O_HB_CHAR * ) buffer, ( HB_SIZE ) wBufLen, 3 );
hb_storni( ( int ) wBufLen, 5 );
hb_storni( ( int ) wDataType, 6 );
hb_stornint( wColSize, 7 );
hb_storni( ( int ) wDecimals, 8 );
hb_storni( ( int ) wNullable, 9 );
hb_xfree( buffer );
hb_retni( result );
}
HB_FUNC( SQLCOLATTRIBUTE ) /* hStmt, nCol, nField, @cName, nLen, @nBufferLen, @nAttribute --> nRetCode */
@@ -355,8 +349,7 @@ HB_FUNC( SQLCOLATTRIBUTE ) /* hStmt, nCol, nField, @cName, nLen, @nBufferLen, @n
#else
SQLINTEGER wNumPtr = ( SQLINTEGER ) hb_parnl( 7 );
#endif
void * bBuffer;
SQLRETURN result;
void * bBuffer;
if( lLen == 0 )
lLen = 64;
@@ -364,32 +357,28 @@ HB_FUNC( SQLCOLATTRIBUTE ) /* hStmt, nCol, nField, @cName, nLen, @nBufferLen, @n
bBuffer = hb_xgrab( lLen );
#if ODBCVER >= 0x0300
result = SQLColAttribute( ( SQLHSTMT ) hb_parptr( 1 ),
( SQLUSMALLINT ) hb_parni( 2 ),
( SQLUSMALLINT ) hb_parni( 3 ),
( SQLPOINTER ) bBuffer,
lLen,
( SQLSMALLINT * ) &wBufLen,
( SQLLEN * ) &wNumPtr );
#else
result = SQLColAttributes( ( SQLHSTMT ) hb_parptr( 1 ),
hb_retni( SQLColAttribute( ( SQLHSTMT ) hb_parptr( 1 ),
( SQLUSMALLINT ) hb_parni( 2 ),
( SQLUSMALLINT ) hb_parni( 3 ),
( SQLPOINTER ) bBuffer,
lLen,
( SQLSMALLINT * ) &wBufLen,
( SQLINTEGER * ) &wNumPtr );
( SQLLEN * ) &wNumPtr ) );
#else
hb_retni( SQLColAttributes( ( SQLHSTMT ) hb_parptr( 1 ),
( SQLUSMALLINT ) hb_parni( 2 ),
( SQLUSMALLINT ) hb_parni( 3 ),
( SQLPOINTER ) bBuffer,
lLen,
( SQLSMALLINT * ) &wBufLen,
( SQLINTEGER * ) &wNumPtr ) );
#endif
if( result == SQL_SUCCESS || result == SQL_SUCCESS_WITH_INFO )
{
hb_storclen( ( char * ) bBuffer, ( HB_SIZE ) wBufLen, 4 );
hb_storni( ( int ) wBufLen, 6 );
hb_stornint( wNumPtr, 7 );
}
hb_storclen( ( char * ) bBuffer, ( HB_SIZE ) wBufLen, 4 );
hb_storni( ( int ) wBufLen, 6 );
hb_stornint( wNumPtr, 7 );
hb_xfree( bBuffer );
hb_retni( result );
}
HB_FUNC( SQLFETCHSCROLL )
@@ -512,22 +501,19 @@ HB_FUNC( SQLGETCONNECTATTR ) /* hDbc, nOption, @cOption */
SQLPOINTER buffer[ 512 ];
SQLINTEGER len = 0;
buffer[ 0 ] = '\0';
SQLRETURN result = SQLGetConnectAttr( ( SQLHDBC ) hb_parptr( 1 ),
( SQLINTEGER ) hb_parnl( 2 ),
( SQLPOINTER ) buffer,
( SQLINTEGER ) sizeof( buffer ),
( SQLINTEGER * ) &len );
hb_storclen( result == SQL_SUCCESS ? ( char * ) buffer : NULL, len, 3 );
hb_retni( result );
hb_retni( SQLGetConnectAttr( ( SQLHDBC ) hb_parptr( 1 ),
( SQLINTEGER ) hb_parnl( 2 ),
( SQLPOINTER ) buffer,
( SQLINTEGER ) sizeof( buffer ),
( SQLINTEGER * ) &len ) );
hb_storclen( ( char * ) buffer, len, 3 );
#else
char bBuffer[ 512 ];
buffer[ 0 ] = '\0';
SQLRETURN result = SQLGetConnectOption( ( SQLHDBC ) hb_parptr( 1 ),
( SQLSMALLINT ) hb_parni( 2 ),
( SQLPOINTER ) bBuffer );
hb_storclen( result == SQL_SUCCESS ? ( char * ) bBuffer : NULL, sizeof( bBuffer ), 3 );
hb_retni( result );
hb_retni( SQLGetConnectOption( ( SQLHDBC ) hb_parptr( 1 ),
( SQLSMALLINT ) hb_parni( 2 ),
( SQLPOINTER ) bBuffer ) );
hb_storc( ( char * ) bBuffer, 3 );
#endif
}
@@ -537,23 +523,19 @@ HB_FUNC( SQLGETSTMTATTR ) /* hStmt, nOption, @cOption */
SQLPOINTER buffer[ 512 ];
SQLINTEGER len = 0;
buffer[ 0 ] = '\0';
SQLRETURN result = SQLGetStmtAttr( ( SQLHSTMT ) hb_parptr( 1 ),
( SQLINTEGER ) hb_parnl( 2 ),
( SQLPOINTER ) buffer,
( SQLINTEGER ) sizeof( buffer ),
( SQLINTEGER * ) &len );
hb_storclen( result == SQL_SUCCESS ? ( char * ) buffer : NULL, len, 3 );
hb_retni( result );
hb_retni( SQLGetStmtAttr( ( SQLHSTMT ) hb_parptr( 1 ),
( SQLINTEGER ) hb_parnl( 2 ),
( SQLPOINTER ) buffer,
( SQLINTEGER ) sizeof( buffer ),
( SQLINTEGER * ) &len ) );
hb_storclen( ( char * ) buffer, len, 3 );
#else
char bBuffer[ 512 ];
buffer[ 0 ] = '\0';
SQLRETURN result = SQLGetStmtOption( ( SQLHSTMT ) hb_parptr( 1 ),
( SQLSMALLINT ) hb_parni( 2 ),
( SQLPOINTER ) bBuffer );
hb_storclen( result == SQL_SUCCESS ? ( char * ) bBuffer : NULL, sizeof( bBuffer ), 3 );
hb_retni( result );
hb_retni( SQLGetStmtOption( ( SQLHSTMT ) hb_parptr( 1 ),
( SQLSMALLINT ) hb_parni( 2 ),
( SQLPOINTER ) bBuffer ) );
hb_storc( ( char * ) bBuffer, 3 );
#endif
}
@@ -602,7 +584,8 @@ HB_FUNC( SQLEXECUTESCALAR )
if( result != SQL_NO_DATA )
{
char bBuffer[ 256 ];
SQLLEN lLen;
SQLLEN lLen = 0;
bBuffer[ 0 ] = '\0';
result = SQLGetData( ( SQLHSTMT ) hStmt,
( SQLUSMALLINT ) 1,
( SQLSMALLINT ) SQL_C_CHAR,