/*************** Tabjdbc H Declares Source Code File (.H) **************/ /* Name: TABJDBC.H Version 1.0 */ /* */ /* (C) Copyright to the author Olivier BERTRAND 2016 */ /* */ /* This file contains the TDBJDBC classes declares. */ /***********************************************************************/ #include "colblk.h" #include "resource.h" #include "jdbccat.h" typedef class JDBCDEF *PJDBCDEF; typedef class TDBJDBC *PTDBJDBC; typedef class JDBCCOL *PJDBCCOL; typedef class TDBXJDC *PTDBXJDC; typedef class JSRCCOL *PJSRCCOL; //typedef class TDBOIF *PTDBOIF; //typedef class OIFCOL *POIFCOL; //typedef class TDBJSRC *PTDBJSRC; /***********************************************************************/ /* JDBC table. */ /***********************************************************************/ class DllExport JDBCDEF : public TABDEF { /* Logical table description */ friend class TDBJDBC; friend class TDBXJDC; friend class TDBJDRV; friend class TDBJTB; friend class TDBJDBCL; public: // Constructor JDBCDEF(void); // Implementation virtual const char *GetType(void) { return "JDBC"; } PSZ GetTabname(void) { return Tabname; } PSZ GetTabschema(void) { return Tabschema; } PSZ GetTabcat(void) { return Tabcat; } PSZ GetSrcdef(void) { return Srcdef; } char GetSep(void) { return (Sep) ? *Sep : 0; } int GetQuoted(void) { return Quoted; } //int GetCatver(void) { return Catver; } int GetOptions(void) { return Options; } // Methods virtual int Indexable(void) { return 2; } virtual bool DefineAM(PGLOBAL g, LPCSTR am, int poff); virtual PTDB GetTable(PGLOBAL g, MODE m); int ParseURL(PGLOBAL g, char *url, bool b = true); bool SetParms(PJPARM sjp); protected: // Members PSZ Driver; /* JDBC driver */ PSZ Url; /* JDBC driver URL */ PSZ Tabname; /* External table name */ PSZ Tabschema; /* External table schema */ PSZ Username; /* User connect name */ PSZ Password; /* Password connect info */ PSZ Tabcat; /* External table catalog */ PSZ Tabtype; /* External table type */ PSZ Colpat; /* Catalog column pattern */ PSZ Srcdef; /* The source table SQL definition */ PSZ Qchar; /* Identifier quoting character */ PSZ Qrystr; /* The original query */ PSZ Sep; /* Decimal separator */ int Options; /* Open connection options */ //int Cto; /* Open connection timeout */ //int Qto; /* Query (command) timeout */ int Quoted; /* Identifier quoting level */ int Maxerr; /* Maxerr for an Exec table */ int Maxres; /* Maxres for a catalog table */ int Memory; /* Put result set in memory */ bool Scrollable; /* Use scrollable cursor */ bool Xsrc; /* Execution type */ }; // end of JDBCDEF #if !defined(NJDBC) #include "jdbconn.h" /***********************************************************************/ /* This is the JDBC Access Method class declaration for files from */ /* other DB drivers to be accessed via JDBC. */ /***********************************************************************/ class TDBJDBC : public TDBASE { friend class JDBCCOL; friend class JDBConn; public: // Constructor TDBJDBC(PJDBCDEF tdp = NULL); TDBJDBC(PTDBJDBC tdbp); // Implementation virtual AMT GetAmType(void) { return TYPE_AM_JDBC; } virtual PTDB Duplicate(PGLOBAL g) { return (PTDB)new(g)TDBJDBC(this); } // Methods virtual PTDB CopyOne(PTABS t); virtual int GetRecpos(void); virtual bool SetRecpos(PGLOBAL g, int recpos); //virtual PSZ GetFile(PGLOBAL g); //virtual void SetFile(PGLOBAL g, PSZ fn); virtual void ResetSize(void); //virtual int GetAffectedRows(void) {return AftRows;} virtual PSZ GetServer(void) { return "JDBC"; } virtual int Indexable(void) { return 2; } // Database routines virtual PCOL MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n); virtual int Cardinality(PGLOBAL g); virtual int GetMaxSize(PGLOBAL g); virtual int GetProgMax(PGLOBAL g); virtual bool OpenDB(PGLOBAL g); virtual int ReadDB(PGLOBAL g); virtual int WriteDB(PGLOBAL g); virtual int DeleteDB(PGLOBAL g, int irc); virtual void CloseDB(PGLOBAL g); virtual bool ReadKey(PGLOBAL g, OPVAL op, const key_range *kr); protected: // Internal functions int Decode(char *utf, char *buf, size_t n); bool MakeSQL(PGLOBAL g, bool cnt); bool MakeInsert(PGLOBAL g); bool MakeCommand(PGLOBAL g); //bool MakeFilter(PGLOBAL g, bool c); bool SetParameters(PGLOBAL g); //char *MakeUpdate(PGLOBAL g); //char *MakeDelete(PGLOBAL g); // Members JDBConn *Jcp; // Points to a JDBC connection class JDBCCOL *Cnp; // Points to count(*) column JDBCPARM Ops; // Additional parameters PSTRG Query; // Constructed SQL query char *TableName; // Points to JDBC table name char *Schema; // Points to JDBC table Schema char *User; // User connect info char *Pwd; // Password connect info char *Catalog; // Points to JDBC table Catalog char *Srcdef; // The source table SQL definition char *Count; // Points to count(*) SQL statement //char *Where; // Points to local where clause char *Quote; // The identifier quoting character char *MulConn; // Used for multiple JDBC tables char *DBQ; // The address part of Connect string char *Qrystr; // The original query char Sep; // The decimal separator int Options; // Connect options //int Cto; // Connect timeout //int Qto; // Query timeout int Quoted; // The identifier quoting level int Fpos; // Position of last read record int Curpos; // Cursor position of last fetch int AftRows; // The number of affected rows int Rows; // Rowset size int CurNum; // Current buffer line number int Rbuf; // Number of lines read in buffer int BufSize; // Size of connect string buffer int Ncol; // The column number int Nparm; // The number of statement parameters int Memory; // 0: No 1: Alloc 2: Put 3: Get //bool Scrollable; // Use scrollable cursor --> in Ops bool Placed; // True for position reading bool Prepared; // True when using prepared statement bool Werr; // Write error bool Rerr; // Rewind error PQRYRES Qrp; // Points to storage result }; // end of class TDBJDBC /***********************************************************************/ /* Class JDBCCOL: JDBC access method column descriptor. */ /* This A.M. is used for JDBC tables. */ /***********************************************************************/ class JDBCCOL : public COLBLK { friend class TDBJDBC; public: // Constructors JDBCCOL(PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i, PSZ am = "JDBC"); JDBCCOL(JDBCCOL *colp, PTDB tdbp); // Constructor used in copy process // Implementation virtual int GetAmType(void) { return TYPE_AM_JDBC; } //SQLLEN *GetStrLen(void) { return StrLen; } int GetRank(void) { return Rank; } //PVBLK GetBlkp(void) {return Blkp;} void SetCrp(PCOLRES crp) { Crp = crp; } // Methods virtual bool SetBuffer(PGLOBAL g, PVAL value, bool ok, bool check); virtual void ReadColumn(PGLOBAL g); virtual void WriteColumn(PGLOBAL g); //void AllocateBuffers(PGLOBAL g, int rows); //void *GetBuffer(DWORD rows); //SWORD GetBuflen(void); // void Print(PGLOBAL g, FILE *, uint); protected: // Constructor used by GetMaxSize JDBCCOL(void); // Members //TIMESTAMP_STRUCT *Sqlbuf; // To get SQL_TIMESTAMP's PCOLRES Crp; // To storage result void *Bufp; // To extended buffer PVBLK Blkp; // To Value Block //char F_Date[12]; // Internal Date format PVAL To_Val; // To value used for Insert //SQLLEN *StrLen; // As returned by JDBC //SQLLEN Slen; // Used with Fetch int Rank; // Rank (position) number in the query }; // end of class JDBCCOL /***********************************************************************/ /* This is the JDBC Access Method class declaration that send */ /* commands to be executed by other DB JDBC drivers. */ /***********************************************************************/ class TDBXJDC : public TDBJDBC { friend class JSRCCOL; friend class JDBConn; public: // Constructors TDBXJDC(PJDBCDEF tdp = NULL); // Implementation virtual AMT GetAmType(void) {return TYPE_AM_XDBC;} // Methods //virtual int GetRecpos(void); //virtual PSZ GetFile(PGLOBAL g); //virtual void SetFile(PGLOBAL g, PSZ fn); //virtual void ResetSize(void); //virtual int GetAffectedRows(void) {return AftRows;} //virtual PSZ GetServer(void) {return "JDBC";} // Database routines virtual PCOL MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n); //virtual int GetProgMax(PGLOBAL g); virtual int GetMaxSize(PGLOBAL g); virtual bool OpenDB(PGLOBAL g); virtual int ReadDB(PGLOBAL g); virtual int WriteDB(PGLOBAL g); virtual int DeleteDB(PGLOBAL g, int irc); //virtual void CloseDB(PGLOBAL g); protected: // Internal functions PCMD MakeCMD(PGLOBAL g); //bool BindParameters(PGLOBAL g); // Members PCMD Cmdlist; // The commands to execute char *Cmdcol; // The name of the Xsrc command column int Mxr; // Maximum errors before closing int Nerr; // Number of errors so far }; // end of class TDBXJDC /***********************************************************************/ /* Used by table in source execute mode. */ /***********************************************************************/ class JSRCCOL : public JDBCCOL { friend class TDBXJDC; public: // Constructors JSRCCOL(PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i, PSZ am = "JDBC"); // Implementation //virtual int GetAmType(void) {return TYPE_AM_JDBC;} // Methods virtual void ReadColumn(PGLOBAL g); virtual void WriteColumn(PGLOBAL g); // void Print(PGLOBAL g, FILE *, uint); protected: // Members char *Buffer; // To get returned message int Flag; // Column content desc }; // end of class JSRCCOL /***********************************************************************/ /* This is the class declaration for the Drivers catalog table. */ /***********************************************************************/ class TDBJDRV : public TDBCAT { public: // Constructor TDBJDRV(PJDBCDEF tdp) : TDBCAT(tdp) {Maxres = tdp->Maxres;} protected: // Specific routines virtual PQRYRES GetResult(PGLOBAL g); // Members int Maxres; // Returned lines limit }; // end of class TDBJDRV /***********************************************************************/ /* This is the class declaration for the tables catalog table. */ /***********************************************************************/ class TDBJTB : public TDBJDRV { public: // Constructor TDBJTB(PJDBCDEF tdp); protected: // Specific routines virtual PQRYRES GetResult(PGLOBAL g); // Members char *Schema; // Points to schema name or NULL char *Tab; // Points to JDBC table name or pattern char *Tabtype; // Points to JDBC table type JDBCPARM Ops; // Additional parameters }; // end of class TDBJTB /***********************************************************************/ /* This is the class declaration for the columns catalog table. */ /***********************************************************************/ class TDBJDBCL : public TDBJTB { public: // Constructor TDBJDBCL(PJDBCDEF tdp); protected: // Specific routines virtual PQRYRES GetResult(PGLOBAL g); // Members char *Colpat; // Points to catalog column pattern }; // end of class TDBJDBCL #if 0 /***********************************************************************/ /* This is the class declaration for the Data Sources catalog table. */ /***********************************************************************/ class TDBJSRC : public TDBJDRV { public: // Constructor TDBJSRC(PJDBCDEF tdp) : TDBJDRV(tdp) {} protected: // Specific routines virtual PQRYRES GetResult(PGLOBAL g); // No additional Members }; // end of class TDBJSRC #endif // 0 #endif // !NJDBC