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
1752d848
Commit
1752d848
authored
Nov 01, 2005
by
unknown
Browse files
Options
Browse Files
Download
Plain Diff
Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0
into moonbone.local:/work/14186-bug-5.0-mysql
parents
7dba8c53
7d8e8032
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
65 additions
and
29 deletions
+65
-29
client/mysqltest.c
client/mysqltest.c
+9
-4
myisam/mi_check.c
myisam/mi_check.c
+1
-1
mysql-test/r/update.result
mysql-test/r/update.result
+8
-0
mysql-test/t/update.test
mysql-test/t/update.test
+9
-0
sql/item_func.cc
sql/item_func.cc
+1
-0
sql/item_timefunc.cc
sql/item_timefunc.cc
+1
-0
sql/spatial.cc
sql/spatial.cc
+22
-17
sql/sql_select.cc
sql/sql_select.cc
+1
-3
sql/sql_select.h
sql/sql_select.h
+1
-0
sql/sql_update.cc
sql/sql_update.cc
+12
-4
No files found.
client/mysqltest.c
View file @
1752d848
...
@@ -3616,19 +3616,24 @@ static int run_query_stmt(MYSQL *mysql, struct st_query *q, int flags)
...
@@ -3616,19 +3616,24 @@ static int run_query_stmt(MYSQL *mysql, struct st_query *q, int flags)
/* Read result from each column */
/* Read result from each column */
for
(
col_idx
=
0
;
col_idx
<
num_fields
;
col_idx
++
)
for
(
col_idx
=
0
;
col_idx
<
num_fields
;
col_idx
++
)
{
{
/* FIXME is string terminated? */
const
char
*
val
;
const
char
*
val
=
(
const
char
*
)
bind
[
col_idx
].
buffer
;
ulonglong
len
;
ulonglong
len
=
*
bind
[
col_idx
].
length
;
if
(
col_idx
<
max_replace_column
&&
replace_column
[
col_idx
])
if
(
col_idx
<
max_replace_column
&&
replace_column
[
col_idx
])
{
{
val
=
replace_column
[
col_idx
];
val
=
replace_column
[
col_idx
];
len
=
strlen
(
val
);
len
=
strlen
(
val
);
}
}
if
(
*
bind
[
col_idx
].
is_null
)
else
if
(
*
bind
[
col_idx
].
is_null
)
{
{
val
=
"NULL"
;
val
=
"NULL"
;
len
=
4
;
len
=
4
;
}
}
else
{
/* FIXME is string terminated? */
val
=
(
const
char
*
)
bind
[
col_idx
].
buffer
;
len
=
*
bind
[
col_idx
].
length
;
}
if
(
!
display_result_vertically
)
if
(
!
display_result_vertically
)
{
{
if
(
col_idx
)
/* No tab before first col */
if
(
col_idx
)
/* No tab before first col */
...
...
myisam/mi_check.c
View file @
1752d848
...
@@ -1848,7 +1848,7 @@ static int sort_one_index(MI_CHECK *param, MI_INFO *info, MI_KEYDEF *keyinfo,
...
@@ -1848,7 +1848,7 @@ static int sort_one_index(MI_CHECK *param, MI_INFO *info, MI_KEYDEF *keyinfo,
if
(
sort_one_index
(
param
,
info
,
keyinfo
,
next_page
,
new_file
))
if
(
sort_one_index
(
param
,
info
,
keyinfo
,
next_page
,
new_file
))
{
{
DBUG_PRINT
(
"error"
,
DBUG_PRINT
(
"error"
,
(
"From page: %ld, keyoffset:
0x%lx
used_length: %d"
,
(
"From page: %ld, keyoffset:
%lu
used_length: %d"
,
(
ulong
)
pagepos
,
(
ulong
)
(
keypos
-
buff
),
(
ulong
)
pagepos
,
(
ulong
)
(
keypos
-
buff
),
(
int
)
used_length
));
(
int
)
used_length
));
DBUG_DUMP
(
"buff"
,(
byte
*
)
buff
,
used_length
);
DBUG_DUMP
(
"buff"
,(
byte
*
)
buff
,
used_length
);
...
...
mysql-test/r/update.result
View file @
1752d848
...
@@ -337,3 +337,11 @@ a b
...
@@ -337,3 +337,11 @@ a b
22 3
22 3
23 3
23 3
drop table t1;
drop table t1;
create table t1 (f1 date not null);
insert into t1 values('2000-01-01'),('0000-00-00');
update t1 set f1='2002-02-02' where f1 is null;
select * from t1;
f1
2000-01-01
2002-02-02
drop table t1;
mysql-test/t/update.test
View file @
1752d848
...
@@ -260,5 +260,14 @@ update t1 set a=a+11,b=2 order by a limit 3;
...
@@ -260,5 +260,14 @@ update t1 set a=a+11,b=2 order by a limit 3;
update
t1
set
a
=
a
+
12
,
b
=
3
order
by
a
limit
3
;
update
t1
set
a
=
a
+
12
,
b
=
3
order
by
a
limit
3
;
select
*
from
t1
order
by
a
;
select
*
from
t1
order
by
a
;
drop
table
t1
;
#
# Bug#14186 select datefield is null not updated
#
create
table
t1
(
f1
date
not
null
);
insert
into
t1
values
(
'2000-01-01'
),(
'0000-00-00'
);
update
t1
set
f1
=
'2002-02-02'
where
f1
is
null
;
select
*
from
t1
;
drop
table
t1
;
drop
table
t1
;
# End of 4.1 tests
# End of 4.1 tests
sql/item_func.cc
View file @
1752d848
...
@@ -1378,6 +1378,7 @@ my_decimal *Item_func_abs::decimal_op(my_decimal *decimal_value)
...
@@ -1378,6 +1378,7 @@ my_decimal *Item_func_abs::decimal_op(my_decimal *decimal_value)
void
Item_func_abs
::
fix_length_and_dec
()
void
Item_func_abs
::
fix_length_and_dec
()
{
{
Item_func_num1
::
fix_length_and_dec
();
Item_func_num1
::
fix_length_and_dec
();
maybe_null
=
1
;
}
}
...
...
sql/item_timefunc.cc
View file @
1752d848
...
@@ -2504,6 +2504,7 @@ void Item_func_add_time::fix_length_and_dec()
...
@@ -2504,6 +2504,7 @@ void Item_func_add_time::fix_length_and_dec()
enum_field_types
arg0_field_type
;
enum_field_types
arg0_field_type
;
decimals
=
0
;
decimals
=
0
;
max_length
=
MAX_DATETIME_FULL_WIDTH
*
MY_CHARSET_BIN_MB_MAXLEN
;
max_length
=
MAX_DATETIME_FULL_WIDTH
*
MY_CHARSET_BIN_MB_MAXLEN
;
maybe_null
=
1
;
/*
/*
The field type for the result of an Item_func_add_time function is defined
The field type for the result of an Item_func_add_time function is defined
...
...
sql/spatial.cc
View file @
1752d848
...
@@ -129,15 +129,14 @@ Geometry *Geometry::construct(Geometry_buffer *buffer,
...
@@ -129,15 +129,14 @@ Geometry *Geometry::construct(Geometry_buffer *buffer,
Geometry
*
result
;
Geometry
*
result
;
char
byte_order
;
char
byte_order
;
if
(
data_len
<
SRID_SIZE
+
1
+
4
)
if
(
data_len
<
SRID_SIZE
+
WKB_HEADER_SIZE
)
// < 4 + (
1 + 4)
return
NULL
;
return
NULL
;
byte_order
=
data
[
SRID_SIZE
];
byte_order
=
data
[
SRID_SIZE
];
geom_type
=
uint4korr
(
data
+
SRID_SIZE
+
1
);
geom_type
=
uint4korr
(
data
+
SRID_SIZE
+
1
);
data
+=
SRID_SIZE
+
WKB_HEADER_SIZE
;
if
(
!
(
result
=
create_by_typeid
(
buffer
,
(
int
)
geom_type
)))
if
(
!
(
result
=
create_by_typeid
(
buffer
,
(
int
)
geom_type
)))
return
NULL
;
return
NULL
;
result
->
m_data
=
data
;
result
->
m_data
=
data
+
SRID_SIZE
+
WKB_HEADER_SIZE
;
result
->
m_data_end
=
data
+
(
data_len
-
(
SRID_SIZE
+
WKB_HEADER_SIZE
))
;
result
->
m_data_end
=
data
+
data_len
;
return
result
;
return
result
;
}
}
...
@@ -739,7 +738,7 @@ uint Gis_polygon::init_from_wkb(const char *wkb, uint len, wkbByteOrder bo,
...
@@ -739,7 +738,7 @@ uint Gis_polygon::init_from_wkb(const char *wkb, uint len, wkbByteOrder bo,
wkb
+=
ls_len
;
wkb
+=
ls_len
;
}
}
return
wkb
-
wkb_orig
;
return
(
uint
)
(
wkb
-
wkb_orig
)
;
}
}
...
@@ -1184,7 +1183,8 @@ uint Gis_multi_line_string::init_from_wkb(const char *wkb, uint len,
...
@@ -1184,7 +1183,8 @@ uint Gis_multi_line_string::init_from_wkb(const char *wkb, uint len,
return
0
;
return
0
;
res
->
q_append
(
n_line_strings
);
res
->
q_append
(
n_line_strings
);
for
(
wkb
+=
4
;
n_line_strings
;
n_line_strings
--
)
wkb
+=
4
;
while
(
n_line_strings
--
)
{
{
Gis_line_string
ls
;
Gis_line_string
ls
;
int
ls_len
;
int
ls_len
;
...
@@ -1199,10 +1199,11 @@ uint Gis_multi_line_string::init_from_wkb(const char *wkb, uint len,
...
@@ -1199,10 +1199,11 @@ uint Gis_multi_line_string::init_from_wkb(const char *wkb, uint len,
if
(
!
(
ls_len
=
ls
.
init_from_wkb
(
wkb
+
WKB_HEADER_SIZE
,
len
,
if
(
!
(
ls_len
=
ls
.
init_from_wkb
(
wkb
+
WKB_HEADER_SIZE
,
len
,
(
wkbByteOrder
)
wkb
[
0
],
res
)))
(
wkbByteOrder
)
wkb
[
0
],
res
)))
return
0
;
return
0
;
wkb
+=
(
ls_len
+
WKB_HEADER_SIZE
);
ls_len
+=
WKB_HEADER_SIZE
;;
len
-=
(
ls_len
+
WKB_HEADER_SIZE
);
wkb
+=
ls_len
;
len
-=
ls_len
;
}
}
return
wkb
-
wkb_orig
;
return
(
uint
)
(
wkb
-
wkb_orig
)
;
}
}
...
@@ -1436,7 +1437,8 @@ uint Gis_multi_polygon::init_from_wkb(const char *wkb, uint len,
...
@@ -1436,7 +1437,8 @@ uint Gis_multi_polygon::init_from_wkb(const char *wkb, uint len,
return
0
;
return
0
;
res
->
q_append
(
n_poly
);
res
->
q_append
(
n_poly
);
for
(
wkb
+=
4
;
n_poly
;
n_poly
--
)
wkb
+=
4
;
while
(
n_poly
--
)
{
{
Gis_polygon
p
;
Gis_polygon
p
;
int
p_len
;
int
p_len
;
...
@@ -1450,10 +1452,11 @@ uint Gis_multi_polygon::init_from_wkb(const char *wkb, uint len,
...
@@ -1450,10 +1452,11 @@ uint Gis_multi_polygon::init_from_wkb(const char *wkb, uint len,
if
(
!
(
p_len
=
p
.
init_from_wkb
(
wkb
+
WKB_HEADER_SIZE
,
len
,
if
(
!
(
p_len
=
p
.
init_from_wkb
(
wkb
+
WKB_HEADER_SIZE
,
len
,
(
wkbByteOrder
)
wkb
[
0
],
res
)))
(
wkbByteOrder
)
wkb
[
0
],
res
)))
return
0
;
return
0
;
wkb
+=
(
p_len
+
WKB_HEADER_SIZE
);
p_len
+=
WKB_HEADER_SIZE
;
len
-=
(
p_len
+
WKB_HEADER_SIZE
);
wkb
+=
p_len
;
len
-=
p_len
;
}
}
return
wkb
-
wkb_orig
;
return
(
uint
)
(
wkb
-
wkb_orig
)
;
}
}
...
@@ -1733,7 +1736,8 @@ uint Gis_geometry_collection::init_from_wkb(const char *wkb, uint len,
...
@@ -1733,7 +1736,8 @@ uint Gis_geometry_collection::init_from_wkb(const char *wkb, uint len,
return
0
;
return
0
;
res
->
q_append
(
n_geom
);
res
->
q_append
(
n_geom
);
for
(
wkb
+=
4
;
n_geom
;
n_geom
--
)
wkb
+=
4
;
while
(
n_geom
--
)
{
{
Geometry_buffer
buffer
;
Geometry_buffer
buffer
;
Geometry
*
geom
;
Geometry
*
geom
;
...
@@ -1752,10 +1756,11 @@ uint Gis_geometry_collection::init_from_wkb(const char *wkb, uint len,
...
@@ -1752,10 +1756,11 @@ uint Gis_geometry_collection::init_from_wkb(const char *wkb, uint len,
!
(
g_len
=
geom
->
init_from_wkb
(
wkb
+
WKB_HEADER_SIZE
,
len
,
!
(
g_len
=
geom
->
init_from_wkb
(
wkb
+
WKB_HEADER_SIZE
,
len
,
(
wkbByteOrder
)
wkb
[
0
],
res
)))
(
wkbByteOrder
)
wkb
[
0
],
res
)))
return
0
;
return
0
;
wkb
+=
(
g_len
+
WKB_HEADER_SIZE
);
g_len
+=
WKB_HEADER_SIZE
;
len
-=
(
g_len
+
WKB_HEADER_SIZE
);
wkb
+=
g_len
;
len
-=
g_len
;
}
}
return
wkb
-
wkb_orig
;
return
(
uint
)
(
wkb
-
wkb_orig
)
;
}
}
...
...
sql/sql_select.cc
View file @
1752d848
...
@@ -102,8 +102,6 @@ static COND *optimize_cond(JOIN *join, COND *conds,
...
@@ -102,8 +102,6 @@ static COND *optimize_cond(JOIN *join, COND *conds,
List
<
TABLE_LIST
>
*
join_list
,
List
<
TABLE_LIST
>
*
join_list
,
Item
::
cond_result
*
cond_value
);
Item
::
cond_result
*
cond_value
);
static
bool
resolve_nested_join
(
TABLE_LIST
*
table
);
static
bool
resolve_nested_join
(
TABLE_LIST
*
table
);
static
COND
*
remove_eq_conds
(
THD
*
thd
,
COND
*
cond
,
Item
::
cond_result
*
cond_value
);
static
bool
const_expression_in_where
(
COND
*
conds
,
Item
*
item
,
Item
**
comp_item
);
static
bool
const_expression_in_where
(
COND
*
conds
,
Item
*
item
,
Item
**
comp_item
);
static
bool
open_tmp_table
(
TABLE
*
table
);
static
bool
open_tmp_table
(
TABLE
*
table
);
static
bool
create_myisam_tmp_table
(
TABLE
*
table
,
TMP_TABLE_PARAM
*
param
,
static
bool
create_myisam_tmp_table
(
TABLE
*
table
,
TMP_TABLE_PARAM
*
param
,
...
@@ -7474,7 +7472,7 @@ optimize_cond(JOIN *join, COND *conds, List<TABLE_LIST> *join_list,
...
@@ -7474,7 +7472,7 @@ optimize_cond(JOIN *join, COND *conds, List<TABLE_LIST> *join_list,
COND_FALSE always false ( 1 = 2 )
COND_FALSE always false ( 1 = 2 )
*/
*/
static
COND
*
COND
*
remove_eq_conds
(
THD
*
thd
,
COND
*
cond
,
Item
::
cond_result
*
cond_value
)
remove_eq_conds
(
THD
*
thd
,
COND
*
cond
,
Item
::
cond_result
*
cond_value
)
{
{
if
(
cond
->
type
()
==
Item
::
COND_ITEM
)
if
(
cond
->
type
()
==
Item
::
COND_ITEM
)
...
...
sql/sql_select.h
View file @
1752d848
...
@@ -524,3 +524,4 @@ bool cp_buffer_from_ref(THD *thd, TABLE_REF *ref);
...
@@ -524,3 +524,4 @@ bool cp_buffer_from_ref(THD *thd, TABLE_REF *ref);
bool
error_if_full_join
(
JOIN
*
join
);
bool
error_if_full_join
(
JOIN
*
join
);
int
report_error
(
TABLE
*
table
,
int
error
);
int
report_error
(
TABLE
*
table
,
int
error
);
int
safe_index_read
(
JOIN_TAB
*
tab
);
int
safe_index_read
(
JOIN_TAB
*
tab
);
COND
*
remove_eq_conds
(
THD
*
thd
,
COND
*
cond
,
Item
::
cond_result
*
cond_value
);
sql/sql_update.cc
View file @
1752d848
...
@@ -132,7 +132,7 @@ int mysql_update(THD *thd,
...
@@ -132,7 +132,7 @@ int mysql_update(THD *thd,
ha_rows
updated
,
found
;
ha_rows
updated
,
found
;
key_map
old_used_keys
;
key_map
old_used_keys
;
TABLE
*
table
;
TABLE
*
table
;
SQL_SELECT
*
select
;
SQL_SELECT
*
select
=
0
;
READ_RECORD
info
;
READ_RECORD
info
;
SELECT_LEX
*
select_lex
=
&
thd
->
lex
->
select_lex
;
SELECT_LEX
*
select_lex
=
&
thd
->
lex
->
select_lex
;
bool
need_reopen
;
bool
need_reopen
;
...
@@ -228,11 +228,19 @@ int mysql_update(THD *thd,
...
@@ -228,11 +228,19 @@ int mysql_update(THD *thd,
DBUG_RETURN
(
1
);
/* purecov: inspected */
DBUG_RETURN
(
1
);
/* purecov: inspected */
}
}
if
(
conds
)
{
Item
::
cond_result
cond_value
;
conds
=
remove_eq_conds
(
thd
,
conds
,
&
cond_value
);
if
(
cond_value
==
Item
::
COND_FALSE
)
limit
=
0
;
// Impossible WHERE
}
// Don't count on usage of 'only index' when calculating which key to use
// Don't count on usage of 'only index' when calculating which key to use
table
->
used_keys
.
clear_all
();
table
->
used_keys
.
clear_all
();
select
=
make_select
(
table
,
0
,
0
,
conds
,
0
,
&
error
);
if
(
limit
)
if
(
error
||
select
=
make_select
(
table
,
0
,
0
,
conds
,
0
,
&
error
);
(
select
&&
select
->
check_quick
(
thd
,
safe_update
,
limit
))
||
!
limit
)
if
(
error
||
!
limit
||
(
select
&&
select
->
check_quick
(
thd
,
safe_update
,
limit
)))
{
{
delete
select
;
delete
select
;
free_underlaid_joins
(
thd
,
select_lex
);
free_underlaid_joins
(
thd
,
select_lex
);
...
...
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