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
6f09af1d
Commit
6f09af1d
authored
Jun 24, 2005
by
igor@rurik.mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge ibabaev@bk-internal.mysql.com:/home/bk/mysql-5.0
into rurik.mysql.com:/home/igor/mysql-5.0
parents
c9de0b15
c3aa161c
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
64 additions
and
27 deletions
+64
-27
mysql-test/r/func_str.result
mysql-test/r/func_str.result
+11
-0
mysql-test/t/func_str.test
mysql-test/t/func_str.test
+14
-0
sql/field.cc
sql/field.cc
+17
-13
sql/item_subselect.cc
sql/item_subselect.cc
+2
-2
sql/sql_parse.cc
sql/sql_parse.cc
+0
-1
sql/sql_select.cc
sql/sql_select.cc
+4
-2
sql/sql_select.h
sql/sql_select.h
+16
-9
No files found.
mysql-test/r/func_str.result
View file @
6f09af1d
...
@@ -800,3 +800,14 @@ field(0,NULL,1,0) field("",NULL,"bar","") field(0.0,NULL,1.0,0.0)
...
@@ -800,3 +800,14 @@ field(0,NULL,1,0) field("",NULL,"bar","") field(0.0,NULL,1.0,0.0)
select field(NULL,1,2,NULL), field(NULL,1,2,0);
select field(NULL,1,2,NULL), field(NULL,1,2,0);
field(NULL,1,2,NULL) field(NULL,1,2,0)
field(NULL,1,2,NULL) field(NULL,1,2,0)
0 0
0 0
CREATE TABLE t1 (str varchar(20) PRIMARY KEY);
CREATE TABLE t2 (num int primary key);
INSERT INTO t1 VALUES ('notnumber');
INSERT INTO t2 VALUES (0), (1);
SELECT * FROM t1, t2 WHERE num=str;
str num
notnumber 0
SELECT * FROM t1, t2 WHERE num=substring(str from 1 for 6);
str num
notnumber 0
DROP TABLE t1,t2;
mysql-test/t/func_str.test
View file @
6f09af1d
...
@@ -529,3 +529,17 @@ DROP TABLE t1, t2;
...
@@ -529,3 +529,17 @@ DROP TABLE t1, t2;
#
#
select
field
(
0
,
NULL
,
1
,
0
),
field
(
""
,
NULL
,
"bar"
,
""
),
field
(
0.0
,
NULL
,
1.0
,
0.0
);
select
field
(
0
,
NULL
,
1
,
0
),
field
(
""
,
NULL
,
"bar"
,
""
),
field
(
0.0
,
NULL
,
1.0
,
0.0
);
select
field
(
NULL
,
1
,
2
,
NULL
),
field
(
NULL
,
1
,
2
,
0
);
select
field
(
NULL
,
1
,
2
,
NULL
),
field
(
NULL
,
1
,
2
,
0
);
#
# Bug #10124: access by integer index with a string key that is not a number
#
CREATE
TABLE
t1
(
str
varchar
(
20
)
PRIMARY
KEY
);
CREATE
TABLE
t2
(
num
int
primary
key
);
INSERT
INTO
t1
VALUES
(
'notnumber'
);
INSERT
INTO
t2
VALUES
(
0
),
(
1
);
SELECT
*
FROM
t1
,
t2
WHERE
num
=
str
;
SELECT
*
FROM
t1
,
t2
WHERE
num
=
substring
(
str
from
1
for
6
);
DROP
TABLE
t1
,
t2
;
sql/field.cc
View file @
6f09af1d
...
@@ -3317,12 +3317,12 @@ int Field_long::store(const char *from,uint len,CHARSET_INFO *cs)
...
@@ -3317,12 +3317,12 @@ int Field_long::store(const char *from,uint len,CHARSET_INFO *cs)
}
}
if
(
error
)
if
(
error
)
{
{
error
=
1
;
error
=
error
!=
MY_ERRNO_EDOM
?
1
:
2
;
set_warning
(
MYSQL_ERROR
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
set_warning
(
MYSQL_ERROR
::
WARN_LEVEL_WARN
,
ER_WARN_DATA_OUT_OF_RANGE
,
1
);
}
}
else
if
(
from
+
len
!=
end
&&
table
->
in_use
->
count_cuted_fields
&&
else
if
(
from
+
len
!=
end
&&
table
->
in_use
->
count_cuted_fields
&&
check_int
(
from
,
len
,
end
,
cs
))
check_int
(
from
,
len
,
end
,
cs
))
error
=
1
;
error
=
2
;
store_tmp
=
(
long
)
tmp
;
store_tmp
=
(
long
)
tmp
;
#ifdef WORDS_BIGENDIAN
#ifdef WORDS_BIGENDIAN
...
@@ -3584,7 +3584,7 @@ int Field_longlong::store(const char *from,uint len,CHARSET_INFO *cs)
...
@@ -3584,7 +3584,7 @@ int Field_longlong::store(const char *from,uint len,CHARSET_INFO *cs)
}
}
else
if
(
from
+
len
!=
end
&&
table
->
in_use
->
count_cuted_fields
&&
else
if
(
from
+
len
!=
end
&&
table
->
in_use
->
count_cuted_fields
&&
check_int
(
from
,
len
,
end
,
cs
))
check_int
(
from
,
len
,
end
,
cs
))
error
=
1
;
error
=
2
;
#ifdef WORDS_BIGENDIAN
#ifdef WORDS_BIGENDIAN
if
(
table
->
s
->
db_low_byte_first
)
if
(
table
->
s
->
db_low_byte_first
)
{
{
...
@@ -3806,7 +3806,7 @@ int Field_float::store(const char *from,uint len,CHARSET_INFO *cs)
...
@@ -3806,7 +3806,7 @@ int Field_float::store(const char *from,uint len,CHARSET_INFO *cs)
{
{
set_warning
(
MYSQL_ERROR
::
WARN_LEVEL_WARN
,
set_warning
(
MYSQL_ERROR
::
WARN_LEVEL_WARN
,
(
error
?
ER_WARN_DATA_OUT_OF_RANGE
:
WARN_DATA_TRUNCATED
),
1
);
(
error
?
ER_WARN_DATA_OUT_OF_RANGE
:
WARN_DATA_TRUNCATED
),
1
);
error
=
1
;
error
=
error
?
1
:
2
;
}
}
Field_float
::
store
(
nr
);
Field_float
::
store
(
nr
);
return
error
;
return
error
;
...
@@ -4093,7 +4093,7 @@ int Field_double::store(const char *from,uint len,CHARSET_INFO *cs)
...
@@ -4093,7 +4093,7 @@ int Field_double::store(const char *from,uint len,CHARSET_INFO *cs)
{
{
set_warning
(
MYSQL_ERROR
::
WARN_LEVEL_WARN
,
set_warning
(
MYSQL_ERROR
::
WARN_LEVEL_WARN
,
(
error
?
ER_WARN_DATA_OUT_OF_RANGE
:
WARN_DATA_TRUNCATED
),
1
);
(
error
?
ER_WARN_DATA_OUT_OF_RANGE
:
WARN_DATA_TRUNCATED
),
1
);
error
=
1
;
error
=
error
?
1
:
2
;
}
}
Field_double
::
store
(
nr
);
Field_double
::
store
(
nr
);
return
error
;
return
error
;
...
@@ -4495,6 +4495,8 @@ int Field_timestamp::store(const char *from,uint len,CHARSET_INFO *cs)
...
@@ -4495,6 +4495,8 @@ int Field_timestamp::store(const char *from,uint len,CHARSET_INFO *cs)
error
=
1
;
error
=
1
;
}
}
}
}
if
(
error
>
1
)
error
=
2
;
#ifdef WORDS_BIGENDIAN
#ifdef WORDS_BIGENDIAN
if
(
table
->
s
->
db_low_byte_first
)
if
(
table
->
s
->
db_low_byte_first
)
...
@@ -4791,7 +4793,7 @@ int Field_time::store(const char *from,uint len,CHARSET_INFO *cs)
...
@@ -4791,7 +4793,7 @@ int Field_time::store(const char *from,uint len,CHARSET_INFO *cs)
if
(
str_to_time
(
from
,
len
,
&
ltime
,
&
error
))
if
(
str_to_time
(
from
,
len
,
&
ltime
,
&
error
))
{
{
tmp
=
0L
;
tmp
=
0L
;
error
=
1
;
error
=
2
;
set_datetime_warning
(
MYSQL_ERROR
::
WARN_LEVEL_WARN
,
WARN_DATA_TRUNCATED
,
set_datetime_warning
(
MYSQL_ERROR
::
WARN_LEVEL_WARN
,
WARN_DATA_TRUNCATED
,
from
,
len
,
MYSQL_TIMESTAMP_TIME
,
1
);
from
,
len
,
MYSQL_TIMESTAMP_TIME
,
1
);
}
}
...
@@ -4813,6 +4815,8 @@ int Field_time::store(const char *from,uint len,CHARSET_INFO *cs)
...
@@ -4813,6 +4815,8 @@ int Field_time::store(const char *from,uint len,CHARSET_INFO *cs)
from
,
len
,
MYSQL_TIMESTAMP_TIME
,
!
error
);
from
,
len
,
MYSQL_TIMESTAMP_TIME
,
!
error
);
error
=
1
;
error
=
1
;
}
}
if
(
error
>
1
)
error
=
2
;
}
}
if
(
ltime
.
neg
)
if
(
ltime
.
neg
)
...
@@ -5149,7 +5153,7 @@ int Field_date::store(const char *from, uint len,CHARSET_INFO *cs)
...
@@ -5149,7 +5153,7 @@ int Field_date::store(const char *from, uint len,CHARSET_INFO *cs)
&
error
)
<=
MYSQL_TIMESTAMP_ERROR
)
&
error
)
<=
MYSQL_TIMESTAMP_ERROR
)
{
{
tmp
=
0
;
tmp
=
0
;
error
=
1
;
error
=
2
;
}
}
else
else
tmp
=
(
uint32
)
l_time
.
year
*
10000L
+
(
uint32
)
(
l_time
.
month
*
100
+
l_time
.
day
);
tmp
=
(
uint32
)
l_time
.
year
*
10000L
+
(
uint32
)
(
l_time
.
month
*
100
+
l_time
.
day
);
...
@@ -5353,7 +5357,7 @@ int Field_newdate::store(const char *from,uint len,CHARSET_INFO *cs)
...
@@ -5353,7 +5357,7 @@ int Field_newdate::store(const char *from,uint len,CHARSET_INFO *cs)
&
error
)
<=
MYSQL_TIMESTAMP_ERROR
)
&
error
)
<=
MYSQL_TIMESTAMP_ERROR
)
{
{
tmp
=
0L
;
tmp
=
0L
;
error
=
1
;
error
=
2
;
}
}
else
else
tmp
=
l_time
.
day
+
l_time
.
month
*
32
+
l_time
.
year
*
16
*
32
;
tmp
=
l_time
.
day
+
l_time
.
month
*
32
+
l_time
.
year
*
16
*
32
;
...
@@ -5836,7 +5840,7 @@ int Field_string::store(const char *from,uint length,CHARSET_INFO *cs)
...
@@ -5836,7 +5840,7 @@ int Field_string::store(const char *from,uint length,CHARSET_INFO *cs)
from
=
tmpstr
.
ptr
();
from
=
tmpstr
.
ptr
();
length
=
tmpstr
.
length
();
length
=
tmpstr
.
length
();
if
(
conv_errors
)
if
(
conv_errors
)
error
=
1
;
error
=
2
;
}
}
/*
/*
...
@@ -5860,7 +5864,7 @@ int Field_string::store(const char *from,uint length,CHARSET_INFO *cs)
...
@@ -5860,7 +5864,7 @@ int Field_string::store(const char *from,uint length,CHARSET_INFO *cs)
from
+=
field_charset
->
cset
->
scan
(
field_charset
,
from
,
end
,
from
+=
field_charset
->
cset
->
scan
(
field_charset
,
from
,
end
,
MY_SEQ_SPACES
);
MY_SEQ_SPACES
);
if
(
from
!=
end
)
if
(
from
!=
end
)
error
=
1
;
error
=
2
;
}
}
if
(
error
)
if
(
error
)
{
{
...
@@ -6242,7 +6246,7 @@ int Field_varstring::store(const char *from,uint length,CHARSET_INFO *cs)
...
@@ -6242,7 +6246,7 @@ int Field_varstring::store(const char *from,uint length,CHARSET_INFO *cs)
table
->
in_use
->
abort_on_warning
)
table
->
in_use
->
abort_on_warning
)
error_code
=
ER_DATA_TOO_LONG
;
error_code
=
ER_DATA_TOO_LONG
;
set_warning
(
level
,
error_code
,
1
);
set_warning
(
level
,
error_code
,
1
);
return
1
;
return
2
;
}
}
return
0
;
return
0
;
}
}
...
@@ -6822,7 +6826,7 @@ int Field_blob::store(const char *from,uint length,CHARSET_INFO *cs)
...
@@ -6822,7 +6826,7 @@ int Field_blob::store(const char *from,uint length,CHARSET_INFO *cs)
from
=
tmpstr
.
ptr
();
from
=
tmpstr
.
ptr
();
length
=
tmpstr
.
length
();
length
=
tmpstr
.
length
();
if
(
conv_errors
)
if
(
conv_errors
)
error
=
1
;
error
=
2
;
}
}
copy_length
=
max_data_length
();
copy_length
=
max_data_length
();
...
@@ -6837,7 +6841,7 @@ int Field_blob::store(const char *from,uint length,CHARSET_INFO *cs)
...
@@ -6837,7 +6841,7 @@ int Field_blob::store(const char *from,uint length,CHARSET_INFO *cs)
copy_length
,
copy_length
,
&
well_formed_error
);
&
well_formed_error
);
if
(
copy_length
<
length
)
if
(
copy_length
<
length
)
error
=
1
;
error
=
2
;
Field_blob
::
store_length
(
copy_length
);
Field_blob
::
store_length
(
copy_length
);
if
(
was_conversion
||
table
->
copy_blobs
||
copy_length
<=
MAX_FIELD_WIDTH
)
if
(
was_conversion
||
table
->
copy_blobs
||
copy_length
<=
MAX_FIELD_WIDTH
)
{
// Must make a copy
{
// Must make a copy
...
...
sql/item_subselect.cc
View file @
6f09af1d
...
@@ -1487,7 +1487,7 @@ int subselect_uniquesubquery_engine::exec()
...
@@ -1487,7 +1487,7 @@ int subselect_uniquesubquery_engine::exec()
TABLE
*
table
=
tab
->
table
;
TABLE
*
table
=
tab
->
table
;
for
(
store_key
**
copy
=
tab
->
ref
.
key_copy
;
*
copy
;
copy
++
)
for
(
store_key
**
copy
=
tab
->
ref
.
key_copy
;
*
copy
;
copy
++
)
{
{
if
(
tab
->
ref
.
key_err
=
(
*
copy
)
->
copy
()
)
if
(
(
tab
->
ref
.
key_err
=
(
*
copy
)
->
copy
())
&
1
)
{
{
table
->
status
=
STATUS_NOT_FOUND
;
table
->
status
=
STATUS_NOT_FOUND
;
DBUG_RETURN
(
1
);
DBUG_RETURN
(
1
);
...
@@ -1540,7 +1540,7 @@ int subselect_indexsubquery_engine::exec()
...
@@ -1540,7 +1540,7 @@ int subselect_indexsubquery_engine::exec()
for
(
store_key
**
copy
=
tab
->
ref
.
key_copy
;
*
copy
;
copy
++
)
for
(
store_key
**
copy
=
tab
->
ref
.
key_copy
;
*
copy
;
copy
++
)
{
{
if
(
tab
->
ref
.
key_err
=
(
*
copy
)
->
copy
()
)
if
(
(
tab
->
ref
.
key_err
=
(
*
copy
)
->
copy
())
&
1
)
{
{
table
->
status
=
STATUS_NOT_FOUND
;
table
->
status
=
STATUS_NOT_FOUND
;
DBUG_RETURN
(
1
);
DBUG_RETURN
(
1
);
...
...
sql/sql_parse.cc
View file @
6f09af1d
...
@@ -3272,7 +3272,6 @@ end_with_restore_list:
...
@@ -3272,7 +3272,6 @@ end_with_restore_list:
if
(
first_table
->
view
&&
!
first_table
->
contain_auto_increment
)
if
(
first_table
->
view
&&
!
first_table
->
contain_auto_increment
)
thd
->
last_insert_id
=
0
;
// do not show last insert ID if VIEW have not it
thd
->
last_insert_id
=
0
;
// do not show last insert ID if VIEW have not it
break
;
break
;
}
}
case
SQLCOM_TRUNCATE
:
case
SQLCOM_TRUNCATE
:
...
...
sql/sql_select.cc
View file @
6f09af1d
...
@@ -11765,10 +11765,12 @@ cp_buffer_from_ref(THD *thd, TABLE_REF *ref)
...
@@ -11765,10 +11765,12 @@ cp_buffer_from_ref(THD *thd, TABLE_REF *ref)
thd
->
count_cuted_fields
=
CHECK_FIELD_IGNORE
;
thd
->
count_cuted_fields
=
CHECK_FIELD_IGNORE
;
for
(
store_key
**
copy
=
ref
->
key_copy
;
*
copy
;
copy
++
)
for
(
store_key
**
copy
=
ref
->
key_copy
;
*
copy
;
copy
++
)
{
{
if
((
*
copy
)
->
copy
())
int
res
;
if
((
res
=
(
*
copy
)
->
copy
()))
{
{
thd
->
count_cuted_fields
=
save_count_cuted_fields
;
thd
->
count_cuted_fields
=
save_count_cuted_fields
;
return
1
;
// Something went wrong
if
((
res
=
res
&
1
))
return
res
;
// Something went wrong
}
}
}
}
thd
->
count_cuted_fields
=
save_count_cuted_fields
;
thd
->
count_cuted_fields
=
save_count_cuted_fields
;
...
...
sql/sql_select.h
View file @
6f09af1d
...
@@ -448,6 +448,7 @@ class store_key :public Sql_alloc
...
@@ -448,6 +448,7 @@ class store_key :public Sql_alloc
char
*
null_ptr
;
char
*
null_ptr
;
char
err
;
char
err
;
public:
public:
enum
store_key_result
{
STORE_KEY_OK
,
STORE_KEY_FATAL
,
STORE_KEY_CONV
};
store_key
(
THD
*
thd
,
Field
*
field_arg
,
char
*
ptr
,
char
*
null
,
uint
length
)
store_key
(
THD
*
thd
,
Field
*
field_arg
,
char
*
ptr
,
char
*
null
,
uint
length
)
:
null_ptr
(
null
),
err
(
0
)
:
null_ptr
(
null
),
err
(
0
)
{
{
...
@@ -463,7 +464,7 @@ class store_key :public Sql_alloc
...
@@ -463,7 +464,7 @@ class store_key :public Sql_alloc
ptr
,
(
uchar
*
)
null
,
1
);
ptr
,
(
uchar
*
)
null
,
1
);
}
}
virtual
~
store_key
()
{}
/* Not actually needed */
virtual
~
store_key
()
{}
/* Not actually needed */
virtual
bool
copy
()
=
0
;
virtual
enum
store_key_result
copy
()
=
0
;
virtual
const
char
*
name
()
const
=
0
;
virtual
const
char
*
name
()
const
=
0
;
};
};
...
@@ -484,10 +485,10 @@ class store_key_field: public store_key
...
@@ -484,10 +485,10 @@ class store_key_field: public store_key
copy_field
.
set
(
to_field
,
from_field
,
0
);
copy_field
.
set
(
to_field
,
from_field
,
0
);
}
}
}
}
bool
copy
()
enum
store_key_result
copy
()
{
{
copy_field
.
do_copy
(
&
copy_field
);
copy_field
.
do_copy
(
&
copy_field
);
return
err
!=
0
;
return
err
!=
0
?
STORE_KEY_FATAL
:
STORE_KEY_OK
;
}
}
const
char
*
name
()
const
{
return
field_name
;
}
const
char
*
name
()
const
{
return
field_name
;
}
};
};
...
@@ -504,9 +505,11 @@ public:
...
@@ -504,9 +505,11 @@ public:
null_ptr_arg
?
null_ptr_arg
:
item_arg
->
maybe_null
?
null_ptr_arg
?
null_ptr_arg
:
item_arg
->
maybe_null
?
&
err
:
NullS
,
length
),
item
(
item_arg
)
&
err
:
NullS
,
length
),
item
(
item_arg
)
{}
{}
bool
copy
()
enum
store_key_result
copy
()
{
{
return
item
->
save_in_field_no_warnings
(
to_field
,
1
)
||
err
!=
0
;
int
res
=
item
->
save_in_field
(
to_field
,
1
);
return
(
err
!=
0
||
res
>
2
?
STORE_KEY_FATAL
:
(
store_key_result
)
res
);
}
}
const
char
*
name
()
const
{
return
"func"
;
}
const
char
*
name
()
const
{
return
"func"
;
}
};
};
...
@@ -524,15 +527,19 @@ public:
...
@@ -524,15 +527,19 @@ public:
&
err
:
NullS
,
length
,
item_arg
),
inited
(
0
)
&
err
:
NullS
,
length
,
item_arg
),
inited
(
0
)
{
{
}
}
bool
copy
()
enum
store_key_result
copy
()
{
{
int
res
;
if
(
!
inited
)
if
(
!
inited
)
{
{
inited
=
1
;
inited
=
1
;
if
(
item
->
save_in_field
(
to_field
,
1
))
if
((
res
=
item
->
save_in_field
(
to_field
,
1
)))
err
=
1
;
{
if
(
!
err
)
err
=
res
;
}
}
}
return
err
!=
0
;
return
(
err
>
2
?
STORE_KEY_FATAL
:
(
store_key_result
)
err
)
;
}
}
const
char
*
name
()
const
{
return
"const"
;
}
const
char
*
name
()
const
{
return
"const"
;
}
};
};
...
...
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