mirror of
https://github.com/MariaDB/server.git
synced 2025-11-30 05:23:50 +03:00
commit 02d8c21380f Author: Olivier Bertrand <bertrandop@gmail.com> Date: Sat Oct 6 16:27:13 2018 +0200 - Fix truncating error messages on first unrecognized latin1 character modified: storage/connect/ha_connect.cc - Fix MDEV-17343 Reject multi-table UPDATE/DELETE commands that crash on some systems modified: storage/connect/ha_connect.cc modified: storage/connect/tabext.cpp - Try to fix failing tests (MariaDB version 10.0 only) modified: storage/connect/mysql-test/connect/disabled.def - Typo modified: storage/connect/global.h commit f83caed8569 Author: Olivier Bertrand <bertrandop@gmail.com> Date: Tue Sep 25 15:49:26 2018 +0200 - Try to fix failing tests (MariaDB version 10.0 only) modified: storage/connect/mysql-test/connect/disabled.def modified: storage/connect/mysql-test/connect/r/grant2.result modified: storage/connect/mysql-test/connect/r/infoschema2-9739.result modified: storage/connect/mysql-test/connect/r/mysql_exec.result commit 9fd6f178846 Author: Olivier Bertrand <bertrandop@gmail.com> Date: Sun Sep 23 19:45:59 2018 +0200 - Implement the CHECK TABLE statement and accept REPAIR and ANALYZE modified: storage/connect/connect.cc modified: storage/connect/ha_connect.cc modified: storage/connect/ha_connect.h modified: storage/connect/tabjdbc.cpp modified: storage/connect/tabmysql.cpp modified: storage/connect/tabodbc.cpp - MDEV-17212: Test if NumResultCols is implemented by the data source modified: storage/connect/odbconn.cpp - Change error type in Optimize modified: storage/connect/ha_connect.cc - Update version date modified: storage/connect/ha_connect.cc - Record new result from odbc_postgresql.test modified: storage/connect/mysql-test/connect/r/odbc_postgresql.result commit d8cf51319e1 Author: Olivier Bertrand <bertrandop@gmail.com> Date: Wed Aug 8 12:18:52 2018 +0200 - Comment out failing Cyrillic test in xml2.test modified: storage/connect/mysql-test/connect/r/xml2.result modified: storage/connect/mysql-test/connect/t/xml2.test commit 9df49e21f9e Author: Olivier Bertrand <bertrandop@gmail.com> Date: Tue Aug 7 15:01:06 2018 +0200 - Fix MDEV-16672 Connect: Warnings with 10.0 filamtxt.cpp: DOSFAM::RenameTempFile: Change sprintf to snprintf. filamvct.cpp: VECFAM::RenameTempFile: Change sprintf to snprintf. javaconn.cpp: Add JAVAConn::GetUTFString function. Use it instead of env->GetStringUTFChars. Fix wrong identation. javaconn.h: Add GetUTFString declaration. jdbconn.cpp: Use GetUTFString function instead of env->GetStringUTFChars. jmgoconn.cpp: Use GetUTFString function instead of env->GetStringUTFChars. Fix wrong identation. jsonudf.cpp: change 139 to BMX line 4631. tabjmg.cpp: Add ReleaseStringUTF. Fix wrong identation. tabpivot.cpp: Fix wrong identation. tabutil.cpp: TDBPRX::GetSubTable: Change sprintf to snprintf. modified: storage/connect/filamtxt.cpp modified: storage/connect/filamvct.cpp modified: storage/connect/javaconn.cpp modified: storage/connect/javaconn.h modified: storage/connect/jdbconn.cpp modified: storage/connect/jmgoconn.cpp modified: storage/connect/jsonudf.cpp modified: storage/connect/tabjmg.cpp modified: storage/connect/tabpivot.cpp modified: storage/connect/tabutil.cpp - Fix MDEV-16895 CONNECT engine's get_error_message can cause buffer overflow and server crash with long queries ha_connect_cc: Update version. get_error_message: Remove charset conversion. modified: storage/connect/ha_connect.cc - Fix a server crash on inserting bigint to a JDBC table JDBConn::SetUUID: Suppress check on ctyp that causes a server crash because ctyp can be negative and this triggers an DEBUG_ASSERT on return. modified: storage/connect/jdbconn.cpp - Delete an assert(qrp) from JCATPARM *AllocCatInfo that is called with qrp=NULL from JDBConn::SetUUID. Also delete a clone of this function that was duplicated in javaconn.cpp. modified: storage/connect/javaconn.cpp modified: storage/connect/jdbconn.cpp - Update some disabled tests and results to avoid failure modified: storage/connect/mysql-test/connect/r/jdbc.result 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/mongo_java_2.result modified: storage/connect/mysql-test/connect/r/mongo_java_3.result modified: storage/connect/mysql-test/connect/t/json_java_2.test modified: storage/connect/mysql-test/connect/t/json_java_3.test modified: storage/connect/mysql-test/connect/t/mongo_java_2.test modified: storage/connect/mysql-test/connect/t/mongo_java_3.test commit 415273eb193 Author: Olivier Bertrand <bertrandop@gmail.com> Date: Thu Jun 28 19:37:49 2018 +0200 - Fix MDEV-16167 Cannot insert unsigned values into a VEC table modified: storage/connect/filamvct.cpp modified: storage/connect/tabvct.cpp commit 9ffcb68a9f2 Author: Olivier Bertrand <bertrandop@gmail.com> Date: Mon May 7 22:43:43 2018 +0200 - Fix MDEV-15735 CONNECT [filamtxt.cpp:429]: Suspicious condition modified: storage/connect/filamtxt.cpp - Fix compiler warnings modified: storage/connect/domdoc.cpp modified: storage/connect/ha_connect.cc modified: storage/connect/json.h modified: storage/connect/jsonudf.cpp modified: storage/connect/tabext.cpp modified: storage/connect/tabjson.cpp modified: storage/connect/tabjson.h - Miscelleanous from 10.3 modified: storage/connect/ha_connect.cc modified: storage/connect/mycat.cc modified: storage/connect/user_connect.cc
191 lines
5.4 KiB
C++
191 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 <my_global.h>
|
|
#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
|
|
|