137
Internal representation of the frm blob is:
144
#define BLOB_HEADER 12
148
packfrm is a method used to compress the frm file for storage in a
149
handler. This method was developed for the NDB handler and has been moved
150
here to serve also other uses.
154
data Data reference to frm file data.
155
len Length of frm file data
156
out:pack_data Reference to the pointer to the packed frm data
157
out:pack_len Length of packed frm file data
160
data is replaced with compressed content
167
int packfrm(uchar *data, size_t len,
168
uchar **pack_data, size_t *pack_len)
171
size_t org_len, comp_len, blob_len;
173
DBUG_ENTER("packfrm");
174
DBUG_PRINT("enter", ("data: 0x%lx len: %lu", (long) data, (ulong) len));
178
if (my_compress((uchar*)data, &org_len, &comp_len))
181
DBUG_PRINT("info", ("org_len: %lu comp_len: %lu", (ulong) org_len,
183
DBUG_DUMP("compressed", data, org_len);
186
blob_len= BLOB_HEADER + org_len;
187
if (!(blob= (uchar*) my_malloc(blob_len,MYF(MY_WME))))
190
/* Store compressed blob in machine independent format */
192
int4store(blob+4, (uint32) len);
193
int4store(blob+8, (uint32) org_len); /* compressed length */
195
/* Copy frm data into blob, already in machine independent format */
196
memcpy(blob+BLOB_HEADER, data, org_len);
202
DBUG_PRINT("exit", ("pack_data: 0x%lx pack_len: %lu",
203
(long) *pack_data, (ulong) *pack_len));
210
unpackfrm is a method used to decompress the frm file received from a
211
handler. This method was developed for the NDB handler and has been moved
212
here to serve also other uses for other clustered storage engines.
216
pack_data Data reference to packed frm file data
217
out:unpack_data Reference to the pointer to the unpacked frm data
218
out:unpack_len Length of unpacked frm file data
225
int unpackfrm(uchar **unpack_data, size_t *unpack_len,
226
const uchar *pack_data)
229
size_t complen, orglen;
231
DBUG_ENTER("unpackfrm");
232
DBUG_PRINT("enter", ("pack_data: 0x%lx", (long) pack_data));
234
ver= uint4korr(pack_data);
235
orglen= uint4korr(pack_data+4);
236
complen= uint4korr(pack_data+8);
238
DBUG_PRINT("blob",("ver: %lu complen: %lu orglen: %lu",
239
ver, (ulong) complen, (ulong) orglen));
240
DBUG_DUMP("blob->data", pack_data + BLOB_HEADER, complen);
244
if (!(data= my_malloc(max(orglen, complen), MYF(MY_WME))))
246
memcpy(data, pack_data + BLOB_HEADER, complen);
248
if (my_uncompress(data, complen, &orglen))
250
my_free(data, MYF(0));
257
DBUG_PRINT("exit", ("frmdata: 0x%lx len: %lu", (long) *unpack_data,
258
(ulong) *unpack_len));