#ifndef ALLSRV_STANDALONE
#define CSTATEMENTS 100 #define CCOLPARMMAX 20 enum SQLPARM
{
SQL_IN_PARM, SQL_OUT_PARM, SQL_OUT_PROC, SQL_INOUT_PROC };
class ISQLSite : public IObject
{
public:
virtual int OnMessageBox(const char * strText, const char * strCaption, UINT nType) = 0;
};
SQLHSTMT AddStatement(SQLCHAR * scSQL);
int AddCol(void * pvBuff, SQLSMALLINT ssiCType, SQLPARM parmtype, int cbBuff);
SQLRETURN SqlGo(SQLHSTMT hstmt);
SQLRETURN SqlGetRow(SQLHSTMT hstmt);
int InitSql(char * szRegKey, ISQLSite * pSQLSite);
void ShutDownSQL();
#define BEGIN_SQL_DEF(REGKEY,SQLSITE) \
const int fooinitsql = InitSql(REGKEY , SQLSITE); #define END_SQL_DEF
#define DEF_STMT(NAME, SQL) \
SQLHSTMT g_hstmt##NAME = AddStatement((SQLCHAR *) SQL);
#define SQL_PARM(STORAGE, NAME, CTYPE, INOUT) \
STORAGE NAME = AddCol(&NAME, CTYPE, INOUT, sizeof(STORAGE)) ? NAME : NAME; #define SQL_STR_PARM(NAME, LENGTH, INOUT) \
SQLCHAR NAME [LENGTH + 1] = {AddCol(NAME, SQL_C_CHAR, INOUT, LENGTH + 1)};
#define SQL_INT4_PARM(NAME, INOUT)\
SQL_PARM(SQLINTEGER, NAME, SQL_C_LONG, INOUT)
#define SQL_INT2_PARM(NAME, INOUT) \
SQL_PARM(SQLSMALLINT, NAME, SQL_C_SHORT, INOUT)
#define SQL_INT1_PARM(NAME, INOUT) \
SQL_PARM(SQLCHAR, NAME, SQL_C_TINYINT, INOUT)
#define SQL_FLT4_PARM(NAME, INOUT) \
SQL_PARM(SQLREAL, NAME, SQL_C_FLOAT, INOUT)
#define SQL_FLT8_PARM(NAME, INOUT) \
SQL_PARM(SQLFLOAT, NAME, SQL_C_DOUBLE, INOUT)
#define SQL_DATE_PARM(NAME, INOUT) \
SQL_PARM(TIMESTAMP_STRUCT, NAME, SQL_C_TIMESTAMP, INOUT)
#define SQL_BIN_PARM(NAME, LENGTH, INOUT) \
SQLCHAR NAME[LENGTH] = {(char) AddCol(NAME, SQL_C_BINARY, INOUT, sizeof(NAME))};
#define SQL_GO(NAME) \
SqlGo(g_hstmt##NAME)
#define SQL_GETROW(NAME) \
SqlGetRow(g_hstmt##NAME)
#define FEDSTR(str) "ISNULL(RTRIM(" #str "), '~')"
#define FEDNUM(num) "ISNULL(" #num ", -1)"
void SqlStrCpy(char * szDest, SQLCHAR * szSrc, unsigned int cbSrc);
#define SQLSTRCPY(szDest, szSrc) SqlStrCpy((szDest), (szSrc), sizeof(szSrc))
#endif