added checking for where clause on queries
This commit is contained in:
@ -1449,7 +1449,7 @@ static void parsing_info_set_plain_str(
|
||||
* @return string representing the query type value
|
||||
*/
|
||||
char* skygw_get_qtype_str(
|
||||
skygw_query_type_t qtype)
|
||||
skygw_query_type_t qtype)
|
||||
{
|
||||
int t1 = (int)qtype;
|
||||
int t2 = 1;
|
||||
@ -1461,26 +1461,72 @@ char* skygw_get_qtype_str(
|
||||
* t1 is completely cleared.
|
||||
*/
|
||||
while (t1 != 0)
|
||||
{
|
||||
if (t1&t2)
|
||||
{
|
||||
t = (skygw_query_type_t)t2;
|
||||
{
|
||||
if (t1&t2)
|
||||
{
|
||||
t = (skygw_query_type_t)t2;
|
||||
|
||||
if (qtype_str == NULL)
|
||||
{
|
||||
qtype_str = strdup(STRQTYPE(t));
|
||||
}
|
||||
else
|
||||
{
|
||||
size_t len = strlen(STRQTYPE(t));
|
||||
/** reallocate space for delimiter, new string and termination */
|
||||
qtype_str = (char *)realloc(qtype_str, strlen(qtype_str)+1+len+1);
|
||||
snprintf(qtype_str+strlen(qtype_str), 1+len+1, "|%s", STRQTYPE(t));
|
||||
}
|
||||
/** Remove found value from t1 */
|
||||
t1 &= ~t2;
|
||||
if (qtype_str == NULL)
|
||||
{
|
||||
qtype_str = strdup(STRQTYPE(t));
|
||||
}
|
||||
else
|
||||
{
|
||||
size_t len = strlen(STRQTYPE(t));
|
||||
/** reallocate space for delimiter, new string and termination */
|
||||
qtype_str = (char *)realloc(qtype_str, strlen(qtype_str)+1+len+1);
|
||||
snprintf(qtype_str+strlen(qtype_str), 1+len+1, "|%s", STRQTYPE(t));
|
||||
}
|
||||
/** Remove found value from t1 */
|
||||
t1 &= ~t2;
|
||||
}
|
||||
t2 <<= 1;
|
||||
}
|
||||
t2 <<= 1;
|
||||
}
|
||||
return qtype_str;
|
||||
}
|
||||
skygw_query_op_t query_classifier_get_operation(GWBUF* querybuf)
|
||||
{
|
||||
LEX* lex = get_lex(querybuf);
|
||||
skygw_query_op_t operation;
|
||||
if(lex){
|
||||
switch(lex->sql_command){
|
||||
case SQLCOM_SELECT:
|
||||
operation = QUERY_OP_SELECT;
|
||||
break;
|
||||
case SQLCOM_CREATE_TABLE:
|
||||
operation = QUERY_OP_CREATE_TABLE;
|
||||
break;
|
||||
case SQLCOM_CREATE_INDEX:
|
||||
operation = QUERY_OP_CREATE_INDEX;
|
||||
break;
|
||||
case SQLCOM_ALTER_TABLE:
|
||||
operation = QUERY_OP_ALTER_TABLE;
|
||||
break;
|
||||
case SQLCOM_UPDATE:
|
||||
operation = QUERY_OP_UPDATE;
|
||||
break;
|
||||
case SQLCOM_INSERT:
|
||||
operation = QUERY_OP_INSERT;
|
||||
break;
|
||||
case SQLCOM_INSERT_SELECT:
|
||||
operation = QUERY_OP_INSERT_SELECT;
|
||||
break;
|
||||
case SQLCOM_DELETE:
|
||||
operation = QUERY_OP_DELETE;
|
||||
break;
|
||||
case SQLCOM_TRUNCATE:
|
||||
operation = QUERY_OP_TRUNCATE;
|
||||
break;
|
||||
case SQLCOM_DROP_TABLE:
|
||||
operation = QUERY_OP_DROP_TABLE;
|
||||
break;
|
||||
case SQLCOM_DROP_INDEX:
|
||||
operation = QUERY_OP_DROP_INDEX;
|
||||
break;
|
||||
|
||||
default:
|
||||
operation = QUERY_OP_UNDEFINED;
|
||||
}
|
||||
}
|
||||
return operation;
|
||||
}
|
||||
|
@ -60,6 +60,12 @@ typedef enum {
|
||||
QUERY_TYPE_SHOW_TABLES = 0x400000 /*< Show list of tables */
|
||||
} skygw_query_type_t;
|
||||
|
||||
typedef enum {
|
||||
QUERY_OP_UNDEFINED, QUERY_OP_SELECT, QUERY_OP_CREATE_TABLE, QUERY_OP_CREATE_INDEX,
|
||||
QUERY_OP_ALTER_TABLE, QUERY_OP_UPDATE, QUERY_OP_INSERT, QUERY_OP_INSERT_SELECT,
|
||||
QUERY_OP_DELETE, QUERY_OP_TRUNCATE, QUERY_OP_DROP_TABLE, QUERY_OP_DROP_INDEX,
|
||||
|
||||
}skygw_query_op_t;
|
||||
|
||||
typedef struct parsing_info_st {
|
||||
#if defined(SS_DEBUG)
|
||||
@ -81,7 +87,7 @@ typedef struct parsing_info_st {
|
||||
* classify the query.
|
||||
*/
|
||||
skygw_query_type_t query_classifier_get_type(GWBUF* querybuf);
|
||||
|
||||
skygw_query_op_t query_classifier_get_operation(GWBUF* querybuf);
|
||||
/** Free THD context and close MYSQL */
|
||||
char* skygw_query_classifier_get_stmtname(MYSQL* mysql);
|
||||
char* skygw_get_created_table_name(GWBUF* querybuf);
|
||||
|
Reference in New Issue
Block a user