From 442ac7fefb2ca19ca4206c41b8e0b964f8abce1e Mon Sep 17 00:00:00 2001 From: VilhoRaatikka Date: Tue, 24 Jun 2014 21:51:54 +0300 Subject: [PATCH] Added GWBUF type GWBUF_TYPE_SINGLE_STMT to indicate that buffer only includes single complete stmt. Added macro for checking the flag and changed existing routines as necessary. --- server/core/buffer.c | 43 ++++++++++++++++++++--------------------- server/include/buffer.h | 13 ++++++++----- 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/server/core/buffer.c b/server/core/buffer.c index db6da8bec..c71a5eb63 100644 --- a/server/core/buffer.c +++ b/server/core/buffer.c @@ -185,30 +185,28 @@ GWBUF *gwbuf_clone_transform( goto return_clonebuf; } - switch (src_type) + if (GWBUF_IS_TYPE_MYSQL(head)) { - case GWBUF_TYPE_MYSQL: - if (targettype == GWBUF_TYPE_PLAINSQL) - { - /** Crete reference to string part of buffer */ - clonebuf = gwbuf_clone_portion( - head, - 5, - GWBUF_LENGTH(head)-5); - ss_dassert(clonebuf != NULL); - /** Overwrite the type with new format */ - clonebuf->gwbuf_type = targettype; - } - else - { - clonebuf = NULL; - } - break; - - default: + if (GWBUF_TYPE_PLAINSQL == targettype) + { + /** Crete reference to string part of buffer */ + clonebuf = gwbuf_clone_portion( + head, + 5, + GWBUF_LENGTH(head)-5); + ss_dassert(clonebuf != NULL); + /** Overwrite the type with new format */ + gwbuf_set_type(clonebuf, targettype); + } + else + { clonebuf = NULL; - break; - } /*< switch (src_type) */ + } + } + else + { + clonebuf = NULL; + } return_clonebuf: return clonebuf; @@ -308,6 +306,7 @@ bool gwbuf_set_type( case GWBUF_TYPE_MYSQL: case GWBUF_TYPE_PLAINSQL: case GWBUF_TYPE_UNDEFINED: + case GWBUF_TYPE_SINGLE_STMT: /*< buffer contains one stmt */ buf->gwbuf_type |= type; succp = true; break; diff --git a/server/include/buffer.h b/server/include/buffer.h index 66c56322b..7e48052f4 100644 --- a/server/include/buffer.h +++ b/server/include/buffer.h @@ -46,13 +46,16 @@ typedef enum { - GWBUF_TYPE_UNDEFINED = 0x00, - GWBUF_TYPE_PLAINSQL = 0x01, - GWBUF_TYPE_MYSQL = 0x02 + GWBUF_TYPE_UNDEFINED = 0x00, + GWBUF_TYPE_PLAINSQL = 0x01, + GWBUF_TYPE_MYSQL = 0x02, + GWBUF_TYPE_SINGLE_STMT = 0x04 } gwbuf_type_t; -#define GWBUF_IS_TYPE_PLAINSQL(b) (b->gwbuf_type & GWBUF_TYPE_PLAINSQL) -#define GWBUF_IS_TYPE_MYSQL(b) (b->gwbuf_type & GWBUF_TYPE_MYSQL) +#define GWBUF_IS_TYPE_UNDEFINED(b) (b->gwbuf_type == 0) +#define GWBUF_IS_TYPE_PLAINSQL(b) (b->gwbuf_type & GWBUF_TYPE_PLAINSQL) +#define GWBUF_IS_TYPE_MYSQL(b) (b->gwbuf_type & GWBUF_TYPE_MYSQL) +#define GWBUF_IS_TYPE_SINGLE_STMT(b) (b->gwbuf_type & GWBUF_TYPE_SINGLE_STMT) /** * A structure to encapsulate the data in a form that the data itself can be