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
aa3bce07
Commit
aa3bce07
authored
Dec 27, 2001
by
unknown
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bugfix for WHERE key=
@A
OR key=@b
Docs/manual.texi: Changelog sql/sql_select.cc: Cleanup
parent
42c224c3
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
72 additions
and
1 deletion
+72
-1
Docs/manual.texi
Docs/manual.texi
+5
-0
mysql-test/r/variables.result
mysql-test/r/variables.result
+11
-0
mysql-test/t/variables.test
mysql-test/t/variables.test
+13
-0
sql/item_func.cc
sql/item_func.cc
+38
-0
sql/item_func.h
sql/item_func.h
+4
-0
sql/sql_select.cc
sql/sql_select.cc
+1
-1
No files found.
Docs/manual.texi
View file @
aa3bce07
...
@@ -46888,6 +46888,11 @@ not yet 100% confident in this code.
...
@@ -46888,6 +46888,11 @@ not yet 100% confident in this code.
@appendixsubsec Changes in release 3.23.47
@appendixsubsec Changes in release 3.23.47
@itemize @bullet
@itemize @bullet
@item
@item
Fixed in when using the following construct:
@code{SELECT ... WHERE key=@@var_name OR $key=@@var_name2}
@item
Restrict InnoDB keys to 500 bytes.
@item
InnoDB now supports @code{NULL} in keys.
InnoDB now supports @code{NULL} in keys.
@item
@item
Fixed shutdown problem on HPUX. (Introduced in 3.23.46)
Fixed shutdown problem on HPUX. (Introduced in 3.23.46)
mysql-test/r/variables.result
View file @
aa3bce07
...
@@ -12,3 +12,14 @@ NULL NULL NULL NULL
...
@@ -12,3 +12,14 @@ NULL NULL NULL NULL
5 5 1 4
5 5 1 4
@t5
@t5
1.23456
1.23456
@min_cid:=min(c_id) @max_cid:=max(c_id)
1 4
c_id c_name c_country
1 Bozo USA
4 Mr. Floppy GB
c_id c_name c_country
1 Bozo USA
4 Mr. Floppy GB
c_id c_name c_country
1 Bozo USA
4 Mr. Floppy GB
mysql-test/t/variables.test
View file @
aa3bce07
#
#
# test variables
# test variables
#
#
drop
table
if
exists
t1
;
set
@
`test`
=
1
,
@
TEST
=
3
,
@
select
=
2
,
@
t5
=
1.23456
;
set
@
`test`
=
1
,
@
TEST
=
3
,
@
select
=
2
,
@
t5
=
1.23456
;
select
@
test
,
@
`select`
,
@
TEST
,
@
not_used
;
select
@
test
,
@
`select`
,
@
TEST
,
@
not_used
;
set
@
test_int
=
10
,
@
test_double
=
1
e
-
10
,
@
test_string
=
"abcdeghi"
,
@
test_string2
=
"abcdefghij"
,
@
select
=
NULL
;
set
@
test_int
=
10
,
@
test_double
=
1
e
-
10
,
@
test_string
=
"abcdeghi"
,
@
test_string2
=
"abcdefghij"
,
@
select
=
NULL
;
...
@@ -14,3 +15,15 @@ select @test_int,@test_double,@test_string,@test_string2;
...
@@ -14,3 +15,15 @@ select @test_int,@test_double,@test_string,@test_string2;
select
@
t1
:=
(
@
t2
:=
1
)
+@
t3
:=
4
,
@
t1
,
@
t2
,
@
t3
;
select
@
t1
:=
(
@
t2
:=
1
)
+@
t3
:=
4
,
@
t1
,
@
t2
,
@
t3
;
select
@
t5
;
select
@
t5
;
#
# Test problem with WHERE and variables
#
CREATE
TABLE
t1
(
c_id
INT
(
4
)
NOT
NULL
,
c_name
CHAR
(
20
),
c_country
CHAR
(
3
),
PRIMARY
KEY
(
c_id
));
INSERT
INTO
t1
VALUES
(
1
,
'Bozo'
,
'USA'
),(
2
,
'Ronald'
,
'USA'
),(
3
,
'Kinko'
,
'IRE'
),(
4
,
'Mr. Floppy'
,
'GB'
);
SELECT
@
min_cid
:=
min
(
c_id
),
@
max_cid
:=
max
(
c_id
)
from
t1
;
SELECT
*
FROM
t1
WHERE
c_id
=@
min_cid
OR
c_id
=@
max_cid
;
SELECT
*
FROM
t1
WHERE
c_id
=@
min_cid
OR
c_id
=@
max_cid
OR
c_id
=
666
;
ALTER
TABLE
t1
DROP
PRIMARY
KEY
;
select
*
from
t1
where
c_id
=@
min_cid
OR
c_id
=@
max_cid
;
drop
table
t1
;
sql/item_func.cc
View file @
aa3bce07
...
@@ -1772,6 +1772,16 @@ Item_func_set_user_var::val_str(String *str)
...
@@ -1772,6 +1772,16 @@ Item_func_set_user_var::val_str(String *str)
}
}
void
Item_func_set_user_var
::
print
(
String
*
str
)
{
str
->
append
(
'('
);
str
->
append
(
name
.
str
,
name
.
length
);
str
->
append
(
":="
,
2
);
args
[
0
]
->
print
(
str
);
str
->
append
(
')'
);
}
user_var_entry
*
Item_func_get_user_var
::
get_entry
()
user_var_entry
*
Item_func_get_user_var
::
get_entry
()
{
{
if
(
!
entry
||
!
entry
->
value
)
if
(
!
entry
||
!
entry
->
value
)
...
@@ -1864,6 +1874,34 @@ enum Item_result Item_func_get_user_var::result_type() const
...
@@ -1864,6 +1874,34 @@ enum Item_result Item_func_get_user_var::result_type() const
return
entry
->
type
;
return
entry
->
type
;
}
}
void
Item_func_get_user_var
::
print
(
String
*
str
)
{
str
->
append
(
'@'
);
str
->
append
(
name
.
str
,
name
.
length
);
str
->
append
(
')'
);
}
bool
Item_func_get_user_var
::
eq
(
const
Item
*
item
)
const
{
/* Assume we don't have rtti */
if
(
this
==
item
)
return
1
;
// Same item is same.
/* Check if other type is also a get_user_var() object */
#ifdef FIX_THIS
if
(
item
->
eq
==
&
Item_func_get_user_var
::
eq
)
return
0
;
#else
if
(
item
->
type
()
!=
FUNC_ITEM
||
((
Item_func
*
)
item
)
->
func_name
()
!=
func_name
())
return
0
;
#endif
Item_func_get_user_var
*
other
=
(
Item_func_get_user_var
*
)
item
;
return
(
name
.
length
==
other
->
name
.
length
&&
!
memcmp
(
name
.
str
,
other
->
name
.
str
,
name
.
length
));
}
longlong
Item_func_inet_aton
::
val_int
()
longlong
Item_func_inet_aton
::
val_int
()
{
{
uint
byte_result
=
0
;
uint
byte_result
=
0
;
...
...
sql/item_func.h
View file @
aa3bce07
...
@@ -817,6 +817,7 @@ public:
...
@@ -817,6 +817,7 @@ public:
enum
Item_result
result_type
()
const
{
return
cached_result_type
;
}
enum
Item_result
result_type
()
const
{
return
cached_result_type
;
}
bool
fix_fields
(
THD
*
thd
,
struct
st_table_list
*
tables
);
bool
fix_fields
(
THD
*
thd
,
struct
st_table_list
*
tables
);
void
fix_length_and_dec
();
void
fix_length_and_dec
();
void
print
(
String
*
str
);
const
char
*
func_name
()
const
{
return
"set_user_var"
;
}
const
char
*
func_name
()
const
{
return
"set_user_var"
;
}
};
};
...
@@ -835,13 +836,16 @@ public:
...
@@ -835,13 +836,16 @@ public:
longlong
val_int
();
longlong
val_int
();
String
*
val_str
(
String
*
str
);
String
*
val_str
(
String
*
str
);
void
fix_length_and_dec
();
void
fix_length_and_dec
();
void
print
(
String
*
str
);
enum
Item_result
result_type
()
const
;
enum
Item_result
result_type
()
const
;
const
char
*
func_name
()
const
{
return
"get_user_var"
;
}
const
char
*
func_name
()
const
{
return
"get_user_var"
;
}
bool
const_item
()
const
{
return
const_var_flag
;
}
bool
const_item
()
const
{
return
const_var_flag
;
}
table_map
used_tables
()
const
table_map
used_tables
()
const
{
return
const_var_flag
?
0
:
RAND_TABLE_BIT
;
}
{
return
const_var_flag
?
0
:
RAND_TABLE_BIT
;
}
bool
eq
(
const
Item
*
item
)
const
;
};
};
class
Item_func_inet_aton
:
public
Item_int_func
class
Item_func_inet_aton
:
public
Item_int_func
{
{
public:
public:
...
...
sql/sql_select.cc
View file @
aa3bce07
...
@@ -35,7 +35,7 @@ const char *join_type_str[]={ "UNKNOWN","system","const","eq_ref","ref",
...
@@ -35,7 +35,7 @@ const char *join_type_str[]={ "UNKNOWN","system","const","eq_ref","ref",
"MAYBE_REF"
,
"ALL"
,
"range"
,
"index"
,
"fulltext"
};
"MAYBE_REF"
,
"ALL"
,
"range"
,
"index"
,
"fulltext"
};
static
bool
make_join_statistics
(
JOIN
*
join
,
TABLE_LIST
*
tables
,
COND
*
conds
,
static
bool
make_join_statistics
(
JOIN
*
join
,
TABLE_LIST
*
tables
,
COND
*
conds
,
DYNAMIC_ARRAY
*
keyuse
);
DYNAMIC_ARRAY
*
keyuse
);
static
bool
update_ref_and_keys
(
THD
*
thd
,
DYNAMIC_ARRAY
*
keyuse
,
static
bool
update_ref_and_keys
(
THD
*
thd
,
DYNAMIC_ARRAY
*
keyuse
,
JOIN_TAB
*
join_tab
,
JOIN_TAB
*
join_tab
,
uint
tables
,
COND
*
conds
,
table_map
table_map
);
uint
tables
,
COND
*
conds
,
table_map
table_map
);
...
...
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