Merge branch 'Z3' into Z3_rabbit_partial

Conflicts:
	server/modules/routing/readwritesplit/readwritesplit.c
This commit is contained in:
Markus Makela
2014-09-04 13:40:26 +03:00
6 changed files with 52 additions and 19 deletions

View File

@ -1054,6 +1054,39 @@ char* skygw_get_created_table_name(GWBUF* querybuf)
} }
} }
/**
* Checks whether the query is a "real" query ie. SELECT,UPDATE,INSERT,DELETE or any variation of these.
* Queries that affect the underlying database are not considered as real queries and the queries that target
* specific row or variable data are regarded as the real queries.
* @param GWBUF to analyze
* @return true if the query is a real query, otherwise false
*/
bool skygw_is_real_query(GWBUF* querybuf)
{
LEX* lex = get_lex(querybuf);
if(lex){
switch(lex->sql_command){
case SQLCOM_SELECT:
return lex->all_selects_list->table_list.elements > 0;
case SQLCOM_UPDATE:
case SQLCOM_INSERT:
case SQLCOM_INSERT_SELECT:
case SQLCOM_DELETE:
case SQLCOM_TRUNCATE:
case SQLCOM_REPLACE:
case SQLCOM_REPLACE_SELECT:
case SQLCOM_PREPARE:
case SQLCOM_EXECUTE:
return true;
default:
return false;
}
}
return false;
}
/** /**
* Checks whether the buffer contains a DROP TABLE... query. * Checks whether the buffer contains a DROP TABLE... query.
* @param querybuf Buffer to inspect * @param querybuf Buffer to inspect

View File

@ -45,7 +45,7 @@ typedef enum {
QUERY_TYPE_PREPARE_NAMED_STMT = 0x0400, /*< Prepared stmt with name from user */ 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_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) */ QUERY_TYPE_SESSION_READ = 0x2000, /*< Read session data (from master 31.8.14) */
QUERY_TYPE_CREATE_TMP_TABLE = 0x4000, /*< Create temporary table */ QUERY_TYPE_CREATE_TMP_TABLE = 0x4000, /*< Create temporary table */
QUERY_TYPE_READ_TMP_TABLE = 0x8000 /*< Read temporary table */ QUERY_TYPE_READ_TMP_TABLE = 0x8000 /*< Read temporary table */
} skygw_query_type_t; } skygw_query_type_t;
@ -55,9 +55,9 @@ typedef struct parsing_info_st {
#if defined(SS_DEBUG) #if defined(SS_DEBUG)
skygw_chk_t pi_chk_top; skygw_chk_t pi_chk_top;
#endif #endif
void* pi_handle; /*< parsing info object pointer */ void* pi_handle; /*< parsing info object pointer */
char* pi_query_plain_str; /*< query as plain string */ char* pi_query_plain_str; /*< query as plain string */
void (*pi_done_fp)(void *); /*< clean-up function for parsing info */ void (*pi_done_fp)(void *); /*< clean-up function for parsing info */
#if defined(SS_DEBUG) #if defined(SS_DEBUG)
skygw_chk_t pi_chk_tail; skygw_chk_t pi_chk_tail;
#endif #endif

View File

@ -100,7 +100,7 @@ poll_add_dcb(DCB *dcb)
CHK_DCB(dcb); CHK_DCB(dcb);
ev.events = EPOLLIN | EPOLLOUT | EPOLLET; ev.events = EPOLLIN | EPOLLOUT | EPOLLET | EPOLLHUP;
ev.data.ptr = dcb; ev.data.ptr = dcb;
/*< /*<
@ -480,7 +480,7 @@ poll_waitevents(void *arg)
} /*< for */ } /*< for */
no_op = FALSE; no_op = FALSE;
} }
process_zombies: process_zombies:
zombies = dcb_process_zombies(thread_id); zombies = dcb_process_zombies(thread_id);
if (zombies == NULL) { if (zombies == NULL) {

View File

@ -97,14 +97,14 @@ typedef struct server {
* *
* These are a bitmap of attributes that may be applied to a server * These are a bitmap of attributes that may be applied to a server
*/ */
#define SERVER_RUNNING 0x0001 /**<< The server is up and running */ #define SERVER_RUNNING 0x0001 /**<< The server is up and running */
#define SERVER_MASTER 0x0002 /**<< The server is a master, i.e. can handle writes */ #define SERVER_MASTER 0x0002 /**<< The server is a master, i.e. can handle writes */
#define SERVER_SLAVE 0x0004 /**<< The server is a slave, i.e. can handle reads */ #define SERVER_SLAVE 0x0004 /**<< The server is a slave, i.e. can handle reads */
#define SERVER_JOINED 0x0008 /**<< The server is joined in a Galera cluster */ #define SERVER_JOINED 0x0008 /**<< The server is joined in a Galera cluster */
#define SERVER_NDB 0x0010 /**<< The server is part of a MySQL cluster setup */ #define SERVER_NDB 0x0010 /**<< The server is part of a MySQL cluster setup */
#define SERVER_MAINT 0x1000 /**<< Server is in maintenance mode */ #define SERVER_MAINT 0x0020 /**<< Server is in maintenance mode */
#define SERVER_SLAVE_OF_EXTERNAL_MASTER 0x0080 /**<< Server is slave of a Master outside the provided replication topology */ #define SERVER_SLAVE_OF_EXTERNAL_MASTER 0x0040 /**<< Server is slave of a Master outside the provided replication topology */
#define SERVER_STALE_STATUS 0x2000 /**<< Server stale status, monitor didn't update it */ #define SERVER_STALE_STATUS 0x0080 /**<< Server stale status, monitor didn't update it */
/** /**
* Is the server running - the macro returns true if the server is marked as running * Is the server running - the macro returns true if the server is marked as running

View File

@ -1607,10 +1607,10 @@ static int routeQuery(
check_drop_tmp_table(instance,router_session,querybuf,qtype); check_drop_tmp_table(instance,router_session,querybuf,qtype);
/** /**
* If autocommit is disabled or transaction is explicitly started * If autocommit is disabled or transaction is explicitly started
* transaction becomes active and master gets all statements until * transaction becomes active and master gets all statements until
* transaction is committed and autocommit is enabled again. * transaction is committed and autocommit is enabled again.
*/ */
if (router_cli_ses->rses_autocommit_enabled && if (router_cli_ses->rses_autocommit_enabled &&
QUERY_IS_TYPE(qtype, QUERY_TYPE_DISABLE_AUTOCOMMIT)) QUERY_IS_TYPE(qtype, QUERY_TYPE_DISABLE_AUTOCOMMIT))
{ {