diff --git a/ChangeLog.txt b/ChangeLog.txt index 704f2c8288..2ac7de07f7 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -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( ) -> + (From Viktor's branch: 2015-01-21 18:43 UTC+0100 Viktor Szakats) + + added ADS_REFRESHCOUNT constant and + AdsGetRecordCount( [], ; + [], @nCount ) -> + (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( , , , [ ] ) + -> + Now is 3-rd: + AdsDDRemoveTable( , , [ ] ) + -> + (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 diff --git a/contrib/hbodbc/odbc.c b/contrib/hbodbc/odbc.c index 45420a9714..88c6a5c3e8 100644 --- a/contrib/hbodbc/odbc.c +++ b/contrib/hbodbc/odbc.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 ); diff --git a/contrib/hbodbc/sql.ch b/contrib/hbodbc/sql.ch index 0a5f246a39..a593369586 100644 --- a/contrib/hbodbc/sql.ch +++ b/contrib/hbodbc/sql.ch @@ -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 diff --git a/contrib/rddads/ads.ch b/contrib/rddads/ads.ch index 427a29cdc0..a4fef5ba90 100644 --- a/contrib/rddads/ads.ch +++ b/contrib/rddads/ads.ch @@ -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 */ diff --git a/contrib/rddads/adsfunc.c b/contrib/rddads/adsfunc.c index 5b534c462c..e82844b52d 100644 --- a/contrib/rddads/adsfunc.c +++ b/contrib/rddads/adsfunc.c @@ -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 */ , diff --git a/contrib/rddads/adsx.c b/contrib/rddads/adsx.c index e965d678bf..7feb6427e8 100644 --- a/contrib/rddads/adsx.c +++ b/contrib/rddads/adsx.c @@ -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 ); diff --git a/contrib/rddads/rddads.h b/contrib/rddads/rddads.h index d45cf3e432..53a03d0bc5 100644 --- a/contrib/rddads/rddads.h +++ b/contrib/rddads/rddads.h @@ -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 ) diff --git a/contrib/rddads/rddads.hbx b/contrib/rddads/rddads.hbx index 54164d3de7..242f8211eb 100644 --- a/contrib/rddads/rddads.hbx +++ b/contrib/rddads/rddads.hbx @@ -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 diff --git a/contrib/rddsql/hbrddsql.h b/contrib/rddsql/hbrddsql.h index f9e628f638..f998e5e9bc 100644 --- a/contrib/rddsql/hbrddsql.h +++ b/contrib/rddsql/hbrddsql.h @@ -83,7 +83,7 @@ typedef struct _SQLBASEAREA HB_ULONG ulConnection; struct _SQLDDCONNECTION * pConnection; - struct _SDDNODE * pSDD; + const struct _SDDNODE * pSDD; char * szQuery; /* SQL query */ diff --git a/contrib/rddsql/sqlbase.c b/contrib/rddsql/sqlbase.c index f30b53aed1..e65d167e5e 100644 --- a/contrib/rddsql/sqlbase.c +++ b/contrib/rddsql/sqlbase.c @@ -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; diff --git a/contrib/rddsql/sqlmix.c b/contrib/rddsql/sqlmix.c index 4e39e000f3..7a7bea17a5 100644 --- a/contrib/rddsql/sqlmix.c +++ b/contrib/rddsql/sqlmix.c @@ -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; diff --git a/contrib/sddfb/core.c b/contrib/sddfb/core.c index e949dfdb7d..5989b28448 100644 --- a/contrib/sddfb/core.c +++ b/contrib/sddfb/core.c @@ -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 ) ) diff --git a/contrib/sddmy/core.c b/contrib/sddmy/core.c index 5c85664168..84827f54b3 100644 --- a/contrib/sddmy/core.c +++ b/contrib/sddmy/core.c @@ -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: diff --git a/contrib/sddoci/core.c b/contrib/sddoci/core.c index 495cbf5443..c1a6303183 100644 --- a/contrib/sddoci/core.c +++ b/contrib/sddoci/core.c @@ -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 ) ); diff --git a/contrib/sddodbc/core.c b/contrib/sddodbc/core.c index 5170c92d9d..23d01feef9 100644 --- a/contrib/sddodbc/core.c +++ b/contrib/sddodbc/core.c @@ -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 ) ); diff --git a/contrib/sddpg/core.c b/contrib/sddpg/core.c index cc58e0c216..cbfdbab358 100644 --- a/contrib/sddpg/core.c +++ b/contrib/sddpg/core.c @@ -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 ); diff --git a/contrib/sddsqlt3/core.c b/contrib/sddsqlt3/core.c index 5f3f17be5e..31f958f71b 100644 --- a/contrib/sddsqlt3/core.c +++ b/contrib/sddsqlt3/core.c @@ -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 )