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
6c8f5c58
Commit
6c8f5c58
authored
Apr 04, 2007
by
mskold/marty@mysql.com/linux.site
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Merge from 5.0
parent
7e33b922
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
188 additions
and
24 deletions
+188
-24
mysql-test/r/ndb_trigger.result
mysql-test/r/ndb_trigger.result
+171
-0
sql/mysql_priv.h
sql/mysql_priv.h
+1
-2
sql/sql_insert.cc
sql/sql_insert.cc
+6
-9
sql/sql_load.cc
sql/sql_load.cc
+1
-1
sql/sql_update.cc
sql/sql_update.cc
+9
-12
No files found.
mysql-test/r/ndb_trigger.result
View file @
6c8f5c58
...
@@ -141,4 +141,175 @@ a b
...
@@ -141,4 +141,175 @@ a b
drop trigger t4_au;
drop trigger t4_au;
drop trigger t4_ad;
drop trigger t4_ad;
drop table t1, t2, t3, t4, t5;
drop table t1, t2, t3, t4, t5;
CREATE TABLE t1 (
id INT NOT NULL PRIMARY KEY,
xy INT
) ENGINE=ndbcluster;
INSERT INTO t1 VALUES (1, 0);
CREATE TRIGGER t1_update AFTER UPDATE ON t1 FOR EACH ROW BEGIN REPLACE INTO t2 SELECT * FROM t1 WHERE t1.id = NEW.id; END //
CREATE TABLE t2 (
id INT NOT NULL PRIMARY KEY,
xy INT
) ENGINE=ndbcluster;
INSERT INTO t2 VALUES (2, 0);
CREATE TABLE t3 (id INT NOT NULL PRIMARY KEY) ENGINE=ndbcluster;
INSERT INTO t3 VALUES (1);
CREATE TABLE t4 LIKE t1;
CREATE TRIGGER t4_update AFTER UPDATE ON t4 FOR EACH ROW BEGIN REPLACE INTO t5 SELECT * FROM t4 WHERE t4.id = NEW.id; END //
CREATE TABLE t5 LIKE t2;
UPDATE t1 SET xy = 3 WHERE id = 1;
SELECT xy FROM t1 where id = 1;
xy
3
SELECT xy FROM t2 where id = 1;
xy
3
UPDATE t1 SET xy = 4 WHERE id IN (SELECT id FROM t3 WHERE id = 1);
SELECT xy FROM t1 where id = 1;
xy
4
SELECT xy FROM t2 where id = 1;
xy
4
INSERT INTO t4 SELECT * FROM t1;
INSERT INTO t5 SELECT * FROM t2;
UPDATE t1,t4 SET t1.xy = 3, t4.xy = 3 WHERE t1.id = 1 AND t4.id = 1;
SELECT xy FROM t1 where id = 1;
xy
3
SELECT xy FROM t2 where id = 1;
xy
3
SELECT xy FROM t4 where id = 1;
xy
3
SELECT xy FROM t5 where id = 1;
xy
3
UPDATE t1,t4 SET t1.xy = 4, t4.xy = 4 WHERE t1.id IN (SELECT id FROM t3 WHERE id = 1) AND t4.id IN (SELECT id FROM t3 WHERE id = 1);
SELECT xy FROM t1 where id = 1;
xy
4
SELECT xy FROM t2 where id = 1;
xy
4
SELECT xy FROM t4 where id = 1;
xy
4
SELECT xy FROM t5 where id = 1;
xy
4
INSERT INTO t1 VALUES (1,0) ON DUPLICATE KEY UPDATE xy = 5;
SELECT xy FROM t1 where id = 1;
xy
5
SELECT xy FROM t2 where id = 1;
xy
5
DROP TRIGGER t1_update;
DROP TRIGGER t4_update;
CREATE TRIGGER t1_delete AFTER DELETE ON t1 FOR EACH ROW BEGIN REPLACE INTO t2 SELECT * FROM t1 WHERE t1.id > 4; END //
CREATE TRIGGER t4_delete AFTER DELETE ON t4 FOR EACH ROW BEGIN REPLACE INTO t5 SELECT * FROM t4 WHERE t4.id > 4; END //
INSERT INTO t1 VALUES (5, 0),(6,0);
INSERT INTO t2 VALUES (5, 1),(6,1);
INSERT INTO t3 VALUES (5);
SELECT * FROM t1 order by id;
id xy
1 5
5 0
6 0
SELECT * FROM t2 order by id;
id xy
1 5
2 0
5 1
6 1
DELETE FROM t1 WHERE id IN (SELECT id FROM t3 WHERE id = 5);
SELECT * FROM t1 order by id;
id xy
1 5
6 0
SELECT * FROM t2 order by id;
id xy
1 5
2 0
5 1
6 0
INSERT INTO t1 VALUES (5,0);
UPDATE t2 SET xy = 1 WHERE id = 6;
TRUNCATE t4;
INSERT INTO t4 SELECT * FROM t1;
TRUNCATE t5;
INSERT INTO t5 SELECT * FROM t2;
SELECT * FROM t1 order by id;
id xy
1 5
5 0
6 0
SELECT * FROM t2 order by id;
id xy
1 5
2 0
5 1
6 1
SELECT * FROM t4 order by id;
id xy
1 5
5 0
6 0
SELECT * FROM t5 order by id;
id xy
1 5
2 0
5 1
6 1
DELETE FROM t1,t4 USING t1,t3,t4 WHERE t1.id IN (SELECT id FROM t3 WHERE id = 5) AND t4.id IN (SELECT id FROM t3 WHERE id = 5);
SELECT * FROM t1 order by id;
id xy
1 5
6 0
SELECT * FROM t2 order by id;
id xy
1 5
2 0
5 1
6 0
SELECT * FROM t4 order by id;
id xy
1 5
6 0
SELECT * FROM t5 order by id;
id xy
1 5
2 0
5 1
6 0
INSERT INTO t1 VALUES (5, 0);
REPLACE INTO t2 VALUES (6,1);
SELECT * FROM t1 order by id;
id xy
1 5
5 0
6 0
SELECT * FROM t2 order by id;
id xy
1 5
2 0
5 1
6 1
REPLACE INTO t1 VALUES (5, 1);
SELECT * FROM t1 order by id;
id xy
1 5
5 1
6 0
SELECT * FROM t2 order by id;
id xy
1 5
2 0
5 1
6 0
DROP TRIGGER t1_delete;
DROP TRIGGER t4_delete;
DROP TABLE t1, t2, t3, t4, t5;
End of 5.1 tests
End of 5.1 tests
sql/mysql_priv.h
View file @
6c8f5c58
...
@@ -974,8 +974,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table,List<Item> &fields,
...
@@ -974,8 +974,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table,List<Item> &fields,
bool
ignore
);
bool
ignore
);
int
check_that_all_fields_are_given_values
(
THD
*
thd
,
TABLE
*
entry
,
int
check_that_all_fields_are_given_values
(
THD
*
thd
,
TABLE
*
entry
,
TABLE_LIST
*
table_list
);
TABLE_LIST
*
table_list
);
void
prepare_triggers_for_insert_stmt
(
THD
*
thd
,
TABLE
*
table
,
void
prepare_triggers_for_insert_stmt
(
TABLE
*
table
);
enum_duplicates
duplic
);
bool
mysql_prepare_delete
(
THD
*
thd
,
TABLE_LIST
*
table_list
,
Item
**
conds
);
bool
mysql_prepare_delete
(
THD
*
thd
,
TABLE_LIST
*
table_list
,
Item
**
conds
);
bool
mysql_delete
(
THD
*
thd
,
TABLE_LIST
*
table_list
,
COND
*
conds
,
bool
mysql_delete
(
THD
*
thd
,
TABLE_LIST
*
table_list
,
COND
*
conds
,
SQL_LIST
*
order
,
ha_rows
rows
,
ulonglong
options
,
SQL_LIST
*
order
,
ha_rows
rows
,
ulonglong
options
,
...
...
sql/sql_insert.cc
View file @
6c8f5c58
...
@@ -340,14 +340,12 @@ static int check_update_fields(THD *thd, TABLE_LIST *insert_table_list,
...
@@ -340,14 +340,12 @@ static int check_update_fields(THD *thd, TABLE_LIST *insert_table_list,
return
0
;
return
0
;
}
}
/*
Prepare triggers for INSERT-like statement.
Prepare triggers for INSERT-like statement.
SYNOPSIS
SYNOPSIS
prepare_triggers_for_insert_stmt()
prepare_triggers_for_insert_stmt()
thd
The
current
thread
table Table to which insert will happen
table Table to which insert will happen
duplic
Type
of
duplicate
handling
for
insert
which
will
happen
NOTE
NOTE
Prepare triggers for INSERT-like statement by marking fields
Prepare triggers for INSERT-like statement by marking fields
...
@@ -355,8 +353,7 @@ static int check_update_fields(THD *thd, TABLE_LIST *insert_table_list,
...
@@ -355,8 +353,7 @@ static int check_update_fields(THD *thd, TABLE_LIST *insert_table_list,
cannot be done if there are BEFORE UPDATE/DELETE triggers.
cannot be done if there are BEFORE UPDATE/DELETE triggers.
*/
*/
void
prepare_triggers_for_insert_stmt
(
THD
*
thd
,
TABLE
*
table
,
void
prepare_triggers_for_insert_stmt
(
TABLE
*
table
)
enum_duplicates
duplic
)
{
{
if
(
table
->
triggers
)
if
(
table
->
triggers
)
{
{
...
@@ -380,12 +377,11 @@ void prepare_triggers_for_insert_stmt(THD *thd, TABLE *table,
...
@@ -380,12 +377,11 @@ void prepare_triggers_for_insert_stmt(THD *thd, TABLE *table,
*/
*/
(
void
)
table
->
file
->
extra
(
HA_EXTRA_UPDATE_CANNOT_BATCH
);
(
void
)
table
->
file
->
extra
(
HA_EXTRA_UPDATE_CANNOT_BATCH
);
}
}
mark_fields_used_by_triggers_for_insert_stmt
(
thd
,
table
,
duplic
);
}
}
table
->
mark_columns_needed_for_insert
();
}
}
/*
bool
mysql_insert
(
THD
*
thd
,
TABLE_LIST
*
table_list
,
bool
mysql_insert
(
THD
*
thd
,
TABLE_LIST
*
table_list
,
List
<
Item
>
&
fields
,
List
<
Item
>
&
fields
,
List
<
List_item
>
&
values_list
,
List
<
List_item
>
&
values_list
,
...
@@ -584,7 +580,8 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
...
@@ -584,7 +580,8 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
error
=
1
;
error
=
1
;
}
}
table
->
mark_columns_needed_for_insert
();
prepare_triggers_for_insert_stmt
(
table
);
if
(
table_list
->
prepare_where
(
thd
,
0
,
TRUE
)
||
if
(
table_list
->
prepare_where
(
thd
,
0
,
TRUE
)
||
table_list
->
prepare_check_option
(
thd
))
table_list
->
prepare_check_option
(
thd
))
...
@@ -2602,7 +2599,7 @@ select_insert::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
...
@@ -2602,7 +2599,7 @@ select_insert::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
table_list
->
prepare_check_option
(
thd
));
table_list
->
prepare_check_option
(
thd
));
if
(
!
res
)
if
(
!
res
)
table
->
mark_columns_needed_for_insert
(
);
prepare_triggers_for_insert_stmt
(
table
);
DBUG_RETURN
(
res
);
DBUG_RETURN
(
res
);
}
}
...
...
sql/sql_load.cc
View file @
6c8f5c58
...
@@ -226,7 +226,7 @@ bool mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
...
@@ -226,7 +226,7 @@ bool mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
DBUG_RETURN
(
TRUE
);
DBUG_RETURN
(
TRUE
);
}
}
table
->
mark_columns_needed_for_insert
(
);
prepare_triggers_for_insert_stmt
(
table
);
uint
tot_length
=
0
;
uint
tot_length
=
0
;
bool
use_blobs
=
0
,
use_vars
=
0
;
bool
use_blobs
=
0
,
use_vars
=
0
;
...
...
sql/sql_update.cc
View file @
6c8f5c58
...
@@ -1129,10 +1129,8 @@ int multi_update::prepare(List<Item> ¬_used_values,
...
@@ -1129,10 +1129,8 @@ int multi_update::prepare(List<Item> ¬_used_values,
table
->
no_keyread
=
1
;
table
->
no_keyread
=
1
;
table
->
used_keys
.
clear_all
();
table
->
used_keys
.
clear_all
();
table
->
pos_in_table_list
=
tl
;
table
->
pos_in_table_list
=
tl
;
if
(
table
->
triggers
)
if
(
table
->
triggers
&&
{
table
->
triggers
->
has_triggers
(
TRG_EVENT_UPDATE
,
table
->
triggers
->
mark_fields_used
(
thd
,
TRG_EVENT_UPDATE
);
if
(
table
->
triggers
->
has_triggers
(
TRG_EVENT_UPDATE
,
TRG_ACTION_AFTER
))
TRG_ACTION_AFTER
))
{
{
/*
/*
...
@@ -1144,7 +1142,6 @@ int multi_update::prepare(List<Item> ¬_used_values,
...
@@ -1144,7 +1142,6 @@ int multi_update::prepare(List<Item> ¬_used_values,
}
}
}
}
}
}
}
table_count
=
update
.
elements
;
table_count
=
update
.
elements
;
...
...
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