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
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
e8613e53
Commit
e8613e53
authored
Jun 01, 2005
by
mskold@mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixed handling of condition pushdown to storage engine of NO BETWEEN and NOT IN
parent
bf7f0508
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
647 additions
and
32 deletions
+647
-32
mysql-test/r/ndb_condition_pushdown.result
mysql-test/r/ndb_condition_pushdown.result
+329
-15
mysql-test/t/ndb_condition_pushdown.test
mysql-test/t/ndb_condition_pushdown.test
+311
-15
sql/ha_ndbcluster.cc
sql/ha_ndbcluster.cc
+7
-2
No files found.
mysql-test/r/ndb_condition_pushdown.result
View file @
e8613e53
...
...
@@ -303,6 +303,58 @@ order by auto;
auto
1
select auto from t1 where
(string not between "aaaa" and "cccc") and
(vstring not between "aaaa" and "cccc") and
(bin not between 0xAAAA and 0xCCCC) and
(vbin not between 0xAAAA and 0xCCCC) and
(tiny not between -3 and -1) and
(short not between -3 and -1) and
(medium not between -3 and -1) and
(long_int not between -3 and -1) and
(longlong not between -3 and -1) and
(utiny not between 1 and 3) and
(ushort not between 1 and 3) and
(umedium not between 1 and 3) and
(ulong not between 1 and 3) and
(ulonglong not between 1 and 3) and
(bits not between b'001' and b'011') and
(options not between 'one' and 'three') and
(flags not between 'one' and 'one,two,three') and
(date_field not between '1901-01-01' and '1903-03-03') and
(year_field not between '1901' and '1903') and
(time_field not between '01:01:01' and '03:03:03') and
(date_time not between '1901-01-01 01:01:01' and '1903-03-03 03:03:03')
order by auto;
auto
4
select auto from t1 where
("aaaa" not between string and string) and
("aaaa" not between vstring and vstring) and
(0xAAAA not between bin and bin) and
(0xAAAA not between vbin and vbin) and
(-1 not between tiny and tiny) and
(-1 not between short and short) and
(-1 not between medium and medium) and
(-1 not between long_int and long_int) and
(-1 not between longlong and longlong) and
(1 not between utiny and utiny) and
(1 not between ushort and ushort) and
(1 not between umedium and umedium) and
(1 not between ulong and ulong) and
(1 not between ulonglong and ulonglong) and
(b'001' not between bits and bits) and
('one' not between options and options) and
('one' not between flags and flags) and
('1901-01-01' not between date_field and date_field) and
('1901' not between year_field and year_field) and
('01:01:01' not between time_field and time_field) and
('1901-01-01 01:01:01' not between date_time and date_time)
order by auto;
auto
2
3
4
select auto from t1 where
string in("aaaa","cccc") and
vstring in("aaaa","cccc") and
bin in(0xAAAA,0xCCCC) and
...
...
@@ -333,11 +385,11 @@ select auto from t1 where
"aaaa" in(vstring) and
0xAAAA in(bin) and
0xAAAA in(vbin) and
/* -1 in(tiny) and */
/* -1 in (short) and */
/* -1 in(medium) and */
/* -1 in(long_int) and */
/* -1 in(longlong) and */
(-1 in(tiny)) and
(-1 in(short)) and
(-1 in(medium)) and
(-1 in(long_int)) and
(-1 in(longlong)) and
1 in(utiny) and
1 in(ushort) and
1 in(umedium) and
...
...
@@ -353,6 +405,59 @@ b'001' in(bits) and
order by auto;
auto
1
select auto from t1 where
string not in("aaaa","cccc") and
vstring not in("aaaa","cccc") and
bin not in(0xAAAA,0xCCCC) and
vbin not in(0xAAAA,0xCCCC) and
tiny not in(-1,-3) and
short not in(-1,-3) and
medium not in(-1,-3) and
long_int not in(-1,-3) and
longlong not in(-1,-3) and
utiny not in(1,3) and
ushort not in(1,3) and
umedium not in(1,3) and
ulong not in(1,3) and
ulonglong not in(1,3) and
bits not in(b'001',b'011') and
options not in('one','three') and
flags not in('one','one,two,three') and
date_field not in('1901-01-01','1903-03-03') and
year_field not in('1901','1903') and
time_field not in('01:01:01','03:03:03') and
date_time not in('1901-01-01 01:01:01','1903-03-03 03:03:03')
order by auto;
auto
2
4
select auto from t1 where
"aaaa" not in(string) and
"aaaa" not in(vstring) and
0xAAAA not in(bin) and
0xAAAA not in(vbin) and
(-1 not in(tiny)) and
(-1 not in(short)) and
(-1 not in(medium)) and
(-1 not in(long_int)) and
(-1 not in(longlong)) and
1 not in(utiny) and
1 not in(ushort) and
1 not in(umedium) and
1 not in(ulong) and
1 not in(ulonglong) and
b'001' not in(bits) and
'one' not in(options) and
'one' not in(flags) and
'1901-01-01' not in(date_field) and
'1901' not in(year_field) and
'01:01:01' not in(time_field) and
'1901-01-01 01:01:01' not in(date_time)
order by auto;
auto
2
3
4
select * from t2 where attr3 is null or attr1 > 2 and pk1= 3 order by pk1;
pk1 attr1 attr2 attr3
2 2 NULL NULL
...
...
@@ -1228,6 +1333,110 @@ select auto from t1 where
order by auto;
auto
1
explain
select auto from t1 where
(string not between "aaaa" and "cccc") and
(vstring not between "aaaa" and "cccc") and
(bin not between 0xAAAA and 0xCCCC) and
(vbin not between 0xAAAA and 0xCCCC) and
(tiny not between -3 and -1) and
(short not between -3 and -1) and
(medium not between -3 and -1) and
(long_int not between -3 and -1) and
(longlong not between -3 and -1) and
(utiny not between 1 and 3) and
(ushort not between 1 and 3) and
(umedium not between 1 and 3) and
(ulong not between 1 and 3) and
(ulonglong not between 1 and 3) and
/* (bits not between b'001' and b'011') and */
(options not between 'one' and 'three') and
(flags not between 'one' and 'one,two,three') and
(date_field not between '1901-01-01' and '1903-03-03') and
(year_field not between '1901' and '1903') and
(time_field not between '01:01:01' and '03:03:03') and
(date_time not between '1901-01-01 01:01:01' and '1903-03-03 03:03:03')
order by auto;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 range medium_index medium_index 3 NULL 20 Using where with pushed condition; Using filesort
select auto from t1 where
(string not between "aaaa" and "cccc") and
(vstring not between "aaaa" and "cccc") and
(bin not between 0xAAAA and 0xCCCC) and
(vbin not between 0xAAAA and 0xCCCC) and
(tiny not between -3 and -1) and
(short not between -3 and -1) and
(medium not between -3 and -1) and
(long_int not between -3 and -1) and
(longlong not between -3 and -1) and
(utiny not between 1 and 3) and
(ushort not between 1 and 3) and
(umedium not between 1 and 3) and
(ulong not between 1 and 3) and
(ulonglong not between 1 and 3) and
/* (bits not between b'001' and b'011') and */
(options not between 'one' and 'three') and
(flags not between 'one' and 'one,two,three') and
(date_field not between '1901-01-01' and '1903-03-03') and
(year_field not between '1901' and '1903') and
(time_field not between '01:01:01' and '03:03:03') and
(date_time not between '1901-01-01 01:01:01' and '1903-03-03 03:03:03')
order by auto;
auto
4
explain
select auto from t1 where
("aaaa" not between string and string) and
("aaaa" not between vstring and vstring) and
(0xAAAA not between bin and bin) and
(0xAAAA not between vbin and vbin) and
(-1 not between tiny and tiny) and
(-1 not between short and short) and
(-1 not between medium and medium) and
(-1 not between long_int and long_int) and
(-1 not between longlong and longlong) and
(1 not between utiny and utiny) and
(1 not between ushort and ushort) and
(1 not between umedium and umedium) and
(1 not between ulong and ulong) and
(1 not between ulonglong and ulonglong) and
/* (b'001' not between bits and bits) and */
('one' not between options and options) and
('one' not between flags and flags) and
('1901-01-01' not between date_field and date_field) and
('1901' not between year_field and year_field) and
('01:01:01' not between time_field and time_field) and
('1901-01-01 01:01:01' not between date_time and date_time)
order by auto;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using where with pushed condition; Using filesort
select auto from t1 where
("aaaa" not between string and string) and
("aaaa" not between vstring and vstring) and
(0xAAAA not between bin and bin) and
(0xAAAA not between vbin and vbin) and
(-1 not between tiny and tiny) and
(-1 not between short and short) and
(-1 not between medium and medium) and
(-1 not between long_int and long_int) and
(-1 not between longlong and longlong) and
(1 not between utiny and utiny) and
(1 not between ushort and ushort) and
(1 not between umedium and umedium) and
(1 not between ulong and ulong) and
(1 not between ulonglong and ulonglong) and
/* (b'001' not between bits and bits) and */
('one' not between options and options) and
('one' not between flags and flags) and
('1901-01-01' not between date_field and date_field) and
('1901' not between year_field and year_field) and
('01:01:01' not between time_field and time_field) and
('1901-01-01 01:01:01' not between date_time and date_time)
order by auto;
auto
2
3
4
explain
select auto from t1 where
string in("aaaa","cccc") and
...
...
@@ -1286,11 +1495,11 @@ select auto from t1 where
"aaaa" in(vstring) and
0xAAAA in(bin) and
0xAAAA in(vbin) and
/* -1 in(tiny) and */
/* -1 in (short) and */
/* -1 in(medium) and */
/* -1 in(long_int) and */
/* -1 in(longlong) and */
(-1 in(tiny)) and
(-1 in (short)) and
(-1 in(medium)) and
(-1 in(long_int)) and
(-1 in(longlong)) and
1 in(utiny) and
1 in(ushort) and
1 in(umedium) and
...
...
@@ -1311,11 +1520,11 @@ select auto from t1 where
"aaaa" in(vstring) and
0xAAAA in(bin) and
0xAAAA in(vbin) and
/* -1 in(tiny) and */
/* -1 in (short) and */
/* -1 in(medium) and */
/* -1 in(long_int) and */
/* -1 in(longlong) and */
(-1 in(tiny)) and
(-1 in (short)) and
(-1 in(medium)) and
(-1 in(long_int)) and
(-1 in(longlong)) and
1 in(utiny) and
1 in(ushort) and
1 in(umedium) and
...
...
@@ -1331,6 +1540,111 @@ select auto from t1 where
order by auto;
auto
1
explain
select auto from t1 where
string not in("aaaa","cccc") and
vstring not in("aaaa","cccc") and
bin not in(0xAAAA,0xCCCC) and
vbin not in(0xAAAA,0xCCCC) and
tiny not in(-1,-3) and
short not in(-1,-3) and
medium not in(-1,-3) and
long_int not in(-1,-3) and
longlong not in(-1,-3) and
utiny not in(1,3) and
ushort not in(1,3) and
umedium not in(1,3) and
ulong not in(1,3) and
ulonglong not in(1,3) and
/* bits not in(b'001',b'011') and */
options not in('one','three') and
flags not in('one','one,two,three') and
date_field not in('1901-01-01','1903-03-03') and
year_field not in('1901','1903') and
time_field not in('01:01:01','03:03:03') and
date_time not in('1901-01-01 01:01:01','1903-03-03 03:03:03')
order by auto;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 range medium_index medium_index 3 NULL 30 Using where with pushed condition; Using filesort
select auto from t1 where
string not in("aaaa","cccc") and
vstring not in("aaaa","cccc") and
bin not in(0xAAAA,0xCCCC) and
vbin not in(0xAAAA,0xCCCC) and
tiny not in(-1,-3) and
short not in(-1,-3) and
medium not in(-1,-3) and
long_int not in(-1,-3) and
longlong not in(-1,-3) and
utiny not in(1,3) and
ushort not in(1,3) and
umedium not in(1,3) and
ulong not in(1,3) and
ulonglong not in(1,3) and
/* bits not in(b'001',b'011') and */
options not in('one','three') and
flags not in('one','one,two,three') and
date_field not in('1901-01-01','1903-03-03') and
year_field not in('1901','1903') and
time_field not in('01:01:01','03:03:03') and
date_time not in('1901-01-01 01:01:01','1903-03-03 03:03:03')
order by auto;
auto
2
4
explain
select auto from t1 where
"aaaa" not in(string) and
"aaaa" not in(vstring) and
0xAAAA not in(bin) and
0xAAAA not in(vbin) and
(-1 not in(tiny)) and
(-1 not in(short)) and
(-1 not in(medium)) and
(-1 not in(long_int)) and
(-1 not in(longlong)) and
1 not in(utiny) and
1 not in(ushort) and
1 not in(umedium) and
1 not in(ulong) and
1 not in(ulonglong) and
/* b'001' not in(bits) and */
'one' not in(options) and
'one' not in(flags) and
'1901-01-01' not in(date_field) and
'1901' not in(year_field) and
'01:01:01' not in(time_field) and
'1901-01-01 01:01:01' not in(date_time)
order by auto;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using where with pushed condition; Using filesort
select auto from t1 where
"aaaa" not in(string) and
"aaaa" not in(vstring) and
0xAAAA not in(bin) and
0xAAAA not in(vbin) and
(-1 not in(tiny)) and
(-1 not in(short)) and
(-1 not in(medium)) and
(-1 not in(long_int)) and
(-1 not in(longlong)) and
1 not in(utiny) and
1 not in(ushort) and
1 not in(umedium) and
1 not in(ulong) and
1 not in(ulonglong) and
/* b'001' not in(bits) and */
'one' not in(options) and
'one' not in(flags) and
'1901-01-01' not in(date_field) and
'1901' not in(year_field) and
'01:01:01' not in(time_field) and
'1901-01-01 01:01:01' not in(date_time)
order by auto;
auto
2
3
4
update t1
set medium = 17
where
...
...
mysql-test/t/ndb_condition_pushdown.test
View file @
e8613e53
...
...
@@ -298,6 +298,55 @@ select auto from t1 where
(
'1901-01-01 01:01:01'
between
date_time
and
date_time
)
order
by
auto
;
# NOT BETWEEN
select
auto
from
t1
where
(
string
not
between
"aaaa"
and
"cccc"
)
and
(
vstring
not
between
"aaaa"
and
"cccc"
)
and
(
bin
not
between
0xAAAA
and
0xCCCC
)
and
(
vbin
not
between
0xAAAA
and
0xCCCC
)
and
(
tiny
not
between
-
3
and
-
1
)
and
(
short
not
between
-
3
and
-
1
)
and
(
medium
not
between
-
3
and
-
1
)
and
(
long_int
not
between
-
3
and
-
1
)
and
(
longlong
not
between
-
3
and
-
1
)
and
(
utiny
not
between
1
and
3
)
and
(
ushort
not
between
1
and
3
)
and
(
umedium
not
between
1
and
3
)
and
(
ulong
not
between
1
and
3
)
and
(
ulonglong
not
between
1
and
3
)
and
(
bits
not
between
b
'001'
and
b
'011'
)
and
(
options
not
between
'one'
and
'three'
)
and
(
flags
not
between
'one'
and
'one,two,three'
)
and
(
date_field
not
between
'1901-01-01'
and
'1903-03-03'
)
and
(
year_field
not
between
'1901'
and
'1903'
)
and
(
time_field
not
between
'01:01:01'
and
'03:03:03'
)
and
(
date_time
not
between
'1901-01-01 01:01:01'
and
'1903-03-03 03:03:03'
)
order
by
auto
;
select
auto
from
t1
where
(
"aaaa"
not
between
string
and
string
)
and
(
"aaaa"
not
between
vstring
and
vstring
)
and
(
0xAAAA
not
between
bin
and
bin
)
and
(
0xAAAA
not
between
vbin
and
vbin
)
and
(
-
1
not
between
tiny
and
tiny
)
and
(
-
1
not
between
short
and
short
)
and
(
-
1
not
between
medium
and
medium
)
and
(
-
1
not
between
long_int
and
long_int
)
and
(
-
1
not
between
longlong
and
longlong
)
and
(
1
not
between
utiny
and
utiny
)
and
(
1
not
between
ushort
and
ushort
)
and
(
1
not
between
umedium
and
umedium
)
and
(
1
not
between
ulong
and
ulong
)
and
(
1
not
between
ulonglong
and
ulonglong
)
and
(
b
'001'
not
between
bits
and
bits
)
and
(
'one'
not
between
options
and
options
)
and
(
'one'
not
between
flags
and
flags
)
and
(
'1901-01-01'
not
between
date_field
and
date_field
)
and
(
'1901'
not
between
year_field
and
year_field
)
and
(
'01:01:01'
not
between
time_field
and
time_field
)
and
(
'1901-01-01 01:01:01'
not
between
date_time
and
date_time
)
order
by
auto
;
# IN
select
auto
from
t1
where
string
in
(
"aaaa"
,
"cccc"
)
and
...
...
@@ -328,11 +377,11 @@ select auto from t1 where
"aaaa"
in
(
vstring
)
and
0xAAAA
in
(
bin
)
and
0xAAAA
in
(
vbin
)
and
/* -1 in(tiny) and */
/* -1 in (short) and */
/* -1 in(medium) and */
/* -1 in(long_int) and */
/* -1 in(longlong) and */
(
-
1
in
(
tiny
))
and
(
-
1
in
(
short
))
and
(
-
1
in
(
medium
))
and
(
-
1
in
(
long_int
))
and
(
-
1
in
(
longlong
))
and
1
in
(
utiny
)
and
1
in
(
ushort
)
and
1
in
(
umedium
)
and
...
...
@@ -347,6 +396,55 @@ b'001' in(bits) and
'1901-01-01 01:01:01'
in
(
date_time
)
order
by
auto
;
# NOT IN
select
auto
from
t1
where
string
not
in
(
"aaaa"
,
"cccc"
)
and
vstring
not
in
(
"aaaa"
,
"cccc"
)
and
bin
not
in
(
0xAAAA
,
0xCCCC
)
and
vbin
not
in
(
0xAAAA
,
0xCCCC
)
and
tiny
not
in
(
-
1
,
-
3
)
and
short
not
in
(
-
1
,
-
3
)
and
medium
not
in
(
-
1
,
-
3
)
and
long_int
not
in
(
-
1
,
-
3
)
and
longlong
not
in
(
-
1
,
-
3
)
and
utiny
not
in
(
1
,
3
)
and
ushort
not
in
(
1
,
3
)
and
umedium
not
in
(
1
,
3
)
and
ulong
not
in
(
1
,
3
)
and
ulonglong
not
in
(
1
,
3
)
and
bits
not
in
(
b
'001'
,
b
'011'
)
and
options
not
in
(
'one'
,
'three'
)
and
flags
not
in
(
'one'
,
'one,two,three'
)
and
date_field
not
in
(
'1901-01-01'
,
'1903-03-03'
)
and
year_field
not
in
(
'1901'
,
'1903'
)
and
time_field
not
in
(
'01:01:01'
,
'03:03:03'
)
and
date_time
not
in
(
'1901-01-01 01:01:01'
,
'1903-03-03 03:03:03'
)
order
by
auto
;
select
auto
from
t1
where
"aaaa"
not
in
(
string
)
and
"aaaa"
not
in
(
vstring
)
and
0xAAAA
not
in
(
bin
)
and
0xAAAA
not
in
(
vbin
)
and
(
-
1
not
in
(
tiny
))
and
(
-
1
not
in
(
short
))
and
(
-
1
not
in
(
medium
))
and
(
-
1
not
in
(
long_int
))
and
(
-
1
not
in
(
longlong
))
and
1
not
in
(
utiny
)
and
1
not
in
(
ushort
)
and
1
not
in
(
umedium
)
and
1
not
in
(
ulong
)
and
1
not
in
(
ulonglong
)
and
b
'001'
not
in
(
bits
)
and
'one'
not
in
(
options
)
and
'one'
not
in
(
flags
)
and
'1901-01-01'
not
in
(
date_field
)
and
'1901'
not
in
(
year_field
)
and
'01:01:01'
not
in
(
time_field
)
and
'1901-01-01 01:01:01'
not
in
(
date_time
)
order
by
auto
;
# Various tests
select
*
from
t2
where
attr3
is
null
or
attr1
>
2
and
pk1
=
3
order
by
pk1
;
select
*
from
t2
where
attr3
is
not
null
and
attr1
>
2
order
by
pk1
;
...
...
@@ -1152,6 +1250,105 @@ select auto from t1 where
(
'1901-01-01 01:01:01'
between
date_time
and
date_time
)
order
by
auto
;
# NOT BETWEEN
explain
select
auto
from
t1
where
(
string
not
between
"aaaa"
and
"cccc"
)
and
(
vstring
not
between
"aaaa"
and
"cccc"
)
and
(
bin
not
between
0xAAAA
and
0xCCCC
)
and
(
vbin
not
between
0xAAAA
and
0xCCCC
)
and
(
tiny
not
between
-
3
and
-
1
)
and
(
short
not
between
-
3
and
-
1
)
and
(
medium
not
between
-
3
and
-
1
)
and
(
long_int
not
between
-
3
and
-
1
)
and
(
longlong
not
between
-
3
and
-
1
)
and
(
utiny
not
between
1
and
3
)
and
(
ushort
not
between
1
and
3
)
and
(
umedium
not
between
1
and
3
)
and
(
ulong
not
between
1
and
3
)
and
(
ulonglong
not
between
1
and
3
)
and
/* (bits not between b'001' and b'011') and */
(
options
not
between
'one'
and
'three'
)
and
(
flags
not
between
'one'
and
'one,two,three'
)
and
(
date_field
not
between
'1901-01-01'
and
'1903-03-03'
)
and
(
year_field
not
between
'1901'
and
'1903'
)
and
(
time_field
not
between
'01:01:01'
and
'03:03:03'
)
and
(
date_time
not
between
'1901-01-01 01:01:01'
and
'1903-03-03 03:03:03'
)
order
by
auto
;
select
auto
from
t1
where
(
string
not
between
"aaaa"
and
"cccc"
)
and
(
vstring
not
between
"aaaa"
and
"cccc"
)
and
(
bin
not
between
0xAAAA
and
0xCCCC
)
and
(
vbin
not
between
0xAAAA
and
0xCCCC
)
and
(
tiny
not
between
-
3
and
-
1
)
and
(
short
not
between
-
3
and
-
1
)
and
(
medium
not
between
-
3
and
-
1
)
and
(
long_int
not
between
-
3
and
-
1
)
and
(
longlong
not
between
-
3
and
-
1
)
and
(
utiny
not
between
1
and
3
)
and
(
ushort
not
between
1
and
3
)
and
(
umedium
not
between
1
and
3
)
and
(
ulong
not
between
1
and
3
)
and
(
ulonglong
not
between
1
and
3
)
and
/* (bits not between b'001' and b'011') and */
(
options
not
between
'one'
and
'three'
)
and
(
flags
not
between
'one'
and
'one,two,three'
)
and
(
date_field
not
between
'1901-01-01'
and
'1903-03-03'
)
and
(
year_field
not
between
'1901'
and
'1903'
)
and
(
time_field
not
between
'01:01:01'
and
'03:03:03'
)
and
(
date_time
not
between
'1901-01-01 01:01:01'
and
'1903-03-03 03:03:03'
)
order
by
auto
;
explain
select
auto
from
t1
where
(
"aaaa"
not
between
string
and
string
)
and
(
"aaaa"
not
between
vstring
and
vstring
)
and
(
0xAAAA
not
between
bin
and
bin
)
and
(
0xAAAA
not
between
vbin
and
vbin
)
and
(
-
1
not
between
tiny
and
tiny
)
and
(
-
1
not
between
short
and
short
)
and
(
-
1
not
between
medium
and
medium
)
and
(
-
1
not
between
long_int
and
long_int
)
and
(
-
1
not
between
longlong
and
longlong
)
and
(
1
not
between
utiny
and
utiny
)
and
(
1
not
between
ushort
and
ushort
)
and
(
1
not
between
umedium
and
umedium
)
and
(
1
not
between
ulong
and
ulong
)
and
(
1
not
between
ulonglong
and
ulonglong
)
and
/* (b'001' not between bits and bits) and */
(
'one'
not
between
options
and
options
)
and
(
'one'
not
between
flags
and
flags
)
and
(
'1901-01-01'
not
between
date_field
and
date_field
)
and
(
'1901'
not
between
year_field
and
year_field
)
and
(
'01:01:01'
not
between
time_field
and
time_field
)
and
(
'1901-01-01 01:01:01'
not
between
date_time
and
date_time
)
order
by
auto
;
select
auto
from
t1
where
(
"aaaa"
not
between
string
and
string
)
and
(
"aaaa"
not
between
vstring
and
vstring
)
and
(
0xAAAA
not
between
bin
and
bin
)
and
(
0xAAAA
not
between
vbin
and
vbin
)
and
(
-
1
not
between
tiny
and
tiny
)
and
(
-
1
not
between
short
and
short
)
and
(
-
1
not
between
medium
and
medium
)
and
(
-
1
not
between
long_int
and
long_int
)
and
(
-
1
not
between
longlong
and
longlong
)
and
(
1
not
between
utiny
and
utiny
)
and
(
1
not
between
ushort
and
ushort
)
and
(
1
not
between
umedium
and
umedium
)
and
(
1
not
between
ulong
and
ulong
)
and
(
1
not
between
ulonglong
and
ulonglong
)
and
/* (b'001' not between bits and bits) and */
(
'one'
not
between
options
and
options
)
and
(
'one'
not
between
flags
and
flags
)
and
(
'1901-01-01'
not
between
date_field
and
date_field
)
and
(
'1901'
not
between
year_field
and
year_field
)
and
(
'01:01:01'
not
between
time_field
and
time_field
)
and
(
'1901-01-01 01:01:01'
not
between
date_time
and
date_time
)
order
by
auto
;
# IN
explain
select
auto
from
t1
where
...
...
@@ -1208,11 +1405,11 @@ select auto from t1 where
"aaaa"
in
(
vstring
)
and
0xAAAA
in
(
bin
)
and
0xAAAA
in
(
vbin
)
and
/* -1 in(tiny) and */
/* -1 in (short) and */
/* -1 in(medium) and */
/* -1 in(long_int) and */
/* -1 in(longlong) and */
(
-
1
in
(
tiny
))
and
(
-
1
in
(
short
))
and
(
-
1
in
(
medium
))
and
(
-
1
in
(
long_int
))
and
(
-
1
in
(
longlong
))
and
1
in
(
utiny
)
and
1
in
(
ushort
)
and
1
in
(
umedium
)
and
...
...
@@ -1232,11 +1429,11 @@ select auto from t1 where
"aaaa"
in
(
vstring
)
and
0xAAAA
in
(
bin
)
and
0xAAAA
in
(
vbin
)
and
/* -1 in(tiny) and */
/* -1 in (short) and */
/* -1 in(medium) and */
/* -1 in(long_int) and */
/* -1 in(longlong) and */
(
-
1
in
(
tiny
))
and
(
-
1
in
(
short
))
and
(
-
1
in
(
medium
))
and
(
-
1
in
(
long_int
))
and
(
-
1
in
(
longlong
))
and
1
in
(
utiny
)
and
1
in
(
ushort
)
and
1
in
(
umedium
)
and
...
...
@@ -1251,6 +1448,105 @@ select auto from t1 where
'1901-01-01 01:01:01'
in
(
date_time
)
order
by
auto
;
# NOT IN
explain
select
auto
from
t1
where
string
not
in
(
"aaaa"
,
"cccc"
)
and
vstring
not
in
(
"aaaa"
,
"cccc"
)
and
bin
not
in
(
0xAAAA
,
0xCCCC
)
and
vbin
not
in
(
0xAAAA
,
0xCCCC
)
and
tiny
not
in
(
-
1
,
-
3
)
and
short
not
in
(
-
1
,
-
3
)
and
medium
not
in
(
-
1
,
-
3
)
and
long_int
not
in
(
-
1
,
-
3
)
and
longlong
not
in
(
-
1
,
-
3
)
and
utiny
not
in
(
1
,
3
)
and
ushort
not
in
(
1
,
3
)
and
umedium
not
in
(
1
,
3
)
and
ulong
not
in
(
1
,
3
)
and
ulonglong
not
in
(
1
,
3
)
and
/* bits not in(b'001',b'011') and */
options
not
in
(
'one'
,
'three'
)
and
flags
not
in
(
'one'
,
'one,two,three'
)
and
date_field
not
in
(
'1901-01-01'
,
'1903-03-03'
)
and
year_field
not
in
(
'1901'
,
'1903'
)
and
time_field
not
in
(
'01:01:01'
,
'03:03:03'
)
and
date_time
not
in
(
'1901-01-01 01:01:01'
,
'1903-03-03 03:03:03'
)
order
by
auto
;
select
auto
from
t1
where
string
not
in
(
"aaaa"
,
"cccc"
)
and
vstring
not
in
(
"aaaa"
,
"cccc"
)
and
bin
not
in
(
0xAAAA
,
0xCCCC
)
and
vbin
not
in
(
0xAAAA
,
0xCCCC
)
and
tiny
not
in
(
-
1
,
-
3
)
and
short
not
in
(
-
1
,
-
3
)
and
medium
not
in
(
-
1
,
-
3
)
and
long_int
not
in
(
-
1
,
-
3
)
and
longlong
not
in
(
-
1
,
-
3
)
and
utiny
not
in
(
1
,
3
)
and
ushort
not
in
(
1
,
3
)
and
umedium
not
in
(
1
,
3
)
and
ulong
not
in
(
1
,
3
)
and
ulonglong
not
in
(
1
,
3
)
and
/* bits not in(b'001',b'011') and */
options
not
in
(
'one'
,
'three'
)
and
flags
not
in
(
'one'
,
'one,two,three'
)
and
date_field
not
in
(
'1901-01-01'
,
'1903-03-03'
)
and
year_field
not
in
(
'1901'
,
'1903'
)
and
time_field
not
in
(
'01:01:01'
,
'03:03:03'
)
and
date_time
not
in
(
'1901-01-01 01:01:01'
,
'1903-03-03 03:03:03'
)
order
by
auto
;
explain
select
auto
from
t1
where
"aaaa"
not
in
(
string
)
and
"aaaa"
not
in
(
vstring
)
and
0xAAAA
not
in
(
bin
)
and
0xAAAA
not
in
(
vbin
)
and
(
-
1
not
in
(
tiny
))
and
(
-
1
not
in
(
short
))
and
(
-
1
not
in
(
medium
))
and
(
-
1
not
in
(
long_int
))
and
(
-
1
not
in
(
longlong
))
and
1
not
in
(
utiny
)
and
1
not
in
(
ushort
)
and
1
not
in
(
umedium
)
and
1
not
in
(
ulong
)
and
1
not
in
(
ulonglong
)
and
/* b'001' not in(bits) and */
'one'
not
in
(
options
)
and
'one'
not
in
(
flags
)
and
'1901-01-01'
not
in
(
date_field
)
and
'1901'
not
in
(
year_field
)
and
'01:01:01'
not
in
(
time_field
)
and
'1901-01-01 01:01:01'
not
in
(
date_time
)
order
by
auto
;
select
auto
from
t1
where
"aaaa"
not
in
(
string
)
and
"aaaa"
not
in
(
vstring
)
and
0xAAAA
not
in
(
bin
)
and
0xAAAA
not
in
(
vbin
)
and
(
-
1
not
in
(
tiny
))
and
(
-
1
not
in
(
short
))
and
(
-
1
not
in
(
medium
))
and
(
-
1
not
in
(
long_int
))
and
(
-
1
not
in
(
longlong
))
and
1
not
in
(
utiny
)
and
1
not
in
(
ushort
)
and
1
not
in
(
umedium
)
and
1
not
in
(
ulong
)
and
1
not
in
(
ulonglong
)
and
/* b'001' not in(bits) and */
'one'
not
in
(
options
)
and
'one'
not
in
(
flags
)
and
'1901-01-01'
not
in
(
date_field
)
and
'1901'
not
in
(
year_field
)
and
'01:01:01'
not
in
(
time_field
)
and
'1901-01-01 01:01:01'
not
in
(
date_time
)
order
by
auto
;
# Update test
update
t1
set
medium
=
17
...
...
sql/ha_ndbcluster.cc
View file @
e8613e53
...
...
@@ -7232,8 +7232,10 @@ ha_ndbcluster::build_scan_filter_group(Ndb_cond* &cond, NdbScanFilter *filter)
break
;
}
case
(
Item_func
:
:
NOT_FUNC
)
:
{
DBUG_PRINT
(
"info"
,
(
"Generating negated query"
));
cond
=
cond
->
next
;
negated
=
TRUE
;
break
;
}
default:
...
...
@@ -7249,12 +7251,14 @@ ha_ndbcluster::build_scan_filter_group(Ndb_cond* &cond, NdbScanFilter *filter)
if
(
cond
)
cond
=
cond
->
next
;
if
(
filter
->
end
()
==
-
1
)
DBUG_RETURN
(
1
);
break
;
if
(
!
negated
)
break
;
// else fall through (NOT END is an illegal condition)
default:
{
DBUG_PRINT
(
"info"
,
(
"Illegal scan filter"
));
}
}
}
while
(
level
>
0
);
}
while
(
level
>
0
||
negated
);
DBUG_RETURN
(
0
);
}
...
...
@@ -7296,6 +7300,7 @@ ha_ndbcluster::generate_scan_filter(Ndb_cond_stack *ndb_cond_stack,
DBUG_ENTER
(
"generate_scan_filter"
);
if
(
ndb_cond_stack
)
{
DBUG_PRINT
(
"info"
,
(
"Generating scan filter"
));
NdbScanFilter
filter
(
op
);
bool
multiple_cond
=
FALSE
;
// Wrap an AND group around multiple conditions
...
...
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