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:
@@ -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
|
||||
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 ) )
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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" );
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 )
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user