/****************************************************************************/ // SQLMISC.H v1.1 - 25 10 1990 /****************************************************************************/ /* */ /* Copyright (c) 1989-1993 Bernhard Strassl */ /* Institute for Applied Computer Science and Information Systems */ /* University of Vienna, Austria */ /* */ /* See file COPYRIGHT in this directory for details. If this file is */ /* missing please mail to bernhard@ani.univie.ac.at */ /****************************************************************************/ #ifndef _CB_SQLMISC_INCLUDED #define _CB_SQLMISC_INCLUDED 1 // misc. classes supporting SqlSvr and SqlMgr #include #include #include void init_cb_data(); void init_parser_constants(); class SqlInfo { friend class BindInfo; friend class QryInfo; friend class CursorInfo; friend class SqlDescr; friend testSvr(); public: virtual void dump() { cerr << "no dump implemented.\n"; } }; class BindInfo : private SqlInfo { friend class SqlSvr; friend class SqlMgr; friend class SqlObjectMgr; friend class SqlParser; friend testSvr(); short varIndex; void* data; short type; int length; short scale; short retLength; short retCode; void* sysData; short* indicator; bool indp_follows; BindInfo(short, void*, short, int = 0, int = 0, bool = FALSE, short* = NULL); void setBuffer(void*, short* = NULL); void setIndp(short*); void requireIndBuf() { indp_follows = TRUE; } public: short dataType() { return type; } void* dataPtr() { return data; } short* indPtr() { return indicator; } bool indpFollows() { return indp_follows; } void dump() { cerr << "BindInfo vi " << varIndex << " t " << type << " addr " << long(data) << " l " << length << " rl " << retLength << " rc " << retCode << "\n"; } }; class QryInfo : private SqlInfo { friend class SqlSvr; friend class SqlMgr; friend class SqlObjectMgr; friend testSvr(); short colIndex; short type; int dataLength; char* nameBuff; short prec; short scale; QryInfo() { nameBuff = (char* )NULL; colIndex = type = dataLength = prec = scale = 0; } ~QryInfo() { if(nameBuff) delete nameBuff; } public: void dump() { cerr << "QryInfo ci " << colIndex << " name: " << nameBuff << " t " << type << " l " << dataLength << " p " << prec << "\n"; } }; class CursorInfo : private SqlInfo { friend class SqlSvr; friend class SqlMgr; friend class SqlObjectMgr; friend class CursorDescr; friend testSvr(); int cndx; int cstat; bool active; void* sysinfo; CursorInfo(); public: void dump() { cerr << "CursorInfo cndx " << cndx << " cstatus " << cstat << " active " << active << "\n"; } }; class SqlDescr { friend class SqlSvr; friend class SqlMgr; friend class SqlObjectMgr; friend class BindDescr; friend class QryDescr; friend class CursorDescr; friend class SysDescr; // can be defined in server implementation friend class SqlParser; friend class PprDescr; friend class ParagraphDescr; friend class Page; friend class Document; friend class Printer; friend testSvr(); int itemCount; int itemMax; SqlInfo** items; SqlDescr() { itemCount = 0; itemMax = 10; items = new SqlInfo*[itemMax]; } ~SqlDescr(); void addInfo(SqlInfo* i) { items[itemCount++] = i; checkSize(); } void checkSize(); SqlInfo* infoAt(int i); SqlInfo* infoNext(int& i) { return(infoAt(i++)); } public: int size() { return(itemCount); } void dump(); }; class BindDescr : public SqlDescr { friend class SqlSvr; friend class SqlMgr; friend class SqlObjectMgr; friend class SqlParser; friend testSvr(); BindDescr() {} ~BindDescr() {} BindInfo* at(int i) { return((BindInfo* )infoAt(i)); } BindInfo* next(int& i) { return((BindInfo* )infoNext(i)); } }; class QryDescr : public SqlDescr { friend class SqlSvr; friend class SqlMgr; friend class SqlObjectMgr; friend testSvr(); QryDescr() {} ~QryDescr() {} QryInfo* at(int i) { return((QryInfo* )infoAt(i)); } QryInfo* next(int& i) { return((QryInfo* )infoNext(i)); } }; class CursorDescr : public SqlDescr { friend class SqlSvr; friend class SqlMgr; friend class SqlObjectMgr; friend class CursorInfo; friend testSvr(); public: CursorDescr() {} ~CursorDescr() {} private: void addCursor(CursorInfo*); CursorInfo* at(int i) { return((CursorInfo* )infoAt(i)); } CursorInfo* next(int& i) { return((CursorInfo* )infoNext(i)); } CursorInfo* getUnused(); }; #endif