summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Bertrand <bertrandop@gmail.com>2016-05-12 12:20:52 +0200
committerOlivier Bertrand <bertrandop@gmail.com>2016-05-12 12:20:52 +0200
commit6aa163bce8279ed6e67cfa825004ba025ebe12d8 (patch)
tree527fa812ae71e9b1c769e8212066fc22614ee493
parent2323cf003387af35b126988eb6e57f1dff7dd996 (diff)
downloadmariadb-git-6aa163bce8279ed6e67cfa825004ba025ebe12d8.tar.gz
- Continue working on the JDBC table type
Suppress the jpath option add the connect_jvm_path and connect_class_path global variables modified: storage/connect/ha_connect.cc modified: storage/connect/jdbccat.h modified: storage/connect/jdbconn.cpp modified: storage/connect/jdbconn.h modified: storage/connect/tabjdbc.cpp modified: storage/connect/tabjdbc.h - Add the envar UDF modified: storage/connect/jsonudf.cpp modified: storage/connect/jsonudf.h - Fix MDEV-9950 modified: storage/connect/ha_connect.cc modified: storage/connect/plgdbutl.cpp
-rw-r--r--storage/connect/ha_connect.cc23
-rw-r--r--storage/connect/jdbccat.h8
-rw-r--r--storage/connect/jdbconn.cpp247
-rw-r--r--storage/connect/jdbconn.h11
-rw-r--r--storage/connect/jsonudf.cpp27
-rw-r--r--storage/connect/jsonudf.h4
-rw-r--r--storage/connect/plgdbutl.cpp2
-rw-r--r--storage/connect/tabjdbc.cpp19
-rw-r--r--storage/connect/tabjdbc.h7
9 files changed, 207 insertions, 141 deletions
diff --git a/storage/connect/ha_connect.cc b/storage/connect/ha_connect.cc
index 7571392ff3a..58a761f442d 100644
--- a/storage/connect/ha_connect.cc
+++ b/storage/connect/ha_connect.cc
@@ -193,12 +193,13 @@ extern "C" {
#if defined(JDBC_SUPPORT)
char *JvmPath;
+ char *ClassPath;
#endif // JDBC_SUPPORT
#if defined(__WIN__)
CRITICAL_SECTION parsec; // Used calling the Flex parser
#else // !__WIN__
-pthread_mutex_t parmut;
+pthread_mutex_t parmut = PTHREAD_MUTEX_INITIALIZER;
#endif // !__WIN__
/***********************************************************************/
@@ -5156,7 +5157,6 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
#endif // ODBC_SUPPORT
#if defined(JDBC_SUPPORT)
PJPARM sjp= NULL;
- char *jpath= NULL;
char *driver= NULL;
char *url= NULL;
char *tabtyp = NULL;
@@ -5223,7 +5223,6 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
cnc= (!*ucnc || *ucnc == 'y' || *ucnc == 'Y' || atoi(ucnc) != 0);
#endif
#if defined(JDBC_SUPPORT)
- jpath= GetListOption(g, "Jpath", topt->oplist, NULL);
driver= GetListOption(g, "Driver", topt->oplist, NULL);
url= GetListOption(g, "URL", topt->oplist, NULL);
tabtyp = GetListOption(g, "Tabtype", topt->oplist, NULL);
@@ -5510,15 +5509,14 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
case FNC_NO:
case FNC_COL:
if (src) {
- qrp= JDBCSrcCols(g, jpath, (char*)src, sjp);
+ qrp= JDBCSrcCols(g, (char*)src, sjp);
src= NULL; // for next tests
} else
- qrp= JDBCColumns(g, jpath, shm, tab, NULL,
- mxr, fnc == FNC_COL, sjp);
+ qrp= JDBCColumns(g, shm, tab, NULL, mxr, fnc == FNC_COL, sjp);
break;
case FNC_TABLE:
- qrp= JDBCTables(g, dsn, shm, tab, tabtyp, mxr, true, sjp);
+ qrp= JDBCTables(g, shm, tab, tabtyp, mxr, true, sjp);
break;
#if 0
case FNC_DSN:
@@ -5526,7 +5524,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
break;
#endif // 0
case FNC_DRIVER:
- qrp= JDBCDrivers(g, jpath, mxr, true);
+ qrp= JDBCDrivers(g, mxr, true);
break;
default:
sprintf(g->Message, "invalid catfunc %s", fncn);
@@ -6853,6 +6851,12 @@ static MYSQL_SYSVAR_STR(jvm_path, JvmPath,
"Path to the directory where is the JVM lib",
// check_jvm_path, update_jvm_path,
NULL, NULL, NULL);
+
+static MYSQL_SYSVAR_STR(class_path, ClassPath,
+ PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC,
+ "Java class path",
+ // check_class_path, update_class_path,
+ NULL, NULL, NULL);
#endif // JDBC_SUPPORT
@@ -6873,7 +6877,10 @@ static struct st_mysql_sys_var* connect_system_variables[]= {
MYSQL_SYSVAR(errmsg_dir_path),
#endif // XMSG
MYSQL_SYSVAR(json_grp_size),
+#if defined(JDBC_SUPPORT)
MYSQL_SYSVAR(jvm_path),
+ MYSQL_SYSVAR(class_path),
+#endif // JDBC_SUPPORT
NULL
};
diff --git a/storage/connect/jdbccat.h b/storage/connect/jdbccat.h
index 150197804d5..37f33d7063d 100644
--- a/storage/connect/jdbccat.h
+++ b/storage/connect/jdbccat.h
@@ -21,9 +21,9 @@ typedef struct jdbc_parms {
char *JDBCCheckConnection(PGLOBAL g, char *dsn, int cop);
#endif // PROMPT_OK
//PQRYRES JDBCDataSources(PGLOBAL g, int maxres, bool info);
-PQRYRES JDBCColumns(PGLOBAL g, char *jpath, char *db, char *table,
+PQRYRES JDBCColumns(PGLOBAL g, char *db, char *table,
char *colpat, int maxres, bool info, PJPARM sop);
-PQRYRES JDBCSrcCols(PGLOBAL g, char *jpath, char *src, PJPARM sop);
-PQRYRES JDBCTables(PGLOBAL g, char *jpath, char *db, char *tabpat,
+PQRYRES JDBCSrcCols(PGLOBAL g, char *src, PJPARM sop);
+PQRYRES JDBCTables(PGLOBAL g, char *db, char *tabpat,
char *tabtyp, int maxres, bool info, PJPARM sop);
-PQRYRES JDBCDrivers(PGLOBAL g, char *jpath, int maxres, bool info);
+PQRYRES JDBCDrivers(PGLOBAL g, int maxres, bool info);
diff --git a/storage/connect/jdbconn.cpp b/storage/connect/jdbconn.cpp
index da1eb4eeb1d..fe93ba9a62f 100644
--- a/storage/connect/jdbconn.cpp
+++ b/storage/connect/jdbconn.cpp
@@ -54,7 +54,8 @@ extern "C" HINSTANCE s_hModule; // Saved module handle
#endif // !__WIN__
int GetConvSize();
-extern char *JvmPath; // The connect_jvm_path global variable value
+extern char *JvmPath; // The connect_jvm_path global variable value
+extern char *ClassPath; // The connect_class_path global variable value
/***********************************************************************/
/* Static JDBConn objects. */
@@ -213,8 +214,8 @@ fin:
/* JDBCColumns: constructs the result blocks containing all columns */
/* of a JDBC table that will be retrieved by GetData commands. */
/***********************************************************************/
-PQRYRES JDBCColumns(PGLOBAL g, char *jpath, char *db, char *table,
- char *colpat, int maxres, bool info, PJPARM sjp)
+PQRYRES JDBCColumns(PGLOBAL g, char *db, char *table, char *colpat,
+ int maxres, bool info, PJPARM sjp)
{
int buftyp[] = {TYPE_STRING, TYPE_STRING, TYPE_STRING, TYPE_STRING,
TYPE_SHORT, TYPE_STRING, TYPE_INT, TYPE_INT,
@@ -236,7 +237,7 @@ PQRYRES JDBCColumns(PGLOBAL g, char *jpath, char *db, char *table,
if (!info) {
jcp = new(g)JDBConn(g, NULL);
- if (jcp->Open(jpath, sjp) != RC_OK) // openReadOnly + noJDBCdialog
+ if (jcp->Open(sjp) != RC_OK) // openReadOnly + noJDBCdialog
return NULL;
if (table && !strchr(table, '%')) {
@@ -315,11 +316,11 @@ PQRYRES JDBCColumns(PGLOBAL g, char *jpath, char *db, char *table,
/* JDBCSrcCols: constructs the result blocks containing the */
/* description of all the columns of a Srcdef option. */
/**************************************************************************/
-PQRYRES JDBCSrcCols(PGLOBAL g, char *jpath, char *src, PJPARM sjp)
+PQRYRES JDBCSrcCols(PGLOBAL g, char *src, PJPARM sjp)
{
JDBConn *jcp = new(g)JDBConn(g, NULL);
- if (jcp->Open(jpath, sjp))
+ if (jcp->Open(sjp))
return NULL;
return jcp->GetMetaData(g, src);
@@ -329,8 +330,8 @@ PQRYRES JDBCSrcCols(PGLOBAL g, char *jpath, char *src, PJPARM sjp)
/* JDBCTables: constructs the result blocks containing all tables in */
/* an JDBC database that will be retrieved by GetData commands. */
/**************************************************************************/
-PQRYRES JDBCTables(PGLOBAL g, char *jpath, char *db, char *tabpat,
- char *tabtyp, int maxres, bool info, PJPARM sjp)
+PQRYRES JDBCTables(PGLOBAL g, char *db, char *tabpat, char *tabtyp,
+ int maxres, bool info, PJPARM sjp)
{
int buftyp[] = {TYPE_STRING, TYPE_STRING, TYPE_STRING,
TYPE_STRING, TYPE_STRING};
@@ -352,7 +353,7 @@ PQRYRES JDBCTables(PGLOBAL g, char *jpath, char *db, char *tabpat,
/**********************************************************************/
jcp = new(g)JDBConn(g, NULL);
- if (jcp->Open(jpath, sjp) == RC_FX)
+ if (jcp->Open(sjp) == RC_FX)
return NULL;
if (!maxres)
@@ -429,7 +430,7 @@ PQRYRES JDBCTables(PGLOBAL g, char *jpath, char *db, char *tabpat,
/* drivers available on the local host. */
/* Called with info=true to have result column names. */
/*************************************************************************/
-PQRYRES JDBCDrivers(PGLOBAL g, char *jpath, int maxres, bool info)
+PQRYRES JDBCDrivers(PGLOBAL g, int maxres, bool info)
{
int buftyp[] ={TYPE_STRING, TYPE_STRING, TYPE_STRING, TYPE_STRING};
XFLD fldtyp[] ={FLD_NAME, FLD_EXTRA, FLD_DEFAULT, FLD_REM };
@@ -446,7 +447,7 @@ PQRYRES JDBCDrivers(PGLOBAL g, char *jpath, int maxres, bool info)
if (!info) {
jcp = new(g) JDBConn(g, NULL);
- if (jcp->Open(jpath, NULL) != RC_OK)
+ if (jcp->Open(NULL) != RC_OK)
return NULL;
if (!maxres)
@@ -796,12 +797,12 @@ bool JDBConn::GetJVM(PGLOBAL g)
if (!LibJvm) {
char soname[512];
+#if defined(__WIN__)
if (JvmPath)
strcat(strcpy(soname, JvmPath), "\\jvm.dll");
else
strcpy(soname, "jvm.dll");
-#if defined(__WIN__)
// Load the desired shared library
if (!(LibJvm = LoadLibrary(soname))) {
char buf[256];
@@ -826,6 +827,11 @@ bool JDBConn::GetJVM(PGLOBAL g)
#else // !__WIN__
const char *error = NULL;
+ if (JvmPath)
+ strcat(strcpy(soname, JvmPath), "/libjvm.so");
+ else
+ strcpy(soname, "libjvm.so");
+
// Load the desired shared library
if (!(LibJvm = dlopen(soname, RTLD_LAZY))) {
error = dlerror();
@@ -835,7 +841,7 @@ bool JDBConn::GetJVM(PGLOBAL g)
sprintf(g->Message, MSG(GET_FUNC_ERR), "JNI_CreateJavaVM", SVP(error));
dlclose(LibJvm);
LibJvm = NULL;
- } else if (!(GetCreatedJavaVMs = (CRTJVM)dlsym(LibJvm, "JNI_GetCreatedJavaVMs"))) {
+ } else if (!(GetCreatedJavaVMs = (GETJVM)dlsym(LibJvm, "JNI_GetCreatedJavaVMs"))) {
error = dlerror();
sprintf(g->Message, MSG(GET_FUNC_ERR), "JNI_GetCreatedJavaVMs", SVP(error));
dlclose(LibJvm);
@@ -851,112 +857,103 @@ bool JDBConn::GetJVM(PGLOBAL g)
/***********************************************************************/
/* Open: connect to a data source. */
/***********************************************************************/
-int JDBConn::Open(PSZ jpath, PJPARM sop)
+int JDBConn::Open(PJPARM sop)
{
PGLOBAL& g = m_G;
+ // Link or check whether jvm library was linked
if (GetJVM(g))
return true;
- PSTRG jpop = new(g) STRING(g, 512, "-Djava.class.path=");
- char *cp = NULL;
- char sep;
-
-#if defined(__WIN__)
- sep = ';';
-#else
- sep = ':';
-#endif
+ // Firstly check whether the jvm was already created
+ JavaVM* jvms[1];
+ jsize jsz;
+ jint rc = GetCreatedJavaVMs(jvms, 1, &jsz);
- if (sop) {
- m_Driver = sop->Driver;
- m_Url = sop->Url;
- m_User = sop->User;
- m_Pwd = sop->Pwd;
- m_Scrollable = sop->Scrollable;
- m_RowsetSize = sop->Fsize;
- //m_LoginTimeout = sop->Cto;
- //m_QueryTimeout = sop->Qto;
- //m_UseCnc = sop->UseCnc;
- } // endif sop
+ if (rc == JNI_OK && jsz == 1) {
+ // jvm already existing
+ jvm = jvms[0];
+ rc = jvm->AttachCurrentThread((void**)&env, nullptr);
- //================== prepare loading of Java VM ============================
- JavaVMInitArgs vm_args; // Initialization arguments
- JavaVMOption* options = new JavaVMOption[1]; // JVM invocation options
-
- // where to find java .class
- if ((cp = PlugDup(m_G, getenv("CLASSPATH"))))
- jpop->Append(cp);
-
- if (trace) {
- htrc("CLASSPATH=%s\n", cp);
- htrc("jpath=%s\n", jpath);
- } // endif trace
-
- if (jpath && *jpath) {
- if (cp)
- jpop->Append(sep);
-
- jpop->Append(jpath);
- } // endif jpath
+ if (rc != JNI_OK) {
+ strcpy(g->Message, "Cannot attach jvm to the current thread");
+ return RC_FX;
+ } // endif rc
- if (trace)
- htrc("%s\n", jpop->GetStr());
+ } else {
+ // Create a new jvm
+ PSTRG jpop = new(g)STRING(g, 512, "-Djava.class.path=");
+ char *cp = NULL;
+ char sep;
- options[0].optionString = jpop->GetStr();
-//options[1].optionString = "-verbose:jni";
- vm_args.version = JNI_VERSION_1_6; // minimum Java version
- vm_args.nOptions = 1; // number of options
- vm_args.options = options;
- vm_args.ignoreUnrecognized = false; // invalid options make the JVM init fail
+#if defined(__WIN__)
+ sep = ';';
+#else
+ sep = ':';
+#endif
- //=============== load and initialize Java VM and JNI interface =============
- jint rc = CreateJavaVM(&jvm, (void**)&env, &vm_args); // YES !!
- delete options; // we then no longer need the initialisation options.
+ //================== prepare loading of Java VM ============================
+ JavaVMInitArgs vm_args; // Initialization arguments
+ JavaVMOption* options = new JavaVMOption[1]; // JVM invocation options
- switch (rc) {
- case JNI_OK:
- strcpy(g->Message, "VM successfully created");
- break;
- case JNI_ERR:
- strcpy(g->Message, "Initialising JVM failed: unknown error");
- return RC_FX;
- case JNI_EDETACHED:
- strcpy(g->Message, "Thread detached from the VM");
- return RC_FX;
- case JNI_EVERSION:
- strcpy(g->Message, "JNI version error");
- return RC_FX;
- case JNI_ENOMEM:
- strcpy(g->Message, "Not enough memory");
- return RC_FX;
- case JNI_EEXIST:
- strcpy(g->Message, "VM already created");
- {
- JavaVM* jvms[1];
- jsize jsz;
+ // where to find java .class
+ if ((cp = PlugDup(m_G, getenv("CLASSPATH"))))
+ jpop->Append(cp);
- rc = GetCreatedJavaVMs(jvms, 1, &jsz);
+ if (trace) {
+ htrc("CLASSPATH=%s\n", getenv("CLASSPATH"));
+ htrc("ClassPath=%s\n", ClassPath);
+ } // endif trace
- if (rc == JNI_OK && jsz == 1) {
- jvm = jvms[0];
- rc = jvm->AttachCurrentThread((void**)&env, nullptr);
- } // endif rc
+ if (ClassPath && *ClassPath) {
+ if (cp)
+ jpop->Append(sep);
- } // end of block
+ jpop->Append(ClassPath);
+ } // endif ClassPath
- if (rc == JNI_OK)
+ if (trace)
+ htrc("%s\n", jpop->GetStr());
+
+ options[0].optionString = jpop->GetStr();
+ //options[1].optionString = "-verbose:jni";
+ vm_args.version = JNI_VERSION_1_6; // minimum Java version
+ vm_args.nOptions = 1; // number of options
+ vm_args.options = options;
+ vm_args.ignoreUnrecognized = false; // invalid options make the JVM init fail
+
+ //=============== load and initialize Java VM and JNI interface =============
+ rc = CreateJavaVM(&jvm, (void**)&env, &vm_args); // YES !!
+ delete options; // we then no longer need the initialisation options.
+
+ switch (rc) {
+ case JNI_OK:
+ strcpy(g->Message, "VM successfully created");
break;
- else
+ case JNI_ERR:
+ strcpy(g->Message, "Initialising JVM failed: unknown error");
return RC_FX;
+ case JNI_EDETACHED:
+ strcpy(g->Message, "Thread detached from the VM");
+ return RC_FX;
+ case JNI_EVERSION:
+ strcpy(g->Message, "JNI version error");
+ return RC_FX;
+ case JNI_ENOMEM:
+ strcpy(g->Message, "Not enough memory");
+ return RC_FX;
+ case JNI_EEXIST:
+ strcpy(g->Message, "VM already created");
+ return RC_FX;
+ case JNI_EINVAL:
+ strcpy(g->Message, "Invalid arguments");
+ return RC_FX;
+ default:
+ sprintf(g->Message, "Unknown return code %d", rc);
+ return RC_FX;
+ } // endswitch rc
- case JNI_EINVAL:
- strcpy(g->Message, "Invalid arguments");
- return RC_FX;
- default:
- sprintf(g->Message, "Unknown return code %d", rc);
- return RC_FX;
- } // endswitch rc
+ } // endif rc
//=============== Display JVM version =======================================
//jint ver = env->GetVersion();
@@ -970,6 +967,44 @@ int JDBConn::Open(PSZ jpath, PJPARM sop)
return RC_FX;
} // endif jdi
+#if 0 // Suppressed because it does not make any usable change
+ if (b && jpath && *jpath) {
+ // Try to add that path the the jvm class path
+ jmethodID alp = env->GetStaticMethodID(jdi, "addLibraryPath",
+ "(Ljava/lang/String;)I");
+
+ if (alp == nullptr) {
+ env->ExceptionDescribe();
+ env->ExceptionClear();
+ } else {
+ char *msg;
+ jstring path = env->NewStringUTF(jpath);
+ rc = env->CallStaticIntMethod(jdi, alp, path);
+
+ if ((msg = Check())) {
+ strcpy(g->Message, msg);
+ env->DeleteLocalRef(path);
+ return RC_FX;
+ } else switch (rc) {
+ case JNI_OK:
+ printf("jpath added\n");
+ break;
+ case JNI_EEXIST:
+ printf("jpath already exist\n");
+ break;
+ case JNI_ERR:
+ default:
+ strcpy(g->Message, "Error adding jpath");
+ env->DeleteLocalRef(path);
+ return RC_FX;
+ } // endswitch rc
+
+ env->DeleteLocalRef(path);
+ } // endif alp
+
+ } // endif jpath
+#endif // 0
+
// if class found, continue
jmethodID ctor = env->GetMethodID(jdi, "<init>", "()V");
@@ -1003,6 +1038,18 @@ int JDBConn::Open(PSZ jpath, PJPARM sop)
jobjectArray parms = env->NewObjectArray(4, // constructs java array of 4
env->FindClass("java/lang/String"), NULL); // Strings
+ if (sop) {
+ m_Driver = sop->Driver;
+ m_Url = sop->Url;
+ m_User = sop->User;
+ m_Pwd = sop->Pwd;
+ m_Scrollable = sop->Scrollable;
+ m_RowsetSize = sop->Fsize;
+ //m_LoginTimeout = sop->Cto;
+ //m_QueryTimeout = sop->Qto;
+ //m_UseCnc = sop->UseCnc;
+ } // endif sop
+
// change some elements
if (m_Driver)
env->SetObjectArrayElement(parms, 0, env->NewStringUTF(m_Driver));
diff --git a/storage/connect/jdbconn.h b/storage/connect/jdbconn.h
index b226d5d08d6..4014a52cdcc 100644
--- a/storage/connect/jdbconn.h
+++ b/storage/connect/jdbconn.h
@@ -32,15 +32,6 @@
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
@@ -82,7 +73,7 @@ private:
public:
JDBConn(PGLOBAL g, TDBJDBC *tdbp);
- int Open(PSZ jpath, PJPARM sop);
+ int Open(PJPARM sop);
int Rewind(char *sql);
void Close(void);
PQRYRES AllocateResult(PGLOBAL g);
diff --git a/storage/connect/jsonudf.cpp b/storage/connect/jsonudf.cpp
index 0b5688c58ab..d377b7d4b63 100644
--- a/storage/connect/jsonudf.cpp
+++ b/storage/connect/jsonudf.cpp
@@ -5027,3 +5027,30 @@ void json_serialize_deinit(UDF_INIT* initid)
{
JsonFreeMem((PGLOBAL)initid->ptr);
} // end of json_serialize_deinit
+
+/*********************************************************************************/
+/* Utility function returning an environment variable value. */
+/*********************************************************************************/
+my_bool envar_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
+{
+ if (args->arg_count != 1) {
+ strcpy(message, "Unique argument must be an environment variable name");
+ return true;
+ } else
+ return false;
+
+} // end of envar_init
+
+char *envar(UDF_INIT *initid, UDF_ARGS *args, char *result,
+ unsigned long *res_length, char *, char *)
+{
+ char *str, name[256];
+ int n = MY_MIN(args->lengths[0], sizeof(name) - 1);
+
+ memcpy(name, args->args[0], n);
+ name[n] = 0;
+ str = getenv(name);
+ *res_length = (str) ? strlen(str) : 0;
+ return str;
+} // end of envar
+
diff --git a/storage/connect/jsonudf.h b/storage/connect/jsonudf.h
index b7e9b8ecabb..1406d9f2f2e 100644
--- a/storage/connect/jsonudf.h
+++ b/storage/connect/jsonudf.h
@@ -218,8 +218,12 @@ extern "C" {
DllExport my_bool json_serialize_init(UDF_INIT*, UDF_ARGS*, char*);
DllExport char *json_serialize(UDF_EXEC_ARGS);
DllExport void json_serialize_deinit(UDF_INIT*);
+
+ DllExport my_bool envar_init(UDF_INIT*, UDF_ARGS*, char*);
+ DllExport char *envar(UDF_EXEC_ARGS);
} // extern "C"
+
/*********************************************************************************/
/* Structure JPN. Used to make the locate path. */
/*********************************************************************************/
diff --git a/storage/connect/plgdbutl.cpp b/storage/connect/plgdbutl.cpp
index 799df7cfc51..13c0dfd1e18 100644
--- a/storage/connect/plgdbutl.cpp
+++ b/storage/connect/plgdbutl.cpp
@@ -5,7 +5,7 @@
/* */
/* COPYRIGHT: */
/* ---------- */
-/* (C) Copyright to the author Olivier BERTRAND 1998-2015 */
+/* (C) Copyright to the author Olivier BERTRAND 1998-2016 */
/* */
/* WHAT THIS PROGRAM DOES: */
/* ----------------------- */
diff --git a/storage/connect/tabjdbc.cpp b/storage/connect/tabjdbc.cpp
index ce73349d9f7..37850ce6358 100644
--- a/storage/connect/tabjdbc.cpp
+++ b/storage/connect/tabjdbc.cpp
@@ -95,7 +95,7 @@ bool ExactInfo(void);
/***********************************************************************/
JDBCDEF::JDBCDEF(void)
{
- Jpath = Driver = Url = Tabname = Tabschema = Username = NULL;
+ Driver = Url = Tabname = Tabschema = Username = NULL;
Password = Tabcat = Tabtype = Srcdef = Qchar = Qrystr = Sep = NULL;
Options = Quoted = Maxerr = Maxres = Memory = 0;
Scrollable = Xsrc = false;
@@ -106,7 +106,6 @@ JDBCDEF::JDBCDEF(void)
/***********************************************************************/
bool JDBCDEF::DefineAM(PGLOBAL g, LPCSTR am, int poff)
{
- Jpath = GetStringCatInfo(g, "Jpath", "");
Driver = GetStringCatInfo(g, "Driver", NULL);
Desc = Url = GetStringCatInfo(g, "Connect", NULL);
@@ -222,7 +221,6 @@ TDBJDBC::TDBJDBC(PJDBCDEF tdp) : TDBASE(tdp)
Cnp = NULL;
if (tdp) {
- Jpath = tdp->Jpath;
Ops.Driver = tdp->Driver;
Ops.Url = tdp->Url;
TableName = tdp->Tabname;
@@ -241,7 +239,6 @@ TDBJDBC::TDBJDBC(PJDBCDEF tdp) : TDBASE(tdp)
Memory = tdp->Memory;
Ops.Scrollable = tdp->Scrollable;
} else {
- Jpath = NULL;
TableName = NULL;
Schema = NULL;
Ops.Driver = NULL;
@@ -286,7 +283,6 @@ TDBJDBC::TDBJDBC(PTDBJDBC tdbp) : TDBASE(tdbp)
{
Jcp = tdbp->Jcp; // is that right ?
Cnp = tdbp->Cnp;
- Jpath = tdbp->Jpath;
TableName = tdbp->TableName;
Schema = tdbp->Schema;
Ops = tdbp->Ops;
@@ -684,7 +680,7 @@ int TDBJDBC::Cardinality(PGLOBAL g)
char qry[96], tbn[64];
JDBConn *jcp = new(g)JDBConn(g, this);
- if (jcp->Open(Jpath, &Ops) == RC_FX)
+ if (jcp->Open(&Ops) == RC_FX)
return -1;
// Table name can be encoded in UTF-8
@@ -795,7 +791,7 @@ bool TDBJDBC::OpenDB(PGLOBAL g)
else if (Jcp->IsOpen())
Jcp->Close();
- if (Jcp->Open(Jpath, &Ops) == RC_FX)
+ if (Jcp->Open(&Ops) == RC_FX)
return true;
else if (Quoted)
Quote = Jcp->GetQuoteChar();
@@ -1545,7 +1541,7 @@ bool TDBXJDC::OpenDB(PGLOBAL g)
} else if (Jcp->IsOpen())
Jcp->Close();
- if (Jcp->Open(Jpath, &Ops) == RC_FX)
+ if (Jcp->Open(&Ops) == RC_FX)
return true;
Use = USE_OPEN; // Do it now in case we are recursively called
@@ -1657,7 +1653,7 @@ void JSRCCOL::WriteColumn(PGLOBAL g)
/***********************************************************************/
PQRYRES TDBJDRV::GetResult(PGLOBAL g)
{
- return JDBCDrivers(g, Jpath, Maxres, false);
+ return JDBCDrivers(g, Maxres, false);
} // end of GetResult
/* ---------------------------TDBJTB class --------------------------- */
@@ -1667,7 +1663,6 @@ PQRYRES TDBJDRV::GetResult(PGLOBAL g)
/***********************************************************************/
TDBJTB::TDBJTB(PJDBCDEF tdp) : TDBJDRV(tdp)
{
- Jpath = tdp->Jpath;
Schema = tdp->Tabschema;
Tab = tdp->Tabname;
Tabtype = tdp->Tabtype;
@@ -1684,7 +1679,7 @@ TDBJTB::TDBJTB(PJDBCDEF tdp) : TDBJDRV(tdp)
/***********************************************************************/
PQRYRES TDBJTB::GetResult(PGLOBAL g)
{
- return JDBCTables(g, Jpath, Schema, Tab, Tabtype, Maxres, false, &Ops);
+ return JDBCTables(g, Schema, Tab, Tabtype, Maxres, false, &Ops);
} // end of GetResult
/* --------------------------TDBJDBCL class -------------------------- */
@@ -1694,7 +1689,7 @@ PQRYRES TDBJTB::GetResult(PGLOBAL g)
/***********************************************************************/
PQRYRES TDBJDBCL::GetResult(PGLOBAL g)
{
- return JDBCColumns(g, Jpath, Schema, Tab, NULL, Maxres, false, &Ops);
+ return JDBCColumns(g, Schema, Tab, NULL, Maxres, false, &Ops);
} // end of GetResult
#if 0
diff --git a/storage/connect/tabjdbc.h b/storage/connect/tabjdbc.h
index d3ac3784d2f..1624b903610 100644
--- a/storage/connect/tabjdbc.h
+++ b/storage/connect/tabjdbc.h
@@ -31,7 +31,6 @@ public:
// Implementation
virtual const char *GetType(void) { return "JDBC"; }
- PSZ GetJpath(void) { return Jpath; }
PSZ GetTabname(void) { return Tabname; }
PSZ GetTabschema(void) { return Tabschema; }
PSZ GetTabcat(void) { return Tabcat; }
@@ -48,7 +47,6 @@ public:
protected:
// Members
- PSZ Jpath; /* Java class path */
PSZ Driver; /* JDBC driver */
PSZ Url; /* JDBC driver URL */
PSZ Tabname; /* External table name */
@@ -130,7 +128,6 @@ protected:
JDBCCOL *Cnp; // Points to count(*) column
JDBCPARM Ops; // Additional parameters
PSTRG Query; // Constructed SQL query
- char *Jpath; // Java class path
char *TableName; // Points to JDBC table name
char *Schema; // Points to JDBC table Schema
char *User; // User connect info
@@ -282,7 +279,7 @@ protected:
class TDBJDRV : public TDBCAT {
public:
// Constructor
- TDBJDRV(PJDBCDEF tdp) : TDBCAT(tdp) {Maxres = tdp->Maxres; Jpath = tdp->Jpath;}
+ TDBJDRV(PJDBCDEF tdp) : TDBCAT(tdp) {Maxres = tdp->Maxres;}
protected:
// Specific routines
@@ -290,7 +287,6 @@ protected:
// Members
int Maxres; // Returned lines limit
- char *Jpath; // Java class path
}; // end of class TDBJDRV
/***********************************************************************/
@@ -306,7 +302,6 @@ protected:
virtual PQRYRES GetResult(PGLOBAL g);
// Members
- char *Jpath; // Points to Java classpath
char *Schema; // Points to schema name or NULL
char *Tab; // Points to JDBC table name or pattern
char *Tabtype; // Points to JDBC table type