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.
This commit is contained in:
		@ -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;
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user