# LogicTest: local local-opt fakedist fakedist-opt fakedist-metadata

# Test querying deeply interleaved tables.

statement ok
CREATE TABLE level1 (
  k1 INT,
  PRIMARY KEY (k1)
)

statement ok
CREATE TABLE level2 (
  k1 INT,
  PRIMARY KEY (k1),
  CONSTRAINT fk1 FOREIGN KEY (k1) REFERENCES level1
) INTERLEAVE IN PARENT level1 (k1)

statement ok
CREATE TABLE level3 (
  k1 INT,
  k2 INT,
  k3 INT,
  PRIMARY KEY (k1, k2, k3),
  CONSTRAINT fk2 FOREIGN KEY (k1) REFERENCES level2
) INTERLEAVE IN PARENT level2 (k1)

statement ok
CREATE TABLE level4 (
  k1 INT,
  k2 INT,
  k3 INT,
  PRIMARY KEY (k1, k2, k3),
  CONSTRAINT fk3 FOREIGN KEY (k1, k2, k3) REFERENCES level3
) INTERLEAVE IN PARENT level3 (k1, k2, k3)

statement ok
INSERT INTO level1 VALUES (1), (2), (3)

statement ok
INSERT INTO level2 VALUES (1), (2), (3)

statement ok
INSERT INTO level3 VALUES
  (1, 10, 100), (1, 10, 200), (1, 10, 300),
  (1, 20, 100), (1, 20, 200), (1, 20, 300),
  (1, 30, 100), (1, 30, 200), (1, 30, 300),
  (2, 10, 100), (2, 10, 200), (2, 10, 300),
  (2, 20, 100), (2, 20, 200), (2, 20, 300),
  (2, 30, 100), (2, 30, 200), (2, 30, 300),
  (3, 10, 100), (3, 10, 200), (3, 10, 300),
  (3, 20, 100), (3, 20, 200), (3, 20, 300),
  (3, 30, 100), (3, 30, 200), (3, 30, 300)

statement ok
INSERT INTO level4 VALUES
  (1, 10, 100), (1, 10, 200), (1, 10, 300),
  (1, 20, 100), (1, 20, 200), (1, 20, 300),
  (1, 30, 100), (1, 30, 200), (1, 30, 300),
  (2, 10, 100), (2, 10, 200), (2, 10, 300),
  (2, 20, 100), (2, 20, 200), (2, 20, 300),
  (2, 30, 100), (2, 30, 200), (2, 30, 300),
  (3, 10, 100), (3, 10, 200), (3, 10, 300),
  (3, 20, 100), (3, 20, 200), (3, 20, 300),
  (3, 30, 100), (3, 30, 200), (3, 30, 300)

query III rowsort
SELECT * FROM level4
----
1  10  100
1  10  200
1  10  300
1  20  100
1  20  200
1  20  300
1  30  100
1  30  200
1  30  300
2  10  100
2  10  200
2  10  300
2  20  100
2  20  200
2  20  300
2  30  100
2  30  200
2  30  300
3  10  100
3  10  200
3  10  300
3  20  100
3  20  200
3  20  300
3  30  100
3  30  200
3  30  300

query III rowsort
SELECT * FROM level4 WHERE k1 > 1 AND k1 < 3
----
2  10  100
2  10  200
2  10  300
2  20  100
2  20  200
2  20  300
2  30  100
2  30  200
2  30  300

query III rowsort
SELECT * FROM level4 WHERE k1 = 2 AND k2 > 10 AND k2 < 30
----
2  20  100
2  20  200
2  20  300

query III
SELECT * FROM level4 WHERE k1 = 2 AND k2 = 20 AND k3 > 100 AND k3 < 300
----
2  20  200

query III
SELECT * FROM level4 WHERE k1 = 2 AND k2 = 20 AND k3 = 200
----
2  20  200
