If a query contains LAST_INSERT_ID() it should be redirected to master, even if it is in WHERE clause.
Test case:
{code}
MariaDB [mariadb_test]> create table a (id serial, primary key(id));
Query OK, 0 rows affected (0.02 sec)
MariaDB [mariadb_test]> show create table a;
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| a | CREATE TABLE `a` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
MariaDB [mariadb_test]> insert into a values(null);
Query OK, 1 row affected (0.00 sec)
MariaDB [mariadb_test]> select @@hostname from a WHERE id=last_insert_id();
Empty set (0.00 sec)
michaeldg [5:44 PM]
MariaDB [mariadb_test]> select @@hostname from a WHERE id=last_insert_id() or id=1;
+------------------------+
| @@hostname |
+------------------------+
| 203.local |
+------------------------+
1 row in set (0.00 sec)
MariaDB [mariadb_test]> select @@hostname, last_insert_id() FROM a WHERE id=last_insert_id();
+------------------------+------------------+
| @@hostname | last_insert_id() |
+------------------------+------------------+
| 201.local | 1 |
+------------------------+------------------+
1 row in set (0.00 sec)
{code}
201 = master, 203 = slave.
Please change it so all queries with LAST_INSERT_ID() function call get redirected to master.
Hi,
If a query contains LAST_INSERT_ID() it should be redirected to master, even if it is in WHERE clause.
Test case:
{code}
MariaDB [mariadb_test]> create table a (id serial, primary key(id));
Query OK, 0 rows affected (0.02 sec)
MariaDB [mariadb_test]> insert into a values(null);
Query OK, 1 row affected (0.00 sec)
MariaDB [mariadb_test]> select @@hostname from a WHERE id=last_insert_id();
Empty set (0.00 sec)
michaeldg [5:44 PM]
MariaDB [mariadb_test]> select @@hostname from a WHERE id=last_insert_id() or id=1;
+------------------------+
| @@hostname |
+------------------------+
| 203.local |
+------------------------+
1 row in set (0.00 sec)
MariaDB [mariadb_test]> select @@hostname, last_insert_id() FROM a WHERE id=last_insert_id();
+------------------------+------------------+
| @@hostname | last_insert_id() |
+------------------------+------------------+
| 201.local | 1 |
+------------------------+------------------+
1 row in set (0.00 sec)
{code}
201 = master, 203 = slave.
Please change it so all queries with LAST_INSERT_ID() function call get redirected to master.
If a query contains LAST_INSERT_ID() it should be redirected to master, even if it is in WHERE clause.
Test case:
{code}
MariaDB [mariadb_test]> create table a (id serial, primary key(id));
Query OK, 0 rows affected (0.02 sec)
MariaDB [mariadb_test]> insert into a values(null);
Query OK, 1 row affected (0.00 sec)
MariaDB [mariadb_test]> select @@hostname from a WHERE id=last_insert_id();
Empty set (0.00 sec)
michaeldg [5:44 PM]
MariaDB [mariadb_test]> select @@hostname from a WHERE id=last_insert_id() or id=1;
+------------------------+
| @@hostname |
+------------------------+
| 203.local |
+------------------------+
1 row in set (0.00 sec)
MariaDB [mariadb_test]> select @@hostname, last_insert_id() FROM a WHERE id=last_insert_id();
+------------------------+------------------+
| @@hostname | last_insert_id() |
+------------------------+------------------+
| 201.local | 1 |
+------------------------+------------------+
1 row in set (0.00 sec)
{code}
201 = master, 203 = slave.
Please change it so all queries with LAST_INSERT_ID() function call get redirected to master.
Hi,
If a query contains LAST_INSERT_ID() it should be redirected to master, even if it is in WHERE clause.
Also another syntax is not redirected to the master: SELECT @id:=LAST_INSERT_ID(); - please let me know if you need a test case for this as well.
Test case:
{code}
MariaDB [mariadb_test]> create table a (id serial, primary key(id));
Query OK, 0 rows affected (0.02 sec)
MariaDB [mariadb_test]> insert into a values(null);
Query OK, 1 row affected (0.00 sec)
MariaDB [mariadb_test]> select @@hostname from a WHERE id=last_insert_id();
Empty set (0.00 sec)
michaeldg [5:44 PM]
MariaDB [mariadb_test]> select @@hostname from a WHERE id=last_insert_id() or id=1;
+------------------------+
| @@hostname |
+------------------------+
| 203.local |
+------------------------+
1 row in set (0.00 sec)
MariaDB [mariadb_test]> select @@hostname, last_insert_id() FROM a WHERE id=last_insert_id();
+------------------------+------------------+
| @@hostname | last_insert_id() |
+------------------------+------------------+
| 201.local | 1 |
+------------------------+------------------+
1 row in set (0.00 sec)
{code}
201 = master, 203 = slave.
Please change it so all queries with LAST_INSERT_ID() function call get redirected to master.