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
a8e6967c
Commit
a8e6967c
authored
Jun 21, 2006
by
mikael@dator5.(none)
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
BUG#17138: Error in stored procedure
Review comments
parent
cd93441a
Changes
11
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
35 additions
and
34 deletions
+35
-34
mysql-test/t/partition.test
mysql-test/t/partition.test
+6
-2
sql/ha_ndbcluster.h
sql/ha_ndbcluster.h
+2
-2
sql/ha_partition.h
sql/ha_partition.h
+2
-2
sql/handler.h
sql/handler.h
+1
-6
sql/item_sum.cc
sql/item_sum.cc
+1
-1
sql/sql_acl.cc
sql/sql_acl.cc
+4
-4
sql/sql_insert.cc
sql/sql_insert.cc
+7
-6
sql/sql_select.cc
sql/sql_select.cc
+2
-2
sql/sql_table.cc
sql/sql_table.cc
+3
-2
sql/sql_union.cc
sql/sql_union.cc
+1
-1
sql/sql_update.cc
sql/sql_update.cc
+6
-6
No files found.
mysql-test/t/partition.test
View file @
a8e6967c
...
...
@@ -1202,6 +1202,8 @@ drop database db99;
#
#BUG 17138 Problem with stored procedure and analyze partition
#
drop
procedure
mysqltest_1
if
exists
;
create
table
t1
(
a
int
)
partition
by
list
(
a
)
(
partition
p0
values
in
(
0
));
...
...
@@ -1209,7 +1211,7 @@ partition by list (a)
insert
into
t1
values
(
0
);
delimiter
//;
create
procedure
po
()
create
procedure
mysqltest_1
()
begin
begin
declare
continue
handler
for
sqlexception
begin
end
;
...
...
@@ -1219,7 +1221,9 @@ begin
execute
stmt1
;
end
//
call
po
()
//
call
mysqltest_1
()
//
delimiter
;
//
drop
table
t1
;
drop
procedure
mysqltest_1
;
--
echo
End
of
5.1
tests
sql/ha_ndbcluster.h
View file @
a8e6967c
...
...
@@ -654,9 +654,9 @@ class ha_ndbcluster: public handler
int
get_default_no_partitions
(
ulonglong
max_rows
);
bool
get_no_parts
(
const
char
*
name
,
uint
*
no_parts
);
void
set_auto_partitions
(
partition_info
*
part_info
);
virtual
bool
cannot_ignore
_error
(
int
error
,
uint
flags
)
virtual
bool
is_fatal
_error
(
int
error
,
uint
flags
)
{
if
(
!
handler
::
cannot_ignore
_error
(
error
,
flags
))
if
(
!
handler
::
is_fatal
_error
(
error
,
flags
))
return
FALSE
;
if
(
error
==
HA_ERR_NO_PARTITION_FOUND
)
return
FALSE
;
...
...
sql/ha_partition.h
View file @
a8e6967c
...
...
@@ -302,9 +302,9 @@ public:
virtual
void
start_bulk_insert
(
ha_rows
rows
);
virtual
int
end_bulk_insert
();
virtual
bool
cannot_ignore
_error
(
int
error
,
uint
flags
)
virtual
bool
is_fatal
_error
(
int
error
,
uint
flags
)
{
if
(
!
handler
::
cannot_ignore
_error
(
error
,
flags
))
if
(
!
handler
::
is_fatal
_error
(
error
,
flags
))
return
FALSE
;
if
(
error
==
HA_ERR_NO_PARTITION_FOUND
)
return
FALSE
;
...
...
sql/handler.h
View file @
a8e6967c
...
...
@@ -216,11 +216,6 @@
#define HA_BLOCK_LOCK 256
/* unlock when reading some records */
#define HA_OPEN_TEMPORARY 512
/* Errors on write which is recoverable (Key exist) */
#define HA_WRITE_SKIP 121
/* Duplicate key on write */
#define HA_READ_CHECK 123
/* Update with is recoverable */
#define HA_CANT_DO_THAT 131
/* Databasehandler can't do it */
/* Some key definitions */
#define HA_KEY_NULL_LENGTH 1
#define HA_KEY_BLOB_LENGTH 2
...
...
@@ -984,7 +979,7 @@ public:
#define HA_CHECK_DUPP_KEY 1
#define HA_CHECK_DUPP_UNIQUE 2
#define HA_CHECK_DUPP (HA_CHECK_DUPP_KEY + HA_CHECK_DUPP_UNIQUE)
virtual
bool
cannot_ignore
_error
(
int
error
,
uint
flags
)
virtual
bool
is_fatal
_error
(
int
error
,
uint
flags
)
{
if
(
!
error
||
((
flags
&
HA_CHECK_DUPP_KEY
)
&&
...
...
sql/item_sum.cc
View file @
a8e6967c
...
...
@@ -2663,7 +2663,7 @@ bool Item_sum_count_distinct::add()
return
tree
->
unique_add
(
table
->
record
[
0
]
+
table
->
s
->
null_bytes
);
}
if
((
error
=
table
->
file
->
ha_write_row
(
table
->
record
[
0
]))
&&
table
->
file
->
cannot_ignore
_error
(
error
,
HA_CHECK_DUPP
))
table
->
file
->
is_fatal
_error
(
error
,
HA_CHECK_DUPP
))
return
TRUE
;
return
FALSE
;
}
...
...
sql/sql_acl.cc
View file @
a8e6967c
...
...
@@ -2049,7 +2049,7 @@ static int replace_user_table(THD *thd, TABLE *table, const LEX_USER &combo,
}
else
if
((
error
=
table
->
file
->
ha_write_row
(
table
->
record
[
0
])))
// insert
{
// This should never happen
if
(
table
->
file
->
cannot_ignore
_error
(
error
,
HA_CHECK_DUPP
))
if
(
table
->
file
->
is_fatal
_error
(
error
,
HA_CHECK_DUPP
))
{
table
->
file
->
print_error
(
error
,
MYF
(
0
));
/* purecov: deadcode */
error
=
-
1
;
/* purecov: deadcode */
...
...
@@ -2171,7 +2171,7 @@ static int replace_db_table(TABLE *table, const char *db,
}
else
if
(
rights
&&
(
error
=
table
->
file
->
ha_write_row
(
table
->
record
[
0
])))
{
if
(
table
->
file
->
cannot_ignore
_error
(
error
,
HA_CHECK_DUPP_KEY
))
if
(
table
->
file
->
is_fatal
_error
(
error
,
HA_CHECK_DUPP_KEY
))
goto
table_error
;
/* purecov: deadcode */
}
...
...
@@ -2743,7 +2743,7 @@ static int replace_table_table(THD *thd, GRANT_TABLE *grant_table,
else
{
error
=
table
->
file
->
ha_write_row
(
table
->
record
[
0
]);
if
(
table
->
file
->
cannot_ignore
_error
(
error
,
HA_CHECK_DUPP_KEY
))
if
(
table
->
file
->
is_fatal
_error
(
error
,
HA_CHECK_DUPP_KEY
))
goto
table_error
;
/* purecov: deadcode */
}
...
...
@@ -2861,7 +2861,7 @@ static int replace_routine_table(THD *thd, GRANT_NAME *grant_name,
else
{
error
=
table
->
file
->
ha_write_row
(
table
->
record
[
0
]);
if
(
table
->
file
->
cannot_ignore
_error
(
error
,
HA_CHECK_DUPP_KEY
))
if
(
table
->
file
->
is_fatal
_error
(
error
,
HA_CHECK_DUPP_KEY
))
goto
table_error
;
}
...
...
sql/sql_insert.cc
View file @
a8e6967c
...
...
@@ -976,15 +976,16 @@ int write_record(THD *thd, TABLE *table,COPY_INFO *info)
while
((
error
=
table
->
file
->
ha_write_row
(
table
->
record
[
0
])))
{
uint
key_nr
;
if
(
error
!=
HA_WRITE_SKIP
)
bool
is_duplicate_key_error
;
if
(
table
->
file
->
is_fatal_error
(
error
,
HA_CHECK_DUPP
))
goto
err
;
table
->
file
->
restore_auto_increment
();
// it's too early here! BUG#20188
i
f
(
info
->
ignore
&&
!
table
->
file
->
cannot_ignore_error
(
error
,
0
)
)
i
s_duplicate_key_error
=
table
->
file
->
is_fatal_error
(
error
,
0
);
if
(
info
->
ignore
&&
!
is_duplicate_key_error
)
goto
ok_or_after_trg_err
;
if
((
int
)
(
key_nr
=
table
->
file
->
get_dup_key
(
error
))
<
0
)
{
error
=
HA_
WRITE_SKIP
;
/* Database can't find key */
error
=
HA_
ERR_FOUND_DUPP_KEY
;
/* Database can't find key */
goto
err
;
}
/* Read all columns for the row we are going to replace */
...
...
@@ -1066,7 +1067,7 @@ int write_record(THD *thd, TABLE *table,COPY_INFO *info)
table
->
record
[
0
])))
{
if
(
info
->
ignore
&&
!
table
->
file
->
cannot_ignore
_error
(
error
,
HA_CHECK_DUPP_KEY
))
!
table
->
file
->
is_fatal
_error
(
error
,
HA_CHECK_DUPP_KEY
))
goto
ok_or_after_trg_err
;
goto
err
;
}
...
...
@@ -1152,7 +1153,7 @@ int write_record(THD *thd, TABLE *table,COPY_INFO *info)
else
if
((
error
=
table
->
file
->
ha_write_row
(
table
->
record
[
0
])))
{
if
(
!
info
->
ignore
||
table
->
file
->
cannot_ignore
_error
(
error
,
HA_CHECK_DUPP
))
table
->
file
->
is_fatal
_error
(
error
,
HA_CHECK_DUPP
))
goto
err
;
table
->
file
->
restore_auto_increment
();
}
...
...
sql/sql_select.cc
View file @
a8e6967c
...
...
@@ -9354,7 +9354,7 @@ bool create_myisam_from_heap(THD *thd, TABLE *table, TMP_TABLE_PARAM *param,
/* copy row that filled HEAP table */
if
((
write_err
=
new_table
.
file
->
write_row
(
table
->
record
[
0
])))
{
if
(
new_table
.
file
->
cannot_ignore
_error
(
write_err
,
HA_CHECK_DUPP
)
||
if
(
new_table
.
file
->
is_fatal
_error
(
write_err
,
HA_CHECK_DUPP
)
||
!
ignore_last_dupp_key_error
)
goto
err
;
}
...
...
@@ -10777,7 +10777,7 @@ end_write(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)),
join
->
found_records
++
;
if
((
error
=
table
->
file
->
write_row
(
table
->
record
[
0
])))
{
if
(
table
->
file
->
cannot_ignore
_error
(
error
,
HA_CHECK_DUPP
))
if
(
table
->
file
->
is_fatal
_error
(
error
,
HA_CHECK_DUPP
))
goto
end
;
if
(
create_myisam_from_heap
(
join
->
thd
,
table
,
&
join
->
tmp_table_param
,
error
,
1
))
...
...
sql/sql_table.cc
View file @
a8e6967c
...
...
@@ -6269,9 +6269,10 @@ copy_data_between_tables(TABLE *from,TABLE *to,
if
((
error
=
to
->
file
->
ha_write_row
((
byte
*
)
to
->
record
[
0
])))
{
if
(
!
ignore
||
to
->
file
->
cannot_ignore_error
(
error
,
HA_CHECK_DUPP
))
handle_duplicates
!=
DUP_REPLACE
||
/* Currently always false */
to
->
file
->
is_fatal_error
(
error
,
HA_CHECK_DUPP
))
{
if
(
error
==
HA_ERR_FOUND_DUPP_KEY
)
if
(
!
to
->
file
->
is_fatal_error
(
error
,
HA_CHECK_DUPP
)
)
{
uint
key_nr
=
to
->
file
->
get_dup_key
(
error
);
if
((
int
)
key_nr
>=
0
)
...
...
sql/sql_union.cc
View file @
a8e6967c
...
...
@@ -65,7 +65,7 @@ bool select_union::send_data(List<Item> &values)
if
((
error
=
table
->
file
->
ha_write_row
(
table
->
record
[
0
])))
{
/* create_myisam_from_heap will generate error if needed */
if
(
table
->
file
->
cannot_ignore
_error
(
error
,
HA_CHECK_DUPP
)
&&
if
(
table
->
file
->
is_fatal
_error
(
error
,
HA_CHECK_DUPP
)
&&
create_myisam_from_heap
(
thd
,
table
,
&
tmp_table_param
,
error
,
1
))
return
1
;
}
...
...
sql/sql_update.cc
View file @
a8e6967c
...
...
@@ -542,13 +542,13 @@ int mysql_update(THD *thd,
}
}
else
if
(
!
ignore
||
table
->
file
->
cannot_ignore
_error
(
error
,
HA_CHECK_DUPP_KEY
))
table
->
file
->
is_fatal
_error
(
error
,
HA_CHECK_DUPP_KEY
))
{
/*
If (ignore && error is ignorable) we don't have to
do anything; otherwise...
*/
if
(
table
->
file
->
cannot_ignore
_error
(
error
,
HA_CHECK_DUPP_KEY
))
if
(
table
->
file
->
is_fatal
_error
(
error
,
HA_CHECK_DUPP_KEY
))
thd
->
fatal_error
();
/* Other handler errors are fatal */
table
->
file
->
print_error
(
error
,
MYF
(
0
));
error
=
1
;
...
...
@@ -1424,13 +1424,13 @@ bool multi_update::send_data(List<Item> ¬_used_values)
{
updated
--
;
if
(
!
ignore
||
table
->
file
->
cannot_ignore
_error
(
error
,
HA_CHECK_DUPP_KEY
))
table
->
file
->
is_fatal
_error
(
error
,
HA_CHECK_DUPP_KEY
))
{
/*
If (ignore && error == is ignorable) we don't have to
do anything; otherwise...
*/
if
(
table
->
file
->
cannot_ignore
_error
(
error
,
HA_CHECK_DUPP_KEY
))
if
(
table
->
file
->
is_fatal
_error
(
error
,
HA_CHECK_DUPP_KEY
))
thd
->
fatal_error
();
/* Other handler errors are fatal */
table
->
file
->
print_error
(
error
,
MYF
(
0
));
DBUG_RETURN
(
1
);
...
...
@@ -1459,7 +1459,7 @@ bool multi_update::send_data(List<Item> ¬_used_values)
/* Write row, ignoring duplicated updates to a row */
if
((
error
=
tmp_table
->
file
->
ha_write_row
(
tmp_table
->
record
[
0
])))
{
if
(
tmp_table
->
file
->
cannot_ignore
_error
(
error
,
HA_CHECK_DUPP
)
&&
if
(
tmp_table
->
file
->
is_fatal
_error
(
error
,
HA_CHECK_DUPP
)
&&
create_myisam_from_heap
(
thd
,
tmp_table
,
tmp_table_param
+
offset
,
error
,
1
))
{
...
...
@@ -1583,7 +1583,7 @@ int multi_update::do_updates(bool from_send_error)
table
->
record
[
0
])))
{
if
(
!
ignore
||
table
->
file
->
cannot_ignore
_error
(
local_error
,
HA_CHECK_DUPP_KEY
))
table
->
file
->
is_fatal
_error
(
local_error
,
HA_CHECK_DUPP_KEY
))
goto
err
;
}
updated
++
;
...
...
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