summaryrefslogtreecommitdiff
path: root/storage/connect/tabjdbc.h
blob: cf5e662c9d1141f020a8a696fa8a0e5f4f19104e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
/*************** 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