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:
@@ -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
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 */ ,
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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 )
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -83,7 +83,7 @@ typedef struct _SQLBASEAREA
|
||||
|
||||
HB_ULONG ulConnection;
|
||||
struct _SQLDDCONNECTION * pConnection;
|
||||
struct _SDDNODE * pSDD;
|
||||
const struct _SDDNODE * pSDD;
|
||||
|
||||
char * szQuery; /* SQL query */
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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 ) )
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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 ) );
|
||||
|
||||
@@ -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 ) );
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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 )
|
||||
|
||||
Reference in New Issue
Block a user