summaryrefslogtreecommitdiff
path: root/storage/connect/jdbconn.h
blob: abec3919e524a356b43f4d3b3c290e513b53d7a4 (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
/***********************************************************************/
/*  JDBConn.h : header file for the JDBC connection classes.           */
/***********************************************************************/
//nclude <windows.h>                           /* Windows include file */
//nclude <windowsx.h>                          /* Message crackers     */

/***********************************************************************/
/*  Included C-definition files required by the interface.             */
/***********************************************************************/
#include "block.h"

/***********************************************************************/
/*  JDBC interface.                                                    */
/***********************************************************************/
#include <jni.h>

/***********************************************************************/
/*  Constants and defines.                                             */
/***********************************************************************/
//  Miscellaneous sizing info
#define MAX_NUM_OF_MSG   10     // Max number of error messages
//efine MAX_CURRENCY     30     // Max size of Currency($) string
#define MAX_TNAME_LEN    32     // Max size of table names
//efine MAX_FNAME_LEN    256    // Max size of field names
//efine MAX_STRING_INFO  256    // Max size of string from SQLGetInfo
//efine MAX_DNAME_LEN    256    // Max size of Recordset names
#define MAX_CONNECT_LEN  512    // Max size of Connect string
//efine MAX_CURSOR_NAME  18     // Max size of a cursor name
#define DEFAULT_FIELD_TYPE 0    // TYPE_NULL

#if !defined(__WIN__)
typedef unsigned char *PUCHAR;
#endif   // !__WIN__

enum JCATINFO {
	CAT_TAB   =     1,      // JDBC Tables
	CAT_COL   =     2,      // JDBC Columns
	CAT_KEY   =     3,      // JDBC PrimaryKeys
//CAT_STAT  =     4,      // SQLStatistics
//CAT_SPC   =     5       // SQLSpecialColumns
};

/***********************************************************************/
/*  This structure is used to control the catalog functions.           */
/***********************************************************************/
typedef struct tagJCATPARM {
	JCATINFO Id;                 // Id to indicate function 
	PQRYRES  Qrp;                // Result set pointer
	char    *DB;                 // Database (Schema)
	char    *Tab;                // Table name or pattern
	char    *Pat;                // Table type or column pattern
} JCATPARM;

typedef jint(JNICALL *CRTJVM) (JavaVM **, void **, void *);
typedef jint(JNICALL *GETJVM) (JavaVM **, jsize, jsize *);
#if defined(_DEBUG)
typedef jint(JNICALL *GETDEF) (void *);
#endif   // _DEBUG

// JDBC connection to a data source
class TDBJDBC;
class JDBCCOL;
class JDBConn;
class TDBXJDC;

/***********************************************************************/
/*  JDBConn class.                                                     */
/***********************************************************************/
class JDBConn : public BLOCK {
	friend class TDBJDBC;
	friend class TDBXJDC;
//friend PQRYRES GetColumnInfo(PGLOBAL, char*&, char *, int, PVBLK&);
private:
	JDBConn();                      // Standard (unused) constructor

public:
	JDBConn(PGLOBAL g, TDBJDBC *tdbp);

	int  Open(PJPARM sop);
	int  Rewind(char *sql);
	void Close(void);
	PQRYRES AllocateResult(PGLOBAL g);

	// Attributes
public:
	char *GetQuoteChar(void) { return m_IDQuoteChar; }
	// Database successfully opened?
	bool  IsOpen(void) { return m_Opened; }
//PSZ   GetStringInfo(ushort infotype);
	int   GetMaxValue(int infotype);
//PSZ   GetConnect(void) { return m_Connect; }

public:
	// Operations
	//void SetLoginTimeout(DWORD sec) {m_LoginTimeout = sec;}
	//void SetQueryTimeout(DWORD sec) {m_QueryTimeout = sec;}
	//void SetUserName(PSZ user) {m_User = user;}
	//void SetUserPwd(PSZ pwd) {m_Pwd = pwd;}
	int     GetResultSize(char *sql, JDBCCOL *colp);
	int     ExecuteQuery(char *sql);
	int     ExecuteUpdate(char *sql);
	int     Fetch(int pos = 0);
	bool    PrepareSQL(char *sql);
	int     ExecuteSQL(void);
	bool    SetParam(JDBCCOL *colp);
	int     ExecSQLcommand(char *sql);
	void    SetColumnValue(int rank, PSZ name, PVAL val);
	int     GetCatInfo(JCATPARM *cap);
	//bool  GetDataSources(PQRYRES qrp);
	bool    GetDrivers(PQRYRES qrp);
	PQRYRES GetMetaData(PGLOBAL g, char *src);

public:
	// Set static variables
	static void SetJVM(void) {
		LibJvm = NULL; 
	  CreateJavaVM = NULL; 
	  GetCreatedJavaVMs = NULL;
#if defined(_DEBUG)
		GetDefaultJavaVMInitArgs = NULL;
#endif   // _DEBUG
	}	// end of SetJVM

	static void ResetJVM(void);
	static bool GetJVM(PGLOBAL g);

	// Implementation
public:
	//virtual ~JDBConn();

	// JDBC operations
protected:
	bool gmID(PGLOBAL g, jmethodID& mid, const char *name, const char *sig);
	bool Check(jint rc = 0);
//void ThrowDJX(int rc, PSZ msg/*, HSTMT hstmt = SQL_NULL_HSTMT*/);
//void ThrowDJX(PSZ msg);
//void Free(void);

protected:
	// Members
#if defined(__WIN__)
	static HANDLE LibJvm;              // Handle to the jvm DLL
#else   // !__WIN__
	static void  *LibJvm;              // Handle for the jvm shared library
#endif  // !__WIN__
	static CRTJVM CreateJavaVM;
	static GETJVM GetCreatedJavaVMs;
#if defined(_DEBUG)
	static GETDEF GetDefaultJavaVMInitArgs;
#endif   // _DEBUG
	PGLOBAL   m_G;
	TDBJDBC  *m_Tdb;
	JavaVM   *jvm;                      // Pointer to the JVM (Java Virtual Machine)
	JNIEnv   *env;                      // Pointer to native interface
	jclass    jdi;											// Pointer to the java wrapper class
	jobject   job;											// The java wrapper class object
	jmethodID xqid;											// The ExecuteQuery method ID
	jmethodID xuid;											// The ExecuteUpdate method ID
	jmethodID xid;											// The Execute method ID
	jmethodID grs;											// The GetResult method ID
	jmethodID readid;										// The ReadNext method ID
	jmethodID fetchid;									// The Fetch method ID
	jmethodID typid;										// The ColumnType method ID
	jmethodID prepid;										// The CreatePrepStmt method ID
	jmethodID xpid;										  // The ExecutePrep method ID
	jmethodID pcid;										  // The ClosePrepStmt method ID
	jmethodID errid;										// The GetErrmsg method ID
	jmethodID chrfldid;									// The StringField method ID
	jmethodID intfldid;									// The IntField method ID
	jmethodID dblfldid;									// The DoubleField method ID
	jmethodID fltfldid;									// The FloatField method ID
	jmethodID datfldid;									// The TimestampField method ID
	jmethodID bigfldid;									// The BigintField method ID
	//DWORD     m_LoginTimeout;
//DWORD     m_QueryTimeout;
//DWORD     m_UpdateOptions;
	char     *Msg;
	char      m_IDQuoteChar[2];
	PSZ       m_Driver;
	PSZ       m_Url;
	PSZ       m_User;
	PSZ       m_Pwd;
  int       m_Ncol;
	int       m_Aff;
	int       m_Rows;
	int       m_Fetch;
	int       m_RowsetSize;
	jboolean  m_Updatable;
	jboolean  m_Transact;
	jboolean  m_Scrollable;
	bool      m_Opened;
	bool      m_Full;
}; // end of JDBConn class definition