diff -r 72946c7c68da -r 942bfe1843bc dbd/mysql/statement.c --- a/dbd/mysql/statement.c Fri Sep 18 12:54:32 2009 +0000 +++ b/dbd/mysql/statement.c Fri May 21 23:00:13 2010 +0000 @@ -33,11 +33,11 @@ switch (mysql_type) { case MYSQL_TYPE_TINY: - size = 4; + size = 1; break; case MYSQL_TYPE_YEAR: case MYSQL_TYPE_SHORT: - size = 4; + size = 2; break; case MYSQL_TYPE_INT24: size = 4; @@ -151,6 +151,14 @@ int p; + if (statement->metadata) { + /* + * free existing metadata from any previous executions + */ + mysql_free_result(statement->metadata); + statement->metadata = NULL; + } + if (!statement->stmt) { lua_pushboolean(L, 0); lua_pushstring(L, DBI_ERR_EXECUTE_INVALID); @@ -333,10 +341,24 @@ LUA_PUSH_ARRAY_NIL(d); } } else if (lua_push == LUA_PUSH_INTEGER) { - if (named_columns) { - LUA_PUSH_ATTRIB_INT(name, *(int *)(bind[i].buffer)); + if (fields[i].type == MYSQL_TYPE_YEAR || fields[i].type == MYSQL_TYPE_SHORT) { + if (named_columns) { + LUA_PUSH_ATTRIB_INT(name, *(short *)(bind[i].buffer)); + } else { + LUA_PUSH_ARRAY_INT(d, *(short *)(bind[i].buffer)); + } + } else if (fields[i].type == MYSQL_TYPE_TINY) { + if (named_columns) { + LUA_PUSH_ATTRIB_INT(name, (int)*(char *)(bind[i].buffer)); + } else { + LUA_PUSH_ARRAY_INT(d, (int)*(char *)(bind[i].buffer)); + } } else { - LUA_PUSH_ARRAY_INT(d, *(int *)(bind[i].buffer)); + if (named_columns) { + LUA_PUSH_ATTRIB_INT(name, *(int *)(bind[i].buffer)); + } else { + LUA_PUSH_ARRAY_INT(d, *(int *)(bind[i].buffer)); + } } } else if (lua_push == LUA_PUSH_NUMBER) { if (named_columns) {