developers
Threads by month
- ----- 2024 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
October 2010
- 15 participants
- 41 discussions
![](https://secure.gravatar.com/avatar/b38aed4ff9d39949c1acd04e43a0c640.jpg?s=120&d=mm&r=g)
[Maria-developers] WL#164 New (by Knielsen): Extend crash recovery to recover non-prepared transactions from binlog
by worklog-noreply@askmonty.org 27 Oct '10
by worklog-noreply@askmonty.org 27 Oct '10
27 Oct '10
-----------------------------------------------------------------------
WORKLOG TASK
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
TASK...........: Extend crash recovery to recover non-prepared transactions from binlog
CREATION DATE..: Wed, 27 Oct 2010, 13:08
SUPERVISOR.....:
IMPLEMENTOR....:
COPIES TO......:
CATEGORY.......: Server-RawIdeaBin
TASK ID........: 164 (http://askmonty.org/worklog/?tid=164)
VERSION........: Server-9.x
STATUS.........: Un-Assigned
PRIORITY.......: 60
WORKED HOURS...: 0
ESTIMATE.......: 0 (hours remain)
ORIG. ESTIMATE.: 0
PROGRESS NOTES:
DESCRIPTION:
Currently, when an xa-capable storage engine commits a transaction that is
also written to the binary log, we do three fsync() calls, which is
expensive. One in prepare(), one for binlog write(), and one for commit().
These multiple fsync()'s are needed to ensure that crash recovery can recover
into a consistent state after a crash that happens during commit, so that any
transaction that becomes committed in the storage engine is also committed in
the binlog, and vice versa. This is essential for replication, as otherwise a
crashed master may not be able to recover into a usable state without a full
restore from backup.
The fsync()s are also needed to ensure durability, that is, any transaction
that is reported to the client as having committed, will also remain committed
after a crash.
This worklog is about optimising this so that we can reliably recover into a
consistent state (and preserve durability) with just a single fsync(), the one
for the binary log. In effect, this will allow to run with
--innodb-flush-log-at-trx-commit=2, or even =0, and still preserve both
durability of InnoDB commits and consistent crash recovery.
The idea is that along with every commit, InnoDB will store also an
identification of the transactions associated with that commit (in a
transaction-safe way, eg. using the InnoDB transaction log). In fact, InnoDB
already does this, since it records the binlog position of the last commit
done at any point in time.
Then during crash recovery, we can do as follows:
- First let each engine recover into an engine-consistent state. This may
be missing some transactions due to --innodb-flush-log-at-trx-commit=0.
- Ask each transactional engine for the ID of the last transaction committed.
- By virtue of MWL#116, we know that the order of commits in the storage
engine and in the binlog is the same. Thus, the transactions missing in the
engine is exactly those that are written in the binlog after the last
transaction committed in the engine.
- Recover the missing transactions in the engine by re-playing the binary log
from that point to the end (similar to how it would be applied on a slave.)
There are some restrictions/requirements:
- This will only work for engines that implement the MWL#116 commit_ordered()
handlerton method.
- After a crash, different engines (eg. PBXT vs. InnoDB) may be in different
states (different last transaction committed). It will be necessary to
recover each engine separately, at least up to a point where they are
consistent. This should be simple enough for transactions that only involve
tables for one engine. For cross-engine transactions, it can probably work
for row-based replication, simply by ignoring updates to tables in other
engines when applying the binlog events. But for statement-based
replication it will not work easily [*].
This way, it should be possible to greatly reduce the fsync() overhead when
using the binlog with a transactional engine.
[*] One could imagine trying to make it work even for statement-based binlog
events, at least for MVCC engines. When running the updates against one
engine, any select against the other engine could try to use an MVCC snapshow
corresponding to the transaction that corresponds to the appropriate
transaction back in time. But I think this is not realistic / worth it to
implement.
ESTIMATED WORK TIME
ESTIMATED COMPLETION DATE
-----------------------------------------------------------------------
WorkLog (v4.0.0)
1
0
![](https://secure.gravatar.com/avatar/b38aed4ff9d39949c1acd04e43a0c640.jpg?s=120&d=mm&r=g)
[Maria-developers] WL#163 New (by Knielsen): Implement release of row locks in InnoDB during prepare() phase
by worklog-noreply@askmonty.org 27 Oct '10
by worklog-noreply@askmonty.org 27 Oct '10
27 Oct '10
-----------------------------------------------------------------------
WORKLOG TASK
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
TASK...........: Implement release of row locks in InnoDB during prepare() phase
CREATION DATE..: Wed, 27 Oct 2010, 12:38
SUPERVISOR.....: Sergei
IMPLEMENTOR....:
COPIES TO......:
CATEGORY.......: Server-RawIdeaBin
TASK ID........: 163 (http://askmonty.org/worklog/?tid=163)
VERSION........: Server-9.x
STATUS.........: Un-Assigned
PRIORITY.......: 60
WORKED HOURS...: 0
ESTIMATE.......: 0 (hours remain)
ORIG. ESTIMATE.: 0
PROGRESS NOTES:
DESCRIPTION:
This is a feature implemented in the Facebook patch[1]. It is intended to
improve performance in the presence of hotspot rows in high-concurrency
applications.
When binlog is enabled and a transaction is committed in InnoDB, there are
three fsync()s done (in prepare(), in binlog write, and in commit()), and
InnoDB row locks are only released after the second of them (or third, not
100% sure).
If many transactions are updating the same rows, this becomes a point of
contention, and may also limit the opportunity for the group commit
optimisation. The idea of the Facebook patch is to release the locks earlier,
in the prepare phase, to reduce the impact of this problem.
In order to preserve correctness (eg. of statement-based replication), it is
necessary that locks are released for transactions in the order that these
transactions commit. So when we release locks during transaction A's prepare
phase, we must ensure that A will commit earlier than any other transaction
that might be waiting for those locks.
There are two kinds of row locks in InnoDB. There are explicit locks, like the
gap locks in higher isolation levels and SELECT FOR UPDATE locks. And implicit
locks, which is when one transaction modifies a row; such modification will
update the row with the id of the modifying transaction, and another
transaction will treat such row as effectively locked if the modifying
transaction has not yet committed (this is how I understand it, though I'm not
100% sure of the details).
The question is to what extend it is safe/correct to release the locks early.
I believe the release of implicit locks is safe during prepare(). Such locks
serve only the purpose of making sure that other transactions will not commit
before us, eg. because they will touch rows that were invisible to our
transaction, and thus must also be invisible on a replication slave (gap
locks). If we already decided to commit ourself before such other transaction,
then that purpose is already fulfilled.
I talked to Mark Callaghan about the Facebook patch for this problem. He told
me that they now also release explicit locks early, and furthermore also make
changes done by the releasing transaction visible to other transactions. In
effect, the transaction is committed (to memory) during prepare. This has some
more severe implications:
- Since the changes done by transaction A are visible to transaction B, A can
no longer safely rollback. In the facebook patch, they kill the server if A
needs to roll back after prepare().
- In the case of a server crash, the transaction A may not be recovered (if
it was never written to the binary log), yet may have been seen by the
application. This means that a change was observed in the database that in
effect never took place.
Still, such even more aggressive early release might be useful to enable with
an option that is off by default.
I think some more work is needed to fully access the implications and safety
of such early lock release.
References:
[1] https://launchpad.net/mysqlatfacebook
ESTIMATED WORK TIME
ESTIMATED COMPLETION DATE
-----------------------------------------------------------------------
WorkLog (v4.0.0)
1
0
![](https://secure.gravatar.com/avatar/3c2329333dd5898f2e72818af773243d.jpg?s=120&d=mm&r=g)
Re: [Maria-developers] [Commits] Rev 2958: better fix for MySQL bugs in http://bazaar.launchpad.net/~maria-captains/maria/5.1/
by Sergei Golubchik 27 Oct '10
by Sergei Golubchik 27 Oct '10
27 Oct '10
Hi, Zardosht!
First: please send questions like this to the list, not only to me.
I wanted to discuss this with Sergey Petrunia and had to paste this on
irc.
Anyway,
On Oct 22, Zardosht Kasheff wrote:
> Hello Sergei,
>
> One of the problems we at Tokutek have run into with the optimizer
> many times is that the optimizer does not always use these functions
> to estimate costs. I think I have found a couple of places in the
> code, and want to verify that my understanding is correct.
>
> In best_access_path in sql_select.cc, I see the following code in two places:
> if (table->covering_keys.is_set(key))
> {
> /* we can use only index tree */
> uint keys_per_block= table->file->stats.block_size/2/
> (keyinfo->key_length+table->file->ref_length)+1;
> tmp= record_count*(tmp+keys_per_block-1)/keys_per_block;
> }
> else
> tmp= record_count*min(tmp,s->worst_seeks);
>
> is there a reason why tmp cannot be evaluated using the functions
> keyread_time and read_time? If so, is there any reason why MariaDB or
> MySQL cannot use the functions in this place?
I cannot fix it in 5.1, unfortunately.
The code should probably be rewritten as
if (table->covering_keys.is_set(key))
{
tmp= record_count*table->file->keyread_time(key, 1, tmp);
}
else
tmp= record_count*table->file->read_time(key, 1, min(tmp,s->worst_seeks));
but tmp is double, while the third argument of keyread_time and
read_time is ha_rows - an integer. That is, this change causes a small
precision loss, and it is enough for optimizer to start generating
different query plans. I've got quite a few test failures because
EXPLAIN output changed. We cannot do changes that affect query plans in
a stable version. One thing I've learned in MySQL - no matter how
correct and good such a change is, there will always be queries that it
will affect adversely. And it won't matter that the new plan is
correct, and the old plan was completely illogical and caused by a bug
in the optimizer or something - they'll say that their queries were
faster that way.
I'll see about doing this change it 5.2 though.
Regards,
Sergei
2
2
![](https://secure.gravatar.com/avatar/bccaf81a23eecaecd9feaf01c7c42ff4.jpg?s=120&d=mm&r=g)
[Maria-developers] Please review: Rev 2959: MWL#152: Show database name in error messages in file:///home/psergey/dev2/5.1/]
by Sergey Petrunya 26 Oct '10
by Sergey Petrunya 26 Oct '10
26 Oct '10
Hello,
Could somebody please review the below? It's a very simple patch.
I also need comments about which version this should go into. I've made the
patch againist 5.1 just in case, but my opinion is that this should go into
5.2 (under rationale that 5.1 is stable and one can live without this patch).
----- Forwarded message from Sergey Petrunya <psergey(a)askmonty.org> -----
From: Sergey Petrunya <psergey(a)askmonty.org>
To: commits(a)mariadb.org
X-Mailer: mail (GNU Mailutils 1.2)
Date: Sat, 23 Oct 2010 19:38:04 +0300 (EEST)
Subject: [Commits] Rev 2959: MWL#152: Show database name in error messages
in file:///home/psergey/dev2/5.1/
At file:///home/psergey/dev2/5.1/
------------------------------------------------------------
revno: 2959
revision-id: psergey(a)askmonty.org-20101023163755-j8ghe2s4udpoc97g
parent: sergii(a)pisem.net-20101020105843-7ybuqyc9n5328tie
committer: Sergey Petrunya <psergey(a)askmonty.org>
branch nick: 5.1
timestamp: Sat 2010-10-23 20:37:55 +0400
message:
MWL#152: Show database name in error messages
- Add database name to ER_TABLEACCESS_DENIED_ERROR and ER_COLUMNACCESS_DENIED_ERROR message strings.
- Amend the code to provide db name
- Update test results
=== modified file 'mysql-test/r/grant.result'
--- a/mysql-test/r/grant.result 2010-09-03 16:20:30 +0000
+++ b/mysql-test/r/grant.result 2010-10-23 16:37:55 +0000
@@ -405,15 +405,15 @@
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'mysqltest_3'@'localhost' NULL USAGE NO
update mysqltest_1.t1, mysqltest_1.t2 set q=10 where b=1;
-ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for column 'q' in table 't1'
+ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for column 'q' in table 'mysqltest_1'.'t1'
update mysqltest_1.t2, mysqltest_2.t2 set d=20 where d=1;
-ERROR 42000: SELECT command denied to user 'mysqltest_3'@'localhost' for column 'd' in table 't2'
+ERROR 42000: SELECT command denied to user 'mysqltest_3'@'localhost' for column 'd' in table 'mysqltest_2'.'t2'
update mysqltest_1.t1, mysqltest_2.t2 set d=20 where d=1;
-ERROR 42000: SELECT command denied to user 'mysqltest_3'@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user 'mysqltest_3'@'localhost' for table 'mysqltest_1'.'t1'
update mysqltest_2.t1, mysqltest_1.t2 set c=20 where b=1;
-ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for table 't1'
+ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for table 'mysqltest_2'.'t1'
update mysqltest_2.t1, mysqltest_2.t2 set d=10 where s=2;
-ERROR 42000: SELECT command denied to user 'mysqltest_3'@'localhost' for column 's' in table 't1'
+ERROR 42000: SELECT command denied to user 'mysqltest_3'@'localhost' for column 's' in table 'mysqltest_2'.'t1'
update mysqltest_1.t1, mysqltest_2.t2 set a=10,d=10;
update mysqltest_1.t1, mysqltest_2.t1 set a=20 where c=20;
select t1.*,t2.* from mysqltest_1.t1,mysqltest_1.t2;
@@ -433,14 +433,14 @@
use mysqltest_1;
update mysqltest_2.t1, mysqltest_2.t2 set c=500,d=600;
update mysqltest_1.t1, mysqltest_1.t2 set a=100,b=200;
-ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for table 't1'
+ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for table 'mysqltest_1'.'t1'
use mysqltest_2;
update mysqltest_1.t1, mysqltest_1.t2 set a=100,b=200;
-ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for table 't1'
+ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for table 'mysqltest_1'.'t1'
update mysqltest_2.t1, mysqltest_1.t2 set c=100,b=200;
-ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for table 't2'
+ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for table 'mysqltest_1'.'t2'
update mysqltest_1.t1, mysqltest_2.t2 set a=100,d=200;
-ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for table 't1'
+ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for table 'mysqltest_1'.'t1'
select t1.*,t2.* from mysqltest_1.t1,mysqltest_1.t2;
a q b r
10 2 1 2
@@ -489,7 +489,7 @@
create table mysqltest.t1 (a int,b int,c int);
grant all on mysqltest.t1 to mysqltest_1@localhost;
alter table t1 rename t2;
-ERROR 42000: INSERT,CREATE command denied to user 'mysqltest_1'@'localhost' for table 't2'
+ERROR 42000: INSERT,CREATE command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest'.'t2'
revoke all privileges on mysqltest.t1 from mysqltest_1@localhost;
delete from mysql.user where user=_binary'mysqltest_1';
drop database mysqltest;
@@ -667,7 +667,7 @@
grant alter on db27515.t1 to user27515@localhost;
grant insert, create on db27515.t2 to user27515@localhost;
rename table t1 to t2;
-ERROR 42000: DROP command denied to user 'user27515'@'localhost' for table 't1'
+ERROR 42000: DROP command denied to user 'user27515'@'localhost' for table 'db27515'.'t1'
revoke all privileges, grant option from user27515@localhost;
drop user user27515@localhost;
drop database db27515;
@@ -900,13 +900,13 @@
GRANT SELECT ON mysqltest2.* TO 'mysqltest_1'@'localhost' IDENTIFIED BY 'mysqltest_1';
GRANT SHOW VIEW,SELECT ON mysqltest2.v_yy TO 'mysqltest_1'@'localhost' IDENTIFIED BY 'mysqltest_1';
SHOW CREATE VIEW mysqltest2.v_nn;
-ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'v_nn'
+ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest2'.'v_nn'
SHOW CREATE TABLE mysqltest2.v_nn;
-ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'v_nn'
+ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest2'.'v_nn'
SHOW CREATE VIEW mysqltest2.v_yn;
-ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'v_yn'
+ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest2'.'v_yn'
SHOW CREATE TABLE mysqltest2.v_yn;
-ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'v_yn'
+ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest2'.'v_yn'
SHOW CREATE TABLE mysqltest2.v_ny;
View Create View character_set_client collation_connection
v_ny CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `mysqltest2`.`v_ny` AS select `mysqltest2`.`t_nn`.`c1` AS `c1` from `mysqltest2`.`t_nn` latin1 latin1_swedish_ci
@@ -914,13 +914,13 @@
View Create View character_set_client collation_connection
v_ny CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `mysqltest2`.`v_ny` AS select `mysqltest2`.`t_nn`.`c1` AS `c1` from `mysqltest2`.`t_nn` latin1 latin1_swedish_ci
SHOW CREATE TABLE mysqltest3.t_nn;
-ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 't_nn'
+ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest3'.'t_nn'
SHOW CREATE VIEW mysqltest3.t_nn;
-ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 't_nn'
+ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest3'.'t_nn'
SHOW CREATE VIEW mysqltest3.v_nn;
-ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'v_nn'
+ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest3'.'v_nn'
SHOW CREATE TABLE mysqltest3.v_nn;
-ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'v_nn'
+ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest3'.'v_nn'
SHOW CREATE TABLE mysqltest2.t_nn;
Table Create Table
t_nn CREATE TABLE `t_nn` (
@@ -980,23 +980,23 @@
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
GRANT SELECT ON `mysqltest1`.`t1` TO 'mysqltest_1'@'localhost'
RENAME TABLE t1 TO t2;
-ERROR 42000: DROP,ALTER command denied to user 'mysqltest_1'@'localhost' for table 't1'
+ERROR 42000: DROP,ALTER command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest1'.'t1'
ALTER TABLE t1 RENAME TO t2;
-ERROR 42000: DROP,ALTER command denied to user 'mysqltest_1'@'localhost' for table 't1'
+ERROR 42000: DROP,ALTER command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest1'.'t1'
GRANT DROP ON mysqltest1.t1 TO mysqltest_1@localhost;
RENAME TABLE t1 TO t2;
-ERROR 42000: ALTER command denied to user 'mysqltest_1'@'localhost' for table 't1'
+ERROR 42000: ALTER command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest1'.'t1'
ALTER TABLE t1 RENAME TO t2;
-ERROR 42000: ALTER command denied to user 'mysqltest_1'@'localhost' for table 't1'
+ERROR 42000: ALTER command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest1'.'t1'
GRANT ALTER ON mysqltest1.t1 TO mysqltest_1@localhost;
SHOW GRANTS;
Grants for mysqltest_1@localhost
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
GRANT SELECT, DROP, ALTER ON `mysqltest1`.`t1` TO 'mysqltest_1'@'localhost'
RENAME TABLE t1 TO t2;
-ERROR 42000: INSERT,CREATE command denied to user 'mysqltest_1'@'localhost' for table 't2'
+ERROR 42000: INSERT,CREATE command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest1'.'t2'
ALTER TABLE t1 RENAME TO t2;
-ERROR 42000: INSERT,CREATE command denied to user 'mysqltest_1'@'localhost' for table 't2'
+ERROR 42000: INSERT,CREATE command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest1'.'t2'
GRANT INSERT, CREATE ON mysqltest1.t1 TO mysqltest_1@localhost;
SHOW GRANTS;
Grants for mysqltest_1@localhost
@@ -1021,9 +1021,9 @@
GRANT SELECT, CREATE, ALTER ON `mysqltest1`.`t1` TO 'mysqltest_1'@'localhost'
GRANT SELECT, CREATE, ALTER ON `mysqltest1`.`t2` TO 'mysqltest_1'@'localhost'
RENAME TABLE t1 TO t2;
-ERROR 42000: DROP command denied to user 'mysqltest_1'@'localhost' for table 't1'
+ERROR 42000: DROP command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest1'.'t1'
ALTER TABLE t1 RENAME TO t2;
-ERROR 42000: DROP command denied to user 'mysqltest_1'@'localhost' for table 't1'
+ERROR 42000: DROP command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest1'.'t1'
DROP USER mysqltest_1@localhost;
DROP DATABASE mysqltest1;
USE test;
@@ -1060,7 +1060,7 @@
GRANT DELETE ON t1 TO bug23556@localhost;
USE bug23556;
TRUNCATE t1;
-ERROR 42000: DROP command denied to user 'bug23556'@'localhost' for table 't1'
+ERROR 42000: DROP command denied to user 'bug23556'@'localhost' for table 'bug23556'.'t1'
USE bug23556;
REVOKE DELETE ON t1 FROM bug23556@localhost;
GRANT DROP ON t1 TO bug23556@localhost;
@@ -1131,16 +1131,16 @@
---> connection: bug27337_con1
CREATE TABLE t1(c INT);
-ERROR 42000: CREATE command denied to user 'mysqltest_1'@'localhost' for table 't1'
+ERROR 42000: CREATE command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest2'.'t1'
CALL mysqltest1.p1();
1
1
CREATE TABLE t1(c INT);
-ERROR 42000: CREATE command denied to user 'mysqltest_1'@'localhost' for table 't1'
+ERROR 42000: CREATE command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest2'.'t1'
---> connection: bug27337_con2
CREATE TABLE t1(c INT);
-ERROR 42000: CREATE command denied to user 'mysqltest_1'@'localhost' for table 't1'
+ERROR 42000: CREATE command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest2'.'t1'
SHOW TABLES;
Tables_in_mysqltest2
@@ -1187,9 +1187,9 @@
---> connection: bug27337_con2
SHOW COLUMNS FROM mysqltest2.t2;
-ERROR 42000: SELECT command denied to user 'mysqltest_2'@'localhost' for table 't2'
+ERROR 42000: SELECT command denied to user 'mysqltest_2'@'localhost' for table 'mysqltest2'.'t2'
EXECUTE stmt2;
-ERROR 42000: SELECT command denied to user 'mysqltest_2'@'localhost' for table 't2'
+ERROR 42000: SELECT command denied to user 'mysqltest_2'@'localhost' for table 'mysqltest2'.'t2'
---> connection: default
DROP DATABASE mysqltest1;
@@ -1267,7 +1267,7 @@
grant create on mysqltest.* to mysqltest@localhost;
create table t1 (i INT);
insert into t1 values (1);
-ERROR 42000: INSERT command denied to user 'mysqltest'@'localhost' for table 't1'
+ERROR 42000: INSERT command denied to user 'mysqltest'@'localhost' for table 'mysqltest'.'t1'
create table t2 (i INT);
create table t4 (i INT);
grant select, insert on mysqltest.t2 to mysqltest@localhost;
@@ -1277,20 +1277,20 @@
flush privileges;
insert into t2 values (1);
create table if not exists t1 select * from t2;
-ERROR 42000: INSERT command denied to user 'mysqltest'@'localhost' for table 't1'
+ERROR 42000: INSERT command denied to user 'mysqltest'@'localhost' for table 'mysqltest'.'t1'
create table if not exists t3 select * from t2;
-ERROR 42000: INSERT command denied to user 'mysqltest'@'localhost' for table 't3'
+ERROR 42000: INSERT command denied to user 'mysqltest'@'localhost' for table 'mysqltest'.'t3'
create table if not exists t4 select * from t2;
Warnings:
Note 1050 Table 't4' already exists
create table if not exists t5 select * from t2;
create table t6 select * from t2;
create table t7 select * from t2;
-ERROR 42000: INSERT command denied to user 'mysqltest'@'localhost' for table 't7'
+ERROR 42000: INSERT command denied to user 'mysqltest'@'localhost' for table 'mysqltest'.'t7'
create table t4 select * from t2;
ERROR 42S01: Table 't4' already exists
create table t1 select * from t2;
-ERROR 42000: INSERT command denied to user 'mysqltest'@'localhost' for table 't1'
+ERROR 42000: INSERT command denied to user 'mysqltest'@'localhost' for table 'mysqltest'.'t1'
drop table t1,t2,t4,t5,t6;
revoke create on mysqltest.* from mysqltest@localhost;
revoke select, insert on mysqltest.t2 from mysqltest@localhost;
@@ -1422,7 +1422,7 @@
SELECT * FROM `../db2/tb2`;
ERROR 42S02: Table 'db1.../db2/tb2' doesn't exist
SELECT * FROM `../db2`.tb2;
-ERROR 42000: SELECT command denied to user 'testbug'@'localhost' for table 'tb2'
+ERROR 42000: SELECT command denied to user 'testbug'@'localhost' for table '../db2'.'tb2'
SELECT * FROM `#mysql50#/../db2/tb2`;
ERROR 42000: Incorrect table name '#mysql50#/../db2/tb2'
DROP USER 'testbug'@localhost;
=== modified file 'mysql-test/r/grant2.result'
--- a/mysql-test/r/grant2.result 2009-10-30 05:06:10 +0000
+++ b/mysql-test/r/grant2.result 2010-10-23 16:37:55 +0000
@@ -83,9 +83,9 @@
GRANT SELECT, INSERT ON `mysqltest`.* TO 'mysqltest_1'@'localhost'
insert into t1 values (1, 'I can''t change it!');
update t1 set data='I can change it!' where id = 1;
-ERROR 42000: UPDATE command denied to user 'mysqltest_1'@'localhost' for table 't1'
+ERROR 42000: UPDATE command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest'.'t1'
insert into t1 values (1, 'XXX') on duplicate key update data= 'I can change it!';
-ERROR 42000: UPDATE command denied to user 'mysqltest_1'@'localhost' for table 't1'
+ERROR 42000: UPDATE command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest'.'t1'
select * from t1;
id data
1 I can't change it!
@@ -96,9 +96,9 @@
create table t1 (a int, b int);
grant select (a) on t1 to mysqltest_1@localhost with grant option;
grant select (a,b) on t1 to mysqltest_2@localhost;
-ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for column 'b' in table 't1'
+ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for column 'b' in table 'mysqltest'.'t1'
grant select on t1 to mysqltest_3@localhost;
-ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest'.'t1'
drop table t1;
delete from mysql.user where user like 'mysqltest\_%';
delete from mysql.db where user like 'mysqltest\_%';
@@ -269,7 +269,7 @@
create user mysqltest_2@localhost;
grant create user on *.* to mysqltest_2@localhost;
select host,user,password from mysql.user where user like 'mysqltest_%' order by host,user,password;
-ERROR 42000: SELECT command denied to user 'mysqltest_2'@'localhost' for table 'user'
+ERROR 42000: SELECT command denied to user 'mysqltest_2'@'localhost' for table 'mysql'.'user'
create user mysqltest_A@'%';
rename user mysqltest_A@'%' to mysqltest_B@'%';
drop user mysqltest_B@'%';
@@ -281,7 +281,7 @@
GRANT USAGE ON *.* TO 'mysqltest_3'@'localhost'
GRANT INSERT, UPDATE, DELETE ON `mysql`.* TO 'mysqltest_3'@'localhost'
select host,user,password from mysql.user where user like 'mysqltest_%' order by host,user,password;
-ERROR 42000: SELECT command denied to user 'mysqltest_3'@'localhost' for table 'user'
+ERROR 42000: SELECT command denied to user 'mysqltest_3'@'localhost' for table 'mysql'.'user'
insert into mysql.user set host='%', user='mysqltest_B';
Warnings:
Warning 1364 Field 'ssl_cipher' doesn't have a default value
@@ -391,9 +391,9 @@
use mysqltest_2;
create table t1 (i int);
show create table mysqltest_2.t1;
-ERROR 42000: SELECT command denied to user 'mysqltest_u1'@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user 'mysqltest_u1'@'localhost' for table 'mysqltest_2'.'t1'
create table t1 like mysqltest_2.t1;
-ERROR 42000: SELECT command denied to user 'mysqltest_u1'@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user 'mysqltest_u1'@'localhost' for table 'mysqltest_2'.'t1'
grant select on mysqltest_2.t1 to mysqltest_u1@localhost;
show create table mysqltest_2.t1;
Table Create Table
@@ -433,11 +433,11 @@
GRANT SELECT (b) ON t2 TO mysqltest1@localhost;
USE db1;
SELECT c FROM t2;
-ERROR 42000: SELECT command denied to user 'mysqltest1'@'localhost' for column 'c' in table 't2'
+ERROR 42000: SELECT command denied to user 'mysqltest1'@'localhost' for column 'c' in table 'db1'.'t2'
SELECT * FROM t2;
-ERROR 42000: SELECT command denied to user 'mysqltest1'@'localhost' for table 't2'
+ERROR 42000: SELECT command denied to user 'mysqltest1'@'localhost' for table 'db1'.'t2'
SELECT * FROM t1 JOIN t2 USING (b);
-ERROR 42000: SELECT command denied to user 'mysqltest1'@'localhost' for column 'c' in table 't2'
+ERROR 42000: SELECT command denied to user 'mysqltest1'@'localhost' for column 'c' in table 'db1'.'t2'
USE test;
DROP TABLE db1.t1, db1.t2;
DROP USER mysqltest1@localhost;
=== modified file 'mysql-test/r/grant3.result'
--- a/mysql-test/r/grant3.result 2009-10-20 06:17:57 +0000
+++ b/mysql-test/r/grant3.result 2010-10-23 16:37:55 +0000
@@ -189,7 +189,7 @@
# non privileged column. We shouldn't be able to
# access this column.
SELECT b FROM temp.t1;
-ERROR 42000: SELECT command denied to user 'user2'@'localhost' for column 'b' in table 't1'
+ERROR 42000: SELECT command denied to user 'user2'@'localhost' for column 'b' in table 'temp'.'t1'
DROP USER 'user2'@'%';
DROP DATABASE temp;
End of 5.0 tests
=== modified file 'mysql-test/r/grant_cache_no_prot.result'
--- a/mysql-test/r/grant_cache_no_prot.result 2009-05-20 13:27:44 +0000
+++ b/mysql-test/r/grant_cache_no_prot.result 2010-10-23 16:37:55 +0000
@@ -140,7 +140,7 @@
1 1 1 test.t1
2 2 2 test.t1
select * from t2;
-ERROR 42000: SELECT command denied to user 'mysqltest_2'@'localhost' for table 't2'
+ERROR 42000: SELECT command denied to user 'mysqltest_2'@'localhost' for table 'mysqltest'.'t2'
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 6
@@ -155,17 +155,17 @@
user3
user3
select * from t1;
-ERROR 42000: SELECT command denied to user 'mysqltest_3'@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user 'mysqltest_3'@'localhost' for table 'mysqltest'.'t1'
select a from t1;
a
1
2
select c from t1;
-ERROR 42000: SELECT command denied to user 'mysqltest_3'@'localhost' for column 'c' in table 't1'
+ERROR 42000: SELECT command denied to user 'mysqltest_3'@'localhost' for column 'c' in table 'mysqltest'.'t1'
select * from t2;
-ERROR 42000: SELECT command denied to user 'mysqltest_3'@'localhost' for table 't2'
+ERROR 42000: SELECT command denied to user 'mysqltest_3'@'localhost' for table 'mysqltest'.'t2'
select mysqltest.t1.c from test.t1,mysqltest.t1;
-ERROR 42000: SELECT command denied to user 'mysqltest_3'@'localhost' for column 'c' in table 't1'
+ERROR 42000: SELECT command denied to user 'mysqltest_3'@'localhost' for column 'c' in table 'mysqltest'.'t1'
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 6
=== modified file 'mysql-test/r/information_schema_db.result'
--- a/mysql-test/r/information_schema_db.result 2009-12-03 11:19:05 +0000
+++ b/mysql-test/r/information_schema_db.result 2010-10-23 16:37:55 +0000
@@ -144,17 +144,17 @@
use testdb_1;
revoke show view on v6 from testdb_2@localhost;
show fields from testdb_1.v5;
-ERROR 42000: SELECT command denied to user 'testdb_2'@'localhost' for table 'v5'
+ERROR 42000: SELECT command denied to user 'testdb_2'@'localhost' for table 'testdb_1'.'v5'
show create view testdb_1.v5;
-ERROR 42000: SELECT command denied to user 'testdb_2'@'localhost' for table 'v5'
+ERROR 42000: SELECT command denied to user 'testdb_2'@'localhost' for table 'testdb_1'.'v5'
show fields from testdb_1.v6;
-ERROR 42000: SELECT command denied to user 'testdb_2'@'localhost' for table 'v6'
+ERROR 42000: SELECT command denied to user 'testdb_2'@'localhost' for table 'testdb_1'.'v6'
show create view testdb_1.v6;
-ERROR 42000: SELECT command denied to user 'testdb_2'@'localhost' for table 'v6'
+ERROR 42000: SELECT command denied to user 'testdb_2'@'localhost' for table 'testdb_1'.'v6'
show fields from testdb_1.v7;
-ERROR 42000: SELECT command denied to user 'testdb_2'@'localhost' for table 'v7'
+ERROR 42000: SELECT command denied to user 'testdb_2'@'localhost' for table 'testdb_1'.'v7'
show create view testdb_1.v7;
-ERROR 42000: SELECT command denied to user 'testdb_2'@'localhost' for table 'v7'
+ERROR 42000: SELECT command denied to user 'testdb_2'@'localhost' for table 'testdb_1'.'v7'
show create view v4;
View Create View character_set_client collation_connection
v4 CREATE ALGORITHM=UNDEFINED DEFINER=`testdb_2`@`localhost` SQL SECURITY DEFINER VIEW `v4` AS select `v3`.`f1` AS `f1`,`v3`.`f2` AS `f2` from `testdb_1`.`v3` latin1 latin1_swedish_ci
@@ -172,7 +172,7 @@
View Create View character_set_client collation_connection
v2 CREATE ALGORITHM=UNDEFINED DEFINER=`testdb_2`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select `v1`.`f1` AS `f1` from `testdb_1`.`v1` latin1 latin1_swedish_ci
show create view testdb_1.v1;
-ERROR 42000: SHOW VIEW command denied to user 'testdb_2'@'localhost' for table 'v1'
+ERROR 42000: SHOW VIEW command denied to user 'testdb_2'@'localhost' for table 'testdb_1'.'v1'
select table_name from information_schema.columns a
where a.table_name = 'v2';
table_name
@@ -209,6 +209,6 @@
table_schema table_name view_definition
testdb_1 v1
show create view testdb_1.v1;
-ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'v1'
+ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'testdb_1'.'v1'
drop user mysqltest_1@localhost;
drop database testdb_1;
=== modified file 'mysql-test/r/insert_notembedded.result'
--- a/mysql-test/r/insert_notembedded.result 2007-09-06 16:22:34 +0000
+++ b/mysql-test/r/insert_notembedded.result 2010-10-23 16:37:55 +0000
@@ -32,7 +32,7 @@
ON table_source.id = stations.icao
LEFT JOIN table_target AS old
USING (mexs_id);
-ERROR 42000: INSERT,DELETE command denied to user 'user20989'@'localhost' for table 'table_target'
+ERROR 42000: INSERT,DELETE command denied to user 'user20989'@'localhost' for table 'meow'.'table_target'
REPLACE INTO view_target2
SELECT stations.mexs_id AS mexs_id, datetime AS messzeit
FROM table_source
@@ -40,7 +40,7 @@
ON table_source.id = stations.icao
LEFT JOIN view_target2 AS old
USING (mexs_id);
-ERROR 42000: INSERT,DELETE command denied to user 'user20989'@'localhost' for table 'view_target2'
+ERROR 42000: INSERT,DELETE command denied to user 'user20989'@'localhost' for table 'meow'.'view_target2'
REPLACE INTO view_target3
SELECT stations.mexs_id AS mexs_id, datetime AS messzeit
FROM table_source
@@ -60,7 +60,7 @@
LEFT JOIN table_target AS old
USING (mexs_id);
REPLACE INTO table_target2 VALUES ('00X45Y78','2006-07-12 07:50:00');
-ERROR 42000: INSERT,DELETE command denied to user 'user20989'@'localhost' for table 'table_target2'
+ERROR 42000: INSERT,DELETE command denied to user 'user20989'@'localhost' for table 'meow'.'table_target2'
REPLACE INTO view_target2 VALUES ('12X45Y78','2006-07-12 07:50:00');
SELECT stations.mexs_id AS mexs_id, datetime AS messzeit
FROM table_source
=== modified file 'mysql-test/r/lowercase_fs_off.result'
--- a/mysql-test/r/lowercase_fs_off.result 2009-10-27 08:09:19 +0000
+++ b/mysql-test/r/lowercase_fs_off.result 2010-10-23 16:37:55 +0000
@@ -16,7 +16,7 @@
CREATE TABLE t1(f1 INT);
GRANT SELECT ON T1 to user_1@localhost;
select * from t1;
-ERROR 42000: SELECT command denied to user 'user_1'@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user 'user_1'@'localhost' for table 'd1'.'t1'
select * from T1;
f1
GRANT SELECT ON t1 to user_1@localhost;
=== modified file 'mysql-test/r/mysqlbinlog.result'
--- a/mysql-test/r/mysqlbinlog.result 2010-03-28 11:57:33 +0000
+++ b/mysql-test/r/mysqlbinlog.result 2010-10-23 16:37:55 +0000
@@ -432,7 +432,7 @@
mysqlbinlog var/log/master-bin.000017 > var/tmp/bug31611.sql
mysql mysqltest1 -uuntrusted < var/tmp/bug31611.sql
INSERT INTO t1 VALUES (1,USER());
-ERROR 42000: INSERT command denied to user 'untrusted'@'localhost' for table 't1'
+ERROR 42000: INSERT command denied to user 'untrusted'@'localhost' for table 'mysqltest1'.'t1'
SELECT * FROM t1;
a b
1 root@localhost
=== modified file 'mysql-test/r/openssl_1.result'
--- a/mysql-test/r/openssl_1.result 2010-06-13 22:13:32 +0000
+++ b/mysql-test/r/openssl_1.result 2010-10-23 16:37:55 +0000
@@ -16,31 +16,31 @@
f1
5
delete from t1;
-ERROR 42000: DELETE command denied to user 'ssl_user1'@'localhost' for table 't1'
-SHOW STATUS LIKE 'Ssl_cipher';
-Variable_name Value
-Ssl_cipher DHE-RSA-AES256-SHA
-select * from t1;
-f1
-5
-delete from t1;
-ERROR 42000: DELETE command denied to user 'ssl_user2'@'localhost' for table 't1'
-SHOW STATUS LIKE 'Ssl_cipher';
-Variable_name Value
-Ssl_cipher DHE-RSA-AES256-SHA
-select * from t1;
-f1
-5
-delete from t1;
-ERROR 42000: DELETE command denied to user 'ssl_user3'@'localhost' for table 't1'
-SHOW STATUS LIKE 'Ssl_cipher';
-Variable_name Value
-Ssl_cipher DHE-RSA-AES256-SHA
-select * from t1;
-f1
-5
-delete from t1;
-ERROR 42000: DELETE command denied to user 'ssl_user4'@'localhost' for table 't1'
+ERROR 42000: DELETE command denied to user 'ssl_user1'@'localhost' for table 'test'.'t1'
+SHOW STATUS LIKE 'Ssl_cipher';
+Variable_name Value
+Ssl_cipher DHE-RSA-AES256-SHA
+select * from t1;
+f1
+5
+delete from t1;
+ERROR 42000: DELETE command denied to user 'ssl_user2'@'localhost' for table 'test'.'t1'
+SHOW STATUS LIKE 'Ssl_cipher';
+Variable_name Value
+Ssl_cipher DHE-RSA-AES256-SHA
+select * from t1;
+f1
+5
+delete from t1;
+ERROR 42000: DELETE command denied to user 'ssl_user3'@'localhost' for table 'test'.'t1'
+SHOW STATUS LIKE 'Ssl_cipher';
+Variable_name Value
+Ssl_cipher DHE-RSA-AES256-SHA
+select * from t1;
+f1
+5
+delete from t1;
+ERROR 42000: DELETE command denied to user 'ssl_user4'@'localhost' for table 'test'.'t1'
drop user ssl_user1@localhost, ssl_user2@localhost,
ssl_user3@localhost, ssl_user4@localhost, ssl_user5@localhost;
drop table t1;
=== modified file 'mysql-test/r/partition_grant.result'
--- a/mysql-test/r/partition_grant.result 2007-04-04 09:01:47 +0000
+++ b/mysql-test/r/partition_grant.result 2010-10-23 16:37:55 +0000
@@ -12,12 +12,12 @@
GRANT SELECT, ALTER ON `mysqltest_1`.* TO 'mysqltest_1'@'localhost'
alter table t1 add b int;
alter table t1 drop partition p2;
-ERROR 42000: DROP command denied to user 'mysqltest_1'@'localhost' for table 't1'
+ERROR 42000: DROP command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest_1'.'t1'
grant drop on mysqltest_1.* to mysqltest_1@localhost;
alter table t1 drop partition p2;
revoke alter on mysqltest_1.* from mysqltest_1@localhost;
alter table t1 drop partition p3;
-ERROR 42000: ALTER command denied to user 'mysqltest_1'@'localhost' for table 't1'
+ERROR 42000: ALTER command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest_1'.'t1'
revoke select,alter,drop on mysqltest_1.* from mysqltest_1@localhost;
drop table t1;
create table t1 (s1 int);
=== modified file 'mysql-test/r/plugin_not_embedded.result'
--- a/mysql-test/r/plugin_not_embedded.result 2010-03-13 21:32:42 +0000
+++ b/mysql-test/r/plugin_not_embedded.result 2010-10-23 16:37:55 +0000
@@ -4,7 +4,7 @@
GRANT INSERT ON mysql.plugin TO bug51770@localhost;
INSTALL PLUGIN example SONAME 'ha_example.so';
UNINSTALL PLUGIN example;
-ERROR 42000: DELETE command denied to user 'bug51770'@'localhost' for table 'plugin'
+ERROR 42000: DELETE command denied to user 'bug51770'@'localhost' for table 'mysql'.'plugin'
GRANT DELETE ON mysql.plugin TO bug51770@localhost;
UNINSTALL PLUGIN example;
DROP USER bug51770@localhost;
=== modified file 'mysql-test/r/ps_grant.result'
--- a/mysql-test/r/ps_grant.result 2009-10-27 10:09:36 +0000
+++ b/mysql-test/r/ps_grant.result 2010-10-23 16:37:55 +0000
@@ -26,7 +26,7 @@
my_col
1
select a as my_col from t1;
-ERROR 42000: SELECT command denied to user 'second_user'@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user 'second_user'@'localhost' for table 'mysqltest'.'t1'
grant select on mysqltest.t1 to second_user@localhost
identified by 'looser' ;
show grants for second_user@localhost ;
@@ -66,7 +66,7 @@
GRANT USAGE ON *.* TO 'second_user'@'localhost' IDENTIFIED BY PASSWORD '*13843FE600B19A81E32AF50D4A6FED25875FF1F3'
GRANT SELECT ON `mysqltest`.`t9` TO 'second_user'@'localhost'
execute s_t1 ;
-ERROR 42000: SELECT command denied to user 'second_user'@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user 'second_user'@'localhost' for table 'mysqltest'.'t1'
revoke all privileges, grant option from second_user@localhost ;
show grants for second_user@localhost ;
Grants for second_user@localhost
=== modified file 'mysql-test/r/show_check.result'
--- a/mysql-test/r/show_check.result 2010-09-03 16:20:30 +0000
+++ b/mysql-test/r/show_check.result 2010-10-23 16:37:55 +0000
@@ -524,19 +524,19 @@
Database Create Database
mysqltest CREATE DATABASE `mysqltest` /*!40100 DEFAULT CHARACTER SET latin1 */
drop table t1;
-ERROR 42000: DROP command denied to user 'mysqltest_1'@'localhost' for table 't1'
+ERROR 42000: DROP command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest'.'t1'
drop database mysqltest;
ERROR 42000: Access denied for user 'mysqltest_1'@'localhost' to database 'mysqltest'
select * from mysqltest.t1;
-ERROR 42000: SELECT command denied to user 'mysqltest_2'@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user 'mysqltest_2'@'localhost' for table 'mysqltest'.'t1'
show create database mysqltest;
ERROR 42000: Access denied for user 'mysqltest_2'@'localhost' to database 'mysqltest'
drop table mysqltest.t1;
-ERROR 42000: DROP command denied to user 'mysqltest_2'@'localhost' for table 't1'
+ERROR 42000: DROP command denied to user 'mysqltest_2'@'localhost' for table 'mysqltest'.'t1'
drop database mysqltest;
ERROR 42000: Access denied for user 'mysqltest_2'@'localhost' to database 'mysqltest'
select * from mysqltest.t1;
-ERROR 42000: SELECT command denied to user 'mysqltest_3'@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user 'mysqltest_3'@'localhost' for table 'mysqltest'.'t1'
show create database mysqltest;
Database Create Database
mysqltest CREATE DATABASE `mysqltest` /*!40100 DEFAULT CHARACTER SET latin1 */
=== modified file 'mysql-test/r/sp-security.result'
--- a/mysql-test/r/sp-security.result 2010-02-26 13:16:46 +0000
+++ b/mysql-test/r/sp-security.result 2010-10-23 16:37:55 +0000
@@ -40,7 +40,7 @@
db1_secret.db()
test
select * from db1_secret.t1;
-ERROR 42000: SELECT command denied to user 'user1'@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user 'user1'@'localhost' for table 'db1_secret'.'t1'
create procedure db1_secret.dummy() begin end;
ERROR 42000: Access denied for user 'user1'@'localhost' to database 'db1_secret'
drop procedure db1_secret.dummy;
@@ -54,7 +54,7 @@
db1_secret.db()
test
select * from db1_secret.t1;
-ERROR 42000: SELECT command denied to user ''@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user ''@'localhost' for table 'db1_secret'.'t1'
create procedure db1_secret.dummy() begin end;
ERROR 42000: Access denied for user ''@'%' to database 'db1_secret'
drop procedure db1_secret.dummy;
@@ -89,13 +89,13 @@
db()
test
call db1_secret.stamp(5);
-ERROR 42000: INSERT command denied to user 'user1'@'localhost' for table 't1'
+ERROR 42000: INSERT command denied to user 'user1'@'localhost' for table 'db1_secret'.'t1'
select db1_secret.db();
-ERROR 42000: SELECT command denied to user 'user1'@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user 'user1'@'localhost' for table 'db1_secret'.'t1'
call db1_secret.stamp(6);
-ERROR 42000: INSERT command denied to user ''@'localhost' for table 't1'
+ERROR 42000: INSERT command denied to user ''@'localhost' for table 'db1_secret'.'t1'
select db1_secret.db();
-ERROR 42000: SELECT command denied to user ''@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user ''@'localhost' for table 'db1_secret'.'t1'
drop database if exists db2;
create database db2;
use db2;
@@ -110,7 +110,7 @@
use db2;
create procedure p () insert into t2 values (1);
call p();
-ERROR 42000: INSERT command denied to user 'user1'@'localhost' for table 't2'
+ERROR 42000: INSERT command denied to user 'user1'@'localhost' for table 'db2'.'t2'
use db2;
call p();
ERROR 42000: execute command denied to user 'user2'@'localhost' for routine 'db2.p'
@@ -326,9 +326,9 @@
call db_bug14533.bug14533_2();
id
desc db_bug14533.t1;
-ERROR 42000: SELECT command denied to user 'user_bug14533'@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user 'user_bug14533'@'localhost' for table 'db_bug14533'.'t1'
select * from db_bug14533.t1;
-ERROR 42000: SELECT command denied to user 'user_bug14533'@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user 'user_bug14533'@'localhost' for table 'db_bug14533'.'t1'
drop user user_bug14533@localhost;
drop database db_bug14533;
@@ -483,24 +483,24 @@
END|
CREATE SQL SECURITY INVOKER VIEW v1 AS SELECT f_evil();
SELECT COUNT(*) FROM t1;
-ERROR 42000: SELECT command denied to user 'mysqltest_u1'@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user 'mysqltest_u1'@'localhost' for table 'test'.'t1'
SELECT f_evil();
-ERROR 42000: SELECT command denied to user 'mysqltest_u1'@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user 'mysqltest_u1'@'localhost' for table 'test'.'t1'
SELECT @a, @b;
@a @b
mysqltest_u1@localhost NULL
SELECT f_suid(f_evil());
-ERROR 42000: SELECT command denied to user 'mysqltest_u1'@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user 'mysqltest_u1'@'localhost' for table 'test'.'t1'
SELECT @a, @b;
@a @b
mysqltest_u1@localhost NULL
CALL p_suid(f_evil());
-ERROR 42000: SELECT command denied to user 'mysqltest_u1'@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user 'mysqltest_u1'@'localhost' for table 'test'.'t1'
SELECT @a, @b;
@a @b
mysqltest_u1@localhost NULL
SELECT * FROM v1;
-ERROR 42000: SELECT command denied to user 'mysqltest_u1'@'localhost' for table 'v1'
+ERROR 42000: SELECT command denied to user 'mysqltest_u1'@'localhost' for table 'test'.'v1'
SELECT @a, @b;
@a @b
mysqltest_u1@localhost NULL
=== modified file 'mysql-test/r/status.result'
--- a/mysql-test/r/status.result 2009-06-10 08:58:36 +0000
+++ b/mysql-test/r/status.result 2010-10-23 16:37:55 +0000
@@ -201,13 +201,13 @@
create function func37908() returns int sql security invoker
return (select * from db37908.t1 limit 1)|
select * from db37908.t1;
-ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'db37908'.'t1'
show status where variable_name ='uptime' and 2 in (select * from db37908.t1);
-ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'db37908'.'t1'
show procedure status where name ='proc37908' and 1 in (select f1 from db37908.t1);
-ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'db37908'.'t1'
show function status where name ='func37908' and 1 in (select func37908());
-ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'db37908'.'t1'
drop database db37908;
drop procedure proc37908;
drop function func37908;
=== modified file 'mysql-test/r/timezone_grant.result'
--- a/mysql-test/r/timezone_grant.result 2006-04-25 14:20:49 +0000
+++ b/mysql-test/r/timezone_grant.result 2010-10-23 16:37:55 +0000
@@ -22,9 +22,9 @@
update t1, t2 set t1.b = convert_tz('2004-10-21 19:00:00', 'Europe/Moscow', 'UTC')
where t1.a = t2.c and t2.d = (select max(d) from t2);
select * from mysql.time_zone_name;
-ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'time_zone_name'
+ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'mysql'.'time_zone_name'
select Name, convert_tz('2004-10-21 19:00:00', Name, 'UTC') from mysql.time_zone_name;
-ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'time_zone_name'
+ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'mysql'.'time_zone_name'
delete from mysql.db where user like 'mysqltest\_%';
flush privileges;
grant all privileges on test.t1 to mysqltest_1@localhost;
@@ -46,9 +46,9 @@
update t1, t2 set t1.b = convert_tz('2004-11-30 12:00:00', 'Europe/Moscow', 'UTC')
where t1.a = t2.c and t2.d = (select max(d) from t2);
select * from mysql.time_zone_name;
-ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'time_zone_name'
+ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'mysql'.'time_zone_name'
select Name, convert_tz('2004-11-30 12:00:00', Name, 'UTC') from mysql.time_zone_name;
-ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'time_zone_name'
+ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'mysql'.'time_zone_name'
drop table t1, t2;
create table t1 (a int, b datetime);
create table t2 (a int, b varchar(40));
@@ -70,9 +70,9 @@
1 2001-01-01 03:00:00
2 2002-01-01 03:00:00
select * from v1, mysql.time_zone;
-ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'time_zone'
+ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'mysql'.'time_zone'
drop view v1;
create view v1 as select a, convert_tz(b, 'UTC', 'Europe/Moscow') as lb from t1, mysql.time_zone;
-ERROR 42000: ANY command denied to user 'mysqltest_1'@'localhost' for table 'time_zone'
+ERROR 42000: ANY command denied to user 'mysqltest_1'@'localhost' for table 'mysql'.'time_zone'
drop table t1;
drop user mysqltest_1@localhost;
=== modified file 'mysql-test/r/trigger_notembedded.result'
--- a/mysql-test/r/trigger_notembedded.result 2010-01-12 08:19:48 +0000
+++ b/mysql-test/r/trigger_notembedded.result 2010-10-23 16:37:55 +0000
@@ -24,7 +24,7 @@
CREATE TRIGGER trg1 AFTER INSERT ON t1
FOR EACH ROW
INSERT INTO t2 VALUES(CURRENT_USER());
-ERROR 42000: TRIGGER command denied to user 'mysqltest_dfn'@'localhost' for table 't1'
+ERROR 42000: TRIGGER command denied to user 'mysqltest_dfn'@'localhost' for table 'mysqltest_db1'.'t1'
---> connection: default
GRANT TRIGGER ON mysqltest_db1.t1 TO mysqltest_dfn@localhost;
@@ -39,11 +39,11 @@
---> connection: wl2818_definer_con
DROP TRIGGER trg1;
-ERROR 42000: TRIGGER command denied to user 'mysqltest_dfn'@'localhost' for table 't1'
+ERROR 42000: TRIGGER command denied to user 'mysqltest_dfn'@'localhost' for table 'mysqltest_db1'.'t1'
---> connection: wl2818_definer_con
INSERT INTO t1 VALUES(0);
-ERROR 42000: TRIGGER command denied to user 'mysqltest_dfn'@'localhost' for table 't1'
+ERROR 42000: TRIGGER command denied to user 'mysqltest_dfn'@'localhost' for table 'mysqltest_db1'.'t1'
---> connection: default
GRANT TRIGGER ON mysqltest_db1.t1 TO mysqltest_dfn@localhost;
@@ -99,7 +99,7 @@
---> connection: wl2818_invoker_con
use mysqltest_db1;
INSERT INTO t1 VALUES(3);
-ERROR 42000: INSERT command denied to user 'mysqltest_dfn'@'localhost' for table 't2'
+ERROR 42000: INSERT command denied to user 'mysqltest_dfn'@'localhost' for table 'mysqltest_db1'.'t2'
SELECT * FROM t1;
num_value
1
@@ -296,7 +296,7 @@
GRANT UPDATE(col) ON mysqltest_db1.t3 TO mysqltest_u1@localhost;
GRANT UPDATE(col) ON mysqltest_db1.t4 TO mysqltest_u1@localhost;
INSERT INTO t1 VALUES('line1');
-ERROR 42000: SELECT command denied to user 'mysqltest_u1'@'localhost' for column 'col' in table 't1'
+ERROR 42000: SELECT command denied to user 'mysqltest_u1'@'localhost' for column 'col' in table 'mysqltest_db1'.'t1'
SELECT * FROM t1;
col
line1
@@ -308,7 +308,7 @@
col
t2_trg_before_insert
INSERT INTO t3 VALUES('t3_line1');
-ERROR 42000: SELECT command denied to user 'mysqltest_u1'@'localhost' for column 'col' in table 't3'
+ERROR 42000: SELECT command denied to user 'mysqltest_u1'@'localhost' for column 'col' in table 'mysqltest_db1'.'t3'
SELECT * FROM t3;
col
t3_line1
@@ -339,7 +339,7 @@
@mysqltest_var
line3
INSERT INTO t2 VALUES('line4');
-ERROR 42000: UPDATE command denied to user 'mysqltest_u1'@'localhost' for column 'col' in table 't2'
+ERROR 42000: UPDATE command denied to user 'mysqltest_u1'@'localhost' for column 'col' in table 'mysqltest_db1'.'t2'
SELECT * FROM t2;
col
t2_trg_before_insert
@@ -352,7 +352,7 @@
@mysqltest_var
t3_line2
INSERT INTO t4 VALUES('t4_line2');
-ERROR 42000: UPDATE command denied to user 'mysqltest_u1'@'localhost' for column 'col' in table 't4'
+ERROR 42000: UPDATE command denied to user 'mysqltest_u1'@'localhost' for column 'col' in table 'mysqltest_db1'.'t4'
SELECT * FROM t4;
col
t4_trg_before_insert
@@ -383,9 +383,9 @@
CREATE TRIGGER t2_bi BEFORE INSERT ON t2 FOR EACH ROW
CALL p2(NEW.i1);
INSERT INTO t1 VALUES (7);
-ERROR 42000: UPDATE command denied to user 'mysqltest_dfn'@'localhost' for column 'i1' in table 't1'
+ERROR 42000: UPDATE command denied to user 'mysqltest_dfn'@'localhost' for column 'i1' in table 'mysqltest_db1'.'t1'
INSERT INTO t2 VALUES (11);
-ERROR 42000: SELECT,UPDATE command denied to user 'mysqltest_dfn'@'localhost' for column 'i1' in table 't2'
+ERROR 42000: SELECT,UPDATE command denied to user 'mysqltest_dfn'@'localhost' for column 'i1' in table 'mysqltest_db1'.'t2'
DROP TRIGGER t2_bi;
DROP TRIGGER t1_bi;
GRANT SELECT ON mysqltest_db1.* TO mysqltest_dfn@localhost;
@@ -394,9 +394,9 @@
CREATE TRIGGER t2_bi BEFORE INSERT ON t2 FOR EACH ROW
CALL p2(NEW.i1);
INSERT INTO t1 VALUES (13);
-ERROR 42000: UPDATE command denied to user 'mysqltest_dfn'@'localhost' for column 'i1' in table 't1'
+ERROR 42000: UPDATE command denied to user 'mysqltest_dfn'@'localhost' for column 'i1' in table 'mysqltest_db1'.'t1'
INSERT INTO t2 VALUES (17);
-ERROR 42000: UPDATE command denied to user 'mysqltest_dfn'@'localhost' for column 'i1' in table 't2'
+ERROR 42000: UPDATE command denied to user 'mysqltest_dfn'@'localhost' for column 'i1' in table 'mysqltest_db1'.'t2'
REVOKE SELECT ON mysqltest_db1.* FROM mysqltest_dfn@localhost;
DROP TRIGGER t2_bi;
DROP TRIGGER t1_bi;
@@ -407,7 +407,7 @@
CALL p2(NEW.i1);
INSERT INTO t1 VALUES (19);
INSERT INTO t2 VALUES (23);
-ERROR 42000: SELECT command denied to user 'mysqltest_dfn'@'localhost' for column 'i1' in table 't2'
+ERROR 42000: SELECT command denied to user 'mysqltest_dfn'@'localhost' for column 'i1' in table 'mysqltest_db1'.'t2'
REVOKE UPDATE ON mysqltest_db1.* FROM mysqltest_dfn@localhost;
DROP TRIGGER t2_bi;
DROP TRIGGER t1_bi;
@@ -431,11 +431,11 @@
DROP PROCEDURE p1;
CREATE PROCEDURE p1(IN i INT) DETERMINISTIC NO SQL SET @v1 = i + 43;
INSERT INTO t1 VALUES (47);
-ERROR 42000: SELECT command denied to user 'mysqltest_dfn'@'localhost' for column 'i1' in table 't1'
+ERROR 42000: SELECT command denied to user 'mysqltest_dfn'@'localhost' for column 'i1' in table 'mysqltest_db1'.'t1'
DROP PROCEDURE p1;
CREATE PROCEDURE p1(INOUT i INT) DETERMINISTIC NO SQL SET i = i + 51;
INSERT INTO t1 VALUES (53);
-ERROR 42000: SELECT command denied to user 'mysqltest_dfn'@'localhost' for column 'i1' in table 't1'
+ERROR 42000: SELECT command denied to user 'mysqltest_dfn'@'localhost' for column 'i1' in table 'mysqltest_db1'.'t1'
DROP PROCEDURE p1;
REVOKE UPDATE ON mysqltest_db1.* FROM mysqltest_dfn@localhost;
DROP TRIGGER t1_bi;
=== modified file 'mysql-test/r/view_grant.result'
--- a/mysql-test/r/view_grant.result 2010-02-12 02:54:14 +0000
+++ b/mysql-test/r/view_grant.result 2010-10-23 16:37:55 +0000
@@ -19,13 +19,13 @@
ERROR 42000: Access denied; you need the SUPER privilege for this operation
create view v1 as select * from mysqltest.t1;
alter view v1 as select * from mysqltest.t1;
-ERROR 42000: DROP command denied to user 'mysqltest_1'@'localhost' for table 'v1'
+ERROR 42000: DROP command denied to user 'mysqltest_1'@'localhost' for table 'test'.'v1'
create or replace view v1 as select * from mysqltest.t1;
-ERROR 42000: DROP command denied to user 'mysqltest_1'@'localhost' for table 'v1'
+ERROR 42000: DROP command denied to user 'mysqltest_1'@'localhost' for table 'test'.'v1'
create view mysqltest.v2 as select * from mysqltest.t1;
-ERROR 42000: CREATE VIEW command denied to user 'mysqltest_1'@'localhost' for table 'v2'
+ERROR 42000: CREATE VIEW command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest'.'v2'
create view v2 as select * from mysqltest.t2;
-ERROR 42000: ANY command denied to user 'mysqltest_1'@'localhost' for table 't2'
+ERROR 42000: ANY command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest'.'t2'
show create view v1;
View Create View character_set_client collation_connection
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`mysqltest_1`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `mysqltest`.`t1`.`a` AS `a`,`mysqltest`.`t1`.`b` AS `b` from `mysqltest`.`t1` latin1 latin1_swedish_ci
@@ -44,7 +44,7 @@
select c from mysqltest.v1;
c
select d from mysqltest.v1;
-ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for column 'd' in table 'v1'
+ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for column 'd' in table 'mysqltest'.'v1'
revoke all privileges on mysqltest.v1 from mysqltest_1@localhost;
delete from mysql.user where user='mysqltest_1';
drop database mysqltest;
@@ -55,7 +55,7 @@
select c from mysqltest.v1;
c
select d from mysqltest.v1;
-ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for column 'd' in table 'v1'
+ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for column 'd' in table 'mysqltest'.'v1'
revoke all privileges on mysqltest.v1 from mysqltest_1@localhost;
delete from mysql.user where user='mysqltest_1';
drop database mysqltest;
@@ -89,39 +89,39 @@
explain select c from mysqltest.v1;
ERROR HY000: EXPLAIN/SHOW can not be issued; lacking privileges for underlying table
show create view mysqltest.v1;
-ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'v1'
+ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest'.'v1'
explain select c from mysqltest.v2;
ERROR HY000: EXPLAIN/SHOW can not be issued; lacking privileges for underlying table
show create view mysqltest.v2;
-ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'v2'
+ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest'.'v2'
explain select c from mysqltest.v3;
ERROR HY000: EXPLAIN/SHOW can not be issued; lacking privileges for underlying table
show create view mysqltest.v3;
-ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'v3'
+ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest'.'v3'
explain select c from mysqltest.v4;
ERROR HY000: EXPLAIN/SHOW can not be issued; lacking privileges for underlying table
show create view mysqltest.v4;
-ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'v4'
+ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest'.'v4'
grant select on mysqltest.t1 to mysqltest_1@localhost;
explain select c from mysqltest.v1;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 system NULL NULL NULL NULL 0 const row not found
show create view mysqltest.v1;
-ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'v1'
+ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest'.'v1'
explain select c from mysqltest.v2;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> system NULL NULL NULL NULL 0 const row not found
2 DERIVED NULL NULL NULL NULL NULL NULL NULL no matching row in const table
show create view mysqltest.v2;
-ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'v2'
+ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest'.'v2'
explain select c from mysqltest.v3;
ERROR HY000: EXPLAIN/SHOW can not be issued; lacking privileges for underlying table
show create view mysqltest.v3;
-ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'v3'
+ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest'.'v3'
explain select c from mysqltest.v4;
ERROR HY000: EXPLAIN/SHOW can not be issued; lacking privileges for underlying table
show create view mysqltest.v4;
-ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'v4'
+ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest'.'v4'
grant show view on mysqltest.* to mysqltest_1@localhost;
explain select c from mysqltest.v1;
id select_type table type possible_keys key key_len ref rows Extra
@@ -197,13 +197,13 @@
62 5
71 10
update t2,v2 set v2.c=v2.a+v2.c where t2.x=v2.c;
-ERROR 42000: UPDATE command denied to user 'mysqltest_1'@'localhost' for column 'c' in table 'v2'
+ERROR 42000: UPDATE command denied to user 'mysqltest_1'@'localhost' for column 'c' in table 'mysqltest'.'v2'
update v2 set c=a+c;
-ERROR 42000: UPDATE command denied to user 'mysqltest_1'@'localhost' for column 'c' in table 'v2'
+ERROR 42000: UPDATE command denied to user 'mysqltest_1'@'localhost' for column 'c' in table 'mysqltest'.'v2'
update t2,v3 set v3.a=v3.a+v3.c where t2.x=v3.c;
-ERROR 42000: UPDATE command denied to user 'mysqltest_1'@'localhost' for table 'v3'
+ERROR 42000: UPDATE command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest'.'v3'
update v3 set a=a+c;
-ERROR 42000: UPDATE command denied to user 'mysqltest_1'@'localhost' for table 'v3'
+ERROR 42000: UPDATE command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest'.'v3'
use test;
REVOKE ALL PRIVILEGES, GRANT OPTION FROM mysqltest_1@localhost;
drop database mysqltest;
@@ -229,9 +229,9 @@
a b
5 10
delete v2 from t2,v2 where t2.x=v2.c;
-ERROR 42000: DELETE command denied to user 'mysqltest_1'@'localhost' for table 'v2'
+ERROR 42000: DELETE command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest'.'v2'
delete from v2 where c < 4;
-ERROR 42000: DELETE command denied to user 'mysqltest_1'@'localhost' for table 'v2'
+ERROR 42000: DELETE command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest'.'v2'
use test;
REVOKE ALL PRIVILEGES, GRANT OPTION FROM mysqltest_1@localhost;
drop database mysqltest;
@@ -259,9 +259,9 @@
5 6
3 4
insert into v2 values (5,6);
-ERROR 42000: INSERT command denied to user 'mysqltest_1'@'localhost' for table 'v2'
+ERROR 42000: INSERT command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest'.'v2'
insert into v2 select x,y from t2;
-ERROR 42000: INSERT command denied to user 'mysqltest_1'@'localhost' for table 'v2'
+ERROR 42000: INSERT command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest'.'v2'
use test;
REVOKE ALL PRIVILEGES, GRANT OPTION FROM mysqltest_1@localhost;
drop database mysqltest;
@@ -274,9 +274,9 @@
create view v1 as select * from mysqltest.t1;
create view v2 as select b from mysqltest.t2;
create view mysqltest.v1 as select * from mysqltest.t1;
-ERROR 42000: CREATE VIEW command denied to user 'mysqltest_1'@'localhost' for table 'v1'
+ERROR 42000: CREATE VIEW command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest'.'v1'
create view v3 as select a from mysqltest.t2;
-ERROR 42000: ANY command denied to user 'mysqltest_1'@'localhost' for column 'a' in table 't2'
+ERROR 42000: ANY command denied to user 'mysqltest_1'@'localhost' for column 'a' in table 'mysqltest'.'t2'
create table mysqltest.v3 (b int);
grant create view on mysqltest.v3 to mysqltest_1@localhost;
drop table mysqltest.v3;
@@ -285,10 +285,10 @@
drop view mysqltest.v3;
create view mysqltest.v3 as select b from mysqltest.t2;
create view v4 as select b+1 from mysqltest.t2;
-ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for column 'b' in table 't2'
+ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for column 'b' in table 'mysqltest'.'t2'
grant create view,update,select on test.* to mysqltest_1@localhost;
create view v4 as select b+1 from mysqltest.t2;
-ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for column 'b' in table 't2'
+ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for column 'b' in table 'mysqltest'.'t2'
grant update,select(b) on mysqltest.t2 to mysqltest_1@localhost;
create view v4 as select b+1 from mysqltest.t2;
REVOKE ALL PRIVILEGES, GRANT OPTION FROM mysqltest_1@localhost;
@@ -507,7 +507,7 @@
use mysqltest;
LOCK TABLES v1 READ;
SHOW CREATE TABLE v1;
-ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'v1'
+ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'mysqltest'.'v1'
UNLOCK TABLES;
use test;
use test;
@@ -560,31 +560,31 @@
SELECT 1 FROM mysqltest1.v_t1;
ERROR HY000: View 'mysqltest1.v_t1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
SELECT * FROM mysqltest1.t1;
-ERROR 42000: SELECT command denied to user 'readonly'@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user 'readonly'@'localhost' for table 'mysqltest1'.'t1'
SELECT * FROM mysqltest1.v_ts;
x
1
2
SELECT * FROM mysqltest1.v_ts, mysqltest1.t1 WHERE mysqltest1.t1.x = mysqltest1.v_ts.x;
-ERROR 42000: SELECT command denied to user 'readonly'@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user 'readonly'@'localhost' for table 'mysqltest1'.'t1'
SELECT * FROM mysqltest1.v_ti;
-ERROR 42000: SELECT command denied to user 'readonly'@'localhost' for table 'v_ti'
+ERROR 42000: SELECT command denied to user 'readonly'@'localhost' for table 'mysqltest1'.'v_ti'
INSERT INTO mysqltest1.v_ts VALUES (100);
-ERROR 42000: INSERT command denied to user 'readonly'@'localhost' for table 'v_ts'
+ERROR 42000: INSERT command denied to user 'readonly'@'localhost' for table 'mysqltest1'.'v_ts'
INSERT INTO mysqltest1.v_ti VALUES (100);
UPDATE mysqltest1.v_ts SET x= 200 WHERE x = 100;
-ERROR 42000: UPDATE command denied to user 'readonly'@'localhost' for table 'v_ts'
+ERROR 42000: UPDATE command denied to user 'readonly'@'localhost' for table 'mysqltest1'.'v_ts'
UPDATE mysqltest1.v_ts SET x= 200;
-ERROR 42000: UPDATE command denied to user 'readonly'@'localhost' for table 'v_ts'
+ERROR 42000: UPDATE command denied to user 'readonly'@'localhost' for table 'mysqltest1'.'v_ts'
UPDATE mysqltest1.v_tu SET x= 200 WHERE x = 100;
UPDATE mysqltest1.v_tus SET x= 200 WHERE x = 100;
UPDATE mysqltest1.v_tu SET x= 200;
DELETE FROM mysqltest1.v_ts WHERE x= 200;
-ERROR 42000: DELETE command denied to user 'readonly'@'localhost' for table 'v_ts'
+ERROR 42000: DELETE command denied to user 'readonly'@'localhost' for table 'mysqltest1'.'v_ts'
DELETE FROM mysqltest1.v_ts;
-ERROR 42000: DELETE command denied to user 'readonly'@'localhost' for table 'v_ts'
+ERROR 42000: DELETE command denied to user 'readonly'@'localhost' for table 'mysqltest1'.'v_ts'
DELETE FROM mysqltest1.v_td WHERE x= 200;
-ERROR 42000: SELECT command denied to user 'readonly'@'localhost' for column 'x' in table 'v_td'
+ERROR 42000: SELECT command denied to user 'readonly'@'localhost' for column 'x' in table 'mysqltest1'.'v_td'
DELETE FROM mysqltest1.v_tds WHERE x= 200;
DELETE FROM mysqltest1.v_td;
DROP VIEW mysqltest1.v_tds;
@@ -719,7 +719,7 @@
DROP USER def_17254@localhost;
for a user
SELECT * FROM v1;
-ERROR 42000: SELECT command denied to user 'inv_17254'@'localhost' for table 'v1'
+ERROR 42000: SELECT command denied to user 'inv_17254'@'localhost' for table 'db17254'.'v1'
for a superuser
SELECT * FROM v1;
ERROR HY000: The user specified as a definer ('def_17254'@'localhost') does not exist
@@ -756,11 +756,11 @@
REVOKE SELECT ON t2 FROM mysqltest_u2@localhost;
UPDATE t2 SET s = 'private' WHERE s = 'public';
SELECT * FROM mysqltest_db1.v1, mysqltest_db1.t2;
-ERROR 42000: SELECT command denied to user 'mysqltest_u2'@'localhost' for table 't2'
+ERROR 42000: SELECT command denied to user 'mysqltest_u2'@'localhost' for table 'mysqltest_db1'.'t2'
EXECUTE stmt1;
-ERROR 42000: SELECT command denied to user 'mysqltest_u2'@'localhost' for table 't2'
+ERROR 42000: SELECT command denied to user 'mysqltest_u2'@'localhost' for table 'mysqltest_db1'.'t2'
EXECUTE stmt2;
-ERROR 42000: SELECT command denied to user 'mysqltest_u2'@'localhost' for table 't2'
+ERROR 42000: SELECT command denied to user 'mysqltest_u2'@'localhost' for table 'mysqltest_db1'.'t2'
REVOKE ALL ON mysqltest_db1.* FROM mysqltest_u1@localhost;
REVOKE ALL ON mysqltest_db2.* FROM mysqltest_u2@localhost;
DROP DATABASE mysqltest_db1;
@@ -875,22 +875,22 @@
UPDATE v3 SET c3 = 332 WHERE c3 = 32;
DELETE FROM v4 WHERE c4 = 43;
CREATE VIEW v12 AS SELECT c1, c2 FROM mysqltest1.t1, mysqltest1.t2;
-ERROR 42000: create view command denied to user 'mysqltest_u1'@'localhost' for column 'c2' in table 'v12'
+ERROR 42000: create view command denied to user 'mysqltest_u1'@'localhost' for column 'c2' in table 'mysqltest2'.'v12'
CREATE VIEW v13 AS SELECT c1, c3 FROM mysqltest1.t1, mysqltest1.t3;
CREATE VIEW v14 AS SELECT c1, c4 FROM mysqltest1.t1, mysqltest1.t4;
CREATE VIEW v21 AS SELECT c2, c1 FROM mysqltest1.t2, mysqltest1.t1;
-ERROR 42000: create view command denied to user 'mysqltest_u1'@'localhost' for column 'c1' in table 'v21'
+ERROR 42000: create view command denied to user 'mysqltest_u1'@'localhost' for column 'c1' in table 'mysqltest2'.'v21'
CREATE VIEW v23 AS SELECT c2, c3 FROM mysqltest1.t2, mysqltest1.t3;
-ERROR 42000: create view command denied to user 'mysqltest_u1'@'localhost' for column 'c3' in table 'v23'
+ERROR 42000: create view command denied to user 'mysqltest_u1'@'localhost' for column 'c3' in table 'mysqltest2'.'v23'
CREATE VIEW v24 AS SELECT c2, c4 FROM mysqltest1.t2, mysqltest1.t4;
-ERROR 42000: create view command denied to user 'mysqltest_u1'@'localhost' for column 'c4' in table 'v24'
+ERROR 42000: create view command denied to user 'mysqltest_u1'@'localhost' for column 'c4' in table 'mysqltest2'.'v24'
CREATE VIEW v31 AS SELECT c3, c1 FROM mysqltest1.t3, mysqltest1.t1;
CREATE VIEW v32 AS SELECT c3, c2 FROM mysqltest1.t3, mysqltest1.t2;
-ERROR 42000: create view command denied to user 'mysqltest_u1'@'localhost' for column 'c2' in table 'v32'
+ERROR 42000: create view command denied to user 'mysqltest_u1'@'localhost' for column 'c2' in table 'mysqltest2'.'v32'
CREATE VIEW v34 AS SELECT c3, c4 FROM mysqltest1.t3, mysqltest1.t4;
CREATE VIEW v41 AS SELECT c4, c1 FROM mysqltest1.t4, mysqltest1.t1;
CREATE VIEW v42 AS SELECT c4, c2 FROM mysqltest1.t4, mysqltest1.t2;
-ERROR 42000: create view command denied to user 'mysqltest_u1'@'localhost' for column 'c2' in table 'v42'
+ERROR 42000: create view command denied to user 'mysqltest_u1'@'localhost' for column 'c2' in table 'mysqltest2'.'v42'
CREATE VIEW v43 AS SELECT c4, c3 FROM mysqltest1.t4, mysqltest1.t3;
---> connection: default
@@ -931,15 +931,15 @@
SELECT f1 FROM t1;
f1
SELECT f2 FROM t1;
-ERROR 42000: SELECT command denied to user 'foo'@'localhost' for column 'f2' in table 't1'
+ERROR 42000: SELECT command denied to user 'foo'@'localhost' for column 'f2' in table 'db1'.'t1'
SELECT * FROM t1;
-ERROR 42000: SELECT command denied to user 'foo'@'localhost' for table 't1'
+ERROR 42000: SELECT command denied to user 'foo'@'localhost' for table 'db1'.'t1'
SELECT f1 FROM v1;
f1
SELECT f2 FROM v1;
-ERROR 42000: SELECT command denied to user 'foo'@'localhost' for column 'f2' in table 'v1'
+ERROR 42000: SELECT command denied to user 'foo'@'localhost' for column 'f2' in table 'db1'.'v1'
SELECT * FROM v1;
-ERROR 42000: SELECT command denied to user 'foo'@'localhost' for table 'v1'
+ERROR 42000: SELECT command denied to user 'foo'@'localhost' for table 'db1'.'v1'
USE test;
REVOKE SELECT (f1) ON db1.t1 FROM foo;
REVOKE SELECT (f1) ON db1.v1 FROM foo;
@@ -995,9 +995,9 @@
This would lead to failed assertion.
CREATE VIEW v1 AS SELECT a, b FROM t1, t2;
SELECT * FROM v1;
-ERROR 42000: SELECT command denied to user 'mysqluser1'@'localhost' for table 'v1'
+ERROR 42000: SELECT command denied to user 'mysqluser1'@'localhost' for table 'mysqltest1'.'v1'
SELECT b FROM v1;
-ERROR 42000: SELECT command denied to user 'mysqluser1'@'localhost' for table 'v1'
+ERROR 42000: SELECT command denied to user 'mysqluser1'@'localhost' for table 'mysqltest1'.'v1'
DROP TABLE t1, t2;
DROP VIEW v1;
DROP DATABASE mysqltest1;
@@ -1013,9 +1013,9 @@
GRANT SELECT( a ) ON v1 TO mysqluser1@localhost;
GRANT UPDATE( b ) ON t2 TO mysqluser1@localhost;
SELECT * FROM mysqltest1.v1;
-ERROR 42000: SELECT command denied to user 'mysqluser1'@'localhost' for table 'v1'
+ERROR 42000: SELECT command denied to user 'mysqluser1'@'localhost' for table 'mysqltest1'.'v1'
CREATE VIEW v1 AS SELECT * FROM mysqltest1.t2;
-ERROR 42000: ANY command denied to user 'mysqluser1'@'localhost' for table 't2'
+ERROR 42000: ANY command denied to user 'mysqluser1'@'localhost' for table 'mysqltest1'.'t2'
DROP TABLE t1, t2;
DROP VIEW v1;
DROP DATABASE mysqltest1;
@@ -1032,9 +1032,9 @@
PREPARE stmt_v2 FROM "SELECT * FROM mysqltest1.v2";
REVOKE SELECT ON mysqltest1.* FROM mysqluser1@localhost;
EXECUTE stmt_v1;
-ERROR 42000: SELECT command denied to user 'mysqluser1'@'localhost' for table 'v1'
+ERROR 42000: SELECT command denied to user 'mysqluser1'@'localhost' for table 'mysqltest1'.'v1'
EXECUTE stmt_v2;
-ERROR 42000: SELECT command denied to user 'mysqluser1'@'localhost' for table 'v2'
+ERROR 42000: SELECT command denied to user 'mysqluser1'@'localhost' for table 'mysqltest1'.'v2'
PREPARE stmt FROM "SELECT a FROM v3";
EXECUTE stmt;
a
@@ -1183,11 +1183,11 @@
REVOKE SHOW VIEW ON v_f1 FROM mysqluser1@localhost;
REVOKE SHOW VIEW ON v_v1 FROM mysqluser1@localhost;
SHOW CREATE VIEW mysqltest1.v_t1;
-ERROR 42000: SHOW VIEW command denied to user 'mysqluser1'@'localhost' for table 'v_t1'
+ERROR 42000: SHOW VIEW command denied to user 'mysqluser1'@'localhost' for table 'mysqltest1'.'v_t1'
SHOW CREATE VIEW mysqltest1.v_f1;
-ERROR 42000: SHOW VIEW command denied to user 'mysqluser1'@'localhost' for table 'v_f1'
+ERROR 42000: SHOW VIEW command denied to user 'mysqluser1'@'localhost' for table 'mysqltest1'.'v_f1'
SHOW CREATE VIEW mysqltest1.v_v1;
-ERROR 42000: SHOW VIEW command denied to user 'mysqluser1'@'localhost' for table 'v_v1'
+ERROR 42000: SHOW VIEW command denied to user 'mysqluser1'@'localhost' for table 'mysqltest1'.'v_v1'
SHOW CREATE VIEW v_mysqluser1_t1;
View Create View character_set_client collation_connection
v_mysqluser1_t1 CREATE ALGORITHM=UNDEFINED DEFINER=`mysqluser1`@`localhost` SQL SECURITY DEFINER VIEW `v_mysqluser1_t1` AS select `mysqltest1`.`t1`.`a` AS `a` from `mysqltest1`.`t1` latin1 latin1_swedish_ci
=== modified file 'mysql-test/suite/rpl/r/rpl_sp.result'
--- a/mysql-test/suite/rpl/r/rpl_sp.result 2010-05-24 13:54:08 +0000
+++ b/mysql-test/suite/rpl/r/rpl_sp.result 2010-10-23 16:37:55 +0000
@@ -281,7 +281,7 @@
20
100
create trigger trg before insert on t1 for each row set new.a= 10;
-ERROR 42000: TRIGGER command denied to user 'zedjzlcsjhd'@'localhost' for table 't1'
+ERROR 42000: TRIGGER command denied to user 'zedjzlcsjhd'@'localhost' for table 'mysqltest1'.'t1'
delete from t1;
create trigger trg before insert on t1 for each row set new.a= 10;
insert into t1 values (1);
=== modified file 'sql/item.cc'
--- a/sql/item.cc 2010-09-03 16:20:30 +0000
+++ b/sql/item.cc 2010-10-23 16:37:55 +0000
@@ -4428,7 +4428,7 @@
{
my_error(ER_COLUMNACCESS_DENIED_ERROR, MYF(0),
"ANY", thd->security_ctx->priv_user,
- thd->security_ctx->host_or_ip, field_name, tab);
+ thd->security_ctx->host_or_ip, field_name, db, tab);
goto error;
}
}
=== modified file 'sql/share/errmsg.txt'
--- a/sql/share/errmsg.txt 2010-04-28 12:52:24 +0000
+++ b/sql/share/errmsg.txt 2010-10-23 16:37:55 +0000
@@ -3288,45 +3288,45 @@
swe "Det finns inget privilegium definierat f�r anv�ndare '%-.48s' p� '%-.64s'"
ukr "����������� �� ��������� ��� ����������� '%-.48s' � ����� '%-.64s'"
ER_TABLEACCESS_DENIED_ERROR 42000
- cze "%-.16s p-B��kaz nep��stupn� pro u�ivatele: '%-.48s'@'%-.64s' pro tabulku '%-.192s'"
- dan "%-.16s-kommandoen er ikke tilladt for brugeren '%-.48s'@'%-.64s' for tabellen '%-.192s'"
- nla "%-.16s commando geweigerd voor gebruiker: '%-.48s'@'%-.64s' voor tabel '%-.192s'"
- eng "%-.16s command denied to user '%-.48s'@'%-.64s' for table '%-.192s'"
- jps "�R�}���h %-.16s �� ���[�U�[ '%-.48s'@'%-.64s' ,�e�[�u�� '%-.192s' �ɑ��ċ�����Ă��܂���",
- est "%-.16s k�sk ei ole lubatud kasutajale '%-.48s'@'%-.64s' tabelis '%-.192s'"
- fre "La commande '%-.16s' est interdite � l'utilisateur: '%-.48s'@'@%-.64s' sur la table '%-.192s'"
- ger "%-.16s Befehl nicht erlaubt f�r Benutzer '%-.48s'@'%-.64s' auf Tabelle '%-.192s'"
- hun "%-.16s parancs a '%-.48s'@'%-.64s' felhasznalo szamara nem engedelyezett a '%-.192s' tablaban"
- ita "Comando %-.16s negato per l'utente: '%-.48s'@'%-.64s' sulla tabella '%-.192s'"
- jpn "���ޥ�� %-.16s �� �桼���� '%-.48s'@'%-.64s' ,�ơ��֥� '%-.192s' ���Ф��Ƶ��Ĥ���Ƥ��ޤ���"
- kor "'%-.16s' ������ ���� ����ڿ��� �źεǾ����ϴ�. : '%-.48s'@'%-.64s' for ���̺� '%-.192s'"
- por "Comando '%-.16s' negado para o usu�rio '%-.48s'@'%-.64s' na tabela '%-.192s'"
- rum "Comanda %-.16s interzisa utilizatorului: '%-.48s'@'%-.64s' pentru tabela '%-.192s'"
- rus "������� %-.16s ��������� ������������ '%-.48s'@'%-.64s' ��� ������� '%-.192s'"
- serbian "%-.16s komanda zabranjena za korisnika '%-.48s'@'%-.64s' za tabelu '%-.192s'"
- spa "%-.16s comando negado para usuario: '%-.48s'@'%-.64s' para tabla '%-.192s'"
- swe "%-.16s ej till�tet f�r '%-.48s'@'%-.64s' f�r tabell '%-.192s'"
- ukr "%-.16s ������� ���������� �����������: '%-.48s'@'%-.64s' � �����æ '%-.192s'"
+ cze "%-.16s p-B��kaz nep��stupn� pro u�ivatele: '%-.48s'@'%-.64s' pro tabulku '%-.192s'.'%-.192s'"
+ dan "%-.16s-kommandoen er ikke tilladt for brugeren '%-.48s'@'%-.64s' for tabellen '%-.192s'.'%-.192s'"
+ nla "%-.16s commando geweigerd voor gebruiker: '%-.48s'@'%-.64s' voor tabel '%-.192s'.'%-.192s'"
+ eng "%-.16s command denied to user '%-.48s'@'%-.64s' for table '%-.192s'.'%-.192s'"
+ jps "�R�}���h %-.16s �� ���[�U�[ '%-.48s'@'%-.64s' ,�e�[�u�� '%-.192s'.'%-.192s' �ɑ��ċ�����Ă��܂���",
+ est "%-.16s k�sk ei ole lubatud kasutajale '%-.48s'@'%-.64s' tabelis '%-.192s'.'%-.192s'"
+ fre "La commande '%-.16s' est interdite � l'utilisateur: '%-.48s'@'@%-.64s' sur la table '%-.192s'.'%-.192s'"
+ ger "%-.16s Befehl nicht erlaubt f�r Benutzer '%-.48s'@'%-.64s' auf Tabelle '%-.192s'.'%-.192s'"
+ hun "%-.16s parancs a '%-.48s'@'%-.64s' felhasznalo szamara nem engedelyezett a '%-.192s'.'%-.192s' tablaban"
+ ita "Comando %-.16s negato per l'utente: '%-.48s'@'%-.64s' sulla tabella '%-.192s'.'%-.192s'"
+ jpn "���ޥ�� %-.16s �� �桼���� '%-.48s'@'%-.64s' ,�ơ��֥� '%-.192s'.'%-.192s' ���Ф��Ƶ��Ĥ���Ƥ��ޤ���"
+ kor "'%-.16s' ������ ���� ����ڿ��� �źεǾ����ϴ�. : '%-.48s'@'%-.64s' for ���̺� '%-.192s'.'%-.192s'"
+ por "Comando '%-.16s' negado para o usu�rio '%-.48s'@'%-.64s' na tabela '%-.192s'.'%-.192s'"
+ rum "Comanda %-.16s interzisa utilizatorului: '%-.48s'@'%-.64s' pentru tabela '%-.192s'.'%-.192s'"
+ rus "������� %-.16s ��������� ������������ '%-.48s'@'%-.64s' ��� ������� '%-.192s'.'%-.192s'"
+ serbian "%-.16s komanda zabranjena za korisnika '%-.48s'@'%-.64s' za tabelu '%-.192s'.'%-.192s'"
+ spa "%-.16s comando negado para usuario: '%-.48s'@'%-.64s' para tabla '%-.192s'.'%-.192s'"
+ swe "%-.16s ej till�tet f�r '%-.48s'@'%-.64s' f�r tabell '%-.192s'.'%-.192s'"
+ ukr "%-.16s ������� ���������� �����������: '%-.48s'@'%-.64s' � �����æ '%-.192s'.'%-.192s'"
ER_COLUMNACCESS_DENIED_ERROR 42000
- cze "%-.16s p-B��kaz nep��stupn� pro u�ivatele: '%-.48s'@'%-.64s' pro sloupec '%-.192s' v tabulce '%-.192s'"
- dan "%-.16s-kommandoen er ikke tilladt for brugeren '%-.48s'@'%-.64s' for kolonne '%-.192s' in tabellen '%-.192s'"
- nla "%-.16s commando geweigerd voor gebruiker: '%-.48s'@'%-.64s' voor kolom '%-.192s' in tabel '%-.192s'"
- eng "%-.16s command denied to user '%-.48s'@'%-.64s' for column '%-.192s' in table '%-.192s'"
- jps "�R�}���h %-.16s �� ���[�U�[ '%-.48s'@'%-.64s'\n �J���� '%-.192s' �e�[�u�� '%-.192s' �ɑ��ċ�����Ă��܂���",
- est "%-.16s k�sk ei ole lubatud kasutajale '%-.48s'@'%-.64s' tulbale '%-.192s' tabelis '%-.192s'"
- fre "La commande '%-.16s' est interdite � l'utilisateur: '%-.48s'@'@%-.64s' sur la colonne '%-.192s' de la table '%-.192s'"
- ger "%-.16s Befehl nicht erlaubt f�r Benutzer '%-.48s'@'%-.64s' und Feld '%-.192s' in Tabelle '%-.192s'"
- hun "%-.16s parancs a '%-.48s'@'%-.64s' felhasznalo szamara nem engedelyezett a '%-.192s' mezo eseten a '%-.192s' tablaban"
- ita "Comando %-.16s negato per l'utente: '%-.48s'@'%-.64s' sulla colonna '%-.192s' della tabella '%-.192s'"
- jpn "���ޥ�� %-.16s �� �桼���� '%-.48s'@'%-.64s'\n ����� '%-.192s' �ơ��֥� '%-.192s' ���Ф��Ƶ��Ĥ���Ƥ��ޤ���"
- kor "'%-.16s' ������ ���� ����ڿ��� �źεǾ����ϴ�. : '%-.48s'@'%-.64s' for Į�� '%-.192s' in ���̺� '%-.192s'"
- por "Comando '%-.16s' negado para o usu�rio '%-.48s'@'%-.64s' na coluna '%-.192s', na tabela '%-.192s'"
- rum "Comanda %-.16s interzisa utilizatorului: '%-.48s'@'%-.64s' pentru coloana '%-.192s' in tabela '%-.192s'"
- rus "������� %-.16s ��������� ������������ '%-.48s'@'%-.64s' ��� ������� '%-.192s' � ������� '%-.192s'"
- serbian "%-.16s komanda zabranjena za korisnika '%-.48s'@'%-.64s' za kolonu '%-.192s' iz tabele '%-.192s'"
- spa "%-.16s comando negado para usuario: '%-.48s'@'%-.64s' para columna '%-.192s' en la tabla '%-.192s'"
- swe "%-.16s ej till�tet f�r '%-.48s'@'%-.64s' f�r kolumn '%-.192s' i tabell '%-.192s'"
- ukr "%-.16s ������� ���������� �����������: '%-.48s'@'%-.64s' ��� ������� '%-.192s' � �����æ '%-.192s'"
+ cze "%-.16s p-B��kaz nep��stupn� pro u�ivatele: '%-.48s'@'%-.64s' pro sloupec '%-.192s' v tabulce '%-.192s'.'%-.192s'"
+ dan "%-.16s-kommandoen er ikke tilladt for brugeren '%-.48s'@'%-.64s' for kolonne '%-.192s' in tabellen '%-.192s'.'%-.192s'"
+ nla "%-.16s commando geweigerd voor gebruiker: '%-.48s'@'%-.64s' voor kolom '%-.192s' in tabel '%-.192s'.'%-.192s'"
+ eng "%-.16s command denied to user '%-.48s'@'%-.64s' for column '%-.192s' in table '%-.192s'.'%-.192s'"
+ jps "�R�}���h %-.16s �� ���[�U�[ '%-.48s'@'%-.64s'\n �J���� '%-.192s' �e�[�u�� '%-.192s'.'%-.192s' �ɑ��ċ�����Ă��܂���",
+ est "%-.16s k�sk ei ole lubatud kasutajale '%-.48s'@'%-.64s' tulbale '%-.192s' tabelis '%-.192s'.'%-.192s'"
+ fre "La commande '%-.16s' est interdite � l'utilisateur: '%-.48s'@'@%-.64s' sur la colonne '%-.192s' de la table '%-.192s'.'%-.192s'"
+ ger "%-.16s Befehl nicht erlaubt f�r Benutzer '%-.48s'@'%-.64s' und Feld '%-.192s' in Tabelle '%-.192s'.'%-.192s'"
+ hun "%-.16s parancs a '%-.48s'@'%-.64s' felhasznalo szamara nem engedelyezett a '%-.192s' mezo eseten a '%-.192s'.'%-.192s' tablaban"
+ ita "Comando %-.16s negato per l'utente: '%-.48s'@'%-.64s' sulla colonna '%-.192s' della tabella '%-.192s'.'%-.192s'"
+ jpn "���ޥ�� %-.16s �� �桼���� '%-.48s'@'%-.64s'\n ����� '%-.192s' �ơ��֥� '%-.192s'.'%-.192s' ���Ф��Ƶ��Ĥ���Ƥ��ޤ���"
+ kor "'%-.16s' ������ ���� ����ڿ��� �źεǾ����ϴ�. : '%-.48s'@'%-.64s' for Į�� '%-.192s' in ���̺� '%-.192s'.'%-.192s'"
+ por "Comando '%-.16s' negado para o usu�rio '%-.48s'@'%-.64s' na coluna '%-.192s', na tabela '%-.192s'.'%-.192s'"
+ rum "Comanda %-.16s interzisa utilizatorului: '%-.48s'@'%-.64s' pentru coloana '%-.192s' in tabela '%-.192s'.'%-.192s'"
+ rus "������� %-.16s ��������� ������������ '%-.48s'@'%-.64s' ��� ������� '%-.192s' � ������� '%-.192s'.'%-.192s'"
+ serbian "%-.16s komanda zabranjena za korisnika '%-.48s'@'%-.64s' za kolonu '%-.192s' iz tabele '%-.192s'.'%-.192s'"
+ spa "%-.16s comando negado para usuario: '%-.48s'@'%-.64s' para columna '%-.192s' en la tabla '%-.192s'.'%-.192s'"
+ swe "%-.16s ej till�tet f�r '%-.48s'@'%-.64s' f�r kolumn '%-.192s' i tabell '%-.192s'.'%-.192s'"
+ ukr "%-.16s ������� ���������� �����������: '%-.48s'@'%-.64s' ��� ������� '%-.192s' � �����æ '%-.192s'.'%-.192s'"
ER_ILLEGAL_GRANT_FOR_TABLE 42000
cze "Neplatn-B� p��kaz GRANT/REVOKE. Pros�m, p�e�t�te si v manu�lu, jak� privilegia je mo�n� pou��t."
dan "Forkert GRANT/REVOKE kommando. Se i brugervejledningen hvilke privilegier der kan specificeres."
=== modified file 'sql/sp_head.cc'
--- a/sql/sp_head.cc 2010-09-03 16:20:30 +0000
+++ b/sql/sp_head.cc 2010-10-23 16:37:55 +0000
@@ -1545,7 +1545,7 @@
my_error(ER_TABLEACCESS_DENIED_ERROR, MYF(0), priv_desc,
thd->security_ctx->priv_user, thd->security_ctx->host_or_ip,
- table_name->str);
+ db_name->str, table_name->str);
m_security_ctx.restore_security_context(thd, save_ctx);
DBUG_RETURN(TRUE);
=== modified file 'sql/sql_acl.cc'
--- a/sql/sql_acl.cc 2010-09-03 16:20:30 +0000
+++ b/sql/sql_acl.cc 2010-10-23 16:37:55 +0000
@@ -3059,7 +3059,7 @@
table_list->grant.want_privilege);
my_error(ER_TABLEACCESS_DENIED_ERROR, MYF(0),
command, thd->security_ctx->priv_user,
- thd->security_ctx->host_or_ip, table_list->alias);
+ thd->security_ctx->host_or_ip, table_list->db, table_list->alias);
DBUG_RETURN(-1);
}
}
@@ -4044,6 +4044,7 @@
command,
sctx->priv_user,
sctx->host_or_ip,
+ table ? table->get_db_name() : "unknown",
table ? table->get_table_name() : "unknown");
}
DBUG_RETURN(1);
@@ -4112,6 +4113,7 @@
sctx->priv_user,
sctx->host_or_ip,
name,
+ db_name,
table_name);
DBUG_RETURN(1);
}
@@ -4275,13 +4277,14 @@
if (using_column_privileges)
my_error(ER_TABLEACCESS_DENIED_ERROR, MYF(0),
command, sctx->priv_user,
- sctx->host_or_ip, table_name);
+ sctx->host_or_ip, db_name, table_name);
else
my_error(ER_COLUMNACCESS_DENIED_ERROR, MYF(0),
command,
sctx->priv_user,
sctx->host_or_ip,
fields->name(),
+ db_name,
table_name);
return 1;
}
=== modified file 'sql/sql_base.cc'
--- a/sql/sql_base.cc 2010-09-03 16:20:30 +0000
+++ b/sql/sql_base.cc 2010-10-23 16:37:55 +0000
@@ -7992,7 +7992,7 @@
my_error(ER_TABLEACCESS_DENIED_ERROR, MYF(0), "ANY",
thd->security_ctx->priv_user,
thd->security_ctx->host_or_ip,
- field_table_name);
+ field_iterator.get_db_name(), field_table_name);
DBUG_RETURN(TRUE);
}
}
=== modified file 'sql/sql_show.cc'
--- a/sql/sql_show.cc 2010-10-19 13:58:35 +0000
+++ b/sql/sql_show.cc 2010-10-23 16:37:55 +0000
@@ -651,7 +651,9 @@
my_snprintf(m_view_access_denied_message, MYSQL_ERRMSG_SIZE,
ER(ER_TABLEACCESS_DENIED_ERROR), "SHOW VIEW",
m_sctx->priv_user,
- m_sctx->host_or_ip, m_top_view->get_table_name());
+ m_sctx->host_or_ip,
+ m_top_view->get_db_name(),
+ m_top_view->get_table_name());
}
return m_view_access_denied_message_ptr;
}
=== modified file 'sql/sql_view.cc'
--- a/sql/sql_view.cc 2010-09-03 16:20:30 +0000
+++ b/sql/sql_view.cc 2010-10-23 16:37:55 +0000
@@ -317,7 +317,7 @@
{
my_error(ER_TABLEACCESS_DENIED_ERROR, MYF(0),
"ANY", thd->security_ctx->priv_user,
- thd->security_ctx->priv_host, tbl->table_name);
+ thd->security_ctx->priv_host, tbl->db, tbl->table_name);
goto err;
}
/*
@@ -637,7 +637,7 @@
my_error(ER_COLUMNACCESS_DENIED_ERROR, MYF(0),
"create view", thd->security_ctx->priv_user,
thd->security_ctx->priv_host, report_item->name,
- view->table_name);
+ view->db, view->table_name);
res= TRUE;
goto err;
}
_______________________________________________
commits mailing list
commits(a)mariadb.org
https://lists.askmonty.org/cgi-bin/mailman/listinfo/commits
----- End forwarded message -----
--
BR
Sergey
--
Sergey Petrunia, Software Developer
Monty Program AB, http://askmonty.org
Blog: http://s.petrunia.net/blog
2
1
![](https://secure.gravatar.com/avatar/99fde0c1dfd216326aae0aff30d493f1.jpg?s=120&d=mm&r=g)
[Maria-developers] Why do we need fsync() in commit() in internal two-phase commit?
by Kristian Nielsen 26 Oct '10
by Kristian Nielsen 26 Oct '10
26 Oct '10
Currently, when an InnoDB/XtraDB transaction is committed with the binlog
enabled, we do three fsync()'s:
1. Inside prepare() in InnoDB
2. When writing to the binlog
3. Inside commit() in InnoDB
The fsync()s are done when --innodb-flush-log-at-trx-commit=1 and
sync_binlog=1; these settings are needed to be able to recover into a
consistent state between binlog and InnoDB after a crash during commit.
This got me thinking why this is really needed?
- I understand why we need the fsync() in prepare(): otherwise we might after
crash have a transaction in the binlog that is missing in InnoDB and that
we cannot (currently) recover.
- I understand why we need the fsync() in binlog write; otherwise the commit
in InnoDB may reach the disk before the binlog write, and after a crash we
might have a transaction in InnoDB missing in the binlog that cannot be
recovered.
But why do we need the fsync() in commit()?
We do not need it to ensure durability or consistency. If we crash after
commit() returns (or just binlog write finishes), but before the InnoDB commit
reaches disk, the crash recovery at next server start will re-commit the
transaction inside InnoDB.
In fact, it seems to me the only reason for the third fsync() is that we call
TC_LOG_BINLOG::unlog() after InnoDB commit() returns. And unlog() may decide
to rotate the binlog once it has been called for all transactions written to
the current log file. And during recovery, we only read the latest binlog, so
transactions in older binlogs must have reached disk for recovery to work.
Do you agree that this is the only reason the third fsync() is needed?
If so, it seems it would not be too hard to avoid that fsync(). Eg. we could
recover from the last two binlog files instead of only one. We would need a
mechanism for InnoDB to tell the binlog that transaction `Xid' reached the
disk, in an asynchronous way (after returning from commit()).
[Just wanted to confirm (or the opposite) this reasoning... as we have been
talking about a way to avoid both the fsync() in prepare() /and/ the fsync()
in commit(), that may be a better project to implement that just avoiding the
one in commit().]
- Kristian.
2
1
![](https://secure.gravatar.com/avatar/769f0fd707751e8755eb9b5dd837ab63.jpg?s=120&d=mm&r=g)
23 Oct '10
Philip, Igor
Why is ExtractValue() not allowed for a virtual column?
Why can't I do this:
CREATE TABLE sbtest (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
doc TEXT,
username varchar(10) as (ExtractValue(doc, '/user/username')) virtual,
PRIMARY KEY (id),
)
...but can do this:
CREATE TABLE sbtest (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
doc TEXT,
username varchar(10) as (ExtractValue(doc, '/user/username')) virtual,
PRIMARY KEY (id)
)
(Just for fun, imagine "doc" containing an xml document like
<user>
<id>1</id>
<username>hingo</username>
<name>Henrik Ingo</name>
<status time="2010-21-10 13:16">I'm writing an example XML document</status>
<friends>
<friend_id>9</friend_id>
<friend_id>91</friend_id>
<friend_id>92</friend_id>
<friend_id>93</friend_id>
<friend_id>94</friend_id>
<friend_id>95</friend_id>
<friend_id>96</friend_id>
<friend_id>97</friend_id>
<friend_id>98</friend_id>
<friend_id>99</friend_id>
</friend>
</user>
)
I don't see ExtractValue being in any way undeterministic or anything.
henrik
--
henrik.ingo(a)avoinelama.fi
+358-40-5697354
www.openlife.cc
2
2
![](https://secure.gravatar.com/avatar/bccaf81a23eecaecd9feaf01c7c42ff4.jpg?s=120&d=mm&r=g)
[Maria-developers] Buildbot builds/tests innodb_plugin.so, is that intentional?
by Sergey Petrunya 19 Oct '10
by Sergey Petrunya 19 Oct '10
19 Oct '10
Hello,
I've noticed that centos5-amd64-minimal builds innodb plugin for MariaDB 5.2
and 5.3 (didn't check 5.1)
For example, if one takes this build
http://buildbot.askmonty.org/buildbot/builders/centos5-amd64-minimal/builds…
and looks at compliation log
http://buildbot.askmonty.org/buildbot/builders/centos5-amd64-minimal/builds…
they'll find:
(cd .libs && rm -f ha_innodb_plugin.so.0 && ln -s ha_innodb_plugin.so.0.0.0 ha_innodb_plugin.so.0)
(cd .libs && rm -f ha_innodb_plugin.so && ln -s ha_innodb_plugin.so.0.0.0 ha_innodb_plugin.so)
ar cru .libs/ha_innodb_plugin.a ...
ranlib .libs/ha_innodb_plugin.a
creating ha_innodb_plugin.la
(cd .libs && rm -f ha_innodb_plugin.la && ln -s ../ha_innodb_plugin.la ha_innodb_plugin.la)
make[2]: Leaving directory `/home/buildbot/maria-slave/centos5-amd64-minimal/build/mysql-5.3.0-MariaDB-alpha/storage/innodb_plugin'
Which shows we're building the plugin. Do we really need this?
(I've discovered this by accident - in 5.3 it now runs innodb_plugin testsuite both with
xtradb and innodb_plugin, and we've got a problem as xtradb includes index condition pushdown and
xtradb doesn't, which causes them to produce different EXPLAIN outputs: when the test is run with
xtradb, we get 'Using index condition', and with innodb_plugin we get 'Using where').
BR
Sergey
--
Sergey Petrunia, Software Developer
Monty Program AB, http://askmonty.org
Blog: http://s.petrunia.net/blog
2
1
![](https://secure.gravatar.com/avatar/52910d2fca7294eeb6c2089b92a28322.jpg?s=120&d=mm&r=g)
19 Oct '10
shell> diff mysqld.cc.orig mysqld.cc
7503a7504
> {"Key_blocks_warm", (char*) offsetof(KEY_CACHE,
warm_blocks), SHOW_KEY_CACHE_LONG},
For explanation see: http://www.fromdual.com/warm-myisam-key-blocks
--
FromDual - Vendor independent and neutral MySQL consulting.
Oli Sennhauser
Rebenweg 6
CH - 8610 Uster / Switzerland
Phone +41 44 940 24 82
Mobile +41 79 830 09 33
e-Mail oli.sennhauser(a)fromdual.com
Website http://www.fromdual.com/
Skype fromdual
Jabber fromdual(a)swissjabber.ch
Yahoo IM fromdual
Xing https://www.xing.com/profile/Oliver_Sennhauser
LinkedIn http://ch.linkedin.com/in/shinguz
2
1
![](https://secure.gravatar.com/avatar/3c2329333dd5898f2e72818af773243d.jpg?s=120&d=mm&r=g)
Re: [Maria-developers] [Commits] Rev 2951: WL#12 - MariaDB User Feedback (a.k.a. Phone Home) plugin in http://bazaar.launchpad.net/~maria-captains/maria/5.1/
by Sergei Golubchik 18 Oct '10
by Sergei Golubchik 18 Oct '10
18 Oct '10
Hi, Michael!
On Oct 18, Michael Widenius wrote:
> +
> + // create a background thread to handle urls, if any
> + if (url_count)
> + {
> + pthread_mutex_init(&sleep_mutex, 0);
> + pthread_cond_init(&sleep_condition, 0);
> + shutdown_plugin= false;
>
> Please add a comment why you set 'shutdown_plugin' to false (as this
> is not a variable only for the feedback plugin).
This is a variable only for the feedback plugin.
> + pthread_attr_t attr;
> + pthread_attr_init(&attr);
> + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
> + if (pthread_create(&sender_thread, &attr, background_thread, 0) != 0)
> + {
>
> --- a/plugin/feedback/sender_thread.cc 1970-01-01 00:00:00 +0000
> +++ b/plugin/feedback/sender_thread.cc 2010-09-30 14:24:31 +0000
...
> + if (thd) // for nicer SHOW PROCESSLIST
> + thd->set_query(const_cast<char*>(url->url()), url->url_length());
>
> Wouldn't it be better if url->url() would return const char * ?
It does return const char*, but thd->set_query() wants char* (for no
good reason), so I need to cast const away.
> +
> + if (url->send(str.c_ptr(), str.length()))
>
> Use str.ptr() instead of str,c_ptr() (We already checked that this is ok)
Why?
> === added file 'plugin/feedback/url_base.cc'
>
> +Url* Url::create(const char *url, size_t url_length)
> +{
> + url= my_strndup(url, url_length, MYF(MY_WME));
>
> my_strndup() -> my_strmake()
Pardon me?
There's no such a function as my_strmake(). And strmake() only copies the
string, while my_strndup() allocates and copies. I need the latter.
> + if (!url)
> + return NULL;
> +
> --- a/plugin/feedback/url_http.cc 1970-01-01 00:00:00 +0000
> +++ a/plugin/feedback/url_http.cc 1970-01-01 00:00:00 +0000
> <cut>
>
> +Url* http_create(const char *url, size_t url_length)
> +{
> + const char *s;
> + LEX_STRING full_url= {const_cast<char*>(url), url_length};
> + LEX_STRING host, port, path;
>
> Would it not be better to introduce LEX_CONS_STRING and use these to
> avoid const away casts?
Perhaps, if I'd have more casts because of that. But just because of one
or two - I'd rather keep the code uniform instead and use LEX_STRING
everywhere.
> + bool ssl= false;
> +
> <cut>
>
> + /*
> + if the data were send successfully, read the reply.
> + Extract the first string between <h1>...</h1> tags
> + and put it as a server reply into the error log.
> + */
> + len= vio_read(vio, (uchar*)buf, sizeof(buf)-1);
> + if (len && len < sizeof(buf))
>
> Isn't len guaranteed to be < sizeof(buf) here ?
> I would change the check to 'if (len > 0)'
len is unsigned. vio_read() can return (uint)-1
which indicates and error and is certainly > sizeof(buf)
> + {
> + char *from;
> +
> + buf[len+1]= 0; // safety
> +
>
> Other ideas and suggestions:
>
> - It would be very imporant for us to know which plugins are
> loaded in the feedback. How can we do that ? (I assume we can't get
> that information with the current code)
We do it. fill_plugin_version() function in the utils.cc gets the list
of installed plugins and their versions.
By the way, I've added few more lines of information to the report -
after you've seen the code. On my computer they contain:
Uname_sysname Linux
Uname_release 2.6.34-gentoo-r6
Uname_version #1 SMP Mon Sep 6 15:26:42 CEST 2010
Uname_machine x86_64
Uname_distribution Gentoo Base System release 1.12.13
> From my point of view, when you have fixed the bugs and considered the
> suggestions it's ok to push in 5.1.
Thanks for the review! You've catched quite a few problems in the code.
Regards,
Sergei
1
0
Hi Sanja,
subselect_cache fails on sol-sparc-32 in current 5.3-merge-from-5.2:
http://buildbot.askmonty.org/buildbot/builders/sol-sparc-32/builds/575/step…
Any idea about this? Have we observed such failure before or it has appeared in
the merge?
BR
Sergey
--
Sergey Petrunia, Software Developer
Monty Program AB, http://askmonty.org
Blog: http://s.petrunia.net/blog
2
1