Fix to bug http://bugs.skysql.com/show_bug.cgi?id=488. SHOW VARIABLES was treated as if it was session write command. Instead it is a read-only query. Changed to route that to master.

This commit is contained in:
VilhoRaatikka 2014-08-31 22:56:30 +03:00
parent 40416d424e
commit 40f85f9cad
3 changed files with 15 additions and 5 deletions

View File

@ -512,7 +512,15 @@ static skygw_query_type_t resolve_query_type(
}
else if (lex->option_type == OPT_SESSION)
{
type |= QUERY_TYPE_SESSION_WRITE;
/** SHOW commands are all reads to one backend */
if (lex->sql_command == SQLCOM_SHOW_VARIABLES)
{
type |= QUERY_TYPE_SESSION_READ;
}
else
{
type |= QUERY_TYPE_SESSION_WRITE;
}
goto return_qtype;
}
/**
@ -531,10 +539,11 @@ static skygw_query_type_t resolve_query_type(
force_data_modify_op_replication)
{
type |= QUERY_TYPE_SESSION_WRITE;
} else {
}
else
{
type |= QUERY_TYPE_WRITE;
}
goto return_qtype;
}

View File

@ -44,7 +44,8 @@ typedef enum {
QUERY_TYPE_COMMIT = 0x0200, /*< COMMIT */
QUERY_TYPE_PREPARE_NAMED_STMT = 0x0400, /*< Prepared stmt with name from user */
QUERY_TYPE_PREPARE_STMT = 0x0800, /*< Prepared stmt with id provided by server */
QUERY_TYPE_EXEC_STMT = 0x1000 /*< Execute prepared statement */
QUERY_TYPE_EXEC_STMT = 0x1000, /*< Execute prepared statement */
QUERY_TYPE_SESSION_READ = 0x2000 /*< Read session data (from master 31.8.14) */
} skygw_query_type_t;

View File

@ -1451,7 +1451,7 @@ static int routeQuery(
if (succp) /*< Have DCB of the target backend */
{
if ((ret = target_dcb->func.write(target_dcb, querybuf)) == 1)
if ((ret = target_dcb->func.write(target_dcb, gwbuf_clone(querybuf))) == 1)
{
backend_ref_t* bref;