mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 11:01:52 +01:00
5ae2656b69
commit c545d544378483bf68c4fb713cd4ec872d0df2c4 Author: Olivier Bertrand <bertrandop@gmail.com> Date: Tue Mar 27 23:13:14 2018 +0200 - Fix MDEV-15577 CONNECT engine JDBC remote index prevents UPDATE Fixed in TDBJDBC::OpenDB because query can be null for updates modified: storage/connect/tabjdbc.cpp commit c4f1fe2e8e74566e9c3296f435448d9f5c718b23 Author: Olivier Bertrand <bertrandop@gmail.com> Date: Wed Mar 14 12:21:17 2018 +0100 - Fix MDEV-15429 CONNECT engine JDBC handling Postgresql UUID type Also handle Postgresql sending type VARCHAR for TEXT column and setting length to b x7FFFFFF when the length is unknown. modified: storage/connect/Client.java modified: storage/connect/JavaWrappers.jar modified: storage/connect/JdbcInterface.java modified: storage/connect/PostgresqlInterface.java modified: storage/connect/global.h modified: storage/connect/ha_connect.cc modified: storage/connect/jdbconn.cpp modified: storage/connect/jdbconn.h modified: storage/connect/mysql-test/connect/r/jdbc_postgresql.result modified: storage/connect/mysql-test/connect/t/jdbc_postgresql.test modified: storage/connect/mysql-test/connect/t/jdbconn.inc modified: storage/connect/plgdbsem.h modified: storage/connect/tabjdbc.cpp modified: storage/connect/tabjdbc.h added: storage/connect/mysql-test/connect/std_data/JavaWrappers.jar commit 3068bb4882a316c6c32c624609db2bf24ae3ad40 Author: Olivier Bertrand <bertrandop@gmail.com> Date: Mon Feb 26 19:40:27 2018 +0100 Revert to old cmake file to avoid compile error commit da8c1c0bd6a327fd03bd321be3170f468122ef67 Author: Olivier Bertrand <bertrandop@gmail.com> Date: Mon Feb 26 16:13:39 2018 +0100 - Remove warning on not used tabtyp variable in connect_assisted_discovery modified: storage/connect/ha_connect.cc - Fix a bug causing CONNECT to loop when expanding a JSON column when the expanded column value is null or void array. - Adding the FullArray option to JSON tables. - Skipping expanded JSON lines when the expanded column value is null. modified: storage/connect/connect.cc modified: storage/connect/tabdos.h modified: storage/connect/tabjson.cpp modified: storage/connect/tabjson.h - Fix MDEV-13353 No file privilege for ODBC, JDBC, MONGO, MAC, WMI file types. modified: storage/connect/ha_connect.cc - Make some Json UDFs to accept a non JSON item as 1st parameter. modified: storage/connect/json.cpp modified: storage/connect/json.h modified: storage/connect/jsonudf.cpp modified: storage/connect/jsonudf.h - Update Json UDF tests to cope with above changes. modified: storage/connect/mysql-test/connect/r/json_udf.result modified: storage/connect/mysql-test/connect/r/json_udf_bin.result modified: storage/connect/mysql-test/connect/r/vcol.result modified: storage/connect/mysql-test/connect/t/json_udf.test modified: storage/connect/mysql-test/connect/t/vcol.test - Fix some compiler warning treated as error PlugSubAlloc no more exported because it does throw. modified: storage/connect/global.h modified: storage/connect/ha_connect.cc modified: storage/connect/jsonudf.cpp modified: storage/connect/tabjson.cpp modified: storage/connect/tabjson.h - Other files modified (?) when going back to wrong merge modified: storage/connect/CMakeLists.txt modified: storage/connect/array.cpp modified: storage/connect/colblk.cpp modified: storage/connect/connect.cc modified: storage/connect/csort.cpp modified: storage/connect/domdoc.cpp modified: storage/connect/filamap.cpp modified: storage/connect/filamgz.cpp modified: storage/connect/filamtxt.cpp modified: storage/connect/filamzip.cpp modified: storage/connect/filter.cpp modified: storage/connect/fmdlex.c modified: storage/connect/jdbconn.cpp modified: storage/connect/macutil.cpp modified: storage/connect/myconn.cpp modified: storage/connect/odbconn.cpp modified: storage/connect/plgdbutl.cpp modified: storage/connect/plugutil.cpp modified: storage/connect/preparse.h modified: storage/connect/rcmsg.c modified: storage/connect/rcmsg.h modified: storage/connect/reldef.cpp modified: storage/connect/tabdos.cpp modified: storage/connect/tabfmt.cpp modified: storage/connect/tabmac.cpp modified: storage/connect/tabmul.cpp modified: storage/connect/tabmysql.cpp modified: storage/connect/tabmysql.h modified: storage/connect/tabodbc.cpp modified: storage/connect/tabtbl.cpp modified: storage/connect/tabxml.cpp modified: storage/connect/value.cpp modified: storage/connect/xobject.cpp commit 5095628b31ed8c94bd7c794c6b0162894a9040b1 Author: Olivier Bertrand <bertrandop@gmail.com> Date: Tue Feb 13 14:29:00 2018 +0100 - Fix a bug causing CONNECT to loop when expanding a JSON column when the expanded column value is null or void array. - Adding the FullArray option to JSON tables. - Skipping expanded JSON lines when the expanded column value is null. modified: storage/connect/connect.cc modified: storage/connect/tabdos.h modified: storage/connect/tabjson.cpp modified: storage/connect/tabjson.h commit 9896174328da42016735630c893fd09eb128b48e Author: Olivier Bertrand <bertrandop@gmail.com> Date: Fri Feb 2 15:48:57 2018 +0100 - Remove warning on not used tabtyp variable in connect_assisted_discovery modified: storage/connect/ha_connect.cc commit d7e254c05f88173eb04d8dafc813013eb42ccdbe Author: Olivier Bertrand <bertrandop@gmail.com> Date: Wed Jan 31 14:42:45 2018 +0100 - Use delayed load for the MongoDB C Drive on Windows modified: storage/connect/CMakeLists.txt modified: storage/connect/cmgoconn.cpp modified: storage/connect/ha_connect.cc - Add FORCE to the connect_type_conv enum values This will translate binary values to TYPE_STRING modified: storage/connect/checklvl.h modified: storage/connect/ha_connect.cc modified: storage/connect/odbconn.cpp - Change the connect_xtrace variable to from int to set modified: storage/connect/array.cpp modified: storage/connect/blkfil.cpp modified: storage/connect/block.h modified: storage/connect/cmgoconn.cpp modified: storage/connect/colblk.cpp modified: storage/connect/connect.cc modified: storage/connect/filamap.cpp modified: storage/connect/filamdbf.cpp modified: storage/connect/filamfix.cpp modified: storage/connect/filamgz.cpp modified: storage/connect/filamtxt.cpp modified: storage/connect/filamvct.cpp modified: storage/connect/filamzip.cpp modified: storage/connect/filter.cpp modified: storage/connect/global.h modified: storage/connect/ha_connect.cc modified: storage/connect/inihandl.cpp modified: storage/connect/javaconn.cpp modified: storage/connect/jdbconn.cpp modified: storage/connect/jmgfam.cpp modified: storage/connect/jmgoconn.cpp modified: storage/connect/json.cpp modified: storage/connect/jsonudf.cpp modified: storage/connect/libdoc.cpp modified: storage/connect/mongo.cpp modified: storage/connect/mycat.cc modified: storage/connect/myconn.cpp modified: storage/connect/odbconn.cpp modified: storage/connect/plgdbutl.cpp modified: storage/connect/plugutil.cpp modified: storage/connect/reldef.cpp modified: storage/connect/tabcol.cpp modified: storage/connect/tabdos.cpp modified: storage/connect/tabext.cpp modified: storage/connect/tabfix.cpp modified: storage/connect/tabfmt.cpp modified: storage/connect/tabjdbc.cpp modified: storage/connect/tabjson.cpp modified: storage/connect/table.cpp modified: storage/connect/tabmul.cpp modified: storage/connect/tabmysql.cpp modified: storage/connect/tabodbc.cpp modified: storage/connect/tabpivot.cpp modified: storage/connect/tabsys.cpp modified: storage/connect/tabtbl.cpp modified: storage/connect/tabutil.cpp modified: storage/connect/tabvct.cpp modified: storage/connect/tabwmi.cpp modified: storage/connect/tabxml.cpp modified: storage/connect/user_connect.cc modified: storage/connect/valblk.cpp modified: storage/connect/value.cpp modified: storage/connect/xindex.cpp - Restore connect_enable_mongo variable (but undocumented) modified: storage/connect/ha_connect.cc modified: storage/connect/mycat.cc modified: storage/connect/mysql-test/connect/r/json_java_2.result modified: storage/connect/mysql-test/connect/r/json_java_3.result modified: storage/connect/mysql-test/connect/r/json_mongo_c.result modified: storage/connect/mysql-test/connect/r/mongo_c.result modified: storage/connect/mysql-test/connect/r/mongo_java_2.result modified: storage/connect/mysql-test/connect/r/mongo_java_3.result modified: storage/connect/mysql-test/connect/r/tbl_thread.result modified: storage/connect/mysql-test/connect/t/mongo.inc modified: storage/connect/mysql-test/connect/t/mongo_test.inc modified: storage/connect/mysql-test/connect/t/tbl_thread.test
189 lines
5.4 KiB
C++
189 lines
5.4 KiB
C++
/* Copyright (C) MariaDB Corporation Ab
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; version 2 of the License.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA */
|
|
|
|
/**
|
|
@file user_connect.cc
|
|
|
|
@brief
|
|
Implements the user_connect class.
|
|
|
|
@details
|
|
To support multi_threading, each query creates and use a PlugDB "user"
|
|
that is a connection with its personnal memory allocation.
|
|
|
|
@note
|
|
Author Olivier Bertrand
|
|
*/
|
|
|
|
/****************************************************************************/
|
|
/* Author: Olivier Bertrand -- bertrandop@gmail.com -- 2004-2015 */
|
|
/****************************************************************************/
|
|
#ifdef USE_PRAGMA_IMPLEMENTATION
|
|
#pragma implementation // gcc: Class implementation
|
|
#endif
|
|
|
|
#define DONT_DEFINE_VOID
|
|
#define MYSQL_SERVER
|
|
#include "sql_class.h"
|
|
#undef OFFSET
|
|
|
|
#define NOPARSE
|
|
#include "osutil.h"
|
|
#include "global.h"
|
|
#include "plgdbsem.h"
|
|
#include "connect.h"
|
|
#include "user_connect.h"
|
|
#include "mycat.h"
|
|
|
|
extern pthread_mutex_t usrmut;
|
|
|
|
/****************************************************************************/
|
|
/* Initialize the user_connect static member. */
|
|
/****************************************************************************/
|
|
PCONNECT user_connect::to_users= NULL;
|
|
|
|
/****************************************************************************/
|
|
/* Get the work_size SESSION variable value . */
|
|
/****************************************************************************/
|
|
uint GetWorkSize(void);
|
|
void SetWorkSize(uint);
|
|
|
|
/* -------------------------- class user_connect -------------------------- */
|
|
|
|
/****************************************************************************/
|
|
/* Constructor. */
|
|
/****************************************************************************/
|
|
user_connect::user_connect(THD *thd)
|
|
{
|
|
thdp= thd;
|
|
next= NULL;
|
|
previous= NULL;
|
|
g= NULL;
|
|
last_query_id= 0;
|
|
count= 0;
|
|
|
|
// Statistics
|
|
nrd= fnd= nfd= 0;
|
|
tb1= 0;
|
|
} // end of user_connect constructor
|
|
|
|
|
|
/****************************************************************************/
|
|
/* Destructor. */
|
|
/****************************************************************************/
|
|
user_connect::~user_connect()
|
|
{
|
|
// Terminate CONNECT and Plug-like environment, should return NULL
|
|
g= CntExit(g);
|
|
} // end of user_connect destructor
|
|
|
|
|
|
/****************************************************************************/
|
|
/* Initialization. */
|
|
/****************************************************************************/
|
|
bool user_connect::user_init()
|
|
{
|
|
// Initialize Plug-like environment
|
|
uint worksize= GetWorkSize();
|
|
PACTIVITY ap= NULL;
|
|
PDBUSER dup= NULL;
|
|
|
|
// Areasize= 64M because of VEC tables. Should be parameterisable
|
|
//g= PlugInit(NULL, 67108864);
|
|
//g= PlugInit(NULL, 134217728); // 128M was because of old embedded tests
|
|
g= PlugInit(NULL, worksize);
|
|
|
|
// Check whether the initialization is complete
|
|
if (!g || !g->Sarea || PlugSubSet(g, g->Sarea, g->Sarea_Size)
|
|
|| !(dup= PlgMakeUser(g))) {
|
|
if (g)
|
|
printf("%s\n", g->Message);
|
|
|
|
int rc= PlugExit(g);
|
|
g= NULL;
|
|
|
|
if (dup)
|
|
free(dup);
|
|
|
|
return true;
|
|
} // endif g->
|
|
|
|
dup->Catalog= new MYCAT(NULL);
|
|
|
|
ap= new ACTIVITY;
|
|
memset(ap, 0, sizeof(ACTIVITY));
|
|
strcpy(ap->Ap_Name, "CONNECT");
|
|
g->Activityp= ap;
|
|
g->Activityp->Aptr= dup;
|
|
|
|
pthread_mutex_lock(&usrmut);
|
|
next= to_users;
|
|
to_users= this;
|
|
|
|
if (next)
|
|
next->previous= this;
|
|
|
|
count = 1;
|
|
pthread_mutex_unlock(&usrmut);
|
|
|
|
last_query_id= thdp->query_id;
|
|
return false;
|
|
} // end of user_init
|
|
|
|
|
|
void user_connect::SetHandler(ha_connect *hc)
|
|
{
|
|
PDBUSER dup= (PDBUSER)g->Activityp->Aptr;
|
|
MYCAT *mc= (MYCAT*)dup->Catalog;
|
|
mc->SetHandler(hc);
|
|
}
|
|
|
|
/****************************************************************************/
|
|
/* Check whether we begin a new query and if so cleanup the previous one. */
|
|
/****************************************************************************/
|
|
bool user_connect::CheckCleanup(bool force)
|
|
{
|
|
if (thdp->query_id > last_query_id || force) {
|
|
uint worksize= GetWorkSize(), size = g->Sarea_Size;
|
|
|
|
PlugCleanup(g, true);
|
|
|
|
if (size != worksize) {
|
|
FreeSarea(g);
|
|
|
|
// Check whether the work area could be allocated
|
|
if (AllocSarea(g, worksize)) {
|
|
AllocSarea(g, size);
|
|
SetWorkSize(g->Sarea_Size); // Was too big
|
|
} // endif sarea
|
|
|
|
} // endif worksize
|
|
|
|
PlugSubSet(g, g->Sarea, g->Sarea_Size);
|
|
g->Xchk = NULL;
|
|
g->Createas = 0;
|
|
g->Alchecked = 0;
|
|
g->Mrr = 0;
|
|
last_query_id= thdp->query_id;
|
|
|
|
if (trace(65) && !force)
|
|
printf("=====> Begin new query %llu\n", last_query_id);
|
|
|
|
return true;
|
|
} // endif query_id
|
|
|
|
return false;
|
|
} // end of CheckCleanup
|
|
|