22 #include <drizzled/error.h>
23 #include <drizzled/function/str/strfunc.h>
24 #include <drizzled/session.h>
25 #include <drizzled/system_variables.h>
26 #include <plugin/compression/uncompress.h>
32 using namespace drizzled;
37 String *res= args[0]->val_str(str);
40 drizzled::error_t code;
49 if (res->length() <= 4)
51 push_warning_printf(&getSession(), DRIZZLE_ERROR::WARN_LEVEL_ERROR,
53 ER(ER_ZLIB_Z_DATA_ERROR));
58 new_size= uint4korr(res->ptr()) & 0x3FFFFFFF;
59 if (new_size > getSession().variables.max_allowed_packet)
61 push_warning_printf(&getSession(), DRIZZLE_ERROR::WARN_LEVEL_ERROR,
62 ER_TOO_BIG_FOR_UNCOMPRESS,
63 ER(ER_TOO_BIG_FOR_UNCOMPRESS),
64 getSession().variables.max_allowed_packet);
68 buffer.realloc(new_size);
70 if ((err= uncompress((Byte*)buffer.ptr(), &new_size,
71 ((
const Bytef*)res->ptr())+4,res->length())) == Z_OK)
73 buffer.length((uint32_t) new_size);
77 code= ((err == Z_BUF_ERROR) ? ER_ZLIB_Z_BUF_ERROR :
78 ((err == Z_MEM_ERROR) ? ER_ZLIB_Z_MEM_ERROR : ER_ZLIB_Z_DATA_ERROR));
79 push_warning(&getSession(), DRIZZLE_ERROR::WARN_LEVEL_ERROR, code, ER(code));
drizzled::String * val_str(drizzled::String *)