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
fd2925b7
Commit
fd2925b7
authored
Sep 24, 2003
by
vva@eagle.mysql.r18.ru
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fixed bug #1194
(changes in Item_func_set_user_var::update, ::val, ::val_str, ::val_int)
parent
ef8cd361
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
153 additions
and
17 deletions
+153
-17
mysql-test/r/user_var.result
mysql-test/r/user_var.result
+32
-0
mysql-test/t/user_var.test
mysql-test/t/user_var.test
+19
-0
sql/item_func.cc
sql/item_func.cc
+102
-17
No files found.
mysql-test/r/user_var.result
View file @
fd2925b7
...
...
@@ -42,3 +42,35 @@ select @a:=10, @b:=2, @a > @b, @a < @b;
select @a:="10", @b:="2", @a > @b, @a < @b;
@a:="10" @b:="2" @a > @b @a < @b
10 2 0 1
select @a:=1;
@a:=1
1
select @a, @a:=1;
@a @a:=1
1 1
create table t1 (id int);
insert into t1 values (1);
select @c:=0;
@c:=0
0
update t1 SET id=(@c:=@c+1);
select @c;
@c
1
select @c:=0;
@c:=0
0
update t1 set id=(@c:=@c+1);
select @c;
@c
1
select @c:=0;
@c:=0
0
select @c:=@c+1;
@c:=@c+1
1
drop table t1;
select @a:=10, @b:=2, @a>@b, @a:="10", @b:="2", @a>@b, @a:=10, @b:=2, @a>@b, @a:="10", @b:="2", @a>@b;
@a:=10 @b:=2 @a>@b @a:="10" @b:="2" @a>@b @a:=10 @b:=2 @a>@b @a:="10" @b:="2" @a>@b
10 2 1 10 2 0 10 2 1 10 2 0
mysql-test/t/user_var.test
View file @
fd2925b7
...
...
@@ -23,3 +23,22 @@ select @a:=10, @b:=1, @a > @b, @a < @b;
select
@
a
:=
"10"
,
@
b
:=
"1"
,
@
a
>
@
b
,
@
a
<
@
b
;
select
@
a
:=
10
,
@
b
:=
2
,
@
a
>
@
b
,
@
a
<
@
b
;
select
@
a
:=
"10"
,
@
b
:=
"2"
,
@
a
>
@
b
,
@
a
<
@
b
;
# Fixed bug #1194
select
@
a
:=
1
;
select
@
a
,
@
a
:=
1
;
create
table
t1
(
id
int
);
insert
into
t1
values
(
1
);
select
@
c
:=
0
;
update
t1
SET
id
=
(
@
c
:=@
c
+
1
);
select
@
c
;
select
@
c
:=
0
;
update
t1
set
id
=
(
@
c
:=@
c
+
1
);
select
@
c
;
select
@
c
:=
0
;
select
@
c
:=@
c
+
1
;
drop
table
t1
;
# just fof fun :)
select
@
a
:=
10
,
@
b
:=
2
,
@
a
>@
b
,
@
a
:=
"10"
,
@
b
:=
"2"
,
@
a
>@
b
,
@
a
:=
10
,
@
b
:=
2
,
@
a
>@
b
,
@
a
:=
"10"
,
@
b
:=
"2"
,
@
a
>@
b
;
\ No newline at end of file
sql/item_func.cc
View file @
fd2925b7
...
...
@@ -1903,48 +1903,132 @@ void Item_func_set_user_var::update_hash(void *ptr, uint length,
bool
Item_func_set_user_var
::
update
()
{
DBUG_ENTER
(
"Item_func_set_user_var::update"
);
switch
(
cached_result_type
)
{
case
REAL_RESULT
:
(
void
)
val
();
{
double
value
=
args
[
0
]
->
val
();
update_hash
((
void
*
)
&
value
,
sizeof
(
value
),
REAL_RESULT
);
break
;
}
case
INT_RESULT
:
(
void
)
val_int
();
{
longlong
value
=
args
[
0
]
->
val_int
();
update_hash
((
void
*
)
&
value
,
sizeof
(
longlong
),
INT_RESULT
);
break
;
}
case
STRING_RESULT
:
{
char
buffer
[
MAX_FIELD_WIDTH
];
String
tmp
(
buffer
,
sizeof
(
buffer
));
(
void
)
val_str
(
&
tmp
);
String
*
res
=
args
[
0
]
->
val_str
(
&
tmp
);
if
(
!
res
)
// Null value
update_hash
((
void
*
)
0
,
0
,
STRING_RESULT
);
else
update_hash
(
res
->
c_ptr
(),
res
->
length
()
+
1
,
STRING_RESULT
);
break
;
}
return
current_thd
->
fatal_error
;
}
DBUG_RETURN
(
current_thd
->
fatal_error
);
}
double
Item_func_set_user_var
::
val
()
{
double
value
=
args
[
0
]
->
val
();
update_hash
((
void
*
)
&
value
,
sizeof
(
value
),
REAL_RESULT
);
return
value
;
DBUG_ENTER
(
"Item_func_set_user_var::val"
);
switch
(
cached_result_type
)
{
case
REAL_RESULT
:
{
double
value
=
args
[
0
]
->
val
();
update_hash
((
void
*
)
&
value
,
sizeof
(
value
),
REAL_RESULT
);
return
value
;
}
case
INT_RESULT
:
{
longlong
value
=
args
[
0
]
->
val_int
();
update_hash
((
void
*
)
&
value
,
sizeof
(
longlong
),
INT_RESULT
);
return
value
;
}
case
STRING_RESULT
:
{
char
buffer
[
MAX_FIELD_WIDTH
];
String
tmp
(
buffer
,
sizeof
(
buffer
));
String
*
res
=
args
[
0
]
->
val_str
(
&
tmp
);
if
(
!
res
)
// Null value
update_hash
((
void
*
)
0
,
0
,
STRING_RESULT
);
else
update_hash
(
res
->
c_ptr
(),
res
->
length
()
+
1
,
STRING_RESULT
);
return
atof
(
res
->
c_ptr
());
}
}
DBUG_RETURN
(
args
[
0
]
->
val
());
}
longlong
Item_func_set_user_var
::
val_int
()
{
longlong
value
=
args
[
0
]
->
val_int
();
update_hash
((
void
*
)
&
value
,
sizeof
(
longlong
),
INT_RESULT
);
return
value
;
DBUG_ENTER
(
"Item_func_set_user_var::val_int"
);
switch
(
cached_result_type
)
{
case
REAL_RESULT
:
{
double
value
=
args
[
0
]
->
val
();
update_hash
((
void
*
)
&
value
,
sizeof
(
value
),
REAL_RESULT
);
return
(
longlong
)
value
;
}
case
INT_RESULT
:
{
longlong
value
=
args
[
0
]
->
val_int
();
update_hash
((
void
*
)
&
value
,
sizeof
(
longlong
),
INT_RESULT
);
return
value
;
}
case
STRING_RESULT
:
{
char
buffer
[
MAX_FIELD_WIDTH
];
String
tmp
(
buffer
,
sizeof
(
buffer
));
String
*
res
=
args
[
0
]
->
val_str
(
&
tmp
);
if
(
!
res
)
// Null value
update_hash
((
void
*
)
0
,
0
,
STRING_RESULT
);
else
update_hash
(
res
->
c_ptr
(),
res
->
length
()
+
1
,
STRING_RESULT
);
return
strtoull
(
res
->
c_ptr
(),
NULL
,
10
);
}
}
DBUG_RETURN
(
args
[
0
]
->
val_int
());
}
String
*
Item_func_set_user_var
::
val_str
(
String
*
str
)
{
String
*
res
=
args
[
0
]
->
val_str
(
str
);
if
(
!
res
)
// Null value
update_hash
((
void
*
)
0
,
0
,
STRING_RESULT
);
else
update_hash
(
res
->
c_ptr
(),
res
->
length
()
+
1
,
STRING_RESULT
);
return
res
;
DBUG_ENTER
(
"Item_func_set_user_var::val_str"
);
switch
(
cached_result_type
)
{
case
REAL_RESULT
:
{
double
value
=
args
[
0
]
->
val
();
update_hash
((
void
*
)
&
value
,
sizeof
(
value
),
REAL_RESULT
);
str
->
set
(
value
,
decimals
);
return
str
;
}
case
INT_RESULT
:
{
longlong
value
=
args
[
0
]
->
val_int
();
update_hash
((
void
*
)
&
value
,
sizeof
(
longlong
),
INT_RESULT
);
str
->
set
(
value
,
decimals
);
return
str
;
}
case
STRING_RESULT
:
{
char
buffer
[
MAX_FIELD_WIDTH
];
String
tmp
(
buffer
,
sizeof
(
buffer
));
String
*
res
=
args
[
0
]
->
val_str
(
&
tmp
);
if
(
!
res
)
// Null value
update_hash
((
void
*
)
0
,
0
,
STRING_RESULT
);
else
update_hash
(
res
->
c_ptr
(),
res
->
length
()
+
1
,
STRING_RESULT
);
return
res
;
}
}
DBUG_RETURN
(
args
[
0
]
->
val_str
(
str
));
}
...
...
@@ -1973,6 +2057,7 @@ user_var_entry *Item_func_get_user_var::get_entry()
String
*
Item_func_get_user_var
::
val_str
(
String
*
str
)
{
DBUG_ENTER
(
"Item_func_get_user_var::val_str"
);
user_var_entry
*
entry
=
get_entry
();
if
(
!
entry
)
return
NULL
;
...
...
@@ -1991,7 +2076,7 @@ Item_func_get_user_var::val_str(String *str)
}
break
;
}
return
str
;
DBUG_RETURN
(
str
)
;
}
...
...
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