MXS-1275: Accept @@[SESSION|GLOBAL].sql_mode = ...
This commit is contained in:
@ -39,8 +39,10 @@ public:
|
|||||||
UNUSED_FIRST = 0xFF,
|
UNUSED_FIRST = 0xFF,
|
||||||
TK_DEFAULT,
|
TK_DEFAULT,
|
||||||
TK_GLOBAL,
|
TK_GLOBAL,
|
||||||
|
TK_GLOBAL_VAR,
|
||||||
TK_ORACLE,
|
TK_ORACLE,
|
||||||
TK_SESSION,
|
TK_SESSION,
|
||||||
|
TK_SESSION_VAR,
|
||||||
TK_SET,
|
TK_SET,
|
||||||
TK_SQL_MODE,
|
TK_SQL_MODE,
|
||||||
};
|
};
|
||||||
@ -353,6 +355,18 @@ private:
|
|||||||
rv = parse_set(pSql_mode);
|
rv = parse_set(pSql_mode);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case TK_GLOBAL_VAR:
|
||||||
|
case TK_SESSION_VAR:
|
||||||
|
if (next_token() == '.')
|
||||||
|
{
|
||||||
|
rv = parse_set(pSql_mode);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rv = ERROR;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case TK_SQL_MODE:
|
case TK_SQL_MODE:
|
||||||
if (next_token() == '=')
|
if (next_token() == '=')
|
||||||
{
|
{
|
||||||
@ -561,14 +575,19 @@ private:
|
|||||||
case '@':
|
case '@':
|
||||||
if (is_next_alpha('S', 2))
|
if (is_next_alpha('S', 2))
|
||||||
{
|
{
|
||||||
token = expect_token(MXS_CP_EXPECT_TOKEN("@@SESSION"), TK_SESSION);
|
token = expect_token(MXS_CP_EXPECT_TOKEN("@@SESSION"), TK_SESSION_VAR);
|
||||||
}
|
}
|
||||||
else if (is_next_alpha('G', 2))
|
else if (is_next_alpha('G', 2))
|
||||||
{
|
{
|
||||||
token = expect_token(MXS_CP_EXPECT_TOKEN("@@GLOBAL"), TK_GLOBAL);
|
token = expect_token(MXS_CP_EXPECT_TOKEN("@@GLOBAL"), TK_GLOBAL_VAR);
|
||||||
|
}
|
||||||
|
else if (is_next_alpha('L', 2))
|
||||||
|
{
|
||||||
|
token = expect_token(MXS_CP_EXPECT_TOKEN("@@LOCAL"), TK_SESSION_VAR);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case '.':
|
||||||
case '\'':
|
case '\'':
|
||||||
case '"':
|
case '"':
|
||||||
case '`':
|
case '`':
|
||||||
|
@ -60,6 +60,16 @@ struct TEST_CASE
|
|||||||
P::IS_SET_SQL_MODE,
|
P::IS_SET_SQL_MODE,
|
||||||
P::DEFAULT
|
P::DEFAULT
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"SET SQL_MODE=DEFAULT;",
|
||||||
|
P::IS_SET_SQL_MODE,
|
||||||
|
P::DEFAULT
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SET SQL_MODE=DEFAULT; ",
|
||||||
|
P::IS_SET_SQL_MODE,
|
||||||
|
P::DEFAULT
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"-- This is a comment\nSET SQL_MODE=DEFAULT",
|
"-- This is a comment\nSET SQL_MODE=DEFAULT",
|
||||||
P::IS_SET_SQL_MODE,
|
P::IS_SET_SQL_MODE,
|
||||||
@ -135,6 +145,31 @@ struct TEST_CASE
|
|||||||
P::IS_SET_SQL_MODE,
|
P::IS_SET_SQL_MODE,
|
||||||
P::ORACLE
|
P::ORACLE
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"SET @@GLOBAL.SQL_MODE=ORACLE",
|
||||||
|
P::IS_SET_SQL_MODE,
|
||||||
|
P::ORACLE
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SET @@SESSION.SQL_MODE=ORACLE",
|
||||||
|
P::IS_SET_SQL_MODE,
|
||||||
|
P::ORACLE
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SET @@LOCAL.SQL_MODE=ORACLE",
|
||||||
|
P::IS_SET_SQL_MODE,
|
||||||
|
P::ORACLE
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SET @@LOCAL . SQL_MODE = ORACLE",
|
||||||
|
P::IS_SET_SQL_MODE,
|
||||||
|
P::ORACLE
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"SET @@SESSION.blah = 1234, @@GLOBAL.blahblah = something, sql_mode=ORACLE",
|
||||||
|
P::IS_SET_SQL_MODE,
|
||||||
|
P::ORACLE
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const int N_TEST_CASES = sizeof(test_cases)/sizeof(test_cases[0]);
|
const int N_TEST_CASES = sizeof(test_cases)/sizeof(test_cases[0]);
|
||||||
@ -286,6 +321,15 @@ int test()
|
|||||||
rv = EXIT_FAILURE;
|
rv = EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (rv == EXIT_SUCCESS)
|
||||||
|
{
|
||||||
|
cout << "OK" << endl;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cout << "ERROR" << endl;
|
||||||
|
}
|
||||||
|
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -294,7 +338,7 @@ int test()
|
|||||||
|
|
||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
int rc = EXIT_SUCCESS;
|
int rv = EXIT_SUCCESS;
|
||||||
|
|
||||||
srand(time(NULL));
|
srand(time(NULL));
|
||||||
|
|
||||||
@ -304,7 +348,7 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
if (mxs_log_init(NULL, ".", MXS_LOG_TARGET_DEFAULT))
|
if (mxs_log_init(NULL, ".", MXS_LOG_TARGET_DEFAULT))
|
||||||
{
|
{
|
||||||
rc = test();
|
rv = test();
|
||||||
|
|
||||||
mxs_log_finish();
|
mxs_log_finish();
|
||||||
}
|
}
|
||||||
@ -313,5 +357,5 @@ int main(int argc, char* argv[])
|
|||||||
cerr << "error: Could not initialize log." << endl;
|
cerr << "error: Could not initialize log." << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
return rc;
|
return rv;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user