Merge branch '2.3' into 2.4

This commit is contained in:
Johan Wikman
2019-10-07 16:17:53 +03:00
7 changed files with 44 additions and 18 deletions

View File

@ -985,31 +985,41 @@ static uint32_t resolve_query_type(parsing_info_t* pi, THD* thd)
*/ */
else if (lex->sql_command == SQLCOM_SET_OPTION) else if (lex->sql_command == SQLCOM_SET_OPTION)
{ {
type |= QUERY_TYPE_SESSION_WRITE; switch (get_set_type(pi->pi_query_plain_str))
if (get_set_type(pi->pi_query_plain_str) == SET_TYPE_UNKNOWN)
{ {
/** Either user- or system variable write */ case SET_TYPE_PASSWORD:
List_iterator<set_var_base> ilist(lex->var_list); type |= QUERY_TYPE_WRITE;
size_t n = 0; break;
while (set_var_base* var = ilist++) case SET_TYPE_UNKNOWN:
{ {
if (var->is_system()) type |= QUERY_TYPE_SESSION_WRITE;
/** Either user- or system variable write */
List_iterator<set_var_base> ilist(lex->var_list);
size_t n = 0;
while (set_var_base* var = ilist++)
{
if (var->is_system())
{
type |= QUERY_TYPE_GSYSVAR_WRITE;
}
else
{
type |= QUERY_TYPE_USERVAR_WRITE;
}
++n;
}
if (n == 0)
{ {
type |= QUERY_TYPE_GSYSVAR_WRITE; type |= QUERY_TYPE_GSYSVAR_WRITE;
} }
else
{
type |= QUERY_TYPE_USERVAR_WRITE;
}
++n;
} }
break;
if (n == 0) default:
{ type |= QUERY_TYPE_SESSION_WRITE;
type |= QUERY_TYPE_GSYSVAR_WRITE;
}
} }
} }
else else

View File

@ -2743,6 +2743,13 @@ public:
} }
break; break;
case TK_SET:
if (m_keyword_2 == TK_PASSWORD)
{
m_type_mask = QUERY_TYPE_WRITE;
}
break;
case TK_START: case TK_START:
switch (m_keyword_2) switch (m_keyword_2)
{ {
@ -2962,6 +2969,9 @@ public:
&& pVariable->op == TK_ID && pVariable->op == TK_ID
&& strcasecmp(pVariable->u.zToken, "password") == 0) && strcasecmp(pVariable->u.zToken, "password") == 0)
{ {
// Even though SET PASSWORD looks like a session command it
// is not, the password change will be replicated to slaves.
m_type_mask = QUERY_TYPE_WRITE;
// Ok, it was, so we break out. // Ok, it was, so we break out.
i = pList->nExpr; i = pList->nExpr;
break; break;

View File

@ -634,7 +634,7 @@ columnid(A) ::= nm(X). {
NAMES NEXT NAMES NEXT
NO NO
OF OFFSET OPEN OF OFFSET OPEN
PARTITIONS PREVIOUS PARTITIONS PASSWORD PREVIOUS
QUERY QUICK QUERY QUICK
RAISE RECURSIVE /*REINDEX*/ RELEASE /*RENAME*/ /*REPLACE*/ RESET RESTRICT ROLLBACK ROLLUP ROW RAISE RECURSIVE /*REINDEX*/ RELEASE /*RENAME*/ /*REPLACE*/ RESET RESTRICT ROLLBACK ROLLUP ROW
SAVEPOINT SELECT_OPTIONS_KW /*SEQUENCE*/ SLAVE /*START*/ STATEMENT STATUS SAVEPOINT SELECT_OPTIONS_KW /*SEQUENCE*/ SLAVE /*START*/ STATEMENT STATUS

View File

@ -381,6 +381,7 @@ static Keyword aKeywordTable[] = {
#ifdef MAXSCALE #ifdef MAXSCALE
{ "PARTITION", "TK_PARTITION", ALWAYS }, { "PARTITION", "TK_PARTITION", ALWAYS },
{ "PARTITIONS", "TK_PARTITIONS", ALWAYS }, { "PARTITIONS", "TK_PARTITIONS", ALWAYS },
{ "PASSWORD", "TK_PASSWORD", ALWAYS },
{ "PERSISTENT", "TK_PERSISTENT", ALWAYS }, { "PERSISTENT", "TK_PERSISTENT", ALWAYS },
#endif #endif
#ifndef MAXSCALE #ifndef MAXSCALE

View File

@ -32,3 +32,4 @@ QUERY_TYPE_READ
QUERY_TYPE_READ QUERY_TYPE_READ
QUERY_TYPE_SESSION_WRITE|QUERY_TYPE_USERVAR_WRITE QUERY_TYPE_SESSION_WRITE|QUERY_TYPE_USERVAR_WRITE
QUERY_TYPE_READ|QUERY_TYPE_MASTER_READ QUERY_TYPE_READ|QUERY_TYPE_MASTER_READ
QUERY_TYPE_WRITE

View File

@ -32,3 +32,4 @@ select timediff(cast('2004-12-30 12:00:00' as time), '12:00:00');
(select 1 as a from t1) union all (select 1 from dual) limit 1; (select 1 as a from t1) union all (select 1 from dual) limit 1;
SET @saved_cs_client= @@character_set_client; SET @saved_cs_client= @@character_set_client;
SELECT 1 AS c1 FROM t1 ORDER BY ( SELECT 1 AS c2 FROM t1 GROUP BY GREATEST(LAST_INSERT_ID(), t1.a) ORDER BY GREATEST(LAST_INSERT_ID(), t1.a) LIMIT 1); SELECT 1 AS c1 FROM t1 ORDER BY ( SELECT 1 AS c2 FROM t1 GROUP BY GREATEST(LAST_INSERT_ID(), t1.a) ORDER BY GREATEST(LAST_INSERT_ID(), t1.a) LIMIT 1);
SET PASSWORD FOR 'user'@'10.0.0.1'='*C50EB75D7CB4C76B5264218B92BC69E6815B057A';

View File

@ -137,6 +137,9 @@ SET @saved_cs_client= @@character_set_client;
SELECT NEXTVAL(id_generator), context FROM t1 WHERE (a,b,c) >= (1,2,3); SELECT NEXTVAL(id_generator), context FROM t1 WHERE (a,b,c) >= (1,2,3);
select soundex(_utf8mb4 0xD091D092D093) as vx, gray_user_tag from user_extends where user_id > last_insert_id(); select soundex(_utf8mb4 0xD091D092D093) as vx, gray_user_tag from user_extends where user_id > last_insert_id();
# MXS-2713
SET PASSWORD FOR 'user'@'10.0.0.1'='*C50EB75D7CB4C76B5264218B92BC69E6815B057A';
# MXS-2432 # MXS-2432
RESET QUERY CACHE; RESET QUERY CACHE;
RESET MASTER; RESET MASTER;