2015-02-25 22:06 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)

* contrib/hbodbc/odbc.c
  * contrib/hbodbc/sql.ch
    * minor formatting to sync with Viktor's branch
    + added missing defines from Viktor's branch

  * contrib/rddads/ads.ch
  * contrib/rddads/adsfunc.c
    + added AdsStmtSetTableReadOnly( <nMode> ) -> <lSuccess>
      (From Viktor's branch: 2015-01-21 18:43 UTC+0100 Viktor Szakats)
    + added ADS_REFRESHCOUNT constant and
         AdsGetRecordCount( [<nHandleType:ADS_TABLE>], ;
               [<nFilterOption:ADS_RESPECTFILTERS>], @nCount ) -> <nErrorCode>
      (From Viktor's branch: 2014-01-19 13:42 UTC+0100 Viktor Szakats)
    ! fixed connection handle parameter position in AdsDDRemoveTable()
      It was 4-th:
         AdsDDRemoveTable( <cTableName>, <deleteFile>, , [ <nConnection> ] )
               -> <lResult>
      Now is 3-rd:
         AdsDDRemoveTable( <cTableName>, <deleteFile>, [ <nConnection> ] )
               -> <lResult>
      (From Viktor's branch: 2014-01-14 23:53 UTC+0100 Viktor Szakats)

  * contrib/rddads/rddads.h
    + autodetection support for 11.10
      (From Viktor's branch: 2013-12-26 01:22 UTC+0100 Viktor Szakáts)

  * contrib/rddads/adsx.c
    * use hb_xgrabz()
    * formatting

  * contrib/rddsql/hbrddsql.h
  * contrib/rddsql/sqlbase.c
    * added const qualifier to SDD method pointer in SQLBASEAREA
    * declare default SDD method table with const qualifier
    * added s_ prefix to the name of static variable with SDD methods
    % optimized GOHOT() method
    * use hb_xgrab() instead of hb_xalloc() to force error when out of memory
    * use hb_xgrabz()

  * contrib/rddsql/sqlmix.c
    * use hb_xgrabz()

  * contrib/sddfb/core.c
    * added s_ prefix to the name of static variable with SDD methods
    % removed unnecessary memset()
    % optimized GOTO() method
    ! fixed very bad typo in record set resizing - for each record 64 dummy
      items were added to array with records so finally this array was 64
      times longer then necessary.

  * contrib/sddmy/core.c
    * added s_ prefix to the name of static variable with SDD methods
    + added new field types from from Viktor's branch
    * use hb_xgrabz()
    % removed redundant comparison to NULL

  * contrib/sddoci/core.c
    * added s_ prefix to the name of static variable with SDD methods
    * check OCI_Initialize() result and generate error if fails
      (synced with Viktor's branch)
    * minor formatting to sync with Viktor's branch
    % removed unnecessary memset()
    % optimized GOTO() method
    ! fixed very bad typo in record set resizing - for each record 64 dummy
      items were added to array with records so finally this array was 64
      times longer then necessary.

  * contrib/sddodbc/core.c
    * replaced unnecessary hb_xgrabz() with hb_xgrab()
    ! fixed very bad typo in record set resizing - for each record 64 dummy
      items were added to array with records so finally this array was 64
      times longer then necessary.

  * contrib/sddpg/core.c
    * added s_ prefix to the name of static variable with SDD methods
    * use hb_xgrabz()

  * contrib/sddsqlt3/core.c
    * added s_ prefix to the name of static variable with SDD methods
    * minor formatting to sync with Viktor's branch
    ! fixed memory leak when RTE ESQLDD_STMTALLOC is generated
      (fix from Viktor's branch)
    % removed unnecessary memset()
    ! fixed very bad typo in record set resizing - for each record 64 dummy
      items were added to array with records so finally this array was 64
      times longer then necessary.
This commit is contained in:
Przemysław Czerpak
2015-02-25 22:06:51 +01:00
parent 0198c7a729
commit 5ac8fc0d4a
17 changed files with 303 additions and 180 deletions

View File

@@ -10,6 +10,94 @@
* Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment
*/
2015-02-25 22:06 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
* contrib/hbodbc/odbc.c
* contrib/hbodbc/sql.ch
* minor formatting to sync with Viktor's branch
+ added missing defines from Viktor's branch
* contrib/rddads/ads.ch
* contrib/rddads/adsfunc.c
+ added AdsStmtSetTableReadOnly( <nMode> ) -> <lSuccess>
(From Viktor's branch: 2015-01-21 18:43 UTC+0100 Viktor Szakats)
+ added ADS_REFRESHCOUNT constant and
AdsGetRecordCount( [<nHandleType:ADS_TABLE>], ;
[<nFilterOption:ADS_RESPECTFILTERS>], @nCount ) -> <nErrorCode>
(From Viktor's branch: 2014-01-19 13:42 UTC+0100 Viktor Szakats)
! fixed connection handle parameter position in AdsDDRemoveTable()
It was 4-th:
AdsDDRemoveTable( <cTableName>, <deleteFile>, , [ <nConnection> ] )
-> <lResult>
Now is 3-rd:
AdsDDRemoveTable( <cTableName>, <deleteFile>, [ <nConnection> ] )
-> <lResult>
(From Viktor's branch: 2014-01-14 23:53 UTC+0100 Viktor Szakats)
* contrib/rddads/rddads.h
+ autodetection support for 11.10
(From Viktor's branch: 2013-12-26 01:22 UTC+0100 Viktor Szakáts)
* contrib/rddads/adsx.c
* use hb_xgrabz()
* formatting
* contrib/rddsql/hbrddsql.h
* contrib/rddsql/sqlbase.c
* added const qualifier to SDD method pointer in SQLBASEAREA
* declare default SDD method table with const qualifier
* added s_ prefix to the name of static variable with SDD methods
% optimized GOHOT() method
* use hb_xgrab() instead of hb_xalloc() to force error when out of memory
* use hb_xgrabz()
* contrib/rddsql/sqlmix.c
* use hb_xgrabz()
* contrib/sddfb/core.c
* added s_ prefix to the name of static variable with SDD methods
% removed unnecessary memset()
% optimized GOTO() method
! fixed very bad typo in record set resizing - for each record 64 dummy
items were added to array with records so finally this array was 64
times longer then necessary.
* contrib/sddmy/core.c
* added s_ prefix to the name of static variable with SDD methods
+ added new field types from from Viktor's branch
* use hb_xgrabz()
% removed redundant comparison to NULL
* contrib/sddoci/core.c
* added s_ prefix to the name of static variable with SDD methods
* check OCI_Initialize() result and generate error if fails
(synced with Viktor's branch)
* minor formatting to sync with Viktor's branch
% removed unnecessary memset()
% optimized GOTO() method
! fixed very bad typo in record set resizing - for each record 64 dummy
items were added to array with records so finally this array was 64
times longer then necessary.
* contrib/sddodbc/core.c
* replaced unnecessary hb_xgrabz() with hb_xgrab()
! fixed very bad typo in record set resizing - for each record 64 dummy
items were added to array with records so finally this array was 64
times longer then necessary.
* contrib/sddpg/core.c
* added s_ prefix to the name of static variable with SDD methods
* use hb_xgrabz()
* contrib/sddsqlt3/core.c
* added s_ prefix to the name of static variable with SDD methods
* minor formatting to sync with Viktor's branch
! fixed memory leak when RTE ESQLDD_STMTALLOC is generated
(fix from Viktor's branch)
% removed unnecessary memset()
! fixed very bad typo in record set resizing - for each record 64 dummy
items were added to array with records so finally this array was 64
times longer then necessary.
2015-02-24 17:49 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
* contrib/sddfb/core.c
* contrib/sddmy/core.c

View File

@@ -585,6 +585,24 @@ HB_FUNC( SQLFETCH ) /* hStmt --> nRetCode */
hb_errRT_BASE_SubstR( EG_ARG, 0, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
}
HB_FUNC( SQLFETCHSCROLL )
{
SQLHSTMT hStmt = hb_SQLHSTMT_par( 1 );
if( hStmt )
{
#if ODBCVER >= 0x0300
hb_retni( SQLFetchScroll( hStmt,
( SQLSMALLINT ) hb_parni( 2 ),
( SQLLEN ) hb_parnint( 3 ) ) );
#else
hb_retni( SQL_ERROR );
#endif
}
else
hb_errRT_BASE_SubstR( EG_ARG, 0, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
}
HB_FUNC( SQLGETDATA ) /* hStmt, nField, nType, [nMaxLen], @xValue --> nRetCode */
{
SQLHSTMT hStmt = hb_SQLHSTMT_par( 1 );
@@ -888,24 +906,6 @@ HB_FUNC( SQLCOLATTRIBUTE ) /* hStmt, nCol, nField, @cName, nLen, @nBufferLen, @n
hb_errRT_BASE_SubstR( EG_ARG, 0, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
}
HB_FUNC( SQLFETCHSCROLL )
{
SQLHSTMT hStmt = hb_SQLHSTMT_par( 1 );
if( hStmt )
{
#if ODBCVER >= 0x0300
hb_retni( SQLFetchScroll( hStmt,
( SQLSMALLINT ) hb_parni( 2 ),
( SQLLEN ) hb_parnint( 3 ) ) );
#else
hb_retni( SQL_ERROR );
#endif
}
else
hb_errRT_BASE_SubstR( EG_ARG, 0, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
}
HB_FUNC( SQLERROR ) /* hEnv, hDbc, hStmt, @cErrorClass, @nType, @cErrorMsg */
{
SQLHENV hEnv = hb_SQLHENV_par( 1 );

View File

@@ -49,14 +49,19 @@
#ifndef HBODBC_CH_
#define HBODBC_CH_
/* RETCODEs */
/* Result codes */
#define SQL_INVALID_HANDLE -2
#define SQL_ERROR -1
#define SQL_SUCCESS 0
#define SQL_SUCCESS_WITH_INFO 1
#define SQL_NO_DATA_FOUND 100
#define SQL_STILL_EXECUTING 2
#define SQL_NO_DATA 100
#define SQL_NO_DATA_FOUND SQL_NO_DATA
#define SQL_NEED_DATA 99
/* Test for SQL_SUCCESS or SQL_SUCCESS_WITH_INFO */
#define SQL_SUCCEEDED( rc ) ( hb_bitAnd( rc, hb_bitNot( SQL_SUCCESS_WITH_INFO ) ) == SQL_SUCCESS )
/* Standard SQL datatypes, using ANSI type numbering */
#define SQL_CHAR 1
#define SQL_NUMERIC 2
@@ -70,22 +75,29 @@
#define SQL_TIME 10
#define SQL_TIMESTAMP 11
#define SQL_VARCHAR 12
#define SQL_TYPE_DATE 91
#define SQL_TYPE_TIME 92
#define SQL_TYPE_TIMESTAMP 93
#define SQL_LONGVARCHAR -1
#define SQL_BINARY -2
#define SQL_VARBINARY -3
#define SQL_LONGVARBINARY -4
#define SQL_BIGINT -5
#define SQL_TINYINT -6
#define SQL_BIT -7
#define SQL_WCHAR -8
#define SQL_NVARCHAR -9
#define SQL_WVARCHAR -9
#define SQL_NVARCHAR SQL_WVARCHAR
#define SQL_WLONGVARCHAR -10
#define SQL_TYPE_NULL 0
#define SQL_TYPE_MIN SQL_NVARCHAR
#define SQL_TYPE_MAX SQL_VARCHAR
#define SQL_TYPE_MIN SQL_WLONGVARCHAR
#define SQL_TYPE_MAX SQL_TYPE_TIMESTAMP
#define SQL_ALL_TYPES 0
/* NULL status constants. These are used in SQLColumns, SQLColAttributes,
SQLDescribeCol, SQLDescribeParam, and SQLSpecialColumns to describe the
nullablity of a column in a table. */
/* NULL status constants. These are used in SQLColumns(), SQLColAttribute(),
SQLDescribeCol(), SQLDescribeParam() and SQLSpecialColumns() to describe the
nullablity of a column in a table. */
#define SQL_NO_NULLS 0
#define SQL_NULLABLE 1
#define SQL_NULLABLE_UNKNOWN 2
@@ -95,17 +107,13 @@ nullablity of a column in a table. */
#define SQL_DATA_AT_EXEC -2
#define SQL_NTS -3
/* SQLFreeStmt defines */
/* SQLFreeStmt() defines */
#define SQL_CLOSE 0
#define SQL_DROP 1
#define SQL_UNBIND 2
#define SQL_RESET_PARAMS 3
/* SQLTransact defines */
#define SQL_COMMIT 0
#define SQL_ROLLBACK 1
/* SQLColAttributes defines */
/* SQLColAttribute() defines */
#define SQL_COLUMN_COUNT 0
#define SQL_COLUMN_NAME 1
#define SQL_COLUMN_TYPE 2
@@ -130,23 +138,19 @@ nullablity of a column in a table. */
#define SQL_COLATT_OPT_MIN SQL_COLUMN_COUNT
/* SQLColAttributes subdefines for SQL_COLUMN_UPDATABLE */
/* SQLColAttribute() subdefines for SQL_COLUMN_UPDATABLE */
#define SQL_ATTR_READONLY 0
#define SQL_ATTR_WRITE 1
#define SQL_ATTR_READWRITE_UNKNOWN 2
/* SQLColAttributes subdefines for SQL_COLUMN_SEARCHABLE */
/* These are also used by SQLGetInfo */
/* SQLColAttribute() subdefines for SQL_COLUMN_SEARCHABLE */
/* These are also used by SQLGetInfo() */
#define SQL_UNSEARCHABLE 0
#define SQL_LIKE_ONLY 1
#define SQL_ALL_EXCEPT_LIKE 2
#define SQL_SEARCHABLE 3
/* SQLError defines */
#define SQL_NULL_HENV 0
#define SQL_NULL_HDBC 0
#define SQL_NULL_HSTMT 0
/* SQLFetchScroll() types */
#define SQL_FETCH_NEXT 1
#define SQL_FETCH_FIRST 2
#define SQL_FETCH_LAST 3
@@ -249,6 +253,7 @@ nullablity of a column in a table. */
#define SQL_ASYNC_ENABLE 4
#define SQL_BIND_TYPE 5
/* SQLGetDiagRec() handle types */
#define SQL_HANDLE_ENV 1
#define SQL_HANDLE_DBC 2
#define SQL_HANDLE_STMT 3

View File

@@ -100,6 +100,7 @@
#define ADS_RESPECTFILTERS 1
#define ADS_IGNOREFILTERS 2
#define ADS_RESPECTSCOPES 3
#define ADS_REFRESHCOUNT 4
/* Server type constants for ORing with AdsSetServerType() */
#define ADS_LOCAL_SERVER 1
@@ -122,7 +123,7 @@
#define ADS_MGMT_NETWARE5_OR_NEWER_SERVER 5
#define ADS_MGMT_LINUX_SERVER 6
/* ACE Handle types */
/* ACE handle types */
#define ADS_CONNECTION 1
#define ADS_TABLE 2
#define ADS_INDEX_ORDER 3
@@ -141,13 +142,13 @@
#define ADS_DD_COLUMN_OBJECT 4
#define ADS_DD_INDEX_OBJECT 5
#define ADS_DD_VIEW_OBJECT 6
#define ADS_DD_VIEW_OR_TABLE_OBJECT 7 /* Used in AdsFindFirst/NextTable */
#define ADS_DD_VIEW_OR_TABLE_OBJECT 7 /* Used in AdsFindFirstTable()/AdsFindNextTable() */
#define ADS_DD_USER_OBJECT 8
#define ADS_DD_USER_GROUP_OBJECT 9
#define ADS_DD_PROCEDURE_OBJECT 10
#define ADS_DD_DATABASE_OBJECT 11
#define ADS_DD_LINK_OBJECT 12
#define ADS_DD_TABLE_VIEW_OR_LINK_OBJECT 13 /* Used in v6.2 AdsFindFirst/NextTable */
#define ADS_DD_TABLE_VIEW_OR_LINK_OBJECT 13 /* Used in 6.2 AdsFindFirstTable()/AdsFindNextTable() */
/* Common properties numbers < 100 */
#define ADS_DD_COMMENT 1
@@ -166,7 +167,7 @@
#define ADS_DD_INTERNET_SECURITY_LEVEL 108
#define ADS_DD_MAX_FAILED_ATTEMPTS 109
#define ADS_DD_ALLOW_ADSSYS_NET_ACCESS 110
#define ADS_DD_VERSION_MAJOR 111 /* properties for customer dd version */
#define ADS_DD_VERSION_MAJOR 111 /* properties for customer DD version */
#define ADS_DD_VERSION_MINOR 112
/* Table properties between 200 and 299 */

View File

@@ -592,6 +592,37 @@ HB_FUNC( ADSFILE2BLOB )
hb_errRT_DBCMD( EG_ARG, 1014, NULL, HB_ERR_FUNCNAME );
}
HB_FUNC( ADSGETRECORDCOUNT )
{
ADSAREAP pArea = hb_adsGetWorkAreaPointer();
if( pArea )
{
ADSHANDLE hHandle;
UNSIGNED32 ulKey = 0;
switch( hb_parnidef( 1, ADS_TABLE ) )
{
case ADS_INDEX_ORDER:
hHandle = pArea->hOrdCurrent;
break;
case ADS_STATEMENT:
hHandle = pArea->hStatement;
break;
default:
hHandle = pArea->hTable;
}
hb_retnl( ( long ) AdsGetRecordCount( hHandle,
( UNSIGNED16 ) hb_parnidef( 2, ADS_RESPECTFILTERS ) /* usFilterOption */,
&ulKey ) );
hb_stornl( ( long ) ulKey, 3 );
}
else
hb_errRT_DBCMD( EG_NOTABLE, 2001, NULL, HB_ERR_FUNCNAME );
}
/* 2nd parameter: unsupported Bag Name. */
HB_FUNC( ADSKEYNO )
{
@@ -1224,6 +1255,19 @@ HB_FUNC( ADSSTMTSETTABLELOCKTYPE )
( UNSIGNED16 ) hb_parni( 1 ) /* usLockType */ ) == AE_SUCCESS );
}
HB_FUNC( ADSSTMTSETTABLEREADONLY )
{
#if ADS_LIB_VERSION >= 900
ADSAREAP pArea = hb_adsGetWorkAreaPointer();
hb_retl( pArea && pArea->hStatement &&
AdsStmtSetTableReadOnly( pArea->hStatement,
( UNSIGNED16 ) hb_parnidef( 1, ADS_CURSOR_READONLY ) ) == AE_SUCCESS );
#else
hb_retl( HB_FALSE );
#endif
}
HB_FUNC( ADSCREATESQLSTATEMENT )
{
HB_BOOL fResult = HB_FALSE;
@@ -1818,11 +1862,9 @@ HB_FUNC( ADSDDADDTABLE )
HB_FUNC( ADSDDREMOVETABLE )
{
#if ADS_LIB_VERSION >= 600
/* TOFIX: Due to bad and very old typo, the connection handle is
taken from 4th parameter instead of 3rd. [vszakats] */
hb_retl( AdsDDRemoveTable( HB_ADS_PARCONNECTION( 4 ) /* hConnect */,
hb_retl( AdsDDRemoveTable( HB_ADS_PARCONNECTION( 3 ) /* hConnect */,
( UNSIGNED8 * ) hb_parcx( 1 ) /* pTableName */,
( UNSIGNED16 ) ( HB_ISNUM( 2 ) ? hb_parni( 2 ) : hb_parldef( 2, 0 ) ) /* usDeleteFiles */ ) == AE_SUCCESS );
( UNSIGNED16 ) ( HB_ISNUM( 2 ) ? hb_parni( 2 ) : hb_parl( 2 ) ) /* usDeleteFiles */ ) == AE_SUCCESS );
#else
hb_retl( HB_FALSE );
#endif
@@ -2379,13 +2421,13 @@ HB_FUNC( ADSCREATEFTSINDEX )
( UNSIGNED32 ) hb_parnldef( 4, ADS_DEFAULT ) /* ulPageSize */ ,
( UNSIGNED32 ) hb_parnldef( 5, 3 ) /* ulMinWordLen */ ,
( UNSIGNED32 ) hb_parnldef( 6, 30 ) /* ulMaxWordLen */ ,
( UNSIGNED16 ) hb_parldef( 7, 1 ) /* usUseDefaultDelim */ ,
( UNSIGNED16 ) hb_parldef( 7, HB_TRUE ) /* usUseDefaultDelim */ ,
( UNSIGNED8 * ) hb_parc( 8 ) /* pucDelimiters */ ,
( UNSIGNED16 ) hb_parldef( 9, 1 ) /* usUseDefaultNoise */ ,
( UNSIGNED16 ) hb_parldef( 9, HB_TRUE ) /* usUseDefaultNoise */ ,
( UNSIGNED8 * ) hb_parc( 10 ) /* pucNoiseWords */ ,
( UNSIGNED16 ) hb_parldef( 11, 1 ) /* usUseDefaultDrop */ ,
( UNSIGNED16 ) hb_parldef( 11, HB_TRUE ) /* usUseDefaultDrop */ ,
( UNSIGNED8 * ) hb_parc( 12 ) /* pucDropChars */ ,
( UNSIGNED16 ) hb_parldef( 13, 1 ) /* usUseDefaultConditionals */ ,
( UNSIGNED16 ) hb_parldef( 13, HB_TRUE ) /* usUseDefaultConditionals */ ,
( UNSIGNED8 * ) hb_parc( 14 ) /* pucConditionalChars */ ,
( UNSIGNED8 * ) hb_parc( 15 ) /* pucReserved1 */ ,
( UNSIGNED8 * ) hb_parc( 16 ) /* pucReserved2 */ ,

View File

@@ -407,8 +407,7 @@ static PMIXTAG mixTagCreate( const char * szTagName, PHB_ITEM pKeyExpr, PHB_ITEM
PHB_ITEM pItem, pEvalItem = NULL;
pTag = ( PMIXTAG ) hb_xgrab( sizeof( MIXTAG ) );
memset( pTag, 0, sizeof( MIXTAG ) );
pTag = ( PMIXTAG ) hb_xgrabz( sizeof( MIXTAG ) );
pTag->szName = ( char * ) hb_xgrab( MIX_MAXTAGNAMELEN + 1 );
hb_strncpyUpperTrim( pTag->szName, szTagName, MIX_MAXTAGNAMELEN );
@@ -1145,7 +1144,7 @@ static HB_ERRCODE adsxOrderCreate( ADSXAREAP pArea, LPDBORDERCREATEINFO pOrderIn
else
szKeyExpr[ 0 ] = '\0';
u32RetVal = AdsCreateIndex61(
u32RetVal = AdsCreateIndex61(
pArea->adsarea.area.lpdbOrdCondInfo->fUseCurrent ? pArea->adsarea.hOrdCurrent : pArea->adsarea.hTable,
( UNSIGNED8 * ) pOrderInfo->abBagName,
( UNSIGNED8 * ) pOrderInfo->atomBagName,
@@ -1378,7 +1377,6 @@ static HB_ERRCODE adsxOrderDestroy( ADSXAREAP pArea, LPDBORDERINFO pOrderInfo )
if( pTag )
{
if( pTag == pArea->pTagList )
pArea->pTagList = pTag->pNext;
else
@@ -1551,7 +1549,7 @@ static HB_ERRCODE adsxOrderInfo( ADSXAREAP pArea, HB_USHORT uiIndex, LPDBORDERIN
pKey = mixKeyEval( pTag, pArea );
if( ! mixFindKey( pTag, pKey, &ulKeyPos + 1 ) )
if( ! mixFindKey( pTag, pKey, &ulKeyPos ) )
ulKeyPos = 0;
mixKeyFree( pKey );

View File

@@ -68,8 +68,10 @@
#include "ace.h"
/* Autodetect ACE version. */
#if defined( ADS_GET_FORMAT_WEB )
#define _ADS_LIB_VERSION 1100 /* or upper */
#if defined( ADS_ROOT_DD_ALIAS )
#define _ADS_LIB_VERSION 1110 /* or upper */
#elif defined( ADS_GET_FORMAT_WEB )
#define _ADS_LIB_VERSION 1100
#elif defined( ADS_GET_UTF8 )
#define _ADS_LIB_VERSION 1010
#elif defined( ADS_DEFAULT_SQL_TIMEOUT )

View File

@@ -92,6 +92,7 @@ DYNAMIC AdsGetMemoDataType
DYNAMIC AdsGetNumActiveLinks
DYNAMIC AdsGetNumIndexes
DYNAMIC AdsGetNumOpenTables
DYNAMIC ADSGETRECORDCOUNT
DYNAMIC AdsGetRelKeyPos
DYNAMIC AdsGetServerName
DYNAMIC AdsGetServerTime
@@ -159,6 +160,7 @@ DYNAMIC AdsSetServerType
DYNAMIC AdsShowError
DYNAMIC AdsStmtSetTableLockType
DYNAMIC AdsStmtSetTablePassword
DYNAMIC ADSSTMTSETTABLEREADONLY
DYNAMIC AdsTestLogin
DYNAMIC AdsTestRecLocks
DYNAMIC AdsUnlockRecord

View File

@@ -83,7 +83,7 @@ typedef struct _SQLBASEAREA
HB_ULONG ulConnection;
struct _SQLDDCONNECTION * pConnection;
struct _SDDNODE * pSDD;
const struct _SDDNODE * pSDD;
char * szQuery; /* SQL query */

View File

@@ -130,7 +130,7 @@ static HB_ERRCODE sddGetValue( SQLBASEAREAP pArea, HB_USHORT uiIndex, PHB_ITEM p
static HB_ERRCODE sddGetVarLen( SQLBASEAREAP pArea, HB_USHORT uiIndex, HB_ULONG * pLength );
static SDDNODE sddNull = {
static const SDDNODE s_sddNull = {
NULL,
"NULL",
( SDDFUNC_CONNECT ) sddConnect,
@@ -236,21 +236,21 @@ int hb_sddRegister( PSDDNODE pSdd )
/* "Inheritance" from NULL SDD */
if( pSdd->Connect == NULL )
pSdd->Connect = sddNull.Connect;
pSdd->Connect = s_sddNull.Connect;
if( pSdd->Disconnect == NULL )
pSdd->Disconnect = sddNull.Disconnect;
pSdd->Disconnect = s_sddNull.Disconnect;
if( pSdd->Execute == NULL )
pSdd->Execute = sddNull.Execute;
pSdd->Execute = s_sddNull.Execute;
if( pSdd->Open == NULL )
pSdd->Open = sddNull.Open;
pSdd->Open = s_sddNull.Open;
if( pSdd->Close == NULL )
pSdd->Close = sddNull.Close;
pSdd->Close = s_sddNull.Close;
if( pSdd->GoTo == NULL )
pSdd->GoTo = sddNull.GoTo;
pSdd->GoTo = s_sddNull.GoTo;
if( pSdd->GetValue == NULL )
pSdd->GetValue = sddNull.GetValue;
pSdd->GetValue = s_sddNull.GetValue;
if( pSdd->GetVarLen == NULL )
pSdd->GetVarLen = sddNull.GetVarLen;
pSdd->GetVarLen = s_sddNull.GetVarLen;
while( pNode )
{
@@ -505,13 +505,13 @@ static HB_ERRCODE sqlbaseGoHot( SQLBASEAREAP pArea )
HB_USHORT us;
pArray = hb_itemArrayNew( pArea->area.uiFieldCount );
pItem = hb_itemNew( NULL );
for( us = 1; us <= pArea->area.uiFieldCount; us++ )
{
pItem = hb_itemNew( NULL );
if( SELF_GETVALUE( &pArea->area, us, pItem ) == HB_SUCCESS )
hb_arraySetForward( pArray, us, pItem );
hb_itemRelease( pItem );
}
hb_itemRelease( pItem );
pArea->pRecord = pArray;
pArea->bRecordFlags |= SQLDD_FLAG_CACHED;
pArea->fRecordChanged = HB_TRUE;
@@ -665,7 +665,7 @@ static HB_ERRCODE sqlbaseCreate( SQLBASEAREAP pArea, LPDBOPENINFO pOpenInfo )
pArea->pSDD = pArea->pConnection->pSDD;
}
else
pArea->pSDD = &sddNull;
pArea->pSDD = &s_sddNull;
pItemEof = hb_itemArrayNew( pArea->area.uiFieldCount );
@@ -747,11 +747,11 @@ static HB_ERRCODE sqlbaseCreate( SQLBASEAREAP pArea, LPDBOPENINFO pOpenInfo )
pArea->ulRecCount = 0;
pArea->pRow = ( void ** ) hb_xalloc( SQLDD_ROWSET_RESIZE * sizeof( void * ) );
pArea->pRowFlags = ( HB_BYTE * ) hb_xalloc( SQLDD_ROWSET_RESIZE * sizeof( HB_BYTE ) );
pArea->pRow = ( void ** ) hb_xgrab( SQLDD_ROWSET_RESIZE * sizeof( void * ) );
pArea->pRowFlags = ( HB_BYTE * ) hb_xgrab( SQLDD_ROWSET_RESIZE * sizeof( HB_BYTE ) );
pArea->ulRecMax = SQLDD_ROWSET_RESIZE;
*( pArea->pRow ) = pItemEof;
pArea->pRow[ 0 ] = pItemEof;
pArea->pRowFlags[ 0 ] = SQLDD_FLAG_CACHED;
pArea->fFetched = HB_TRUE;
@@ -998,8 +998,7 @@ static HB_ERRCODE sqlbaseRddInfo( LPRDDNODE pRDD, HB_USHORT uiIndex, HB_ULONG ul
}
hb_rddsqlSetError( 0, NULL, NULL, NULL, 0 );
pConn = ( SQLDDCONNECTION * ) hb_xgrab( sizeof( SQLDDCONNECTION ) );
memset( pConn, 0, sizeof( SQLDDCONNECTION ) );
pConn = ( SQLDDCONNECTION * ) hb_xgrabz( sizeof( SQLDDCONNECTION ) );
if( pNode && pNode->Connect( pConn, pItem ) == HB_SUCCESS )
{
pConn->pSDD = pNode;

View File

@@ -339,8 +339,7 @@ static PMIXNODE hb_mixTagCreateNode( PMIXTAG pTag, HB_BOOL fLeaf )
ulSize = ( fLeaf ? sizeof( MIXNODELEAF ) : sizeof( MIXNODE ) ) + MIX_NODE_ORDER * pTag->uiTotalLen;
pNode = ( PMIXNODE ) hb_xgrab( ulSize );
memset( pNode, 0, ulSize );
pNode = ( PMIXNODE ) hb_xgrabz( ulSize );
pNode->Leaf = fLeaf ? 1 : 0;
return pNode;
}
@@ -765,8 +764,7 @@ static PMIXTAG hb_mixTagCreate( const char * szTagName, PHB_ITEM pKeyExpr, PHB_I
HB_LONG lStep = 0;
PHB_ITEM pItem, pEvalItem = NULL;
pTag = ( PMIXTAG ) hb_xgrab( sizeof( MIXTAG ) );
memset( pTag, 0, sizeof( MIXTAG ) );
pTag = ( PMIXTAG ) hb_xgrabz( sizeof( MIXTAG ) );
pTag->pArea = pArea;

View File

@@ -80,7 +80,7 @@ static HB_ERRCODE fbClose( SQLBASEAREAP pArea );
static HB_ERRCODE fbGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo );
static SDDNODE firebirddd = {
static SDDNODE s_firebirddd = {
NULL,
"FIREBIRD",
( SDDFUNC_CONNECT ) fbConnect,
@@ -98,7 +98,7 @@ static void hb_firebirddd_init( void * cargo )
{
HB_SYMBOL_UNUSED( cargo );
if( ! hb_sddRegister( &firebirddd ) || ( sizeof( isc_db_handle ) != sizeof( void * ) ) )
if( ! hb_sddRegister( &s_firebirddd ) || ( sizeof( isc_db_handle ) != sizeof( void * ) ) )
hb_errInternal( HB_EI_RDDINVALID, NULL, NULL, NULL );
}
@@ -434,10 +434,9 @@ static HB_ERRCODE fbOpen( SQLBASEAREAP pArea )
pArea->pRow = ( void ** ) hb_xgrab( SQLDD_ROWSET_INIT * sizeof( void * ) );
pArea->pRowFlags = ( HB_BYTE * ) hb_xgrab( SQLDD_ROWSET_INIT * sizeof( HB_BYTE ) );
memset( pArea->pRowFlags, 0, SQLDD_ROWSET_INIT * sizeof( HB_BYTE ) );
pArea->ulRecMax = SQLDD_ROWSET_INIT;
*pArea->pRow = pItemEof;
pArea->pRow[ 0 ] = pItemEof;
pArea->pRowFlags[ 0 ] = SQLDD_FLAG_CACHED;
return HB_SUCCESS;
@@ -469,7 +468,6 @@ static HB_ERRCODE fbGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo )
SDDDATA * pSDDData = ( SDDDATA * ) pArea->pSDDData;
ISC_STATUS_ARRAY status;
XSQLVAR * pVar;
PHB_ITEM pItem, pArray;
HB_USHORT ui;
ISC_STATUS lErr;
short iType;
@@ -483,6 +481,8 @@ static HB_ERRCODE fbGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo )
if( lErr == 0 )
{
PHB_ITEM pItem = NULL, pArray;
pArray = hb_itemArrayNew( pArea->area.uiFieldCount );
for( ui = 0; ui < pArea->area.uiFieldCount; ui++ )
{
@@ -497,51 +497,51 @@ static HB_ERRCODE fbGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo )
switch( iType )
{
case SQL_TEXT:
pItem = hb_itemPutCL( NULL, pVar->sqldata, pVar->sqllen );
pItem = hb_itemPutCL( pItem, pVar->sqldata, pVar->sqllen );
break;
case SQL_VARYING:
pItem = hb_itemPutCL( NULL, pVar->sqldata + 2, *( short * ) pVar->sqldata );
pItem = hb_itemPutCL( pItem, pVar->sqldata + 2, *( short * ) pVar->sqldata );
break;
case SQL_SHORT:
if( pField->uiDec == 0 )
pItem = hb_itemPutNILen( NULL, *( short * ) pVar->sqldata, 6 );
pItem = hb_itemPutNILen( pItem, *( short * ) pVar->sqldata, 6 );
else
pItem = hb_itemPutNDLen( NULL, hb_numDecConv( *( short * ) pVar->sqldata, ( int ) pField->uiDec ),
pItem = hb_itemPutNDLen( pItem, hb_numDecConv( *( short * ) pVar->sqldata, ( int ) pField->uiDec ),
6 - pField->uiDec, ( int ) pField->uiDec );
break;
case SQL_LONG:
if( pField->uiDec == 0 )
pItem = hb_itemPutNLLen( NULL, *( short * ) pVar->sqldata, 11 );
pItem = hb_itemPutNLLen( pItem, *( short * ) pVar->sqldata, 11 );
else
pItem = hb_itemPutNDLen( NULL, hb_numDecConv( *( long * ) pVar->sqldata, ( int ) pField->uiDec ),
pItem = hb_itemPutNDLen( pItem, hb_numDecConv( *( long * ) pVar->sqldata, ( int ) pField->uiDec ),
11 - pField->uiDec, ( int ) pField->uiDec );
break;
case SQL_FLOAT:
pItem = hb_itemPutNDLen( NULL, *( float * ) pVar->sqldata, 20 - pField->uiDec, pField->uiDec );
pItem = hb_itemPutNDLen( pItem, *( float * ) pVar->sqldata, 20 - pField->uiDec, pField->uiDec );
break;
case SQL_DOUBLE:
pItem = hb_itemPutNDLen( NULL, *( double * ) pVar->sqldata, 20 - pField->uiDec, pField->uiDec );
pItem = hb_itemPutNDLen( pItem, *( double * ) pVar->sqldata, 20 - pField->uiDec, pField->uiDec );
break;
case SQL_TIMESTAMP:
pItem = hb_itemPutTDT( NULL, ( ( ISC_TIMESTAMP * ) pVar->sqldata )->timestamp_date + 2400001,
pItem = hb_itemPutTDT( pItem, ( ( ISC_TIMESTAMP * ) pVar->sqldata )->timestamp_date + 2400001,
( ( ISC_TIMESTAMP * ) pVar->sqldata )->timestamp_time / 10 );
break;
default:
pItem = hb_itemNew( NULL );
/* default value is NIL */
break;
}
hb_arraySetForward( pArray, ui + 1, pItem );
hb_itemRelease( pItem );
if( pItem )
hb_arraySetForward( pArray, ui + 1, pItem );
}
if( pArea->ulRecCount + 1 <= pArea->ulRecMax )
if( pArea->ulRecCount + 1 >= pArea->ulRecMax )
{
pArea->pRow = ( void ** ) hb_xrealloc( pArea->pRow, ( pArea->ulRecMax + SQLDD_ROWSET_RESIZE ) * sizeof( void * ) );
pArea->pRowFlags = ( HB_BYTE * ) hb_xrealloc( pArea->pRowFlags, ( pArea->ulRecMax + SQLDD_ROWSET_RESIZE ) * sizeof( HB_BYTE ) );
@@ -551,8 +551,9 @@ static HB_ERRCODE fbGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo )
pArea->ulRecCount++;
pArea->pRow[ pArea->ulRecCount ] = pArray;
pArea->pRowFlags[ pArea->ulRecCount ] = SQLDD_FLAG_CACHED;
hb_itemRelease( pItem );
}
else if( lErr == 100L )
else if( lErr == 100 )
{
pArea->fFetched = HB_TRUE;
if( isc_dsql_free_statement( status, phStmt, DSQL_drop ) )

View File

@@ -85,7 +85,7 @@ static HB_ERRCODE mysqlGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo );
static HB_ERRCODE mysqlGetValue( SQLBASEAREAP pArea, HB_USHORT uiIndex, PHB_ITEM pItem );
static SDDNODE mysqldd =
static SDDNODE s_mysqldd =
{
NULL,
"MYSQL",
@@ -104,7 +104,7 @@ static void hb_mysqldd_init( void * cargo )
{
HB_SYMBOL_UNUSED( cargo );
if( ! hb_sddRegister( &mysqldd ) ||
if( ! hb_sddRegister( &s_mysqldd ) ||
( sizeof( MYSQL_ROW_OFFSET ) != sizeof( void * ) ) )
{
hb_errInternal( HB_EI_RDDINVALID, NULL, NULL, NULL );
@@ -314,20 +314,31 @@ static HB_ERRCODE mysqlOpen( SQLBASEAREAP pArea )
case MYSQL_TYPE_TIMESTAMP:
case MYSQL_TYPE_DATETIME:
#if MYSQL_VERSION_ID >= 50610
case MYSQL_TYPE_TIMESTAMP2:
case MYSQL_TYPE_DATETIME2:
#endif
dbFieldInfo.uiType = HB_FT_TIMESTAMP;
dbFieldInfo.uiLen = 8;
break;
case MYSQL_TYPE_TIME:
#if MYSQL_VERSION_ID >= 50610
case MYSQL_TYPE_TIME2:
#endif
dbFieldInfo.uiType = HB_FT_TIME;
dbFieldInfo.uiLen = 4;
break;
/*
case MYSQL_TYPE_NULL:
case MYSQL_TYPE_YEAR:
case MYSQL_TYPE_NEWDATE:
case MYSQL_TYPE_ENUM:
case MYSQL_TYPE_SET:
case MYSQL_TYPE_VARCHAR:
case MYSQL_TYPE_BIT:
case MYSQL_TYPE_GEOMETRY:
*/
default:
@@ -407,18 +418,16 @@ static HB_ERRCODE mysqlOpen( SQLBASEAREAP pArea )
}
pArea->ulRecCount = ( HB_ULONG ) mysql_num_rows( pSDDData->pResult );
pArea->ulRecMax = pArea->ulRecCount + 1;
pArea->pRow = ( void ** ) hb_xgrab( ( pArea->ulRecCount + 1 ) * sizeof( void * ) );
pArea->pRowFlags = ( HB_BYTE * ) hb_xgrab( ( pArea->ulRecCount + 1 ) * sizeof( HB_BYTE ) );
memset( pArea->pRowFlags, 0, ( pArea->ulRecCount + 1 ) * sizeof( HB_BYTE ) );
pArea->ulRecMax = pArea->ulRecCount + 1;
pArea->pRowFlags = ( HB_BYTE * ) hb_xgrabz( ( pArea->ulRecCount + 1 ) * sizeof( HB_BYTE ) );
pRow = pArea->pRow;
*pRow = pItemEof;
*pRow++ = pItemEof;
pArea->pRowFlags[ 0 ] = SQLDD_FLAG_CACHED;
pRow++;
for( ulIndex = 1; ulIndex <= pArea->ulRecCount; ulIndex++ )
{
*pRow++ = ( void * ) mysql_row_tell( pSDDData->pResult );
@@ -508,8 +517,7 @@ static HB_ERRCODE mysqlGetValue( SQLBASEAREAP pArea, HB_USHORT uiIndex, PHB_ITEM
/* Expand strings to field length */
pStr = ( char * ) hb_xgrab( pField->uiLen + 1 );
if( pValue )
memcpy( pStr, pValue, ulLen );
memcpy( pStr, pValue, ulLen );
if( ( HB_SIZE ) pField->uiLen > ulLen )
memset( pStr + ulLen, ' ', pField->uiLen - ulLen );
@@ -518,48 +526,27 @@ static HB_ERRCODE mysqlGetValue( SQLBASEAREAP pArea, HB_USHORT uiIndex, PHB_ITEM
hb_itemPutCRaw( pItem, pStr, pField->uiLen );
#else
/* Do not expand strings */
if( pValue )
hb_itemPutCL( pItem, pValue, ulLen );
else
hb_itemPutC( pItem, NULL );
hb_itemPutCL( pItem, pValue, ulLen );
#endif
break;
}
case HB_FT_MEMO:
if( pValue )
hb_itemPutCL( pItem, pValue, ulLen );
else
hb_itemPutC( pItem, NULL );
hb_itemPutCL( pItem, pValue, ulLen );
hb_itemSetCMemo( pItem );
break;
case HB_FT_INTEGER:
case HB_FT_LONG:
case HB_FT_DOUBLE:
if( pValue )
{
hb_strncpy( szBuffer, pValue, sizeof( szBuffer ) - 1 );
hb_strncpy( szBuffer, pValue, sizeof( szBuffer ) - 1 );
if( pField->uiDec )
{
hb_itemPutNDLen( pItem, atof( szBuffer ),
( int ) pField->uiLen - ( ( int ) pField->uiDec + 1 ),
( int ) pField->uiDec );
}
else
hb_itemPutNLLen( pItem, atol( szBuffer ), ( int ) pField->uiLen );
}
if( pField->uiDec )
hb_itemPutNDLen( pItem, atof( szBuffer ),
( int ) pField->uiLen - ( ( int ) pField->uiDec + 1 ),
( int ) pField->uiDec );
else
{
if( pField->uiDec )
hb_itemPutNDLen( pItem, 0.0,
( int ) pField->uiLen - ( ( int ) pField->uiDec + 1 ),
( int ) pField->uiDec );
else
hb_itemPutNLLen( pItem, 0, ( int ) pField->uiLen );
}
hb_itemPutNLLen( pItem, atol( szBuffer ), ( int ) pField->uiLen );
break;
case HB_FT_DATE:

View File

@@ -110,7 +110,7 @@ static HB_ERRCODE ocilibClose( SQLBASEAREAP pArea );
static HB_ERRCODE ocilibGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo );
static SDDNODE ocidd =
static SDDNODE s_ocidd =
{
NULL,
"OCILIB",
@@ -129,9 +129,9 @@ static void hb_ocidd_init( void * cargo )
{
HB_SYMBOL_UNUSED( cargo );
OCI_Initialize( NULL, NULL, OCI_ENV_DEFAULT | OCI_ENV_CONTEXT | OCI_ENV_THREADED );
if( ! hb_sddRegister( &ocidd ) )
if( ! OCI_Initialize( NULL, NULL, OCI_ENV_DEFAULT | OCI_ENV_CONTEXT | OCI_ENV_THREADED ) )
hb_errInternal( 8000, NULL, NULL, NULL );
else if( ! hb_sddRegister( &s_ocidd ) )
hb_errInternal( HB_EI_RDDINVALID, NULL, NULL, NULL );
}
@@ -175,12 +175,13 @@ HB_CALL_ON_STARTUP_END( _hb_ocidd_init_ )
/*=====================================================================================*/
static HB_USHORT hb_errRT_OCIDD( HB_ERRCODE errGenCode, HB_ERRCODE errSubCode, const char * szDescription, const char * szOperation, HB_ERRCODE errOsCode )
{
HB_USHORT uiAction;
PHB_ITEM pError;
HB_USHORT uiAction;
pError = hb_errRT_New( ES_ERROR, "SDDOCI", errGenCode, errSubCode, szDescription, szOperation, errOsCode, EF_NONE );
uiAction = hb_errLaunch( pError );
hb_itemRelease( pError );
return uiAction;
}
@@ -502,9 +503,7 @@ static HB_ERRCODE ocilibOpen( SQLBASEAREAP pArea )
pArea->ulRecMax = SQLDD_ROWSET_INIT;
pArea->pRow = ( void ** ) hb_xgrab( SQLDD_ROWSET_INIT * sizeof( void * ) );
memset( pArea->pRow, 0, SQLDD_ROWSET_INIT * sizeof( void * ) );
pArea->pRowFlags = ( HB_BYTE * ) hb_xgrab( SQLDD_ROWSET_INIT * sizeof( HB_BYTE ) );
memset( pArea->pRowFlags, 0, SQLDD_ROWSET_INIT * sizeof( HB_BYTE ) );
pArea->pRow[ 0 ] = pItemEof;
pArea->pRowFlags[ 0 ] = SQLDD_FLAG_CACHED;
@@ -537,6 +536,7 @@ static HB_ERRCODE ocilibGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo )
while( ulRecNo > pArea->ulRecCount && ! pArea->fFetched )
{
PHB_ITEM pItem = NULL;
PHB_ITEM pArray;
HB_USHORT ui;
@@ -550,7 +550,6 @@ static HB_ERRCODE ocilibGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo )
for( ui = 1; ui <= pArea->area.uiFieldCount; ++ui )
{
PHB_ITEM pItem = NULL;
LPFIELD pField = pArea->area.lpFields + ui - 1;
switch( pField->uiType )
@@ -562,13 +561,13 @@ static HB_ERRCODE ocilibGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo )
memset( pStr, ' ', pField->uiLen );
pStr[ pField->uiLen ] = '\0';
pItem = hb_itemPutCLPtr( NULL, pStr, pField->uiLen );
pItem = hb_itemPutCLPtr( pItem, pStr, pField->uiLen );
}
else
{
const dtext * val;
if( ( val = OCI_GetString( rs, ui ) ) != NULL )
pItem = D_HB_ITEMPUTSTRLEN( NULL, val, ( HB_SIZE ) dtslen( val ) ); /* TODO: Pad it to pField->uiLen size with spaces? */
pItem = D_HB_ITEMPUTSTRLEN( pItem, val, ( HB_SIZE ) dtslen( val ) ); /* TODO: Pad it to pField->uiLen size with spaces? */
}
break;
@@ -576,12 +575,12 @@ static HB_ERRCODE ocilibGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo )
case HB_FT_INTEGER:
if( pField->uiDec == 0 )
#if HB_VMLONG_MAX == INT32_MAX || defined( HB_LONG_LONG_OFF )
pItem = hb_itemPutNIntLen( NULL, OCI_GetInt( rs, ui ), pField->uiLen );
pItem = hb_itemPutNIntLen( pItem, OCI_GetInt( rs, ui ), pField->uiLen );
#else
pItem = hb_itemPutNIntLen( NULL, OCI_GetBigInt( rs, ui ), pField->uiLen );
pItem = hb_itemPutNIntLen( pItem, OCI_GetBigInt( rs, ui ), pField->uiLen );
#endif
else
pItem = hb_itemPutNDLen( NULL, OCI_GetDouble( rs, ui ), pField->uiLen, pField->uiDec );
pItem = hb_itemPutNDLen( pItem, OCI_GetDouble( rs, ui ), pField->uiLen, pField->uiDec );
break;
case HB_FT_VARLENGTH:
@@ -592,9 +591,9 @@ static HB_ERRCODE ocilibGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo )
{
unsigned int uiSize = OCI_LongGetSize( val );
if( OCI_LongGetType( val ) == OCI_CLONG )
pItem = D_HB_ITEMPUTSTRLEN( NULL, ( D_HB_CHAR * ) OCI_LongGetBuffer( val ), uiSize );
pItem = D_HB_ITEMPUTSTRLEN( pItem, ( D_HB_CHAR * ) OCI_LongGetBuffer( val ), uiSize );
else
pItem = hb_itemPutCL( NULL, ( char * ) OCI_LongGetBuffer( val ), uiSize );
pItem = hb_itemPutCL( pItem, ( const char * ) OCI_LongGetBuffer( val ), uiSize );
}
break;
}
@@ -605,7 +604,7 @@ static HB_ERRCODE ocilibGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo )
{
OCI_Long * val = OCI_GetLong( rs, ui );
if( val )
pItem = hb_itemPutCL( NULL, ( char * ) OCI_LongGetBuffer( val ), OCI_LongGetSize( val ) );
pItem = hb_itemPutCL( pItem, ( const char * ) OCI_LongGetBuffer( val ), OCI_LongGetSize( val ) );
break;
}
@@ -614,7 +613,7 @@ static HB_ERRCODE ocilibGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo )
case HB_FT_FLOAT:
case HB_FT_DOUBLE:
pItem = hb_itemPutNDLen( NULL, OCI_GetDouble( rs, ui ), pField->uiLen, pField->uiDec );
pItem = hb_itemPutNDLen( pItem, OCI_GetDouble( rs, ui ), pField->uiLen, pField->uiDec );
break;
case HB_FT_DATE:
@@ -622,7 +621,7 @@ static HB_ERRCODE ocilibGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo )
OCI_Date * date = OCI_GetDate( rs, ui );
int iYear, iMonth, iDay;
if( date && OCI_DateGetDate( date, &iYear, &iMonth, &iDay ) )
pItem = hb_itemPutD( NULL, iYear, iMonth, iDay );
pItem = hb_itemPutD( pItem, iYear, iMonth, iDay );
break;
}
@@ -632,7 +631,7 @@ static HB_ERRCODE ocilibGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo )
int iYear, iMonth, iDay, iHour, iMin, iSec;
if( date && OCI_DateGetDateTime( date, &iYear, &iMonth, &iDay, &iHour, &iMin, &iSec ) )
pItem = hb_itemPutTDT( NULL, hb_dateEncode( iYear, iMonth, iDay ),
pItem = hb_itemPutTDT( pItem, hb_dateEncode( iYear, iMonth, iDay ),
hb_timeEncode( iHour, iMin, iSec, 0 ) );
break;
}
@@ -642,19 +641,18 @@ static HB_ERRCODE ocilibGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo )
OCI_Timestamp * ts = OCI_GetTimestamp( rs, ui );
int iYear, iMonth, iDay, iHour, iMin, iSec, iFSec;
if( ts && OCI_TimestampGetDateTime( ts, &iYear, &iMonth, &iDay, &iHour, &iMin, &iSec, &iFSec ) )
pItem = hb_itemPutTDT( NULL, hb_dateEncode( iYear, iMonth, iDay ),
pItem = hb_itemPutTDT( pItem, hb_dateEncode( iYear, iMonth, iDay ),
hb_timeEncode( iHour, iMin, iSec, iFSec / 1000000 ) );
break;
}
}
if( pItem )
{
hb_arraySetForward( pArray, ui, pItem );
hb_itemRelease( pItem );
}
}
if( pArea->ulRecCount + 1 <= pArea->ulRecMax )
hb_itemRelease( pItem );
if( pArea->ulRecCount + 1 >= pArea->ulRecMax )
{
pArea->pRow = ( void ** ) hb_xrealloc( pArea->pRow, ( pArea->ulRecMax + SQLDD_ROWSET_RESIZE ) * sizeof( void * ) );
pArea->pRowFlags = ( HB_BYTE * ) hb_xrealloc( pArea->pRowFlags, ( pArea->ulRecMax + SQLDD_ROWSET_RESIZE ) * sizeof( HB_BYTE ) );

View File

@@ -648,8 +648,8 @@ static HB_ERRCODE odbcOpen( SQLBASEAREAP pArea )
pArea->ulRecCount = 0;
pArea->ulRecMax = SQLDD_ROWSET_INIT;
pArea->pRow = ( void ** ) hb_xgrabz( SQLDD_ROWSET_INIT * sizeof( void * ) );
pArea->pRowFlags = ( HB_BYTE * ) hb_xgrabz( SQLDD_ROWSET_INIT * sizeof( HB_BYTE ) );
pArea->pRow = ( void ** ) hb_xgrab( SQLDD_ROWSET_INIT * sizeof( void * ) );
pArea->pRowFlags = ( HB_BYTE * ) hb_xgrab( SQLDD_ROWSET_INIT * sizeof( HB_BYTE ) );
pArea->pRow[ 0 ] = pItemEof;
pArea->pRowFlags[ 0 ] = SQLDD_FLAG_CACHED;
@@ -843,7 +843,7 @@ static HB_ERRCODE odbcGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo )
hb_itemRelease( pItem );
}
}
if( pArea->ulRecCount + 1 <= pArea->ulRecMax )
if( pArea->ulRecCount + 1 >= pArea->ulRecMax )
{
pArea->pRow = ( void ** ) hb_xrealloc( pArea->pRow, ( pArea->ulRecMax + SQLDD_ROWSET_RESIZE ) * sizeof( void * ) );
pArea->pRowFlags = ( HB_BYTE * ) hb_xrealloc( pArea->pRowFlags, ( pArea->ulRecMax + SQLDD_ROWSET_RESIZE ) * sizeof( HB_BYTE ) );

View File

@@ -99,7 +99,7 @@ static HB_ERRCODE pgsqlClose( SQLBASEAREAP pArea );
static HB_ERRCODE pgsqlGetValue( SQLBASEAREAP pArea, HB_USHORT uiIndex, PHB_ITEM pItem );
static SDDNODE pgsqldd = {
static SDDNODE s_pgsqldd = {
NULL,
"POSTGRESQL",
( SDDFUNC_CONNECT ) pgsqlConnect,
@@ -117,7 +117,7 @@ static void hb_pgsqldd_init( void * cargo )
{
HB_SYMBOL_UNUSED( cargo );
if( ! hb_sddRegister( &pgsqldd ) )
if( ! hb_sddRegister( &s_pgsqldd ) )
hb_errInternal( HB_EI_RDDINVALID, NULL, NULL, NULL );
}
@@ -462,12 +462,12 @@ static HB_ERRCODE pgsqlOpen( SQLBASEAREAP pArea )
}
pArea->ulRecCount = ( HB_ULONG ) PQntuples( pResult );
pArea->ulRecMax = pArea->ulRecCount + 1;
pArea->pRow = ( void ** ) hb_xgrab( ( pArea->ulRecCount + 1 ) * sizeof( void * ) );
pArea->pRowFlags = ( HB_BYTE * ) hb_xgrab( ( pArea->ulRecCount + 1 ) * sizeof( HB_BYTE ) );
memset( pArea->pRowFlags, 0, ( pArea->ulRecCount + 1 ) * sizeof( HB_BYTE ) );
pArea->pRowFlags = ( HB_BYTE * ) hb_xgrabz( ( pArea->ulRecCount + 1 ) * sizeof( HB_BYTE ) );
*pArea->pRow = pItemEof;
pArea->pRow[ 0 ] = pItemEof;
pArea->pRowFlags[ 0 ] = SQLDD_FLAG_CACHED;
pArea->fFetched = HB_TRUE;
@@ -505,6 +505,7 @@ static HB_ERRCODE pgsqlGetValue( SQLBASEAREAP pArea, HB_USHORT uiIndex, PHB_ITEM
pField = pArea->area.lpFields + uiIndex;
if( PQgetisnull( pSDDData->pResult, pArea->ulRecNo - 1, uiIndex ) )
/* TOFIX: it breaks defined field type */
return HB_SUCCESS;
pValue = PQgetvalue( pSDDData->pResult, pArea->ulRecNo - 1, uiIndex );

View File

@@ -80,7 +80,7 @@ static HB_ERRCODE sqlite3Close( SQLBASEAREAP pArea );
static HB_ERRCODE sqlite3GoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo );
static SDDNODE sqlt3dd =
static SDDNODE s_sqlt3dd =
{
NULL,
"SQLITE3",
@@ -103,7 +103,7 @@ static void hb_sqlt3dd_init( void * cargo )
sqlite3_initialize();
#endif
if( ! hb_sddRegister( &sqlt3dd ) )
if( ! hb_sddRegister( &s_sqlt3dd ) )
hb_errInternal( HB_EI_RDDINVALID, NULL, NULL, NULL );
}
@@ -149,12 +149,13 @@ HB_CALL_ON_STARTUP_END( _hb_sqlt3dd_init_ )
/*=====================================================================================*/
static HB_USHORT hb_errRT_SQLT3DD( HB_ERRCODE errGenCode, HB_ERRCODE errSubCode, const char * szDescription, const char * szOperation, HB_ERRCODE errOsCode )
{
HB_USHORT uiAction;
PHB_ITEM pError;
HB_USHORT uiAction;
pError = hb_errRT_New( ES_ERROR, "SDDSQLITE3", errGenCode, errSubCode, szDescription, szOperation, errOsCode, EF_NONE );
uiAction = hb_errLaunch( pError );
hb_itemRelease( pError );
return uiAction;
}
@@ -162,8 +163,7 @@ static HB_USHORT hb_errRT_SQLT3DD( HB_ERRCODE errGenCode, HB_ERRCODE errSubCode,
static char * sqlite3GetError( sqlite3 * pDb, HB_ERRCODE * pErrCode )
{
char * szRet;
int iNativeErr = 9999;
int iNativeErr;
if( pDb )
{
@@ -174,7 +174,10 @@ static char * sqlite3GetError( sqlite3 * pDb, HB_ERRCODE * pErrCode )
iNativeErr = sqlite3_errcode( pDb );
}
else
{
szRet = hb_strdup( "Unable to get error message" );
iNativeErr = 9999;
}
if( pErrCode )
*pErrCode = ( HB_ERRCODE ) iNativeErr;
@@ -251,6 +254,7 @@ static HB_ERRCODE sqlite3Connect( SQLDDCONNECTION * pConnection, PHB_ITEM pItem
sqlite3_close( db );
hb_strfree( hConn );
return db ? HB_SUCCESS : HB_FAILURE;
}
@@ -276,7 +280,7 @@ static HB_ERRCODE sqlite3Execute( SQLDDCONNECTION * pConnection, PHB_ITEM pItem
if( sqlite3_get_table( pDb, S_HB_ITEMGETSTR( pItem, &hStatement, NULL ), &pResult, &iRow, &iCol, &pszErrMsg ) != SQLITE_OK )
{
hb_strfree( hStatement );
sqlite3GetError( pDb, &errCode );
hb_xfree( sqlite3GetError( pDb, &errCode ) );
hb_errRT_SQLT3DD( EG_OPEN, ESQLDD_STMTALLOC, pszErrMsg, hb_itemGetCPtr( pItem ), errCode );
hb_xfree( pszErrMsg );
return HB_FAILURE;
@@ -409,9 +413,7 @@ static HB_ERRCODE sqlite3Open( SQLBASEAREAP pArea )
pArea->ulRecMax = SQLDD_ROWSET_INIT;
pArea->pRow = ( void ** ) hb_xgrab( SQLDD_ROWSET_INIT * sizeof( void * ) );
memset( pArea->pRow, 0, SQLDD_ROWSET_INIT * sizeof( void * ) );
pArea->pRowFlags = ( HB_BYTE * ) hb_xgrab( SQLDD_ROWSET_INIT * sizeof( HB_BYTE ) );
memset( pArea->pRowFlags, 0, SQLDD_ROWSET_INIT * sizeof( HB_BYTE ) );
pArea->pRow[ 0 ] = pItemEof;
pArea->pRowFlags[ 0 ] = SQLDD_FLAG_CACHED;
@@ -499,7 +501,7 @@ static HB_ERRCODE sqlite3GoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo )
hb_itemRelease( pItem );
}
}
if( pArea->ulRecCount + 1 <= pArea->ulRecMax )
if( pArea->ulRecCount + 1 >= pArea->ulRecMax )
{
pArea->pRow = ( void ** ) hb_xrealloc( pArea->pRow, ( pArea->ulRecMax + SQLDD_ROWSET_RESIZE ) * sizeof( void * ) );
pArea->pRowFlags = ( HB_BYTE * ) hb_xrealloc( pArea->pRowFlags, ( pArea->ulRecMax + SQLDD_ROWSET_RESIZE ) * sizeof( HB_BYTE ) );
@@ -515,7 +517,6 @@ static HB_ERRCODE sqlite3GoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo )
pArea->fFetched = HB_TRUE;
break;
}
}
if( ulRecNo == 0 || ulRecNo > pArea->ulRecCount )