Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
129c6040
Commit
129c6040
authored
Apr 30, 2005
by
monty@mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Setting a variable to CAST(NULL as X) set the result type of the variable to X. (Bug #6598)
parent
215be026
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
111 additions
and
6 deletions
+111
-6
mysql-test/r/bigint.result
mysql-test/r/bigint.result
+17
-0
mysql-test/r/user_var.result
mysql-test/r/user_var.result
+41
-0
mysql-test/t/bigint.test
mysql-test/t/bigint.test
+10
-0
mysql-test/t/user_var.test
mysql-test/t/user_var.test
+26
-0
sql/item_func.cc
sql/item_func.cc
+11
-4
sql/item_func.h
sql/item_func.h
+1
-0
sql/unireg.cc
sql/unireg.cc
+5
-2
No files found.
mysql-test/r/bigint.result
View file @
129c6040
...
...
@@ -128,3 +128,20 @@ t2.value64=t1.value64;
value64 value32 value64 value32
9223372036854775807 2 9223372036854775807 4
drop table t1, t2;
create table t1 select 1 as 'a';
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` bigint(1) NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
create table t1 select 9223372036854775809 as 'a';
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` bigint(19) unsigned NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1
select * from t1;
a
9223372036854775809
drop table t1;
mysql-test/r/user_var.result
View file @
129c6040
...
...
@@ -182,3 +182,44 @@ coercibility(@v1) coercibility(@v2) coercibility(@v3) coercibility(@v4)
set session @honk=99;
set one_shot @honk=99;
ERROR HY000: The 'SET ONE_SHOT' syntax is reserved for purposes internal to the MySQL server
set @first_var= NULL;
create table t1 select @first_var;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`@first_var` longblob
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
set @first_var= cast(NULL as signed integer);
create table t1 select @first_var;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`@first_var` bigint(20) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
set @first_var= NULL;
create table t1 select @first_var;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`@first_var` bigint(20) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
set @first_var= concat(NULL);
create table t1 select @first_var;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`@first_var` longblob
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
set @first_var=1;
set @first_var= cast(NULL as CHAR);
create table t1 select @first_var;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`@first_var` longtext
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
mysql-test/t/bigint.test
View file @
129c6040
...
...
@@ -104,3 +104,13 @@ t2.value64=t1.value64;
drop
table
t1
,
t2
;
#
# Test of CREATE ... SELECT and unsigned integers
#
create
table
t1
select
1
as
'a'
;
show
create
table
t1
;
drop
table
t1
;
create
table
t1
select
9223372036854775809
as
'a'
;
show
create
table
t1
;
select
*
from
t1
;
drop
table
t1
;
mysql-test/t/user_var.test
View file @
129c6040
...
...
@@ -119,3 +119,29 @@ select coercibility(@v1),coercibility(@v2),coercibility(@v3),coercibility(@v4);
set
session
@
honk
=
99
;
--
error
1382
set
one_shot
@
honk
=
99
;
#
# Bug #6598: problem with cast(NULL as signed integer);
#
set
@
first_var
=
NULL
;
create
table
t1
select
@
first_var
;
show
create
table
t1
;
drop
table
t1
;
set
@
first_var
=
cast
(
NULL
as
signed
integer
);
create
table
t1
select
@
first_var
;
show
create
table
t1
;
drop
table
t1
;
set
@
first_var
=
NULL
;
create
table
t1
select
@
first_var
;
show
create
table
t1
;
drop
table
t1
;
set
@
first_var
=
concat
(
NULL
);
create
table
t1
select
@
first_var
;
show
create
table
t1
;
drop
table
t1
;
set
@
first_var
=
1
;
set
@
first_var
=
cast
(
NULL
as
CHAR
);
create
table
t1
select
@
first_var
;
show
create
table
t1
;
drop
table
t1
;
sql/item_func.cc
View file @
129c6040
...
...
@@ -3271,7 +3271,8 @@ bool Item_func_set_user_var::fix_fields(THD *thd, TABLE_LIST *tables,
from the argument if the argument is NULL
and the variable has previously been initialized.
*/
if
(
!
entry
->
collation
.
collation
||
!
args
[
0
]
->
null_value
)
null_item
=
(
args
[
0
]
->
type
()
==
NULL_ITEM
);
if
(
!
entry
->
collation
.
collation
||
!
null_item
)
entry
->
collation
.
set
(
args
[
0
]
->
collation
.
collation
,
DERIVATION_IMPLICIT
);
collation
.
set
(
entry
->
collation
.
collation
,
DERIVATION_IMPLICIT
);
cached_result_type
=
args
[
0
]
->
result_type
();
...
...
@@ -3315,8 +3316,8 @@ update_hash(user_var_entry *entry, bool set_null, void *ptr, uint length,
char
*
pos
=
(
char
*
)
entry
+
ALIGN_SIZE
(
sizeof
(
user_var_entry
));
if
(
entry
->
value
&&
entry
->
value
!=
pos
)
my_free
(
entry
->
value
,
MYF
(
0
));
entry
->
value
=
0
;
entry
->
length
=
0
;
entry
->
value
=
0
;
entry
->
length
=
0
;
}
else
{
...
...
@@ -3355,9 +3356,9 @@ update_hash(user_var_entry *entry, bool set_null, void *ptr, uint length,
if
(
type
==
DECIMAL_RESULT
)
((
my_decimal
*
)
entry
->
value
)
->
fix_buffer_pointer
();
entry
->
length
=
length
;
entry
->
type
=
type
;
entry
->
collation
.
set
(
cs
,
dv
);
}
entry
->
type
=
type
;
return
0
;
}
...
...
@@ -3366,6 +3367,12 @@ bool
Item_func_set_user_var
::
update_hash
(
void
*
ptr
,
uint
length
,
Item_result
type
,
CHARSET_INFO
*
cs
,
Derivation
dv
)
{
/*
If we set a variable explicitely to NULL then keep the old
result type of the variable
*/
if
((
null_value
=
args
[
0
]
->
null_value
)
&&
null_item
)
type
=
entry
->
type
;
// Don't change type of item
if
(
::
update_hash
(
entry
,
(
null_value
=
args
[
0
]
->
null_value
),
ptr
,
length
,
type
,
cs
,
dv
))
{
...
...
sql/item_func.h
View file @
129c6040
...
...
@@ -1071,6 +1071,7 @@ class Item_func_set_user_var :public Item_func
char
buffer
[
MAX_FIELD_WIDTH
];
String
value
;
my_decimal
decimal_buff
;
bool
null_item
;
union
{
longlong
vint
;
...
...
sql/unireg.cc
View file @
129c6040
...
...
@@ -685,6 +685,9 @@ static bool make_empty_rec(THD *thd, File file,enum db_type table_type,
thd
->
count_cuted_fields
=
CHECK_FIELD_WARN
;
// To find wrong default values
while
((
field
=
it
++
))
{
/*
regfield don't have to be deleted as it's allocated with sql_alloc()
*/
Field
*
regfield
=
make_field
((
char
*
)
buff
+
field
->
offset
,
field
->
length
,
null_pos
,
null_count
&
7
,
...
...
@@ -696,7 +699,8 @@ static bool make_empty_rec(THD *thd, File file,enum db_type table_type,
field
->
interval
,
field
->
field_name
,
&
table
);
DBUG_ASSERT
(
regfield
);
if
(
!
regfield
)
goto
err
;
// End of memory
if
(
!
(
field
->
flags
&
NOT_NULL_FLAG
))
null_count
++
;
...
...
@@ -730,7 +734,6 @@ static bool make_empty_rec(THD *thd, File file,enum db_type table_type,
regfield
->
store
(
ER
(
ER_NO
),
(
uint
)
strlen
(
ER
(
ER_NO
)),
system_charset_info
);
else
regfield
->
reset
();
delete
regfield
;
}
/* Fill not used startpos */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment