Files
harbour-core/harbour/contrib/rddsql/hbrddsql.h
Mindaugas Kavaliauskas c5ae2cec9b 2009-05-17 19:05 UTC+0300 Mindaugas Kavaliauskas (dbtopas/at/dbtopas.lt)
* harbour/contrib/hbwin/hbwinole.h
  * harbour/contrib/hbwin/olecore.c
    + functions hb_oleParam(), hb_oleItemToVariant() made public

  * harbour/contrib/rddsql/hbrddsql.h
  * harbour/contrib/rddsql/sqlbase.c
    + added NULL SDD driver. It allows to use SQLBASE, SQLMIX RDD 
      without any real SDD driver. It could be usefull to implement 
      memory/array RDD
    * unspecified SDD methods are "inherited" from NULL SDD

  + harbour/contrib/rddsql/tests/arrayrdd.prg
    + "Array RDD" example added

  * harbour/contrib/rddsql/sddfb/fbirddd.c
  * harbour/contrib/rddsql/sddmy/mysqldd.c
  * harbour/contrib/rddsql/sddodbc/odbcdd.c
  * harbour/contrib/rddsql/sddpg/pgsqldd.c
    * deleted empty or default SDD methods. They are inherited from 
      NULL SDD now

  * harbour/contrib/rddsql/sddodbc/tests/test1.prg
    + added svn:keywords header
    * extended to show SQLMIX index features
2009-05-17 16:07:42 +00:00

363 lines
12 KiB
C

/*
* $Id$
*/
/*
* SQL Database Driver include file
*
* Copyright 2007 Mindaugas Kavaliauskas <dbtopas at dbtopas.lt>
* www - http://www.harbour-project.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
*
* As a special exception, the Harbour Project gives permission for
* additional uses of the text contained in its release of Harbour.
*
* The exception is that, if you link the Harbour libraries with other
* files to produce an executable, this does not by itself cause the
* resulting executable to be covered by the GNU General Public License.
* Your use of that executable is in no way restricted on account of
* linking the Harbour library code into it.
*
* This exception does not however invalidate any other reasons why
* the executable file might be covered by the GNU General Public License.
*
* This exception applies only to the code released by the Harbour
* Project under the name Harbour. If you copy code from other
* Harbour Project or Free Software Foundation releases into a copy of
* Harbour, as the General Public License permits, the exception does
* not apply to the code that you add in this way. To avoid misleading
* anyone as to the status of such modified files, you must delete
* this exception notice from them.
*
* If you write modifications of your own for Harbour, it is your choice
* whether to permit this exception to apply to your modifications.
* If you do not wish that, delete this exception notice.
*
*/
#ifndef HBSQLDD_H_
#define HBSQLDD_H_
#include "hbapirdd.h"
#include "hbdbferr.h"
#include "hbapierr.h"
#include "hbapilng.h"
#include "hbapi.h"
/* New ...INFO_ constants */
#define DBI_QUERY 1001
#define RDDI_CONNECT 1001
#define RDDI_DISCONNECT 1002
#define RDDI_EXECUTE 1003
#define RDDI_ERROR 1004
#define RDDI_ERRORNO 1005
#define RDDI_NEWID 1006
#define RDDI_AFFECTEDROWS 1007
#define RDDI_QUERY 1008
/*
====================================================================
SQLBASE
====================================================================
*/
#define MAX_FIELD_NAME 64
#define SQLDD_ROWSET_INIT 256
#define SQLDD_ROWSET_RESIZE 64
#define SQLDD_FLAG_DELETED 1
#define SQLDD_FLAG_CACHED 2
typedef struct _SQLBASEAREA
{
struct _RDDFUNCS * lprfsHost; /* Virtual method table for this workarea */
USHORT uiArea; /* The number assigned to this workarea */
void * atomAlias; /* Pointer to the alias symbol for this workarea */
USHORT uiFieldExtent; /* Total number of fields allocated */
USHORT uiFieldCount; /* Total number of fields used */
LPFIELD lpFields; /* Pointer to an array of fields */
void * lpFieldExtents; /* Void ptr for additional field properties */
PHB_ITEM valResult; /* All purpose result holder */
BOOL fTop; /* TRUE if "top" */
BOOL fBottom; /* TRUE if "bottom" */
BOOL fBof; /* TRUE if "bof" */
BOOL fEof; /* TRUE if "eof" */
BOOL fFound; /* TRUE if "found" */
DBSCOPEINFO dbsi; /* Info regarding last LOCATE */
DBFILTERINFO dbfi; /* Filter in effect */
LPDBORDERCONDINFO lpdbOrdCondInfo;
LPDBRELINFO lpdbRelations; /* Parent/Child relationships used */
USHORT uiParents; /* Number of parents for this area */
USHORT heap;
USHORT heapSize;
USHORT rddID;
USHORT uiMaxFieldNameLength;
PHB_CODEPAGE cdPage; /* Area's codepage pointer */
/*
* SQLBASE additions to the workarea structure
*/
LPDBRELINFO lpdbPendingRel;
ULONG ulConnection;
struct _SQLDDCONNECTION* pConnection;
struct _SDDNODE* pSDD;
char* szQuery; /* SQL query */
ULONG ulRecNo; /* Current record number */
ULONG ulRecCount; /* Total records */
ULONG ulRecMax; /* Size of pRow, pRowFlags buffer */
void** pRow; /* array of native pointers or cached PHB_ITEM */
BYTE* pRowFlags;
void* pRecord;
BYTE bRecordFlags;
void* pResult; /* SQL result */
void* pStmt; /* SQL statement */
void* pTrans; /* SQL transaction */
void* pNatRecord;
void* pNatLength;
BOOL fFetched;
BOOL fPositioned;
BOOL fAppend;
BOOL fRecordChanged;
} SQLBASEAREA, *SQLBASEAREAP;
typedef struct _SQLDDCONNECTION
{
struct _SDDNODE * pSDD;
void* hConnection;
void* hCargo;
int iError;
char* szError;
char* szQuery;
PHB_ITEM pNewID;
ULONG ulAffectedRows;
} SQLDDCONNECTION;
/*
====================================================================
SQLMIX
====================================================================
*/
#define MIX_MAXKEYLEN 1024
#define MIX_MAXTAGNAMELEN 16
#define MIX_NODE_ORDER 2 /* >=2 */
typedef struct _MIXKEY
{
ULONG rec;
BYTE notnul;
BYTE val[ 1 ];
} MIXKEY, *PMIXKEY;
typedef struct _MIXNODE
{
UINT Leaf;
UINT KeyCount;
struct _MIXNODE* Parent;
struct _MIXNODE* Child[ MIX_NODE_ORDER + 1 ];
} MIXNODE, *PMIXNODE;
typedef struct _MIXNODELEAF
{
UINT Leaf;
UINT KeyCount;
struct _MIXNODE* Parent;
} MIXNODELEAF, *PMIXNODELEAF;
typedef struct _MIXTAG
{
struct _MIXTAG* pNext;
struct _SQLMIXAREA* pArea;
char* szName;
char* szKeyExpr;
char* szForExpr;
PHB_ITEM pKeyItem;
PHB_ITEM pForItem;
BYTE bType;
UINT uiKeyLen; /* Length of key */
UINT uiTotalLen; /* Total length of key structure */
BOOL fEof;
BOOL fBof;
BOOL fCustom;
PMIXNODE Root;
PMIXKEY CurKey;
PMIXNODE CurNode;
UINT CurPos;
PMIXKEY HotKey;
BOOL HotFor;
BYTE* pSortTable; /* National sorttable for character key tags, NULL otherwise */
} MIXTAG, *PMIXTAG;
typedef struct _SQLMIXAREA
{
struct _RDDFUNCS * lprfsHost; /* Virtual method table for this workarea */
USHORT uiArea; /* The number assigned to this workarea */
void * atomAlias; /* Pointer to the alias symbol for this workarea */
USHORT uiFieldExtent; /* Total number of fields allocated */
USHORT uiFieldCount; /* Total number of fields used */
LPFIELD lpFields; /* Pointer to an array of fields */
void * lpFieldExtents; /* Void ptr for additional field properties */
PHB_ITEM valResult; /* All purpose result holder */
BOOL fTop; /* TRUE if "top" */
BOOL fBottom; /* TRUE if "bottom" */
BOOL fBof; /* TRUE if "bof" */
BOOL fEof; /* TRUE if "eof" */
BOOL fFound; /* TRUE if "found" */
DBSCOPEINFO dbsi; /* Info regarding last LOCATE */
DBFILTERINFO dbfi; /* Filter in effect */
LPDBORDERCONDINFO lpdbOrdCondInfo;
LPDBRELINFO lpdbRelations; /* Parent/Child relationships used */
USHORT uiParents; /* Number of parents for this area */
USHORT heap;
USHORT heapSize;
USHORT rddID;
USHORT uiMaxFieldNameLength;
PHB_CODEPAGE cdPage; /* Area's codepage pointer */
/*
* SQLBASE additions to the workarea structure
*/
LPDBRELINFO lpdbPendingRel;
ULONG ulConnection;
struct _SQLDDCONNECTION* pConnection;
struct _SDDNODE* pSDD;
char* szQuery; /* SQL query */
ULONG ulRecNo; /* Current record number */
ULONG ulRecCount; /* Total records */
ULONG ulRecMax; /* Size of pRow, pRowFlags buffer */
void** pRow; /* array of native pointers or cached PHB_ITEM */
BYTE* pRowFlags;
void* pRecord;
BYTE bRecordFlags;
void* pResult; /* SQL result */
void* pStmt; /* SQL statement */
void* pTrans; /* SQL transaction */
void* pNatRecord;
void* pNatLength;
BOOL fFetched;
BOOL fPositioned;
BOOL fAppend;
BOOL fRecordChanged;
/*
* SQLMIX additions to the workarea structure
*/
PMIXTAG pTagList;
PMIXTAG pTag;
BYTE* pSortTable;
} SQLMIXAREA, *SQLMIXAREAP;
/*
====================================================================
SQLDD
====================================================================
*/
typedef HB_ERRCODE (* SDDFUNC_CONNECT )( SQLDDCONNECTION* pConnection, PHB_ITEM pItem );
typedef HB_ERRCODE (* SDDFUNC_DISCONNECT )( SQLDDCONNECTION* pConnection );
typedef HB_ERRCODE (* SDDFUNC_EXECUTE )( SQLDDCONNECTION* pConnection, PHB_ITEM pItem );
typedef HB_ERRCODE (* SDDFUNC_OPEN )( SQLBASEAREAP pArea );
typedef HB_ERRCODE (* SDDFUNC_CLOSE )( SQLBASEAREAP pArea );
typedef HB_ERRCODE (* SDDFUNC_GOTO )( SQLBASEAREAP pArea, ULONG ulRecNo );
typedef HB_ERRCODE (* SDDFUNC_GETVALUE )( SQLBASEAREAP pArea, USHORT uiIndex, PHB_ITEM pItem );
typedef HB_ERRCODE (* SDDFUNC_GETVARLEN )( SQLBASEAREAP pArea, USHORT uiIndex, ULONG * pLength );
typedef struct _SDDNODE
{
struct _SDDNODE * pNext;
const char* Name;
SDDFUNC_CONNECT Connect;
SDDFUNC_DISCONNECT Disconnect;
SDDFUNC_EXECUTE Execute;
SDDFUNC_OPEN Open;
SDDFUNC_CLOSE Close;
SDDFUNC_GOTO GoTo;
SDDFUNC_GETVALUE GetValue;
SDDFUNC_GETVARLEN GetVarLen;
} SDDNODE, * PSDDNODE;
int hb_sddRegister( PSDDNODE pSdd );
/*
====================================================================
Misc
====================================================================
*/
/* Error subcodes */
#define ESQLDD_NOTCONNECTED 1901
#define ESQLDD_INVALIDFIELD 1902
#define ESQLDD_INVALIDQUERY 1903
#define ESQLDD_START 1904
#define ESQLDD_COMMIT 1905
#define ESQLDD_STMTALLOC 1906
#define ESQLDD_STMTDESCR 1907
#define ESQLDD_STMTFREE 1908
#define ESQLDD_FETCH 1909
#define ESQLDD_LOWMEMORY 1910
#define ESQLDD_NULLSDD 1911
#endif