@@ -506,6 +506,50 @@ ALTER RANGE default CONFIGURE ZONE USING
506
506
constraints = '[]',
507
507
lease_preferences = '[]'
508
508
509
+ subtest zones_offline_db
510
+
511
+ statement ok
512
+ CREATE TABLE empty ()
513
+
514
+ statement ok
515
+ CREATE DATABASE a
516
+
517
+ statement ok
518
+ ALTER DATABASE a CONFIGURE ZONE USING gc.ttlseconds = 1000
519
+
520
+ let $a_id
521
+ SELECT id FROM system.namespace WHERE name = 'a' AND "parentID" = 0
522
+
523
+ statement ok
524
+ WITH to_update AS (
525
+ SELECT id, crdb_internal.pb_to_json('cockroach.sql.sqlbase.Descriptor', descriptor.descriptor) as descriptor
526
+ FROM system.descriptor
527
+ WHERE id = $a_id
528
+ ), updated AS (
529
+ SELECT id, json_set(descriptor, ARRAY['database', 'state'], '"OFFLINE"'::JSONB) as descriptor FROM to_update
530
+ ), encoded AS (
531
+ SELECT id, crdb_internal.json_to_pb('cockroach.sql.sqlbase.Descriptor', descriptor) as descriptor FROM updated
532
+ )
533
+ SELECT crdb_internal.unsafe_upsert_descriptor(id, descriptor, true) FROM encoded
534
+
535
+ # Regression test for #139848. This query used to fail while querying
536
+ # crdb_internal.zones because of the offline database.
537
+ query TT
538
+ SHOW CREATE empty
539
+ ----
540
+ empty CREATE TABLE public.empty (
541
+ rowid INT8 NOT VISIBLE NOT NULL DEFAULT unique_rowid(),
542
+ CONSTRAINT empty_pkey PRIMARY KEY (rowid ASC)
543
+ )
544
+
545
+ query T
546
+ SELECT raw_config_sql FROM crdb_internal.zones WHERE zone_id = $a_id
547
+ ----
548
+ ALTER DATABASE a CONFIGURE ZONE USING
549
+ gc.ttlseconds = 1000
550
+
551
+ subtest end
552
+
509
553
query error pq: foo
510
554
SELECT crdb_internal.force_error('', 'foo')
511
555
@@ -604,7 +648,7 @@ query TTT colnames
604
648
SELECT start_pretty, end_pretty, split_enforced_until FROM crdb_internal.ranges WHERE split_enforced_until IS NOT NULL
605
649
----
606
650
start_pretty end_pretty split_enforced_until
607
- /Table/112 /1/2 /Max 2262-04-11 23:47:16.854776 +0000 +0000
651
+ /Table/115 /1/2 /Max 2262-04-11 23:47:16.854776 +0000 +0000
608
652
609
653
query TTT colnames
610
654
SELECT start_key, end_key, split_enforced_until FROM [SHOW RANGES FROM TABLE foo] WHERE split_enforced_until IS NOT NULL
@@ -782,12 +826,12 @@ query TT colnames,rowsort
782
826
SELECT start_pretty, end_pretty FROM crdb_internal.ranges WHERE split_enforced_until IS NOT NULL
783
827
----
784
828
start_pretty end_pretty
785
- /Table/112 /1/1 /Table/112 /1/2
786
- /Table/112 /1/2 /Table/112 /1/3
787
- /Table/112 /1/3 /Table/112 /2/1
788
- /Table/112 /2/1 /Table/112 /2/2
789
- /Table/112 /2/2 /Table/112 /2/3
790
- /Table/112 /2/3 /Max
829
+ /Table/115 /1/1 /Table/115 /1/2
830
+ /Table/115 /1/2 /Table/115 /1/3
831
+ /Table/115 /1/3 /Table/115 /2/1
832
+ /Table/115 /2/1 /Table/115 /2/2
833
+ /Table/115 /2/2 /Table/115 /2/3
834
+ /Table/115 /2/3 /Max
791
835
792
836
# The cleanup we expect in the following truncate requires that the GCJob runs.
793
837
# To avoid this taking 30 seconds, we lower the job adoption interval.
@@ -816,12 +860,12 @@ query TT colnames,retry,rowsort
816
860
SELECT start_pretty, end_pretty FROM crdb_internal.ranges WHERE split_enforced_until IS NOT NULL
817
861
----
818
862
start_pretty end_pretty
819
- /Table/112 /3/1 /Table/112 /3/2
820
- /Table/112 /3/2 /Table/112 /3/3
821
- /Table/112 /3/3 /Table/112 /4/1
822
- /Table/112 /4/1 /Table/112 /4/2
823
- /Table/112 /4/2 /Table/112 /4/3
824
- /Table/112 /4/3 /Max
863
+ /Table/115 /3/1 /Table/115 /3/2
864
+ /Table/115 /3/2 /Table/115 /3/3
865
+ /Table/115 /3/3 /Table/115 /4/1
866
+ /Table/115 /4/1 /Table/115 /4/2
867
+ /Table/115 /4/2 /Table/115 /4/3
868
+ /Table/115 /4/3 /Max
825
869
826
870
statement ok
827
871
DROP TABLE foo
@@ -844,12 +888,12 @@ query TT colnames,retry,rowsort
844
888
SELECT start_pretty, end_pretty FROM crdb_internal.ranges WHERE split_enforced_until IS NOT NULL
845
889
----
846
890
start_pretty end_pretty
847
- /Table/114 /1/1 /Table/114 /1/2
848
- /Table/114 /1/2 /Table/114 /1/3
849
- /Table/114 /1/3 /Table/114 /2/1
850
- /Table/114 /2/1 /Table/114 /2/2
851
- /Table/114 /2/2 /Table/114 /2/3
852
- /Table/114 /2/3 /Max
891
+ /Table/117 /1/1 /Table/117 /1/2
892
+ /Table/117 /1/2 /Table/117 /1/3
893
+ /Table/117 /1/3 /Table/117 /2/1
894
+ /Table/117 /2/1 /Table/117 /2/2
895
+ /Table/117 /2/2 /Table/117 /2/3
896
+ /Table/117 /2/3 /Max
853
897
854
898
statement ok
855
899
DROP INDEX foo@idx
@@ -860,9 +904,9 @@ query T colnames,retry,rowsort
860
904
SELECT start_pretty FROM crdb_internal.ranges WHERE split_enforced_until IS NOT NULL
861
905
----
862
906
start_pretty
863
- /Table/114 /1/1
864
- /Table/114 /1/2
865
- /Table/114 /1/3
907
+ /Table/117 /1/1
908
+ /Table/117 /1/2
909
+ /Table/117 /1/3
866
910
867
911
query T
868
912
SELECT crdb_internal.cluster_name()
@@ -926,15 +970,15 @@ CREATE TYPE enum2 AS ENUM ()
926
970
query ITTITTT
927
971
SELECT * FROM crdb_internal.create_type_statements ORDER BY descriptor_id
928
972
----
929
- 104 test public 116 enum1 CREATE TYPE public.enum1 AS ENUM ('hello', 'hi') {hello,hi}
930
- 104 test public 118 enum2 CREATE TYPE public.enum2 AS ENUM () {}
973
+ 104 test public 119 enum1 CREATE TYPE public.enum1 AS ENUM ('hello', 'hi') {hello,hi}
974
+ 104 test public 121 enum2 CREATE TYPE public.enum2 AS ENUM () {}
931
975
932
976
# Test the virtual index as well.
933
977
934
978
query ITTITTT
935
979
SELECT * FROM crdb_internal.create_type_statements WHERE descriptor_id = (('enum1'::regtype::oid::int) - 100000)::oid
936
980
----
937
- 104 test public 116 enum1 CREATE TYPE public.enum1 AS ENUM ('hello', 'hi') {hello,hi}
981
+ 104 test public 119 enum1 CREATE TYPE public.enum1 AS ENUM ('hello', 'hi') {hello,hi}
938
982
939
983
query ITTITTT
940
984
SELECT * FROM crdb_internal.create_type_statements WHERE descriptor_id = 'foo'::regclass::oid
@@ -1512,19 +1556,19 @@ FROM crdb_internal.create_procedure_statements
1512
1556
WHERE procedure_name IN ('p', 'p2')
1513
1557
ORDER BY procedure_id;
1514
1558
----
1515
- 104 test 105 public 139 p CREATE PROCEDURE public.p(INT8)
1559
+ 104 test 105 public 142 p CREATE PROCEDURE public.p(INT8)
1516
1560
LANGUAGE SQL
1517
1561
SECURITY INVOKER
1518
1562
AS $$
1519
1563
SELECT 1;
1520
1564
$$
1521
- 104 test 105 public 140 p CREATE PROCEDURE public.p(STRING, b INT8)
1565
+ 104 test 105 public 143 p CREATE PROCEDURE public.p(STRING, b INT8)
1522
1566
LANGUAGE SQL
1523
1567
SECURITY INVOKER
1524
1568
AS $$
1525
1569
SELECT 'hello';
1526
1570
$$
1527
- 104 test 142 sc 143 p2 CREATE PROCEDURE sc.p2(STRING)
1571
+ 104 test 145 sc 146 p2 CREATE PROCEDURE sc.p2(STRING)
1528
1572
LANGUAGE SQL
1529
1573
SECURITY INVOKER
1530
1574
AS $$
@@ -1543,25 +1587,25 @@ FROM "".crdb_internal.create_procedure_statements
1543
1587
WHERE procedure_name IN ('p', 'p2', 'p_cross_db')
1544
1588
ORDER BY procedure_id;
1545
1589
----
1546
- 104 test 105 public 139 p CREATE PROCEDURE public.p(INT8)
1590
+ 104 test 105 public 142 p CREATE PROCEDURE public.p(INT8)
1547
1591
LANGUAGE SQL
1548
1592
SECURITY INVOKER
1549
1593
AS $$
1550
1594
SELECT 1;
1551
1595
$$
1552
- 104 test 105 public 140 p CREATE PROCEDURE public.p(STRING, b INT8)
1596
+ 104 test 105 public 143 p CREATE PROCEDURE public.p(STRING, b INT8)
1553
1597
LANGUAGE SQL
1554
1598
SECURITY INVOKER
1555
1599
AS $$
1556
1600
SELECT 'hello';
1557
1601
$$
1558
- 104 test 142 sc 143 p2 CREATE PROCEDURE sc.p2(STRING)
1602
+ 104 test 145 sc 146 p2 CREATE PROCEDURE sc.p2(STRING)
1559
1603
LANGUAGE SQL
1560
1604
SECURITY INVOKER
1561
1605
AS $$
1562
1606
SELECT 'hello';
1563
1607
$$
1564
- 144 test_cross_db 145 public 146 p_cross_db CREATE PROCEDURE public.p_cross_db()
1608
+ 147 test_cross_db 148 public 149 p_cross_db CREATE PROCEDURE public.p_cross_db()
1565
1609
LANGUAGE SQL
1566
1610
SECURITY INVOKER
1567
1611
AS $$
@@ -1686,13 +1730,13 @@ CREATE TYPE other_db.public.enum1 AS ENUM ('yo');
1686
1730
query ITTITTT
1687
1731
SELECT * FROM "".crdb_internal.create_type_statements WHERE descriptor_name = 'enum1' and database_name = 'other_db'
1688
1732
----
1689
- 121 other_db public 151 enum1 CREATE TYPE public.enum1 AS ENUM ('yo') {yo}
1733
+ 124 other_db public 154 enum1 CREATE TYPE public.enum1 AS ENUM ('yo') {yo}
1690
1734
1691
1735
# This uses the virtual index. descriptor_id is an int in the vtable.
1692
1736
query ITTITTT
1693
1737
SELECT * FROM "".crdb_internal.create_type_statements WHERE descriptor_id = (('other_db.public.enum1'::regtype::int) - 100000)
1694
1738
----
1695
- 121 other_db public 151 enum1 CREATE TYPE public.enum1 AS ENUM ('yo') {yo}
1739
+ 124 other_db public 154 enum1 CREATE TYPE public.enum1 AS ENUM ('yo') {yo}
1696
1740
1697
1741
# Repeat above two queries but apply only for the current database. We do this by omitting the "".
1698
1742
# This one uses the full table scan.
0 commit comments