diff options
author | unknown <konstantin@mysql.com> | 2004-04-30 03:00:55 +0400 |
---|---|---|
committer | unknown <konstantin@mysql.com> | 2004-04-30 03:00:55 +0400 |
commit | be5d750a241dbf103f7546b2f83d1bdc312eb5ac (patch) | |
tree | 4251bda68c1a8c77fe6324d5c55590bc1fd0af11 /sql/sql_prepare.cc | |
parent | 258a3d1678dc37363b7578a4cf61405aa6f7e4dc (diff) | |
parent | d5237fd09f71ccc8e008118607f8f22af4be630e (diff) | |
download | mariadb-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.cc | 20 |
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; |