# LogicTest: multiregion-9node-3region-3azs multiregion-9node-3region-3azs-tenant multiregion-9node-3region-3azs-no-los

statement ok
SET enable_auto_rehoming = true;
CREATE DATABASE testdb PRIMARY REGION "ca-central-1" REGIONS "ap-southeast-2";

statement ok
USE testdb;

statement ok
CREATE TABLE rbr (p INT PRIMARY KEY, s STRING) LOCALITY REGIONAL BY ROW;

statement ok
INSERT INTO rbr (p, s) VALUES (1, 'hi')

query TIT
SELECT crdb_region, * FROM rbr WHERE p = 1
----
ap-southeast-2  1  hi

# Re-home to another region using UPDATE.
query TIT nodeidx=4
USE testdb;
UPDATE rbr SET s = 'bye' WHERE p = 1;
SELECT crdb_region, * FROM rbr WHERE p = 1
----
ca-central-1  1  bye

# Re-home to another region using UPSERT.
query TIT nodeidx=2
USE testdb;
UPSERT INTO rbr (p, s) VALUES (1, 're-hello');
SELECT crdb_region, * FROM rbr WHERE p = 1
----
ap-southeast-2  1  re-hello

# Re-home to PRIMARY REGION if the region is not defined on the database.
query TIT nodeidx=7
USE testdb;
UPDATE rbr SET s = 'bye' WHERE p = 1;
SELECT crdb_region, * FROM rbr WHERE p = 1
----
ca-central-1  1  bye

# Do not re-home if session variable for rehoming is disabled.
query TIT nodeidx=2
USE testdb;
SET on_update_rehome_row_enabled = false;
UPSERT INTO rbr (p, s) VALUES (1, 'bye again');
SELECT crdb_region, * FROM rbr WHERE p = 1
----
ca-central-1  1  bye again

query TIT nodeidx=2
USE testdb;
SET on_update_rehome_row_enabled = false;
UPDATE rbr SET s = 'cya' WHERE p = 1;
SELECT crdb_region, * FROM rbr WHERE p = 1
----
ca-central-1  1  cya

# Ensure on_update_rehome_row_enabled does not affect other ON UPDATEs.
statement ok
SET on_update_rehome_row_enabled = false;
CREATE TABLE other_table (pk INT PRIMARY KEY, x int ON UPDATE 2, y int);
INSERT INTO other_table VALUES (1, 4, 3);
UPDATE other_table SET y = 3 WHERE pk = 1;

query III
SELECT * FROM other_table
----
1  2  3

statement ok
SET on_update_rehome_row_enabled = true


# Re-homing still works even after locality change.
statement ok
DROP TABLE rbr;

statement ok
CREATE TABLE rbr (p INT PRIMARY KEY, s STRING);

statement ok
ALTER TABLE rbr SET LOCALITY REGIONAL BY ROW;

statement ok
INSERT INTO rbr (p, s) VALUES (1, 'hi')

query TIT
SELECT crdb_region, * FROM rbr WHERE p = 1
----
ap-southeast-2  1  hi

query TIT nodeidx=4
USE testdb;
UPDATE rbr SET s = 'bye' WHERE p = 1;
SELECT crdb_region, * FROM rbr WHERE p = 1
----
ca-central-1  1  bye
