/* ** Creates the lists of fields names and fields types. */ static void create_colinfo (lua_State *L, cur_data *cur) { MYSQL_FIELD *fields; char type[50]; int i; fields = mysql_fetch_fields(cur->my_res); lua_newtable (L); /* names */ lua_newtable (L); /* types */ for (i = 1; i <= cur->numcols; i++) { lua_pushstring (L, fields[i-1].name); lua_rawseti (L, -3, i); sprintf (type, "%.20s(%ld)", getcolumntype (fields[i-1].type), fields[i-1].length); lua_pushstring(L, type); lua_rawseti (L, -2, i); } /* Stores the references in the cursor structure */ cur->coltypes = luaL_ref (L, LUA_REGISTRYINDEX); cur->colnames = luaL_ref (L, LUA_REGISTRYINDEX); }
/* ** Return the list of field types as a table on top of the stack. */ static int cur_getcoltypes (lua_State *L) { cur_data *cur = getcursor (L); if (cur->coltypes != LUA_NOREF) lua_rawgeti (L, LUA_REGISTRYINDEX, cur->coltypes); else { int i; lua_newtable (L); for (i = 1; i <= cur->numcols; i++) { column_data *col = &(cur->cols[i-1]); lua_pushnumber (L, i); lua_pushstring (L, getcolumntype (col)); lua_rawset (L, -3); } lua_pushvalue (L, -1); cur->coltypes = luaL_ref (L, LUA_REGISTRYINDEX); } return 1; }