summaryrefslogtreecommitdiff
path: root/storage/connect/jdbconn.h
blob: b226d5d08d6d59bc15585189970afec19402911d (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
/***********************************************************************/
/*  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__

// Field Flags, used to indicate status of fields
//efine SQL_FIELD_FLAG_DIRTY    0x1
//efine SQL_FIELD_FLAG_NULL     0x2

// Update options flags
//efine SQL_SETPOSUPDATES       0x0001
//efine SQL_POSITIONEDSQL       0x0002
//efine SQL_GDBOUND             0x0004

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
	PUCHAR   DB;                 // Database (Schema)
	PUCHAR   Tab;                // Table name or pattern
	PUCHAR   Pat;                // Table type or column pattern
} JCATPARM;

typedef jint(JNICALL *CRTJVM) (JavaVM **, void **, void *);
typedef jint(JNICALL *GETJVM) (JavaVM **, jsize, jsize *);

// 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(PSZ jpath, 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; }
	static void ResetJVM(void);
	static bool GetJVM(PGLOBAL g);

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

	// JDBC operations
protected:
	char *Check(void);
//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;
	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 JdbcInterface class
	jobject   job;											// The JdbcInterface 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
	//DWORD     m_LoginTimeout;
//DWORD     m_QueryTimeout;
//DWORD     m_UpdateOptions;
	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