diff options
author | venu@myvenu.com <> | 2003-01-30 14:33:49 -0800 |
---|---|---|
committer | venu@myvenu.com <> | 2003-01-30 14:33:49 -0800 |
commit | 87206f104ac34eda5ce841f02f2b9822075cbe58 (patch) | |
tree | c52676f50266ebcedc4b4c5a6e10c1c47e4f35c1 /libmysql | |
parent | 81c580af37b85ea0142668dd1d679f025204de9b (diff) | |
download | mariadb-git-87206f104ac34eda5ce841f02f2b9822075cbe58.tar.gz |
Fix alloc_stmt_fields for non-select statements
Add tests for show commands + MYSQL_TYPE_NULL coverage
Diffstat (limited to 'libmysql')
-rw-r--r-- | libmysql/libmysql.c | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 08011c376fb..376f21a8a78 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -3932,19 +3932,40 @@ mysql_prepare(MYSQL *mysql, const char *query, ulong length) unsigned int alloc_stmt_fields(MYSQL_STMT *stmt) { - MYSQL_FIELD *fields; + MYSQL_FIELD *fields, *field, *end; + MEM_ROOT *alloc= &stmt->mem_root; if (!stmt->mysql->field_count) return 0; + stmt->field_count= stmt->mysql->field_count; - fields= stmt->mysql->fields; - if (!(stmt->fields= (MYSQL_FIELD *) alloc_root(&stmt->mem_root, - sizeof(fields))) || - !(stmt->bind= (MYSQL_BIND *) alloc_root(&stmt->mem_root, + /* + Get the field information for non-select statements + like SHOW and DESCRIBE commands + */ + if (!(stmt->fields= (MYSQL_FIELD *) alloc_root(alloc, + sizeof(MYSQL_FIELD) * stmt->field_count)) || + !(stmt->bind= (MYSQL_BIND *) alloc_root(alloc, sizeof(MYSQL_BIND ) * stmt->field_count))) return 0; - memcpy((char *)stmt->fields, (char *)fields, sizeof(fields)); + + for (fields= stmt->mysql->fields, end= fields+stmt->field_count, + field= stmt->fields; + field && fields < end; fields++, field++) + { + field->db = strdup_root(alloc,fields->db); + field->table = strdup_root(alloc,fields->table); + field->org_table= strdup_root(alloc,fields->org_table); + field->name = strdup_root(alloc,fields->name); + field->org_name = strdup_root(alloc,fields->org_name); + field->length = fields->length; + field->type = fields->type; + field->flags = fields->flags; + field->decimals = fields->decimals; + field->def = fields->def ? strdup_root(alloc,fields->def): 0; + field->max_length= 0; + } return stmt->field_count; } |