summaryrefslogtreecommitdiff
path: root/mysys/ma_dyncol.c
diff options
context:
space:
mode:
authorunknown <sanja@askmonty.org>2012-12-23 22:17:22 +0200
committerunknown <sanja@askmonty.org>2012-12-23 22:17:22 +0200
commit082ff5931770ed70df0ec1e85f81fa880a4d9e62 (patch)
tree4579610f7b0a509a97226da3cfc65ec26a018281 /mysys/ma_dyncol.c
parent40ae63dd65fb9e812f29d3520acb0ba6b64d3005 (diff)
downloadmariadb-git-082ff5931770ed70df0ec1e85f81fa880a4d9e62.tar.gz
Post-post review fixes.
Diffstat (limited to 'mysys/ma_dyncol.c')
-rw-r--r--mysys/ma_dyncol.c60
1 files changed, 47 insertions, 13 deletions
diff --git a/mysys/ma_dyncol.c b/mysys/ma_dyncol.c
index 34bb8b9de3d..575c2eceb11 100644
--- a/mysys/ma_dyncol.c
+++ b/mysys/ma_dyncol.c
@@ -2368,7 +2368,7 @@ dynamic_column_exists_internal(DYNAMIC_COLUMN *str, uint num_key,
/**
- List not-null columns in the packed string (only numeric foemat)
+ List not-null columns in the packed string (only numeric format)
@param str The packed string
@param array_of_uint Where to put reference on created array
@@ -2378,12 +2378,6 @@ dynamic_column_exists_internal(DYNAMIC_COLUMN *str, uint num_key,
enum enum_dyncol_func_result
dynamic_column_list(DYNAMIC_COLUMN *str, DYNAMIC_ARRAY *array_of_uint)
{
- return mariadb_dyncol_list(str, array_of_uint);
-}
-
-enum enum_dyncol_func_result
-mariadb_dyncol_list(DYNAMIC_COLUMN *str, DYNAMIC_ARRAY *array_of_uint)
-{
DYN_HEADER header;
uchar *read;
uint i;
@@ -2417,6 +2411,48 @@ mariadb_dyncol_list(DYNAMIC_COLUMN *str, DYNAMIC_ARRAY *array_of_uint)
return ER_DYNCOL_OK;
}
+/**
+ List not-null columns in the packed string (only numeric format)
+
+ @param str The packed string
+ @param array_of_uint Where to put reference on created array
+
+ @return ER_DYNCOL_* return code
+*/
+enum enum_dyncol_func_result
+mariadb_dyncol_list(DYNAMIC_COLUMN *str, uint *count, uint **nums)
+{
+ DYN_HEADER header;
+ uchar *read;
+ uint i;
+ enum enum_dyncol_func_result rc;
+
+ (*nums)= 0; /* In case of errors */
+ if (str->length == 0)
+ return ER_DYNCOL_OK; /* no columns */
+
+ if ((rc= init_read_hdr(&header, str)) < 0)
+ return rc;
+
+ if (header.format != dyncol_fmt_num)
+ return ER_DYNCOL_FORMAT;
+
+ if (header.entry_size * header.column_count + FIXED_HEADER_SIZE >
+ str->length)
+ return ER_DYNCOL_FORMAT;
+
+ if (!((*nums)= my_malloc(sizeof(uint) * header.column_count, MYF(0))))
+ return ER_DYNCOL_RESOURCE;
+
+ for (i= 0, read= header.header;
+ i < header.column_count;
+ i++, read+= header.entry_size)
+ {
+ (*nums)[i]= uint2korr(read);
+ }
+ (*count)= header.column_count;
+ return ER_DYNCOL_OK;
+}
/**
List not-null columns in the packed string (any format)
@@ -4058,7 +4094,7 @@ mariadb_dyncol_json_internal(DYNAMIC_COLUMN *str, DYNAMIC_STRING *json,
rc= ER_DYNCOL_RESOURCE;
- if (dynstr_append_mem(json, "[", 1))
+ if (dynstr_append_mem(json, "{", 1))
goto err;
for (i= 0, header.entry= header.header;
i < header.column_count;
@@ -4080,8 +4116,7 @@ mariadb_dyncol_json_internal(DYNAMIC_COLUMN *str, DYNAMIC_STRING *json,
rc= ER_DYNCOL_FORMAT;
goto err;
}
- if ((rc= dynamic_column_get_value(&header, &val)) < 0 ||
- dynstr_append_mem(json, "{", 1))
+ if ((rc= dynamic_column_get_value(&header, &val)) < 0)
goto err;
if (header.format == dyncol_fmt_num)
{
@@ -4125,12 +4160,11 @@ mariadb_dyncol_json_internal(DYNAMIC_COLUMN *str, DYNAMIC_STRING *json,
else
{
if ((rc= mariadb_dyncol_val_str(json, &val,
- &my_charset_utf8_general_ci, '"')) < 0 ||
- dynstr_append_mem(json, "}", 1))
+ &my_charset_utf8_general_ci, '"')) < 0)
goto err;
}
}
- if (dynstr_append_mem(json, "]", 1))
+ if (dynstr_append_mem(json, "}", 1))
{
rc= ER_DYNCOL_RESOURCE;
goto err;