dbd/mysql/statement.c

changeset 36
942bfe1843bc
parent 33
6c64c45e7d8f
child 45
7c968f66bccd
--- 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) {

mercurial