1/*************** Tabext H Declares Source Code File (.H) ***************/
2/* Name: TABEXT.H Version 1.0 */
3/* */
4/* (C) Copyright to the author Olivier BERTRAND 2017 */
5/* */
6/* This is the EXTDEF, TABEXT and EXTCOL classes definitions. */
7/***********************************************************************/
8
9#ifndef __TABEXT_H
10#define __TABEXT_H
11
12#include "reldef.h"
13
14typedef class ALIAS *PAL;
15
16class ALIAS : public BLOCK {
17 public:
18 ALIAS(PAL x, PSZ n, PSZ a, bool h)
19 {Next = x, Name = n, Alias = a, Having = h;}
20
21 PAL Next;
22 PSZ Name;
23 PSZ Alias;
24 bool Having;
25}; // end of class ALIAS
26
27// Condition filter structure
28class CONDFIL : public BLOCK {
29 public:
30 // Constructor
31 CONDFIL(uint idx, AMT type);
32
33 // Functions
34 int Init(PGLOBAL g, PHC hc);
35 const char *Chk(const char *cln, bool *h);
36
37 // Members
38//const Item *Cond;
39 AMT Type;
40 uint Idx;
41 OPVAL Op;
42 PCMD Cmds;
43 PAL Alist;
44 bool All;
45 bool Bd;
46 bool Hv;
47 char *Body;
48 char *Having;
49}; // end of class CONDFIL
50
51/***********************************************************************/
52/* This class corresponds to the data base description for external */
53/* tables of type MYSQL, ODBC, JDBC... */
54/***********************************************************************/
55class DllExport EXTDEF : public TABDEF { /* EXT table */
56 friend class TDBEXT;
57public:
58 // Constructor
59 EXTDEF(void); // Constructor
60
61 // Implementation
62 virtual const char *GetType(void) { return "EXT"; }
63 inline PCSZ GetTabname(void) { return Tabname; }
64 inline PCSZ GetTabschema(void) { return Tabschema; }
65 inline PCSZ GetUsername(void) { return Username; };
66 inline PCSZ GetPassword(void) { return Password; };
67 inline PSZ GetTabcat(void) { return Tabcat; }
68 inline PSZ GetSrcdef(void) { return Srcdef; }
69 inline char GetSep(void) { return (Sep) ? *Sep : 0; }
70 inline int GetQuoted(void) { return Quoted; }
71 inline int GetOptions(void) { return Options; }
72
73 // Methods
74 virtual int Indexable(void) { return 2; }
75 virtual bool DefineAM(PGLOBAL g, LPCSTR am, int poff);
76
77protected:
78 // Members
79 PCSZ Tabname; /* External table name */
80 PCSZ Tabschema; /* External table schema */
81 PCSZ Username; /* User connect name */
82 PCSZ Password; /* Password connect info */
83 PSZ Tabcat; /* External table catalog */
84 PSZ Tabtyp; /* Catalog table type */
85 PSZ Colpat; /* Catalog column pattern */
86 PSZ Srcdef; /* The source table SQL definition */
87 PSZ Qchar; /* Identifier quoting character */
88 PSZ Qrystr; /* The original query */
89 PSZ Sep; /* Decimal separator */
90//PSZ Alias; /* Column alias list */
91 PSZ Phpos; /* Place holer positions */
92 int Options; /* Open connection options */
93 int Cto; /* Open connection timeout */
94 int Qto; /* Query (command) timeout */
95 int Quoted; /* Identifier quoting level */
96 int Maxerr; /* Maxerr for an Exec table */
97 int Maxres; /* Maxres for a catalog table */
98 int Memory; /* Put result set in memory */
99 bool Scrollable; /* Use scrollable cursor */
100 bool Xsrc; /* Execution type */
101}; // end of EXTDEF
102
103/***********************************************************************/
104/* This is the base class for all external tables. */
105/***********************************************************************/
106class DllExport TDBEXT : public TDB {
107 friend class JAVAConn;
108 friend class JMgoConn;
109public:
110 // Constructors
111 TDBEXT(EXTDEF *tdp);
112 TDBEXT(PTDBEXT tdbp);
113
114 // Implementation
115
116 // Properties
117 virtual bool IsRemote(void) { return true; }
118
119 // Methods
120 virtual PCSZ GetServer(void) { return "Remote"; }
121 virtual int GetRecpos(void);
122
123 // Database routines
124 virtual int GetMaxSize(PGLOBAL g);
125 virtual int GetProgMax(PGLOBAL g);
126
127protected:
128 // Internal functions
129 virtual bool MakeSrcdef(PGLOBAL g);
130 virtual bool MakeSQL(PGLOBAL g, bool cnt);
131 //virtual bool MakeInsert(PGLOBAL g);
132 virtual bool MakeCommand(PGLOBAL g);
133 int Decode(PCSZ utf, char *buf, size_t n);
134
135 // Members
136 PQRYRES Qrp; // Points to storage result
137 PSTRG Query; // Constructed SQL query
138 PCSZ TableName; // Points to ODBC table name
139 PCSZ Schema; // Points to ODBC table Schema
140 PCSZ User; // User connect info
141 PCSZ Pwd; // Password connect info
142 char *Catalog; // Points to ODBC table Catalog
143 char *Srcdef; // The source table SQL definition
144 char *Count; // Points to count(*) SQL statement
145 //char *Where; // Points to local where clause
146 char *Quote; // The identifier quoting character
147 char *MulConn; // Used for multiple ODBC tables
148 char *DBQ; // The address part of Connect string
149 char *Qrystr; // The original query
150 char Sep; // The decimal separator
151 int Options; // Connect options
152 int Cto; // Connect timeout
153 int Qto; // Query timeout
154 int Quoted; // The identifier quoting level
155 int Fpos; // Position of last read record
156 int Curpos; // Cursor position of last fetch
157 int AftRows; // The number of affected rows
158 int Rows; // Rowset size
159 int CurNum; // Current buffer line number
160 int Rbuf; // Number of lines read in buffer
161 int BufSize; // Size of connect string buffer
162 int Nparm; // The number of statement parameters
163 int Memory; // 0: No 1: Alloc 2: Put 3: Get
164 int Ncol; // The column number (JDBC)
165 bool Scrollable; // Use scrollable cursor
166 bool Placed; // True for position reading
167}; // end of class TDBEXT
168
169/***********************************************************************/
170/* Virtual class EXTCOL: external column. */
171/***********************************************************************/
172class DllExport EXTCOL : public COLBLK {
173 friend class TDBEXT;
174public:
175 // Constructor
176 EXTCOL(PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i, PCSZ am);
177 EXTCOL(PEXTCOL colp, PTDB tdbp); // Constructor used in copy process
178
179 // Implementation
180 inline int GetRank(void) { return Rank; }
181 inline void SetRank(int k) { Rank = k; }
182 //inline PVBLK GetBlkp(void) {return Blkp;}
183 inline void SetCrp(PCOLRES crp) { Crp = crp; }
184
185 // Methods
186 virtual bool SetBuffer(PGLOBAL g, PVAL value, bool ok, bool check);
187 virtual void ReadColumn(PGLOBAL) = 0;
188 virtual void WriteColumn(PGLOBAL) = 0;
189
190protected:
191 // Constructor for count(*) column
192 EXTCOL(void);
193
194 // Members
195 PCOLRES Crp; // To storage result
196 void *Bufp; // To extended buffer
197 PVBLK Blkp; // To Value Block
198 PVAL To_Val; // To value used for Insert
199 int Rank; // Rank (position) number in the query
200 //int Flag; // ???
201}; // end of class EXTCOL
202
203#endif // __TABEXT_H
204