Lots of small cleanups
- Simplified use_trans_cache() to return at once if is_transactional is set - Indentation and spelling errors fixed - Don't call signal_update() if update_binlog_end_pos() is called as the function already calls signal_update() - Removed not used function wait_for_update_bin_log(), which would cause errors if ever used. - Simplified handler::clone() by always allocating 'ref' in ha_open(). To do this I added an optional MEM_ROOT argument to ha_open() to be used when allocating 'ref' - Changed arguments to get_system_var() from LEX_CSTRING to LEX_CSTRING* - Added THD as argument to create_select_for_variable(). Changed also char* argument to LEX_CSTRING to avoid strlen() call. - Change calls to append() to use LEX_CSTRING
This commit is contained in:
parent
a70f7aad55
commit
458d5ed8aa
@ -18,6 +18,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
|||||||
|
|
||||||
*******************************************************/
|
*******************************************************/
|
||||||
|
|
||||||
|
#include <my_global.h>
|
||||||
#include <my_base.h>
|
#include <my_base.h>
|
||||||
#include <archive.h>
|
#include <archive.h>
|
||||||
#include <archive_entry.h>
|
#include <archive_entry.h>
|
||||||
|
@ -1,3 +1,18 @@
|
|||||||
|
/* Copyright (c) 2017, MariaDB Corporation.
|
||||||
|
|
||||||
|
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 02110-1301, USA */
|
||||||
|
|
||||||
#include <my_global.h>
|
#include <my_global.h>
|
||||||
#include <mysqld.h>
|
#include <mysqld.h>
|
||||||
#include <mysql.h>
|
#include <mysql.h>
|
||||||
|
@ -24,7 +24,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
|||||||
|
|
||||||
#include <my_global.h>
|
#include <my_global.h>
|
||||||
#include <my_base.h>
|
#include <my_base.h>
|
||||||
|
|
||||||
#include <fil0fil.h>
|
#include <fil0fil.h>
|
||||||
#include <fsp0fsp.h>
|
#include <fsp0fsp.h>
|
||||||
#include <srv0start.h>
|
#include <srv0start.h>
|
||||||
|
@ -43,6 +43,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA
|
|||||||
|
|
||||||
//#define XTRABACKUP_TARGET_IS_PLUGIN
|
//#define XTRABACKUP_TARGET_IS_PLUGIN
|
||||||
|
|
||||||
|
#include <my_global.h>
|
||||||
#include <my_config.h>
|
#include <my_config.h>
|
||||||
#include <unireg.h>
|
#include <unireg.h>
|
||||||
#include <mysql_version.h>
|
#include <mysql_version.h>
|
||||||
|
@ -149,10 +149,11 @@ static inline void remove_from_active_list(safe_mutex_t *mp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
We initialise the hashes for deadlock detection lazily.
|
We initialize the hashes for deadlock detection lazily.
|
||||||
This greatly helps with performance when lots of mutexes are initiased but
|
This greatly helps with performance when lots of mutexes are initialized but
|
||||||
only a few of them are actually used (eg. InnoDB).
|
only a few of them are actually used (eg. InnoDB).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int safe_mutex_lazy_init_deadlock_detection(safe_mutex_t *mp)
|
static int safe_mutex_lazy_init_deadlock_detection(safe_mutex_t *mp)
|
||||||
{
|
{
|
||||||
if (!my_multi_malloc(MY_FAE | MY_WME,
|
if (!my_multi_malloc(MY_FAE | MY_WME,
|
||||||
|
@ -1236,7 +1236,7 @@ Event_timed::get_create_event(THD *thd, String *buf)
|
|||||||
append_unescaped(buf, comment.str, comment.length);
|
append_unescaped(buf, comment.str, comment.length);
|
||||||
}
|
}
|
||||||
buf->append(STRING_WITH_LEN(" DO "));
|
buf->append(STRING_WITH_LEN(" DO "));
|
||||||
buf->append(body.str, body.length);
|
buf->append(&body);
|
||||||
|
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
@ -1284,7 +1284,7 @@ Event_job_data::construct_sp_sql(THD *thd, String *sp_sql)
|
|||||||
*/
|
*/
|
||||||
sp_sql->append(C_STRING_WITH_LEN("() SQL SECURITY INVOKER "));
|
sp_sql->append(C_STRING_WITH_LEN("() SQL SECURITY INVOKER "));
|
||||||
|
|
||||||
sp_sql->append(body.str, body.length);
|
sp_sql->append(&body);
|
||||||
|
|
||||||
DBUG_RETURN(thd->is_fatal_error);
|
DBUG_RETURN(thd->is_fatal_error);
|
||||||
}
|
}
|
||||||
|
@ -85,7 +85,7 @@ Event_worker_thread::print_warnings(THD *thd, Event_job_data *et)
|
|||||||
char prefix_buf[5 * STRING_BUFFER_USUAL_SIZE];
|
char prefix_buf[5 * STRING_BUFFER_USUAL_SIZE];
|
||||||
String prefix(prefix_buf, sizeof(prefix_buf), system_charset_info);
|
String prefix(prefix_buf, sizeof(prefix_buf), system_charset_info);
|
||||||
prefix.length(0);
|
prefix.length(0);
|
||||||
prefix.append("Event Scheduler: [");
|
prefix.append(STRING_WITH_LEN("Event Scheduler: ["));
|
||||||
|
|
||||||
prefix.append(et->definer.str, et->definer.length, system_charset_info);
|
prefix.append(et->definer.str, et->definer.length, system_charset_info);
|
||||||
prefix.append("][", 2);
|
prefix.append("][", 2);
|
||||||
|
@ -2360,6 +2360,18 @@ int ha_delete_table(THD *thd, handlerton *table_type, const char *path,
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
** General handler functions
|
** General handler functions
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Clone a handler
|
||||||
|
|
||||||
|
@param name name of new table instance
|
||||||
|
@param mem_root Where 'this->ref' should be allocated. It can't be
|
||||||
|
in this->table->mem_root as otherwise we will not be
|
||||||
|
able to reclaim that memory when the clone handler
|
||||||
|
object is destroyed.
|
||||||
|
*/
|
||||||
|
|
||||||
handler *handler::clone(const char *name, MEM_ROOT *mem_root)
|
handler *handler::clone(const char *name, MEM_ROOT *mem_root)
|
||||||
{
|
{
|
||||||
handler *new_handler= get_new_handler(table->s, mem_root, ht);
|
handler *new_handler= get_new_handler(table->s, mem_root, ht);
|
||||||
@ -2369,16 +2381,6 @@ handler *handler::clone(const char *name, MEM_ROOT *mem_root)
|
|||||||
if (new_handler->set_ha_share_ref(ha_share))
|
if (new_handler->set_ha_share_ref(ha_share))
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
/*
|
|
||||||
Allocate handler->ref here because otherwise ha_open will allocate it
|
|
||||||
on this->table->mem_root and we will not be able to reclaim that memory
|
|
||||||
when the clone handler object is destroyed.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (!(new_handler->ref= (uchar*) alloc_root(mem_root,
|
|
||||||
ALIGN_SIZE(ref_length)*2)))
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
TODO: Implement a more efficient way to have more than one index open for
|
TODO: Implement a more efficient way to have more than one index open for
|
||||||
the same table instance. The ha_open call is not cachable for clone.
|
the same table instance. The ha_open call is not cachable for clone.
|
||||||
@ -2387,7 +2389,7 @@ handler *handler::clone(const char *name, MEM_ROOT *mem_root)
|
|||||||
and should be able to use the original instance of the table.
|
and should be able to use the original instance of the table.
|
||||||
*/
|
*/
|
||||||
if (new_handler->ha_open(table, name, table->db_stat,
|
if (new_handler->ha_open(table, name, table->db_stat,
|
||||||
HA_OPEN_IGNORE_IF_LOCKED))
|
HA_OPEN_IGNORE_IF_LOCKED, mem_root))
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
return new_handler;
|
return new_handler;
|
||||||
@ -2465,7 +2467,7 @@ PSI_table_share *handler::ha_table_share_psi() const
|
|||||||
Don't wait for locks if not HA_OPEN_WAIT_IF_LOCKED is set
|
Don't wait for locks if not HA_OPEN_WAIT_IF_LOCKED is set
|
||||||
*/
|
*/
|
||||||
int handler::ha_open(TABLE *table_arg, const char *name, int mode,
|
int handler::ha_open(TABLE *table_arg, const char *name, int mode,
|
||||||
uint test_if_locked)
|
uint test_if_locked, MEM_ROOT *mem_root)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
DBUG_ENTER("handler::ha_open");
|
DBUG_ENTER("handler::ha_open");
|
||||||
@ -2512,8 +2514,8 @@ int handler::ha_open(TABLE *table_arg, const char *name, int mode,
|
|||||||
table->db_stat|=HA_READ_ONLY;
|
table->db_stat|=HA_READ_ONLY;
|
||||||
(void) extra(HA_EXTRA_NO_READCHECK); // Not needed in SQL
|
(void) extra(HA_EXTRA_NO_READCHECK); // Not needed in SQL
|
||||||
|
|
||||||
/* ref is already allocated for us if we're called from handler::clone() */
|
/* Allocate ref in thd or on the table's mem_root */
|
||||||
if (!ref && !(ref= (uchar*) alloc_root(&table->mem_root,
|
if (!(ref= (uchar*) alloc_root(mem_root ? mem_root : &table->mem_root,
|
||||||
ALIGN_SIZE(ref_length)*2)))
|
ALIGN_SIZE(ref_length)*2)))
|
||||||
{
|
{
|
||||||
ha_close();
|
ha_close();
|
||||||
|
@ -2832,7 +2832,8 @@ public:
|
|||||||
}
|
}
|
||||||
/* ha_ methods: pubilc wrappers for private virtual API */
|
/* ha_ methods: pubilc wrappers for private virtual API */
|
||||||
|
|
||||||
int ha_open(TABLE *table, const char *name, int mode, uint test_if_locked);
|
int ha_open(TABLE *table, const char *name, int mode, uint test_if_locked,
|
||||||
|
MEM_ROOT *mem_root= 0);
|
||||||
int ha_index_init(uint idx, bool sorted)
|
int ha_index_init(uint idx, bool sorted)
|
||||||
{
|
{
|
||||||
DBUG_EXECUTE_IF("ha_index_init_fail", return HA_ERR_TABLE_DEF_CHANGED;);
|
DBUG_EXECUTE_IF("ha_index_init_fail", return HA_ERR_TABLE_DEF_CHANGED;);
|
||||||
|
12
sql/item.cc
12
sql/item.cc
@ -1691,7 +1691,7 @@ Item_splocal::this_item_addr(THD *thd, Item **)
|
|||||||
void Item_splocal::print(String *str, enum_query_type)
|
void Item_splocal::print(String *str, enum_query_type)
|
||||||
{
|
{
|
||||||
str->reserve(m_name.length+8);
|
str->reserve(m_name.length+8);
|
||||||
str->append(m_name.str, m_name.length);
|
str->append(&m_name);
|
||||||
str->append('@');
|
str->append('@');
|
||||||
str->qs_append(m_var_idx);
|
str->qs_append(m_var_idx);
|
||||||
}
|
}
|
||||||
@ -1816,9 +1816,9 @@ Item_splocal_row_field::this_item_addr(THD *thd, Item **)
|
|||||||
void Item_splocal_row_field::print(String *str, enum_query_type)
|
void Item_splocal_row_field::print(String *str, enum_query_type)
|
||||||
{
|
{
|
||||||
str->reserve(m_name.length + m_field_name.length + 8);
|
str->reserve(m_name.length + m_field_name.length + 8);
|
||||||
str->append(m_name.str, m_name.length);
|
str->append(&m_name);
|
||||||
str->append('.');
|
str->append('.');
|
||||||
str->append(m_field_name.str, m_field_name.length);
|
str->append(&m_field_name);
|
||||||
str->append('@');
|
str->append('@');
|
||||||
str->qs_append(m_var_idx);
|
str->qs_append(m_var_idx);
|
||||||
str->append('[');
|
str->append('[');
|
||||||
@ -1854,13 +1854,13 @@ void Item_splocal_row_field_by_name::print(String *str, enum_query_type)
|
|||||||
// +16 should be enough for .NNN@[""]
|
// +16 should be enough for .NNN@[""]
|
||||||
if (str->reserve(m_name.length + 2 * m_field_name.length + 16))
|
if (str->reserve(m_name.length + 2 * m_field_name.length + 16))
|
||||||
return;
|
return;
|
||||||
str->qs_append(m_name.str, m_name.length);
|
str->qs_append(&m_name);
|
||||||
str->qs_append('.');
|
str->qs_append('.');
|
||||||
str->qs_append(m_field_name.str, m_field_name.length);
|
str->qs_append(&m_field_name);
|
||||||
str->qs_append('@');
|
str->qs_append('@');
|
||||||
str->qs_append(m_var_idx);
|
str->qs_append(m_var_idx);
|
||||||
str->qs_append("[\"", 2);
|
str->qs_append("[\"", 2);
|
||||||
str->qs_append(m_field_name.str, m_field_name.length);
|
str->qs_append(&m_field_name);
|
||||||
str->qs_append("\"]", 2);
|
str->qs_append("\"]", 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4995,7 +4995,7 @@ bool Item_func_set_user_var::is_null_result()
|
|||||||
void Item_func_set_user_var::print(String *str, enum_query_type query_type)
|
void Item_func_set_user_var::print(String *str, enum_query_type query_type)
|
||||||
{
|
{
|
||||||
str->append(STRING_WITH_LEN("@"));
|
str->append(STRING_WITH_LEN("@"));
|
||||||
str->append(name.str, name.length);
|
str->append(&name);
|
||||||
str->append(STRING_WITH_LEN(":="));
|
str->append(STRING_WITH_LEN(":="));
|
||||||
args[0]->print_parenthesised(str, query_type, precedence());
|
args[0]->print_parenthesised(str, query_type, precedence());
|
||||||
}
|
}
|
||||||
@ -5005,7 +5005,7 @@ void Item_func_set_user_var::print_as_stmt(String *str,
|
|||||||
enum_query_type query_type)
|
enum_query_type query_type)
|
||||||
{
|
{
|
||||||
str->append(STRING_WITH_LEN("set @"));
|
str->append(STRING_WITH_LEN("set @"));
|
||||||
str->append(name.str, name.length);
|
str->append(&name);
|
||||||
str->append(STRING_WITH_LEN(":="));
|
str->append(STRING_WITH_LEN(":="));
|
||||||
args[0]->print_parenthesised(str, query_type, precedence());
|
args[0]->print_parenthesised(str, query_type, precedence());
|
||||||
}
|
}
|
||||||
@ -5588,7 +5588,7 @@ void Item_func_get_system_var::fix_length_and_dec()
|
|||||||
void Item_func_get_system_var::print(String *str, enum_query_type query_type)
|
void Item_func_get_system_var::print(String *str, enum_query_type query_type)
|
||||||
{
|
{
|
||||||
if (name.length)
|
if (name.length)
|
||||||
str->append(name.str, name.length);
|
str->append(&name);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
str->append(STRING_WITH_LEN("@@"));
|
str->append(STRING_WITH_LEN("@@"));
|
||||||
@ -6122,38 +6122,40 @@ longlong Item_func_bit_xor::val_int()
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
Item *get_system_var(THD *thd, enum_var_type var_type, LEX_CSTRING name,
|
Item *get_system_var(THD *thd, enum_var_type var_type,
|
||||||
LEX_CSTRING component)
|
const LEX_CSTRING *name,
|
||||||
|
const LEX_CSTRING *component)
|
||||||
{
|
{
|
||||||
sys_var *var;
|
sys_var *var;
|
||||||
LEX_CSTRING *base_name, *component_name;
|
LEX_CSTRING base_name, component_name;
|
||||||
|
|
||||||
if (component.str)
|
if (component->str)
|
||||||
{
|
{
|
||||||
base_name= &component;
|
base_name= *component;
|
||||||
component_name= &name;
|
component_name= *name;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
base_name= &name;
|
base_name= *name;
|
||||||
component_name= &component; // Empty string
|
component_name= *component; // Empty string
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(var= find_sys_var(thd, base_name->str, base_name->length)))
|
if (!(var= find_sys_var(thd, base_name.str, base_name.length)))
|
||||||
return 0;
|
return 0;
|
||||||
if (component.str)
|
if (component->str)
|
||||||
{
|
{
|
||||||
if (!var->is_struct())
|
if (!var->is_struct())
|
||||||
{
|
{
|
||||||
my_error(ER_VARIABLE_IS_NOT_STRUCT, MYF(0), base_name->str);
|
my_error(ER_VARIABLE_IS_NOT_STRUCT, MYF(0), base_name.str);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
thd->lex->uncacheable(UNCACHEABLE_SIDEEFFECT);
|
thd->lex->uncacheable(UNCACHEABLE_SIDEEFFECT);
|
||||||
|
|
||||||
set_if_smaller(component_name->length, MAX_SYS_VAR_LENGTH);
|
set_if_smaller(component_name.length, MAX_SYS_VAR_LENGTH);
|
||||||
|
|
||||||
return new (thd->mem_root) Item_func_get_system_var(thd, var, var_type, component_name,
|
return new (thd->mem_root) Item_func_get_system_var(thd, var, var_type,
|
||||||
|
&component_name,
|
||||||
NULL, 0);
|
NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2975,8 +2975,8 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
Item *get_system_var(THD *thd, enum_var_type var_type, LEX_CSTRING name,
|
Item *get_system_var(THD *thd, enum_var_type var_type,
|
||||||
LEX_CSTRING component);
|
const LEX_CSTRING *name, const LEX_CSTRING *component);
|
||||||
extern bool check_reserved_words(const LEX_CSTRING *name);
|
extern bool check_reserved_words(const LEX_CSTRING *name);
|
||||||
Item *find_date_time_item(Item **args, uint nargs, uint col);
|
Item *find_date_time_item(Item **args, uint nargs, uint col);
|
||||||
double my_double_round(double value, longlong dec, bool dec_unsigned,
|
double my_double_round(double value, longlong dec, bool dec_unsigned,
|
||||||
|
@ -949,7 +949,7 @@ void Item_subselect::print(String *str, enum_query_type query_type)
|
|||||||
{
|
{
|
||||||
if (query_type & QT_ITEM_SUBSELECT_ID_ONLY)
|
if (query_type & QT_ITEM_SUBSELECT_ID_ONLY)
|
||||||
{
|
{
|
||||||
str->append("(subquery#");
|
str->append(STRING_WITH_LEN("(subquery#"));
|
||||||
if (unit && unit->first_select())
|
if (unit && unit->first_select())
|
||||||
{
|
{
|
||||||
char buf[64];
|
char buf[64];
|
||||||
@ -4358,7 +4358,6 @@ void subselect_union_engine::print(String *str, enum_query_type query_type)
|
|||||||
void subselect_uniquesubquery_engine::print(String *str,
|
void subselect_uniquesubquery_engine::print(String *str,
|
||||||
enum_query_type query_type)
|
enum_query_type query_type)
|
||||||
{
|
{
|
||||||
const char *table_name= tab->table->s->table_name.str;
|
|
||||||
str->append(STRING_WITH_LEN("<primary_index_lookup>("));
|
str->append(STRING_WITH_LEN("<primary_index_lookup>("));
|
||||||
tab->ref.items[0]->print(str, query_type);
|
tab->ref.items[0]->print(str, query_type);
|
||||||
str->append(STRING_WITH_LEN(" in "));
|
str->append(STRING_WITH_LEN(" in "));
|
||||||
@ -4371,7 +4370,7 @@ void subselect_uniquesubquery_engine::print(String *str,
|
|||||||
str->append(STRING_WITH_LEN("<temporary table>"));
|
str->append(STRING_WITH_LEN("<temporary table>"));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
str->append(table_name, tab->table->s->table_name.length);
|
str->append(&tab->table->s->table_name);
|
||||||
KEY *key_info= tab->table->key_info+ tab->ref.key;
|
KEY *key_info= tab->table->key_info+ tab->ref.key;
|
||||||
str->append(STRING_WITH_LEN(" on "));
|
str->append(STRING_WITH_LEN(" on "));
|
||||||
str->append(key_info->name);
|
str->append(key_info->name);
|
||||||
@ -4395,7 +4394,7 @@ void subselect_uniquesubquery_engine::print(String *str)
|
|||||||
for (uint i= 0; i < key_info->user_defined_key_parts; i++)
|
for (uint i= 0; i < key_info->user_defined_key_parts; i++)
|
||||||
tab->ref.items[i]->print(str);
|
tab->ref.items[i]->print(str);
|
||||||
str->append(STRING_WITH_LEN(" in "));
|
str->append(STRING_WITH_LEN(" in "));
|
||||||
str->append(tab->table->s->table_name.str, tab->table->s->table_name.length);
|
str->append(&tab->table->s->table_name);
|
||||||
str->append(STRING_WITH_LEN(" on "));
|
str->append(STRING_WITH_LEN(" on "));
|
||||||
str->append(key_info->name);
|
str->append(key_info->name);
|
||||||
if (cond)
|
if (cond)
|
||||||
|
32
sql/log.cc
32
sql/log.cc
@ -5433,13 +5433,14 @@ stmt_has_updated_trans_table(const THD *thd)
|
|||||||
*/
|
*/
|
||||||
bool use_trans_cache(const THD* thd, bool is_transactional)
|
bool use_trans_cache(const THD* thd, bool is_transactional)
|
||||||
{
|
{
|
||||||
|
if (is_transactional)
|
||||||
|
return 1;
|
||||||
binlog_cache_mngr *const cache_mngr=
|
binlog_cache_mngr *const cache_mngr=
|
||||||
(binlog_cache_mngr*) thd_get_ha_data(thd, binlog_hton);
|
(binlog_cache_mngr*) thd_get_ha_data(thd, binlog_hton);
|
||||||
|
|
||||||
return
|
return ((thd->is_current_stmt_binlog_format_row() ||
|
||||||
((thd->is_current_stmt_binlog_format_row() ||
|
thd->variables.binlog_direct_non_trans_update) ? 0 :
|
||||||
thd->variables.binlog_direct_non_trans_update) ? is_transactional :
|
!cache_mngr->trx_cache.empty());
|
||||||
(is_transactional || !cache_mngr->trx_cache.empty()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -6360,7 +6361,6 @@ err:
|
|||||||
*/
|
*/
|
||||||
update_binlog_end_pos(offset);
|
update_binlog_end_pos(offset);
|
||||||
|
|
||||||
signal_update();
|
|
||||||
if ((error= rotate(false, &check_purge)))
|
if ((error= rotate(false, &check_purge)))
|
||||||
check_purge= false;
|
check_purge= false;
|
||||||
}
|
}
|
||||||
@ -7675,7 +7675,6 @@ MYSQL_BIN_LOG::trx_group_commit_leader(group_commit_entry *leader)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
bool any_error= false;
|
bool any_error= false;
|
||||||
bool all_error= true;
|
|
||||||
|
|
||||||
mysql_mutex_assert_not_owner(&LOCK_prepare_ordered);
|
mysql_mutex_assert_not_owner(&LOCK_prepare_ordered);
|
||||||
mysql_mutex_assert_owner(&LOCK_log);
|
mysql_mutex_assert_owner(&LOCK_log);
|
||||||
@ -7697,8 +7696,6 @@ MYSQL_BIN_LOG::trx_group_commit_leader(group_commit_entry *leader)
|
|||||||
current->error_cache= NULL;
|
current->error_cache= NULL;
|
||||||
any_error= true;
|
any_error= true;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
all_error= false;
|
|
||||||
first= false;
|
first= false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7712,8 +7709,6 @@ MYSQL_BIN_LOG::trx_group_commit_leader(group_commit_entry *leader)
|
|||||||
|
|
||||||
if (any_error)
|
if (any_error)
|
||||||
sql_print_error("Failed to run 'after_flush' hooks");
|
sql_print_error("Failed to run 'after_flush' hooks");
|
||||||
if (!all_error)
|
|
||||||
signal_update();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -8117,23 +8112,6 @@ void MYSQL_BIN_LOG::wait_for_update_relay_log(THD* thd)
|
|||||||
LOCK_log is released by the caller.
|
LOCK_log is released by the caller.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int MYSQL_BIN_LOG::wait_for_update_bin_log(THD* thd,
|
|
||||||
const struct timespec *timeout)
|
|
||||||
{
|
|
||||||
int ret= 0;
|
|
||||||
DBUG_ENTER("wait_for_update_bin_log");
|
|
||||||
|
|
||||||
thd_wait_begin(thd, THD_WAIT_BINLOG);
|
|
||||||
mysql_mutex_assert_owner(&LOCK_log);
|
|
||||||
if (!timeout)
|
|
||||||
mysql_cond_wait(&update_cond, &LOCK_log);
|
|
||||||
else
|
|
||||||
ret= mysql_cond_timedwait(&update_cond, &LOCK_log,
|
|
||||||
const_cast<struct timespec *>(timeout));
|
|
||||||
thd_wait_end(thd);
|
|
||||||
DBUG_RETURN(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
int MYSQL_BIN_LOG::wait_for_update_binlog_end_pos(THD* thd,
|
int MYSQL_BIN_LOG::wait_for_update_binlog_end_pos(THD* thd,
|
||||||
struct timespec *timeout)
|
struct timespec *timeout)
|
||||||
{
|
{
|
||||||
|
@ -711,7 +711,6 @@ public:
|
|||||||
void wait_for_sufficient_commits();
|
void wait_for_sufficient_commits();
|
||||||
void binlog_trigger_immediate_group_commit();
|
void binlog_trigger_immediate_group_commit();
|
||||||
void wait_for_update_relay_log(THD* thd);
|
void wait_for_update_relay_log(THD* thd);
|
||||||
int wait_for_update_bin_log(THD* thd, const struct timespec * timeout);
|
|
||||||
void init(ulong max_size);
|
void init(ulong max_size);
|
||||||
void init_pthread_objects();
|
void init_pthread_objects();
|
||||||
void cleanup();
|
void cleanup();
|
||||||
|
@ -319,7 +319,7 @@ public:
|
|||||||
LEX_STRING tmp_str;
|
LEX_STRING tmp_str;
|
||||||
if (copy_event_cache_to_string_and_reinit(m_cache, &tmp_str))
|
if (copy_event_cache_to_string_and_reinit(m_cache, &tmp_str))
|
||||||
exit(1);
|
exit(1);
|
||||||
m_ev->output_buf.append(tmp_str.str, tmp_str.length);
|
m_ev->output_buf.append(&tmp_str);
|
||||||
my_free(tmp_str.str);
|
my_free(tmp_str.str);
|
||||||
}
|
}
|
||||||
#else /* MySQL_SERVER */
|
#else /* MySQL_SERVER */
|
||||||
|
@ -1216,7 +1216,7 @@ bool Transaction_state_tracker::store(THD *thd, String *buf)
|
|||||||
tx_isolation_typelib as it hyphenates its items.
|
tx_isolation_typelib as it hyphenates its items.
|
||||||
*/
|
*/
|
||||||
buf->append(STRING_WITH_LEN("SET TRANSACTION ISOLATION LEVEL "));
|
buf->append(STRING_WITH_LEN("SET TRANSACTION ISOLATION LEVEL "));
|
||||||
buf->append(isol[tx_isol_level - 1].str, isol[tx_isol_level - 1].length);
|
buf->append(&isol[tx_isol_level - 1]);
|
||||||
buf->append(STRING_WITH_LEN("; "));
|
buf->append(STRING_WITH_LEN("; "));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3357,7 +3357,7 @@ sp_instr_set::print(String *str)
|
|||||||
str->qs_append(STRING_WITH_LEN("set "));
|
str->qs_append(STRING_WITH_LEN("set "));
|
||||||
if (var)
|
if (var)
|
||||||
{
|
{
|
||||||
str->qs_append(var->name.str, var->name.length);
|
str->qs_append(&var->name);
|
||||||
str->qs_append('@');
|
str->qs_append('@');
|
||||||
}
|
}
|
||||||
str->qs_append(m_offset);
|
str->qs_append(m_offset);
|
||||||
@ -3403,9 +3403,9 @@ sp_instr_set_row_field::print(String *str)
|
|||||||
if (str->reserve(rsrv))
|
if (str->reserve(rsrv))
|
||||||
return;
|
return;
|
||||||
str->qs_append(STRING_WITH_LEN("set "));
|
str->qs_append(STRING_WITH_LEN("set "));
|
||||||
str->qs_append(var->name.str, var->name.length);
|
str->qs_append(&var->name);
|
||||||
str->qs_append('.');
|
str->qs_append('.');
|
||||||
str->qs_append(def->field_name.str, def->field_name.length);
|
str->qs_append(&def->field_name);
|
||||||
str->qs_append('@');
|
str->qs_append('@');
|
||||||
str->qs_append(m_offset);
|
str->qs_append(m_offset);
|
||||||
str->qs_append('[');
|
str->qs_append('[');
|
||||||
@ -3461,13 +3461,13 @@ sp_instr_set_row_field_by_name::print(String *str)
|
|||||||
if (str->reserve(rsrv))
|
if (str->reserve(rsrv))
|
||||||
return;
|
return;
|
||||||
str->qs_append(STRING_WITH_LEN("set "));
|
str->qs_append(STRING_WITH_LEN("set "));
|
||||||
str->qs_append(var->name.str, var->name.length);
|
str->qs_append(&var->name);
|
||||||
str->qs_append('.');
|
str->qs_append('.');
|
||||||
str->qs_append(m_field_name.str, m_field_name.length);
|
str->qs_append(&m_field_name);
|
||||||
str->qs_append('@');
|
str->qs_append('@');
|
||||||
str->qs_append(m_offset);
|
str->qs_append(m_offset);
|
||||||
str->qs_append("[\"",2);
|
str->qs_append("[\"",2);
|
||||||
str->qs_append(m_field_name.str, m_field_name.length);
|
str->qs_append(&m_field_name);
|
||||||
str->qs_append("\"]",2);
|
str->qs_append("\"]",2);
|
||||||
str->qs_append(' ');
|
str->qs_append(' ');
|
||||||
m_value->print(str, enum_query_type(QT_ORDINARY |
|
m_value->print(str, enum_query_type(QT_ORDINARY |
|
||||||
@ -4120,7 +4120,7 @@ sp_instr_cfetch::print(String *str)
|
|||||||
if (str->reserve(pv->name.length+SP_INSTR_UINT_MAXLEN+2))
|
if (str->reserve(pv->name.length+SP_INSTR_UINT_MAXLEN+2))
|
||||||
return;
|
return;
|
||||||
str->qs_append(' ');
|
str->qs_append(' ');
|
||||||
str->qs_append(pv->name.str, pv->name.length);
|
str->qs_append(&pv->name);
|
||||||
str->qs_append('@');
|
str->qs_append('@');
|
||||||
str->qs_append(pv->offset);
|
str->qs_append(pv->offset);
|
||||||
}
|
}
|
||||||
|
@ -8381,18 +8381,18 @@ static void add_user_parameters(String *result, ACL_USER* acl_user,
|
|||||||
{
|
{
|
||||||
DBUG_ASSERT(acl_user->salt_len);
|
DBUG_ASSERT(acl_user->salt_len);
|
||||||
result->append(STRING_WITH_LEN(" IDENTIFIED BY PASSWORD '"));
|
result->append(STRING_WITH_LEN(" IDENTIFIED BY PASSWORD '"));
|
||||||
result->append(acl_user->auth_string.str, acl_user->auth_string.length);
|
result->append(&acl_user->auth_string);
|
||||||
result->append('\'');
|
result->append('\'');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result->append(STRING_WITH_LEN(" IDENTIFIED VIA "));
|
result->append(STRING_WITH_LEN(" IDENTIFIED VIA "));
|
||||||
result->append(acl_user->plugin.str, acl_user->plugin.length);
|
result->append(&acl_user->plugin);
|
||||||
if (acl_user->auth_string.length)
|
if (acl_user->auth_string.length)
|
||||||
{
|
{
|
||||||
result->append(STRING_WITH_LEN(" USING '"));
|
result->append(STRING_WITH_LEN(" USING '"));
|
||||||
result->append(acl_user->auth_string.str, acl_user->auth_string.length);
|
result->append(&acl_user->auth_string);
|
||||||
result->append('\'');
|
result->append('\'');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -837,7 +837,7 @@ static bool write_execute_load_query_log_event(THD *thd, sql_exchange* ex,
|
|||||||
if (n++)
|
if (n++)
|
||||||
query_str.append(STRING_WITH_LEN(", "));
|
query_str.append(STRING_WITH_LEN(", "));
|
||||||
append_identifier(thd, &query_str, item->name.str, item->name.length);
|
append_identifier(thd, &query_str, item->name.str, item->name.length);
|
||||||
query_str.append(val->name.str, val->name.length);
|
query_str.append(&val->name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7644,28 +7644,23 @@ mysql_new_select(LEX *lex, bool move_down, SELECT_LEX *select_lex)
|
|||||||
@param var_name Variable name
|
@param var_name Variable name
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void create_select_for_variable(const char *var_name)
|
void create_select_for_variable(THD *thd, LEX_CSTRING *var_name)
|
||||||
{
|
{
|
||||||
THD *thd;
|
|
||||||
LEX *lex;
|
LEX *lex;
|
||||||
LEX_CSTRING tmp;
|
|
||||||
Item *var;
|
Item *var;
|
||||||
char buff[MAX_SYS_VAR_LENGTH*2+4+8], *end;
|
char buff[MAX_SYS_VAR_LENGTH*2+4+8], *end;
|
||||||
DBUG_ENTER("create_select_for_variable");
|
DBUG_ENTER("create_select_for_variable");
|
||||||
|
|
||||||
thd= current_thd;
|
|
||||||
lex= thd->lex;
|
lex= thd->lex;
|
||||||
mysql_init_select(lex);
|
mysql_init_select(lex);
|
||||||
lex->sql_command= SQLCOM_SELECT;
|
lex->sql_command= SQLCOM_SELECT;
|
||||||
tmp.str= var_name;
|
|
||||||
tmp.length=strlen(var_name);
|
|
||||||
/*
|
/*
|
||||||
We set the name of Item to @@session.var_name because that then is used
|
We set the name of Item to @@session.var_name because that then is used
|
||||||
as the column name in the output.
|
as the column name in the output.
|
||||||
*/
|
*/
|
||||||
if ((var= get_system_var(thd, OPT_SESSION, tmp, null_clex_str)))
|
if ((var= get_system_var(thd, OPT_SESSION, var_name, &null_clex_str)))
|
||||||
{
|
{
|
||||||
end= strxmov(buff, "@@session.", var_name, NullS);
|
end= strxmov(buff, "@@session.", var_name->str, NullS);
|
||||||
var->set_name(thd, buff, end-buff, system_charset_info);
|
var->set_name(thd, buff, end-buff, system_charset_info);
|
||||||
add_item_to_list(thd, var);
|
add_item_to_list(thd, var);
|
||||||
}
|
}
|
||||||
|
@ -93,7 +93,7 @@ void mysql_parse(THD *thd, char *rawbuf, uint length,
|
|||||||
Parser_state *parser_state, bool is_com_multi,
|
Parser_state *parser_state, bool is_com_multi,
|
||||||
bool is_next_command);
|
bool is_next_command);
|
||||||
bool mysql_new_select(LEX *lex, bool move_down, SELECT_LEX *sel);
|
bool mysql_new_select(LEX *lex, bool move_down, SELECT_LEX *sel);
|
||||||
void create_select_for_variable(const char *var_name);
|
void create_select_for_variable(THD *thd, LEX_CSTRING *var_name);
|
||||||
void create_table_set_open_action_and_adjust_tables(LEX *lex);
|
void create_table_set_open_action_and_adjust_tables(LEX *lex);
|
||||||
void mysql_init_multi_delete(LEX *lex);
|
void mysql_init_multi_delete(LEX *lex);
|
||||||
bool multi_delete_set_locks_and_link_aux_tables(LEX *lex);
|
bool multi_delete_set_locks_and_link_aux_tables(LEX *lex);
|
||||||
|
@ -1773,7 +1773,7 @@ static void append_create_options(THD *thd, String *packet,
|
|||||||
if (opt->quoted_value)
|
if (opt->quoted_value)
|
||||||
append_unescaped(packet, opt->value.str, opt->value.length);
|
append_unescaped(packet, opt->value.str, opt->value.length);
|
||||||
else
|
else
|
||||||
packet->append(opt->value.str, opt->value.length);
|
packet->append(&opt->value);
|
||||||
}
|
}
|
||||||
if (in_comment)
|
if (in_comment)
|
||||||
packet->append(STRING_WITH_LEN(" */"));
|
packet->append(STRING_WITH_LEN(" */"));
|
||||||
@ -7089,7 +7089,7 @@ static int get_schema_partitions_record(THD *thd, TABLE_LIST *tables,
|
|||||||
tmp_res.length(0);
|
tmp_res.length(0);
|
||||||
if (part_elem->has_null_value)
|
if (part_elem->has_null_value)
|
||||||
{
|
{
|
||||||
tmp_str.append("NULL");
|
tmp_str.append(STRING_WITH_LEN("NULL"));
|
||||||
if (num_items > 0)
|
if (num_items > 0)
|
||||||
tmp_str.append(",");
|
tmp_str.append(",");
|
||||||
}
|
}
|
||||||
@ -7098,7 +7098,7 @@ static int get_schema_partitions_record(THD *thd, TABLE_LIST *tables,
|
|||||||
if (part_info->column_list)
|
if (part_info->column_list)
|
||||||
{
|
{
|
||||||
if (part_info->part_field_list.elements > 1U)
|
if (part_info->part_field_list.elements > 1U)
|
||||||
tmp_str.append("(");
|
tmp_str.append(STRING_WITH_LEN("("));
|
||||||
if (get_partition_column_description(thd,
|
if (get_partition_column_description(thd,
|
||||||
part_info,
|
part_info,
|
||||||
list_value,
|
list_value,
|
||||||
|
@ -575,6 +575,10 @@ public:
|
|||||||
{
|
{
|
||||||
qs_append(str, (uint32)strlen(str));
|
qs_append(str, (uint32)strlen(str));
|
||||||
}
|
}
|
||||||
|
void qs_append(const LEX_CSTRING *str)
|
||||||
|
{
|
||||||
|
qs_append(str->str, str->length);
|
||||||
|
}
|
||||||
void qs_append(const char *str, uint32 len);
|
void qs_append(const char *str, uint32 len);
|
||||||
void qs_append_hex(const char *str, uint32 len);
|
void qs_append_hex(const char *str, uint32 len);
|
||||||
void qs_append(double d);
|
void qs_append(double d);
|
||||||
|
@ -688,7 +688,7 @@ static void build_trig_stmt_query(THD *thd, TABLE_LIST *tables,
|
|||||||
|
|
||||||
/* Create statement for storing trigger (without trigger order) */
|
/* Create statement for storing trigger (without trigger order) */
|
||||||
if (lex->trg_chistics.ordering_clause == TRG_ORDER_NONE)
|
if (lex->trg_chistics.ordering_clause == TRG_ORDER_NONE)
|
||||||
trigger_def->append(stmt_definition.str, stmt_definition.length);
|
trigger_def->append(&stmt_definition);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Copy data before FOLLOWS/PRECEDES trigger_name */
|
/* Copy data before FOLLOWS/PRECEDES trigger_name */
|
||||||
@ -923,8 +923,8 @@ err_without_cleanup:
|
|||||||
if (trigger_dropped)
|
if (trigger_dropped)
|
||||||
{
|
{
|
||||||
String drop_trg_query;
|
String drop_trg_query;
|
||||||
drop_trg_query.append("DROP TRIGGER /* generated by failed CREATE TRIGGER */ ");
|
drop_trg_query.append(STRING_WITH_LEN("DROP TRIGGER /* generated by failed CREATE TRIGGER */ "));
|
||||||
drop_trg_query.append(lex->spname->m_name.str);
|
drop_trg_query.append(&lex->spname->m_name);
|
||||||
/*
|
/*
|
||||||
We dropped an existing trigger and was not able to recreate it because
|
We dropped an existing trigger and was not able to recreate it because
|
||||||
of an internal error. Ensure it's also dropped on the slave.
|
of an internal error. Ensure it's also dropped on the slave.
|
||||||
|
@ -647,8 +647,7 @@ bool mysql_create_view(THD *thd, TABLE_LIST *views,
|
|||||||
{ C_STRING_WITH_LEN("ALTER ") },
|
{ C_STRING_WITH_LEN("ALTER ") },
|
||||||
{ C_STRING_WITH_LEN("CREATE OR REPLACE ") }};
|
{ C_STRING_WITH_LEN("CREATE OR REPLACE ") }};
|
||||||
|
|
||||||
buff.append(command[thd->lex->create_view->mode].str,
|
buff.append(&command[thd->lex->create_view->mode]);
|
||||||
command[thd->lex->create_view->mode].length);
|
|
||||||
view_store_options(thd, views, &buff);
|
view_store_options(thd, views, &buff);
|
||||||
buff.append(STRING_WITH_LEN("VIEW "));
|
buff.append(STRING_WITH_LEN("VIEW "));
|
||||||
|
|
||||||
@ -680,7 +679,7 @@ bool mysql_create_view(THD *thd, TABLE_LIST *views,
|
|||||||
buff.append(')');
|
buff.append(')');
|
||||||
}
|
}
|
||||||
buff.append(STRING_WITH_LEN(" AS "));
|
buff.append(STRING_WITH_LEN(" AS "));
|
||||||
buff.append(views->source.str, views->source.length);
|
buff.append(&views->source);
|
||||||
|
|
||||||
int errcode= query_error_code(thd, TRUE);
|
int errcode= query_error_code(thd, TRUE);
|
||||||
/*
|
/*
|
||||||
|
@ -10726,7 +10726,7 @@ variable_aux:
|
|||||||
thd->parse_error();
|
thd->parse_error();
|
||||||
MYSQL_YYABORT;
|
MYSQL_YYABORT;
|
||||||
}
|
}
|
||||||
if (!($$= get_system_var(thd, $2, $3, $4)))
|
if (!($$= get_system_var(thd, $2, &$3, &$4)))
|
||||||
MYSQL_YYABORT;
|
MYSQL_YYABORT;
|
||||||
if (!((Item_func_get_system_var*) $$)->is_written_to_binlog())
|
if (!((Item_func_get_system_var*) $$)->is_written_to_binlog())
|
||||||
Lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_VARIABLE);
|
Lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_VARIABLE);
|
||||||
@ -13035,9 +13035,15 @@ show_param:
|
|||||||
lex->sql_command= SQLCOM_SHOW_PRIVILEGES;
|
lex->sql_command= SQLCOM_SHOW_PRIVILEGES;
|
||||||
}
|
}
|
||||||
| COUNT_SYM '(' '*' ')' WARNINGS
|
| COUNT_SYM '(' '*' ')' WARNINGS
|
||||||
{ (void) create_select_for_variable("warning_count"); }
|
{
|
||||||
|
LEX_CSTRING var= {STRING_WITH_LEN("warning_count")};
|
||||||
|
(void) create_select_for_variable(thd, &var);
|
||||||
|
}
|
||||||
| COUNT_SYM '(' '*' ')' ERRORS
|
| COUNT_SYM '(' '*' ')' ERRORS
|
||||||
{ (void) create_select_for_variable("error_count"); }
|
{
|
||||||
|
LEX_CSTRING var= {STRING_WITH_LEN("error_count")};
|
||||||
|
(void) create_select_for_variable(thd, &var);
|
||||||
|
}
|
||||||
| WARNINGS opt_limit_clause
|
| WARNINGS opt_limit_clause
|
||||||
{ Lex->sql_command = SQLCOM_SHOW_WARNS;}
|
{ Lex->sql_command = SQLCOM_SHOW_WARNS;}
|
||||||
| ERRORS opt_limit_clause
|
| ERRORS opt_limit_clause
|
||||||
|
@ -10781,7 +10781,7 @@ variable_aux:
|
|||||||
thd->parse_error();
|
thd->parse_error();
|
||||||
MYSQL_YYABORT;
|
MYSQL_YYABORT;
|
||||||
}
|
}
|
||||||
if (!($$= get_system_var(thd, $2, $3, $4)))
|
if (!($$= get_system_var(thd, $2, &$3, &$4)))
|
||||||
MYSQL_YYABORT;
|
MYSQL_YYABORT;
|
||||||
if (!((Item_func_get_system_var*) $$)->is_written_to_binlog())
|
if (!((Item_func_get_system_var*) $$)->is_written_to_binlog())
|
||||||
Lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_VARIABLE);
|
Lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_VARIABLE);
|
||||||
@ -13123,9 +13123,15 @@ show_param:
|
|||||||
lex->sql_command= SQLCOM_SHOW_PRIVILEGES;
|
lex->sql_command= SQLCOM_SHOW_PRIVILEGES;
|
||||||
}
|
}
|
||||||
| COUNT_SYM '(' '*' ')' WARNINGS
|
| COUNT_SYM '(' '*' ')' WARNINGS
|
||||||
{ (void) create_select_for_variable("warning_count"); }
|
{
|
||||||
|
LEX_CSTRING var= {STRING_WITH_LEN("warning_count")};
|
||||||
|
(void) create_select_for_variable(thd, &var);
|
||||||
|
}
|
||||||
| COUNT_SYM '(' '*' ')' ERRORS
|
| COUNT_SYM '(' '*' ')' ERRORS
|
||||||
{ (void) create_select_for_variable("error_count"); }
|
{
|
||||||
|
LEX_CSTRING var= {STRING_WITH_LEN("error_count")};
|
||||||
|
(void) create_select_for_variable(thd, &var);
|
||||||
|
}
|
||||||
| WARNINGS opt_limit_clause
|
| WARNINGS opt_limit_clause
|
||||||
{ Lex->sql_command = SQLCOM_SHOW_WARNS;}
|
{ Lex->sql_command = SQLCOM_SHOW_WARNS;}
|
||||||
| ERRORS opt_limit_clause
|
| ERRORS opt_limit_clause
|
||||||
|
@ -539,7 +539,7 @@ static bool pack_expression(String *buf, Virtual_column_info *vcol,
|
|||||||
size_t len_off= buf->length();
|
size_t len_off= buf->length();
|
||||||
buf->q_append2b(0); // to be added later
|
buf->q_append2b(0); // to be added later
|
||||||
buf->q_append((char)vcol->name.length);
|
buf->q_append((char)vcol->name.length);
|
||||||
buf->q_append(vcol->name.str, vcol->name.length);
|
buf->q_append(&vcol->name);
|
||||||
size_t expr_start= buf->length();
|
size_t expr_start= buf->length();
|
||||||
vcol->print(buf);
|
vcol->print(buf);
|
||||||
size_t expr_len= buf->length() - expr_start;
|
size_t expr_len= buf->length() - expr_start;
|
||||||
|
@ -1325,22 +1325,17 @@ create_view_query(THD *thd, uchar** buf, size_t* buf_len)
|
|||||||
SELECT_LEX *select_lex= &lex->select_lex;
|
SELECT_LEX *select_lex= &lex->select_lex;
|
||||||
TABLE_LIST *first_table= select_lex->table_list.first;
|
TABLE_LIST *first_table= select_lex->table_list.first;
|
||||||
TABLE_LIST *views = first_table;
|
TABLE_LIST *views = first_table;
|
||||||
|
LEX_USER *definer;
|
||||||
String buff;
|
String buff;
|
||||||
const LEX_STRING command[3]=
|
const LEX_STRING command[3]=
|
||||||
{{ C_STRING_WITH_LEN("CREATE ") },
|
{{ C_STRING_WITH_LEN("CREATE ") },
|
||||||
{ C_STRING_WITH_LEN("ALTER ") },
|
{ C_STRING_WITH_LEN("ALTER ") },
|
||||||
{ C_STRING_WITH_LEN("CREATE OR REPLACE ") }};
|
{ C_STRING_WITH_LEN("CREATE OR REPLACE ") }};
|
||||||
|
|
||||||
buff.append(command[thd->lex->create_view->mode].str,
|
buff.append(&command[thd->lex->create_view->mode]);
|
||||||
command[thd->lex->create_view->mode].length);
|
|
||||||
|
|
||||||
LEX_USER *definer;
|
|
||||||
|
|
||||||
if (lex->definer)
|
if (lex->definer)
|
||||||
{
|
|
||||||
definer= get_current_user(thd, lex->definer);
|
definer= get_current_user(thd, lex->definer);
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
@ -52,6 +52,8 @@ PSZ Serialize(PGLOBAL g, PJSON jsp, char *fn, int pretty);
|
|||||||
bool SerializeArray(JOUT *js, PJAR jarp, bool b);
|
bool SerializeArray(JOUT *js, PJAR jarp, bool b);
|
||||||
bool SerializeObject(JOUT *js, PJOB jobp);
|
bool SerializeObject(JOUT *js, PJOB jobp);
|
||||||
bool SerializeValue(JOUT *js, PJVAL jvp);
|
bool SerializeValue(JOUT *js, PJVAL jvp);
|
||||||
|
bool IsNum(PSZ s);
|
||||||
|
char *NextChr(PSZ s, char sep);
|
||||||
|
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
/* Class JOUT. Used by Serialize. */
|
/* Class JOUT. Used by Serialize. */
|
||||||
|
@ -1815,7 +1815,7 @@ char *json_make_array(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
|||||||
return str;
|
return str;
|
||||||
} // end of json_make_array
|
} // end of json_make_array
|
||||||
|
|
||||||
void json_array_deinit(UDF_INIT* initid)
|
static void json_array_deinit(UDF_INIT* initid)
|
||||||
{
|
{
|
||||||
JsonFreeMem((PGLOBAL)initid->ptr);
|
JsonFreeMem((PGLOBAL)initid->ptr);
|
||||||
} // end of json_make_array_deinit
|
} // end of json_make_array_deinit
|
||||||
|
@ -53,8 +53,6 @@
|
|||||||
/* External functions. */
|
/* External functions. */
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
USETEMP UseTemp(void);
|
USETEMP UseTemp(void);
|
||||||
bool IsNum(PSZ s);
|
|
||||||
char *NextChr(PSZ s, char sep);
|
|
||||||
|
|
||||||
typedef struct _jncol {
|
typedef struct _jncol {
|
||||||
struct _jncol *Next;
|
struct _jncol *Next;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user