summaryrefslogtreecommitdiff
path: root/sql/sql_prepare.cc
diff options
context:
space:
mode:
authorunknown <konstantin@mysql.com>2004-04-30 03:00:55 +0400
committerunknown <konstantin@mysql.com>2004-04-30 03:00:55 +0400
commitbe5d750a241dbf103f7546b2f83d1bdc312eb5ac (patch)
tree4251bda68c1a8c77fe6324d5c55590bc1fd0af11 /sql/sql_prepare.cc
parent258a3d1678dc37363b7578a4cf61405aa6f7e4dc (diff)
parentd5237fd09f71ccc8e008118607f8f22af4be630e (diff)
downloadmariadb-git-be5d750a241dbf103f7546b2f83d1bdc312eb5ac.tar.gz
Merge bk-internal.mysql.com:/home/bk/mysql-4.1
into mysql.com:/home/kostja/mysql/mysql-4.1-u2 include/mysql.h: Auto merged libmysql/libmysql.c: Auto merged sql/sql_prepare.cc: Auto merged tests/client_test.c: Auto merged
Diffstat (limited to 'sql/sql_prepare.cc')
-rw-r--r--sql/sql_prepare.cc20
1 files changed, 16 insertions, 4 deletions
diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc
index ff650f9c66a..4630380967e 100644
--- a/sql/sql_prepare.cc
+++ b/sql/sql_prepare.cc
@@ -246,7 +246,9 @@ void set_param_tiny(Item_param *param, uchar **pos, ulong len)
if (len < 1)
return;
#endif
- param->set_int((longlong)(**pos));
+ int8 value= (int8) **pos;
+ param->set_int(param->unsigned_flag ? (longlong) ((uint8) value) :
+ (longlong) value);
*pos+= 1;
}
@@ -256,7 +258,9 @@ void set_param_short(Item_param *param, uchar **pos, ulong len)
if (len < 2)
return;
#endif
- param->set_int((longlong)sint2korr(*pos));
+ int16 value= sint2korr(*pos);
+ param->set_int(param->unsigned_flag ? (longlong) ((uint16) value) :
+ (longlong) value);
*pos+= 2;
}
@@ -266,7 +270,9 @@ void set_param_int32(Item_param *param, uchar **pos, ulong len)
if (len < 4)
return;
#endif
- param->set_int((longlong)sint4korr(*pos));
+ int32 value= sint4korr(*pos);
+ param->set_int(param->unsigned_flag ? (longlong) ((uint32) value) :
+ (longlong) value);
*pos+= 4;
}
@@ -535,10 +541,16 @@ static bool setup_conversion_functions(Prepared_statement *stmt,
Item_param **end= it + stmt->param_count;
for (; it < end; ++it)
{
+ ushort typecode;
+ const uint signed_bit= 1 << 15;
+
if (read_pos >= data_end)
DBUG_RETURN(1);
- setup_one_conversion_function(*it, *read_pos);
+
+ typecode= sint2korr(read_pos);
read_pos+= 2;
+ (**it).unsigned_flag= test(typecode & signed_bit);
+ setup_one_conversion_function(*it, (uchar) (typecode & ~signed_bit));
}
}
*data= read_pos;