2012-07-20 06:44 UTC+0200 Viktor Szakats (harbour syenar.net)

* examples/hbapollo/append.c
  * examples/hbapollo/dbdelim.c
  * examples/hbapollo/global.c
  * examples/hbapollo/sde.c
  * examples/hbapollo/sxapi.h
  * examples/hbapollo/tools.c
  * examples/hbapollo/use.c
    ! added 's_' prefix to static varnames
    ! one static var got a TOFIX, but probably more should have
    * cleaned externs
    * minor fixes (also to prev)

  * contrib/hbmisc/hb_f.c
  * contrib/rddsql/sqlbase.c
  * contrib/rddsql/sqlmix.c
  * contrib/sddfb/sddfb.c
  * contrib/sddmy/sddmy.c
  * contrib/sddodbc/sddodbc.c
  * contrib/sddpg/sddpg.c
    * uncrustified
This commit is contained in:
Viktor Szakats
2012-07-20 04:48:37 +00:00
parent 0524d42edb
commit ee657afaae
15 changed files with 1733 additions and 1723 deletions

View File

@@ -16,6 +16,28 @@
The license applies to all entries newer than 2009-04-28.
*/
2012-07-20 06:44 UTC+0200 Viktor Szakats (harbour syenar.net)
* examples/hbapollo/append.c
* examples/hbapollo/dbdelim.c
* examples/hbapollo/global.c
* examples/hbapollo/sde.c
* examples/hbapollo/sxapi.h
* examples/hbapollo/tools.c
* examples/hbapollo/use.c
! added 's_' prefix to static varnames
! one static var got a TOFIX, but probably more should have
* cleaned externs
* minor fixes (also to prev)
* contrib/hbmisc/hb_f.c
* contrib/rddsql/sqlbase.c
* contrib/rddsql/sqlmix.c
* contrib/sddfb/sddfb.c
* contrib/sddmy/sddmy.c
* contrib/sddodbc/sddodbc.c
* contrib/sddpg/sddpg.c
* uncrustified
2012-07-19 19:39 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)
* contrib/hbide/hbqreportsmanager.prg
* contrib/hbide/ideactions.prg

View File

@@ -54,8 +54,8 @@
#include "hbapifs.h"
#define _B_SIZE 4096
#define _C_SIZE 4096
#define _B_SIZE 4096
#define _C_SIZE 4096
static long last_rec[ 10 ];
static long recno[ 10 ];
@@ -70,9 +70,9 @@ static HB_BOOL isEof[ 10 ];
HB_FUNC( HB_FUSE )
{
PHB_ITEM arg1_it = hb_param( 1, HB_IT_STRING );
PHB_ITEM arg2_it = hb_param( 2, HB_IT_NUMERIC );
int open_flags;
PHB_ITEM arg1_it = hb_param( 1, HB_IT_STRING );
PHB_ITEM arg2_it = hb_param( 2, HB_IT_NUMERIC );
int open_flags;
if( arg1_it )
{
@@ -81,28 +81,28 @@ HB_FUNC( HB_FUSE )
else
open_flags = 0;
handles[area] = hb_fsOpen( hb_parc( 1 ), ( HB_USHORT ) open_flags );
offset[area] = 0;
recno[area] = 1;
b = ( char * ) hb_xgrab( _B_SIZE );
c = ( char * ) hb_xgrab( _C_SIZE );
lastbyte[area] = hb_fsSeekLarge( handles[ area ], 0, FS_END );
isEof[area] = ( lastbyte[ area ] == 0 );
handles[ area ] = hb_fsOpen( hb_parc( 1 ), ( HB_USHORT ) open_flags );
offset[ area ] = 0;
recno[ area ] = 1;
b = ( char * ) hb_xgrab( _B_SIZE );
c = ( char * ) hb_xgrab( _C_SIZE );
lastbyte[ area ] = hb_fsSeekLarge( handles[ area ], 0, FS_END );
isEof[ area ] = ( lastbyte[ area ] == 0 );
hb_retnint( handles[ area ] );
}
else
{
hb_fsClose( handles[area] );
hb_fsClose( handles[ area ] );
hb_xfree( b );
hb_xfree( c );
hb_retnint( 1 );
recno[area] = 0;
offset[area] = 0;
handles[area] = 0;
last_rec[area] = 0;
last_off[area] = 0;
lastbyte[area] = 0;
isEof[area] = HB_FALSE;
recno[ area ] = 0;
offset[ area ] = 0;
handles[ area ] = 0;
last_rec[ area ] = 0;
last_off[ area ] = 0;
lastbyte[ area ] = 0;
isEof[ area ] = HB_FALSE;
}
}
@@ -115,86 +115,86 @@ HB_FUNC( HB_FRECNO )
static long hb_hbfskip( int recs )
{
HB_FOFFSET read_pos;
HB_ISIZ read_len;
HB_ISIZ x;
int y;
HB_FOFFSET read_pos;
HB_ISIZ read_len;
HB_ISIZ x;
int y;
HB_TRACE(HB_TR_DEBUG, ("hb_hbskip(%d)", recs));
HB_TRACE( HB_TR_DEBUG, ( "hb_hbskip(%d)", recs ) );
if( recs > 0 )
{
for( y = 0; y < recs; ++y )
{
hb_fsSeekLarge( handles[area], offset[area], FS_SET );
hb_fsSeekLarge( handles[ area ], offset[ area ], FS_SET );
read_len = hb_fsReadLarge( handles[area], b, _B_SIZE );
read_len = hb_fsReadLarge( handles[ area ], b, _B_SIZE );
for( x = 0; x < read_len; ++x )
{
if( ((*(b + x) == 13) && (*(b + x + 1) == 10)) ||
((*(b + x) == 10) && (*(b + x + 1) == 13)) )
if( ( ( *( b + x ) == 13 ) && ( *( b + x + 1 ) == 10 ) ) ||
( ( *( b + x ) == 10 ) && ( *( b + x + 1 ) == 13 ) ) )
{
break;
}
}
if( (offset[area] + x + 2) < lastbyte[area] )
if( ( offset[ area ] + x + 2 ) < lastbyte[ area ] )
{
isEof[area] = HB_FALSE;
offset[area] += (x + 2);
recno[area] += 1;
isEof[ area ] = HB_FALSE;
offset[ area ] += ( x + 2 );
recno[ area ] += 1;
}
else
isEof[area] = HB_TRUE;
isEof[ area ] = HB_TRUE;
}
}
else
{
recs = -recs;
isEof[area] = HB_FALSE;
recs = -recs;
isEof[ area ] = HB_FALSE;
if( ( recno[area] - recs ) < 1 )
return( 1 );
if( ( recno[ area ] - recs ) < 1 )
return 1;
for( y = recs; y > 0; y-- )
{
if( offset[area] - _B_SIZE < 0 )
if( offset[ area ] - _B_SIZE < 0 )
{
read_pos = 0;
read_len = (size_t)offset[area];
read_len = ( size_t ) offset[ area ];
}
else
{
read_pos = (size_t)(offset[area] - _B_SIZE);
read_pos = ( size_t ) ( offset[ area ] - _B_SIZE );
read_len = _B_SIZE;
}
hb_fsSeekLarge( handles[area], read_pos, FS_SET );
read_len = hb_fsReadLarge( handles[area], b, read_len );
hb_fsSeekLarge( handles[ area ], read_pos, FS_SET );
read_len = hb_fsReadLarge( handles[ area ], b, read_len );
for( x = read_len - 4; x >= 0; x-- )
{
if( ((*(b + x) == 13) && (*(b + x + 1) == 10)) ||
((*(b + x) == 10) && (*(b + x + 1) == 13)) )
if( ( ( *( b + x ) == 13 ) && ( *( b + x + 1 ) == 10 ) ) ||
( ( *( b + x ) == 10 ) && ( *( b + x + 1 ) == 13 ) ) )
{
break;
}
}
if( x < 0 )
{
offset[area] = 0;
recno[area] = 1;
offset[ area ] = 0;
recno[ area ] = 1;
}
else
{
offset[area] = read_pos + x + 2;
recno[area]--;
offset[ area ] = read_pos + x + 2;
recno[ area ]--;
}
}
}
return recno[area];
return recno[ area ];
}
HB_FUNC( HB_FSKIP )
@@ -204,18 +204,18 @@ HB_FUNC( HB_FSKIP )
HB_FUNC( HB_FREADLN )
{
HB_ISIZ x;
HB_ISIZ read;
HB_ISIZ x;
HB_ISIZ read;
hb_fsSeekLarge( handles[area], offset[area], FS_SET );
hb_fsSeekLarge( handles[ area ], offset[ area ], FS_SET );
read = hb_fsReadLarge( handles[area], b, _B_SIZE );
read = hb_fsReadLarge( handles[ area ], b, _B_SIZE );
for( x = 0; x < _B_SIZE; ++x )
{
if( ((*(b + x) == 13) && (*(b + x + 1) == 10)) ||
((*(b + x) == 10) && (*(b + x + 1) == 13)) ||
(*(b + x) == 26) || ( x >= read) )
if( ( ( *( b + x ) == 13 ) && ( *( b + x + 1 ) == 10 ) ) ||
( ( *( b + x ) == 10 ) && ( *( b + x + 1 ) == 13 ) ) ||
( *( b + x ) == 26 ) || ( x >= read ) )
{
break;
}
@@ -226,33 +226,33 @@ HB_FUNC( HB_FREADLN )
HB_FUNC( HB_FEOF )
{
hb_retl( isEof[area] );
hb_retl( isEof[ area ] );
}
HB_FUNC( HB_FGOTO )
{
long target;
long last;
long target;
long last;
target = hb_parnl( 1 );
if( recno[area] > target )
if( recno[ area ] > target )
{
while( recno[area] != target )
while( recno[ area ] != target )
{
last = recno[area];
last = recno[ area ];
hb_hbfskip( -1 );
if( recno[area] == last )
if( recno[ area ] == last )
break;
}
}
else
{
while( recno[area] != target )
while( recno[ area ] != target )
{
last = recno[ area ];
hb_hbfskip( 1 );
if( recno[area] == last )
if( recno[ area ] == last )
break;
}
}
@@ -260,68 +260,69 @@ HB_FUNC( HB_FGOTO )
HB_FUNC( HB_FGOBOTTOM )
{
if( last_rec[area] != 0 )
if( last_rec[ area ] != 0 )
{
recno[area] = last_rec[area];
offset[area] = last_off[area];
recno[ area ] = last_rec[ area ];
offset[ area ] = last_off[ area ];
}
else
{
HB_ISIZ loc = 0;
HB_ISIZ len;
HB_FOFFSET last = offset[area];
HB_ISIZ loc = 0;
HB_ISIZ len;
HB_FOFFSET last = offset[ area ];
do
{
HB_ISIZ x;
hb_fsSeekLarge( handles[area], offset[area], FS_SET );
len = hb_fsReadLarge( handles[area], c, _C_SIZE );
hb_fsSeekLarge( handles[ area ], offset[ area ], FS_SET );
len = hb_fsReadLarge( handles[ area ], c, _C_SIZE );
for( x = 0; x < len; ++x )
{
if( ((*(c + x) == 13) && (*(c + x + 1) == 10)) ||
((*(c + x) == 10) && (*(c + x + 1) == 13)) ||
if( ( ( *( c + x ) == 13 ) && ( *( c + x + 1 ) == 10 ) ) ||
( ( *( c + x ) == 10 ) && ( *( c + x + 1 ) == 13 ) ) ||
( x - loc > _B_SIZE ) )
{
last = offset[area] + loc;
recno[area]++;
last = offset[ area ] + loc;
recno[ area ]++;
++x;
loc = x + 1;
loc = x + 1;
}
}
offset[area] += loc;
offset[ area ] += loc;
} while ( len == _C_SIZE );
}
while( len == _C_SIZE );
last_rec[area] = --recno[area];
last_off[area] = last;
last_rec[ area ] = --recno[ area ];
last_off[ area ] = last;
}
}
HB_FUNC( HB_FGOTOP )
{
offset[area] = 0;
recno[area] = 1;
isEof[area] = (lastbyte[area] == 0);
offset[ area ] = 0;
recno[ area ] = 1;
isEof[ area ] = ( lastbyte[ area ] == 0 );
}
HB_FUNC( HB_FLASTREC )
{
long old_rec;
HB_FOFFSET old_offset;
HB_BOOL bIsEof;
long old_rec;
HB_FOFFSET old_offset;
HB_BOOL bIsEof;
old_rec = recno[area];
old_offset = offset[area];
bIsEof = isEof[area];
old_rec = recno[ area ];
old_offset = offset[ area ];
bIsEof = isEof[ area ];
HB_FUNC_EXEC( HB_FGOBOTTOM );
hb_retnl( last_rec[area] );
hb_retnl( last_rec[ area ] );
recno[area] = old_rec;
offset[area] = old_offset;
isEof[area] = bIsEof;
recno[ area ] = old_rec;
offset[ area ] = old_offset;
isEof[ area ] = bIsEof;
}
HB_FUNC( HB_FSELECT )
@@ -335,12 +336,12 @@ HB_FUNC( HB_FSELECT )
HB_FUNC( HB_FINFO ) /* used for debugging */
{
hb_reta( 6 );
hb_storvni( area+1, -1, 1 );
hb_storvni( last_rec[area], -1, 2 );
hb_storvni( recno[area], -1, 3 );
hb_storvnint( offset[area], -1, 4 );
hb_storvnint( lastbyte[area], -1, 5 );
hb_storvl( isEof[area], -1, 6 );
hb_storvni( area + 1, -1, 1 );
hb_storvni( last_rec[ area ], -1, 2 );
hb_storvni( recno[ area ], -1, 3 );
hb_storvnint( offset[ area ], -1, 4 );
hb_storvnint( lastbyte[ area ], -1, 5 );
hb_storvl( isEof[ area ], -1, 6 );
}
HB_FUNC( HB_FREADANDSKIP )
@@ -359,19 +360,19 @@ HB_FUNC( HB_FREADANDSKIP )
It does its own skip and read, so an entire file can be read
sequentially with just this function.
-BH
--------------------------------------------------*/
HB_ISIZ x = 0;
HB_ISIZ read;
HB_BOOL bInField = HB_FALSE, bHasCRLF = HB_FALSE;
--------------------------------------------------*/
HB_ISIZ x = 0;
HB_ISIZ read;
HB_BOOL bInField = HB_FALSE, bHasCRLF = HB_FALSE;
hb_fsSeekLarge( handles[area], offset[area], FS_SET );
read = hb_fsReadLarge( handles[area], b, _B_SIZE );
hb_fsSeekLarge( handles[ area ], offset[ area ], FS_SET );
read = hb_fsReadLarge( handles[ area ], b, _B_SIZE );
while( x < read )
{
if( *(b + x) == '"' )
if( *( b + x ) == '"' )
{
bInField = !bInField ;
bInField = ! bInField;
++x;
continue;
}
@@ -382,28 +383,28 @@ HB_FUNC( HB_FREADANDSKIP )
continue;
}
if( ((*(b + x) == 13) && x < read-1 && (*(b + x + 1) == 10)) ||
((*(b + x) == 10) && x < read-1 && (*(b + x + 1) == 13)) )
if( ( ( *( b + x ) == 13 ) && x < read - 1 && ( *( b + x + 1 ) == 10 ) ) ||
( ( *( b + x ) == 10 ) && x < read - 1 && ( *( b + x + 1 ) == 13 ) ) )
{
x += 2;
x += 2;
bHasCRLF = HB_TRUE;
break;
}
++x;
}
offset[area] = offset[area] + x;
recno[area] += 1;
offset[ area ] = offset[ area ] + x;
recno[ area ] += 1;
/* See if there's more to read */
if( !isEof[area ] )
if( ! isEof[ area ] )
{
#if defined( __DCC__ ) /* NOTE: Workaround for vxworks/diab/x86 5.8.0.0 compiler bug. */
HB_BOOL f = (lastbyte[area] <= offset[area] + 1);
isEof[area] = f;
HB_BOOL f = ( lastbyte[ area ] <= offset[ area ] + 1 );
isEof[ area ] = f;
#else
isEof[area] = (lastbyte[area] <= offset[area] + 1);
isEof[ area ] = ( lastbyte[ area ] <= offset[ area ] + 1 );
#endif
}
hb_retclen( b, x - (bHasCRLF ? 2 : 0) );
hb_retclen( b, x - ( bHasCRLF ? 2 : 0 ) );
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -52,7 +52,7 @@
/* NOTE: Ugly hack to avoid this error when compiler with BCC 5.8.2 and above:
Error E2238 C:\...\Firebird-2.1.1\include\ibase.h 82: Multiple declaration for 'intptr_t' */
#if ( defined( __BORLANDC__ ) && __BORLANDC__ >= 1410 )
/* Prevent inclusion of <stdint.h> from hbdefs.h */
/* Prevent inclusion of <stdint.h> from hbdefs.h */
#define __STDINT_H
#endif
@@ -71,8 +71,8 @@ typedef struct
typedef struct
{
isc_tr_handle hTrans;
isc_stmt_handle hStmt;
isc_tr_handle hTrans;
isc_stmt_handle hStmt;
XSQLDA ISC_FAR * pSqlda;
} SDDDATA;
@@ -87,14 +87,14 @@ static HB_ERRCODE fbGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo );
static SDDNODE firebirddd = {
NULL,
"FIREBIRD",
( SDDFUNC_CONNECT ) fbConnect,
( SDDFUNC_CONNECT ) fbConnect,
( SDDFUNC_DISCONNECT ) fbDisconnect,
( SDDFUNC_EXECUTE ) fbExecute,
( SDDFUNC_OPEN ) fbOpen,
( SDDFUNC_CLOSE ) fbClose,
( SDDFUNC_GOTO ) fbGoTo,
( SDDFUNC_GETVALUE ) NULL,
( SDDFUNC_GETVARLEN ) NULL
( SDDFUNC_EXECUTE ) fbExecute,
( SDDFUNC_OPEN ) fbOpen,
( SDDFUNC_CLOSE ) fbClose,
( SDDFUNC_GOTO ) fbGoTo,
( SDDFUNC_GETVALUE ) NULL,
( SDDFUNC_GETVARLEN ) NULL
};
@@ -102,7 +102,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( &firebirddd ) || ( sizeof( isc_db_handle ) != sizeof( void * ) ) )
{
hb_errInternal( HB_EI_RDDINVALID, NULL, NULL, NULL );
}
@@ -112,19 +112,19 @@ static void hb_firebirddd_init( void * cargo )
HB_FUNC_EXTERN( SQLBASE ); HB_FUNC( SDDFB ) { HB_FUNC_EXEC( SQLBASE ); }
HB_INIT_SYMBOLS_BEGIN( firebirddd__InitSymbols )
{ "SDDFB", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( SDDFB )}, NULL },
{ "SDDFB", { HB_FS_PUBLIC | HB_FS_LOCAL }, { HB_FUNCNAME( SDDFB ) }, NULL },
HB_INIT_SYMBOLS_END( firebirddd__InitSymbols )
HB_CALL_ON_STARTUP_BEGIN( _hb_firebirddd_init_ )
hb_vmAtInit( hb_firebirddd_init, NULL );
hb_vmAtInit( hb_firebirddd_init, NULL );
HB_CALL_ON_STARTUP_END( _hb_firebirddd_init_ )
#if defined( HB_PRAGMA_STARTUP )
#pragma startup firebirddd__InitSymbols
#pragma startup _hb_firebirddd_init_
#elif defined( HB_DATASEG_STARTUP )
#define HB_DATASEG_BODY HB_DATASEG_FUNC( firebirddd__InitSymbols ) \
HB_DATASEG_FUNC( _hb_firebirddd_init_ )
#define HB_DATASEG_BODY HB_DATASEG_FUNC( firebirddd__InitSymbols ) \
HB_DATASEG_FUNC( _hb_firebirddd_init_ )
#include "hbiniseg.h"
#endif
@@ -132,10 +132,10 @@ HB_CALL_ON_STARTUP_END( _hb_firebirddd_init_ )
/* ===================================================================================== */
static HB_USHORT hb_errRT_FireBirdDD( HB_ERRCODE errGenCode, HB_ERRCODE errSubCode, const char * szDescription, const char * szOperation, HB_ERRCODE errOsCode )
{
HB_USHORT uiAction;
PHB_ITEM pError;
HB_USHORT uiAction;
PHB_ITEM pError;
pError = hb_errRT_New( ES_ERROR, "SDDFB", errGenCode, errSubCode, szDescription, szOperation, errOsCode, EF_NONE );
pError = hb_errRT_New( ES_ERROR, "SDDFB", errGenCode, errSubCode, szDescription, szOperation, errOsCode, EF_NONE );
uiAction = hb_errLaunch( pError );
hb_itemRelease( pError );
return uiAction;
@@ -145,38 +145,38 @@ static HB_USHORT hb_errRT_FireBirdDD( HB_ERRCODE errGenCode, HB_ERRCODE errSubCo
static HB_ERRCODE fbConnect( SQLDDCONNECTION * pConnection, PHB_ITEM pItem )
{
ISC_STATUS_ARRAY status;
isc_db_handle hDb = ( isc_db_handle ) 0;
char parambuf[ 520 ];
int i;
unsigned int ul;
ISC_STATUS_ARRAY status;
isc_db_handle hDb = ( isc_db_handle ) 0;
char parambuf[ 520 ];
int i;
unsigned int ul;
i = 0;
parambuf[ i++ ] = isc_dpb_version1;
i = 0;
parambuf[ i++ ] = isc_dpb_version1;
parambuf[ i++ ] = isc_dpb_user_name;
ul = ( unsigned int ) hb_arrayGetCLen( pItem, 3 );
if ( ul > 255 )
parambuf[ i++ ] = isc_dpb_user_name;
ul = ( unsigned int ) hb_arrayGetCLen( pItem, 3 );
if( ul > 255 )
ul = 255;
parambuf[ i++ ] = ( char ) ul;
parambuf[ i++ ] = ( char ) ul;
memcpy( parambuf + i, hb_arrayGetCPtr( pItem, 3 ), ul );
i += ul;
i += ul;
parambuf[ i++ ] = isc_dpb_password;
ul = ( unsigned int ) hb_arrayGetCLen( pItem, 4 );
if ( ul > 255 )
parambuf[ i++ ] = isc_dpb_password;
ul = ( unsigned int ) hb_arrayGetCLen( pItem, 4 );
if( ul > 255 )
ul = 255;
parambuf[ i++ ] = ( char ) ul;
parambuf[ i++ ] = ( char ) ul;
memcpy( parambuf + i, hb_arrayGetCPtr( pItem, 4 ), ul );
i += ul;
i += ul;
if ( isc_attach_database( status, ( short ) hb_arrayGetCLen( pItem, 5 ), hb_arrayGetCPtr( pItem, 5 ),
&hDb, ( short ) i, parambuf ) )
if( isc_attach_database( status, ( short ) hb_arrayGetCLen( pItem, 5 ), hb_arrayGetCPtr( pItem, 5 ),
&hDb, ( short ) i, parambuf ) )
{
/* TODO: error code in status[1]; */
return HB_FAILURE;
}
pConnection->pSDDConn = hb_xgrab( sizeof( SDDCONN ) );
pConnection->pSDDConn = hb_xgrab( sizeof( SDDCONN ) );
( ( SDDCONN * ) pConnection->pSDDConn )->hDb = hDb;
/* HB_TRACE( HB_TR_ALWAYS, ("hDb=%d", hDb) ); */
return HB_SUCCESS;
@@ -203,44 +203,44 @@ static HB_ERRCODE fbExecute( SQLDDCONNECTION * pConnection, PHB_ITEM pItem )
static HB_ERRCODE fbOpen( SQLBASEAREAP pArea )
{
isc_db_handle * phDb = &( ( SDDCONN * ) pArea->pConnection->pSDDConn )->hDb;
SDDDATA * pSDDData;
ISC_STATUS_ARRAY status;
isc_tr_handle hTrans = ( isc_tr_handle ) 0;
isc_stmt_handle hStmt = ( isc_stmt_handle ) 0;
XSQLDA ISC_FAR * pSqlda;
XSQLVAR * pVar;
PHB_ITEM pItemEof, pItem;
DBFIELDINFO pFieldInfo;
HB_BOOL bError;
HB_USHORT uiFields, uiCount;
int iType;
isc_db_handle * phDb = &( ( SDDCONN * ) pArea->pConnection->pSDDConn )->hDb;
SDDDATA * pSDDData;
ISC_STATUS_ARRAY status;
isc_tr_handle hTrans = ( isc_tr_handle ) 0;
isc_stmt_handle hStmt = ( isc_stmt_handle ) 0;
XSQLDA ISC_FAR * pSqlda;
XSQLVAR * pVar;
PHB_ITEM pItemEof, pItem;
DBFIELDINFO pFieldInfo;
HB_BOOL bError;
HB_USHORT uiFields, uiCount;
int iType;
pArea->pSDDData = memset( hb_xgrab( sizeof( SDDDATA ) ), 0, sizeof( SDDDATA ) );
pSDDData = ( SDDDATA * ) pArea->pSDDData;
pArea->pSDDData = memset( hb_xgrab( sizeof( SDDDATA ) ), 0, sizeof( SDDDATA ) );
pSDDData = ( SDDDATA * ) pArea->pSDDData;
memset( &status, 0, sizeof( status ) );
/* HB_TRACE( HB_TR_ALWAYS, ("db=%d", hDb) ); */
if ( isc_start_transaction( status, &hTrans, 1, phDb, 0, NULL ) )
if( isc_start_transaction( status, &hTrans, 1, phDb, 0, NULL ) )
{
/* HB_TRACE( HB_TR_ALWAYS, ("hTrans=%d status=%ld %ld %ld %ld", ( int ) hTrans, ( long ) status[0], ( long ) status[1], ( long ) status[2], ( long ) status[3] ) ); */
hb_errRT_FireBirdDD( EG_OPEN, ESQLDD_START, "Start transaction failed", NULL, ( HB_ERRCODE ) isc_sqlcode( status ) );
return HB_FAILURE;
}
if ( isc_dsql_allocate_statement( status, phDb, &hStmt ) )
if( isc_dsql_allocate_statement( status, phDb, &hStmt ) )
{
hb_errRT_FireBirdDD( EG_OPEN, ESQLDD_STMTALLOC, "Allocate statement failed", NULL, ( HB_ERRCODE ) isc_sqlcode( status ) );
isc_rollback_transaction( status, &hTrans );
return HB_FAILURE;
}
pSqlda = ( XSQLDA * ) hb_xgrab( XSQLDA_LENGTH( 1 ) );
pSqlda->sqln = 1;
pSqlda->version = 1;
pSqlda = ( XSQLDA * ) hb_xgrab( XSQLDA_LENGTH( 1 ) );
pSqlda->sqln = 1;
pSqlda->version = 1;
if ( isc_dsql_prepare( status, &hTrans, &hStmt, 0, pArea->szQuery, SQL_DIALECT_V5, pSqlda ) )
if( isc_dsql_prepare( status, &hTrans, &hStmt, 0, pArea->szQuery, SQL_DIALECT_V5, pSqlda ) )
{
hb_errRT_FireBirdDD( EG_OPEN, ESQLDD_INVALIDQUERY, "Prepare statement failed", pArea->szQuery, ( HB_ERRCODE ) isc_sqlcode( status ) );
isc_dsql_free_statement( status, &hStmt, DSQL_drop );
@@ -248,15 +248,15 @@ static HB_ERRCODE fbOpen( SQLBASEAREAP pArea )
hb_xfree( pSqlda );
return HB_FAILURE;
}
if ( pSqlda->sqld > pSqlda->sqln )
if( pSqlda->sqld > pSqlda->sqln )
{
uiFields = pSqlda->sqld;
hb_xfree( pSqlda );
pSqlda = ( XSQLDA * ) hb_xgrab( XSQLDA_LENGTH( uiFields ) );
pSqlda->sqln = uiFields;
pSqlda->version = 1;
uiFields = pSqlda->sqld;
hb_xfree( pSqlda );
pSqlda = ( XSQLDA * ) hb_xgrab( XSQLDA_LENGTH( uiFields ) );
pSqlda->sqln = uiFields;
pSqlda->version = 1;
if ( isc_dsql_describe( status, &hStmt, SQL_DIALECT_V5, pSqlda ) )
if( isc_dsql_describe( status, &hStmt, SQL_DIALECT_V5, pSqlda ) )
{
hb_errRT_FireBirdDD( EG_OPEN, ESQLDD_STMTDESCR, "Describe statement failed", NULL, ( HB_ERRCODE ) isc_sqlcode( status ) );
isc_dsql_free_statement( status, &hStmt, DSQL_drop );
@@ -266,17 +266,17 @@ static HB_ERRCODE fbOpen( SQLBASEAREAP pArea )
}
}
pSDDData->hTrans = hTrans;
pSDDData->hStmt = hStmt;
pSDDData->pSqlda = pSqlda;
pSDDData->hTrans = hTrans;
pSDDData->hStmt = hStmt;
pSDDData->pSqlda = pSqlda;
uiFields = pSqlda->sqld;
uiFields = pSqlda->sqld;
SELF_SETFIELDEXTENT( ( AREAP ) pArea, uiFields );
pItemEof = hb_itemArrayNew( uiFields );
pItemEof = hb_itemArrayNew( uiFields );
bError = HB_FALSE;
for ( uiCount = 0, pVar = pSqlda->sqlvar; uiCount < uiFields; uiCount++, pVar++ )
bError = HB_FALSE;
for( uiCount = 0, pVar = pSqlda->sqlvar; uiCount < uiFields; uiCount++, pVar++ )
{
/* FIXME: if pVar->sqlname is ended with 0 byte then this hb_strndup()
* and hb_xfree() bewlow is redundant and
@@ -284,75 +284,75 @@ static HB_ERRCODE fbOpen( SQLBASEAREAP pArea )
* is enough.
*/
char * szOurName = hb_strndup( pVar->sqlname, pVar->sqlname_length );
pFieldInfo.atomName = szOurName;
pFieldInfo.atomName = szOurName;
pFieldInfo.uiDec = 0;
pFieldInfo.uiDec = 0;
iType = pVar->sqltype & ~1;
iType = pVar->sqltype & ~1;
switch( iType )
{
case SQL_TEXT:
pFieldInfo.uiType = HB_FT_STRING;
pFieldInfo.uiLen = pVar->sqllen;
pVar->sqldata = ( char* ) hb_xgrab( sizeof( char ) * pVar->sqllen + 2 );
pFieldInfo.uiLen = pVar->sqllen;
pVar->sqldata = ( char * ) hb_xgrab( sizeof( char ) * pVar->sqllen + 2 );
break;
case SQL_VARYING:
pFieldInfo.uiType = HB_FT_STRING;
pFieldInfo.uiLen = pVar->sqllen;
pFieldInfo.uiLen = pVar->sqllen;
/* pVar->sqltype = SQL_TEXT; Coercing */
pVar->sqldata = ( char* ) hb_xgrab( sizeof( char ) * pVar->sqllen + 2 );
pVar->sqldata = ( char * ) hb_xgrab( sizeof( char ) * pVar->sqllen + 2 );
break;
case SQL_SHORT:
pFieldInfo.uiType = HB_FT_INTEGER;
pFieldInfo.uiLen = 6;
pVar->sqldata = ( char* ) hb_xgrab( sizeof( short ) );
pFieldInfo.uiLen = 6;
pVar->sqldata = ( char * ) hb_xgrab( sizeof( short ) );
break;
case SQL_LONG:
pFieldInfo.uiType = HB_FT_LONG;
pFieldInfo.uiLen = 10;
pVar->sqldata = ( char* ) hb_xgrab( sizeof( long ) );
pFieldInfo.uiLen = 10;
pVar->sqldata = ( char * ) hb_xgrab( sizeof( long ) );
break;
case SQL_FLOAT:
pFieldInfo.uiType = HB_FT_FLOAT;
pFieldInfo.uiLen = 16;
pFieldInfo.uiDec = - pVar->sqlscale;
pVar->sqldata = ( char* ) hb_xgrab( sizeof( float ) );
pFieldInfo.uiLen = 16;
pFieldInfo.uiDec = -pVar->sqlscale;
pVar->sqldata = ( char * ) hb_xgrab( sizeof( float ) );
break;
case SQL_DOUBLE:
pFieldInfo.uiType = HB_FT_DOUBLE;
pFieldInfo.uiLen = 16;
pFieldInfo.uiDec = - pVar->sqlscale;
pVar->sqldata = ( char* ) hb_xgrab( sizeof( double ) );
pFieldInfo.uiLen = 16;
pFieldInfo.uiDec = -pVar->sqlscale;
pVar->sqldata = ( char * ) hb_xgrab( sizeof( double ) );
break;
default: /* other fields as binary string */
pFieldInfo.uiType = HB_FT_STRING;
pFieldInfo.uiLen = pVar->sqllen;
pVar->sqldata = ( char* ) hb_xgrab( sizeof( char ) * pVar->sqllen );
pFieldInfo.uiLen = pVar->sqllen;
pVar->sqldata = ( char * ) hb_xgrab( sizeof( char ) * pVar->sqllen );
break;
}
if ( pVar->sqltype & 1 )
if( pVar->sqltype & 1 )
pVar->sqlind = ( short * ) hb_xgrab( sizeof( short ) );
if ( ! bError )
if( ! bError )
{
switch ( pFieldInfo.uiType )
switch( pFieldInfo.uiType )
{
case HB_FT_STRING:
{
char * pStr;
pStr = ( char * ) hb_xgrab( pFieldInfo.uiLen + 1 );
pStr = ( char * ) hb_xgrab( pFieldInfo.uiLen + 1 );
memset( pStr, ' ', pFieldInfo.uiLen );
pStr[ pFieldInfo.uiLen ] = '\0';
pStr[ pFieldInfo.uiLen ] = '\0';
pItem = hb_itemPutCL( NULL, pStr, pFieldInfo.uiLen );
pItem = hb_itemPutCL( NULL, pStr, pFieldInfo.uiLen );
hb_xfree( pStr );
break;
}
@@ -382,8 +382,8 @@ static HB_ERRCODE fbOpen( SQLBASEAREAP pArea )
break;
default:
pItem = hb_itemNew( NULL );
bError = HB_TRUE;
pItem = hb_itemNew( NULL );
bError = HB_TRUE;
break;
}
@@ -394,18 +394,18 @@ static HB_ERRCODE fbOpen( SQLBASEAREAP pArea )
{
pFieldInfo.uiType = HB_IT_LONG;
}
*/
if ( ! bError )
*/
if( ! bError )
bError = ( SELF_ADDFIELD( ( AREAP ) pArea, &pFieldInfo ) == HB_FAILURE );
}
hb_xfree( szOurName );
if ( bError )
break;
if( bError )
break;
}
if ( bError )
if( bError )
{
hb_itemClear( pItemEof );
hb_itemRelease( pItemEof );
@@ -413,15 +413,15 @@ static HB_ERRCODE fbOpen( SQLBASEAREAP pArea )
return HB_FAILURE;
}
pArea->ulRecCount = 0;
pArea->ulRecCount = 0;
pArea->pRow = ( void ** ) hb_xgrab( SQLDD_ROWSET_INIT * sizeof( void * ) );
pArea->pRowFlags = ( HB_BYTE * ) hb_xgrab( 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 ) );
memset( pArea->pRowFlags, 0, SQLDD_ROWSET_INIT * sizeof( HB_BYTE ) );
pArea->ulRecMax = SQLDD_ROWSET_INIT;
pArea->ulRecMax = SQLDD_ROWSET_INIT;
* pArea->pRow = pItemEof;
pArea->pRowFlags[ 0 ] = SQLDD_FLAG_CACHED;
*pArea->pRow = pItemEof;
pArea->pRowFlags[ 0 ] = SQLDD_FLAG_CACHED;
return HB_SUCCESS;
}
@@ -429,20 +429,20 @@ static HB_ERRCODE fbOpen( SQLBASEAREAP pArea )
static HB_ERRCODE fbClose( SQLBASEAREAP pArea )
{
SDDDATA * pSDDData = ( SDDDATA * ) pArea->pSDDData;
ISC_STATUS_ARRAY status;
SDDDATA * pSDDData = ( SDDDATA * ) pArea->pSDDData;
ISC_STATUS_ARRAY status;
if( pSDDData )
{
if ( pSDDData->pSqlda )
if( pSDDData->pSqlda )
{
hb_xfree( pSDDData->pSqlda );
}
if ( pSDDData->hStmt )
if( pSDDData->hStmt )
{
isc_dsql_free_statement( status, &pSDDData->hStmt, DSQL_drop );
}
if ( pSDDData->hTrans )
if( pSDDData->hTrans )
{
isc_rollback_transaction( status, &pSDDData->hTrans );
}
@@ -455,57 +455,57 @@ static HB_ERRCODE fbClose( SQLBASEAREAP pArea )
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;
SDDDATA * pSDDData = ( SDDDATA * ) pArea->pSDDData;
ISC_STATUS_ARRAY status;
XSQLVAR * pVar;
PHB_ITEM pItem, pArray;
HB_USHORT ui;
ISC_STATUS lErr;
short iType;
while ( ulRecNo > pArea->ulRecCount && ! pArea->fFetched )
while( ulRecNo > pArea->ulRecCount && ! pArea->fFetched )
{
isc_stmt_handle * phStmt = &pSDDData->hStmt;
isc_tr_handle * phTr = &pSDDData->hTrans;
isc_stmt_handle * phStmt = &pSDDData->hStmt;
isc_tr_handle * phTr = &pSDDData->hTrans;
lErr = isc_dsql_fetch( status, phStmt, SQL_DIALECT_V5, pSDDData->pSqlda );
if ( lErr == 0 )
if( lErr == 0 )
{
pArray = hb_itemArrayNew( pArea->area.uiFieldCount );
for ( ui = 1; ui <= pArea->area.uiFieldCount; ui++ )
for( ui = 1; ui <= pArea->area.uiFieldCount; ui++ )
{
pVar = ( XSQLVAR * ) pSDDData->pSqlda;
pVar += ( ui - 1 );
pVar = ( XSQLVAR * ) pSDDData->pSqlda;
pVar += ( ui - 1 );
if ( ( pVar->sqltype & 1 ) && ( * pVar->sqlind < 0 ) )
if( ( pVar->sqltype & 1 ) && ( *pVar->sqlind < 0 ) )
continue; /* NIL value */
iType = pVar->sqltype;
switch ( iType )
switch( iType )
{
case SQL_TEXT:
pItem = hb_itemPutCL( NULL, pVar->sqldata, pVar->sqllen );
break;
case SQL_VARYING:
pItem = hb_itemPutCL( NULL, pVar->sqldata + 2, * ( short * ) pVar->sqldata );
pItem = hb_itemPutCL( NULL, pVar->sqldata + 2, *( short * ) pVar->sqldata );
break;
case SQL_SHORT:
pItem = hb_itemPutNI( NULL, * ( short * ) pVar->sqldata );
pItem = hb_itemPutNI( NULL, *( short * ) pVar->sqldata );
break;
case SQL_LONG:
pItem = hb_itemPutNL( NULL, * ( long * ) pVar->sqldata );
pItem = hb_itemPutNL( NULL, *( long * ) pVar->sqldata );
break;
case SQL_FLOAT:
pItem = hb_itemPutND( NULL, * ( float * ) pVar->sqldata );
pItem = hb_itemPutND( NULL, *( float * ) pVar->sqldata );
break;
case SQL_DOUBLE:
pItem = hb_itemPutND( NULL, * ( double * ) pVar->sqldata );
pItem = hb_itemPutND( NULL, *( double * ) pVar->sqldata );
break;
default:
@@ -516,36 +516,36 @@ static HB_ERRCODE fbGoTo( 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 ) );
pArea->ulRecMax += SQLDD_ROWSET_RESIZE;
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 ) );
pArea->ulRecMax += SQLDD_ROWSET_RESIZE;
}
pArea->ulRecCount++;
pArea->pRow[ pArea->ulRecCount ] = pArray;
pArea->pRowFlags[ pArea->ulRecCount ] = SQLDD_FLAG_CACHED;
pArea->pRow[ pArea->ulRecCount ] = pArray;
pArea->pRowFlags[ pArea->ulRecCount ] = SQLDD_FLAG_CACHED;
}
else if ( lErr == 100L )
else if( lErr == 100L )
{
pArea->fFetched = HB_TRUE;
if ( isc_dsql_free_statement( status, phStmt, DSQL_drop ) )
if( isc_dsql_free_statement( status, phStmt, DSQL_drop ) )
{
hb_errRT_FireBirdDD( EG_OPEN, ESQLDD_STMTFREE, "Statement free error", NULL, ( HB_ERRCODE ) isc_sqlcode( status ) );
return HB_FAILURE;
}
pSDDData->hStmt = ( isc_stmt_handle ) 0;
if ( isc_commit_transaction( status, phTr ) )
if( isc_commit_transaction( status, phTr ) )
{
hb_errRT_FireBirdDD( EG_OPEN, ESQLDD_COMMIT, "Transaction commit error", NULL, ( HB_ERRCODE ) isc_sqlcode( status ) );
return HB_FAILURE;
}
pSDDData->hTrans = ( isc_tr_handle ) 0;
pSDDData->hTrans = ( isc_tr_handle ) 0;
hb_xfree( pSDDData->pSqlda ); /* TODO: free is more complex */
pSDDData->pSqlda = NULL;
pSDDData->pSqlda = NULL;
}
else
@@ -555,17 +555,17 @@ static HB_ERRCODE fbGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo )
}
}
if ( ulRecNo == 0 || ulRecNo > pArea->ulRecCount )
if( ulRecNo == 0 || ulRecNo > pArea->ulRecCount )
{
pArea->pRecord = pArea->pRow[ 0 ];
pArea->bRecordFlags = pArea->pRowFlags[ 0 ];
pArea->fPositioned = HB_FALSE;
pArea->pRecord = pArea->pRow[ 0 ];
pArea->bRecordFlags = pArea->pRowFlags[ 0 ];
pArea->fPositioned = HB_FALSE;
}
else
{
pArea->pRecord = pArea->pRow[ ulRecNo ];
pArea->bRecordFlags = pArea->pRowFlags[ ulRecNo ];
pArea->fPositioned = HB_TRUE;
pArea->pRecord = pArea->pRow[ ulRecNo ];
pArea->bRecordFlags = pArea->pRowFlags[ ulRecNo ];
pArea->fPositioned = HB_TRUE;
}
return HB_SUCCESS;
}

View File

@@ -63,7 +63,7 @@ typedef int my_socket;
#include "mysql.h"
#ifndef MYSQL_TYPE_NEWDECIMAL
#define MYSQL_TYPE_NEWDECIMAL 246
#define MYSQL_TYPE_NEWDECIMAL 246
#endif
@@ -74,8 +74,8 @@ typedef struct
typedef struct
{
MYSQL_RES * pResult;
MYSQL_ROW pNatRecord;
MYSQL_RES * pResult;
MYSQL_ROW pNatRecord;
unsigned long * pNatLength;
} SDDDATA;
@@ -93,14 +93,14 @@ static SDDNODE mysqldd =
{
NULL,
"MYSQL",
( SDDFUNC_CONNECT ) mysqlConnect,
( SDDFUNC_CONNECT ) mysqlConnect,
( SDDFUNC_DISCONNECT ) mysqlDisconnect,
( SDDFUNC_EXECUTE ) mysqlExecute,
( SDDFUNC_OPEN ) mysqlOpen,
( SDDFUNC_CLOSE ) mysqlClose,
( SDDFUNC_GOTO ) mysqlGoTo,
( SDDFUNC_GETVALUE ) mysqlGetValue,
( SDDFUNC_GETVARLEN ) NULL
( SDDFUNC_EXECUTE ) mysqlExecute,
( SDDFUNC_OPEN ) mysqlOpen,
( SDDFUNC_CLOSE ) mysqlClose,
( SDDFUNC_GOTO ) mysqlGoTo,
( SDDFUNC_GETVALUE ) mysqlGetValue,
( SDDFUNC_GETVARLEN ) NULL
};
@@ -108,8 +108,8 @@ static void hb_mysqldd_init( void * cargo )
{
HB_SYMBOL_UNUSED( cargo );
if ( ! hb_sddRegister( & mysqldd ) ||
( sizeof( MYSQL_ROW_OFFSET ) != sizeof( void * ) ) )
if( ! hb_sddRegister( &mysqldd ) ||
( sizeof( MYSQL_ROW_OFFSET ) != sizeof( void * ) ) )
{
hb_errInternal( HB_EI_RDDINVALID, NULL, NULL, NULL );
}
@@ -119,19 +119,19 @@ static void hb_mysqldd_init( void * cargo )
HB_FUNC_EXTERN( SQLBASE ); HB_FUNC( SDDMY ) { HB_FUNC_EXEC( SQLBASE ); }
HB_INIT_SYMBOLS_BEGIN( mysqldd__InitSymbols )
{ "SDDMY", {HB_FS_PUBLIC}, {HB_FUNCNAME( SDDMY )}, NULL },
{ "SDDMY", { HB_FS_PUBLIC }, { HB_FUNCNAME( SDDMY ) }, NULL },
HB_INIT_SYMBOLS_END( mysqldd__InitSymbols )
HB_CALL_ON_STARTUP_BEGIN( _hb_mysqldd_init_ )
hb_vmAtInit( hb_mysqldd_init, NULL );
hb_vmAtInit( hb_mysqldd_init, NULL );
HB_CALL_ON_STARTUP_END( _hb_mysqldd_init_ )
#if defined( HB_PRAGMA_STARTUP )
#pragma startup mysqldd__InitSymbols
#pragma startup _hb_mysqldd_init_
#elif defined( HB_DATASEG_STARTUP )
#define HB_DATASEG_BODY HB_DATASEG_FUNC( mysqldd__InitSymbols ) \
HB_DATASEG_FUNC( _hb_mysqldd_init_ )
#define HB_DATASEG_BODY HB_DATASEG_FUNC( mysqldd__InitSymbols ) \
HB_DATASEG_FUNC( _hb_mysqldd_init_ )
#include "hbiniseg.h"
#endif
@@ -139,10 +139,10 @@ HB_CALL_ON_STARTUP_END( _hb_mysqldd_init_ )
/*=====================================================================================*/
static HB_USHORT hb_errRT_MySQLDD( HB_ERRCODE errGenCode, HB_ERRCODE errSubCode, const char * szDescription, const char * szOperation, HB_ERRCODE errOsCode )
{
HB_USHORT uiAction;
PHB_ITEM pError;
HB_USHORT uiAction;
PHB_ITEM pError;
pError = hb_errRT_New( ES_ERROR, "SDDMY", errGenCode, errSubCode, szDescription, szOperation, errOsCode, EF_NONE );
pError = hb_errRT_New( ES_ERROR, "SDDMY", errGenCode, errSubCode, szDescription, szOperation, errOsCode, EF_NONE );
uiAction = hb_errLaunch( pError );
hb_itemRelease( pError );
return uiAction;
@@ -152,24 +152,24 @@ static HB_USHORT hb_errRT_MySQLDD( HB_ERRCODE errGenCode, HB_ERRCODE errSubCode,
static HB_ERRCODE mysqlConnect( SQLDDCONNECTION * pConnection, PHB_ITEM pItem )
{
MYSQL * pMySql;
MYSQL * pMySql;
PHB_ITEM pItemUnixSocket = hb_arrayGetItemPtr( pItem, 7 );
pMySql = mysql_init( NULL );
if ( ! mysql_real_connect( pMySql,
hb_arrayGetCPtr( pItem, 2 ) /* host */,
hb_arrayGetCPtr( pItem, 3 ) /* user */,
hb_arrayGetCPtr( pItem, 4 ) /* password */,
hb_arrayGetCPtr( pItem, 5 ) /* db */,
hb_arrayGetNI( pItem, 6 ) /* port */,
pItemUnixSocket && HB_IS_STRING( pItemUnixSocket ) ? hb_itemGetCPtr( pItemUnixSocket ) : NULL,
hb_arrayGetNI( pItem, 8 ) /* flags*/ ) )
if( ! mysql_real_connect( pMySql,
hb_arrayGetCPtr( pItem, 2 ) /* host */,
hb_arrayGetCPtr( pItem, 3 ) /* user */,
hb_arrayGetCPtr( pItem, 4 ) /* password */,
hb_arrayGetCPtr( pItem, 5 ) /* db */,
hb_arrayGetNI( pItem, 6 ) /* port */,
pItemUnixSocket && HB_IS_STRING( pItemUnixSocket ) ? hb_itemGetCPtr( pItemUnixSocket ) : NULL,
hb_arrayGetNI( pItem, 8 ) /* flags*/ ) )
{
hb_rddsqlSetError( mysql_errno( pMySql ), mysql_error( pMySql ), NULL, NULL, 0 );
mysql_close( pMySql );
return HB_FAILURE;
}
pConnection->pSDDConn = hb_xgrab( sizeof( SDDCONN ) );
pConnection->pSDDConn = hb_xgrab( sizeof( SDDCONN ) );
( ( SDDCONN * ) pConnection->pSDDConn )->pMySql = pMySql;
return HB_SUCCESS;
}
@@ -185,19 +185,19 @@ static HB_ERRCODE mysqlDisconnect( SQLDDCONNECTION * pConnection )
static HB_ERRCODE mysqlExecute( SQLDDCONNECTION * pConnection, PHB_ITEM pItem )
{
MYSQL * pMySql = ( ( SDDCONN * ) pConnection->pSDDConn )->pMySql;
MYSQL_RES * pResult;
HB_ULONG ulAffectedRows;
PHB_ITEM pNewID = NULL;
MYSQL * pMySql = ( ( SDDCONN * ) pConnection->pSDDConn )->pMySql;
MYSQL_RES * pResult;
HB_ULONG ulAffectedRows;
PHB_ITEM pNewID = NULL;
if ( mysql_real_query( pMySql, hb_itemGetCPtr( pItem ), ( unsigned long ) hb_itemGetCLen( pItem ) ) )
if( mysql_real_query( pMySql, hb_itemGetCPtr( pItem ), ( unsigned long ) hb_itemGetCLen( pItem ) ) )
{
hb_rddsqlSetError( mysql_errno( pMySql ), mysql_error( pMySql ), hb_itemGetCPtr( pItem ), NULL, 0 );
return HB_FAILURE;
}
pResult = mysql_store_result( pMySql );
if ( pResult )
if( pResult )
{
ulAffectedRows = ( HB_ULONG ) mysql_num_rows( pResult );
mysql_free_result( pResult );
@@ -205,7 +205,7 @@ static HB_ERRCODE mysqlExecute( SQLDDCONNECTION * pConnection, PHB_ITEM pItem )
}
else
{
if ( mysql_field_count( pMySql ) == 0 )
if( mysql_field_count( pMySql ) == 0 )
{
ulAffectedRows = ( HB_ULONG ) mysql_affected_rows( pMySql );
if( mysql_insert_id( pMySql ) != 0 )
@@ -228,28 +228,28 @@ static HB_ERRCODE mysqlExecute( SQLDDCONNECTION * pConnection, PHB_ITEM pItem )
static HB_ERRCODE mysqlOpen( SQLBASEAREAP pArea )
{
MYSQL * pMySql = ( ( SDDCONN * ) pArea->pConnection->pSDDConn )->pMySql;
SDDDATA * pSDDData;
PHB_ITEM pItemEof, pItem;
HB_ULONG ulIndex;
HB_USHORT uiFields, uiCount;
HB_ERRCODE errCode = 0;
HB_BOOL bError;
DBFIELDINFO pFieldInfo;
MYSQL_FIELD * pMyField;
void ** pRow;
MYSQL * pMySql = ( ( SDDCONN * ) pArea->pConnection->pSDDConn )->pMySql;
SDDDATA * pSDDData;
PHB_ITEM pItemEof, pItem;
HB_ULONG ulIndex;
HB_USHORT uiFields, uiCount;
HB_ERRCODE errCode = 0;
HB_BOOL bError;
DBFIELDINFO pFieldInfo;
MYSQL_FIELD * pMyField;
void ** pRow;
pArea->pSDDData = memset( hb_xgrab( sizeof( SDDDATA ) ), 0, sizeof( SDDDATA ) );
pSDDData = ( SDDDATA * ) pArea->pSDDData;
pArea->pSDDData = memset( hb_xgrab( sizeof( SDDDATA ) ), 0, sizeof( SDDDATA ) );
pSDDData = ( SDDDATA * ) pArea->pSDDData;
if ( mysql_real_query( pMySql, pArea->szQuery, ( unsigned long ) strlen( pArea->szQuery ) ) )
if( mysql_real_query( pMySql, pArea->szQuery, ( unsigned long ) strlen( pArea->szQuery ) ) )
{
hb_errRT_MySQLDD( EG_OPEN, ESQLDD_INVALIDQUERY, ( const char * ) mysql_error( pMySql ), pArea->szQuery,
mysql_errno( pMySql ) );
return HB_FAILURE;
}
if ( ( pSDDData->pResult = mysql_store_result( pMySql ) ) == NULL )
if( ( pSDDData->pResult = mysql_store_result( pMySql ) ) == NULL )
{
hb_errRT_MySQLDD( EG_MEM, ESQLDD_INVALIDQUERY, ( const char * ) mysql_error( pMySql ), pArea->szQuery,
mysql_errno( pMySql ) );
@@ -261,14 +261,14 @@ static HB_ERRCODE mysqlOpen( SQLBASEAREAP pArea )
pItemEof = hb_itemArrayNew( uiFields );
bError = HB_FALSE;
for ( uiCount = 0; uiCount < uiFields; uiCount++ )
bError = HB_FALSE;
for( uiCount = 0; uiCount < uiFields; uiCount++ )
{
pMyField = mysql_fetch_field_direct( pSDDData->pResult, uiCount );
pMyField = mysql_fetch_field_direct( pSDDData->pResult, uiCount );
pFieldInfo.atomName = pMyField->name;
pFieldInfo.uiLen = ( HB_USHORT ) pMyField->length;
pFieldInfo.uiDec = 0;
pFieldInfo.atomName = pMyField->name;
pFieldInfo.uiLen = ( HB_USHORT ) pMyField->length;
pFieldInfo.uiDec = 0;
switch( pMyField->type )
{
@@ -288,7 +288,7 @@ static HB_ERRCODE mysqlOpen( SQLBASEAREAP pArea )
case MYSQL_TYPE_FLOAT:
case MYSQL_TYPE_DOUBLE:
pFieldInfo.uiType = HB_FT_DOUBLE;
pFieldInfo.uiDec = ( HB_USHORT ) pMyField->decimals;
pFieldInfo.uiDec = ( HB_USHORT ) pMyField->decimals;
break;
case MYSQL_TYPE_STRING:
@@ -311,12 +311,12 @@ static HB_ERRCODE mysqlOpen( SQLBASEAREAP pArea )
case MYSQL_TYPE_TIMESTAMP:
case MYSQL_TYPE_DATETIME:
pFieldInfo.uiType = HB_FT_TIMESTAMP;
pFieldInfo.uiLen = 8;
pFieldInfo.uiLen = 8;
break;
case MYSQL_TYPE_TIME:
pFieldInfo.uiType = HB_FT_TIME;
pFieldInfo.uiLen = 4;
pFieldInfo.uiLen = 4;
break;
/*
@@ -324,28 +324,28 @@ static HB_ERRCODE mysqlOpen( SQLBASEAREAP pArea )
case MYSQL_TYPE_NEWDATE:
case MYSQL_TYPE_ENUM:
case MYSQL_TYPE_SET:
*/
*/
default:
bError = HB_TRUE;
errCode = ( HB_ERRCODE ) pMyField->type;
bError = HB_TRUE;
errCode = ( HB_ERRCODE ) pMyField->type;
pFieldInfo.uiType = 0;
break;
}
if ( ! bError )
if( ! bError )
{
switch ( pFieldInfo.uiType )
switch( pFieldInfo.uiType )
{
case HB_FT_STRING:
{
char* pStr;
char * pStr;
pStr = ( char * ) hb_xgrab( pFieldInfo.uiLen + 1 );
pStr = ( char * ) hb_xgrab( pFieldInfo.uiLen + 1 );
memset( pStr, ' ', pFieldInfo.uiLen );
pStr[ pFieldInfo.uiLen ] = '\0';
pStr[ pFieldInfo.uiLen ] = '\0';
pItem = hb_itemPutCL( NULL, pStr, pFieldInfo.uiLen );
pItem = hb_itemPutCL( NULL, pStr, pFieldInfo.uiLen );
hb_xfree( pStr );
break;
}
@@ -376,8 +376,8 @@ static HB_ERRCODE mysqlOpen( SQLBASEAREAP pArea )
break;
default:
pItem = hb_itemNew( NULL );
bError = HB_TRUE;
pItem = hb_itemNew( NULL );
bError = HB_TRUE;
break;
}
@@ -389,38 +389,38 @@ static HB_ERRCODE mysqlOpen( SQLBASEAREAP pArea )
pFieldInfo.uiType = HB_IT_LONG;
}*/
if ( ! bError )
if( ! bError )
bError = ( SELF_ADDFIELD( ( AREAP ) pArea, &pFieldInfo ) == HB_FAILURE );
}
if ( bError )
if( bError )
break;
}
if ( bError )
if( bError )
{
hb_itemRelease( pItemEof );
hb_errRT_MySQLDD( EG_CORRUPTION, ESQLDD_INVALIDFIELD, "Invalid field type", pArea->szQuery, errCode );
return HB_FAILURE;
hb_itemRelease( pItemEof );
hb_errRT_MySQLDD( EG_CORRUPTION, ESQLDD_INVALIDFIELD, "Invalid field type", pArea->szQuery, errCode );
return HB_FAILURE;
}
pArea->ulRecCount = ( HB_ULONG ) mysql_num_rows( pSDDData->pResult );
pArea->ulRecCount = ( HB_ULONG ) mysql_num_rows( pSDDData->pResult );
pArea->pRow = ( void ** ) hb_xgrab( ( pArea->ulRecCount + 1 ) * sizeof( void * ) );
pArea->pRowFlags = ( HB_BYTE * ) hb_xgrab( ( pArea->ulRecCount + 1 ) * sizeof( HB_BYTE ) );
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->ulRecMax = pArea->ulRecCount + 1;
pRow = pArea->pRow;
pRow = pArea->pRow;
*pRow = pItemEof;
pArea->pRowFlags[ 0 ] = SQLDD_FLAG_CACHED;
*pRow = pItemEof;
pArea->pRowFlags[ 0 ] = SQLDD_FLAG_CACHED;
pRow++;
for ( ulIndex = 1; ulIndex <= pArea->ulRecCount; ulIndex++ )
for( ulIndex = 1; ulIndex <= pArea->ulRecCount; ulIndex++ )
{
*pRow++ = ( void * ) mysql_row_tell( pSDDData->pResult );
mysql_fetch_row( pSDDData->pResult );
*pRow++ = ( void * ) mysql_row_tell( pSDDData->pResult );
mysql_fetch_row( pSDDData->pResult );
}
pArea->fFetched = HB_TRUE;
@@ -448,19 +448,19 @@ static HB_ERRCODE mysqlGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo )
{
SDDDATA * pSDDData = ( SDDDATA * ) pArea->pSDDData;
if ( ulRecNo == 0 || ulRecNo > pArea->ulRecCount )
if( ulRecNo == 0 || ulRecNo > pArea->ulRecCount )
{
pArea->pRecord = pArea->pRow[ 0 ];
pArea->bRecordFlags = pArea->pRowFlags[ 0 ];
pArea->pRecord = pArea->pRow[ 0 ];
pArea->bRecordFlags = pArea->pRowFlags[ 0 ];
pArea->fPositioned = HB_FALSE;
pArea->fPositioned = HB_FALSE;
}
else
{
pArea->pRecord = pArea->pRow[ ulRecNo ];
pArea->bRecordFlags = pArea->pRowFlags[ ulRecNo ];
pArea->pRecord = pArea->pRow[ ulRecNo ];
pArea->bRecordFlags = pArea->pRowFlags[ ulRecNo ];
if ( ! ( pArea->bRecordFlags & SQLDD_FLAG_CACHED ) )
if( ! ( pArea->bRecordFlags & SQLDD_FLAG_CACHED ) )
{
mysql_row_seek( pSDDData->pResult, ( MYSQL_ROW_OFFSET ) pArea->pRecord );
pSDDData->pNatRecord = mysql_fetch_row( pSDDData->pResult );
@@ -475,23 +475,23 @@ static HB_ERRCODE mysqlGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo )
static HB_ERRCODE mysqlGetValue( SQLBASEAREAP pArea, HB_USHORT uiIndex, PHB_ITEM pItem )
{
SDDDATA * pSDDData = ( SDDDATA * ) pArea->pSDDData;
LPFIELD pField;
char* pValue;
char szBuffer[ 64 ];
HB_BOOL bError;
PHB_ITEM pError;
HB_SIZE ulLen;
SDDDATA * pSDDData = ( SDDDATA * ) pArea->pSDDData;
LPFIELD pField;
char * pValue;
char szBuffer[ 64 ];
HB_BOOL bError;
PHB_ITEM pError;
HB_SIZE ulLen;
bError = HB_FALSE;
bError = HB_FALSE;
uiIndex--;
pField = pArea->area.lpFields + uiIndex;
pField = pArea->area.lpFields + uiIndex;
pValue = pSDDData->pNatRecord[ uiIndex ];
ulLen = pSDDData->pNatLength[ uiIndex ];
pValue = pSDDData->pNatRecord[ uiIndex ];
ulLen = pSDDData->pNatLength[ uiIndex ];
/* NULL => NIL (?) */
if ( ! pValue )
if( ! pValue )
{
hb_itemClear( pItem );
return HB_SUCCESS;
@@ -502,21 +502,21 @@ static HB_ERRCODE mysqlGetValue( SQLBASEAREAP pArea, HB_USHORT uiIndex, PHB_ITEM
case HB_FT_STRING:
{
#if 0
char* pStr;
char * pStr;
/* Expand strings to field length */
pStr = ( char * ) hb_xgrab( pField->uiLen + 1 );
if ( pValue )
if( pValue )
memcpy( pStr, pValue, ulLen );
if ( ( HB_SIZE ) pField->uiLen > ulLen )
if( ( HB_SIZE ) pField->uiLen > ulLen )
memset( pStr + ulLen, ' ', pField->uiLen - ulLen );
pStr[ pField->uiLen ] = '\0';
hb_itemPutCRaw( pItem, pStr, pField->uiLen );
#else
/* Do not expand strings */
if ( pValue )
if( pValue )
hb_itemPutCL( pItem, pValue, ulLen );
else
hb_itemPutC( pItem, NULL );
@@ -525,7 +525,7 @@ static HB_ERRCODE mysqlGetValue( SQLBASEAREAP pArea, HB_USHORT uiIndex, PHB_ITEM
}
case HB_FT_MEMO:
if ( pValue )
if( pValue )
hb_itemPutCL( pItem, pValue, ulLen );
else
hb_itemPutC( pItem, NULL );
@@ -536,33 +536,33 @@ static HB_ERRCODE mysqlGetValue( SQLBASEAREAP pArea, HB_USHORT uiIndex, PHB_ITEM
case HB_FT_INTEGER:
case HB_FT_LONG:
case HB_FT_DOUBLE:
if ( pValue )
if( pValue )
{
hb_strncpy( szBuffer, pValue, sizeof( szBuffer ) - 1 );
if ( pField->uiDec )
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 );
hb_itemPutNLLen( pItem, atol( szBuffer ), ( int ) pField->uiLen );
}
else
{
if ( pField->uiDec )
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, 0, ( int ) pField->uiLen );
}
break;
case HB_FT_DATE:
{
char szDate[ 9 ];
char szDate[ 9 ];
szDate[ 0 ] = pValue[ 0 ];
szDate[ 1 ] = pValue[ 1 ];
@@ -579,19 +579,19 @@ static HB_ERRCODE mysqlGetValue( SQLBASEAREAP pArea, HB_USHORT uiIndex, PHB_ITEM
case HB_FT_TIMESTAMP:
{
char szTimeStamp[ 15 ];
char szTimeStamp[ 15 ];
szTimeStamp[ 0 ] = pValue[ 0 ];
szTimeStamp[ 1 ] = pValue[ 1 ];
szTimeStamp[ 2 ] = pValue[ 2 ];
szTimeStamp[ 3 ] = pValue[ 3 ];
szTimeStamp[ 4 ] = pValue[ 5 ];
szTimeStamp[ 5 ] = pValue[ 6 ];
szTimeStamp[ 6 ] = pValue[ 8 ];
szTimeStamp[ 7 ] = pValue[ 9 ];
szTimeStamp[ 0 ] = pValue[ 0 ];
szTimeStamp[ 1 ] = pValue[ 1 ];
szTimeStamp[ 2 ] = pValue[ 2 ];
szTimeStamp[ 3 ] = pValue[ 3 ];
szTimeStamp[ 4 ] = pValue[ 5 ];
szTimeStamp[ 5 ] = pValue[ 6 ];
szTimeStamp[ 6 ] = pValue[ 8 ];
szTimeStamp[ 7 ] = pValue[ 9 ];
szTimeStamp[ 8 ] = pValue[ 11 ];
szTimeStamp[ 9 ] = pValue[ 12 ];
szTimeStamp[ 8 ] = pValue[ 11 ];
szTimeStamp[ 9 ] = pValue[ 12 ];
szTimeStamp[ 10 ] = pValue[ 14 ];
szTimeStamp[ 11 ] = pValue[ 15 ];
szTimeStamp[ 12 ] = pValue[ 17 ];
@@ -603,19 +603,19 @@ static HB_ERRCODE mysqlGetValue( SQLBASEAREAP pArea, HB_USHORT uiIndex, PHB_ITEM
case HB_FT_TIME:
{
char szTimeStamp[ 15 ];
char szTimeStamp[ 15 ];
szTimeStamp[ 0 ] = '0';
szTimeStamp[ 1 ] = '0';
szTimeStamp[ 2 ] = '0';
szTimeStamp[ 3 ] = '0';
szTimeStamp[ 4 ] = '0';
szTimeStamp[ 5 ] = '0';
szTimeStamp[ 6 ] = '0';
szTimeStamp[ 7 ] = '0';
szTimeStamp[ 0 ] = '0';
szTimeStamp[ 1 ] = '0';
szTimeStamp[ 2 ] = '0';
szTimeStamp[ 3 ] = '0';
szTimeStamp[ 4 ] = '0';
szTimeStamp[ 5 ] = '0';
szTimeStamp[ 6 ] = '0';
szTimeStamp[ 7 ] = '0';
szTimeStamp[ 8 ] = pValue[ 0 ];
szTimeStamp[ 9 ] = pValue[ 1 ];
szTimeStamp[ 8 ] = pValue[ 0 ];
szTimeStamp[ 9 ] = pValue[ 1 ];
szTimeStamp[ 10 ] = pValue[ 3 ];
szTimeStamp[ 11 ] = pValue[ 4 ];
szTimeStamp[ 12 ] = pValue[ 6 ];
@@ -630,7 +630,7 @@ static HB_ERRCODE mysqlGetValue( SQLBASEAREAP pArea, HB_USHORT uiIndex, PHB_ITEM
break;
}
if ( bError )
if( bError )
{
pError = hb_errNew();
hb_errPutGenCode( pError, EG_DATATYPE );

View File

@@ -61,7 +61,7 @@
/* Required by headers on Windows */
#if defined( HB_OS_WIN )
# include <windows.h>
/* Required for WIN32_LEAN_AND_MEAN mode */
/* Required for WIN32_LEAN_AND_MEAN mode */
# if ! defined( WIN32 )
# define WIN32
# endif
@@ -70,9 +70,9 @@
#include <sql.h>
#include <sqlext.h>
#if !defined( HB_OS_WIN )
# if !defined( SQLLEN ) && !defined( SQLTCHAR )
typedef unsigned char SQLTCHAR;
#if ! defined( HB_OS_WIN )
# if ! defined( SQLLEN ) && ! defined( SQLTCHAR )
typedef unsigned char SQLTCHAR;
# endif
#endif
@@ -95,13 +95,13 @@
typedef struct
{
SQLHENV hEnv;
SQLHDBC hConn;
SQLHENV hEnv;
SQLHDBC hConn;
} SDDCONN;
typedef struct
{
SQLHSTMT hStmt;
SQLHSTMT hStmt;
} SDDDATA;
static HB_ERRCODE odbcConnect( SQLDDCONNECTION * pConnection, PHB_ITEM pItem );
@@ -116,14 +116,14 @@ static SDDNODE odbcdd =
{
NULL,
"ODBC",
( SDDFUNC_CONNECT ) odbcConnect,
( SDDFUNC_CONNECT ) odbcConnect,
( SDDFUNC_DISCONNECT ) odbcDisconnect,
( SDDFUNC_EXECUTE ) odbcExecute,
( SDDFUNC_OPEN ) odbcOpen,
( SDDFUNC_CLOSE ) odbcClose,
( SDDFUNC_GOTO ) odbcGoTo,
( SDDFUNC_GETVALUE ) NULL,
( SDDFUNC_GETVARLEN ) NULL
( SDDFUNC_EXECUTE ) odbcExecute,
( SDDFUNC_OPEN ) odbcOpen,
( SDDFUNC_CLOSE ) odbcClose,
( SDDFUNC_GOTO ) odbcGoTo,
( SDDFUNC_GETVALUE ) NULL,
( SDDFUNC_GETVARLEN ) NULL
};
@@ -131,7 +131,7 @@ static void hb_odbcdd_init( void * cargo )
{
HB_SYMBOL_UNUSED( cargo );
if ( ! hb_sddRegister( & odbcdd ) )
if( ! hb_sddRegister( &odbcdd ) )
{
hb_errInternal( HB_EI_RDDINVALID, NULL, NULL, NULL );
}
@@ -141,19 +141,19 @@ static void hb_odbcdd_init( void * cargo )
HB_FUNC_EXTERN( SQLBASE ); HB_FUNC( SDDODBC ) { HB_FUNC_EXEC( SQLBASE ); }
HB_INIT_SYMBOLS_BEGIN( odbcdd__InitSymbols )
{ "SDDODBC", {HB_FS_PUBLIC}, {HB_FUNCNAME( SDDODBC )}, NULL },
{ "SDDODBC", { HB_FS_PUBLIC }, { HB_FUNCNAME( SDDODBC ) }, NULL },
HB_INIT_SYMBOLS_END( odbcdd__InitSymbols )
HB_CALL_ON_STARTUP_BEGIN( _hb_odbcdd_init_ )
hb_vmAtInit( hb_odbcdd_init, NULL );
hb_vmAtInit( hb_odbcdd_init, NULL );
HB_CALL_ON_STARTUP_END( _hb_odbcdd_init_ )
#if defined( HB_PRAGMA_STARTUP )
#pragma startup odbcdd__InitSymbols
#pragma startup _hb_odbcdd_init_
#elif defined( HB_DATASEG_STARTUP )
#define HB_DATASEG_BODY HB_DATASEG_FUNC( odbcdd__InitSymbols ) \
HB_DATASEG_FUNC( _hb_odbcdd_init_ )
#define HB_DATASEG_BODY HB_DATASEG_FUNC( odbcdd__InitSymbols ) \
HB_DATASEG_FUNC( _hb_odbcdd_init_ )
#include "hbiniseg.h"
#endif
@@ -161,10 +161,10 @@ HB_CALL_ON_STARTUP_END( _hb_odbcdd_init_ )
/*=====================================================================================*/
static HB_USHORT hb_errRT_ODBCDD( HB_ERRCODE errGenCode, HB_ERRCODE errSubCode, const char * szDescription, const char * szOperation, HB_ERRCODE errOsCode )
{
HB_USHORT uiAction;
PHB_ITEM pError;
HB_USHORT uiAction;
PHB_ITEM pError;
pError = hb_errRT_New( ES_ERROR, "SDDODBC", errGenCode, errSubCode, szDescription, szOperation, errOsCode, EF_NONE );
pError = hb_errRT_New( ES_ERROR, "SDDODBC", errGenCode, errSubCode, szDescription, szOperation, errOsCode, EF_NONE );
uiAction = hb_errLaunch( pError );
hb_itemRelease( pError );
return uiAction;
@@ -173,26 +173,26 @@ static HB_USHORT hb_errRT_ODBCDD( HB_ERRCODE errGenCode, HB_ERRCODE errSubCode,
static char * odbcGetError( SQLHENV hEnv, SQLHDBC hConn, SQLHSTMT hStmt, HB_ERRCODE * pErrCode )
{
SQLTCHAR szError[ 6 + SQL_MAX_MESSAGE_LENGTH ];
SQLINTEGER iNativeErr = 9999;
SQLSMALLINT iLen;
char * szRet;
SQLTCHAR szError[ 6 + SQL_MAX_MESSAGE_LENGTH ];
SQLINTEGER iNativeErr = 9999;
SQLSMALLINT iLen;
char * szRet;
if( SQL_SUCCEEDED( SQLError( hEnv, hConn, hStmt, szError, &iNativeErr, szError + 6, SQL_MAX_MESSAGE_LENGTH, &iLen ) ) )
{
PHB_ITEM pRet;
szError[ 5 ] = ' ';
szError[ 5 ] = ' ';
pRet = O_HB_ITEMPUTSTR( NULL, ( O_HB_CHAR * ) szError );
szRet = hb_strdup( hb_itemGetCPtr( pRet ) );
pRet = O_HB_ITEMPUTSTR( NULL, ( O_HB_CHAR * ) szError );
szRet = hb_strdup( hb_itemGetCPtr( pRet ) );
hb_itemRelease( pRet );
}
else
szRet = hb_strdup( "HY000 Unable to get error message" );
if( pErrCode )
* pErrCode = ( HB_ERRCODE ) iNativeErr;
*pErrCode = ( HB_ERRCODE ) iNativeErr;
return szRet;
}
@@ -201,10 +201,10 @@ static char * odbcGetError( SQLHENV hEnv, SQLHDBC hConn, SQLHSTMT hStmt, HB_ERRC
static HB_ERRCODE odbcConnect( SQLDDCONNECTION * pConnection, PHB_ITEM pItem )
{
SQLHENV hEnv = NULL;
SQLHDBC hConnect = NULL;
char * szError;
HB_ERRCODE errCode;
SQLHENV hEnv = NULL;
SQLHDBC hConnect = NULL;
char * szError;
HB_ERRCODE errCode;
if( SQL_SUCCEEDED( SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv ) ) )
{
@@ -212,11 +212,11 @@ static HB_ERRCODE odbcConnect( SQLDDCONNECTION * pConnection, PHB_ITEM pItem )
if( SQL_SUCCEEDED( SQLAllocHandle( SQL_HANDLE_DBC, hEnv, &hConnect ) ) )
{
void * hConnStr;
SQLTCHAR cBuffer[ 1024 ];
SQLSMALLINT iLen = HB_SIZEOFARRAY( cBuffer );
void * hConnStr;
SQLTCHAR cBuffer[ 1024 ];
SQLSMALLINT iLen = HB_SIZEOFARRAY( cBuffer );
cBuffer[ 0 ] ='\0';
cBuffer[ 0 ] = '\0';
if( SQL_SUCCEEDED( SQLDriverConnect( hConnect,
NULL,
@@ -228,9 +228,9 @@ static HB_ERRCODE odbcConnect( SQLDDCONNECTION * pConnection, PHB_ITEM pItem )
SQL_DRIVER_NOPROMPT ) ) )
{
hb_strfree( hConnStr );
pConnection->pSDDConn = hb_xgrab( sizeof( SDDCONN ) );
( ( SDDCONN * ) pConnection->pSDDConn )->hConn = hConnect;
( ( SDDCONN * ) pConnection->pSDDConn )->hEnv = hEnv;
pConnection->pSDDConn = hb_xgrab( sizeof( SDDCONN ) );
( ( SDDCONN * ) pConnection->pSDDConn )->hConn = hConnect;
( ( SDDCONN * ) pConnection->pSDDConn )->hEnv = hEnv;
return HB_SUCCESS;
}
else
@@ -262,7 +262,7 @@ static HB_ERRCODE odbcConnect( SQLDDCONNECTION * pConnection, PHB_ITEM pItem )
static HB_ERRCODE odbcDisconnect( SQLDDCONNECTION * pConnection )
{
SDDCONN * pSDDConn = ( SDDCONN * ) pConnection->pSDDConn;
SDDCONN * pSDDConn = ( SDDCONN * ) pConnection->pSDDConn;
SQLDisconnect( pSDDConn->hConn );
SQLFreeHandle( SQL_HANDLE_DBC, pSDDConn->hConn );
@@ -274,14 +274,14 @@ static HB_ERRCODE odbcDisconnect( SQLDDCONNECTION * pConnection )
static HB_ERRCODE odbcExecute( SQLDDCONNECTION * pConnection, PHB_ITEM pItem )
{
SDDCONN * pSDDConn = ( SDDCONN * ) pConnection->pSDDConn;
void * hStatement;
SQLHSTMT hStmt;
SQLLEN iCount;
char * szError;
HB_ERRCODE errCode;
SDDCONN * pSDDConn = ( SDDCONN * ) pConnection->pSDDConn;
void * hStatement;
SQLHSTMT hStmt;
SQLLEN iCount;
char * szError;
HB_ERRCODE errCode;
if ( ! SQL_SUCCEEDED( SQLAllocHandle( SQL_HANDLE_STMT, pSDDConn->hConn, &hStmt ) ) )
if( ! SQL_SUCCEEDED( SQLAllocHandle( SQL_HANDLE_STMT, pSDDConn->hConn, &hStmt ) ) )
{
szError = odbcGetError( pSDDConn->hEnv, pSDDConn->hConn, SQL_NULL_HSTMT, &errCode );
hb_errRT_ODBCDD( EG_OPEN, ESQLDD_STMTALLOC, szError, hb_itemGetCPtr( pItem ), errCode );
@@ -289,13 +289,13 @@ static HB_ERRCODE odbcExecute( SQLDDCONNECTION * pConnection, PHB_ITEM pItem )
return HB_FAILURE;
}
if ( SQL_SUCCEEDED( SQLExecDirect( hStmt,
( SQLTCHAR * ) O_HB_ITEMGETSTR( pItem, &hStatement, NULL ),
( SQLINTEGER ) hb_itemGetCLen( pItem ) ) ) )
if( SQL_SUCCEEDED( SQLExecDirect( hStmt,
( SQLTCHAR * ) O_HB_ITEMGETSTR( pItem, &hStatement, NULL ),
( SQLINTEGER ) hb_itemGetCLen( pItem ) ) ) )
{
hb_strfree( hStatement );
if ( SQL_SUCCEEDED( SQLRowCount( hStmt, &iCount ) ) )
if( SQL_SUCCEEDED( SQLRowCount( hStmt, &iCount ) ) )
{
/* TODO: new id */
hb_rddsqlSetError( 0, NULL, hb_itemGetCPtr( pItem ), NULL, ( unsigned long ) iCount );
@@ -316,21 +316,21 @@ static HB_ERRCODE odbcExecute( SQLDDCONNECTION * pConnection, PHB_ITEM pItem )
static HB_ERRCODE odbcOpen( SQLBASEAREAP pArea )
{
SDDCONN * pSDDConn = ( SDDCONN * ) pArea->pConnection->pSDDConn;
SDDDATA * pSDDData;
void * hQuery;
SQLHSTMT hStmt;
SQLSMALLINT iNameLen;
PHB_ITEM pItemEof, pItem;
HB_BOOL bError;
HB_USHORT uiFields, uiIndex;
HB_ERRCODE errCode;
char * szError;
SDDCONN * pSDDConn = ( SDDCONN * ) pArea->pConnection->pSDDConn;
SDDDATA * pSDDData;
void * hQuery;
SQLHSTMT hStmt;
SQLSMALLINT iNameLen;
PHB_ITEM pItemEof, pItem;
HB_BOOL bError;
HB_USHORT uiFields, uiIndex;
HB_ERRCODE errCode;
char * szError;
pArea->pSDDData = memset( hb_xgrab( sizeof( SDDDATA ) ), 0, sizeof( SDDDATA ) );
pSDDData = ( SDDDATA * ) pArea->pSDDData;
pArea->pSDDData = memset( hb_xgrab( sizeof( SDDDATA ) ), 0, sizeof( SDDDATA ) );
pSDDData = ( SDDDATA * ) pArea->pSDDData;
if ( ! SQL_SUCCEEDED( SQLAllocHandle( SQL_HANDLE_STMT, pSDDConn->hConn, &hStmt ) ) )
if( ! SQL_SUCCEEDED( SQLAllocHandle( SQL_HANDLE_STMT, pSDDConn->hConn, &hStmt ) ) )
{
szError = odbcGetError( pSDDConn->hEnv, pSDDConn->hConn, SQL_NULL_HSTMT, &errCode );
hb_errRT_ODBCDD( EG_OPEN, ESQLDD_STMTALLOC, szError, pArea->szQuery, errCode );
@@ -340,9 +340,9 @@ static HB_ERRCODE odbcOpen( SQLBASEAREAP pArea )
pItem = hb_itemPutC( NULL, pArea->szQuery );
if ( ! SQL_SUCCEEDED( SQLExecDirect( hStmt,
( SQLTCHAR * ) O_HB_ITEMGETSTR( pItem, &hQuery, NULL ),
( SQLINTEGER ) hb_itemGetCLen( pItem ) ) ) )
if( ! SQL_SUCCEEDED( SQLExecDirect( hStmt,
( SQLTCHAR * ) O_HB_ITEMGETSTR( pItem, &hQuery, NULL ),
( SQLINTEGER ) hb_itemGetCLen( pItem ) ) ) )
{
hb_strfree( hQuery );
hb_itemRelease( pItem );
@@ -358,7 +358,7 @@ static HB_ERRCODE odbcOpen( SQLBASEAREAP pArea )
hb_itemRelease( pItem );
}
if ( ! SQL_SUCCEEDED( SQLNumResultCols( hStmt, &iNameLen ) ) )
if( ! SQL_SUCCEEDED( SQLNumResultCols( hStmt, &iNameLen ) ) )
{
szError = odbcGetError( pSDDConn->hEnv, pSDDConn->hConn, hStmt, &errCode );
SQLFreeHandle( SQL_HANDLE_STMT, hStmt );
@@ -374,19 +374,19 @@ static HB_ERRCODE odbcOpen( SQLBASEAREAP pArea )
/* HB_TRACE( HB_TR_ALWAYS, ("fieldcount=%d", iNameLen) ); */
errCode = 0;
bError = HB_FALSE;
for ( uiIndex = 0; uiIndex < uiFields; uiIndex++ )
errCode = 0;
bError = HB_FALSE;
for( uiIndex = 0; uiIndex < uiFields; uiIndex++ )
{
DBFIELDINFO pFieldInfo;
PHB_ITEM pName;
PHB_ITEM pName;
SQLTCHAR cName[ 256 ];
SQLULEN uiSize;
SQLTCHAR cName[ 256 ];
SQLULEN uiSize;
SQLSMALLINT iDataType, iDec, iNull;
if ( ! SQL_SUCCEEDED( SQLDescribeCol( hStmt, ( SQLSMALLINT ) uiIndex + 1, ( SQLTCHAR * ) cName, HB_SIZEOFARRAY( cName ), &iNameLen, &iDataType, &uiSize, &iDec, &iNull ) ) )
if( ! SQL_SUCCEEDED( SQLDescribeCol( hStmt, ( SQLSMALLINT ) uiIndex + 1, ( SQLTCHAR * ) cName, HB_SIZEOFARRAY( cName ), &iNameLen, &iDataType, &uiSize, &iDec, &iNull ) ) )
{
hb_itemRelease( pItemEof );
szError = odbcGetError( pSDDConn->hEnv, pSDDConn->hConn, hStmt, NULL );
@@ -396,8 +396,8 @@ static HB_ERRCODE odbcOpen( SQLBASEAREAP pArea )
return HB_FAILURE;
}
pName = O_HB_ITEMPUTSTRLEN( NULL, ( O_HB_CHAR * ) cName, iNameLen );
pFieldInfo.atomName = hb_itemGetCPtr( pName );
pName = O_HB_ITEMPUTSTRLEN( NULL, ( O_HB_CHAR * ) cName, iNameLen );
pFieldInfo.atomName = hb_itemGetCPtr( pName );
/*
We do mapping of many SQL types to one Harbour field type here, so, we need store
@@ -407,10 +407,10 @@ static HB_ERRCODE odbcOpen( SQLBASEAREAP pArea )
if( pField->uiTypeExtended == ( HB_USHORT ) SQL_BIGINT )
or introduce our own unsigned SQL types.
[Mindaugas]
*/
pFieldInfo.uiTypeExtended = ( HB_USHORT ) iDataType;
pFieldInfo.uiLen = ( HB_USHORT ) uiSize;
pFieldInfo.uiDec = iDec;
*/
pFieldInfo.uiTypeExtended = ( HB_USHORT ) iDataType;
pFieldInfo.uiLen = ( HB_USHORT ) uiSize;
pFieldInfo.uiDec = iDec;
/* HB_TRACE( HB_TR_ALWAYS, ("field: name=%s type=%d len=%d dec=%d null=%d", pFieldInfo.atomName, iDataType, uiSize, iDec, iNull ) ); */
@@ -427,8 +427,8 @@ static HB_ERRCODE odbcOpen( SQLBASEAREAP pArea )
case SQL_VARBINARY:
case SQL_LONGVARBINARY:
pFieldInfo.uiType = HB_FT_STRING;
pFieldInfo.uiFlags = HB_FF_BINARY;
pFieldInfo.uiType = HB_FT_STRING;
pFieldInfo.uiFlags = HB_FF_BINARY;
break;
case SQL_TINYINT:
@@ -471,26 +471,26 @@ static HB_ERRCODE odbcOpen( SQLBASEAREAP pArea )
default:
/* HB_TRACE( HB_TR_ALWAYS, ("new sql type=%d", iDataType) ); */
bError = HB_TRUE;
errCode = ( HB_ERRCODE ) iDataType;
bError = HB_TRUE;
errCode = ( HB_ERRCODE ) iDataType;
pFieldInfo.uiType = 0;
pFieldInfo.uiType = HB_FT_STRING;
break;
}
if ( ! bError )
if( ! bError )
{
switch ( pFieldInfo.uiType )
switch( pFieldInfo.uiType )
{
case HB_FT_STRING:
{
char * pStr;
pStr = ( char * ) hb_xgrab( ( HB_SIZE ) pFieldInfo.uiLen + 1 );
pStr = ( char * ) hb_xgrab( ( HB_SIZE ) pFieldInfo.uiLen + 1 );
memset( pStr, ' ', pFieldInfo.uiLen );
pStr[ pFieldInfo.uiLen ] = '\0';
pStr[ pFieldInfo.uiLen ] = '\0';
pItem = hb_itemPutCL( NULL, pStr, pFieldInfo.uiLen );
pItem = hb_itemPutCL( NULL, pStr, pFieldInfo.uiLen );
hb_xfree( pStr );
break;
}
@@ -526,30 +526,30 @@ static HB_ERRCODE odbcOpen( SQLBASEAREAP pArea )
pItem = hb_itemPutTDT( NULL, 0, 0 );
break;
case HB_FT_TIMESTAMP:
case HB_FT_TIMESTAMP:
pItem = hb_itemPutTDT( NULL, 0, 0 );
break;
default:
pItem = hb_itemNew( NULL );
bError = HB_TRUE;
pItem = hb_itemNew( NULL );
bError = HB_TRUE;
break;
}
hb_arraySetForward( pItemEof, uiIndex + 1, pItem );
hb_itemRelease( pItem );
if ( ! bError )
if( ! bError )
bError = ( SELF_ADDFIELD( ( AREAP ) pArea, &pFieldInfo ) == HB_FAILURE );
}
hb_itemRelease( pName );
if ( bError )
if( bError )
break;
}
if ( bError )
if( bError )
{
hb_itemRelease( pItemEof );
SQLFreeHandle( SQL_HANDLE_STMT, hStmt );
@@ -557,18 +557,18 @@ static HB_ERRCODE odbcOpen( SQLBASEAREAP pArea )
return HB_FAILURE;
}
pArea->ulRecCount = 0;
pArea->ulRecMax = SQLDD_ROWSET_INIT;
pArea->ulRecCount = 0;
pArea->ulRecMax = SQLDD_ROWSET_INIT;
pArea->pRow = ( void ** ) hb_xgrab( SQLDD_ROWSET_INIT * sizeof( void * ) );
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 ) );
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;
pArea->pRow[ 0 ] = pItemEof;
pArea->pRowFlags[ 0 ] = SQLDD_FLAG_CACHED;
pSDDData->hStmt = hStmt;
pSDDData->hStmt = hStmt;
return HB_SUCCESS;
}
@@ -591,14 +591,14 @@ static HB_ERRCODE odbcClose( SQLBASEAREAP pArea )
static HB_ERRCODE odbcGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo )
{
SQLHSTMT hStmt = ( ( SDDDATA * ) pArea->pSDDData )->hStmt;
SQLRETURN res;
SQLLEN iLen;
PHB_ITEM pArray, pItem;
LPFIELD pField;
HB_USHORT ui;
SQLHSTMT hStmt = ( ( SDDDATA * ) pArea->pSDDData )->hStmt;
SQLRETURN res;
SQLLEN iLen;
PHB_ITEM pArray, pItem;
LPFIELD pField;
HB_USHORT ui;
while ( ulRecNo > pArea->ulRecCount && ! pArea->fFetched )
while( ulRecNo > pArea->ulRecCount && ! pArea->fFetched )
{
if( ! SQL_SUCCEEDED( SQLFetch( hStmt ) ) )
{
@@ -607,20 +607,20 @@ static HB_ERRCODE odbcGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo )
}
pArray = hb_itemArrayNew( pArea->area.uiFieldCount );
for ( ui = 1; ui <= pArea->area.uiFieldCount; ui++ )
for( ui = 1; ui <= pArea->area.uiFieldCount; ui++ )
{
iLen = SQL_NULL_DATA;
pItem = NULL;
res = 0;
pField = pArea->area.lpFields + ui - 1;
iLen = SQL_NULL_DATA;
pItem = NULL;
res = 0;
pField = pArea->area.lpFields + ui - 1;
switch( pField->uiType )
{
case HB_FT_STRING:
{
SQLSMALLINT iTargetType;
char buffer[ 2 ];
char buffer[ 2 ];
iLen = 0;
iLen = 0;
#if defined( UNICODE )
iTargetType = SQL_C_WCHAR;
@@ -636,7 +636,7 @@ static HB_ERRCODE odbcGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo )
if( SQL_SUCCEEDED( res = SQLGetData( hStmt, ui, iTargetType, val, iLen + sizeof( O_HB_CHAR ), &iLen ) ) )
{
#if defined( UNICODE )
iLen /= 2;
iLen /= 2;
#endif
pItem = O_HB_ITEMPUTSTRLEN( NULL, ( O_HB_CHAR * ) val, ( HB_SIZE ) iLen );
}
@@ -647,7 +647,6 @@ static HB_ERRCODE odbcGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo )
}
case HB_FT_INTEGER:
{
if( pField->uiTypeExtended == ( HB_USHORT ) SQL_BIGINT )
{
HB_I64 val = 0;
@@ -665,7 +664,6 @@ static HB_ERRCODE odbcGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo )
}
}
break;
}
case HB_FT_LONG:
if( pField->uiDec == 0 )
@@ -755,29 +753,29 @@ 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 ) );
pArea->ulRecMax += SQLDD_ROWSET_RESIZE;
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 ) );
pArea->ulRecMax += SQLDD_ROWSET_RESIZE;
}
pArea->ulRecCount++;
pArea->pRow[ pArea->ulRecCount ] = pArray;
pArea->pRowFlags[ pArea->ulRecCount ] = SQLDD_FLAG_CACHED;
pArea->pRow[ pArea->ulRecCount ] = pArray;
pArea->pRowFlags[ pArea->ulRecCount ] = SQLDD_FLAG_CACHED;
}
if ( ulRecNo == 0 || ulRecNo > pArea->ulRecCount )
if( ulRecNo == 0 || ulRecNo > pArea->ulRecCount )
{
pArea->pRecord = pArea->pRow[ 0 ];
pArea->bRecordFlags = pArea->pRowFlags[ 0 ];
pArea->fPositioned = HB_FALSE;
pArea->pRecord = pArea->pRow[ 0 ];
pArea->bRecordFlags = pArea->pRowFlags[ 0 ];
pArea->fPositioned = HB_FALSE;
}
else
{
pArea->pRecord = pArea->pRow[ ulRecNo ];
pArea->bRecordFlags = pArea->pRowFlags[ ulRecNo ];
pArea->fPositioned = HB_TRUE;
pArea->pRecord = pArea->pRow[ ulRecNo ];
pArea->bRecordFlags = pArea->pRowFlags[ ulRecNo ];
pArea->fPositioned = HB_TRUE;
}
return HB_SUCCESS;
}

View File

@@ -58,31 +58,31 @@
#include "libpq-fe.h"
#define BOOLOID 16
#define BYTEAOID 17
#define CHAROID 18
#define NAMEOID 19
#define INT8OID 20
#define INT2OID 21
#define INT4OID 23
#define TEXTOID 25
#define OIDOID 26
#define CIDROID 650
#define FLOAT4OID 700
#define FLOAT8OID 701
#define CASHOID 790
#define MACADDROID 829
#define INETOID 869
#define BPCHAROID 1042
#define VARCHAROID 1043
#define DATEOID 1082
#define TIMEOID 1083
#define TIMESTAMPOID 1114
#define TIMESTAMPTZOID 1184
#define TIMETZOID 1266
#define BITOID 1560
#define VARBITOID 1562
#define NUMERICOID 1700
#define BOOLOID 16
#define BYTEAOID 17
#define CHAROID 18
#define NAMEOID 19
#define INT8OID 20
#define INT2OID 21
#define INT4OID 23
#define TEXTOID 25
#define OIDOID 26
#define CIDROID 650
#define FLOAT4OID 700
#define FLOAT8OID 701
#define CASHOID 790
#define MACADDROID 829
#define INETOID 869
#define BPCHAROID 1042
#define VARCHAROID 1043
#define DATEOID 1082
#define TIMEOID 1083
#define TIMESTAMPOID 1114
#define TIMESTAMPTZOID 1184
#define TIMETZOID 1266
#define BITOID 1560
#define VARBITOID 1562
#define NUMERICOID 1700
typedef struct
{
@@ -106,14 +106,14 @@ static HB_ERRCODE pgsqlGetValue( SQLBASEAREAP pArea, HB_USHORT uiIndex, PHB_ITEM
static SDDNODE pgsqldd = {
NULL,
"POSTGRESQL",
( SDDFUNC_CONNECT ) pgsqlConnect,
( SDDFUNC_CONNECT ) pgsqlConnect,
( SDDFUNC_DISCONNECT ) pgsqlDisconnect,
( SDDFUNC_EXECUTE ) pgsqlExecute,
( SDDFUNC_OPEN ) pgsqlOpen,
( SDDFUNC_CLOSE ) pgsqlClose,
( SDDFUNC_GOTO ) NULL,
( SDDFUNC_GETVALUE ) pgsqlGetValue,
( SDDFUNC_GETVARLEN ) NULL
( SDDFUNC_EXECUTE ) pgsqlExecute,
( SDDFUNC_OPEN ) pgsqlOpen,
( SDDFUNC_CLOSE ) pgsqlClose,
( SDDFUNC_GOTO ) NULL,
( SDDFUNC_GETVALUE ) pgsqlGetValue,
( SDDFUNC_GETVARLEN ) NULL
};
@@ -121,7 +121,7 @@ static void hb_pgsqldd_init( void * cargo )
{
HB_SYMBOL_UNUSED( cargo );
if ( ! hb_sddRegister( & pgsqldd ) )
if( ! hb_sddRegister( &pgsqldd ) )
{
hb_errInternal( HB_EI_RDDINVALID, NULL, NULL, NULL );
}
@@ -131,19 +131,19 @@ static void hb_pgsqldd_init( void * cargo )
HB_FUNC_EXTERN( SQLBASE ); HB_FUNC( SDDPG ) { HB_FUNC_EXEC( SQLBASE ); }
HB_INIT_SYMBOLS_BEGIN( sddpostgre__InitSymbols )
{ "SDDPG", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( SDDPG )}, NULL },
{ "SDDPG", { HB_FS_PUBLIC | HB_FS_LOCAL }, { HB_FUNCNAME( SDDPG ) }, NULL },
HB_INIT_SYMBOLS_END( sddpostgre__InitSymbols )
HB_CALL_ON_STARTUP_BEGIN( _hb_sddpostgre_init_ )
hb_vmAtInit( hb_pgsqldd_init, NULL );
hb_vmAtInit( hb_pgsqldd_init, NULL );
HB_CALL_ON_STARTUP_END( _hb_sddpostgre_init_ )
#if defined( HB_PRAGMA_STARTUP )
#pragma startup sddpostgre__InitSymbols
#pragma startup _hb_sddpostgre_init_
#elif defined( HB_DATASEG_STARTUP )
#define HB_DATASEG_BODY HB_DATASEG_FUNC( sddpostgre__InitSymbols ) \
HB_DATASEG_FUNC( _hb_sddpostgre_init_ )
#define HB_DATASEG_BODY HB_DATASEG_FUNC( sddpostgre__InitSymbols ) \
HB_DATASEG_FUNC( _hb_sddpostgre_init_ )
#include "hbiniseg.h"
#endif
@@ -151,10 +151,10 @@ HB_CALL_ON_STARTUP_END( _hb_sddpostgre_init_ )
/* ===================================================================================== */
static HB_USHORT hb_errRT_PostgreSQLDD( HB_ERRCODE errGenCode, HB_ERRCODE errSubCode, const char * szDescription, const char * szOperation, HB_ERRCODE errOsCode )
{
HB_USHORT uiAction;
PHB_ITEM pError;
HB_USHORT uiAction;
PHB_ITEM pError;
pError = hb_errRT_New( ES_ERROR, "SDDPG", errGenCode, errSubCode, szDescription, szOperation, errOsCode, EF_NONE );
pError = hb_errRT_New( ES_ERROR, "SDDPG", errGenCode, errSubCode, szDescription, szOperation, errOsCode, EF_NONE );
uiAction = hb_errLaunch( pError );
hb_itemRelease( pError );
return uiAction;
@@ -165,25 +165,25 @@ static HB_USHORT hb_errRT_PostgreSQLDD( HB_ERRCODE errGenCode, HB_ERRCODE errSub
static HB_ERRCODE pgsqlConnect( SQLDDCONNECTION * pConnection, PHB_ITEM pItem )
{
PGconn * pConn;
ConnStatusType status;
PGconn * pConn;
ConnStatusType status;
pConn = PQsetdbLogin( hb_arrayGetCPtr( pItem, 2 ), NULL, NULL, NULL, hb_arrayGetCPtr( pItem, 5 ), hb_arrayGetCPtr( pItem, 3 ), hb_arrayGetCPtr( pItem, 4 ) );
if ( ! pConn ) /* Low memory, etc */
if( ! pConn ) /* Low memory, etc */
{
/* TODO: error */
return HB_FAILURE;
}
status = PQstatus( pConn );
if ( status != CONNECTION_OK )
if( status != CONNECTION_OK )
{
/* TODO: error */
PQfinish( pConn );
return HB_FAILURE;
}
pConnection->pSDDConn = hb_xgrab( sizeof( SDDCONN ) );
( ( SDDCONN * ) pConnection->pSDDConn )->pConn = pConn;
pConnection->pSDDConn = hb_xgrab( sizeof( SDDCONN ) );
( ( SDDCONN * ) pConnection->pSDDConn )->pConn = pConn;
return HB_SUCCESS;
}
@@ -205,21 +205,21 @@ static HB_ERRCODE pgsqlExecute( SQLDDCONNECTION * pConnection, PHB_ITEM pItem )
unsigned long ulAffectedRows;
pResult = PQexec( pConn, hb_itemGetCPtr( pItem ) );
if ( ! pResult )
if( ! pResult )
{
hb_rddsqlSetError( 1, PQerrorMessage( pConn ), hb_itemGetCPtr( pItem ), NULL, 0 );
return HB_FAILURE;
}
status = PQresultStatus( pResult );
if ( status != PGRES_TUPLES_OK && status != PGRES_COMMAND_OK )
if( status != PGRES_TUPLES_OK && status != PGRES_COMMAND_OK )
{
hb_rddsqlSetError( status, PQresultErrorMessage( pResult ), hb_itemGetCPtr( pItem ), NULL, 0 );
return HB_FAILURE;
}
iTuples = PQntuples( pResult );
if ( iTuples > 0 )
if( iTuples > 0 )
ulAffectedRows = ( unsigned long ) iTuples;
else
ulAffectedRows = ( unsigned long ) atol( PQcmdTuples( pResult ) );
@@ -232,27 +232,27 @@ static HB_ERRCODE pgsqlExecute( SQLDDCONNECTION * pConnection, PHB_ITEM pItem )
static HB_ERRCODE pgsqlOpen( SQLBASEAREAP pArea )
{
PGconn * pConn = ( ( SDDCONN * ) pArea->pConnection->pSDDConn )->pConn;
SDDDATA * pSDDData;
PGresult * pResult;
ExecStatusType status;
PHB_ITEM pItemEof, pItem;
HB_USHORT uiFields, uiCount;
HB_BOOL bError;
DBFIELDINFO pFieldInfo;
PGconn * pConn = ( ( SDDCONN * ) pArea->pConnection->pSDDConn )->pConn;
SDDDATA * pSDDData;
PGresult * pResult;
ExecStatusType status;
PHB_ITEM pItemEof, pItem;
HB_USHORT uiFields, uiCount;
HB_BOOL bError;
DBFIELDINFO pFieldInfo;
pArea->pSDDData = memset( hb_xgrab( sizeof( SDDDATA ) ), 0, sizeof( SDDDATA ) );
pSDDData = ( SDDDATA * ) pArea->pSDDData;
pArea->pSDDData = memset( hb_xgrab( sizeof( SDDDATA ) ), 0, sizeof( SDDDATA ) );
pSDDData = ( SDDDATA * ) pArea->pSDDData;
pResult = PQexec( pConn, pArea->szQuery );
if ( ! pResult )
pResult = PQexec( pConn, pArea->szQuery );
if( ! pResult )
{
hb_errRT_PostgreSQLDD( EG_OPEN, ESQLDD_LOWMEMORY, "Query failed", NULL, 0 ); /* Low memory, etc */
return HB_FAILURE;
}
status = PQresultStatus( pResult );
if ( status != PGRES_TUPLES_OK && status != PGRES_COMMAND_OK )
if( status != PGRES_TUPLES_OK && status != PGRES_COMMAND_OK )
{
hb_errRT_PostgreSQLDD( EG_OPEN, ESQLDD_INVALIDQUERY, PQresultErrorMessage( pResult ), pArea->szQuery, ( HB_ERRCODE ) status );
PQclear( pResult );
@@ -261,141 +261,141 @@ static HB_ERRCODE pgsqlOpen( SQLBASEAREAP pArea )
pSDDData->pResult = pResult;
uiFields = ( HB_USHORT ) PQnfields( pResult );
uiFields = ( HB_USHORT ) PQnfields( pResult );
SELF_SETFIELDEXTENT( ( AREAP ) pArea, uiFields );
pItemEof = hb_itemArrayNew( uiFields );
pItem = hb_itemNew( NULL );
pItemEof = hb_itemArrayNew( uiFields );
pItem = hb_itemNew( NULL );
bError = HB_FALSE;
for ( uiCount = 0; uiCount < uiFields; uiCount++ )
bError = HB_FALSE;
for( uiCount = 0; uiCount < uiFields; uiCount++ )
{
pFieldInfo.atomName = PQfname( pResult, ( int ) uiCount );
pFieldInfo.uiDec = 0;
pFieldInfo.atomName = PQfname( pResult, ( int ) uiCount );
pFieldInfo.uiDec = 0;
switch( PQftype( pResult, ( int ) uiCount ) )
{
case BPCHAROID:
case VARCHAROID:
pFieldInfo.uiType = HB_FT_STRING;
pFieldInfo.uiLen = ( HB_USHORT ) PQfmod( pResult, uiCount ) - 4;
pFieldInfo.uiLen = ( HB_USHORT ) PQfmod( pResult, uiCount ) - 4;
break;
case TEXTOID:
pFieldInfo.uiType = HB_FT_MEMO;
pFieldInfo.uiLen = 10;
pFieldInfo.uiLen = 10;
break;
case NUMERICOID:
pFieldInfo.uiType = HB_FT_DOUBLE;
pFieldInfo.uiLen = ( PQfmod( pResult, uiCount ) - 4 ) >> 16;
pFieldInfo.uiDec = ( PQfmod( pResult, uiCount ) - 4 ) & 0xFFFF;
pFieldInfo.uiLen = ( PQfmod( pResult, uiCount ) - 4 ) >> 16;
pFieldInfo.uiDec = ( PQfmod( pResult, uiCount ) - 4 ) & 0xFFFF;
break;
case INT2OID:
pFieldInfo.uiType = HB_FT_INTEGER;
pFieldInfo.uiLen = 6;
pFieldInfo.uiLen = 6;
break;
case INT4OID:
pFieldInfo.uiType = HB_FT_INTEGER;
pFieldInfo.uiLen = 11;
pFieldInfo.uiLen = 11;
break;
case INT8OID:
case OIDOID:
pFieldInfo.uiType = HB_FT_LONG;
pFieldInfo.uiLen = 20;
pFieldInfo.uiLen = 20;
break;
case FLOAT4OID:
case FLOAT8OID:
case CASHOID: /* TODO: ??? */
pFieldInfo.uiType = HB_FT_DOUBLE;
pFieldInfo.uiLen = 16;
pFieldInfo.uiDec = 2; /* TODO: hb_set.SET_DECIMALS ??? */
pFieldInfo.uiLen = 16;
pFieldInfo.uiDec = 2; /* TODO: hb_set.SET_DECIMALS ??? */
break;
case BOOLOID:
pFieldInfo.uiType = HB_FT_LOGICAL;
pFieldInfo.uiLen = 1;
pFieldInfo.uiLen = 1;
break;
case DATEOID:
pFieldInfo.uiType = HB_FT_DATE;
pFieldInfo.uiLen = 8;
pFieldInfo.uiLen = 8;
break;
case INETOID:
pFieldInfo.uiType = HB_FT_STRING;
pFieldInfo.uiLen = 29;
pFieldInfo.uiLen = 29;
break;
case CIDROID:
pFieldInfo.uiType = HB_FT_STRING;
pFieldInfo.uiLen = 32;
pFieldInfo.uiLen = 32;
break;
case MACADDROID:
pFieldInfo.uiType = HB_FT_STRING;
pFieldInfo.uiLen = 17;
pFieldInfo.uiLen = 17;
break;
case BITOID:
case VARBITOID:
pFieldInfo.uiType = HB_FT_STRING;
pFieldInfo.uiLen = ( HB_USHORT ) PQfsize( pResult, uiCount );
pFieldInfo.uiLen = ( HB_USHORT ) PQfsize( pResult, uiCount );
break;
case TIMEOID:
pFieldInfo.uiType = HB_FT_STRING;
pFieldInfo.uiLen = 12;
pFieldInfo.uiLen = 12;
break;
case TIMESTAMPOID:
pFieldInfo.uiType = HB_FT_STRING;
pFieldInfo.uiLen = 23;
pFieldInfo.uiLen = 23;
break;
case TIMETZOID:
pFieldInfo.uiType = HB_FT_STRING;
pFieldInfo.uiLen = 15;
pFieldInfo.uiLen = 15;
break;
case TIMESTAMPTZOID:
pFieldInfo.uiType = HB_FT_STRING;
pFieldInfo.uiLen = 26;
pFieldInfo.uiLen = 26;
break;
case NAMEOID:
pFieldInfo.uiType = HB_FT_STRING;
pFieldInfo.uiLen = 63;
pFieldInfo.uiLen = 63;
break;
case BYTEAOID:
pFieldInfo.uiType = HB_FT_STRING;
pFieldInfo.uiLen = 0;
pFieldInfo.uiLen = 0;
break;
default:
pFieldInfo.uiType = 0;
pFieldInfo.uiLen = 0;
bError = HB_TRUE;
pFieldInfo.uiLen = 0;
bError = HB_TRUE;
break;
}
/* printf( "field:%s \ttype:%d \tsize:%d \tformat:%d \tmod:%d err=%d\n", pFieldInfo.atomName, PQftype( pResult, ( int ) uiCount ), PQfsize( pResult, uiCount ), PQfformat( pResult, uiCount ) , PQfmod( pResult, uiCount ), bError ); */
if ( ! bError )
if( ! bError )
{
switch ( pFieldInfo.uiType )
switch( pFieldInfo.uiType )
{
case HB_FT_STRING:
{
char* pStr;
char * pStr;
pStr = ( char * ) hb_xgrab( pFieldInfo.uiLen + 1 );
pStr = ( char * ) hb_xgrab( pFieldInfo.uiLen + 1 );
memset( pStr, ' ', pFieldInfo.uiLen );
pStr[ pFieldInfo.uiLen ] = '\0';
pStr[ pFieldInfo.uiLen ] = '\0';
hb_itemPutCL( pItem, pStr, pFieldInfo.uiLen );
hb_xfree( pStr );
@@ -439,33 +439,33 @@ static HB_ERRCODE pgsqlOpen( SQLBASEAREAP pArea )
pFieldInfo.uiType = HB_IT_LONG;
} */
if ( ! bError )
if( ! bError )
bError = ( SELF_ADDFIELD( ( AREAP ) pArea, &pFieldInfo ) == HB_FAILURE );
}
if ( bError )
if( bError )
break;
}
hb_itemRelease( pItem );
if ( bError )
if( bError )
{
hb_itemClear( pItemEof );
hb_itemRelease( pItemEof );
hb_errRT_PostgreSQLDD( EG_CORRUPTION, ESQLDD_INVALIDFIELD, "Invalid field type", pArea->szQuery, 0 );
return HB_FAILURE;
hb_itemClear( pItemEof );
hb_itemRelease( pItemEof );
hb_errRT_PostgreSQLDD( EG_CORRUPTION, ESQLDD_INVALIDFIELD, "Invalid field type", pArea->szQuery, 0 );
return HB_FAILURE;
}
pArea->ulRecCount = ( HB_ULONG ) PQntuples( pResult );
pArea->ulRecCount = ( HB_ULONG ) PQntuples( pResult );
pArea->pRow = ( void ** ) hb_xgrab( ( pArea->ulRecCount + 1 ) * sizeof( void * ) );
pArea->pRowFlags = ( HB_BYTE * ) hb_xgrab( ( pArea->ulRecCount + 1 ) * sizeof( HB_BYTE ) );
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->pRow = pItemEof;
pArea->pRowFlags[ 0 ] = SQLDD_FLAG_CACHED;
pArea->fFetched = HB_TRUE;
*pArea->pRow = pItemEof;
pArea->pRowFlags[ 0 ] = SQLDD_FLAG_CACHED;
pArea->fFetched = HB_TRUE;
return HB_SUCCESS;
}
@@ -477,7 +477,7 @@ static HB_ERRCODE pgsqlClose( SQLBASEAREAP pArea )
if( pSDDData )
{
if ( pSDDData->pResult )
if( pSDDData->pResult )
PQclear( pSDDData->pResult );
hb_xfree( pSDDData );
@@ -489,22 +489,22 @@ static HB_ERRCODE pgsqlClose( SQLBASEAREAP pArea )
static HB_ERRCODE pgsqlGetValue( SQLBASEAREAP pArea, HB_USHORT uiIndex, PHB_ITEM pItem )
{
SDDDATA * pSDDData = ( SDDDATA * ) pArea->pSDDData;
LPFIELD pField;
char* pValue;
HB_BOOL bError;
PHB_ITEM pError;
HB_SIZE ulLen;
SDDDATA * pSDDData = ( SDDDATA * ) pArea->pSDDData;
LPFIELD pField;
char * pValue;
HB_BOOL bError;
PHB_ITEM pError;
HB_SIZE ulLen;
bError = HB_FALSE;
bError = HB_FALSE;
uiIndex--;
pField = pArea->area.lpFields + uiIndex;
pField = pArea->area.lpFields + uiIndex;
if ( PQgetisnull( pSDDData->pResult, pArea->ulRecNo - 1, uiIndex ) )
if( PQgetisnull( pSDDData->pResult, pArea->ulRecNo - 1, uiIndex ) )
return HB_SUCCESS;
pValue = PQgetvalue( pSDDData->pResult, pArea->ulRecNo - 1, uiIndex );
ulLen = ( HB_SIZE ) PQgetlength( pSDDData->pResult, pArea->ulRecNo - 1, uiIndex );
pValue = PQgetvalue( pSDDData->pResult, pArea->ulRecNo - 1, uiIndex );
ulLen = ( HB_SIZE ) PQgetlength( pSDDData->pResult, pArea->ulRecNo - 1, uiIndex );
/* printf( "fieldget recno:%d index:%d value:%s len:%d\n", pArea->ulRecNo, uiIndex, pValue, ulLen ); */
@@ -522,16 +522,16 @@ static HB_ERRCODE pgsqlGetValue( SQLBASEAREAP pArea, HB_USHORT uiIndex, PHB_ITEM
case HB_FT_INTEGER:
case HB_FT_LONG:
case HB_FT_DOUBLE:
if ( pField->uiDec )
if( pField->uiDec )
hb_itemPutNDLen( pItem, atof( pValue ),
( int ) pField->uiLen - ( ( int ) pField->uiDec + 1 ),
( int ) pField->uiDec );
else
if ( pField->uiLen > 9 )
hb_itemPutNDLen( pItem, atof( pValue ),
( int ) pField->uiLen, ( int ) pField->uiDec );
else
hb_itemPutNLLen( pItem, atol( pValue ), ( int ) pField->uiLen );
if( pField->uiLen > 9 )
hb_itemPutNDLen( pItem, atof( pValue ),
( int ) pField->uiLen, ( int ) pField->uiDec );
else
hb_itemPutNLLen( pItem, atol( pValue ), ( int ) pField->uiLen );
break;
case HB_FT_LOGICAL:
@@ -541,7 +541,7 @@ static HB_ERRCODE pgsqlGetValue( SQLBASEAREAP pArea, HB_USHORT uiIndex, PHB_ITEM
case HB_FT_DATE:
{
char szDate[ 9 ];
char szDate[ 9 ];
szDate[ 0 ] = pValue[ 0 ];
szDate[ 1 ] = pValue[ 1 ];
@@ -561,7 +561,7 @@ static HB_ERRCODE pgsqlGetValue( SQLBASEAREAP pArea, HB_USHORT uiIndex, PHB_ITEM
break;
}
if ( bError )
if( bError )
{
pError = hb_errNew();
hb_errPutGenCode( pError, EG_DATATYPE );

View File

@@ -26,12 +26,12 @@
static int _checkDelim( int _nDelim );
static int _checkDelimChar( const char * _cDelim );
static const char * aDelim[] =
static const char * s_aDelim[] =
{
"SDENTX", "SDEFOX", "SDENSX", "SDENSX_DBT", "COMMA_DELIM", "SDF_FILE",
"TAB_DELIM", "OEMNTX", "OEMFOX", "OEMNSX"
};
static int nDelim[] = { 1, 2, 3, 4, 21, 22, 23, 31, 32, 33 };
static int s_nDelim[] = { 1, 2, 3, 4, 21, 22, 23, 31, 32, 33 };
/* 2003.05.08 added parameter for work area to work on */
HB_FUNC( SX_APPEND )
@@ -219,8 +219,8 @@ static int _checkDelim( int _nDelim )
for( ui = 0; ui < 10; ui++ )
{
if( _nDelim == nDelim[ ui ] )
return nDelim[ ui ];
if( _nDelim == s_nDelim[ ui ] )
return s_nDelim[ ui ];
}
return -1;
@@ -238,9 +238,9 @@ static int _checkDelimChar( const char * _cDelim )
for( ui = 0; ui < 10; ui++ )
{
if( strcmp( szTmp, aDelim[ ui ] ) == 0 )
if( strcmp( szTmp, s_aDelim[ ui ] ) == 0 )
{
iResult = nDelim[ ui ];
iResult = s_nDelim[ ui ];
break;
}
}

View File

@@ -24,7 +24,7 @@
*/
#include "sxapi.h"
static HB_BOOL bSDF = HB_FALSE;
static HB_BOOL s_bSDF = HB_FALSE;
static void _sx_GetLine( PHB_ITEM pArray, FILE * hFileHandle, char * cDelimiter )
{
@@ -46,7 +46,7 @@ static void _sx_GetLine( PHB_ITEM pArray, FILE * hFileHandle, char * cDelimiter
if( ! ( strcmp( cFieldType, "M" ) == 0 ) )
{
cTemp = ( char * ) sx_GetVariant( ( PBYTE ) cFieldName );
if( ! bSDF )
if( ! s_bSDF )
cTemp = _sx_rtrim( cTemp );
else
{
@@ -76,7 +76,7 @@ static void _sx_GetLine( PHB_ITEM pArray, FILE * hFileHandle, char * cDelimiter
if( ! ( strcmp( cFieldType, "M" ) == 0 ) )
{
cTemp = ( char * ) sx_GetVariant( ( PBYTE ) cFieldName );
if( ! bSDF )
if( ! s_bSDF )
cTemp = _sx_rtrim( cTemp );
else
{
@@ -140,9 +140,9 @@ HB_FUNC( __SX_DBDELIM ) /* (file, delim, afields, bfor, bwhile, nnext, nrec, l
cDelimiter = " ";
if( strcmp( cDelimiter, "SDF" ) == 0 )
bSDF = HB_TRUE;
s_bSDF = HB_TRUE;
else
bSDF = HB_FALSE;
s_bSDF = HB_FALSE;
/* CodeBlock passed ? */
if( ! HB_ISNIL( 4 ) && ! HB_ISBLOCK( 4 ) )

View File

@@ -25,19 +25,19 @@
#include "sxapi.h"
/* Modified To return .T. if Century is set ON or .F. is Century is set OFF. */
static HB_BOOL bCenturyIsOn = HB_FALSE;
static char * aFormat[] =
static HB_BOOL s_bCenturyIsOn = HB_FALSE;
static char * s_aFormat[] =
{
"AMERICAN", "ANSI", "BRITISH", "FRENCH", "GERMAN", "ITALIAN", "SPANISH",
"MM/DD/YY", "YY.MM.DD", "DD/MM/YY", "DD/MM/YY", "DD.MM.YY", "DD-MM-YY",
"DD-MM-YY", "MM/DD/YYYY", "YYYY.MM.DD", "DD/MM/YYYY", "DD/MM/YYYY",
"DD.MM.YYYY", "DD-MM-YYYY", "DD-MM-YYYY"
};
static HB_BOOL lDeletedIsOn = HB_FALSE;
static int iBaseYear = 0;
static HB_BOOL bSetExactIsOn = HB_FALSE;
static HB_BOOL lSoftSeekIsOn;
static const char * sxApiRDD[] =
static HB_BOOL s_lDeletedIsOn = HB_FALSE;
static int s_iBaseYear = 0;
static HB_BOOL s_bSetExactIsOn = HB_FALSE;
static HB_BOOL s_lSoftSeekIsOn;
static const char * s_sxApiRDD[] =
{
"SDENTX", "SDEFOX", "SDENSX", "SDENSXDBT", "DBFNTX", "DBFIDX", "DBFNSX",
"DBFNSXDBT"
@@ -67,12 +67,12 @@ HB_FUNC( SX_SETSOFTSEEK )
PHB_ITEM pItem;
WORD wSoftSeek = 0;
lSoftSeekIsOn = hb_setGetSoftSeek();
s_lSoftSeekIsOn = hb_setGetSoftSeek();
hb_retl( lSoftSeekIsOn );
hb_retl( s_lSoftSeekIsOn );
if( HB_ISLOG( 1 ) )
lSoftSeekIsOn = hb_parl( 1 );
s_lSoftSeekIsOn = hb_parl( 1 );
else if( HB_ISCHAR( 1 ) )
{
HB_ISIZ iLen = hb_parclen( 1 ) + 1;
@@ -80,15 +80,15 @@ HB_FUNC( SX_SETSOFTSEEK )
hb_snprintf( szTmp, iLen, "%s", hb_parc( 1 ) );
lSoftSeekIsOn = ( strcmp( _sx_upper( szTmp ), "ON" ) == 0 ) ? HB_TRUE : HB_FALSE;
s_lSoftSeekIsOn = ( strcmp( _sx_upper( szTmp ), "ON" ) == 0 ) ? HB_TRUE : HB_FALSE;
if( lSoftSeekIsOn )
if( s_lSoftSeekIsOn )
wSoftSeek = 1;
hb_xfree( szTmp );
}
pItem = hb_itemPutL( NULL, lSoftSeekIsOn );
pItem = hb_itemPutL( NULL, s_lSoftSeekIsOn );
hb_setSetItem( HB_SET_SOFTSEEK, pItem );
hb_itemRelease( pItem );
@@ -121,12 +121,12 @@ HB_FUNC( SX_SETEXACT )
PHB_ITEM pItem;
WORD wSetExact = 0;
bSetExactIsOn = hb_setGetExact();
s_bSetExactIsOn = hb_setGetExact();
hb_retl( bSetExactIsOn );
hb_retl( s_bSetExactIsOn );
if( HB_ISLOG( 1 ) )
bSetExactIsOn = hb_parl( 1 );
s_bSetExactIsOn = hb_parl( 1 );
else if( HB_ISCHAR( 1 ) )
{
HB_ISIZ iLen = hb_parclen( 1 ) + 1;
@@ -134,9 +134,9 @@ HB_FUNC( SX_SETEXACT )
hb_snprintf( szTmp, iLen, "%s", hb_parc( 1 ) );
bSetExactIsOn = ( strcmp( _sx_upper( szTmp ), "ON" ) == 0 ) ? HB_TRUE : HB_FALSE;
s_bSetExactIsOn = ( strcmp( _sx_upper( szTmp ), "ON" ) == 0 ) ? HB_TRUE : HB_FALSE;
if( bSetExactIsOn )
if( s_bSetExactIsOn )
wSetExact = 1;
hb_xfree( szTmp );
@@ -144,7 +144,7 @@ HB_FUNC( SX_SETEXACT )
sx_SetExact( wSetExact );
pItem = hb_itemPutL( NULL, bSetExactIsOn );
pItem = hb_itemPutL( NULL, s_bSetExactIsOn );
hb_setSetItem( HB_SET_EXACT, pItem );
hb_itemRelease( pItem );
@@ -176,18 +176,19 @@ HB_FUNC( SX_SETEPOCH )
WORD iEpoch;
PHB_ITEM pItem;
iBaseYear = hb_setGetEpoch();
s_iBaseYear = hb_setGetEpoch();
hb_retni( iBaseYear );
hb_retni( s_iBaseYear );
if( HB_ISNUM( 1 ) )
{
iEpoch = ( WORD ) hb_parni( 1 );
iEpoch = ( WORD ) hb_parni( 1 );
if( iEpoch == 0 )
hb_errRT_BASE( EG_ARG, 2020, NULL, "SX_SETEPOCH", 1, hb_paramError( 1 ) );
iBaseYear = iEpoch;
pItem = hb_itemPutNI( NULL, iEpoch );
s_iBaseYear = iEpoch;
pItem = hb_itemPutNI( NULL, iEpoch );
hb_setSetItem( HB_SET_EPOCH, pItem );
hb_itemRelease( pItem );
@@ -218,12 +219,12 @@ HB_FUNC( SX_SETDELETED )
PHB_ITEM pItem;
WORD wDeleted = 0;
lDeletedIsOn = hb_setGetDeleted();
s_lDeletedIsOn = hb_setGetDeleted();
hb_retl( lDeletedIsOn );
hb_retl( s_lDeletedIsOn );
if( HB_ISLOG( 1 ) )
lDeletedIsOn = hb_parl( 1 );
s_lDeletedIsOn = hb_parl( 1 );
else if( HB_ISCHAR( 1 ) )
{
HB_ISIZ iLen = hb_parclen( 1 ) + 1;
@@ -231,15 +232,15 @@ HB_FUNC( SX_SETDELETED )
hb_snprintf( szTmp, iLen, "%s", hb_parc( 1 ) );
lDeletedIsOn = ( strcmp( _sx_upper( szTmp ), "ON" ) == 0 ) ? HB_TRUE : HB_FALSE;
s_lDeletedIsOn = ( strcmp( _sx_upper( szTmp ), "ON" ) == 0 ) ? HB_TRUE : HB_FALSE;
if( lDeletedIsOn )
if( s_lDeletedIsOn )
wDeleted = 1;
hb_xfree( szTmp );
}
pItem = hb_itemPutL( NULL, lDeletedIsOn );
pItem = hb_itemPutL( NULL, s_lDeletedIsOn );
hb_setSetItem( HB_SET_DELETED, pItem );
hb_itemRelease( pItem );
@@ -267,7 +268,7 @@ static int _sx_CheckFormat( char * cFormat )
for( i = 0; i < 20; i++ )
{
if( strcmp( aFormat[ i ], cFormat ) == 0 )
if( strcmp( s_aFormat[ i ], cFormat ) == 0 )
return i;
}
@@ -367,19 +368,19 @@ HB_FUNC( SX_SETDATEFORMAT )
if( iChecked < 7 )
{
if( _sx_SetCentury() )
szDateFormat = aFormat[ iChecked + 14 ];
szDateFormat = s_aFormat[ iChecked + 14 ];
else
szDateFormat = aFormat[ iChecked + 7 ];
szDateFormat = s_aFormat[ iChecked + 7 ];
}
else
szDateFormat = aFormat[ iChecked ];
szDateFormat = s_aFormat[ iChecked ];
__hb_setDateFormat( szDateFormat );
}
HB_BOOL _sx_SetCentury()
{
return bCenturyIsOn;
return s_bCenturyIsOn;
}
/*
@@ -399,10 +400,10 @@ HB_FUNC( SX_SETCENTURY )
{
WORD wCentury = 0;
hb_retl( bCenturyIsOn );
hb_retl( s_bCenturyIsOn );
if( HB_ISLOG( 1 ) )
bCenturyIsOn = hb_parl( 1 );
s_bCenturyIsOn = hb_parl( 1 );
else if( HB_ISCHAR( 1 ) )
{
HB_ISIZ iLen = hb_parclen( 1 ) + 1;
@@ -410,9 +411,9 @@ HB_FUNC( SX_SETCENTURY )
hb_snprintf( szTmp, iLen, "%s", hb_parc( 1 ) );
bCenturyIsOn = ( strcmp( _sx_upper( szTmp ), "ON" ) == 0 ) ? HB_TRUE : HB_FALSE;
s_bCenturyIsOn = ( strcmp( _sx_upper( szTmp ), "ON" ) == 0 ) ? HB_TRUE : HB_FALSE;
if( bCenturyIsOn )
if( s_bCenturyIsOn )
wCentury = 1;
hb_xfree( szTmp );
@@ -771,7 +772,7 @@ HB_FUNC( SX_RDDSETDEFAULT )
{
int ui;
hb_retc( ( char * ) sxApiRDD[ i_sxApi_RDD_Default - 1 ] );
hb_retc( ( char * ) s_sxApiRDD[ i_sxApi_RDD_Default - 1 ] );
if( HB_ISCHAR( 1 ) )
{
@@ -799,7 +800,7 @@ int _sx_CheckRDD( const char * sSetDefault )
#endif
for( ui = 0; ui < 8; ui++ )
{
if( strcmp( sxApiRDD[ ui ], sSetDefault /* szTmp */ ) == 0 )
if( strcmp( s_sxApiRDD[ ui ], sSetDefault /* szTmp */ ) == 0 )
{
bCorrect = HB_TRUE;
break;

View File

@@ -26,16 +26,6 @@
#define __SXAPI_INIT
#include "sxapi.h"
#ifdef __cplusplus
extern "C" {
#endif
extern PHB_ITEM Opened_DBF_Property;
#ifdef __cplusplus
}
#endif
static void __sx_CreateINITFile( const char * pIniFile )
{
FILE * FIniHandle = hb_fopen( pIniFile, "w" );

View File

@@ -53,10 +53,6 @@
#include "sde7.h"
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* ******************************************************* */
/* SDE defines */
/* ******************************************************* */
@@ -289,6 +285,8 @@ typedef struct SX_DBOPENINFO
PHB_ITEM aFieldInfo;
} SX_DBOPENINFO;
HB_EXTERN_BEGIN
extern LONG _sx_SysProp( WORD uiSysItem, PVOID vpData );
extern char * _sx_randomname( const char * szPrefix );
extern PHB_ITEM _sx_FieldNames( void );
@@ -320,7 +318,7 @@ extern PHB_ITEM _sx_GetAlias( void );
int i_sxApi_MemoBlock_Size; /* Default Memo Block Size */
int i_sxApi_Error_Level; /* Default ErrorLevel */
int i_sxApi_RDD_Default; /* Default RDD Driver */
HB_BOOL bSetTrimmedON = HB_FALSE;
HB_BOOL bSetTrimmedON = HB_FALSE;
PHB_ITEM Opened_DBF_Property = NULL;
#else
extern int i_sxApi_MemoBlock_Size; /* Default Memo Block Size */
@@ -330,6 +328,8 @@ extern PHB_ITEM _sx_GetAlias( void );
extern PHB_ITEM Opened_DBF_Property;
#endif
HB_EXTERN_END
#define AMERICAN 0 /* MM/DD/YY */
#define ANSI 1 /* YY.MM.DD */
#define BRITISH 2 /* DD/MM/YY */
@@ -338,8 +338,4 @@ extern PHB_ITEM _sx_GetAlias( void );
#define ITALIAN 5 /* DD-MM-YY */
#define SPANISH 6 /* DD-MM-YY */
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -27,22 +27,23 @@
const char * _sx_CheckFileExt( const char * szFileName )
{
PHB_FNAME pFileName = hb_fsFNameSplit( szFileName );
static char _szFileName[ HB_PATH_MAX ];
static char s_szFileName[ HB_PATH_MAX ]; /* TOFIX */
memset( _szFileName, 0, HB_PATH_MAX );
PHB_FNAME pFileName = hb_fsFNameSplit( szFileName );
memset( s_szFileName, 0, HB_PATH_MAX );
if( ! pFileName->szExtension )
{
pFileName->szExtension = ".dbf";
hb_fsFNameMerge( _szFileName, pFileName );
hb_fsFNameMerge( s_szFileName, pFileName );
}
else
hb_xstrcpy( _szFileName, szFileName, 0 );
hb_xstrcpy( s_szFileName, szFileName, 0 );
hb_xfree( pFileName );
return _szFileName;
return s_szFileName;
}
double sx_GetPrivateProfileDouble( LPSTR lpSectionName, LPSTR lpEntryName,
@@ -91,15 +92,12 @@ PHB_ITEM _sx_GetAlias( void )
{
PHB_ITEM pResult;
#ifdef __cplusplus
static PHB_DYNS
#else
static PHB_DYNS pFunc = NULL;
if( ! pFunc )
#endif
pFunc = hb_dynsymFind( "CALIAS" );
static PHB_DYNS s_pFunc = NULL;
hb_objProcessMessage( hb_stackSelfItem(), pFunc, 0 );
if( ! s_pFunc )
s_pFunc = hb_dynsymFind( "CALIAS" );
hb_objProcessMessage( hb_stackSelfItem(), s_pFunc, 0 );
pResult = hb_itemNew( NULL );
hb_itemCopy( pResult, hb_stackReturnItem() );
return pResult;

View File

@@ -24,11 +24,11 @@
*/
#include "sxapi.h"
static const char * cRDD[] = { "SDENTX", "SDEFOX", "SDENSX", "SDENSX_DBT" };
static const char * aDescription[] =
static const char * s_cRDD[] = { "SDENTX", "SDEFOX", "SDENSX", "SDENSX_DBT" };
static const char * s_aDescription[] =
{
"WORKAREA (INTEGER)", "FILENAME (STRING)", "ALIAS (STRING)",
"SHARED (HB_BOOL)", "READONLY (HB_BOOL)", "RDE TYTE (INTEGER)",
"SHARED (BOOL)", "READONLY (BOOL)", "RDE TYTE (INTEGER)",
"OPEN MODE (INTEGER)", "RDE TYPE (STRING)", "COMMIT LEVEL (INTEGER)",
"RECSIZE (INTEGER)", "FIELD COUNT (INTEGER)", "DBF STRUCTURE (ARRAY)"
};
@@ -66,11 +66,11 @@ void _sx_SetDBFInfo( int iOpenedArea, const char * szAlias, int iOpenMode,
OpenInfo.uiArea = ( HB_USHORT ) iOpenedArea;
OpenInfo.cFilename = ( char * ) sx_BaseName();
OpenInfo.cAlias = szAlias;
OpenInfo.fShared = ( ( iOpenMode == 0 ) ? HB_TRUE : HB_FALSE );
OpenInfo.fReadonly = ( ( iOpenMode == READONLY ) ? HB_TRUE : HB_FALSE );
OpenInfo.fShared = ( ( iOpenMode == 0 ) ? TRUE : FALSE );
OpenInfo.fReadonly = ( ( iOpenMode == READONLY ) ? TRUE : FALSE );
OpenInfo.iRDEType = ( HB_USHORT ) iRDEType;
OpenInfo.iMode = ( HB_USHORT ) iOpenMode;
OpenInfo.cRDD = cRDD[ iRDEType - 1 ];
OpenInfo.cRDD = s_cRDD[ iRDEType - 1 ];
OpenInfo.iCommitLevel = ( HB_USHORT ) sx_GetCommitLevel( ( WORD ) iOpenedArea );
OpenInfo.iRecSize = ( HB_USHORT ) sx_RecSize();
OpenInfo.iFieldCount = sx_FieldCount();
@@ -222,14 +222,14 @@ HB_FUNC( SX_DBINFO )
if( hb_arrayGetType( aDesc, j + 1 ) & HB_IT_STRING )
{
char * szStr = hb_arrayGetC( aDesc, j + 1 );
hb_snprintf( szDesc, 255, "%s=%s", aDescription[ j ], szStr );
hb_snprintf( szDesc, 255, "%s=%s", s_aDescription[ j ], szStr );
hb_xfree( szStr );
}
else if( hb_arrayGetType( aDesc, j + 1 ) & HB_IT_NUMERIC )
hb_snprintf( szDesc, 255, "%s=%i", aDescription[ j ],
hb_snprintf( szDesc, 255, "%s=%i", s_aDescription[ j ],
hb_arrayGetNI( aDesc, j + 1 ) );
else if( hb_arrayGetType( aDesc, j + 1 ) & HB_IT_LOGICAL )
hb_snprintf( szDesc, 255, "%s=%s", aDescription[ j ],
hb_snprintf( szDesc, 255, "%s=%s", s_aDescription[ j ],
hb_arrayGetL( aDesc, j + 1 ) ? ".T." : ".F." );
else if( hb_arrayGetType( aDesc, j + 1 ) & HB_IT_ARRAY )
{