diff --git a/docs/generated/settings/settings-for-tenants.txt b/docs/generated/settings/settings-for-tenants.txt
index 7c24361ae39e..2574ca609b7d 100644
--- a/docs/generated/settings/settings-for-tenants.txt
+++ b/docs/generated/settings/settings-for-tenants.txt
@@ -79,7 +79,6 @@ sql.cross_db_fks.enabled boolean false if true, creating foreign key references
sql.cross_db_sequence_owners.enabled boolean false if true, creating sequences owned by tables from other databases is allowed
sql.cross_db_sequence_references.enabled boolean false if true, sequences referenced by tables from other databases are allowed
sql.cross_db_views.enabled boolean false if true, creating views that refer to other databases is allowed
-sql.defaults.copy_partitioning_when_deinterleaving_table.enabled boolean false default value for enable_copying_partitioning_when_deinterleaving_table session variable
sql.defaults.datestyle enumeration iso, mdy default value for DateStyle session setting [iso, mdy = 0, iso, dmy = 1, iso, ymd = 2]
sql.defaults.datestyle.enabled boolean false default value for datestyle_enabled session setting
sql.defaults.default_int_size integer 8 the size, in bytes, of an INT type
diff --git a/docs/generated/settings/settings.html b/docs/generated/settings/settings.html
index 8924c5c2b7f6..f79e16ccfbf4 100644
--- a/docs/generated/settings/settings.html
+++ b/docs/generated/settings/settings.html
@@ -84,7 +84,6 @@
sql.cross_db_sequence_owners.enabled
boolean false
if true, creating sequences owned by tables from other databases is allowed
sql.cross_db_sequence_references.enabled
boolean false
if true, sequences referenced by tables from other databases are allowed
sql.cross_db_views.enabled
boolean false
if true, creating views that refer to other databases is allowed
-sql.defaults.copy_partitioning_when_deinterleaving_table.enabled
boolean false
default value for enable_copying_partitioning_when_deinterleaving_table session variable
sql.defaults.datestyle
enumeration iso, mdy
default value for DateStyle session setting [iso, mdy = 0, iso, dmy = 1, iso, ymd = 2]
sql.defaults.datestyle.enabled
boolean false
default value for datestyle_enabled session setting
sql.defaults.default_int_size
integer 8
the size, in bytes, of an INT type
diff --git a/docs/generated/sql/bnf/BUILD.bazel b/docs/generated/sql/bnf/BUILD.bazel
index 622d8d443f04..41413203ce8e 100644
--- a/docs/generated/sql/bnf/BUILD.bazel
+++ b/docs/generated/sql/bnf/BUILD.bazel
@@ -67,7 +67,6 @@ FILES = [
"create_database_stmt",
"create_ddl_stmt",
"create_extension_stmt",
- "create_index_interleaved_stmt",
"create_index_stmt",
"create_inverted_index_stmt",
"create_replication_stream_stmt",
@@ -117,7 +116,6 @@ FILES = [
"index_def",
"insert_rest",
"insert_stmt",
- "interleave",
"iso_level",
"joined_table",
"like_table_option_list",
@@ -126,7 +124,6 @@ FILES = [
"offset_clause",
"on_conflict",
"opt_frame_clause",
- "opt_interleave",
"opt_locality",
"opt_persistence_temp_table",
"opt_with_storage_parameter_list",
diff --git a/docs/generated/sql/bnf/alter_primary_key.bnf b/docs/generated/sql/bnf/alter_primary_key.bnf
index 4a82c0d74dd9..68801c218748 100644
--- a/docs/generated/sql/bnf/alter_primary_key.bnf
+++ b/docs/generated/sql/bnf/alter_primary_key.bnf
@@ -1,5 +1,5 @@
alter_onetable_stmt ::=
- 'ALTER' 'TABLE' table_name 'ALTER' 'PRIMARY' 'KEY' 'USING' 'COLUMNS' '(' index_params ')' 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets opt_interleave
- | 'ALTER' 'TABLE' table_name 'ALTER' 'PRIMARY' 'KEY' 'USING' 'COLUMNS' '(' index_params ')' opt_interleave
- | 'ALTER' 'TABLE' 'IF' 'EXISTS' table_name 'ALTER' 'PRIMARY' 'KEY' 'USING' 'COLUMNS' '(' index_params ')' 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets opt_interleave
- | 'ALTER' 'TABLE' 'IF' 'EXISTS' table_name 'ALTER' 'PRIMARY' 'KEY' 'USING' 'COLUMNS' '(' index_params ')' opt_interleave
+ 'ALTER' 'TABLE' table_name 'ALTER' 'PRIMARY' 'KEY' 'USING' 'COLUMNS' '(' index_params ')' 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets
+ | 'ALTER' 'TABLE' table_name 'ALTER' 'PRIMARY' 'KEY' 'USING' 'COLUMNS' '(' index_params ')'
+ | 'ALTER' 'TABLE' 'IF' 'EXISTS' table_name 'ALTER' 'PRIMARY' 'KEY' 'USING' 'COLUMNS' '(' index_params ')' 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets
+ | 'ALTER' 'TABLE' 'IF' 'EXISTS' table_name 'ALTER' 'PRIMARY' 'KEY' 'USING' 'COLUMNS' '(' index_params ')'
diff --git a/docs/generated/sql/bnf/alter_table.bnf b/docs/generated/sql/bnf/alter_table.bnf
index 21647c06028d..d61ecaed55df 100644
--- a/docs/generated/sql/bnf/alter_table.bnf
+++ b/docs/generated/sql/bnf/alter_table.bnf
@@ -1,3 +1,3 @@
alter_onetable_stmt ::=
- 'ALTER' 'TABLE' table_name ( ( ( 'RENAME' ( 'COLUMN' | ) column_name 'TO' column_name | 'RENAME' 'CONSTRAINT' column_name 'TO' column_name | 'ADD' ( column_name typename col_qual_list ) | 'ADD' 'IF' 'NOT' 'EXISTS' ( column_name typename col_qual_list ) | 'ADD' 'COLUMN' ( column_name typename col_qual_list ) | 'ADD' 'COLUMN' 'IF' 'NOT' 'EXISTS' ( column_name typename col_qual_list ) | 'ALTER' ( 'COLUMN' | ) column_name ( 'SET' 'DEFAULT' a_expr | 'DROP' 'DEFAULT' ) | 'ALTER' ( 'COLUMN' | ) column_name alter_column_on_update | 'ALTER' ( 'COLUMN' | ) column_name alter_column_visible | 'ALTER' ( 'COLUMN' | ) column_name 'DROP' 'NOT' 'NULL' | 'ALTER' ( 'COLUMN' | ) column_name 'DROP' 'STORED' | 'ALTER' ( 'COLUMN' | ) column_name 'SET' 'NOT' 'NULL' | 'DROP' ( 'COLUMN' | ) 'IF' 'EXISTS' column_name ( 'CASCADE' | 'RESTRICT' | ) | 'DROP' ( 'COLUMN' | ) column_name ( 'CASCADE' | 'RESTRICT' | ) | 'ALTER' ( 'COLUMN' | ) column_name ( 'SET' 'DATA' | ) 'TYPE' typename ( 'COLLATE' collation_name | ) ( 'USING' a_expr | ) | 'ADD' ( 'CONSTRAINT' constraint_name constraint_elem | constraint_elem ) | 'ALTER' 'PRIMARY' 'KEY' 'USING' 'COLUMNS' '(' index_params ')' opt_hash_sharded opt_interleave | 'VALIDATE' 'CONSTRAINT' constraint_name | 'DROP' 'CONSTRAINT' 'IF' 'EXISTS' constraint_name ( 'CASCADE' | 'RESTRICT' | ) | 'DROP' 'CONSTRAINT' constraint_name ( 'CASCADE' | 'RESTRICT' | ) | 'EXPERIMENTAL_AUDIT' 'SET' audit_mode | partition_by_table ) ) ( ( ',' ( 'RENAME' ( 'COLUMN' | ) column_name 'TO' column_name | 'RENAME' 'CONSTRAINT' column_name 'TO' column_name | 'ADD' ( column_name typename col_qual_list ) | 'ADD' 'IF' 'NOT' 'EXISTS' ( column_name typename col_qual_list ) | 'ADD' 'COLUMN' ( column_name typename col_qual_list ) | 'ADD' 'COLUMN' 'IF' 'NOT' 'EXISTS' ( column_name typename col_qual_list ) | 'ALTER' ( 'COLUMN' | ) column_name ( 'SET' 'DEFAULT' a_expr | 'DROP' 'DEFAULT' ) | 'ALTER' ( 'COLUMN' | ) column_name alter_column_on_update | 'ALTER' ( 'COLUMN' | ) column_name alter_column_visible | 'ALTER' ( 'COLUMN' | ) column_name 'DROP' 'NOT' 'NULL' | 'ALTER' ( 'COLUMN' | ) column_name 'DROP' 'STORED' | 'ALTER' ( 'COLUMN' | ) column_name 'SET' 'NOT' 'NULL' | 'DROP' ( 'COLUMN' | ) 'IF' 'EXISTS' column_name ( 'CASCADE' | 'RESTRICT' | ) | 'DROP' ( 'COLUMN' | ) column_name ( 'CASCADE' | 'RESTRICT' | ) | 'ALTER' ( 'COLUMN' | ) column_name ( 'SET' 'DATA' | ) 'TYPE' typename ( 'COLLATE' collation_name | ) ( 'USING' a_expr | ) | 'ADD' ( 'CONSTRAINT' constraint_name constraint_elem | constraint_elem ) | 'ALTER' 'PRIMARY' 'KEY' 'USING' 'COLUMNS' '(' index_params ')' opt_hash_sharded opt_interleave | 'VALIDATE' 'CONSTRAINT' constraint_name | 'DROP' 'CONSTRAINT' 'IF' 'EXISTS' constraint_name ( 'CASCADE' | 'RESTRICT' | ) | 'DROP' 'CONSTRAINT' constraint_name ( 'CASCADE' | 'RESTRICT' | ) | 'EXPERIMENTAL_AUDIT' 'SET' audit_mode | partition_by_table ) ) )* )
- | 'ALTER' 'TABLE' 'IF' 'EXISTS' table_name ( ( ( 'RENAME' ( 'COLUMN' | ) column_name 'TO' column_name | 'RENAME' 'CONSTRAINT' column_name 'TO' column_name | 'ADD' ( column_name typename col_qual_list ) | 'ADD' 'IF' 'NOT' 'EXISTS' ( column_name typename col_qual_list ) | 'ADD' 'COLUMN' ( column_name typename col_qual_list ) | 'ADD' 'COLUMN' 'IF' 'NOT' 'EXISTS' ( column_name typename col_qual_list ) | 'ALTER' ( 'COLUMN' | ) column_name ( 'SET' 'DEFAULT' a_expr | 'DROP' 'DEFAULT' ) | 'ALTER' ( 'COLUMN' | ) column_name alter_column_on_update | 'ALTER' ( 'COLUMN' | ) column_name alter_column_visible | 'ALTER' ( 'COLUMN' | ) column_name 'DROP' 'NOT' 'NULL' | 'ALTER' ( 'COLUMN' | ) column_name 'DROP' 'STORED' | 'ALTER' ( 'COLUMN' | ) column_name 'SET' 'NOT' 'NULL' | 'DROP' ( 'COLUMN' | ) 'IF' 'EXISTS' column_name ( 'CASCADE' | 'RESTRICT' | ) | 'DROP' ( 'COLUMN' | ) column_name ( 'CASCADE' | 'RESTRICT' | ) | 'ALTER' ( 'COLUMN' | ) column_name ( 'SET' 'DATA' | ) 'TYPE' typename ( 'COLLATE' collation_name | ) ( 'USING' a_expr | ) | 'ADD' ( 'CONSTRAINT' constraint_name constraint_elem | constraint_elem ) | 'ALTER' 'PRIMARY' 'KEY' 'USING' 'COLUMNS' '(' index_params ')' opt_hash_sharded opt_interleave | 'VALIDATE' 'CONSTRAINT' constraint_name | 'DROP' 'CONSTRAINT' 'IF' 'EXISTS' constraint_name ( 'CASCADE' | 'RESTRICT' | ) | 'DROP' 'CONSTRAINT' constraint_name ( 'CASCADE' | 'RESTRICT' | ) | 'EXPERIMENTAL_AUDIT' 'SET' audit_mode | partition_by_table ) ) ( ( ',' ( 'RENAME' ( 'COLUMN' | ) column_name 'TO' column_name | 'RENAME' 'CONSTRAINT' column_name 'TO' column_name | 'ADD' ( column_name typename col_qual_list ) | 'ADD' 'IF' 'NOT' 'EXISTS' ( column_name typename col_qual_list ) | 'ADD' 'COLUMN' ( column_name typename col_qual_list ) | 'ADD' 'COLUMN' 'IF' 'NOT' 'EXISTS' ( column_name typename col_qual_list ) | 'ALTER' ( 'COLUMN' | ) column_name ( 'SET' 'DEFAULT' a_expr | 'DROP' 'DEFAULT' ) | 'ALTER' ( 'COLUMN' | ) column_name alter_column_on_update | 'ALTER' ( 'COLUMN' | ) column_name alter_column_visible | 'ALTER' ( 'COLUMN' | ) column_name 'DROP' 'NOT' 'NULL' | 'ALTER' ( 'COLUMN' | ) column_name 'DROP' 'STORED' | 'ALTER' ( 'COLUMN' | ) column_name 'SET' 'NOT' 'NULL' | 'DROP' ( 'COLUMN' | ) 'IF' 'EXISTS' column_name ( 'CASCADE' | 'RESTRICT' | ) | 'DROP' ( 'COLUMN' | ) column_name ( 'CASCADE' | 'RESTRICT' | ) | 'ALTER' ( 'COLUMN' | ) column_name ( 'SET' 'DATA' | ) 'TYPE' typename ( 'COLLATE' collation_name | ) ( 'USING' a_expr | ) | 'ADD' ( 'CONSTRAINT' constraint_name constraint_elem | constraint_elem ) | 'ALTER' 'PRIMARY' 'KEY' 'USING' 'COLUMNS' '(' index_params ')' opt_hash_sharded opt_interleave | 'VALIDATE' 'CONSTRAINT' constraint_name | 'DROP' 'CONSTRAINT' 'IF' 'EXISTS' constraint_name ( 'CASCADE' | 'RESTRICT' | ) | 'DROP' 'CONSTRAINT' constraint_name ( 'CASCADE' | 'RESTRICT' | ) | 'EXPERIMENTAL_AUDIT' 'SET' audit_mode | partition_by_table ) ) )* )
+ 'ALTER' 'TABLE' table_name ( ( ( 'RENAME' ( 'COLUMN' | ) column_name 'TO' column_name | 'RENAME' 'CONSTRAINT' column_name 'TO' column_name | 'ADD' ( column_name typename col_qual_list ) | 'ADD' 'IF' 'NOT' 'EXISTS' ( column_name typename col_qual_list ) | 'ADD' 'COLUMN' ( column_name typename col_qual_list ) | 'ADD' 'COLUMN' 'IF' 'NOT' 'EXISTS' ( column_name typename col_qual_list ) | 'ALTER' ( 'COLUMN' | ) column_name ( 'SET' 'DEFAULT' a_expr | 'DROP' 'DEFAULT' ) | 'ALTER' ( 'COLUMN' | ) column_name alter_column_on_update | 'ALTER' ( 'COLUMN' | ) column_name alter_column_visible | 'ALTER' ( 'COLUMN' | ) column_name 'DROP' 'NOT' 'NULL' | 'ALTER' ( 'COLUMN' | ) column_name 'DROP' 'STORED' | 'ALTER' ( 'COLUMN' | ) column_name 'SET' 'NOT' 'NULL' | 'DROP' ( 'COLUMN' | ) 'IF' 'EXISTS' column_name ( 'CASCADE' | 'RESTRICT' | ) | 'DROP' ( 'COLUMN' | ) column_name ( 'CASCADE' | 'RESTRICT' | ) | 'ALTER' ( 'COLUMN' | ) column_name ( 'SET' 'DATA' | ) 'TYPE' typename ( 'COLLATE' collation_name | ) ( 'USING' a_expr | ) | 'ADD' ( 'CONSTRAINT' constraint_name constraint_elem | constraint_elem ) | 'ALTER' 'PRIMARY' 'KEY' 'USING' 'COLUMNS' '(' index_params ')' opt_hash_sharded | 'VALIDATE' 'CONSTRAINT' constraint_name | 'DROP' 'CONSTRAINT' 'IF' 'EXISTS' constraint_name ( 'CASCADE' | 'RESTRICT' | ) | 'DROP' 'CONSTRAINT' constraint_name ( 'CASCADE' | 'RESTRICT' | ) | 'EXPERIMENTAL_AUDIT' 'SET' audit_mode | partition_by_table ) ) ( ( ',' ( 'RENAME' ( 'COLUMN' | ) column_name 'TO' column_name | 'RENAME' 'CONSTRAINT' column_name 'TO' column_name | 'ADD' ( column_name typename col_qual_list ) | 'ADD' 'IF' 'NOT' 'EXISTS' ( column_name typename col_qual_list ) | 'ADD' 'COLUMN' ( column_name typename col_qual_list ) | 'ADD' 'COLUMN' 'IF' 'NOT' 'EXISTS' ( column_name typename col_qual_list ) | 'ALTER' ( 'COLUMN' | ) column_name ( 'SET' 'DEFAULT' a_expr | 'DROP' 'DEFAULT' ) | 'ALTER' ( 'COLUMN' | ) column_name alter_column_on_update | 'ALTER' ( 'COLUMN' | ) column_name alter_column_visible | 'ALTER' ( 'COLUMN' | ) column_name 'DROP' 'NOT' 'NULL' | 'ALTER' ( 'COLUMN' | ) column_name 'DROP' 'STORED' | 'ALTER' ( 'COLUMN' | ) column_name 'SET' 'NOT' 'NULL' | 'DROP' ( 'COLUMN' | ) 'IF' 'EXISTS' column_name ( 'CASCADE' | 'RESTRICT' | ) | 'DROP' ( 'COLUMN' | ) column_name ( 'CASCADE' | 'RESTRICT' | ) | 'ALTER' ( 'COLUMN' | ) column_name ( 'SET' 'DATA' | ) 'TYPE' typename ( 'COLLATE' collation_name | ) ( 'USING' a_expr | ) | 'ADD' ( 'CONSTRAINT' constraint_name constraint_elem | constraint_elem ) | 'ALTER' 'PRIMARY' 'KEY' 'USING' 'COLUMNS' '(' index_params ')' opt_hash_sharded | 'VALIDATE' 'CONSTRAINT' constraint_name | 'DROP' 'CONSTRAINT' 'IF' 'EXISTS' constraint_name ( 'CASCADE' | 'RESTRICT' | ) | 'DROP' 'CONSTRAINT' constraint_name ( 'CASCADE' | 'RESTRICT' | ) | 'EXPERIMENTAL_AUDIT' 'SET' audit_mode | partition_by_table ) ) )* )
+ | 'ALTER' 'TABLE' 'IF' 'EXISTS' table_name ( ( ( 'RENAME' ( 'COLUMN' | ) column_name 'TO' column_name | 'RENAME' 'CONSTRAINT' column_name 'TO' column_name | 'ADD' ( column_name typename col_qual_list ) | 'ADD' 'IF' 'NOT' 'EXISTS' ( column_name typename col_qual_list ) | 'ADD' 'COLUMN' ( column_name typename col_qual_list ) | 'ADD' 'COLUMN' 'IF' 'NOT' 'EXISTS' ( column_name typename col_qual_list ) | 'ALTER' ( 'COLUMN' | ) column_name ( 'SET' 'DEFAULT' a_expr | 'DROP' 'DEFAULT' ) | 'ALTER' ( 'COLUMN' | ) column_name alter_column_on_update | 'ALTER' ( 'COLUMN' | ) column_name alter_column_visible | 'ALTER' ( 'COLUMN' | ) column_name 'DROP' 'NOT' 'NULL' | 'ALTER' ( 'COLUMN' | ) column_name 'DROP' 'STORED' | 'ALTER' ( 'COLUMN' | ) column_name 'SET' 'NOT' 'NULL' | 'DROP' ( 'COLUMN' | ) 'IF' 'EXISTS' column_name ( 'CASCADE' | 'RESTRICT' | ) | 'DROP' ( 'COLUMN' | ) column_name ( 'CASCADE' | 'RESTRICT' | ) | 'ALTER' ( 'COLUMN' | ) column_name ( 'SET' 'DATA' | ) 'TYPE' typename ( 'COLLATE' collation_name | ) ( 'USING' a_expr | ) | 'ADD' ( 'CONSTRAINT' constraint_name constraint_elem | constraint_elem ) | 'ALTER' 'PRIMARY' 'KEY' 'USING' 'COLUMNS' '(' index_params ')' opt_hash_sharded | 'VALIDATE' 'CONSTRAINT' constraint_name | 'DROP' 'CONSTRAINT' 'IF' 'EXISTS' constraint_name ( 'CASCADE' | 'RESTRICT' | ) | 'DROP' 'CONSTRAINT' constraint_name ( 'CASCADE' | 'RESTRICT' | ) | 'EXPERIMENTAL_AUDIT' 'SET' audit_mode | partition_by_table ) ) ( ( ',' ( 'RENAME' ( 'COLUMN' | ) column_name 'TO' column_name | 'RENAME' 'CONSTRAINT' column_name 'TO' column_name | 'ADD' ( column_name typename col_qual_list ) | 'ADD' 'IF' 'NOT' 'EXISTS' ( column_name typename col_qual_list ) | 'ADD' 'COLUMN' ( column_name typename col_qual_list ) | 'ADD' 'COLUMN' 'IF' 'NOT' 'EXISTS' ( column_name typename col_qual_list ) | 'ALTER' ( 'COLUMN' | ) column_name ( 'SET' 'DEFAULT' a_expr | 'DROP' 'DEFAULT' ) | 'ALTER' ( 'COLUMN' | ) column_name alter_column_on_update | 'ALTER' ( 'COLUMN' | ) column_name alter_column_visible | 'ALTER' ( 'COLUMN' | ) column_name 'DROP' 'NOT' 'NULL' | 'ALTER' ( 'COLUMN' | ) column_name 'DROP' 'STORED' | 'ALTER' ( 'COLUMN' | ) column_name 'SET' 'NOT' 'NULL' | 'DROP' ( 'COLUMN' | ) 'IF' 'EXISTS' column_name ( 'CASCADE' | 'RESTRICT' | ) | 'DROP' ( 'COLUMN' | ) column_name ( 'CASCADE' | 'RESTRICT' | ) | 'ALTER' ( 'COLUMN' | ) column_name ( 'SET' 'DATA' | ) 'TYPE' typename ( 'COLLATE' collation_name | ) ( 'USING' a_expr | ) | 'ADD' ( 'CONSTRAINT' constraint_name constraint_elem | constraint_elem ) | 'ALTER' 'PRIMARY' 'KEY' 'USING' 'COLUMNS' '(' index_params ')' opt_hash_sharded | 'VALIDATE' 'CONSTRAINT' constraint_name | 'DROP' 'CONSTRAINT' 'IF' 'EXISTS' constraint_name ( 'CASCADE' | 'RESTRICT' | ) | 'DROP' 'CONSTRAINT' constraint_name ( 'CASCADE' | 'RESTRICT' | ) | 'EXPERIMENTAL_AUDIT' 'SET' audit_mode | partition_by_table ) ) )* )
diff --git a/docs/generated/sql/bnf/alter_table_partition_by.bnf b/docs/generated/sql/bnf/alter_table_partition_by.bnf
index 82fe3f23fb07..491af0c610a5 100644
--- a/docs/generated/sql/bnf/alter_table_partition_by.bnf
+++ b/docs/generated/sql/bnf/alter_table_partition_by.bnf
@@ -1,3 +1,3 @@
alter_onetable_stmt ::=
- 'ALTER' 'TABLE' table_name 'PARTITION' 'ALL' 'BY' partition_by_inner ( ( ',' ( 'RENAME' opt_column column_name 'TO' column_name | 'RENAME' 'CONSTRAINT' column_name 'TO' column_name | 'ADD' column_def | 'ADD' 'IF' 'NOT' 'EXISTS' column_def | 'ADD' 'COLUMN' column_def | 'ADD' 'COLUMN' 'IF' 'NOT' 'EXISTS' column_def | 'ALTER' opt_column column_name alter_column_default | 'ALTER' opt_column column_name alter_column_on_update | 'ALTER' opt_column column_name alter_column_visible | 'ALTER' opt_column column_name 'DROP' 'NOT' 'NULL' | 'ALTER' opt_column column_name 'DROP' 'STORED' | 'ALTER' opt_column column_name 'SET' 'NOT' 'NULL' | 'DROP' opt_column 'IF' 'EXISTS' column_name opt_drop_behavior | 'DROP' opt_column column_name opt_drop_behavior | 'ALTER' opt_column column_name opt_set_data 'TYPE' typename opt_collate opt_alter_column_using | 'ADD' table_constraint opt_validate_behavior | 'ALTER' 'PRIMARY' 'KEY' 'USING' 'COLUMNS' '(' index_params ')' opt_hash_sharded opt_interleave | 'VALIDATE' 'CONSTRAINT' constraint_name | 'DROP' 'CONSTRAINT' 'IF' 'EXISTS' constraint_name opt_drop_behavior | 'DROP' 'CONSTRAINT' constraint_name opt_drop_behavior | 'EXPERIMENTAL_AUDIT' 'SET' audit_mode | ( partition_by | 'PARTITION' 'ALL' 'BY' partition_by_inner ) ) ) )*
- | 'ALTER' 'TABLE' 'IF' 'EXISTS' table_name 'PARTITION' 'ALL' 'BY' partition_by_inner ( ( ',' ( 'RENAME' opt_column column_name 'TO' column_name | 'RENAME' 'CONSTRAINT' column_name 'TO' column_name | 'ADD' column_def | 'ADD' 'IF' 'NOT' 'EXISTS' column_def | 'ADD' 'COLUMN' column_def | 'ADD' 'COLUMN' 'IF' 'NOT' 'EXISTS' column_def | 'ALTER' opt_column column_name alter_column_default | 'ALTER' opt_column column_name alter_column_on_update | 'ALTER' opt_column column_name alter_column_visible | 'ALTER' opt_column column_name 'DROP' 'NOT' 'NULL' | 'ALTER' opt_column column_name 'DROP' 'STORED' | 'ALTER' opt_column column_name 'SET' 'NOT' 'NULL' | 'DROP' opt_column 'IF' 'EXISTS' column_name opt_drop_behavior | 'DROP' opt_column column_name opt_drop_behavior | 'ALTER' opt_column column_name opt_set_data 'TYPE' typename opt_collate opt_alter_column_using | 'ADD' table_constraint opt_validate_behavior | 'ALTER' 'PRIMARY' 'KEY' 'USING' 'COLUMNS' '(' index_params ')' opt_hash_sharded opt_interleave | 'VALIDATE' 'CONSTRAINT' constraint_name | 'DROP' 'CONSTRAINT' 'IF' 'EXISTS' constraint_name opt_drop_behavior | 'DROP' 'CONSTRAINT' constraint_name opt_drop_behavior | 'EXPERIMENTAL_AUDIT' 'SET' audit_mode | ( partition_by | 'PARTITION' 'ALL' 'BY' partition_by_inner ) ) ) )*
+ 'ALTER' 'TABLE' table_name 'PARTITION' 'ALL' 'BY' partition_by_inner ( ( ',' ( 'RENAME' opt_column column_name 'TO' column_name | 'RENAME' 'CONSTRAINT' column_name 'TO' column_name | 'ADD' column_def | 'ADD' 'IF' 'NOT' 'EXISTS' column_def | 'ADD' 'COLUMN' column_def | 'ADD' 'COLUMN' 'IF' 'NOT' 'EXISTS' column_def | 'ALTER' opt_column column_name alter_column_default | 'ALTER' opt_column column_name alter_column_on_update | 'ALTER' opt_column column_name alter_column_visible | 'ALTER' opt_column column_name 'DROP' 'NOT' 'NULL' | 'ALTER' opt_column column_name 'DROP' 'STORED' | 'ALTER' opt_column column_name 'SET' 'NOT' 'NULL' | 'DROP' opt_column 'IF' 'EXISTS' column_name opt_drop_behavior | 'DROP' opt_column column_name opt_drop_behavior | 'ALTER' opt_column column_name opt_set_data 'TYPE' typename opt_collate opt_alter_column_using | 'ADD' table_constraint opt_validate_behavior | 'ALTER' 'PRIMARY' 'KEY' 'USING' 'COLUMNS' '(' index_params ')' opt_hash_sharded | 'VALIDATE' 'CONSTRAINT' constraint_name | 'DROP' 'CONSTRAINT' 'IF' 'EXISTS' constraint_name opt_drop_behavior | 'DROP' 'CONSTRAINT' constraint_name opt_drop_behavior | 'EXPERIMENTAL_AUDIT' 'SET' audit_mode | ( partition_by | 'PARTITION' 'ALL' 'BY' partition_by_inner ) ) ) )*
+ | 'ALTER' 'TABLE' 'IF' 'EXISTS' table_name 'PARTITION' 'ALL' 'BY' partition_by_inner ( ( ',' ( 'RENAME' opt_column column_name 'TO' column_name | 'RENAME' 'CONSTRAINT' column_name 'TO' column_name | 'ADD' column_def | 'ADD' 'IF' 'NOT' 'EXISTS' column_def | 'ADD' 'COLUMN' column_def | 'ADD' 'COLUMN' 'IF' 'NOT' 'EXISTS' column_def | 'ALTER' opt_column column_name alter_column_default | 'ALTER' opt_column column_name alter_column_on_update | 'ALTER' opt_column column_name alter_column_visible | 'ALTER' opt_column column_name 'DROP' 'NOT' 'NULL' | 'ALTER' opt_column column_name 'DROP' 'STORED' | 'ALTER' opt_column column_name 'SET' 'NOT' 'NULL' | 'DROP' opt_column 'IF' 'EXISTS' column_name opt_drop_behavior | 'DROP' opt_column column_name opt_drop_behavior | 'ALTER' opt_column column_name opt_set_data 'TYPE' typename opt_collate opt_alter_column_using | 'ADD' table_constraint opt_validate_behavior | 'ALTER' 'PRIMARY' 'KEY' 'USING' 'COLUMNS' '(' index_params ')' opt_hash_sharded | 'VALIDATE' 'CONSTRAINT' constraint_name | 'DROP' 'CONSTRAINT' 'IF' 'EXISTS' constraint_name opt_drop_behavior | 'DROP' 'CONSTRAINT' constraint_name opt_drop_behavior | 'EXPERIMENTAL_AUDIT' 'SET' audit_mode | ( partition_by | 'PARTITION' 'ALL' 'BY' partition_by_inner ) ) ) )*
diff --git a/docs/generated/sql/bnf/create_index_interleaved_stmt.bnf b/docs/generated/sql/bnf/create_index_interleaved_stmt.bnf
deleted file mode 100644
index d56defd29eba..000000000000
--- a/docs/generated/sql/bnf/create_index_interleaved_stmt.bnf
+++ /dev/null
@@ -1,17 +0,0 @@
-create_index_stmt ::=
- 'CREATE' 'UNIQUE' 'INDEX' 'CONCURRENTLY' '...' opt_hash_sharded 'STORING' '(' stored_columns ')' 'INTERLEAVE' 'IN' 'PARENT' parent_table '(' interleave_prefix ')'_index opt_with_storage_parameter_list opt_where_clause
- | 'CREATE' 'UNIQUE' 'INDEX' 'CONCURRENTLY' '...' opt_hash_sharded 'INTERLEAVE' 'IN' 'PARENT' parent_table '(' interleave_prefix ')'_index opt_with_storage_parameter_list opt_where_clause
- | 'CREATE' 'UNIQUE' 'INDEX' '...' opt_hash_sharded 'STORING' '(' stored_columns ')' 'INTERLEAVE' 'IN' 'PARENT' parent_table '(' interleave_prefix ')'_index opt_with_storage_parameter_list opt_where_clause
- | 'CREATE' 'UNIQUE' 'INDEX' '...' opt_hash_sharded 'INTERLEAVE' 'IN' 'PARENT' parent_table '(' interleave_prefix ')'_index opt_with_storage_parameter_list opt_where_clause
- | 'CREATE' 'INDEX' 'CONCURRENTLY' '...' opt_hash_sharded 'STORING' '(' stored_columns ')' 'INTERLEAVE' 'IN' 'PARENT' parent_table '(' interleave_prefix ')'_index opt_with_storage_parameter_list opt_where_clause
- | 'CREATE' 'INDEX' 'CONCURRENTLY' '...' opt_hash_sharded 'INTERLEAVE' 'IN' 'PARENT' parent_table '(' interleave_prefix ')'_index opt_with_storage_parameter_list opt_where_clause
- | 'CREATE' 'INDEX' '...' opt_hash_sharded 'STORING' '(' stored_columns ')' 'INTERLEAVE' 'IN' 'PARENT' parent_table '(' interleave_prefix ')'_index opt_with_storage_parameter_list opt_where_clause
- | 'CREATE' 'INDEX' '...' opt_hash_sharded 'INTERLEAVE' 'IN' 'PARENT' parent_table '(' interleave_prefix ')'_index opt_with_storage_parameter_list opt_where_clause
- | 'CREATE' 'UNIQUE' 'INVERTED' 'INDEX' 'CONCURRENTLY' '...' 'STORING' '(' stored_columns ')' 'INTERLEAVE' 'IN' 'PARENT' parent_table '(' interleave_prefix ')'_index opt_with_storage_parameter_list opt_where_clause
- | 'CREATE' 'UNIQUE' 'INVERTED' 'INDEX' 'CONCURRENTLY' '...' 'INTERLEAVE' 'IN' 'PARENT' parent_table '(' interleave_prefix ')'_index opt_with_storage_parameter_list opt_where_clause
- | 'CREATE' 'UNIQUE' 'INVERTED' 'INDEX' '...' 'STORING' '(' stored_columns ')' 'INTERLEAVE' 'IN' 'PARENT' parent_table '(' interleave_prefix ')'_index opt_with_storage_parameter_list opt_where_clause
- | 'CREATE' 'UNIQUE' 'INVERTED' 'INDEX' '...' 'INTERLEAVE' 'IN' 'PARENT' parent_table '(' interleave_prefix ')'_index opt_with_storage_parameter_list opt_where_clause
- | 'CREATE' 'INVERTED' 'INDEX' 'CONCURRENTLY' '...' 'STORING' '(' stored_columns ')' 'INTERLEAVE' 'IN' 'PARENT' parent_table '(' interleave_prefix ')'_index opt_with_storage_parameter_list opt_where_clause
- | 'CREATE' 'INVERTED' 'INDEX' 'CONCURRENTLY' '...' 'INTERLEAVE' 'IN' 'PARENT' parent_table '(' interleave_prefix ')'_index opt_with_storage_parameter_list opt_where_clause
- | 'CREATE' 'INVERTED' 'INDEX' '...' 'STORING' '(' stored_columns ')' 'INTERLEAVE' 'IN' 'PARENT' parent_table '(' interleave_prefix ')'_index opt_with_storage_parameter_list opt_where_clause
- | 'CREATE' 'INVERTED' 'INDEX' '...' 'INTERLEAVE' 'IN' 'PARENT' parent_table '(' interleave_prefix ')'_index opt_with_storage_parameter_list opt_where_clause
diff --git a/docs/generated/sql/bnf/create_index_stmt.bnf b/docs/generated/sql/bnf/create_index_stmt.bnf
index 0a20488e87e8..219d9b3f4c44 100644
--- a/docs/generated/sql/bnf/create_index_stmt.bnf
+++ b/docs/generated/sql/bnf/create_index_stmt.bnf
@@ -1,5 +1,5 @@
create_index_stmt ::=
- 'CREATE' ( 'UNIQUE' | ) 'INDEX' ( 'CONCURRENTLY' | ) opt_index_name 'ON' table_name ( 'USING' name | ) '(' ( ( ( func_expr_windowless index_elem_options | '(' a_expr ')' index_elem_options | name index_elem_options ) ) ( ( ',' ( func_expr_windowless index_elem_options | '(' a_expr ')' index_elem_options | name index_elem_options ) ) )* ) ')' ( 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets | ) ( ( 'COVERING' | 'STORING' | 'INCLUDE' ) '(' name_list ')' | ) opt_interleave opt_partition_by_index ( 'WITH' '(' ( ( storage_parameter ) ( ( ',' storage_parameter ) )* ) ')' ) opt_where_clause
- | 'CREATE' ( 'UNIQUE' | ) 'INDEX' ( 'CONCURRENTLY' | ) 'IF' 'NOT' 'EXISTS' index_name 'ON' table_name ( 'USING' name | ) '(' ( ( ( func_expr_windowless index_elem_options | '(' a_expr ')' index_elem_options | name index_elem_options ) ) ( ( ',' ( func_expr_windowless index_elem_options | '(' a_expr ')' index_elem_options | name index_elem_options ) ) )* ) ')' ( 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets | ) ( ( 'COVERING' | 'STORING' | 'INCLUDE' ) '(' name_list ')' | ) opt_interleave opt_partition_by_index ( 'WITH' '(' ( ( storage_parameter ) ( ( ',' storage_parameter ) )* ) ')' ) opt_where_clause
+ 'CREATE' ( 'UNIQUE' | ) 'INDEX' ( 'CONCURRENTLY' | ) opt_index_name 'ON' table_name ( 'USING' name | ) '(' ( ( ( func_expr_windowless index_elem_options | '(' a_expr ')' index_elem_options | name index_elem_options ) ) ( ( ',' ( func_expr_windowless index_elem_options | '(' a_expr ')' index_elem_options | name index_elem_options ) ) )* ) ')' ( 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets | ) ( ( 'COVERING' | 'STORING' | 'INCLUDE' ) '(' name_list ')' | ) opt_partition_by_index ( 'WITH' '(' ( ( storage_parameter ) ( ( ',' storage_parameter ) )* ) ')' ) opt_where_clause
+ | 'CREATE' ( 'UNIQUE' | ) 'INDEX' ( 'CONCURRENTLY' | ) 'IF' 'NOT' 'EXISTS' index_name 'ON' table_name ( 'USING' name | ) '(' ( ( ( func_expr_windowless index_elem_options | '(' a_expr ')' index_elem_options | name index_elem_options ) ) ( ( ',' ( func_expr_windowless index_elem_options | '(' a_expr ')' index_elem_options | name index_elem_options ) ) )* ) ')' ( 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets | ) ( ( 'COVERING' | 'STORING' | 'INCLUDE' ) '(' name_list ')' | ) opt_partition_by_index ( 'WITH' '(' ( ( storage_parameter ) ( ( ',' storage_parameter ) )* ) ')' ) opt_where_clause
diff --git a/docs/generated/sql/bnf/create_inverted_index_stmt.bnf b/docs/generated/sql/bnf/create_inverted_index_stmt.bnf
index 0147a5b4f1ec..8aed6d67271e 100644
--- a/docs/generated/sql/bnf/create_inverted_index_stmt.bnf
+++ b/docs/generated/sql/bnf/create_inverted_index_stmt.bnf
@@ -1,5 +1,5 @@
create_index_stmt ::=
- 'CREATE' ( 'UNIQUE' | ) 'INDEX' ( 'CONCURRENTLY' | ) opt_index_name 'ON' table_name opt_index_access_method '(' ( ( ( func_expr_windowless index_elem_options | '(' a_expr ')' index_elem_options | name index_elem_options ) ) ( ( ',' ( func_expr_windowless index_elem_options | '(' a_expr ')' index_elem_options | name index_elem_options ) ) )* ) ')' opt_hash_sharded ( ( 'COVERING' | 'STORING' | 'INCLUDE' ) '(' name_list ')' | ) opt_interleave opt_partition_by_index ( 'WITH' '(' ( ( storage_parameter ) ( ( ',' storage_parameter ) )* ) ')' ) opt_where_clause
- | 'CREATE' ( 'UNIQUE' | ) 'INDEX' ( 'CONCURRENTLY' | ) 'IF' 'NOT' 'EXISTS' index_name 'ON' table_name opt_index_access_method '(' ( ( ( func_expr_windowless index_elem_options | '(' a_expr ')' index_elem_options | name index_elem_options ) ) ( ( ',' ( func_expr_windowless index_elem_options | '(' a_expr ')' index_elem_options | name index_elem_options ) ) )* ) ')' opt_hash_sharded ( ( 'COVERING' | 'STORING' | 'INCLUDE' ) '(' name_list ')' | ) opt_interleave opt_partition_by_index ( 'WITH' '(' ( ( storage_parameter ) ( ( ',' storage_parameter ) )* ) ')' ) opt_where_clause
- | 'CREATE' ( 'UNIQUE' | ) 'INVERTED' 'INDEX' ( 'CONCURRENTLY' | ) opt_index_name 'ON' table_name '(' ( ( ( func_expr_windowless index_elem_options | '(' a_expr ')' index_elem_options | name index_elem_options ) ) ( ( ',' ( func_expr_windowless index_elem_options | '(' a_expr ')' index_elem_options | name index_elem_options ) ) )* ) ')' ( ( 'COVERING' | 'STORING' | 'INCLUDE' ) '(' name_list ')' | ) opt_interleave opt_partition_by_index ( 'WITH' '(' ( ( storage_parameter ) ( ( ',' storage_parameter ) )* ) ')' ) opt_where_clause
- | 'CREATE' ( 'UNIQUE' | ) 'INVERTED' 'INDEX' ( 'CONCURRENTLY' | ) 'IF' 'NOT' 'EXISTS' index_name 'ON' table_name '(' ( ( ( func_expr_windowless index_elem_options | '(' a_expr ')' index_elem_options | name index_elem_options ) ) ( ( ',' ( func_expr_windowless index_elem_options | '(' a_expr ')' index_elem_options | name index_elem_options ) ) )* ) ')' ( ( 'COVERING' | 'STORING' | 'INCLUDE' ) '(' name_list ')' | ) opt_interleave opt_partition_by_index ( 'WITH' '(' ( ( storage_parameter ) ( ( ',' storage_parameter ) )* ) ')' ) opt_where_clause
+ 'CREATE' ( 'UNIQUE' | ) 'INDEX' ( 'CONCURRENTLY' | ) opt_index_name 'ON' table_name opt_index_access_method '(' ( ( ( func_expr_windowless index_elem_options | '(' a_expr ')' index_elem_options | name index_elem_options ) ) ( ( ',' ( func_expr_windowless index_elem_options | '(' a_expr ')' index_elem_options | name index_elem_options ) ) )* ) ')' opt_hash_sharded ( ( 'COVERING' | 'STORING' | 'INCLUDE' ) '(' name_list ')' | ) opt_partition_by_index ( 'WITH' '(' ( ( storage_parameter ) ( ( ',' storage_parameter ) )* ) ')' ) opt_where_clause
+ | 'CREATE' ( 'UNIQUE' | ) 'INDEX' ( 'CONCURRENTLY' | ) 'IF' 'NOT' 'EXISTS' index_name 'ON' table_name opt_index_access_method '(' ( ( ( func_expr_windowless index_elem_options | '(' a_expr ')' index_elem_options | name index_elem_options ) ) ( ( ',' ( func_expr_windowless index_elem_options | '(' a_expr ')' index_elem_options | name index_elem_options ) ) )* ) ')' opt_hash_sharded ( ( 'COVERING' | 'STORING' | 'INCLUDE' ) '(' name_list ')' | ) opt_partition_by_index ( 'WITH' '(' ( ( storage_parameter ) ( ( ',' storage_parameter ) )* ) ')' ) opt_where_clause
+ | 'CREATE' ( 'UNIQUE' | ) 'INVERTED' 'INDEX' ( 'CONCURRENTLY' | ) opt_index_name 'ON' table_name '(' ( ( ( func_expr_windowless index_elem_options | '(' a_expr ')' index_elem_options | name index_elem_options ) ) ( ( ',' ( func_expr_windowless index_elem_options | '(' a_expr ')' index_elem_options | name index_elem_options ) ) )* ) ')' ( ( 'COVERING' | 'STORING' | 'INCLUDE' ) '(' name_list ')' | ) opt_partition_by_index ( 'WITH' '(' ( ( storage_parameter ) ( ( ',' storage_parameter ) )* ) ')' ) opt_where_clause
+ | 'CREATE' ( 'UNIQUE' | ) 'INVERTED' 'INDEX' ( 'CONCURRENTLY' | ) 'IF' 'NOT' 'EXISTS' index_name 'ON' table_name '(' ( ( ( func_expr_windowless index_elem_options | '(' a_expr ')' index_elem_options | name index_elem_options ) ) ( ( ',' ( func_expr_windowless index_elem_options | '(' a_expr ')' index_elem_options | name index_elem_options ) ) )* ) ')' ( ( 'COVERING' | 'STORING' | 'INCLUDE' ) '(' name_list ')' | ) opt_partition_by_index ( 'WITH' '(' ( ( storage_parameter ) ( ( ',' storage_parameter ) )* ) ')' ) opt_where_clause
diff --git a/docs/generated/sql/bnf/create_table_stmt.bnf b/docs/generated/sql/bnf/create_table_stmt.bnf
index 2bab8fb5f56d..46a04cc2cd88 100644
--- a/docs/generated/sql/bnf/create_table_stmt.bnf
+++ b/docs/generated/sql/bnf/create_table_stmt.bnf
@@ -1,3 +1,3 @@
create_table_stmt ::=
- 'CREATE' opt_persistence_temp_table 'TABLE' table_name '(' ( ( ( ( column_def | index_def | family_def | table_constraint opt_validate_behavior | 'LIKE' table_name like_table_option_list ) ) ( ( ',' ( column_def | index_def | family_def | table_constraint opt_validate_behavior | 'LIKE' table_name like_table_option_list ) ) )* ) | ) ')' opt_interleave opt_partition_by_table ( opt_with_storage_parameter_list ) ( 'ON' 'COMMIT' 'PRESERVE' 'ROWS' ) opt_locality
- | 'CREATE' opt_persistence_temp_table 'TABLE' 'IF' 'NOT' 'EXISTS' table_name '(' ( ( ( ( column_def | index_def | family_def | table_constraint opt_validate_behavior | 'LIKE' table_name like_table_option_list ) ) ( ( ',' ( column_def | index_def | family_def | table_constraint opt_validate_behavior | 'LIKE' table_name like_table_option_list ) ) )* ) | ) ')' opt_interleave opt_partition_by_table ( opt_with_storage_parameter_list ) ( 'ON' 'COMMIT' 'PRESERVE' 'ROWS' ) opt_locality
+ 'CREATE' opt_persistence_temp_table 'TABLE' table_name '(' ( ( ( ( column_def | index_def | family_def | table_constraint opt_validate_behavior | 'LIKE' table_name like_table_option_list ) ) ( ( ',' ( column_def | index_def | family_def | table_constraint opt_validate_behavior | 'LIKE' table_name like_table_option_list ) ) )* ) | ) ')' opt_partition_by_table ( opt_with_storage_parameter_list ) ( 'ON' 'COMMIT' 'PRESERVE' 'ROWS' ) opt_locality
+ | 'CREATE' opt_persistence_temp_table 'TABLE' 'IF' 'NOT' 'EXISTS' table_name '(' ( ( ( ( column_def | index_def | family_def | table_constraint opt_validate_behavior | 'LIKE' table_name like_table_option_list ) ) ( ( ',' ( column_def | index_def | family_def | table_constraint opt_validate_behavior | 'LIKE' table_name like_table_option_list ) ) )* ) | ) ')' opt_partition_by_table ( opt_with_storage_parameter_list ) ( 'ON' 'COMMIT' 'PRESERVE' 'ROWS' ) opt_locality
diff --git a/docs/generated/sql/bnf/index_def.bnf b/docs/generated/sql/bnf/index_def.bnf
index fb43452d707a..302748969a88 100644
--- a/docs/generated/sql/bnf/index_def.bnf
+++ b/docs/generated/sql/bnf/index_def.bnf
@@ -1,19 +1,19 @@
index_def ::=
- 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets 'COVERING' '(' name_list ')' opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
- | 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets 'STORING' '(' name_list ')' opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
- | 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets 'INCLUDE' '(' name_list ')' opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
- | 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
- | 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'COVERING' '(' name_list ')' opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
- | 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'STORING' '(' name_list ')' opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
- | 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'INCLUDE' '(' name_list ')' opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
- | 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
- | 'UNIQUE' 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets 'COVERING' '(' name_list ')' opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
- | 'UNIQUE' 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets 'STORING' '(' name_list ')' opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
- | 'UNIQUE' 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets 'INCLUDE' '(' name_list ')' opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
- | 'UNIQUE' 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
- | 'UNIQUE' 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'COVERING' '(' name_list ')' opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
- | 'UNIQUE' 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'STORING' '(' name_list ')' opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
- | 'UNIQUE' 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'INCLUDE' '(' name_list ')' opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
- | 'UNIQUE' 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+ 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets 'COVERING' '(' name_list ')' opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+ | 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets 'STORING' '(' name_list ')' opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+ | 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets 'INCLUDE' '(' name_list ')' opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+ | 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+ | 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'COVERING' '(' name_list ')' opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+ | 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'STORING' '(' name_list ')' opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+ | 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'INCLUDE' '(' name_list ')' opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+ | 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+ | 'UNIQUE' 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets 'COVERING' '(' name_list ')' opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+ | 'UNIQUE' 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets 'STORING' '(' name_list ')' opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+ | 'UNIQUE' 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets 'INCLUDE' '(' name_list ')' opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+ | 'UNIQUE' 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+ | 'UNIQUE' 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'COVERING' '(' name_list ')' opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+ | 'UNIQUE' 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'STORING' '(' name_list ')' opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+ | 'UNIQUE' 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' 'INCLUDE' '(' name_list ')' opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+ | 'UNIQUE' 'INDEX' opt_index_name '(' index_elem ( ( ',' index_elem ) )* ')' opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
| 'INVERTED' 'INDEX' name '(' index_elem ( ( ',' index_elem ) )* ')' opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
| 'INVERTED' 'INDEX' '(' index_elem ( ( ',' index_elem ) )* ')' opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
diff --git a/docs/generated/sql/bnf/interleave.bnf b/docs/generated/sql/bnf/interleave.bnf
deleted file mode 100644
index 7e71696f8c8a..000000000000
--- a/docs/generated/sql/bnf/interleave.bnf
+++ /dev/null
@@ -1,5 +0,0 @@
-create_table_stmt ::=
- 'CREATE' opt_persistence_temp_table 'TABLE' table_name '(' table_definition ')' 'INTERLEAVE' 'IN' 'PARENT' table_name '(' name_list ')' opt_partition_by_table 'WITH' '(' storage_parameter ( ( ',' storage_parameter ) )* ')' 'ON' 'COMMIT' 'PRESERVE' 'ROWS' opt_locality
- | 'CREATE' opt_persistence_temp_table 'TABLE' table_name '(' table_definition ')' opt_partition_by_table 'WITH' '(' storage_parameter ( ( ',' storage_parameter ) )* ')' 'ON' 'COMMIT' 'PRESERVE' 'ROWS' opt_locality
- | 'CREATE' opt_persistence_temp_table 'TABLE' 'IF' 'NOT' 'EXISTS' table_name '(' table_definition ')' 'INTERLEAVE' 'IN' 'PARENT' table_name '(' name_list ')' opt_partition_by_table 'WITH' '(' storage_parameter ( ( ',' storage_parameter ) )* ')' 'ON' 'COMMIT' 'PRESERVE' 'ROWS' opt_locality
- | 'CREATE' opt_persistence_temp_table 'TABLE' 'IF' 'NOT' 'EXISTS' table_name '(' table_definition ')' opt_partition_by_table 'WITH' '(' storage_parameter ( ( ',' storage_parameter ) )* ')' 'ON' 'COMMIT' 'PRESERVE' 'ROWS' opt_locality
diff --git a/docs/generated/sql/bnf/opt_interleave.bnf b/docs/generated/sql/bnf/opt_interleave.bnf
deleted file mode 100644
index fc1e45560432..000000000000
--- a/docs/generated/sql/bnf/opt_interleave.bnf
+++ /dev/null
@@ -1,2 +0,0 @@
-opt_interleave ::=
- 'INTERLEAVE' 'IN' 'PARENT' table_name '(' name_list ')'
diff --git a/docs/generated/sql/bnf/stmt_block.bnf b/docs/generated/sql/bnf/stmt_block.bnf
index da806b77f112..6c846178024b 100644
--- a/docs/generated/sql/bnf/stmt_block.bnf
+++ b/docs/generated/sql/bnf/stmt_block.bnf
@@ -952,7 +952,6 @@ unreserved_keyword ::=
| 'IMMEDIATE'
| 'IMPORT'
| 'INCLUDE'
- | 'INCLUDE_DEPRECATED_INTERLEAVES'
| 'INCLUDING'
| 'INCREMENT'
| 'INCREMENTAL'
@@ -960,7 +959,6 @@ unreserved_keyword ::=
| 'INHERITS'
| 'INJECT'
| 'INSERT'
- | 'INTERLEAVE'
| 'INTO_DB'
| 'INVERTED'
| 'ISOLATION'
@@ -1402,10 +1400,10 @@ create_database_stmt ::=
| 'CREATE' 'DATABASE' 'IF' 'NOT' 'EXISTS' database_name opt_with opt_template_clause opt_encoding_clause opt_lc_collate_clause opt_lc_ctype_clause opt_connection_limit opt_primary_region_clause opt_regions_list opt_survival_goal_clause
create_index_stmt ::=
- 'CREATE' opt_unique 'INDEX' opt_concurrently opt_index_name 'ON' table_name opt_index_access_method '(' index_params ')' opt_hash_sharded opt_storing opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
- | 'CREATE' opt_unique 'INDEX' opt_concurrently 'IF' 'NOT' 'EXISTS' index_name 'ON' table_name opt_index_access_method '(' index_params ')' opt_hash_sharded opt_storing opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
- | 'CREATE' opt_unique 'INVERTED' 'INDEX' opt_concurrently opt_index_name 'ON' table_name '(' index_params ')' opt_storing opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
- | 'CREATE' opt_unique 'INVERTED' 'INDEX' opt_concurrently 'IF' 'NOT' 'EXISTS' index_name 'ON' table_name '(' index_params ')' opt_storing opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+ 'CREATE' opt_unique 'INDEX' opt_concurrently opt_index_name 'ON' table_name opt_index_access_method '(' index_params ')' opt_hash_sharded opt_storing opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+ | 'CREATE' opt_unique 'INDEX' opt_concurrently 'IF' 'NOT' 'EXISTS' index_name 'ON' table_name opt_index_access_method '(' index_params ')' opt_hash_sharded opt_storing opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+ | 'CREATE' opt_unique 'INVERTED' 'INDEX' opt_concurrently opt_index_name 'ON' table_name '(' index_params ')' opt_storing opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+ | 'CREATE' opt_unique 'INVERTED' 'INDEX' opt_concurrently 'IF' 'NOT' 'EXISTS' index_name 'ON' table_name '(' index_params ')' opt_storing opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
create_schema_stmt ::=
'CREATE' 'SCHEMA' qualifiable_schema_name
@@ -1414,8 +1412,8 @@ create_schema_stmt ::=
| 'CREATE' 'SCHEMA' 'IF' 'NOT' 'EXISTS' opt_schema_name 'AUTHORIZATION' role_spec
create_table_stmt ::=
- 'CREATE' opt_persistence_temp_table 'TABLE' table_name '(' opt_table_elem_list ')' opt_interleave opt_partition_by_table opt_table_with opt_create_table_on_commit opt_locality
- | 'CREATE' opt_persistence_temp_table 'TABLE' 'IF' 'NOT' 'EXISTS' table_name '(' opt_table_elem_list ')' opt_interleave opt_partition_by_table opt_table_with opt_create_table_on_commit opt_locality
+ 'CREATE' opt_persistence_temp_table 'TABLE' table_name '(' opt_table_elem_list ')' opt_partition_by_table opt_table_with opt_create_table_on_commit opt_locality
+ | 'CREATE' opt_persistence_temp_table 'TABLE' 'IF' 'NOT' 'EXISTS' table_name '(' opt_table_elem_list ')' opt_partition_by_table opt_table_with opt_create_table_on_commit opt_locality
create_table_as_stmt ::=
'CREATE' opt_persistence_temp_table 'TABLE' table_name create_as_opt_col_list opt_table_with 'AS' select_stmt opt_create_table_on_commit
@@ -1863,7 +1861,6 @@ backup_options ::=
| 'REVISION_HISTORY'
| 'DETACHED'
| 'KMS' '=' string_or_placeholder_opt_list
- | 'INCLUDE_DEPRECATED_INTERLEAVES'
c_expr ::=
d_expr
@@ -1958,10 +1955,6 @@ opt_storing ::=
storing '(' name_list ')'
|
-opt_interleave ::=
- 'INTERLEAVE' 'IN' 'PARENT' table_name '(' name_list ')'
- |
-
opt_partition_by_index ::=
partition_by
|
@@ -2642,7 +2635,7 @@ alter_table_cmd ::=
| 'DROP' opt_column column_name opt_drop_behavior
| 'ALTER' opt_column column_name opt_set_data 'TYPE' typename opt_collate opt_alter_column_using
| 'ADD' table_constraint opt_validate_behavior
- | 'ALTER' 'PRIMARY' 'KEY' 'USING' 'COLUMNS' '(' index_params ')' opt_hash_sharded opt_interleave
+ | 'ALTER' 'PRIMARY' 'KEY' 'USING' 'COLUMNS' '(' index_params ')' opt_hash_sharded
| 'VALIDATE' 'CONSTRAINT' constraint_name
| 'DROP' 'CONSTRAINT' 'IF' 'EXISTS' constraint_name opt_drop_behavior
| 'DROP' 'CONSTRAINT' constraint_name opt_drop_behavior
@@ -3023,8 +3016,8 @@ range_partitions ::=
( range_partition ) ( ( ',' range_partition ) )*
index_def ::=
- 'INDEX' opt_index_name '(' index_params ')' opt_hash_sharded opt_storing opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
- | 'UNIQUE' 'INDEX' opt_index_name '(' index_params ')' opt_hash_sharded opt_storing opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+ 'INDEX' opt_index_name '(' index_params ')' opt_hash_sharded opt_storing opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+ | 'UNIQUE' 'INDEX' opt_index_name '(' index_params ')' opt_hash_sharded opt_storing opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
| 'INVERTED' 'INDEX' opt_name '(' index_params ')' opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
like_table_option_list ::=
@@ -3114,8 +3107,8 @@ col_qual_list ::=
constraint_elem ::=
'CHECK' '(' a_expr ')'
- | 'UNIQUE' '(' index_params ')' opt_storing opt_interleave opt_partition_by_index opt_where_clause
- | 'PRIMARY' 'KEY' '(' index_params ')' opt_hash_sharded opt_interleave
+ | 'UNIQUE' '(' index_params ')' opt_storing opt_partition_by_index opt_where_clause
+ | 'PRIMARY' 'KEY' '(' index_params ')' opt_hash_sharded
| 'FOREIGN' 'KEY' '(' name_list ')' 'REFERENCES' table_name opt_column_list key_match reference_actions
func_name ::=
diff --git a/docs/generated/sql/bnf/table_constraint.bnf b/docs/generated/sql/bnf/table_constraint.bnf
index 2b8830c5bc7f..af6f6268d5c5 100644
--- a/docs/generated/sql/bnf/table_constraint.bnf
+++ b/docs/generated/sql/bnf/table_constraint.bnf
@@ -1,17 +1,17 @@
table_constraint ::=
'CONSTRAINT' constraint_name 'CHECK' '(' a_expr ')'
- | 'CONSTRAINT' constraint_name 'UNIQUE' '(' index_params ')' 'COVERING' '(' name_list ')' opt_interleave opt_partition_by_index opt_where_clause
- | 'CONSTRAINT' constraint_name 'UNIQUE' '(' index_params ')' 'STORING' '(' name_list ')' opt_interleave opt_partition_by_index opt_where_clause
- | 'CONSTRAINT' constraint_name 'UNIQUE' '(' index_params ')' 'INCLUDE' '(' name_list ')' opt_interleave opt_partition_by_index opt_where_clause
- | 'CONSTRAINT' constraint_name 'UNIQUE' '(' index_params ')' opt_interleave opt_partition_by_index opt_where_clause
- | 'CONSTRAINT' constraint_name 'PRIMARY' 'KEY' '(' index_params ')' 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets opt_interleave
- | 'CONSTRAINT' constraint_name 'PRIMARY' 'KEY' '(' index_params ')' opt_interleave
+ | 'CONSTRAINT' constraint_name 'UNIQUE' '(' index_params ')' 'COVERING' '(' name_list ')' opt_partition_by_index opt_where_clause
+ | 'CONSTRAINT' constraint_name 'UNIQUE' '(' index_params ')' 'STORING' '(' name_list ')' opt_partition_by_index opt_where_clause
+ | 'CONSTRAINT' constraint_name 'UNIQUE' '(' index_params ')' 'INCLUDE' '(' name_list ')' opt_partition_by_index opt_where_clause
+ | 'CONSTRAINT' constraint_name 'UNIQUE' '(' index_params ')' opt_partition_by_index opt_where_clause
+ | 'CONSTRAINT' constraint_name 'PRIMARY' 'KEY' '(' index_params ')' 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets
+ | 'CONSTRAINT' constraint_name 'PRIMARY' 'KEY' '(' index_params ')'
| 'CONSTRAINT' constraint_name 'FOREIGN' 'KEY' '(' name_list ')' 'REFERENCES' table_name opt_column_list key_match reference_actions
| 'CHECK' '(' a_expr ')'
- | 'UNIQUE' '(' index_params ')' 'COVERING' '(' name_list ')' opt_interleave opt_partition_by_index opt_where_clause
- | 'UNIQUE' '(' index_params ')' 'STORING' '(' name_list ')' opt_interleave opt_partition_by_index opt_where_clause
- | 'UNIQUE' '(' index_params ')' 'INCLUDE' '(' name_list ')' opt_interleave opt_partition_by_index opt_where_clause
- | 'UNIQUE' '(' index_params ')' opt_interleave opt_partition_by_index opt_where_clause
- | 'PRIMARY' 'KEY' '(' index_params ')' 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets opt_interleave
- | 'PRIMARY' 'KEY' '(' index_params ')' opt_interleave
+ | 'UNIQUE' '(' index_params ')' 'COVERING' '(' name_list ')' opt_partition_by_index opt_where_clause
+ | 'UNIQUE' '(' index_params ')' 'STORING' '(' name_list ')' opt_partition_by_index opt_where_clause
+ | 'UNIQUE' '(' index_params ')' 'INCLUDE' '(' name_list ')' opt_partition_by_index opt_where_clause
+ | 'UNIQUE' '(' index_params ')' opt_partition_by_index opt_where_clause
+ | 'PRIMARY' 'KEY' '(' index_params ')' 'USING' 'HASH' 'WITH' 'BUCKET_COUNT' '=' n_buckets
+ | 'PRIMARY' 'KEY' '(' index_params ')'
| 'FOREIGN' 'KEY' '(' name_list ')' 'REFERENCES' table_name opt_column_list key_match reference_actions
diff --git a/docs/tech-notes/encoding.md b/docs/tech-notes/encoding.md
index e2e194bf616e..59196972d062 100644
--- a/docs/tech-notes/encoding.md
+++ b/docs/tech-notes/encoding.md
@@ -544,78 +544,6 @@ Index ID 2 is the secondary index `i2`.
^------------------------------------------------------------ ^-^---------
Indexed column: Collation key for 'Ted' BYTES 'Ted'
-Interleaving
-------------
-
-By default, indexes (in CRDB terminology, so both primary and secondary)
-occupy disjoint KV key spans. Users can request that an index be
-interleaved with another index, which improves the efficiency of joining
-them.
-
-One index, the parent, must have a primary key that, ignoring column
-names, is a prefix (not necessarily proper) of the other index, the
-child. The parent, which currently must be a primary index, has its
-usual encoding. To encode a KV key in the child, encode it as if it were
-in the parent but with an interleaving sentinel
-(`EncodeNotNullDescending` in [pkg/util/encoding/encoding.go]) where the
-column family ID would be. Append the non-interleaved child encoding but
-without the parent columns. The sentinel informs the decoder that the
-row does not belong to the parent table.
-
-Note that the parent may itself be interleaved. In general, the
-interleaving relationships constitute an [arborescence].
-
-Example schema and data:
-
- CREATE TABLE owners (
- owner_id INT PRIMARY KEY,
- owner STRING
- );
-
- CREATE TABLE accounts (
- owner_id INT,
- account_id INT,
- balance DECIMAL,
- PRIMARY KEY (owner_id, account_id)
- ) INTERLEAVE IN PARENT owners (owner_id);
-
- INSERT INTO owners VALUES (19, 'Alice');
- INSERT INTO accounts VALUES (19, 83, 10000.50);
-
-Example dump:
-
- /Table/51/1/19/0/1489433137.133889094,0 : 0xDBCE04550A2605416C696365
- ^- ^ ^- ^ ^-------^-^^^-----------
- | | | | | | |||
- Table ID (owners) Checksum| |||
- | | | | |||
- Index ID Value type (TUPLE)
- | | |||
- Primary key (owner_id = 19) Column ID difference
- | ||
- Column family ID Datum encoding type (Bytes)
- |
- Datum encoding ('Alice')
-
- /Table/51/1/19/#/52/1/83/0/1489433137.137447008,0 : 0x691956790A3505348D0F4272
- ^- ^ ^- ^ ^- ^ ^- ^ ^-------^-^^^-----------
- | | | | | | | | | | |||
- Table ID (owners) | Checksum| |||
- | | | | | | | | |||
- Index ID | | | Value type (TUPLE)
- | | | | | | |||
- Primary key (owner_id = 19) Column ID difference
- | | | | | ||
- Interleaving sentinel Datum encoding type (Decimal)
- | | | | |
- Table ID (accounts) Datum encoding (10000.50)
- | | |
- Index ID
- | |
- Primary key (account_id = 83)
- |
- Column family ID
-
[pkg/util/encoding/encoding.go]: https://github.com/cockroachdb/cockroach/blob/master/pkg/util/encoding/encoding.go
[SQL in CockroachDB: Mapping Table Data to Key-Value Storage]: https://www.cockroachlabs.com/blog/sql-in-cockroachdb-mapping-table-data-to-key-value-storage/
[Implementing Column Families in CockroachDB]: https://www.cockroachlabs.com/blog/sql-cockroachdb-column-families/
@@ -631,4 +559,3 @@ Example dump:
[pkg/roachpb/data.proto]: https://github.com/cockroachdb/cockroach/blob/master/pkg/roachpb/data.proto
[Unicode Collation Algorithm]: http://unicode.org/reports/tr10/
[an efficient partial inverse]: http://stackoverflow.com/q/23609457/2144669
- [arborescence]: https://en.wikipedia.org/wiki/Arborescence_(graph_theory)
diff --git a/pkg/bench/bench_test.go b/pkg/bench/bench_test.go
index 4b4c5c68911c..20f3a315b596 100644
--- a/pkg/bench/bench_test.go
+++ b/pkg/bench/bench_test.go
@@ -386,8 +386,6 @@ func BenchmarkSQL(b *testing.B) {
runBenchmarkInsertDistinct,
runBenchmarkInsertFK,
runBenchmarkInsertSecondaryIndex,
- runBenchmarkInterleavedSelect,
- runBenchmarkInterleavedFK,
runBenchmarkTrackChoices,
runBenchmarkUpdate,
runBenchmarkUpsert,
@@ -751,88 +749,6 @@ func BenchmarkScanFilter(b *testing.B) {
})
}
-func runBenchmarkInterleavedSelect(b *testing.B, db *sqlutils.SQLRunner, count int) {
- defer func() {
- db.Exec(b, `DROP TABLE IF EXISTS bench.interleaved_select2`)
- db.Exec(b, `DROP TABLE IF EXISTS bench.interleaved_select1`)
- }()
-
- db.Exec(b, `CREATE TABLE bench.interleaved_select1 (a INT PRIMARY KEY, b INT)`)
- db.Exec(b, `CREATE TABLE bench.interleaved_select2 (c INT PRIMARY KEY, d INT) INTERLEAVE IN PARENT interleaved_select1 (c)`)
-
- const interleaveFreq = 4
-
- var buf1 bytes.Buffer
- var buf2 bytes.Buffer
- buf1.WriteString(`INSERT INTO bench.interleaved_select1 VALUES `)
- buf2.WriteString(`INSERT INTO bench.interleaved_select2 VALUES `)
- for i := 0; i < count; i++ {
- if i > 0 {
- buf1.WriteString(", ")
- }
- fmt.Fprintf(&buf1, "(%d, %d)", i, i)
- if i%interleaveFreq == 0 {
- if i > 0 {
- buf2.WriteString(", ")
- }
- fmt.Fprintf(&buf2, "(%d, %d)", i, i)
- }
- }
- db.Exec(b, buf1.String())
- db.Exec(b, buf2.String())
-
- query := `SELECT * FROM bench.interleaved_select1 is1 INNER JOIN bench.interleaved_select2 is2 on is1.a = is2.c`
-
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- rows := db.Query(b, query)
- n := 0
- for rows.Next() {
- n++
- }
- rows.Close()
- if err := rows.Err(); err != nil {
- b.Fatal(err)
- }
- expected := (count + interleaveFreq - 1) / interleaveFreq
- if n != expected {
- b.Fatalf("unexpected result count: %d (expected %d)", n, expected)
- }
- }
- b.StopTimer()
-}
-
-func runBenchmarkInterleavedFK(b *testing.B, db *sqlutils.SQLRunner, count int) {
- defer func() {
- db.Exec(b, `DROP TABLE IF EXISTS bench.parent CASCADE; DROP TABLE IF EXISTS bench.child CASCADE`)
- }()
-
- db.Exec(b, `
-CREATE TABLE bench.parent (a INT PRIMARY KEY);
-INSERT INTO bench.parent VALUES(0);
-CREATE TABLE bench.child
- (a INT REFERENCES bench.parent(a),
- b INT, PRIMARY KEY(a, b))
-INTERLEAVE IN PARENT bench.parent (a)
-`)
-
- b.ResetTimer()
- var buf bytes.Buffer
- val := 0
- for i := 0; i < b.N; i++ {
- buf.Reset()
- buf.WriteString(`INSERT INTO bench.child VALUES `)
- for j := 0; j < count; j++ {
- if j > 0 {
- buf.WriteString(", ")
- }
- fmt.Fprintf(&buf, "(0, %d)", val)
- val++
- }
- db.Exec(b, buf.String())
- }
-}
-
// runBenchmarkOrderBy benchmarks scanning a table and sorting the results.
func runBenchmarkOrderBy(
b *testing.B, db *sqlutils.SQLRunner, count int, limit int, distinct bool,
diff --git a/pkg/ccl/backupccl/BUILD.bazel b/pkg/ccl/backupccl/BUILD.bazel
index 6a1fd0ccc470..60c82cd2e0b2 100644
--- a/pkg/ccl/backupccl/BUILD.bazel
+++ b/pkg/ccl/backupccl/BUILD.bazel
@@ -40,7 +40,6 @@ go_library(
"//pkg/ccl/storageccl",
"//pkg/ccl/utilccl",
"//pkg/cloud",
- "//pkg/clusterversion",
"//pkg/featureflag",
"//pkg/gossip",
"//pkg/jobs",
diff --git a/pkg/ccl/backupccl/backup_planning.go b/pkg/ccl/backupccl/backup_planning.go
index f3b4ea9a2523..c417a51064c1 100644
--- a/pkg/ccl/backupccl/backup_planning.go
+++ b/pkg/ccl/backupccl/backup_planning.go
@@ -55,15 +55,14 @@ import (
)
const (
- backupOptRevisionHistory = "revision_history"
- backupOptIncludeInterleaves = "include_deprecated_interleaves"
- backupOptEncPassphrase = "encryption_passphrase"
- backupOptEncKMS = "kms"
- backupOptWithPrivileges = "privileges"
- backupOptAsJSON = "as_json"
- backupOptWithDebugIDs = "debug_ids"
- localityURLParam = "COCKROACH_LOCALITY"
- defaultLocalityValue = "default"
+ backupOptRevisionHistory = "revision_history"
+ backupOptEncPassphrase = "encryption_passphrase"
+ backupOptEncKMS = "kms"
+ backupOptWithPrivileges = "privileges"
+ backupOptAsJSON = "as_json"
+ backupOptWithDebugIDs = "debug_ids"
+ localityURLParam = "COCKROACH_LOCALITY"
+ defaultLocalityValue = "default"
)
type encryptionMode int
@@ -777,16 +776,6 @@ func backupPlanHook(
return errors.AssertionFailedf("unexpected descriptor coverage %v", backupStmt.Coverage())
}
- if !backupStmt.Options.IncludeDeprecatedInterleaves {
- for _, desc := range targetDescs {
- if table, ok := desc.(catalog.TableDescriptor); ok {
- if table.IsInterleaved() {
- return errors.Errorf("interleaved tables are deprecated and backups containing interleaved tables will not be able to be RESTORE'd by future versions -- use option %q to backup interleaved tables anyway %q", backupOptIncludeInterleaves, table.TableDesc().Name)
- }
- }
- }
- }
-
// Check BACKUP privileges.
err = checkPrivilegesForBackup(ctx, backupStmt, p, targetDescs, to)
if err != nil {
@@ -806,10 +795,6 @@ func backupPlanHook(
}
}
- if err := ensureInterleavesIncluded(tables); err != nil {
- return err
- }
-
clusterID := p.ExecCfg().ClusterID()
for i := range prevBackups {
// IDs are how we identify tables, and those are only meaningful in the
diff --git a/pkg/ccl/backupccl/backup_test.go b/pkg/ccl/backupccl/backup_test.go
index a2fd953ea329..a7a47d8ba781 100644
--- a/pkg/ccl/backupccl/backup_test.go
+++ b/pkg/ccl/backupccl/backup_test.go
@@ -6369,48 +6369,6 @@ func TestProtectedTimestampSpanSelectionDuringBackup(t *testing.T) {
actualResolvedSpans = nil
})
- t.Run("interleaved-spans", func(t *testing.T) {
- runner.Exec(t, "CREATE DATABASE test; USE test;")
- runner.Exec(t, "CREATE TABLE grandparent (a INT PRIMARY KEY, v BYTES, INDEX gpindex (v))")
- runner.Exec(t, "CREATE TABLE parent (a INT, b INT, v BYTES, "+
- "PRIMARY KEY(a, b)) INTERLEAVE IN PARENT grandparent(a)")
- runner.Exec(t, "CREATE TABLE child (a INT, b INT, c INT, v BYTES, "+
- "PRIMARY KEY(a, b, c), INDEX childindex(c)) INTERLEAVE IN PARENT parent(a, b)")
-
- runner.Exec(t, fmt.Sprintf(`BACKUP DATABASE test INTO '%s' WITH include_deprecated_interleaves`, baseBackupURI+t.Name()))
- // /Table/59/{1-2} encompasses the pk of grandparent, and the interleaved
- // tables parent and child.
- // /Table/59/2 - /Table/59/3 is for the gpindex
- // /Table/61/{2-3} is for the childindex
- grandparentID := getTableID(db, "test", "grandparent")
- childID := getTableID(db, "test", "child")
- require.Equal(t, []string{fmt.Sprintf("/Table/%d/{1-3}", grandparentID),
- fmt.Sprintf("/Table/%d/{2-3}", childID)}, actualResolvedSpans)
- runner.Exec(t, "DROP DATABASE test;")
- actualResolvedSpans = nil
- })
-
- // This is a regression test for a bug that was fixed in
- // https://github.com/cockroachdb/cockroach/pull/72270 where two (or more)
- // public indexes followed by an interleaved index would result in index keys
- // being missed during backup.
- // Prior to the fix in https://github.com/cockroachdb/cockroach/pull/72270,
- // the resolved spans would be `/Table/63/{1-3}` thereby missing the span for
- // idx2.
- // With the change we now backup `/Table/63/{1-4}` to include pkIndex, idx1,
- // idx2 and idx3 (since it is interleaved it produces the span
- // `/Table/63/{1-2}`).
- t.Run("public-and-interleaved-indexes", func(t *testing.T) {
- runner.Exec(t, "CREATE DATABASE test; USE test;")
- runner.Exec(t, "CREATE TABLE foo (a INT PRIMARY KEY, b INT, v BYTES, INDEX idx1 (v), INDEX idx2(b))")
- runner.Exec(t, "CREATE INDEX idx3 ON foo (a, b) INTERLEAVE IN PARENT foo (a)")
- runner.Exec(t, fmt.Sprintf(`BACKUP DATABASE test INTO '%s' WITH include_deprecated_interleaves`, baseBackupURI+t.Name()))
- tableID := getTableID(db, "test", "foo")
- require.Equal(t, []string{fmt.Sprintf("/Table/%d/{1-4}", tableID)}, actualResolvedSpans)
- runner.Exec(t, "DROP DATABASE test;")
- actualResolvedSpans = nil
- })
-
t.Run("revs-span-merge", func(t *testing.T) {
runner.Exec(t, "CREATE DATABASE test; USE test;")
runner.Exec(t, "CREATE TABLE foo (k INT PRIMARY KEY, v BYTES, name STRING, "+
diff --git a/pkg/ccl/backupccl/backupresolver/targets.go b/pkg/ccl/backupccl/backupresolver/targets.go
index cba46fb5bd51..accfcbb11fca 100644
--- a/pkg/ccl/backupccl/backupresolver/targets.go
+++ b/pkg/ccl/backupccl/backupresolver/targets.go
@@ -632,8 +632,11 @@ func ResolveTargetsToDescriptors(
return nil, nil, err
}
- // Ensure interleaved tables appear after their parent. Since parents must be
- // created before their children, simply sorting by ID accomplishes this.
+ // This sorting was originally required to support interleaves.
+ // Now that these have been removed, sorting is not strictly-speaking
+ // necessary but has been preserved to maintain the output of SHOW BACKUPS
+ // that certain tests rely on.
sort.Slice(matched.Descs, func(i, j int) bool { return matched.Descs[i].GetID() < matched.Descs[j].GetID() })
+
return matched.Descs, matched.ExpandedDB, nil
}
diff --git a/pkg/ccl/backupccl/create_scheduled_backup.go b/pkg/ccl/backupccl/create_scheduled_backup.go
index 45097746d176..0cf8d8f0200c 100644
--- a/pkg/ccl/backupccl/create_scheduled_backup.go
+++ b/pkg/ccl/backupccl/create_scheduled_backup.go
@@ -336,9 +336,8 @@ func doCreateBackupSchedules(
// Prepare backup statement (full).
backupNode := &tree.Backup{
Options: tree.BackupOptions{
- CaptureRevisionHistory: eval.BackupOptions.CaptureRevisionHistory,
- Detached: true,
- IncludeDeprecatedInterleaves: eval.BackupOptions.IncludeDeprecatedInterleaves,
+ CaptureRevisionHistory: eval.BackupOptions.CaptureRevisionHistory,
+ Detached: true,
},
Nested: true,
AppendToLatest: false,
diff --git a/pkg/ccl/backupccl/create_scheduled_backup_test.go b/pkg/ccl/backupccl/create_scheduled_backup_test.go
index 06faf6193412..e6ec32df36b0 100644
--- a/pkg/ccl/backupccl/create_scheduled_backup_test.go
+++ b/pkg/ccl/backupccl/create_scheduled_backup_test.go
@@ -407,19 +407,6 @@ func TestSerializesScheduledBackupExecutionArgs(t *testing.T) {
},
},
},
- {
- name: "full-cluster-with-interleaved-table",
- query: "CREATE SCHEDULE FOR BACKUP INTO 'nodelocal://0/backup?AWS_SECRET_ACCESS_KEY=neverappears' WITH INCLUDE_DEPRECATED_INTERLEAVES RECURRING '@hourly'",
- user: freeUser,
- expectedSchedules: []expectedSchedule{
- {
- nameRe: "BACKUP .+",
- backupStmt: "BACKUP INTO 'nodelocal://0/backup?AWS_SECRET_ACCESS_KEY=neverappears' WITH detached, include_deprecated_interleaves",
- shownStmt: "BACKUP INTO 'nodelocal://0/backup?AWS_SECRET_ACCESS_KEY=redacted' WITH detached, include_deprecated_interleaves",
- period: time.Hour,
- },
- },
- },
{
name: "full-cluster-always",
query: "CREATE SCHEDULE FOR BACKUP INTO 'nodelocal://0/backup' WITH revision_history RECURRING '@hourly' FULL BACKUP ALWAYS",
diff --git a/pkg/ccl/backupccl/key_rewriter.go b/pkg/ccl/backupccl/key_rewriter.go
index 5f583051f41c..1be5256fb070 100644
--- a/pkg/ccl/backupccl/key_rewriter.go
+++ b/pkg/ccl/backupccl/key_rewriter.go
@@ -18,7 +18,6 @@ import (
"github.com/cockroachdb/cockroach/pkg/sql/catalog/descpb"
"github.com/cockroachdb/cockroach/pkg/sql/catalog/tabledesc"
"github.com/cockroachdb/cockroach/pkg/sql/execinfrapb"
- "github.com/cockroachdb/cockroach/pkg/util/encoding"
"github.com/cockroachdb/cockroach/pkg/util/protoutil"
"github.com/cockroachdb/errors"
)
@@ -157,22 +156,8 @@ func MakeKeyRewriterPrefixIgnoringInterleaved(tableID descpb.ID, indexID descpb.
}
// RewriteKey modifies key (possibly in place), changing all table IDs to their
-// new value, including any interleaved table children and prefix ends. This
-// function works by inspecting the key for table and index IDs, then uses the
-// corresponding table and index descriptors to determine if interleaved data is
-// present and if it is, to find the next prefix of an interleaved child, then
-// calls itself recursively until all interleaved children have been rekeyed. If
-// it encounters a table ID for which it does not have a configured rewrite, it
-// returns the prefix of the key that was rewritten key. The returned boolean
-// is true if and only if all of the table IDs found in the key were rewritten.
-// If isFromSpan is true, failures in value decoding are assumed to be due to
-// valid span manipulations, like PrefixEnd or Next having altered the trailing
-// byte(s) to corrupt the value encoding -- in such a case we will not be able
-// to decode the value (to determine how much further to scan for table IDs) but
-// we can assume that since these manipulations are only done to the trailing
-// byte that we're likely at the end anyway and do not need to search for any
-// further table IDs to replace.
-func (kr *KeyRewriter) RewriteKey(key []byte, isFromSpan bool) ([]byte, bool, error) {
+// new value.
+func (kr *KeyRewriter) RewriteKey(key []byte) ([]byte, bool, error) {
if kr.codec.ForSystemTenant() && bytes.HasPrefix(key, keys.TenantPrefix) {
// If we're rewriting from the system tenant, we don't rewrite tenant keys
// at all since we assume that we're restoring an entire tenant.
@@ -184,7 +169,7 @@ func (kr *KeyRewriter) RewriteKey(key []byte, isFromSpan bool) ([]byte, bool, er
return nil, false, err
}
- rekeyed, ok, err := kr.rewriteTableKey(noTenantPrefix, isFromSpan)
+ rekeyed, ok, err := kr.rewriteTableKey(noTenantPrefix)
if err != nil {
return nil, false, err
}
@@ -203,11 +188,11 @@ func (kr *KeyRewriter) RewriteKey(key []byte, isFromSpan bool) ([]byte, bool, er
return rekeyed, ok, err
}
-// rewriteTableKey recursively (in the case of interleaved tables) rewrites the
-// table IDs in the key. It assumes that any tenant ID has been stripped from
-// the key so it operates with the system codec. It is the responsibility of the
-// caller to either remap, or re-prepend any required tenant prefix.
-func (kr *KeyRewriter) rewriteTableKey(key []byte, isFromSpan bool) ([]byte, bool, error) {
+// rewriteTableKey rewrites the table IDs in the key.
+// It assumes that any tenant ID has been stripped from the key so it operates
+// with the system codec. It is the responsibility of the caller to either
+// remap, or re-prepend any required tenant prefix.
+func (kr *KeyRewriter) rewriteTableKey(key []byte) ([]byte, bool, error) {
// Fetch the original table ID for descriptor lookup. Ignore errors because
// they will be caught later on if tableID isn't in descs or kr doesn't
// perform a rewrite.
@@ -221,89 +206,5 @@ func (kr *KeyRewriter) rewriteTableKey(key []byte, isFromSpan bool) ([]byte, boo
if desc == nil {
return nil, false, errors.Errorf("missing descriptor for table %d", tableID)
}
- // Check if this key may have interleaved children.
- k, _, indexID, err := keys.SystemSQLCodec.DecodeIndexPrefix(key)
- if err != nil {
- return nil, false, err
- }
- if len(k) == 0 {
- // If there isn't any more data, we are at some split boundary.
- return key, true, nil
- }
- idx, err := desc.FindIndexWithID(descpb.IndexID(indexID))
- if err != nil {
- return nil, false, err
- }
- if idx.NumInterleavedBy() == 0 {
- // Not interleaved.
- return key, true, nil
- }
- // We do not support interleaved secondary indexes.
- if !idx.Primary() {
- return nil, false, errors.New("restoring interleaved secondary indexes not supported")
- }
- colIDs, _ := catalog.FullIndexColumnIDs(idx)
- var skipCols int
- for i := 0; i < idx.NumInterleaveAncestors(); i++ {
- skipCols += int(idx.GetInterleaveAncestor(i).SharedPrefixLen)
- }
- for i := 0; i < len(colIDs)-skipCols; i++ {
- n, err := encoding.PeekLength(k)
- if err != nil {
- // PeekLength, and key decoding in general, can fail when reading the last
- // value from a key that is coming from a span. Keys in spans are often
- // altered e.g. by calling Next() or PrefixEnd() to ensure a given span is
- // inclusive or for other reasons, but the manipulations sometimes change
- // the encoded bytes, meaning they can no longer successfully decode as
- // back to the original values. This is OK when span boundaries mostly are
- // only required to be even divisions of keyspace, but when we try to go
- // back to interpreting them as keys, it can fall apart. Partitioning a
- // table (and applying zone configs) eagerly creates splits at the defined
- // partition boundaries, using PrefixEnd for their ends, resulting in such
- // spans.
- //
- // Fortunately, the only common span manipulations are to the trailing
- // byte of a key (e.g. incrementing or appending a null) so for our needs
- // here, if we fail to decode because of one of those manipulations, we
- // can assume that we are at the end of the key as far as fields where a
- // table ID which needs to be replaced can appear and consider the rewrite
- // of this key as being compelted successfully.
- //
- // Finally unlike key rewrites of actual row-data, span rewrites do not
- // need to be perfect: spans are only rewritten for use in pre-splitting
- // and work distribution, so even if it turned out that this assumption
- // was incorrect, it could cause a performance degradation but does not
- // pose a correctness risk.
- if isFromSpan {
- return key, true, nil
- }
- return nil, false, err
- }
- k = k[n:]
- // Check if we ran out of key before getting to an interleave child?
- if len(k) == 0 {
- return key, true, nil
- }
- }
- // We might have an interleaved key.
- k, ok = encoding.DecodeIfInterleavedSentinel(k)
- if !ok {
- return key, true, nil
- }
- if len(k) == 0 {
- // We have seen some span keys end in an interleaved sentinel.
- // Check if we ran out of key before getting to an interleave child?
- return key, true, nil
- }
- prefix := key[:len(key)-len(k)]
- k, ok, err = kr.rewriteTableKey(k, isFromSpan)
- if err != nil {
- return nil, false, err
- }
- if !ok {
- // The interleaved child was not rewritten, skip this row.
- return prefix, false, nil
- }
- key = append(prefix, k...)
return key, true, nil
}
diff --git a/pkg/ccl/backupccl/key_rewriter_test.go b/pkg/ccl/backupccl/key_rewriter_test.go
index 0e01990e62a8..379deddf81fe 100644
--- a/pkg/ccl/backupccl/key_rewriter_test.go
+++ b/pkg/ccl/backupccl/key_rewriter_test.go
@@ -74,8 +74,6 @@ func TestKeyRewriter(t *testing.T) {
},
}
- const notSpan = false
-
kr, err := makeKeyRewriterFromRekeys(keys.SystemSQLCodec, rekeys)
if err != nil {
t.Fatal(err)
@@ -84,7 +82,7 @@ func TestKeyRewriter(t *testing.T) {
t.Run("normal", func(t *testing.T) {
key := rowenc.MakeIndexKeyPrefix(keys.SystemSQLCodec,
systemschema.NamespaceTable, desc.GetPrimaryIndexID())
- newKey, ok, err := kr.RewriteKey(key, notSpan)
+ newKey, ok, err := kr.RewriteKey(key)
if err != nil {
t.Fatal(err)
}
@@ -103,7 +101,7 @@ func TestKeyRewriter(t *testing.T) {
t.Run("prefix end", func(t *testing.T) {
key := roachpb.Key(rowenc.MakeIndexKeyPrefix(keys.SystemSQLCodec,
systemschema.NamespaceTable, desc.GetPrimaryIndexID())).PrefixEnd()
- newKey, ok, err := kr.RewriteKey(key, notSpan)
+ newKey, ok, err := kr.RewriteKey(key)
if err != nil {
t.Fatal(err)
}
@@ -132,7 +130,7 @@ func TestKeyRewriter(t *testing.T) {
}
key := rowenc.MakeIndexKeyPrefix(keys.SystemSQLCodec, systemschema.NamespaceTable, desc.GetPrimaryIndexID())
- newKey, ok, err := newKr.RewriteKey(key, notSpan)
+ newKey, ok, err := newKr.RewriteKey(key)
if err != nil {
t.Fatal(err)
}
@@ -159,7 +157,7 @@ func TestKeyRewriter(t *testing.T) {
require.NoError(t, err)
key := rowenc.MakeIndexKeyPrefix(srcCodec, systemschema.NamespaceTable, desc.GetPrimaryIndexID())
- newKey, ok, err := newKr.RewriteKey(key, notSpan)
+ newKey, ok, err := newKr.RewriteKey(key)
require.NoError(t, err)
if !ok {
t.Fatalf("expected rewrite")
diff --git a/pkg/ccl/backupccl/restore_data_processor.go b/pkg/ccl/backupccl/restore_data_processor.go
index c87ca38ebaaf..e3f9b9d4ce7b 100644
--- a/pkg/ccl/backupccl/restore_data_processor.go
+++ b/pkg/ccl/backupccl/restore_data_processor.go
@@ -414,7 +414,7 @@ func (rd *restoreDataProcessor) processRestoreSpanEntry(
value := roachpb.Value{RawBytes: valueScratch}
iter.NextKey()
- key.Key, ok, err = rd.kr.RewriteKey(key.Key, false /* isFromSpan */)
+ key.Key, ok, err = rd.kr.RewriteKey(key.Key)
if err != nil {
return summary, err
}
diff --git a/pkg/ccl/backupccl/restore_job.go b/pkg/ccl/backupccl/restore_job.go
index 9dd00aa5db41..76c197f89407 100644
--- a/pkg/ccl/backupccl/restore_job.go
+++ b/pkg/ccl/backupccl/restore_job.go
@@ -490,7 +490,7 @@ func rewriteBackupSpanKey(
return key, nil
}
- newKey, rewritten, err := kr.RewriteKey(append([]byte(nil), key...), true /* isFromSpan */)
+ newKey, rewritten, err := kr.RewriteKey(append([]byte(nil), key...))
if err != nil {
return nil, errors.NewAssertionErrorWithWrappedErrf(err,
"could not rewrite span start key: %s", key)
diff --git a/pkg/ccl/backupccl/restore_planning.go b/pkg/ccl/backupccl/restore_planning.go
index a71c99fdce9e..8148a9d671c5 100644
--- a/pkg/ccl/backupccl/restore_planning.go
+++ b/pkg/ccl/backupccl/restore_planning.go
@@ -22,7 +22,6 @@ import (
"github.com/cockroachdb/cockroach/pkg/ccl/storageccl"
"github.com/cockroachdb/cockroach/pkg/ccl/utilccl"
"github.com/cockroachdb/cockroach/pkg/cloud"
- "github.com/cockroachdb/cockroach/pkg/clusterversion"
"github.com/cockroachdb/cockroach/pkg/featureflag"
"github.com/cockroachdb/cockroach/pkg/jobs"
"github.com/cockroachdb/cockroach/pkg/jobs/jobspb"
@@ -1208,36 +1207,6 @@ func RewriteTableDescs(
table.ViewQuery = viewQuery
}
- if err := catalog.ForEachNonDropIndex(table, func(indexI catalog.Index) error {
- index := indexI.IndexDesc()
- // Verify that for any interleaved index being restored, the interleave
- // parent is also being restored. Otherwise, the interleave entries in the
- // restored IndexDescriptors won't have anything to point to.
- // TODO(dan): It seems like this restriction could be lifted by restoring
- // stub TableDescriptors for the missing interleave parents.
- for j, a := range index.Interleave.Ancestors {
- ancestorRewrite, ok := descriptorRewrites[a.TableID]
- if !ok {
- return errors.Errorf(
- "cannot restore table %q without interleave parent %d", table.Name, a.TableID,
- )
- }
- index.Interleave.Ancestors[j].TableID = ancestorRewrite.ID
- }
- for j, c := range index.InterleavedBy {
- childRewrite, ok := descriptorRewrites[c.Table]
- if !ok {
- return errors.Errorf(
- "cannot restore table %q without interleave child table %d", table.Name, c.Table,
- )
- }
- index.InterleavedBy[j].Table = childRewrite.ID
- }
- return nil
- }); err != nil {
- return err
- }
-
// TODO(lucy): deal with outbound foreign key mutations here as well.
origFKs := table.OutboundFKs
table.OutboundFKs = nil
@@ -1865,8 +1834,7 @@ func doRestorePlan(
continue
}
index := table.GetPrimaryIndex()
- if index.IsInterleaved() &&
- currentVersion.IsActive(clusterversion.PreventNewInterleavedTables) {
+ if len(index.Interleave.Ancestors) > 0 || len(index.InterleavedBy) > 0 {
return errors.Errorf("restoring interleaved tables is no longer allowed. table %s was found to be interleaved", table.Name)
}
if err := catalog.ForEachNonDropIndex(
diff --git a/pkg/ccl/backupccl/targets.go b/pkg/ccl/backupccl/targets.go
index 440ea0a121e4..96708de37418 100644
--- a/pkg/ccl/backupccl/targets.go
+++ b/pkg/ccl/backupccl/targets.go
@@ -228,40 +228,6 @@ func getAllDescChanges(
return res, nil
}
-func ensureInterleavesIncluded(tables []catalog.TableDescriptor) error {
- inBackup := make(map[descpb.ID]bool, len(tables))
- for _, t := range tables {
- inBackup[t.GetID()] = true
- }
-
- for _, table := range tables {
- if err := catalog.ForEachIndex(table, catalog.IndexOpts{
- AddMutations: true,
- }, func(index catalog.Index) error {
- for i := 0; i < index.NumInterleaveAncestors(); i++ {
- a := index.GetInterleaveAncestor(i)
- if !inBackup[a.TableID] {
- return errors.Errorf(
- "cannot backup table %q without interleave parent (ID %d)", table.GetName(), a.TableID,
- )
- }
- }
- for i := 0; i < index.NumInterleavedBy(); i++ {
- c := index.GetInterleavedBy(i)
- if !inBackup[c.Table] {
- return errors.Errorf(
- "cannot backup table %q without interleave child table (ID %d)", table.GetName(), c.Table,
- )
- }
- }
- return nil
- }); err != nil {
- return err
- }
- }
- return nil
-}
-
func lookupDatabaseID(
ctx context.Context, txn *kv.Txn, codec keys.SQLCodec, name string,
) (descpb.ID, error) {
diff --git a/pkg/ccl/backupccl/testdata/restore_old_versions/create_interleaved.sql b/pkg/ccl/backupccl/testdata/restore_old_versions/create_interleaved.sql
deleted file mode 100644
index d9c0c45e8c34..000000000000
--- a/pkg/ccl/backupccl/testdata/restore_old_versions/create_interleaved.sql
+++ /dev/null
@@ -1,18 +0,0 @@
--- The below SQL is used to create the data that is then exported with BACKUP.
--- This should be run on a v21.1, where an interleaved table is intentionally,
--- added into the backup
-
-SET CLUSTER SETTING sql.defaults.interleaved_tables.enabled=yes;
-
-CREATE DATABASE test;
-
-SET database = test;
-
-CREATE TABLE test.customers (id INT PRIMARY KEY, name STRING(50));
-
-CREATE TABLE test.orders (customer INT, id INT, total DECIMAL(20, 5), PRIMARY KEY (customer, id), CONSTRAINT fk_customer FOREIGN KEY (customer) REFERENCES customers) INTERLEAVE IN PARENT customers (customer);
-
-INSERT INTO CUSTOMERS values(1,'BOB');
-INSERT INTO CUSTOMERS values(2,'BILL');
-INSERT INTO ORDERS values(1, 1, 20);
-INSERT INTO ORDERS values(2, 2, 30);
diff --git a/pkg/ccl/backupccl/testdata/restore_old_versions/interleaved/0/.DS_Store b/pkg/ccl/backupccl/testdata/restore_old_versions/interleaved/0/.DS_Store
deleted file mode 100644
index 784da34c9e9a..000000000000
Binary files a/pkg/ccl/backupccl/testdata/restore_old_versions/interleaved/0/.DS_Store and /dev/null differ
diff --git a/pkg/ccl/backupccl/testdata/restore_old_versions/interleaved/0/BACKUP-CHECKPOINT-684192901900697601-CHECKSUM b/pkg/ccl/backupccl/testdata/restore_old_versions/interleaved/0/BACKUP-CHECKPOINT-684192901900697601-CHECKSUM
deleted file mode 100644
index b09aebfb93ad..000000000000
--- a/pkg/ccl/backupccl/testdata/restore_old_versions/interleaved/0/BACKUP-CHECKPOINT-684192901900697601-CHECKSUM
+++ /dev/null
@@ -1,2 +0,0 @@
-]^
-ö
\ No newline at end of file
diff --git a/pkg/ccl/backupccl/testdata/restore_old_versions/interleaved/0/BACKUP-CHECKPOINT-CHECKSUM b/pkg/ccl/backupccl/testdata/restore_old_versions/interleaved/0/BACKUP-CHECKPOINT-CHECKSUM
deleted file mode 100644
index 3dc1d3712f16..000000000000
--- a/pkg/ccl/backupccl/testdata/restore_old_versions/interleaved/0/BACKUP-CHECKPOINT-CHECKSUM
+++ /dev/null
@@ -1 +0,0 @@
-.ÉL
\ No newline at end of file
diff --git a/pkg/ccl/backupccl/testdata/restore_old_versions/interleaved/0/BACKUP-STATISTICS b/pkg/ccl/backupccl/testdata/restore_old_versions/interleaved/0/BACKUP-STATISTICS
deleted file mode 100644
index e900144b66e2..000000000000
Binary files a/pkg/ccl/backupccl/testdata/restore_old_versions/interleaved/0/BACKUP-STATISTICS and /dev/null differ
diff --git a/pkg/ccl/backupccl/testdata/restore_old_versions/interleaved/0/BACKUP_MANIFEST b/pkg/ccl/backupccl/testdata/restore_old_versions/interleaved/0/BACKUP_MANIFEST
deleted file mode 100644
index e1539bf581de..000000000000
Binary files a/pkg/ccl/backupccl/testdata/restore_old_versions/interleaved/0/BACKUP_MANIFEST and /dev/null differ
diff --git a/pkg/ccl/backupccl/testdata/restore_old_versions/interleaved/0/BACKUP_MANIFEST-CHECKSUM b/pkg/ccl/backupccl/testdata/restore_old_versions/interleaved/0/BACKUP_MANIFEST-CHECKSUM
deleted file mode 100644
index 5edce59c8d62..000000000000
--- a/pkg/ccl/backupccl/testdata/restore_old_versions/interleaved/0/BACKUP_MANIFEST-CHECKSUM
+++ /dev/null
@@ -1 +0,0 @@
-kLJ²
\ No newline at end of file
diff --git a/pkg/ccl/backupccl/testdata/restore_old_versions/interleaved/0/data/684192909531021315.sst b/pkg/ccl/backupccl/testdata/restore_old_versions/interleaved/0/data/684192909531021315.sst
deleted file mode 100644
index 81a78d641da1..000000000000
Binary files a/pkg/ccl/backupccl/testdata/restore_old_versions/interleaved/0/data/684192909531021315.sst and /dev/null differ
diff --git a/pkg/ccl/importccl/csv_internal_test.go b/pkg/ccl/importccl/csv_internal_test.go
index 5040d9880e28..49d4da25a2b0 100644
--- a/pkg/ccl/importccl/csv_internal_test.go
+++ b/pkg/ccl/importccl/csv_internal_test.go
@@ -33,10 +33,6 @@ func TestMakeSimpleTableDescriptorErrors(t *testing.T) {
stmt: "create table if not exists a (i int)",
error: "unsupported IF NOT EXISTS",
},
- {
- stmt: "create table a (i int) interleave in parent b (id)",
- error: "interleaved not supported",
- },
{
stmt: "create table a as select 1",
error: "CREATE AS not supported",
diff --git a/pkg/ccl/importccl/import_planning.go b/pkg/ccl/importccl/import_planning.go
index 45cb4ddf6d20..c2a1edb1c6e8 100644
--- a/pkg/ccl/importccl/import_planning.go
+++ b/pkg/ccl/importccl/import_planning.go
@@ -788,12 +788,6 @@ func importPlanHook(
return err
}
- // IMPORT INTO does not currently support interleaved tables.
- if found.IsInterleaved() {
- // TODO(miretskiy): Handle import into when tables are interleaved.
- return pgerror.New(pgcode.FeatureNotSupported, "Cannot use IMPORT INTO with interleaved tables")
- }
-
// Validate target columns.
var intoCols []string
var isTargetCol = make(map[string]bool)
diff --git a/pkg/ccl/importccl/import_table_creation.go b/pkg/ccl/importccl/import_table_creation.go
index 395723202d0f..f5e661b5f523 100644
--- a/pkg/ccl/importccl/import_table_creation.go
+++ b/pkg/ccl/importccl/import_table_creation.go
@@ -115,9 +115,6 @@ func MakeSimpleTableDescriptor(
if create.IfNotExists {
return nil, unimplemented.NewWithIssueDetailf(42846, "import.if-no-exists", "unsupported IF NOT EXISTS")
}
- if create.Interleave != nil {
- return nil, unimplemented.NewWithIssueDetailf(42846, "import.interleave", "interleaved not supported")
- }
if create.AsSource != nil {
return nil, unimplemented.NewWithIssueDetailf(42846, "import.create-as", "CREATE AS not supported")
}
diff --git a/pkg/ccl/importccl/read_import_mysql_test.go b/pkg/ccl/importccl/read_import_mysql_test.go
index 14b9b923703a..010bfeb7b77d 100644
--- a/pkg/ccl/importccl/read_import_mysql_test.go
+++ b/pkg/ccl/importccl/read_import_mysql_test.go
@@ -231,13 +231,13 @@ func compareTables(t *testing.T, expected, got *descpb.TableDescriptor) {
expectedDesc := tabledesc.NewBuilder(expected).BuildImmutableTable()
gotDesc := tabledesc.NewBuilder(got).BuildImmutableTable()
e, err := catformat.IndexForDisplay(
- ctx, expectedDesc, tableName, expectedDesc.PublicNonPrimaryIndexes()[i], "" /* partition */, "" /* interleave */, &semaCtx,
+ ctx, expectedDesc, tableName, expectedDesc.PublicNonPrimaryIndexes()[i], "" /* partition */, &semaCtx,
)
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
g, err := catformat.IndexForDisplay(
- ctx, gotDesc, tableName, gotDesc.PublicNonPrimaryIndexes()[i], "" /* partition */, "" /* interleave */, &semaCtx,
+ ctx, gotDesc, tableName, gotDesc.PublicNonPrimaryIndexes()[i], "" /* partition */, &semaCtx,
)
if err != nil {
t.Fatalf("unexpected error: %s", err)
diff --git a/pkg/ccl/importccl/read_import_pgdump.go b/pkg/ccl/importccl/read_import_pgdump.go
index e8be4686185b..a48acc903d12 100644
--- a/pkg/ccl/importccl/read_import_pgdump.go
+++ b/pkg/ccl/importccl/read_import_pgdump.go
@@ -613,7 +613,6 @@ func readPostgresStmt(
Columns: stmt.Columns,
Storing: stmt.Storing,
Inverted: stmt.Inverted,
- Interleave: stmt.Interleave,
PartitionByIndex: stmt.PartitionByIndex,
StorageParams: stmt.StorageParams,
}
diff --git a/pkg/ccl/logictestccl/testdata/logic_test/partitioning b/pkg/ccl/logictestccl/testdata/logic_test/partitioning
index 712833d75923..5a2eddd1015e 100644
--- a/pkg/ccl/logictestccl/testdata/logic_test/partitioning
+++ b/pkg/ccl/logictestccl/testdata/logic_test/partitioning
@@ -92,25 +92,6 @@ CREATE TABLE t (a INT, b INT, c INT, PRIMARY KEY (a, b)) PARTITION BY RANGE (a)
)
)
-statement ok
-CREATE TABLE interleave_root (a INT PRIMARY KEY) PARTITION BY LIST (a) (
- PARTITION p0 VALUES IN (0)
-)
-
-statement notice NOTICE: creation of new interleaved tables or interleaved indexes is no longer supported and will be ignored. For details, see https://www.cockroachlabs.com/docs/releases/v20.2.0#deprecations
-CREATE TABLE interleave_child (a INT PRIMARY KEY) INTERLEAVE IN PARENT interleave_root (a)
-
-statement notice NOTICE: creation of new interleaved tables or interleaved indexes is no longer supported and will be ignored. For details, see https://www.cockroachlabs.com/docs/releases/v20.2.0#deprecations
-CREATE TABLE t (a INT PRIMARY KEY) INTERLEAVE IN PARENT interleave_root (a) PARTITION BY LIST (a) (
- PARTITION p0 VALUES IN (0)
-)
-
-statement ok
-DROP TABLE interleave_child
-
-statement ok
-DROP TABLE t;
-
statement error PARTITION p1: partition has 1 columns but 2 values were supplied
CREATE TABLE t (a INT, b INT, c INT, PRIMARY KEY (a, b)) PARTITION BY LIST (a) (
PARTITION p1 VALUES IN ((0, 1))
diff --git a/pkg/ccl/logictestccl/testdata/logic_test/partitioning_index b/pkg/ccl/logictestccl/testdata/logic_test/partitioning_index
index 81aaf77cf214..5a955b5554a1 100644
--- a/pkg/ccl/logictestccl/testdata/logic_test/partitioning_index
+++ b/pkg/ccl/logictestccl/testdata/logic_test/partitioning_index
@@ -213,17 +213,6 @@ CREATE TABLE public.t60019 (
)
-- Warning: Partitioned table with no zone configurations.
-# Regression test for #60699. Do not allow creation of interleaved partitioned
-# indexes.
-statement ok
-CREATE TABLE t60699_a (a INT PRIMARY KEY);
-CREATE TABLE t60699_b (b INT PRIMARY KEY, a INT REFERENCES t60699_a (a));
-
-statement error interleaved indexes cannot be partitioned
-CREATE INDEX i ON t60699_b (a) INTERLEAVE IN PARENT t60699_a (a) PARTITION BY LIST (a) (
- partition part1 VALUES IN (1)
-)
-
# Regression test for #63733. Scanning a partitioned index should produce rows
# where the first index column is NULL.
statement ok
diff --git a/pkg/ccl/logictestccl/testdata/logic_test/regional_by_row b/pkg/ccl/logictestccl/testdata/logic_test/regional_by_row
index 10e2d34ef9bb..66b800342d18 100644
--- a/pkg/ccl/logictestccl/testdata/logic_test/regional_by_row
+++ b/pkg/ccl/logictestccl/testdata/logic_test/regional_by_row
@@ -117,16 +117,6 @@ LOCALITY REGIONAL BY ROW
statement ok
CREATE TABLE parent_table (pk INT PRIMARY KEY)
-statement notice NOTICE: creation of new interleaved tables or interleaved indexes is no longer supported and will be ignored. For details, see https://www.cockroachlabs.com/docs/releases/v20.2.0#deprecations
-CREATE TABLE regional_by_row_table_int (
- pk INT NOT NULL PRIMARY KEY
-)
-INTERLEAVE IN PARENT parent_table(pk)
-LOCALITY REGIONAL BY ROW
-
-statement ok
-DROP TABLE regional_by_row_table_int
-
statement ok
CREATE TABLE regional_by_row_table_explicit_crdb_region_column (
pk int PRIMARY KEY,
@@ -348,12 +338,6 @@ CREATE INDEX bad_idx ON regional_by_row_table(a) USING HASH WITH BUCKET_COUNT =
statement error hash sharded indexes are not compatible with REGIONAL BY ROW tables
ALTER TABLE regional_by_row_table ALTER PRIMARY KEY USING COLUMNS(pk2) USING HASH WITH BUCKET_COUNT = 8
-statement notice NOTICE: creation of new interleaved tables or interleaved indexes is no longer supported and will be ignored. For details, see https://www.cockroachlabs.com/docs/releases/v20.2.0#deprecations
-CREATE INDEX bad_idx_int ON regional_by_row_table(pk) INTERLEAVE IN PARENT parent_table(pk)
-
-statement ok
-DROP INDEX bad_idx_int
-
# Try add a new unique column.
statement ok
ALTER TABLE regional_by_row_table ADD COLUMN unique_col INT8 NOT NULL UNIQUE
diff --git a/pkg/cli/testdata/dump/interleave_index b/pkg/cli/testdata/dump/interleave_index
deleted file mode 100644
index 6e0a19f39e3b..000000000000
--- a/pkg/cli/testdata/dump/interleave_index
+++ /dev/null
@@ -1,121 +0,0 @@
-# Test the interleaving of indexes within tables
-
-sql
-CREATE DATABASE d;
-CREATE TABLE d.t1 (a INT, b INT, PRIMARY KEY (a));
-SET client_min_messages = 'warning';
-CREATE INDEX b_idx ON d.t1(a, b) INTERLEAVE IN PARENT d.t1 (a);
-SET client_min_messages = 'notice';
-----
-SET
-
-dump d t1
-----
-----
-CREATE TABLE public.t1 (
- a INT8 NOT NULL,
- b INT8 NULL,
- CONSTRAINT "primary" PRIMARY KEY (a ASC),
- FAMILY "primary" (a, b)
-);
-
-CREATE INDEX b_idx ON public.t1 (a ASC, b ASC) INTERLEAVE IN PARENT public.t1 (a);
-
--- Validate foreign key constraints. These can fail if there was unvalidated data during the dump.
-----
-----
-
-sql
-CREATE DATABASE e;
-CREATE TABLE e.t2 (a INT, b INT, PRIMARY KEY (a));
-CREATE TABLE e.t3 (a INT, b INT, PRIMARY KEY (a));
-SET client_min_messages = 'warning';
-CREATE INDEX b_idx ON e.t2(a, b) INTERLEAVE IN PARENT e.t3 (a);
-SET client_min_messages = 'notice';
-INSERT INTO e.t2 VALUES (1, 2);
-INSERT INTO e.t3 VALUES (3, 4);
-----
-INSERT 1
-
-dump e
-----
-----
-CREATE TABLE public.t3 (
- a INT8 NOT NULL,
- b INT8 NULL,
- CONSTRAINT "primary" PRIMARY KEY (a ASC),
- FAMILY "primary" (a, b)
-);
-
-CREATE TABLE public.t2 (
- a INT8 NOT NULL,
- b INT8 NULL,
- CONSTRAINT "primary" PRIMARY KEY (a ASC),
- FAMILY "primary" (a, b)
-);
-
-INSERT INTO public.t3 (a, b) VALUES
- (3, 4);
-
-INSERT INTO public.t2 (a, b) VALUES
- (1, 2);
-
-CREATE INDEX b_idx ON public.t2 (a ASC, b ASC) INTERLEAVE IN PARENT public.t3 (a);
-
--- Validate foreign key constraints. These can fail if there was unvalidated data during the dump.
-----
-----
-
-sql
-CREATE DATABASE dd;
-CREATE TABLE dd.unique (a INT, b INT, PRIMARY KEY (a));
-SET client_min_messages = 'warning';
-CREATE INDEX "b_idx" ON dd.unique(a, b) INTERLEAVE IN PARENT dd.unique (a);
-SET client_min_messages = 'notice';
-----
-SET
-
-dump dd unique
-----
-----
-CREATE TABLE public."unique" (
- a INT8 NOT NULL,
- b INT8 NULL,
- CONSTRAINT "primary" PRIMARY KEY (a ASC),
- FAMILY "primary" (a, b)
-);
-
-CREATE INDEX b_idx ON public."unique" (a ASC, b ASC) INTERLEAVE IN PARENT public."unique" (a);
-
--- Validate foreign key constraints. These can fail if there was unvalidated data during the dump.
-----
-----
-
-sql
-CREATE DATABASE ee;
-CREATE TABLE ee.a (i INT, j INT, PRIMARY KEY (i, j DESC));
-SET client_min_messages = 'warning';
-CREATE TABLE ee.d (x INT, y INT, z INT, PRIMARY KEY (x, y DESC, z DESC)) INTERLEAVE IN PARENT ee.a (x, y);
-SET client_min_messages = 'notice';
-----
-SET
-
-dump ee a d
-----
-----
-CREATE TABLE public.a (
- i INT8 NOT NULL,
- j INT8 NOT NULL,
- CONSTRAINT "primary" PRIMARY KEY (i ASC, j DESC),
- FAMILY "primary" (i, j)
-);
-
-CREATE TABLE public.d (
- x INT8 NOT NULL,
- y INT8 NOT NULL,
- z INT8 NOT NULL,
- CONSTRAINT "primary" PRIMARY KEY (x ASC, y DESC, z DESC),
- FAMILY "primary" (x, y, z)
-) INTERLEAVE IN PARENT public.a (x, y);
-----
-----
diff --git a/pkg/cli/testdata/explain-bundle/bundle/env.sql b/pkg/cli/testdata/explain-bundle/bundle/env.sql
index 5d506f8e742f..6d5e2a0f845a 100644
--- a/pkg/cli/testdata/explain-bundle/bundle/env.sql
+++ b/pkg/cli/testdata/explain-bundle/bundle/env.sql
@@ -204,7 +204,6 @@
-- sql.cross_db_fks.enabled = false (if true, creating foreign key references across databases is allowed)
-- sql.cross_db_sequence_owners.enabled = false (if true, creating sequences owned by tables from other databases is allowed)
-- sql.cross_db_views.enabled = false (if true, creating views that refer to other databases is allowed)
--- sql.defaults.copy_partitioning_when_deinterleaving_table.enabled = false (default value for enable_copying_partitioning_when_deinterleaving_table session variable)
-- sql.defaults.default_int_size = 8 (the size, in bytes, of an INT type)
-- sql.defaults.disallow_full_table_scans.enabled = false (setting to true rejects queries that have planned a full table scan)
-- sql.defaults.distsql = auto (default distributed SQL execution mode [off = 0, auto = 1, on = 2])
@@ -223,7 +222,6 @@
-- sql.defaults.idle_in_transaction_session_timeout = 0s (default value for the idle_in_transaction_session_timeout; controls the duration a session is permitted to idle in a transaction before the session is terminated; if set to 0, there is no timeout)
-- sql.defaults.implicit_select_for_update.enabled = true (default value for enable_implicit_select_for_update session setting; enables FOR UPDATE locking during the row-fetch phase of mutation statements)
-- sql.defaults.insert_fast_path.enabled = true (default value for enable_insert_fast_path session setting; enables a specialized insert path)
--- sql.defaults.interleaved_tables.enabled = false (allows creation of interleaved tables or indexes)
-- sql.defaults.intervalstyle = postgres (default value for IntervalStyle session setting [postgres = 0, iso_8601 = 1, sql_standard = 2])
-- sql.defaults.intervalstyle.enabled = false (default value for enable_intervalstyle session setting)
-- sql.defaults.locality_optimized_partitioned_index_scan.enabled = true (default value for locality_optimized_partitioned_index_scan session setting; enables searching for rows in the current region before searching remote regions)
diff --git a/pkg/clusterversion/cockroach_versions.go b/pkg/clusterversion/cockroach_versions.go
index 543f40892287..46dedc598e14 100644
--- a/pkg/clusterversion/cockroach_versions.go
+++ b/pkg/clusterversion/cockroach_versions.go
@@ -213,12 +213,6 @@ const (
// AutoSpanConfigReconciliationJob adds the AutoSpanConfigReconciliationJob
// type.
AutoSpanConfigReconciliationJob
- // PreventNewInterleavedTables interleaved table creation is completely
- // blocked on this version.
- PreventNewInterleavedTables
- // EnsureNoInterleavedTables interleaved tables no longer exist in
- // this version.
- EnsureNoInterleavedTables
// DefaultPrivileges default privileges are supported in this version.
DefaultPrivileges
// ZonesTableForSecondaryTenants adds system.zones for all secondary tenants.
@@ -390,14 +384,6 @@ var versionsSingleton = keyedVersions{
Key: AutoSpanConfigReconciliationJob,
Version: roachpb.Version{Major: 21, Minor: 1, Internal: 1136},
},
- {
- Key: PreventNewInterleavedTables,
- Version: roachpb.Version{Major: 21, Minor: 1, Internal: 1138},
- },
- {
- Key: EnsureNoInterleavedTables,
- Version: roachpb.Version{Major: 21, Minor: 1, Internal: 1140},
- },
{
Key: DefaultPrivileges,
Version: roachpb.Version{Major: 21, Minor: 1, Internal: 1142},
diff --git a/pkg/clusterversion/key_string.go b/pkg/clusterversion/key_string.go
index 1d2e73449f2f..30fc96c9a39a 100644
--- a/pkg/clusterversion/key_string.go
+++ b/pkg/clusterversion/key_string.go
@@ -27,31 +27,29 @@ func _() {
_ = x[RetryJobsWithExponentialBackoff-16]
_ = x[RecordsBasedRegistry-17]
_ = x[AutoSpanConfigReconciliationJob-18]
- _ = x[PreventNewInterleavedTables-19]
- _ = x[EnsureNoInterleavedTables-20]
- _ = x[DefaultPrivileges-21]
- _ = x[ZonesTableForSecondaryTenants-22]
- _ = x[UseKeyEncodeForHashShardedIndexes-23]
- _ = x[DatabasePlacementPolicy-24]
- _ = x[GeneratedAsIdentity-25]
- _ = x[OnUpdateExpressions-26]
- _ = x[SpanConfigurationsTable-27]
- _ = x[BoundedStaleness-28]
- _ = x[DateAndIntervalStyle-29]
- _ = x[PebbleFormatVersioned-30]
- _ = x[MarkerDataKeysRegistry-31]
- _ = x[PebbleSetWithDelete-32]
- _ = x[TenantUsageSingleConsumptionColumn-33]
- _ = x[SQLStatsTables-34]
- _ = x[SQLStatsCompactionScheduledJob-35]
- _ = x[V21_2-36]
- _ = x[Start22_1-37]
- _ = x[TargetBytesAvoidExcess-38]
+ _ = x[DefaultPrivileges-19]
+ _ = x[ZonesTableForSecondaryTenants-20]
+ _ = x[UseKeyEncodeForHashShardedIndexes-21]
+ _ = x[DatabasePlacementPolicy-22]
+ _ = x[GeneratedAsIdentity-23]
+ _ = x[OnUpdateExpressions-24]
+ _ = x[SpanConfigurationsTable-25]
+ _ = x[BoundedStaleness-26]
+ _ = x[DateAndIntervalStyle-27]
+ _ = x[PebbleFormatVersioned-28]
+ _ = x[MarkerDataKeysRegistry-29]
+ _ = x[PebbleSetWithDelete-30]
+ _ = x[TenantUsageSingleConsumptionColumn-31]
+ _ = x[SQLStatsTables-32]
+ _ = x[SQLStatsCompactionScheduledJob-33]
+ _ = x[V21_2-34]
+ _ = x[Start22_1-35]
+ _ = x[TargetBytesAvoidExcess-36]
}
-const _Key_name = "V21_1Start21_1PLUSStart21_2JoinTokensTableAcquisitionTypeInLeaseHistorySerializeViewUDTsExpressionIndexesDeleteDeprecatedNamespaceTableDescriptorMigrationFixDescriptorsDatabaseRoleSettingsTenantUsageTableSQLInstancesTableNewRetryableRangefeedErrorsAlterSystemWebSessionsCreateIndexesSeparatedIntentsMigrationPostSeparatedIntentsMigrationRetryJobsWithExponentialBackoffRecordsBasedRegistryAutoSpanConfigReconciliationJobPreventNewInterleavedTablesEnsureNoInterleavedTablesDefaultPrivilegesZonesTableForSecondaryTenantsUseKeyEncodeForHashShardedIndexesDatabasePlacementPolicyGeneratedAsIdentityOnUpdateExpressionsSpanConfigurationsTableBoundedStalenessDateAndIntervalStylePebbleFormatVersionedMarkerDataKeysRegistryPebbleSetWithDeleteTenantUsageSingleConsumptionColumnSQLStatsTablesSQLStatsCompactionScheduledJobV21_2Start22_1TargetBytesAvoidExcess"
+const _Key_name = "V21_1Start21_1PLUSStart21_2JoinTokensTableAcquisitionTypeInLeaseHistorySerializeViewUDTsExpressionIndexesDeleteDeprecatedNamespaceTableDescriptorMigrationFixDescriptorsDatabaseRoleSettingsTenantUsageTableSQLInstancesTableNewRetryableRangefeedErrorsAlterSystemWebSessionsCreateIndexesSeparatedIntentsMigrationPostSeparatedIntentsMigrationRetryJobsWithExponentialBackoffRecordsBasedRegistryAutoSpanConfigReconciliationJobDefaultPrivilegesZonesTableForSecondaryTenantsUseKeyEncodeForHashShardedIndexesDatabasePlacementPolicyGeneratedAsIdentityOnUpdateExpressionsSpanConfigurationsTableBoundedStalenessDateAndIntervalStylePebbleFormatVersionedMarkerDataKeysRegistryPebbleSetWithDeleteTenantUsageSingleConsumptionColumnSQLStatsTablesSQLStatsCompactionScheduledJobV21_2Start22_1TargetBytesAvoidExcess"
-var _Key_index = [...]uint16{0, 5, 18, 27, 42, 71, 88, 105, 154, 168, 188, 204, 221, 248, 283, 308, 337, 368, 388, 419, 446, 471, 488, 517, 550, 573, 592, 611, 634, 650, 670, 691, 713, 732, 766, 780, 810, 815, 824, 846}
+var _Key_index = [...]uint16{0, 5, 18, 27, 42, 71, 88, 105, 154, 168, 188, 204, 221, 248, 283, 308, 337, 368, 388, 419, 436, 465, 498, 521, 540, 559, 582, 598, 618, 639, 661, 680, 714, 728, 758, 763, 772, 794}
func (i Key) String() string {
if i < 0 || i >= Key(len(_Key_index)-1) {
diff --git a/pkg/cmd/cr2pg/main.go b/pkg/cmd/cr2pg/main.go
index cdf40d60c6de..70482324689b 100644
--- a/pkg/cmd/cr2pg/main.go
+++ b/pkg/cmd/cr2pg/main.go
@@ -60,7 +60,6 @@ func main() {
newstmts[0] = stmt
switch stmt := stmt.(type) {
case *tree.CreateTable:
- stmt.Interleave = nil
stmt.PartitionByTable = nil
var newdefs tree.TableDefs
for _, def := range stmt.Defs {
diff --git a/pkg/cmd/docgen/diagrams.go b/pkg/cmd/docgen/diagrams.go
index 4dbd3ce3cc60..d22c20a6c1cd 100644
--- a/pkg/cmd/docgen/diagrams.go
+++ b/pkg/cmd/docgen/diagrams.go
@@ -625,27 +625,6 @@ var specs = []stmtSpec{
},
nosplit: true,
},
- {
- name: "create_index_interleaved_stmt",
- stmt: "create_index_stmt",
- match: []*regexp.Regexp{regexp.MustCompile("'INTERLEAVE'")},
- inline: []string{"opt_unique", "opt_storing", "opt_interleave", "opt_concurrently"},
- replace: map[string]string{
- "'ON' a_expr": "'ON' column_name",
- "'=' a_expr": "'=' n_buckets",
- " opt_index_name": "",
- " opt_partition_by": "",
- " opt_index_access_method": "",
- "'ON' table_name '(' index_params ')'": "'...'",
- "storing '(' name_list ')'": "'STORING' '(' stored_columns ')'",
- "table_name '(' name_list": "parent_table '(' interleave_prefix",
- },
- exclude: []*regexp.Regexp{
- regexp.MustCompile("'CREATE' 'INVERTED'"),
- regexp.MustCompile("'EXISTS'"),
- },
- unlink: []string{"stored_columns", "parent_table", "interleave_prefix", "n_buckets"},
- },
{
name: "create_inverted_index_stmt",
stmt: "create_index_stmt",
@@ -976,22 +955,12 @@ var specs = []stmtSpec{
nosplit: true,
},
{name: "iso_level"},
- {
- name: "interleave",
- stmt: "create_table_stmt",
- inline: []string{"opt_interleave", "opt_table_with", "opt_with_storage_parameter_list", "storage_parameter_list", "opt_create_table_on_commit"},
- replace: map[string]string{"opt_table_elem_list": "table_definition"},
- unlink: []string{"table_definition"},
- },
{
name: "not_null_column_level",
stmt: "stmt_block",
replace: map[string]string{" stmt": " 'CREATE' 'TABLE' table_name '(' column_name column_type 'NOT NULL' ( column_constraints | ) ( ',' ( column_def ( ',' column_def )* ) | ) ( table_constraints | ) ')' ')'"},
unlink: []string{"table_name", "column_name", "column_type", "table_constraints"},
},
- {
- name: "opt_interleave",
- },
{
name: "opt_with_storage_parameter_list",
inline: []string{"storage_parameter_list"},
diff --git a/pkg/jobs/jobspb/jobs.pb.go b/pkg/jobs/jobspb/jobs.pb.go
index cb7caa47ac35..6581fcc3ae38 100644
--- a/pkg/jobs/jobspb/jobs.pb.go
+++ b/pkg/jobs/jobspb/jobs.pb.go
@@ -1601,11 +1601,6 @@ var xxx_messageInfo_DroppedTableDetails proto.InternalMessageInfo
type SchemaChangeGCDetails struct {
// Indexes to GC.
Indexes []SchemaChangeGCDetails_DroppedIndex `protobuf:"bytes,1,rep,name=indexes,proto3" json:"indexes"`
- // InterleavedTable is the table being truncated. In particular, it is the
- // TableDescriptor before any of the truncate modifications have been applied.
- InterleavedTable *descpb.TableDescriptor `protobuf:"bytes,4,opt,name=interleaved_table,json=interleavedTable,proto3" json:"interleaved_table,omitempty"`
- // InterleavedIndexes is the set of interleaved indexes to truncate.
- InterleavedIndexes []descpb.IndexDescriptor `protobuf:"bytes,5,rep,name=interleaved_indexes,json=interleavedIndexes,proto3" json:"interleaved_indexes"`
// Entire tables to GC.
Tables []SchemaChangeGCDetails_DroppedID `protobuf:"bytes,2,rep,name=tables,proto3" json:"tables"`
// If dropping indexes, the table ID which has those indexes. If dropping a
@@ -3183,390 +3178,387 @@ func init() {
func init() { proto.RegisterFile("jobs/jobspb/jobs.proto", fileDescriptor_6c315f3a2536c4ef) }
var fileDescriptor_6c315f3a2536c4ef = []byte{
- // 6118 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x7c, 0x5b, 0x6c, 0x1b, 0xd9,
- 0x7d, 0xb7, 0x86, 0xa2, 0x78, 0xf9, 0x8b, 0xa4, 0x86, 0x47, 0xb2, 0x44, 0x33, 0x5e, 0x91, 0xcb,
- 0xb5, 0x77, 0xed, 0x4d, 0x4c, 0xed, 0x7a, 0x93, 0xcd, 0xae, 0x93, 0xf5, 0x2e, 0x6f, 0x92, 0x28,
- 0xeb, 0xe6, 0xa1, 0xe4, 0xbd, 0x7d, 0x9b, 0xf9, 0x86, 0x9c, 0x23, 0x6a, 0x3e, 0x91, 0x33, 0xf4,
- 0x9c, 0xa1, 0x6d, 0x25, 0x40, 0x10, 0x24, 0x5f, 0x80, 0xc2, 0xe8, 0x43, 0x0a, 0xb4, 0x7d, 0x69,
- 0x5d, 0x14, 0x4d, 0x02, 0xf4, 0xa1, 0x41, 0xd1, 0xa0, 0x68, 0xfb, 0xd8, 0xc7, 0x3c, 0xa4, 0x45,
- 0x90, 0xa2, 0x68, 0xda, 0x07, 0xa5, 0x55, 0x5e, 0xfa, 0xd0, 0x87, 0xa2, 0x8f, 0x7e, 0x2a, 0xce,
- 0x65, 0x86, 0x43, 0x8a, 0xa2, 0x28, 0xd9, 0x49, 0x5e, 0x64, 0xce, 0xff, 0x9c, 0xf3, 0x3b, 0x97,
- 0xf9, 0x9f, 0xff, 0x7d, 0x0c, 0xf3, 0xff, 0xcf, 0xaa, 0x93, 0x25, 0xfa, 0xa7, 0x53, 0x67, 0xff,
- 0xe4, 0x3b, 0xb6, 0xe5, 0x58, 0xe8, 0x72, 0xc3, 0x6a, 0x1c, 0xd8, 0x96, 0xd6, 0xd8, 0xcf, 0x93,
- 0x07, 0xad, 0x3c, 0x6b, 0xe1, 0xbd, 0xd2, 0x97, 0xb0, 0x6d, 0x5b, 0x36, 0xed, 0xcf, 0x7f, 0xf0,
- 0x11, 0xe9, 0xb9, 0xa6, 0xd5, 0xb4, 0xd8, 0xcf, 0x25, 0xfa, 0x4b, 0x50, 0x93, 0x0c, 0xa3, 0x53,
- 0x5f, 0xd2, 0x3a, 0x86, 0x20, 0x21, 0x97, 0xa4, 0x6b, 0x8e, 0x26, 0x68, 0x29, 0x97, 0x66, 0x58,
- 0x37, 0xf7, 0x2c, 0xbb, 0xad, 0x39, 0x2e, 0xec, 0x2b, 0xe4, 0x41, 0x6b, 0xa9, 0xa1, 0x39, 0x5a,
- 0xcb, 0x6a, 0x2e, 0xe9, 0x98, 0x34, 0x3a, 0xf5, 0x25, 0xe2, 0xd8, 0xdd, 0x86, 0xd3, 0xb5, 0xb1,
- 0x2e, 0x3a, 0x65, 0x86, 0x74, 0x72, 0xb0, 0xa9, 0x99, 0x8e, 0x8b, 0xdf, 0x75, 0x8c, 0xd6, 0xd2,
- 0x7e, 0xab, 0xb1, 0xe4, 0x18, 0x6d, 0x4c, 0x1c, 0xad, 0xdd, 0x11, 0x2d, 0x2f, 0xd3, 0xa1, 0xa4,
- 0xb1, 0x8f, 0xdb, 0x5a, 0x63, 0x5f, 0x33, 0x9b, 0xd8, 0x5e, 0xe2, 0x73, 0x34, 0x3a, 0x75, 0xd1,
- 0xe5, 0x6a, 0xa3, 0xd5, 0x25, 0x0e, 0xb6, 0x1f, 0x62, 0x9b, 0x18, 0x96, 0xb9, 0x24, 0x1e, 0x55,
- 0xf1, 0xec, 0xae, 0xa1, 0x69, 0x59, 0xcd, 0x16, 0x5e, 0x62, 0x4f, 0xf5, 0xee, 0xde, 0xe0, 0x4c,
- 0xb9, 0x1f, 0x06, 0x60, 0xa1, 0xa8, 0x35, 0x0e, 0xba, 0x9d, 0x8a, 0xd9, 0xb0, 0x0f, 0x3b, 0x8e,
- 0x61, 0x99, 0x5b, 0xec, 0x2f, 0x41, 0x32, 0x4c, 0x1e, 0xe0, 0xc3, 0x94, 0x94, 0x95, 0xae, 0xc7,
- 0x14, 0xfa, 0x13, 0xbd, 0x07, 0xc1, 0xb6, 0xa5, 0xe3, 0x54, 0x20, 0x2b, 0x5d, 0x4f, 0xdc, 0xba,
- 0x91, 0x3f, 0xf5, 0x7d, 0xe4, 0x7b, 0x68, 0x1b, 0x96, 0x8e, 0x15, 0x36, 0x0c, 0xd5, 0x21, 0x72,
- 0xd0, 0x26, 0xaa, 0x61, 0xee, 0x59, 0xa9, 0xc9, 0xac, 0x74, 0x7d, 0xfa, 0xd6, 0xed, 0x11, 0x10,
- 0xa7, 0x2c, 0x2b, 0x7f, 0x77, 0xa3, 0x56, 0x35, 0xf7, 0xac, 0xe2, 0xf4, 0xf1, 0x51, 0x26, 0x2c,
- 0x1e, 0x94, 0xf0, 0x41, 0x9b, 0xd0, 0x1f, 0xe9, 0x2d, 0x70, 0x69, 0x74, 0xfd, 0x5d, 0xdb, 0x60,
- 0xeb, 0x8f, 0x2a, 0xf4, 0x27, 0xfa, 0x02, 0x20, 0xcc, 0xf1, 0xb0, 0xae, 0xd2, 0x37, 0xad, 0xd2,
- 0x0d, 0x06, 0xd8, 0x06, 0x65, 0xaf, 0xa5, 0xac, 0x39, 0xda, 0x5d, 0x7c, 0x78, 0x3b, 0xf8, 0x9f,
- 0x7f, 0x9a, 0x91, 0xf8, 0xdf, 0xdc, 0xb7, 0x26, 0x21, 0xd1, 0x5b, 0x0a, 0x83, 0x5f, 0x85, 0x10,
- 0x7b, 0x45, 0x98, 0xcd, 0x90, 0xb8, 0xf5, 0xc6, 0x58, 0xc7, 0x41, 0x87, 0xe6, 0x6b, 0x6c, 0x9c,
- 0x22, 0xc6, 0x23, 0x04, 0x41, 0xa2, 0xb5, 0x1c, 0xb1, 0x10, 0xf6, 0x1b, 0xfd, 0x91, 0x04, 0xd9,
- 0xc1, 0x15, 0x15, 0x0f, 0xef, 0x6e, 0xd4, 0x36, 0x34, 0xfa, 0x9e, 0xef, 0xe2, 0xc3, 0x6a, 0x39,
- 0x35, 0x99, 0x9d, 0xbc, 0x3e, 0x7d, 0x6b, 0x6b, 0xfc, 0x89, 0x2b, 0x67, 0x20, 0x56, 0x4c, 0xc7,
- 0x3e, 0x54, 0xce, 0x9c, 0x38, 0x5d, 0x83, 0x6b, 0x63, 0x41, 0xf9, 0x79, 0x28, 0xca, 0x79, 0x68,
- 0x0e, 0xa6, 0x1e, 0x6a, 0xad, 0x2e, 0x16, 0xbb, 0xe5, 0x0f, 0xb7, 0x03, 0xef, 0x48, 0xb9, 0x05,
- 0x08, 0xf1, 0x83, 0x41, 0x71, 0x88, 0x16, 0x2a, 0xb5, 0x5b, 0x5f, 0x7a, 0x7b, 0xa5, 0xb4, 0x21,
- 0x4f, 0x88, 0x57, 0xf0, 0xbb, 0x01, 0x98, 0xaf, 0x39, 0x36, 0xd6, 0xda, 0x55, 0xb3, 0x89, 0x09,
- 0xdd, 0x53, 0x19, 0x3b, 0x9a, 0xd1, 0x22, 0xe8, 0x1a, 0x24, 0x08, 0x6b, 0x51, 0x35, 0x5d, 0xb7,
- 0x31, 0x21, 0x62, 0xc2, 0x38, 0xa7, 0x16, 0x38, 0x11, 0xdd, 0x80, 0xa8, 0xe8, 0x66, 0xe8, 0xa9,
- 0x60, 0x56, 0xba, 0x1e, 0x2c, 0xc6, 0x8e, 0x8f, 0x32, 0x11, 0x81, 0x5a, 0x56, 0x22, 0xbc, 0xb9,
- 0xaa, 0xa3, 0x37, 0x21, 0x48, 0x3a, 0x9a, 0xc9, 0x16, 0x39, 0x7d, 0x6b, 0xc1, 0x77, 0xc2, 0x42,
- 0x28, 0xe4, 0x6b, 0x1d, 0xcd, 0x2c, 0x06, 0x7f, 0x72, 0x94, 0x99, 0x50, 0x58, 0x57, 0x54, 0x04,
- 0x20, 0x8e, 0x66, 0x3b, 0x2a, 0xbd, 0x63, 0x82, 0xbf, 0x5f, 0xf2, 0x0d, 0xa4, 0xb7, 0x3d, 0xbf,
- 0xdf, 0x6a, 0xe4, 0x77, 0xdc, 0x3b, 0x28, 0x86, 0x47, 0xd9, 0x30, 0x4a, 0xa5, 0x2b, 0xe4, 0x22,
- 0x82, 0xae, 0x70, 0xaa, 0xb7, 0xc2, 0x1d, 0x46, 0xa4, 0x2b, 0xe4, 0xcd, 0x55, 0x3d, 0xf7, 0x2f,
- 0x93, 0xb0, 0x30, 0x70, 0x1c, 0xdb, 0xb6, 0xd5, 0x64, 0x1b, 0x5d, 0x86, 0x58, 0xa3, 0xeb, 0x58,
- 0x0f, 0xb1, 0xcd, 0x17, 0x23, 0x8d, 0xbf, 0x98, 0x69, 0x31, 0x90, 0x2d, 0xe7, 0x9b, 0x80, 0x3a,
- 0x9a, 0xed, 0x18, 0x14, 0x5c, 0xed, 0x08, 0xf4, 0x54, 0x80, 0x71, 0x5d, 0x75, 0x04, 0xd7, 0x9d,
- 0xb2, 0xae, 0xfc, 0xb6, 0x0b, 0xe6, 0x52, 0x18, 0x93, 0x88, 0x99, 0x93, 0x9d, 0xc1, 0xd6, 0x74,
- 0x13, 0x92, 0x27, 0x86, 0x20, 0x05, 0x90, 0xc1, 0x90, 0xb1, 0xae, 0x7a, 0xe2, 0xec, 0x3c, 0x5b,
- 0x4c, 0xba, 0xc3, 0xbd, 0x86, 0xf4, 0x13, 0x09, 0xe6, 0x87, 0x2f, 0x6e, 0x08, 0x07, 0x7f, 0xe2,
- 0xe7, 0xe0, 0xe9, 0x5b, 0xe5, 0x17, 0x71, 0x10, 0xfe, 0x7b, 0x50, 0x85, 0x14, 0x1f, 0xa7, 0xe0,
- 0x4e, 0xcb, 0x68, 0x68, 0x7e, 0x4e, 0xbf, 0x09, 0x53, 0x94, 0xd9, 0x28, 0x83, 0x4f, 0x8e, 0x60,
- 0x4c, 0x85, 0xf7, 0xca, 0x69, 0x70, 0xf9, 0x04, 0x94, 0x77, 0x90, 0x65, 0x00, 0xfc, 0xb8, 0x63,
- 0xd8, 0x8c, 0x2a, 0x0e, 0x30, 0x9d, 0xe7, 0x1a, 0x23, 0xef, 0x6a, 0x0c, 0xdf, 0xe9, 0x45, 0xe8,
- 0xe9, 0x7d, 0xef, 0x97, 0x19, 0x49, 0xf1, 0x8d, 0xcb, 0xfd, 0x28, 0x00, 0x97, 0xe9, 0xb5, 0xd5,
- 0xbb, 0x2d, 0xbc, 0xbd, 0x53, 0x2b, 0xed, 0x6b, 0x86, 0x69, 0x98, 0x4d, 0x05, 0x37, 0x2c, 0x5b,
- 0x47, 0xbf, 0x27, 0x41, 0x9a, 0x42, 0xe1, 0x46, 0xdf, 0xeb, 0x52, 0x6d, 0xd6, 0xcc, 0x75, 0x4b,
- 0xb1, 0xf6, 0x6f, 0x47, 0x99, 0xb7, 0x9a, 0x86, 0xb3, 0xdf, 0xad, 0xe7, 0x1b, 0x56, 0x7b, 0xc9,
- 0xdb, 0x93, 0x5e, 0xef, 0xfd, 0x5e, 0xea, 0x1c, 0x34, 0x97, 0x98, 0xc6, 0xec, 0x76, 0x0d, 0x3d,
- 0xbf, 0xbb, 0x5b, 0x2d, 0x1f, 0x1f, 0x65, 0x52, 0xdb, 0x2e, 0xb8, 0xb7, 0x4e, 0x3e, 0xb3, 0x92,
- 0xea, 0x9c, 0xd2, 0x82, 0xee, 0x43, 0x48, 0x6b, 0xb0, 0x3d, 0x73, 0x3d, 0x76, 0x67, 0xd4, 0x0b,
- 0x3c, 0x6d, 0x67, 0xf9, 0xed, 0x9d, 0x5a, 0x81, 0xa1, 0x28, 0x02, 0x2d, 0x77, 0x15, 0xa2, 0x1e,
- 0x11, 0x01, 0x84, 0x76, 0xb7, 0xcb, 0x85, 0x9d, 0x8a, 0x3c, 0x81, 0xa6, 0x21, 0xac, 0x54, 0xd6,
- 0x2b, 0x85, 0x5a, 0x45, 0x96, 0x72, 0xff, 0x14, 0x86, 0x38, 0x57, 0x6d, 0xee, 0x3b, 0xed, 0x17,
- 0x1c, 0xd2, 0x85, 0x04, 0xc7, 0x1d, 0x88, 0x60, 0x93, 0x1f, 0xb0, 0x60, 0xcb, 0xb1, 0x10, 0xc2,
- 0xd8, 0x64, 0xc7, 0x83, 0x2e, 0x73, 0x5d, 0x49, 0xa5, 0x56, 0xb4, 0x18, 0x3e, 0x3e, 0xca, 0x4c,
- 0xee, 0x2a, 0x55, 0xae, 0x34, 0xbf, 0x23, 0xc1, 0x6c, 0xd7, 0x36, 0x88, 0x5a, 0x3f, 0x54, 0x5b,
- 0x56, 0x43, 0x6b, 0x19, 0xce, 0xa1, 0x7a, 0xf0, 0x30, 0x35, 0xc5, 0x38, 0xf0, 0xce, 0x99, 0x1a,
- 0x5c, 0x6c, 0x33, 0xbf, 0x6b, 0x1b, 0xa4, 0x78, 0xb8, 0x2e, 0x10, 0xee, 0x3e, 0xe4, 0x77, 0x7f,
- 0xee, 0xf8, 0x28, 0x23, 0xef, 0x2a, 0x55, 0x7f, 0xd3, 0x7d, 0x45, 0xee, 0x0e, 0x74, 0x46, 0x5f,
- 0x85, 0xb4, 0x8e, 0x3b, 0x36, 0x6e, 0x68, 0x94, 0x91, 0xea, 0x0c, 0x59, 0x6d, 0x6b, 0xa6, 0xb1,
- 0x87, 0x89, 0xc3, 0x84, 0x79, 0x4c, 0x49, 0xf5, 0x7a, 0xf0, 0xa9, 0x37, 0x44, 0x3b, 0xd2, 0x3c,
- 0xc5, 0x4f, 0x25, 0x99, 0xc5, 0x2d, 0x89, 0x54, 0x88, 0x1d, 0xd4, 0xad, 0xf3, 0xdb, 0x20, 0x4a,
- 0x12, 0x9f, 0xb0, 0x96, 0x14, 0x98, 0xf1, 0x4d, 0xc1, 0x6c, 0x9c, 0x28, 0xc3, 0xbf, 0x31, 0xb6,
- 0x7a, 0x56, 0x12, 0xb8, 0xdf, 0xc4, 0x38, 0xe3, 0xf6, 0x84, 0x7f, 0x1b, 0xb7, 0xe7, 0x1d, 0x48,
- 0x34, 0xac, 0x56, 0x0b, 0x33, 0x36, 0x57, 0x77, 0x95, 0x6a, 0x2a, 0xc2, 0x98, 0x26, 0x79, 0x7c,
- 0x94, 0x89, 0x97, 0xbc, 0x16, 0xca, 0x3e, 0xf1, 0x86, 0xff, 0x11, 0xfd, 0xbe, 0x04, 0x57, 0x88,
- 0xb8, 0x4f, 0x6a, 0xc7, 0x21, 0x6a, 0x43, 0xdc, 0x28, 0x77, 0x3f, 0xc0, 0xce, 0xeb, 0x8b, 0x17,
- 0xb9, 0x8e, 0xc5, 0x97, 0x8e, 0x8f, 0x32, 0xa7, 0xcb, 0x21, 0xe5, 0xb2, 0x3b, 0xf1, 0xb6, 0x43,
- 0xfa, 0x9b, 0xd2, 0x25, 0xb8, 0x34, 0x94, 0x35, 0xcf, 0xb2, 0x5d, 0xa2, 0x7e, 0x99, 0x2d, 0x43,
- 0x82, 0xf3, 0x8a, 0x2b, 0x5d, 0x73, 0x7f, 0xb2, 0x00, 0x09, 0x05, 0x13, 0xc7, 0xb2, 0xb1, 0x7b,
- 0xd1, 0xfd, 0x97, 0x34, 0x78, 0x81, 0x4b, 0xfa, 0x63, 0x09, 0x66, 0xa9, 0x23, 0x61, 0x1b, 0x1d,
- 0xc7, 0xb2, 0x55, 0x1b, 0x3f, 0xb2, 0x0d, 0x07, 0xbb, 0x0a, 0xb9, 0x30, 0xe2, 0xdc, 0xfa, 0x17,
- 0x92, 0x2f, 0x7b, 0x20, 0x8a, 0xc0, 0xe0, 0x97, 0xf1, 0xce, 0xb7, 0x7f, 0x99, 0xb9, 0x3d, 0x16,
- 0x2b, 0x9d, 0xf4, 0x6d, 0xf2, 0xd5, 0xb2, 0x82, 0xf4, 0x13, 0xc0, 0xe8, 0x0a, 0x04, 0xe9, 0x65,
- 0x66, 0xb6, 0x6a, 0xb4, 0x18, 0x39, 0x3e, 0xca, 0x04, 0xe9, 0x75, 0x57, 0x18, 0x15, 0x39, 0x30,
- 0x27, 0xee, 0xb2, 0x27, 0x5a, 0xd8, 0xd5, 0x09, 0xb3, 0x2d, 0x7d, 0x75, 0xfc, 0x2d, 0xf1, 0xd3,
- 0x77, 0x5f, 0x21, 0x73, 0x10, 0xf8, 0xe9, 0xa1, 0xfa, 0x89, 0x16, 0xb4, 0x0d, 0x09, 0x6a, 0xfd,
- 0xd7, 0x35, 0x82, 0x55, 0xba, 0x64, 0x92, 0x92, 0xd9, 0x7c, 0x83, 0x57, 0x95, 0x3c, 0x68, 0xd1,
- 0x3e, 0xf9, 0xb2, 0xe8, 0xec, 0x3b, 0xb7, 0xb8, 0xee, 0xa3, 0x11, 0xb4, 0x02, 0xd3, 0x8e, 0x56,
- 0x6f, 0xb9, 0x70, 0x5c, 0x36, 0xbe, 0x7a, 0x0a, 0xdc, 0x0e, 0xed, 0xe9, 0xc3, 0x02, 0xc7, 0x25,
- 0x30, 0xa5, 0xec, 0x1c, 0x76, 0x5c, 0x9c, 0x04, 0xc3, 0xb9, 0x76, 0x1a, 0xce, 0x61, 0xc7, 0x0f,
- 0x13, 0x75, 0xc4, 0x33, 0x41, 0x6b, 0x10, 0xe3, 0xee, 0xa3, 0xc0, 0x99, 0x61, 0x38, 0xaf, 0x9d,
- 0x82, 0xc3, 0xac, 0x6e, 0xcd, 0x87, 0x34, 0x4d, 0x3c, 0x0a, 0xc5, 0x0a, 0x73, 0xa3, 0x93, 0xa4,
- 0x2e, 0x31, 0x98, 0xd7, 0x4f, 0x5b, 0x0e, 0x37, 0x4d, 0xcd, 0x3d, 0xeb, 0x43, 0xc3, 0xd9, 0xdf,
- 0x25, 0x5a, 0x13, 0xbb, 0x1c, 0x2c, 0x00, 0xd0, 0x12, 0x4c, 0x53, 0xe3, 0xd2, 0x36, 0x74, 0xac,
- 0xea, 0x75, 0x26, 0x80, 0xa3, 0xc5, 0xc4, 0xf1, 0x51, 0x06, 0xb6, 0x04, 0xb9, 0x5c, 0x54, 0xc0,
- 0xed, 0x52, 0xae, 0xa3, 0xcf, 0x43, 0xb2, 0x63, 0xe3, 0x8e, 0x66, 0x63, 0xb5, 0x61, 0xb5, 0x3b,
- 0x2d, 0xec, 0x60, 0x9d, 0x09, 0x9c, 0x88, 0x22, 0x8b, 0x86, 0x92, 0x4b, 0xe7, 0x6e, 0x80, 0xe6,
- 0x50, 0x0f, 0x93, 0x60, 0x9b, 0xf6, 0x8c, 0xb2, 0x9e, 0x71, 0x46, 0xad, 0x0a, 0x22, 0x3a, 0x84,
- 0x79, 0x72, 0x48, 0x1c, 0xdc, 0x56, 0xd9, 0xb9, 0x13, 0xb5, 0x6d, 0x34, 0x6d, 0xaa, 0x34, 0x52,
- 0x49, 0xb6, 0xbf, 0xd2, 0xf8, 0x5c, 0x57, 0x63, 0x38, 0xec, 0x7d, 0x92, 0x0d, 0x81, 0xc2, 0x7d,
- 0xa8, 0x39, 0x32, 0xa4, 0x09, 0xbd, 0x05, 0x97, 0x7a, 0x57, 0x84, 0xa8, 0x9d, 0x6e, 0xbd, 0x65,
- 0x90, 0x7d, 0xcc, 0x45, 0x5f, 0x44, 0x99, 0xf3, 0x35, 0x6e, 0xbb, 0x6d, 0xe8, 0xb0, 0xef, 0xd6,
- 0x37, 0xe8, 0xe9, 0x68, 0x4d, 0x9c, 0x9a, 0xce, 0x4a, 0xd7, 0xa7, 0x8a, 0xab, 0xcf, 0x8e, 0x32,
- 0xe5, 0xb1, 0xaf, 0x2c, 0xc1, 0xed, 0x25, 0xc7, 0xc6, 0xd8, 0x27, 0x01, 0x4a, 0x02, 0xcf, 0x7f,
- 0x79, 0x5d, 0x1a, 0x52, 0x00, 0x7a, 0x2a, 0x29, 0x15, 0xbb, 0xb0, 0xbe, 0xf4, 0xa1, 0x20, 0x13,
- 0x90, 0x8d, 0x1f, 0x6a, 0x2d, 0x43, 0xd7, 0x1c, 0xac, 0x1a, 0xa6, 0x8e, 0x1f, 0x63, 0x92, 0x42,
- 0xec, 0xe8, 0xdf, 0x1d, 0xff, 0xe8, 0x15, 0x0f, 0xa3, 0x4a, 0x21, 0x5c, 0xdb, 0xde, 0xee, 0x27,
- 0x63, 0x82, 0xfe, 0x52, 0x02, 0xe4, 0xdd, 0xf6, 0xb6, 0xa5, 0x1b, 0x7b, 0x06, 0xb6, 0x49, 0x6a,
- 0x96, 0x4d, 0xf8, 0xc1, 0x39, 0x84, 0xa6, 0xc0, 0xd8, 0x70, 0x21, 0x5e, 0x8c, 0xcc, 0x4c, 0xea,
- 0x83, 0xb8, 0xe8, 0x2a, 0x24, 0x74, 0x5c, 0xef, 0x36, 0xd5, 0x8e, 0xd6, 0x25, 0x58, 0xb5, 0xcc,
- 0xd4, 0x1c, 0xd3, 0x37, 0x31, 0x46, 0xdd, 0xa6, 0xc4, 0x2d, 0x33, 0xfd, 0x67, 0x01, 0x48, 0x9e,
- 0x10, 0xe4, 0x68, 0x07, 0x02, 0x06, 0xb7, 0xab, 0xe3, 0x45, 0xaa, 0xe2, 0x03, 0xd5, 0xf2, 0xb3,
- 0xa3, 0xe7, 0x5a, 0x60, 0xc0, 0xd0, 0x51, 0x13, 0xa2, 0xf4, 0xaa, 0x71, 0xbf, 0x34, 0xc0, 0xc0,
- 0xd7, 0xa8, 0x5f, 0xba, 0xcd, 0x88, 0xcf, 0x3d, 0x45, 0x84, 0x83, 0x57, 0x75, 0x94, 0x81, 0x69,
- 0xc7, 0x52, 0xf1, 0x63, 0x83, 0x38, 0x86, 0xd9, 0x64, 0xf6, 0x68, 0x44, 0x01, 0xc7, 0xaa, 0x08,
- 0x0a, 0xba, 0x09, 0xd3, 0x26, 0x7e, 0xa4, 0xea, 0x75, 0xd5, 0xd4, 0x84, 0x1a, 0x8d, 0x16, 0xe3,
- 0xc7, 0x47, 0x99, 0xe8, 0x26, 0x7e, 0x54, 0x2e, 0x6e, 0x6a, 0x6d, 0xac, 0x44, 0x4d, 0xfc, 0xa8,
- 0x5c, 0xa7, 0x3f, 0xd3, 0x7f, 0x1c, 0x00, 0x74, 0x52, 0x35, 0xa0, 0xbf, 0x93, 0xe0, 0x8a, 0x6b,
- 0xd3, 0x5a, 0xb6, 0xd1, 0x34, 0x4c, 0xad, 0xd5, 0x67, 0xdc, 0x72, 0xf7, 0xea, 0x93, 0xe7, 0xd1,
- 0x3f, 0xc2, 0xe0, 0xdd, 0x12, 0xf0, 0x83, 0x86, 0xef, 0x15, 0x6a, 0x7f, 0x71, 0xc3, 0xf7, 0x44,
- 0x97, 0xfb, 0x4a, 0xaa, 0x7b, 0xca, 0xe0, 0xf4, 0x5d, 0x78, 0x69, 0x24, 0xf0, 0x79, 0xcc, 0x96,
- 0xf4, 0xb7, 0x25, 0x58, 0x38, 0xc5, 0x18, 0xf0, 0xe3, 0xc4, 0x39, 0xce, 0xbd, 0x7e, 0xc7, 0xf7,
- 0x2b, 0xcf, 0x61, 0x70, 0xf8, 0x17, 0xb1, 0x02, 0x97, 0x4f, 0x95, 0xa3, 0x67, 0xed, 0x26, 0xe2,
- 0x07, 0xfa, 0x57, 0x09, 0x66, 0x06, 0xc4, 0x02, 0xfa, 0xd8, 0x77, 0x1f, 0xaa, 0xc7, 0x47, 0x99,
- 0x30, 0x9b, 0xe4, 0x85, 0x5c, 0x8a, 0x83, 0x93, 0x97, 0x62, 0x93, 0xce, 0xc0, 0x26, 0x66, 0x33,
- 0xbc, 0x7f, 0xe1, 0x19, 0x38, 0x44, 0xef, 0x62, 0xa4, 0xff, 0x5e, 0x02, 0x79, 0x50, 0x02, 0xa1,
- 0x2d, 0x90, 0xf1, 0x63, 0xc7, 0xd6, 0x54, 0x9f, 0xc9, 0x20, 0x9d, 0xc7, 0x64, 0x48, 0xb0, 0xe1,
- 0x3b, 0x9e, 0xdd, 0xf0, 0x29, 0xc4, 0x6d, 0xdc, 0xa4, 0x86, 0x7d, 0xc3, 0x32, 0xf7, 0x8c, 0xa6,
- 0x78, 0xd3, 0x6f, 0x8f, 0x6d, 0x17, 0xe5, 0x15, 0x36, 0xbc, 0xc4, 0x46, 0x2b, 0x31, 0xdb, 0xf7,
- 0x94, 0xfe, 0x96, 0x04, 0xf3, 0xc3, 0x85, 0xe8, 0x10, 0x5e, 0xdb, 0xee, 0xe7, 0xb5, 0xdb, 0x17,
- 0x97, 0xd3, 0x3e, 0x0e, 0x59, 0x0b, 0x46, 0x24, 0x39, 0xb0, 0x16, 0x8c, 0xc4, 0xe5, 0x44, 0xee,
- 0x0d, 0xca, 0x2c, 0x6c, 0xa4, 0x17, 0x11, 0x79, 0x09, 0x60, 0xdf, 0x68, 0xee, 0xab, 0x8f, 0x34,
- 0x07, 0xdb, 0x22, 0xf0, 0x1d, 0xa5, 0x94, 0x0f, 0x29, 0x21, 0xf7, 0xf3, 0x18, 0xc4, 0xab, 0xed,
- 0x8e, 0x65, 0x3b, 0xae, 0x45, 0xbf, 0x0e, 0x21, 0x6e, 0x43, 0x88, 0x63, 0xcf, 0x8f, 0x58, 0x66,
- 0xdf, 0x48, 0x6e, 0x03, 0x0a, 0xa5, 0x25, 0x30, 0xd0, 0x16, 0x84, 0xb9, 0xe1, 0x45, 0x52, 0x0b,
- 0x0c, 0x6e, 0x69, 0x6c, 0x38, 0x6e, 0xc2, 0xb9, 0xe6, 0x96, 0x40, 0x41, 0x55, 0x98, 0xa2, 0x9c,
- 0x41, 0x52, 0x69, 0x06, 0x77, 0x73, 0xfc, 0xd5, 0x1d, 0x76, 0xdc, 0xc5, 0x71, 0x04, 0xcf, 0x8c,
- 0x0f, 0x0c, 0x35, 0xe3, 0xdf, 0x83, 0x10, 0xcf, 0x90, 0x88, 0xb8, 0x67, 0x66, 0x48, 0x5c, 0xaa,
- 0xba, 0xb5, 0x6c, 0xb4, 0xf0, 0x32, 0xeb, 0xe6, 0x6e, 0x9c, 0x0f, 0x42, 0xaf, 0x42, 0x84, 0x10,
- 0x47, 0x25, 0xc6, 0xd7, 0xb9, 0x44, 0x9f, 0xe4, 0xc1, 0xfd, 0x5a, 0x6d, 0xa7, 0x66, 0x7c, 0x1d,
- 0x2b, 0x61, 0x42, 0x1c, 0xfa, 0x03, 0x2d, 0x02, 0xb3, 0x0d, 0x89, 0x46, 0x2d, 0x3e, 0x66, 0xdc,
- 0x4d, 0x2a, 0x3e, 0x0a, 0xc3, 0x39, 0x30, 0x3a, 0xea, 0xde, 0x01, 0xe1, 0x16, 0x95, 0xc0, 0x39,
- 0x30, 0x3a, 0xcb, 0x77, 0x89, 0x12, 0xa6, 0x8d, 0xcb, 0x07, 0x04, 0xa5, 0x21, 0xf2, 0x48, 0x6b,
- 0xb5, 0x98, 0x23, 0x36, 0xc5, 0x50, 0xbc, 0xe7, 0x7e, 0x55, 0x17, 0xfa, 0xf5, 0xaa, 0x3a, 0xe1,
- 0xfa, 0x74, 0x34, 0x67, 0x9f, 0x39, 0xf3, 0x51, 0x05, 0x38, 0x69, 0x5b, 0x73, 0xf6, 0x51, 0x0a,
- 0xc2, 0x7c, 0x5f, 0x24, 0x15, 0xc9, 0x4e, 0x5e, 0x8f, 0x29, 0xee, 0x23, 0x7a, 0x0d, 0x66, 0x78,
- 0x0c, 0x53, 0xd5, 0x0d, 0x1b, 0x37, 0x9c, 0xd6, 0x21, 0xb3, 0x06, 0x23, 0x4a, 0x82, 0x93, 0xcb,
- 0x82, 0x8a, 0x6e, 0x80, 0x3c, 0x68, 0x3e, 0x33, 0x2b, 0x2e, 0xa2, 0xcc, 0x0c, 0x58, 0xcf, 0xd4,
- 0xd2, 0x16, 0x6c, 0xe3, 0x33, 0x4b, 0x53, 0xdc, 0xd2, 0x16, 0x0d, 0x3d, 0x93, 0xf4, 0x06, 0xc8,
- 0xc2, 0x76, 0xee, 0xf5, 0x8d, 0x73, 0x5c, 0x4e, 0xef, 0x75, 0xcd, 0xc3, 0x6c, 0x47, 0xb3, 0x09,
- 0x56, 0xeb, 0x5d, 0x53, 0x6f, 0x61, 0x95, 0x63, 0xa5, 0x12, 0xac, 0x77, 0x92, 0x35, 0x15, 0x59,
- 0x0b, 0x67, 0xe1, 0xb3, 0x62, 0x1e, 0xf3, 0xbf, 0x8d, 0x98, 0xc7, 0x75, 0x90, 0x75, 0xbc, 0xa7,
- 0x75, 0x5b, 0x8e, 0x6a, 0x98, 0x82, 0x4f, 0x2f, 0x53, 0xf3, 0x5b, 0x49, 0x08, 0x7a, 0xd5, 0xe4,
- 0x1c, 0xfa, 0x4d, 0x58, 0xf0, 0x6c, 0xcd, 0x8e, 0x6d, 0xb4, 0x35, 0xfb, 0x50, 0xe5, 0x42, 0x30,
- 0xf5, 0x39, 0x66, 0xaa, 0x2c, 0x3f, 0x3b, 0xca, 0x14, 0x2f, 0xca, 0x3f, 0x5c, 0xb8, 0x32, 0x1b,
- 0xe7, 0x92, 0x3b, 0xcd, 0x36, 0x9f, 0x85, 0x37, 0xa5, 0x7f, 0x18, 0x80, 0x29, 0x26, 0x5a, 0xd0,
- 0x6d, 0x08, 0xd2, 0x51, 0x22, 0x9e, 0x38, 0xae, 0x2b, 0xca, 0xc6, 0x20, 0x04, 0x41, 0x66, 0x5d,
- 0x21, 0xc6, 0x93, 0xec, 0x37, 0x5a, 0x80, 0x30, 0xc1, 0x0f, 0xd4, 0x87, 0x5a, 0x2b, 0x35, 0xcb,
- 0xae, 0x4c, 0x88, 0xe0, 0x07, 0xf7, 0xb5, 0x16, 0xba, 0x04, 0x21, 0x83, 0xa8, 0x26, 0x7e, 0xc4,
- 0xac, 0xd4, 0x88, 0x32, 0x65, 0x90, 0x4d, 0xfc, 0x08, 0x7d, 0x0e, 0xa2, 0x8f, 0x34, 0xa2, 0xe2,
- 0x76, 0xc7, 0x39, 0x64, 0x6f, 0x2d, 0x42, 0x2f, 0x19, 0xa9, 0xd0, 0x67, 0x66, 0xe6, 0x69, 0x76,
- 0x13, 0x3b, 0x6a, 0xc3, 0x6a, 0x71, 0xbf, 0x32, 0x4a, 0xdd, 0x60, 0x4a, 0x2a, 0x59, 0x2d, 0xb2,
- 0x16, 0x8c, 0x04, 0xe4, 0xc9, 0xb5, 0x60, 0x64, 0x52, 0x0e, 0xae, 0x05, 0x23, 0x41, 0x79, 0x6a,
- 0x2d, 0x18, 0x99, 0x92, 0x43, 0x6b, 0xc1, 0x48, 0x48, 0x0e, 0xaf, 0x05, 0x23, 0x61, 0x39, 0xb2,
- 0x16, 0x8c, 0x44, 0xe4, 0xe8, 0x5a, 0x30, 0x12, 0x95, 0x61, 0x2d, 0x18, 0x01, 0x79, 0x7a, 0x2d,
- 0x18, 0x99, 0x96, 0x63, 0x6b, 0xc1, 0x48, 0x4c, 0x8e, 0x73, 0x21, 0xbf, 0x16, 0x8c, 0x24, 0xe4,
- 0x99, 0xb5, 0x60, 0x64, 0x46, 0x96, 0xd7, 0x82, 0x11, 0x59, 0x4e, 0xae, 0x05, 0x23, 0x49, 0x19,
- 0xa5, 0x2b, 0x22, 0xd7, 0xa4, 0xa1, 0xaf, 0xf4, 0x9d, 0xd3, 0xd8, 0x2e, 0x32, 0x1b, 0x94, 0x2e,
- 0x40, 0x90, 0x8a, 0x4a, 0xf4, 0x6e, 0x1f, 0xc8, 0x98, 0xca, 0x97, 0x0d, 0xc9, 0xfd, 0x58, 0x02,
- 0xb9, 0x86, 0x1f, 0x74, 0xb1, 0xd9, 0xc0, 0xf7, 0xb5, 0x56, 0x69, 0xbf, 0x6b, 0x1e, 0xa0, 0x57,
- 0x61, 0xa6, 0x41, 0x7f, 0xa8, 0x3c, 0x30, 0x4c, 0x0f, 0x5d, 0x62, 0x87, 0x1e, 0x67, 0xe4, 0x1a,
- 0xa5, 0xd2, 0xb3, 0x7f, 0x09, 0x40, 0xf4, 0xa3, 0x2c, 0x19, 0x60, 0x5d, 0xa2, 0xbc, 0x0b, 0xe5,
- 0xc6, 0x01, 0x18, 0xdb, 0x7a, 0xc4, 0xe4, 0x73, 0x1f, 0x8c, 0x62, 0x3d, 0x42, 0x4b, 0x30, 0x67,
- 0xe2, 0xc7, 0x8e, 0x3a, 0xd8, 0x99, 0xc9, 0x62, 0x25, 0x49, 0xdb, 0x4a, 0xfe, 0x01, 0xb9, 0x7f,
- 0x08, 0xc0, 0x8c, 0xbb, 0x68, 0x57, 0x17, 0xee, 0x81, 0x4c, 0x19, 0xc4, 0xd0, 0x55, 0xc7, 0xe2,
- 0x48, 0xae, 0x56, 0x7c, 0x6f, 0x54, 0x44, 0xaf, 0x1f, 0x85, 0x3e, 0x57, 0xf5, 0x1d, 0x8b, 0x4d,
- 0xc7, 0x8d, 0x03, 0x25, 0x4e, 0xfc, 0xb4, 0xf4, 0x2e, 0x24, 0xdc, 0x41, 0x9c, 0x82, 0x4a, 0x10,
- 0xea, 0x9b, 0xef, 0xf3, 0x63, 0xcc, 0xe7, 0x1e, 0xb5, 0x22, 0x86, 0xa6, 0xbf, 0x01, 0xe8, 0xe4,
- 0xdc, 0x7e, 0xc3, 0x64, 0x8a, 0x1b, 0x26, 0x5b, 0xfd, 0x86, 0xc9, 0xbb, 0xe7, 0xdb, 0x9b, 0x6f,
- 0xd9, 0xfe, 0xf0, 0xe1, 0x77, 0x27, 0x21, 0xc1, 0x35, 0xb0, 0x67, 0x8b, 0x50, 0x79, 0x4c, 0xc5,
- 0xbd, 0x61, 0x36, 0x7b, 0xa9, 0x37, 0xba, 0xbf, 0x80, 0x22, 0xbb, 0x0d, 0x5e, 0xe7, 0x57, 0xa8,
- 0xdd, 0xa6, 0xe9, 0xfd, 0x39, 0xba, 0x00, 0xb5, 0xbf, 0x34, 0xdd, 0xeb, 0x74, 0x0d, 0x12, 0xcc,
- 0xf6, 0xee, 0xf5, 0x9a, 0x64, 0xbd, 0xe2, 0x8c, 0xea, 0x75, 0x2b, 0x42, 0x9c, 0x74, 0x34, 0x5f,
- 0xbe, 0x2f, 0x38, 0x32, 0xd5, 0x24, 0x54, 0x79, 0x8c, 0x8e, 0xf1, 0x1b, 0x52, 0x36, 0x26, 0xdd,
- 0x36, 0x56, 0x3b, 0x16, 0x8f, 0x86, 0x4d, 0x2a, 0x51, 0x4e, 0xd9, 0xb6, 0x08, 0xda, 0x65, 0xac,
- 0xc2, 0xce, 0x42, 0xd5, 0xf9, 0xe1, 0xa4, 0x42, 0x43, 0x63, 0x4b, 0x23, 0x8e, 0x53, 0x99, 0x21,
- 0x03, 0x1c, 0xf8, 0x01, 0x84, 0x49, 0xb7, 0x4d, 0xa5, 0x21, 0xd3, 0xa6, 0xd3, 0xb7, 0xb2, 0x43,
- 0xd6, 0x5c, 0xec, 0xb6, 0x0e, 0xb6, 0x3a, 0x35, 0xde, 0xcf, 0x33, 0x98, 0xf8, 0x63, 0xee, 0xaf,
- 0x24, 0x58, 0xa0, 0xb7, 0x94, 0x5f, 0xf7, 0x12, 0xab, 0xbd, 0x70, 0xd1, 0x35, 0x08, 0x33, 0x33,
- 0xdb, 0x73, 0x27, 0x56, 0x8f, 0x8f, 0x32, 0x21, 0xda, 0xfb, 0xb9, 0x8d, 0x82, 0x10, 0x05, 0xae,
- 0xb2, 0xf0, 0x90, 0x63, 0x6b, 0x26, 0x61, 0xa9, 0x41, 0xfa, 0xe2, 0xdb, 0xb8, 0x5d, 0xc7, 0x36,
- 0x7f, 0x9d, 0x31, 0x65, 0xae, 0xaf, 0x71, 0x83, 0xb7, 0xe5, 0xd2, 0x90, 0x1a, 0x5c, 0xb2, 0x17,
- 0x84, 0xfe, 0x3f, 0x30, 0xbf, 0x89, 0x1f, 0x0d, 0xdb, 0x4d, 0x11, 0xc2, 0x5c, 0xdc, 0xba, 0x97,
- 0xe6, 0xfa, 0xa0, 0xd0, 0xf2, 0x97, 0x9f, 0xe4, 0xd9, 0x4a, 0x77, 0xd8, 0x00, 0xc5, 0x1d, 0x98,
- 0xfb, 0x14, 0x16, 0x06, 0xd0, 0x3d, 0x06, 0xf8, 0x00, 0x42, 0xc4, 0xd1, 0x1c, 0x61, 0x18, 0x27,
- 0xc6, 0x41, 0xaf, 0x39, 0x9a, 0xd3, 0x25, 0x8a, 0x18, 0x97, 0xbb, 0x06, 0xaf, 0x14, 0xba, 0x8e,
- 0x45, 0x59, 0x4c, 0x78, 0x13, 0xb8, 0x61, 0x99, 0x0d, 0xa3, 0x65, 0xf8, 0x13, 0xa2, 0xb9, 0x57,
- 0xe1, 0xea, 0xa8, 0x6e, 0xde, 0x49, 0x28, 0x2c, 0x1a, 0xdf, 0x6d, 0x63, 0xda, 0x73, 0xdd, 0x20,
- 0x0e, 0xfa, 0x00, 0x62, 0x82, 0x47, 0xc7, 0xc9, 0xa8, 0xba, 0xe9, 0x71, 0xdb, 0x03, 0x21, 0xb9,
- 0xbf, 0x96, 0x60, 0xb6, 0x6c, 0x5b, 0x9d, 0x0e, 0xd6, 0x85, 0x1e, 0xe5, 0x67, 0xeb, 0xaa, 0x4f,
- 0xc9, 0xa7, 0x3e, 0x37, 0x21, 0x50, 0x2d, 0x0b, 0x2f, 0xf1, 0xce, 0xf3, 0x3a, 0x9f, 0xd5, 0x32,
- 0x7a, 0x97, 0x1f, 0x70, 0x97, 0x30, 0x89, 0x9e, 0xb8, 0xf5, 0xf2, 0xc8, 0x2c, 0x74, 0xef, 0x64,
- 0xbb, 0x24, 0xf7, 0x83, 0x30, 0x5c, 0xf2, 0xbf, 0xb4, 0x95, 0x92, 0xbb, 0xf0, 0xcf, 0x20, 0xec,
- 0xc6, 0xe3, 0xc6, 0x90, 0xdc, 0xc3, 0x20, 0xf2, 0xe2, 0x3c, 0xfc, 0x31, 0x39, 0x17, 0x13, 0xd5,
- 0x20, 0x69, 0x98, 0x0e, 0xb6, 0x5b, 0x58, 0x7b, 0x48, 0x6d, 0x3b, 0x7a, 0x66, 0x22, 0x11, 0x32,
- 0xae, 0x7d, 0x22, 0xfb, 0x00, 0xb8, 0x9d, 0xf3, 0x19, 0xcc, 0xfa, 0x41, 0xdd, 0xf5, 0x8f, 0x8e,
- 0xc0, 0xb3, 0xe5, 0xf5, 0x60, 0xdd, 0x54, 0x81, 0x0f, 0xc8, 0x8d, 0x1e, 0x7e, 0xe4, 0x79, 0x78,
- 0x3c, 0xcb, 0x72, 0xfb, 0xc2, 0x27, 0x52, 0x1e, 0xf0, 0xf6, 0xfa, 0x1c, 0x0d, 0xa6, 0x96, 0x7f,
- 0x4d, 0x8e, 0xc6, 0x7d, 0x08, 0xf1, 0xf8, 0xbb, 0x48, 0x78, 0xde, 0xb9, 0xe8, 0x16, 0x78, 0x80,
- 0x5f, 0x11, 0x68, 0xe9, 0x3f, 0x94, 0x20, 0xe6, 0x7f, 0xdd, 0xc8, 0x80, 0x08, 0x3b, 0x7e, 0x57,
- 0x44, 0x4e, 0xbe, 0xf0, 0x78, 0x08, 0x67, 0xa5, 0xaa, 0x4e, 0xad, 0x4b, 0xdd, 0xb6, 0x3a, 0xbd,
- 0x84, 0xf7, 0xa4, 0x12, 0xa1, 0x04, 0x6a, 0xb9, 0xa7, 0xbf, 0x09, 0x51, 0xef, 0xd0, 0x7d, 0x01,
- 0xd1, 0xc9, 0x17, 0x18, 0x10, 0x1d, 0x39, 0x7f, 0x19, 0xe2, 0x7d, 0x27, 0x86, 0xe6, 0xbd, 0x35,
- 0x04, 0x8b, 0x21, 0xbe, 0x86, 0x33, 0x51, 0x72, 0x3f, 0x0a, 0xc3, 0xec, 0x30, 0xc9, 0xfd, 0x31,
- 0xc8, 0x3e, 0xb9, 0xa5, 0xb6, 0x0c, 0xe2, 0x08, 0xde, 0xbc, 0x31, 0x3a, 0x48, 0xe2, 0x13, 0x7e,
- 0x82, 0x15, 0x13, 0x76, 0xbf, 0x48, 0xfc, 0x14, 0x12, 0x3a, 0x5f, 0xb8, 0x48, 0x8d, 0x88, 0x0a,
- 0xb3, 0x51, 0x61, 0x8d, 0x21, 0x02, 0x50, 0xa0, 0xc7, 0x75, 0x5f, 0x13, 0x41, 0x0d, 0x88, 0x7b,
- 0xe0, 0x2c, 0x28, 0x41, 0x9d, 0xda, 0xe7, 0x17, 0x86, 0x31, 0x77, 0x16, 0x16, 0xa6, 0x68, 0xc2,
- 0x8c, 0x3b, 0x89, 0x1b, 0x4a, 0x89, 0xbe, 0x90, 0x69, 0xdc, 0x83, 0xa9, 0x89, 0xd0, 0xca, 0x77,
- 0x24, 0x98, 0x75, 0x67, 0xf2, 0x3c, 0x3e, 0x51, 0x56, 0x16, 0x2f, 0xd6, 0x8e, 0x8f, 0x32, 0x49,
- 0x71, 0x32, 0x6e, 0x3c, 0xea, 0xb9, 0xf9, 0x2e, 0xa9, 0x0f, 0x00, 0xea, 0xd4, 0x26, 0xa1, 0xed,
- 0x6e, 0xb5, 0x98, 0xb0, 0x49, 0xa8, 0x60, 0x7b, 0x7e, 0x9b, 0x84, 0xfe, 0xac, 0xea, 0xe8, 0xbb,
- 0x12, 0x24, 0x79, 0x6a, 0xb3, 0xdd, 0x75, 0x34, 0x5e, 0xdc, 0xe0, 0x06, 0x46, 0x3e, 0x3e, 0x3e,
- 0xca, 0xcc, 0xb0, 0xd7, 0xbb, 0x21, 0xda, 0xd8, 0xb4, 0x17, 0xf6, 0x6f, 0x7b, 0x28, 0x22, 0x8e,
- 0xe0, 0x11, 0x74, 0x74, 0x17, 0x12, 0x3c, 0x5a, 0xe4, 0x96, 0xb8, 0x32, 0x1b, 0x2f, 0x5e, 0xbc,
- 0xfa, 0xec, 0x28, 0x93, 0x1d, 0x72, 0x4f, 0x78, 0xa0, 0xe9, 0x3e, 0xef, 0xab, 0xc4, 0xf7, 0xfc,
- 0x8f, 0x68, 0x1d, 0x66, 0xb8, 0x29, 0xdc, 0x2b, 0x20, 0x83, 0xf1, 0x13, 0xf2, 0xdc, 0x8c, 0xf6,
- 0xa8, 0x3c, 0xaa, 0x98, 0x9b, 0x87, 0xb9, 0xa1, 0x36, 0xd8, 0x2f, 0x42, 0x30, 0xdf, 0x2f, 0x56,
- 0x3d, 0x2b, 0x49, 0x1d, 0xd4, 0xb7, 0xef, 0x8f, 0x2d, 0x9a, 0xbd, 0x52, 0x32, 0x26, 0x1a, 0xdd,
- 0xa7, 0x41, 0x8d, 0xfb, 0xd9, 0x80, 0xf6, 0xba, 0x00, 0x3e, 0x7b, 0xbd, 0x03, 0xf8, 0xae, 0x0a,
- 0xfb, 0xc8, 0xd3, 0x2c, 0x3c, 0xec, 0xf7, 0xc1, 0x05, 0xe0, 0xd9, 0x78, 0xaf, 0x0c, 0xce, 0xd5,
- 0x2d, 0x3f, 0x95, 0x20, 0xde, 0xb7, 0xb3, 0xdf, 0xa4, 0x72, 0xd9, 0xf6, 0x6c, 0x2b, 0x5e, 0x20,
- 0xf6, 0xce, 0xf9, 0xb7, 0xd5, 0x6f, 0x72, 0xa5, 0xff, 0x56, 0x82, 0x78, 0xdf, 0x41, 0xfe, 0x9a,
- 0xd4, 0xd2, 0x8b, 0x5f, 0x79, 0x1d, 0x12, 0xfd, 0xaf, 0xc8, 0x37, 0x87, 0xf4, 0x62, 0xe6, 0xc8,
- 0x7d, 0x19, 0x42, 0x9c, 0x82, 0x10, 0x24, 0x3e, 0x2c, 0x54, 0x77, 0xaa, 0x9b, 0x2b, 0xea, 0xf2,
- 0x96, 0xa2, 0xae, 0x94, 0xe4, 0x09, 0x14, 0x83, 0x48, 0xb9, 0xb2, 0x5e, 0xa1, 0x44, 0x59, 0x42,
- 0xd3, 0x10, 0x66, 0x4f, 0x95, 0xb2, 0x1c, 0xc8, 0x15, 0x41, 0xe6, 0xd8, 0x7b, 0x98, 0xaa, 0x19,
- 0xea, 0x95, 0xa0, 0x3c, 0xcc, 0x32, 0x0f, 0xa2, 0x4d, 0x2d, 0x2b, 0x7a, 0xbd, 0x55, 0x9f, 0x2d,
- 0x9e, 0xf4, 0x9a, 0xe8, 0xed, 0xdd, 0xd4, 0xda, 0x38, 0xf7, 0x37, 0x41, 0x48, 0xf6, 0x40, 0x5c,
- 0x25, 0xfb, 0x17, 0x52, 0xcf, 0x3f, 0x0a, 0x9d, 0x99, 0x9a, 0x3e, 0x31, 0x5e, 0xb8, 0x4a, 0x22,
- 0x45, 0xfc, 0x21, 0xbd, 0x34, 0xcf, 0x8e, 0x32, 0xc9, 0xc1, 0xc5, 0x92, 0xe7, 0xcc, 0x1d, 0xbb,
- 0x4b, 0x64, 0x81, 0x6f, 0xc3, 0x3c, 0x50, 0x7b, 0x35, 0x7c, 0x3c, 0xf0, 0x6d, 0x98, 0x07, 0xbb,
- 0x4a, 0x55, 0x09, 0xd3, 0xc6, 0x5d, 0xdb, 0x40, 0x6b, 0x10, 0xb4, 0x3a, 0x8e, 0xeb, 0xd2, 0xbf,
- 0x7d, 0xae, 0x2d, 0x6d, 0x75, 0xc4, 0x7e, 0x14, 0x86, 0x81, 0xd6, 0x78, 0xb5, 0x45, 0xef, 0xa0,
- 0x85, 0xd3, 0x3d, 0x96, 0x08, 0x8d, 0xf7, 0xbd, 0x88, 0x74, 0x13, 0x62, 0xfe, 0x13, 0x1b, 0x92,
- 0x0f, 0x2a, 0xf4, 0x87, 0x5d, 0x3e, 0x3f, 0xd6, 0xd2, 0x85, 0xc3, 0xea, 0x4b, 0x11, 0x7e, 0x19,
- 0xa2, 0xde, 0x3e, 0xce, 0x93, 0x29, 0xf5, 0x32, 0x47, 0x3c, 0x2c, 0x39, 0x25, 0x87, 0x72, 0x3f,
- 0x08, 0x40, 0x4c, 0xc1, 0xc4, 0x6a, 0x3d, 0xc4, 0x3a, 0xb5, 0xa0, 0xbc, 0x9a, 0x71, 0x69, 0xfc,
- 0x9a, 0xf1, 0x02, 0x44, 0x7b, 0x1a, 0xe8, 0x1c, 0x75, 0x9b, 0xbd, 0x51, 0xe8, 0x63, 0x88, 0xd7,
- 0xad, 0xae, 0xa9, 0x6b, 0xf6, 0x21, 0xb3, 0xab, 0x98, 0x05, 0x92, 0x18, 0x59, 0x45, 0xe7, 0x5f,
- 0x75, 0xbe, 0x28, 0x06, 0x53, 0xfb, 0x49, 0x89, 0xd5, 0x7d, 0x4f, 0xb9, 0xf7, 0x20, 0xe6, 0x6f,
- 0x45, 0x11, 0x08, 0x6e, 0x6e, 0x6d, 0x56, 0xf8, 0x9d, 0x2c, 0x16, 0x4a, 0x77, 0x97, 0xab, 0xeb,
- 0xeb, 0xb2, 0x44, 0xe9, 0x95, 0x8f, 0xaa, 0x3b, 0x72, 0x80, 0x57, 0xba, 0xd6, 0x76, 0x0a, 0xca,
- 0x8e, 0x1b, 0xbd, 0xcd, 0x61, 0x88, 0xfb, 0xe7, 0xa3, 0x92, 0x8f, 0x9a, 0x9d, 0x8c, 0xd0, 0xe7,
- 0x79, 0xbf, 0x36, 0xe6, 0x8a, 0x5d, 0x0e, 0xb2, 0xfd, 0xa8, 0xb9, 0x7f, 0x0e, 0x00, 0xea, 0xbd,
- 0x78, 0x4f, 0x58, 0x7d, 0x04, 0xd0, 0xd8, 0xc7, 0x8d, 0x83, 0x8e, 0x65, 0x98, 0x8e, 0xf0, 0x35,
- 0xdf, 0x19, 0x8b, 0x77, 0x3c, 0x61, 0x55, 0xf2, 0xc6, 0x2b, 0x3e, 0x2c, 0xf4, 0x07, 0xa3, 0xf3,
- 0x14, 0x93, 0x2c, 0x4f, 0xc1, 0x6e, 0xfe, 0x6f, 0x34, 0x57, 0x91, 0x2e, 0x00, 0xf4, 0x56, 0x8c,
- 0xde, 0x1a, 0xaf, 0x5e, 0xdc, 0xcd, 0xf5, 0xb1, 0xbe, 0x7e, 0x5e, 0xcf, 0xfd, 0x4f, 0x10, 0x50,
- 0xc9, 0xc6, 0x9a, 0x83, 0xa9, 0x88, 0x26, 0xa3, 0x42, 0x1c, 0x45, 0x98, 0xe2, 0x2e, 0x7d, 0xe0,
- 0x3c, 0x2e, 0xbd, 0x97, 0x66, 0x64, 0xde, 0xfc, 0xd7, 0x20, 0xd6, 0xb0, 0x5a, 0xdd, 0xb6, 0xa9,
- 0xb2, 0x9a, 0x2d, 0xe1, 0x7f, 0x7c, 0x69, 0xd4, 0x1b, 0x3b, 0xb1, 0xb8, 0x7c, 0xc9, 0x6a, 0xd1,
- 0x67, 0xef, 0x8b, 0x06, 0x06, 0xc8, 0x7a, 0xa0, 0x2b, 0x10, 0xf5, 0x24, 0x0f, 0x2f, 0x1e, 0x51,
- 0x7a, 0x04, 0x74, 0x0b, 0xa6, 0x34, 0xa2, 0x5a, 0x7b, 0xcc, 0x98, 0x3e, 0xeb, 0x2a, 0x2a, 0x41,
- 0x8d, 0x6c, 0xed, 0xa1, 0xd7, 0x21, 0xd9, 0xd6, 0x1e, 0xab, 0x7b, 0x36, 0xaf, 0x02, 0x57, 0x0d,
- 0xbd, 0xc5, 0x25, 0xa1, 0xa4, 0xcc, 0xb4, 0xb5, 0xc7, 0xcb, 0x82, 0x5e, 0xd5, 0x5b, 0x18, 0xbd,
- 0x05, 0xf1, 0xbd, 0x07, 0xdc, 0xb5, 0xe2, 0x5a, 0x89, 0x17, 0xc0, 0xcd, 0x1c, 0x1f, 0x65, 0xa6,
- 0x97, 0xef, 0xb1, 0x83, 0x61, 0xc9, 0x9d, 0xe9, 0xbd, 0x07, 0xde, 0x43, 0xfa, 0xbf, 0x25, 0x08,
- 0x8b, 0x1d, 0xa1, 0x0e, 0x80, 0x38, 0x1e, 0x43, 0xe7, 0xef, 0x34, 0x5e, 0xbc, 0x77, 0x7c, 0x94,
- 0x89, 0x96, 0x18, 0xb5, 0x5a, 0x26, 0xcf, 0x8e, 0x32, 0x1f, 0x5c, 0x54, 0xa3, 0xb8, 0x20, 0x4a,
- 0x94, 0x4f, 0x52, 0xd5, 0x59, 0x64, 0x79, 0x5f, 0x23, 0xea, 0xbe, 0x41, 0x1c, 0xab, 0x69, 0x6b,
- 0x6d, 0x51, 0x75, 0x11, 0xdb, 0xd7, 0xc8, 0xaa, 0x4b, 0x43, 0x69, 0x6a, 0x9b, 0x3d, 0xe4, 0x25,
- 0x77, 0xbc, 0x64, 0xc7, 0x7b, 0x46, 0xb7, 0xe0, 0x92, 0x37, 0x58, 0xa5, 0x27, 0x55, 0xef, 0x36,
- 0x0e, 0x30, 0xd3, 0x41, 0x54, 0xb8, 0xcf, 0x7a, 0x8d, 0x1b, 0xda, 0xe3, 0x22, 0x6f, 0xca, 0x5d,
- 0x82, 0x59, 0xdf, 0x6b, 0xf5, 0x2c, 0x69, 0x0c, 0x32, 0x2f, 0x0e, 0xf1, 0x7d, 0x10, 0x71, 0x0f,
- 0x66, 0x06, 0x3e, 0x7d, 0x13, 0xf2, 0xd7, 0x1f, 0x71, 0xec, 0xff, 0x56, 0x2e, 0x5f, 0xe2, 0x8f,
- 0xae, 0x6f, 0x90, 0x68, 0xf4, 0x3d, 0xe7, 0xde, 0x84, 0xa4, 0x37, 0x8d, 0x27, 0x48, 0xae, 0x40,
- 0x94, 0x55, 0x05, 0xb4, 0x35, 0xfb, 0xc0, 0xad, 0x0c, 0xf0, 0x08, 0xb9, 0x0c, 0xbc, 0xc4, 0xa2,
- 0x90, 0xf7, 0xd6, 0xd9, 0x8a, 0x4b, 0x56, 0xbb, 0xc3, 0x5f, 0xbb, 0x1b, 0xa6, 0xcc, 0xc2, 0xe2,
- 0xf0, 0x0e, 0xde, 0xe6, 0x7e, 0x2a, 0x43, 0x78, 0x5b, 0x3b, 0x6c, 0x59, 0x9a, 0x8e, 0xb2, 0x30,
- 0xed, 0x16, 0xe3, 0xb9, 0x1b, 0x8a, 0x2a, 0x7e, 0x52, 0x3f, 0x1f, 0xcb, 0x2c, 0x7d, 0xe6, 0xe3,
- 0x63, 0x03, 0x12, 0x5d, 0x82, 0x6d, 0xca, 0x62, 0x2a, 0xfb, 0x90, 0x83, 0xeb, 0xb3, 0x62, 0xf1,
- 0xd9, 0x51, 0xe6, 0xce, 0x78, 0xdc, 0x81, 0x1b, 0x5d, 0xdb, 0x70, 0x0e, 0xf3, 0xb5, 0x7b, 0xeb,
- 0xbb, 0x02, 0x8a, 0x0a, 0x23, 0x4b, 0x89, 0x77, 0xfd, 0x8f, 0xa2, 0xe6, 0x92, 0xbe, 0x69, 0xb5,
- 0x6d, 0x34, 0x6c, 0x8b, 0xb8, 0x19, 0x26, 0x41, 0xdd, 0x60, 0x44, 0xf4, 0x1a, 0xcc, 0xec, 0x19,
- 0x26, 0xcb, 0x08, 0xbb, 0xfd, 0x78, 0x72, 0x29, 0xe1, 0x92, 0x45, 0xc7, 0x87, 0x90, 0xf0, 0x15,
- 0x3b, 0x52, 0x2e, 0x0f, 0x31, 0x2e, 0xdf, 0x3a, 0x3e, 0xca, 0xc4, 0x7b, 0x52, 0x83, 0x73, 0xfa,
- 0xf3, 0xd8, 0x4e, 0xf1, 0xde, 0x34, 0x94, 0xcf, 0xe7, 0x60, 0x8a, 0x7d, 0x39, 0xca, 0xab, 0xd9,
- 0x15, 0xfe, 0x80, 0x2a, 0x10, 0x17, 0xb1, 0x16, 0xfe, 0x59, 0xa9, 0xa8, 0x10, 0xf5, 0xe7, 0x15,
- 0xdc, 0x0f, 0x4f, 0xf3, 0x15, 0xb3, 0x61, 0xe9, 0x58, 0xaf, 0xd0, 0x67, 0x45, 0x84, 0x96, 0xd9,
- 0x03, 0x41, 0x2b, 0x90, 0x68, 0xb4, 0xb0, 0x66, 0x76, 0x3b, 0x2e, 0x0e, 0x1a, 0x13, 0x27, 0x2e,
- 0xc6, 0x09, 0xa0, 0x4d, 0x40, 0x7b, 0xac, 0x56, 0xcd, 0xbf, 0x2a, 0x96, 0x8f, 0x1d, 0x07, 0x4c,
- 0x66, 0x63, 0x95, 0xde, 0xca, 0xd0, 0x55, 0x88, 0x9b, 0x96, 0xd9, 0xd0, 0xcc, 0x06, 0x6e, 0x31,
- 0xd1, 0xcd, 0x53, 0xb8, 0xfd, 0x44, 0x54, 0x84, 0x10, 0x2f, 0x4b, 0x10, 0x4e, 0xf2, 0xf5, 0x71,
- 0xbf, 0xf9, 0x58, 0x9d, 0x50, 0xc4, 0x48, 0x54, 0x81, 0xb0, 0xcd, 0xab, 0x6d, 0x58, 0xa9, 0xc2,
- 0x99, 0xc1, 0x2a, 0x5f, 0x45, 0xcf, 0xea, 0x84, 0xe2, 0x8e, 0x45, 0x3b, 0x6e, 0x61, 0x33, 0x57,
- 0xd4, 0xa2, 0x24, 0x35, 0x3f, 0xa6, 0x0b, 0xd2, 0x03, 0xec, 0x43, 0xa1, 0x1b, 0x34, 0x58, 0xf6,
- 0x8d, 0x15, 0x31, 0x8c, 0xde, 0x60, 0x5f, 0xa1, 0x0c, 0xdd, 0x20, 0x1f, 0x89, 0x36, 0xa9, 0xa5,
- 0xe1, 0x1a, 0x0f, 0xac, 0xbc, 0x61, 0xfa, 0xd6, 0x17, 0xce, 0x63, 0x60, 0xaf, 0x4e, 0x28, 0x3e,
- 0x04, 0x74, 0x0f, 0xa6, 0x1b, 0x3d, 0x19, 0x98, 0x9a, 0x61, 0x80, 0x37, 0xcf, 0xa5, 0x08, 0x57,
- 0xa9, 0xf2, 0xeb, 0x51, 0xd1, 0x27, 0x90, 0x20, 0x7d, 0x0e, 0x59, 0xea, 0x12, 0x43, 0x7d, 0xe3,
- 0xbc, 0x01, 0xe1, 0xd5, 0x09, 0x65, 0x00, 0x09, 0xfd, 0x5f, 0x90, 0x9d, 0x81, 0x2c, 0x14, 0xcb,
- 0xfa, 0x8f, 0xae, 0x17, 0x3e, 0x25, 0xd7, 0xb6, 0x3a, 0xa1, 0x9c, 0x40, 0x43, 0x9f, 0xc1, 0x0c,
- 0xe9, 0xff, 0x9c, 0x2e, 0xb5, 0xc0, 0x26, 0x78, 0x73, 0xfc, 0x0f, 0xf0, 0x7a, 0xf8, 0x83, 0x58,
- 0x14, 0xde, 0xec, 0x4f, 0x66, 0xb1, 0xea, 0x97, 0xd1, 0xf0, 0xc3, 0x93, 0x6b, 0x14, 0x7e, 0x00,
- 0x0b, 0xdd, 0x85, 0x68, 0xdb, 0x55, 0x2a, 0xac, 0x76, 0x64, 0xb4, 0x0f, 0x33, 0xa8, 0xe7, 0x56,
- 0x27, 0x94, 0xde, 0x78, 0xf4, 0xff, 0x25, 0xb8, 0xa2, 0x8d, 0xc8, 0x7a, 0xb1, 0x5a, 0x93, 0xd1,
- 0x81, 0xfe, 0x31, 0x72, 0x6b, 0xab, 0x13, 0xca, 0xc8, 0x59, 0x90, 0x0d, 0xf3, 0xda, 0x50, 0xa5,
- 0x96, 0x5a, 0x3c, 0xd3, 0xd0, 0x1e, 0xa9, 0x2e, 0x57, 0x27, 0x94, 0x53, 0x90, 0x51, 0x03, 0x92,
- 0x64, 0xf0, 0x8b, 0xc6, 0xd4, 0xcb, 0x6c, 0xba, 0xb7, 0xce, 0xe4, 0x83, 0x93, 0x1f, 0x54, 0xae,
- 0x4e, 0x28, 0x27, 0xf1, 0xd0, 0xcb, 0x10, 0xe3, 0xa5, 0xd7, 0x36, 0xd6, 0x88, 0x65, 0xa6, 0xae,
- 0x70, 0x05, 0xcc, 0x68, 0x0a, 0x23, 0xa1, 0x6f, 0x40, 0xc6, 0xc6, 0x8e, 0x6d, 0x30, 0x5b, 0x0e,
- 0x3f, 0xc6, 0x8d, 0x2e, 0xb3, 0xfe, 0xf6, 0x34, 0xa3, 0xd5, 0xb5, 0xb1, 0xda, 0xb2, 0x9a, 0xa9,
- 0x2c, 0x93, 0xf1, 0xa3, 0x1d, 0x31, 0x81, 0x50, 0x71, 0x01, 0x96, 0xf9, 0x78, 0xe5, 0x8a, 0x7d,
- 0x5a, 0xd3, 0xba, 0xd5, 0x2c, 0x46, 0x21, 0x2c, 0xd2, 0xe6, 0x5e, 0x59, 0x0c, 0x2f, 0x88, 0xe1,
- 0xa5, 0x30, 0x69, 0xf9, 0x73, 0xb9, 0x7f, 0x8c, 0x41, 0xc4, 0x33, 0x5e, 0x96, 0x00, 0x79, 0xf6,
- 0x69, 0xef, 0x33, 0x0a, 0x6a, 0x56, 0x04, 0xe8, 0x01, 0xb8, 0x6d, 0xbd, 0x2f, 0x29, 0xee, 0xf4,
- 0x15, 0x42, 0x8e, 0xf3, 0x2d, 0x33, 0x65, 0x50, 0xaf, 0x52, 0x92, 0xaa, 0x7b, 0x51, 0x69, 0xef,
- 0xa9, 0x7b, 0x9e, 0xde, 0x48, 0xb8, 0x64, 0xa1, 0xee, 0xaf, 0x41, 0xc2, 0xee, 0x9a, 0x2c, 0xd7,
- 0x2d, 0x82, 0x4a, 0xdc, 0x28, 0x8f, 0x0b, 0xaa, 0x88, 0x0b, 0x95, 0x06, 0x34, 0xd0, 0x8d, 0x33,
- 0x35, 0x90, 0xbb, 0xf7, 0x55, 0xc9, 0x53, 0x41, 0xcb, 0x83, 0x2a, 0xe8, 0xf5, 0xb3, 0x55, 0x90,
- 0x0f, 0xc6, 0xd3, 0x41, 0xbb, 0x43, 0x75, 0xd0, 0xd2, 0x98, 0x42, 0xd4, 0x87, 0xd8, 0xaf, 0x84,
- 0x4a, 0x03, 0x4a, 0xe8, 0xc6, 0x99, 0x4a, 0xc8, 0xbf, 0x47, 0xa1, 0x85, 0xb6, 0x86, 0x68, 0xa1,
- 0x9b, 0xe7, 0xf2, 0x77, 0x57, 0xa5, 0x3e, 0x35, 0xa4, 0x0c, 0x53, 0x43, 0xf9, 0xf1, 0xd4, 0x90,
- 0x0f, 0xb2, 0x4f, 0x0f, 0x7d, 0x7a, 0x42, 0x0f, 0xc9, 0x67, 0x0b, 0xf2, 0xa1, 0x91, 0xc4, 0x55,
- 0xe9, 0x84, 0x22, 0xd2, 0x86, 0x28, 0xa2, 0xe4, 0x99, 0xf2, 0xe1, 0xb4, 0x0a, 0x8a, 0x55, 0x69,
- 0x88, 0x26, 0xfa, 0x08, 0x62, 0x7e, 0xed, 0xc1, 0xca, 0xe4, 0x46, 0xeb, 0xb9, 0x53, 0xbe, 0x03,
- 0x67, 0x3c, 0xe0, 0x6b, 0x42, 0x5f, 0x3b, 0xa9, 0x84, 0x66, 0xcf, 0x04, 0x3f, 0xa5, 0x06, 0x63,
- 0x55, 0x3a, 0xa9, 0x85, 0xd6, 0xfd, 0x5a, 0x68, 0xee, 0x4c, 0x1b, 0xe5, 0x84, 0x1b, 0xb4, 0x2a,
- 0xf9, 0xd5, 0xd0, 0x77, 0x25, 0xb8, 0x32, 0x4a, 0x8f, 0x08, 0x03, 0xe0, 0xfd, 0x0b, 0xaa, 0x21,
- 0xdf, 0xa4, 0x23, 0xa7, 0x41, 0xe4, 0x54, 0x3d, 0xb4, 0x70, 0x66, 0x8d, 0xd6, 0x68, 0xaf, 0x6c,
- 0x55, 0x3a, 0x55, 0x11, 0xe9, 0xc3, 0x14, 0x51, 0xea, 0xec, 0x2f, 0x58, 0x4f, 0xfb, 0x1c, 0x7f,
- 0x55, 0x1a, 0xa6, 0x89, 0x1e, 0x40, 0xc4, 0xb1, 0xb5, 0x06, 0x4b, 0x2d, 0x5e, 0x62, 0xf9, 0xe3,
- 0xfb, 0x22, 0xa4, 0x54, 0x1a, 0x3f, 0xa4, 0x44, 0x11, 0x0c, 0xb3, 0xe9, 0xfe, 0x4b, 0xd9, 0x9d,
- 0x62, 0xb2, 0x10, 0x53, 0x58, 0xfc, 0x54, 0xc2, 0x6c, 0x9e, 0xaa, 0x5e, 0x04, 0x88, 0xb8, 0xa5,
- 0x5f, 0x3e, 0x45, 0x93, 0xfb, 0xbe, 0x04, 0x93, 0x6b, 0x56, 0x1d, 0xbd, 0xe4, 0x4b, 0x5c, 0xc4,
- 0xc5, 0x5a, 0xa6, 0xd6, 0xac, 0xba, 0xc8, 0x40, 0xbc, 0xdf, 0x1b, 0x2d, 0xe2, 0x40, 0xaf, 0x8c,
- 0x38, 0x0d, 0x2f, 0xef, 0xe3, 0x0d, 0x42, 0x5f, 0x85, 0x70, 0x87, 0xbb, 0xc1, 0x42, 0xef, 0xe4,
- 0x46, 0x8d, 0xe7, 0x3d, 0x15, 0x77, 0x48, 0xee, 0xbf, 0x02, 0x70, 0xf9, 0x54, 0xad, 0x8a, 0xe6,
- 0xfb, 0x52, 0x17, 0x51, 0x37, 0x01, 0x81, 0xbe, 0x08, 0xf3, 0x3d, 0x15, 0xce, 0xcb, 0x1f, 0xfb,
- 0xb4, 0xd6, 0x9c, 0xd7, 0xca, 0x2a, 0x20, 0x85, 0xee, 0x7a, 0x03, 0x7a, 0x74, 0x15, 0x9b, 0x03,
- 0x0e, 0x30, 0xf2, 0xda, 0x2a, 0xa6, 0xab, 0xed, 0x4c, 0x98, 0x36, 0x4c, 0xe2, 0x50, 0xcf, 0xca,
- 0xcd, 0x15, 0x4f, 0x15, 0x37, 0xc4, 0x21, 0x7e, 0x79, 0xac, 0x17, 0xca, 0xab, 0x51, 0xef, 0xad,
- 0x57, 0x05, 0x0e, 0x7b, 0x89, 0xd0, 0x7b, 0x52, 0xc0, 0x9d, 0xa1, 0xaa, 0xa3, 0xb7, 0x5d, 0xa7,
- 0x76, 0x6a, 0x4c, 0x0f, 0x51, 0xb8, 0xbd, 0xaf, 0xc1, 0x8c, 0x63, 0x77, 0x4d, 0xfe, 0xad, 0x3d,
- 0x47, 0x60, 0x91, 0x2a, 0x25, 0xe1, 0x91, 0x59, 0xff, 0xd7, 0x6f, 0xf8, 0xff, 0x57, 0x9c, 0x0d,
- 0x4b, 0xc7, 0x28, 0x01, 0xb0, 0xad, 0x11, 0xd2, 0xd9, 0xb7, 0x35, 0x82, 0xe5, 0x09, 0x14, 0x86,
- 0xc9, 0xbb, 0x1b, 0x35, 0x59, 0x7a, 0xfd, 0x23, 0x7f, 0x92, 0xa7, 0xac, 0x14, 0xaa, 0x9b, 0xd5,
- 0xcd, 0x15, 0x75, 0xb3, 0xb0, 0x51, 0xa9, 0xc9, 0x13, 0x28, 0x05, 0x73, 0x1f, 0x16, 0xaa, 0x3b,
- 0x22, 0xeb, 0xa3, 0x56, 0x37, 0x77, 0x2a, 0xca, 0xfd, 0xc2, 0xba, 0x2c, 0xa1, 0x79, 0x40, 0xca,
- 0x56, 0xe9, 0x6e, 0xad, 0x5c, 0x54, 0x4b, 0x5b, 0x1b, 0xdb, 0x85, 0xd2, 0x4e, 0x75, 0x6b, 0x53,
- 0x0e, 0xa0, 0x08, 0x04, 0xcb, 0x5b, 0x9b, 0x15, 0x19, 0x5e, 0xff, 0xf9, 0x94, 0xa8, 0xc2, 0xbd,
- 0x0a, 0xd3, 0xbb, 0x9b, 0xb5, 0xed, 0x4a, 0xa9, 0xba, 0x5c, 0xad, 0x94, 0xe5, 0x89, 0xf4, 0xec,
- 0x93, 0xa7, 0xd9, 0x19, 0xda, 0xb4, 0x6b, 0x92, 0x0e, 0x6e, 0x30, 0xc3, 0x03, 0xa5, 0x21, 0x54,
- 0x2c, 0x94, 0xee, 0xee, 0x6e, 0xcb, 0x52, 0x3a, 0xf1, 0xe4, 0x69, 0x16, 0xd8, 0xc7, 0x0e, 0xdc,
- 0x44, 0xb8, 0xc2, 0xe3, 0xd7, 0x5b, 0x4a, 0x45, 0x0e, 0xa4, 0x67, 0x9e, 0x3c, 0xcd, 0x4e, 0xb3,
- 0xb0, 0xb8, 0x50, 0xfc, 0xaf, 0x41, 0xbc, 0x56, 0x5a, 0xad, 0x6c, 0x14, 0xd4, 0xd2, 0x6a, 0x61,
- 0x73, 0xa5, 0x22, 0x4f, 0xa6, 0xe7, 0x9e, 0x3c, 0xcd, 0xca, 0x83, 0xca, 0x83, 0x4e, 0x51, 0xdd,
- 0xd8, 0xde, 0x52, 0x76, 0xe4, 0x60, 0x6f, 0x0a, 0xae, 0xb3, 0x51, 0x0e, 0x80, 0x8f, 0x5e, 0xae,
- 0x54, 0xca, 0xf2, 0x54, 0x1a, 0x3d, 0x79, 0x9a, 0x4d, 0xd0, 0xf6, 0x9e, 0x2a, 0x46, 0xd7, 0x20,
- 0x56, 0x52, 0x2a, 0x85, 0x9d, 0x8a, 0x5a, 0xdb, 0x29, 0xec, 0xd4, 0xe4, 0x50, 0x6f, 0x27, 0x3e,
- 0xf5, 0x8a, 0xf2, 0x90, 0x2c, 0xec, 0xee, 0x6c, 0xa9, 0x7d, 0x7d, 0xc3, 0xe9, 0x85, 0x27, 0x4f,
- 0xb3, 0xb3, 0xb4, 0x2f, 0x95, 0x6d, 0xfe, 0xfe, 0x5f, 0x00, 0xb9, 0x6f, 0xfd, 0xea, 0x4a, 0x49,
- 0x8e, 0xa4, 0xe7, 0x9f, 0x3c, 0xcd, 0xa2, 0xc1, 0x2d, 0xac, 0x94, 0xe8, 0xa5, 0xd8, 0xf9, 0x78,
- 0xbb, 0x52, 0xae, 0xd4, 0x4a, 0x6a, 0xff, 0xb6, 0xa3, 0xe9, 0xd4, 0x93, 0xa7, 0xd9, 0x39, 0x3a,
- 0xe6, 0xc4, 0xd6, 0x6f, 0x82, 0x5c, 0xdb, 0x51, 0x2a, 0x85, 0x0d, 0xb5, 0xba, 0xb9, 0x52, 0xa9,
- 0xb1, 0x97, 0x05, 0xbd, 0x25, 0x0d, 0x28, 0x42, 0xba, 0x85, 0xcd, 0xca, 0x87, 0x03, 0xf8, 0xd3,
- 0xbd, 0xfe, 0x03, 0xba, 0x0d, 0x65, 0x21, 0xba, 0x51, 0x5d, 0x51, 0x0a, 0x0c, 0x37, 0x96, 0x4e,
- 0x3e, 0x79, 0x9a, 0x8d, 0xd3, 0x7e, 0x9e, 0xa6, 0x42, 0x55, 0xc8, 0xb0, 0x43, 0xa9, 0x6d, 0x17,
- 0x36, 0xd5, 0xd2, 0xd6, 0xe6, 0x72, 0x75, 0x45, 0x55, 0x2a, 0xa5, 0xad, 0xcd, 0x52, 0x75, 0xbd,
- 0xca, 0xc7, 0xc5, 0xd3, 0x57, 0x9f, 0x3c, 0xcd, 0x66, 0xdd, 0x23, 0x3a, 0x55, 0xaf, 0xbc, 0x07,
- 0x97, 0x39, 0xd4, 0xbd, 0x75, 0x7e, 0xb8, 0x7e, 0x0e, 0x4c, 0xa4, 0x17, 0x9f, 0x3c, 0xcd, 0xa6,
- 0x3d, 0x90, 0x93, 0x1a, 0xe2, 0x4d, 0x40, 0xe2, 0x28, 0x94, 0xca, 0xf6, 0x7a, 0xb5, 0xc4, 0x27,
- 0x9f, 0x49, 0x5f, 0x7e, 0xf2, 0x34, 0x7b, 0xa9, 0x77, 0x18, 0x3e, 0x71, 0x9f, 0x8e, 0xfc, 0xce,
- 0xf7, 0x17, 0x27, 0xfe, 0xfc, 0x07, 0x8b, 0x13, 0xc5, 0xeb, 0x3f, 0xf9, 0x8f, 0xc5, 0x89, 0x9f,
- 0x1c, 0x2f, 0x4a, 0x3f, 0x3b, 0x5e, 0x94, 0x7e, 0x71, 0xbc, 0x28, 0xfd, 0xfb, 0xf1, 0xa2, 0xf4,
- 0xbd, 0x5f, 0x2d, 0x4e, 0xfc, 0xec, 0x57, 0x8b, 0x13, 0xbf, 0xf8, 0xd5, 0xe2, 0xc4, 0x27, 0x21,
- 0x2e, 0x03, 0xeb, 0x21, 0x16, 0xe1, 0x7b, 0xeb, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x9d, 0x77,
- 0x4e, 0xe2, 0x36, 0x4d, 0x00, 0x00,
+ // 6077 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x7c, 0x5d, 0x6c, 0x1b, 0xd9,
+ 0x75, 0xbf, 0x86, 0xa2, 0xf8, 0x71, 0x44, 0x52, 0xa3, 0x2b, 0x59, 0xa2, 0x19, 0xaf, 0xa8, 0xe5,
+ 0xda, 0xbb, 0xf6, 0x26, 0xa6, 0x76, 0xbd, 0xc9, 0x66, 0xd7, 0xc9, 0x7a, 0x97, 0x5f, 0x92, 0x46,
+ 0xd6, 0x97, 0x87, 0x92, 0xf7, 0xeb, 0x9f, 0xcc, 0x7f, 0xc8, 0xb9, 0xa2, 0xa6, 0x22, 0x67, 0xe8,
+ 0xb9, 0x43, 0xdb, 0x4a, 0x80, 0x20, 0x48, 0x1a, 0xa0, 0x30, 0xfa, 0x90, 0x02, 0x6d, 0x5f, 0x5a,
+ 0x17, 0x45, 0x93, 0x00, 0x7d, 0x68, 0x50, 0x34, 0x28, 0xda, 0x3e, 0xf6, 0x31, 0x0f, 0x69, 0x11,
+ 0xa4, 0x28, 0x9a, 0xf6, 0x41, 0x69, 0x95, 0x97, 0x3e, 0xf4, 0xa1, 0xe8, 0xa3, 0xd1, 0x87, 0xe2,
+ 0x7e, 0xcc, 0x70, 0x48, 0x51, 0x14, 0x25, 0x3b, 0xc9, 0x8b, 0xcc, 0x7b, 0xee, 0xbd, 0xbf, 0xfb,
+ 0x75, 0xee, 0x39, 0xe7, 0x9e, 0x73, 0xc6, 0x30, 0xf7, 0x5b, 0x76, 0x8d, 0x2c, 0xd1, 0x3f, 0xed,
+ 0x1a, 0xfb, 0x27, 0xdf, 0x76, 0x6c, 0xd7, 0x46, 0x97, 0xeb, 0x76, 0xfd, 0xc0, 0xb1, 0xf5, 0xfa,
+ 0x7e, 0x9e, 0x3c, 0x68, 0xe6, 0x59, 0x0d, 0x6f, 0x95, 0xb9, 0x84, 0x1d, 0xc7, 0x76, 0x68, 0x7b,
+ 0xfe, 0x83, 0xf7, 0xc8, 0xcc, 0x36, 0xec, 0x86, 0xcd, 0x7e, 0x2e, 0xd1, 0x5f, 0x82, 0x3a, 0xcd,
+ 0x30, 0xda, 0xb5, 0x25, 0xbd, 0x6d, 0x0a, 0x12, 0xf2, 0x48, 0x86, 0xee, 0xea, 0x82, 0x96, 0xf6,
+ 0x68, 0xa6, 0x7d, 0x73, 0xcf, 0x76, 0x5a, 0xba, 0xeb, 0xc1, 0xbe, 0x42, 0x1e, 0x34, 0x97, 0xea,
+ 0xba, 0xab, 0x37, 0xed, 0xc6, 0x92, 0x81, 0x49, 0xbd, 0x5d, 0x5b, 0x22, 0xae, 0xd3, 0xa9, 0xbb,
+ 0x1d, 0x07, 0x1b, 0xa2, 0x51, 0x76, 0x40, 0x23, 0x17, 0x5b, 0xba, 0xe5, 0x7a, 0xf8, 0x1d, 0xd7,
+ 0x6c, 0x2e, 0xed, 0x37, 0xeb, 0x4b, 0xae, 0xd9, 0xc2, 0xc4, 0xd5, 0x5b, 0x6d, 0x51, 0xf3, 0x32,
+ 0xed, 0x4a, 0xea, 0xfb, 0xb8, 0xa5, 0xd7, 0xf7, 0x75, 0xab, 0x81, 0x9d, 0x25, 0x3e, 0x46, 0xbd,
+ 0x5d, 0x13, 0x4d, 0xae, 0xd6, 0x9b, 0x1d, 0xe2, 0x62, 0xe7, 0x21, 0x76, 0x88, 0x69, 0x5b, 0x4b,
+ 0xa2, 0xa8, 0x89, 0xb2, 0x37, 0x87, 0x86, 0x6d, 0x37, 0x9a, 0x78, 0x89, 0x95, 0x6a, 0x9d, 0xbd,
+ 0xfe, 0x91, 0x72, 0x3f, 0x08, 0xc1, 0x7c, 0x51, 0xaf, 0x1f, 0x74, 0xda, 0x15, 0xab, 0xee, 0x1c,
+ 0xb6, 0x5d, 0xd3, 0xb6, 0xb6, 0xd8, 0x5f, 0x82, 0x64, 0x18, 0x3f, 0xc0, 0x87, 0x69, 0x69, 0x51,
+ 0xba, 0x9e, 0x50, 0xe9, 0x4f, 0xf4, 0x1e, 0x84, 0x5b, 0xb6, 0x81, 0xd3, 0xa1, 0x45, 0xe9, 0x7a,
+ 0xea, 0xd6, 0x8d, 0xfc, 0xa9, 0xe7, 0x91, 0xef, 0xa2, 0x6d, 0xd8, 0x06, 0x56, 0x59, 0x37, 0x54,
+ 0x83, 0xd8, 0x41, 0x8b, 0x68, 0xa6, 0xb5, 0x67, 0xa7, 0xc7, 0x17, 0xa5, 0xeb, 0x93, 0xb7, 0x6e,
+ 0x0f, 0x81, 0x38, 0x65, 0x5a, 0xf9, 0xbb, 0x1b, 0x55, 0xc5, 0xda, 0xb3, 0x8b, 0x93, 0xc7, 0x47,
+ 0xd9, 0xa8, 0x28, 0xa8, 0xd1, 0x83, 0x16, 0xa1, 0x3f, 0x32, 0x5b, 0xe0, 0xd1, 0xe8, 0xfc, 0x3b,
+ 0x8e, 0xc9, 0xe6, 0x1f, 0x57, 0xe9, 0x4f, 0xf4, 0x39, 0x40, 0x98, 0xe3, 0x61, 0x43, 0xa3, 0x27,
+ 0xad, 0xd1, 0x05, 0x86, 0xd8, 0x02, 0x65, 0xbf, 0xa6, 0xac, 0xbb, 0xfa, 0x5d, 0x7c, 0x78, 0x3b,
+ 0xfc, 0x9f, 0x7f, 0x9a, 0x95, 0xf8, 0xdf, 0xdc, 0x37, 0xc7, 0x21, 0xd5, 0x9d, 0x0a, 0x83, 0x5f,
+ 0x85, 0x08, 0x3b, 0x22, 0xcc, 0x46, 0x48, 0xdd, 0x7a, 0x63, 0xa4, 0xed, 0xa0, 0x5d, 0xf3, 0x55,
+ 0xd6, 0x4f, 0x15, 0xfd, 0x11, 0x82, 0x30, 0xd1, 0x9b, 0xae, 0x98, 0x08, 0xfb, 0x8d, 0xfe, 0x48,
+ 0x82, 0xc5, 0xfe, 0x19, 0x15, 0x0f, 0xef, 0x6e, 0x54, 0x37, 0x74, 0x7a, 0xce, 0x77, 0xf1, 0xa1,
+ 0x52, 0x4e, 0x8f, 0x2f, 0x8e, 0x5f, 0x9f, 0xbc, 0xb5, 0x35, 0xfa, 0xc0, 0x95, 0x33, 0x10, 0x2b,
+ 0x96, 0xeb, 0x1c, 0xaa, 0x67, 0x0e, 0x9c, 0xa9, 0xc2, 0xb5, 0x91, 0xa0, 0x82, 0x3c, 0x14, 0xe7,
+ 0x3c, 0x34, 0x0b, 0x13, 0x0f, 0xf5, 0x66, 0x07, 0x8b, 0xd5, 0xf2, 0xc2, 0xed, 0xd0, 0x3b, 0x52,
+ 0x6e, 0x1e, 0x22, 0x7c, 0x63, 0x50, 0x12, 0xe2, 0x85, 0x4a, 0xf5, 0xd6, 0x17, 0xde, 0x5e, 0x29,
+ 0x6d, 0xc8, 0x63, 0xe2, 0x08, 0x7e, 0x37, 0x04, 0x73, 0x55, 0xd7, 0xc1, 0x7a, 0x4b, 0xb1, 0x1a,
+ 0x98, 0xd0, 0x35, 0x95, 0xb1, 0xab, 0x9b, 0x4d, 0x82, 0xae, 0x41, 0x8a, 0xb0, 0x1a, 0x4d, 0x37,
+ 0x0c, 0x07, 0x13, 0x22, 0x06, 0x4c, 0x72, 0x6a, 0x81, 0x13, 0xd1, 0x0d, 0x88, 0x8b, 0x66, 0xa6,
+ 0x91, 0x0e, 0x2f, 0x4a, 0xd7, 0xc3, 0xc5, 0xc4, 0xf1, 0x51, 0x36, 0x26, 0x50, 0xcb, 0x6a, 0x8c,
+ 0x57, 0x2b, 0x06, 0x7a, 0x13, 0xc2, 0xa4, 0xad, 0x5b, 0x6c, 0x92, 0x93, 0xb7, 0xe6, 0x03, 0x3b,
+ 0x2c, 0x84, 0x42, 0xbe, 0xda, 0xd6, 0xad, 0x62, 0xf8, 0xc7, 0x47, 0xd9, 0x31, 0x95, 0x35, 0x45,
+ 0x45, 0x00, 0xe2, 0xea, 0x8e, 0xab, 0xd1, 0x3b, 0x26, 0xf8, 0xfb, 0xa5, 0x40, 0x47, 0x7a, 0xdb,
+ 0xf3, 0xfb, 0xcd, 0x7a, 0x7e, 0xc7, 0xbb, 0x83, 0xa2, 0x7b, 0x9c, 0x75, 0xa3, 0x54, 0x3a, 0x43,
+ 0x2e, 0x22, 0xe8, 0x0c, 0x27, 0xba, 0x33, 0xdc, 0x61, 0x44, 0x3a, 0x43, 0x5e, 0xad, 0x18, 0xb9,
+ 0x7f, 0x19, 0x87, 0xf9, 0xbe, 0xed, 0xd8, 0x76, 0xec, 0x06, 0x5b, 0xe8, 0x32, 0x24, 0xea, 0x1d,
+ 0xd7, 0x7e, 0x88, 0x1d, 0x3e, 0x19, 0x69, 0xf4, 0xc9, 0x4c, 0x8a, 0x8e, 0x6c, 0x3a, 0xdf, 0x00,
+ 0xd4, 0xd6, 0x1d, 0xd7, 0xa4, 0xe0, 0x5a, 0x5b, 0xa0, 0xa7, 0x43, 0x8c, 0xeb, 0x94, 0x21, 0x5c,
+ 0x77, 0xca, 0xbc, 0xf2, 0xdb, 0x1e, 0x98, 0x47, 0x61, 0x4c, 0x22, 0x46, 0x9e, 0x6e, 0xf7, 0xd7,
+ 0x66, 0x1a, 0x30, 0x7d, 0xa2, 0x0b, 0x52, 0x01, 0x99, 0x0c, 0x19, 0x1b, 0x9a, 0x2f, 0xce, 0xce,
+ 0xb3, 0xc4, 0x69, 0xaf, 0xbb, 0x5f, 0x91, 0x79, 0x22, 0xc1, 0xdc, 0xe0, 0xc9, 0x0d, 0xe0, 0xe0,
+ 0x4f, 0x82, 0x1c, 0x3c, 0x79, 0xab, 0xfc, 0x22, 0x36, 0x22, 0x78, 0x0f, 0x14, 0x48, 0xf3, 0x7e,
+ 0x2a, 0x6e, 0x37, 0xcd, 0xba, 0x1e, 0xe4, 0xf4, 0x9b, 0x30, 0x41, 0x99, 0x8d, 0x32, 0xf8, 0xf8,
+ 0x10, 0xc6, 0x54, 0x79, 0xab, 0x9c, 0x0e, 0x97, 0x4f, 0x40, 0xf9, 0x1b, 0x59, 0x06, 0xc0, 0x8f,
+ 0xdb, 0xa6, 0xc3, 0xa8, 0x62, 0x03, 0x33, 0x79, 0xae, 0x31, 0xf2, 0x9e, 0xc6, 0x08, 0xec, 0x5e,
+ 0x8c, 0xee, 0xde, 0x77, 0x7f, 0x91, 0x95, 0xd4, 0x40, 0xbf, 0xdc, 0x0f, 0x43, 0x70, 0x99, 0x5e,
+ 0x5b, 0xa3, 0xd3, 0xc4, 0xdb, 0x3b, 0xd5, 0xd2, 0xbe, 0x6e, 0x5a, 0xa6, 0xd5, 0x50, 0x71, 0xdd,
+ 0x76, 0x0c, 0xf4, 0x7b, 0x12, 0x64, 0x28, 0x14, 0xae, 0xf7, 0x1c, 0x97, 0xe6, 0xb0, 0x6a, 0xae,
+ 0x5b, 0x8a, 0xd5, 0x7f, 0x3b, 0xca, 0xbe, 0xd5, 0x30, 0xdd, 0xfd, 0x4e, 0x2d, 0x5f, 0xb7, 0x5b,
+ 0x4b, 0xfe, 0x9a, 0x8c, 0x5a, 0xf7, 0xf7, 0x52, 0xfb, 0xa0, 0xb1, 0xc4, 0x34, 0x66, 0xa7, 0x63,
+ 0x1a, 0xf9, 0xdd, 0x5d, 0xa5, 0x7c, 0x7c, 0x94, 0x4d, 0x6f, 0x7b, 0xe0, 0xfe, 0x3c, 0xf9, 0xc8,
+ 0x6a, 0xba, 0x7d, 0x4a, 0x0d, 0xba, 0x0f, 0x11, 0xbd, 0xce, 0xd6, 0xcc, 0xf5, 0xd8, 0x9d, 0x61,
+ 0x07, 0x78, 0xda, 0xca, 0xf2, 0xdb, 0x3b, 0xd5, 0x02, 0x43, 0x51, 0x05, 0x5a, 0xee, 0x2a, 0xc4,
+ 0x7d, 0x22, 0x02, 0x88, 0xec, 0x6e, 0x97, 0x0b, 0x3b, 0x15, 0x79, 0x0c, 0x4d, 0x42, 0x54, 0xad,
+ 0xac, 0x57, 0x0a, 0xd5, 0x8a, 0x2c, 0xe5, 0xfe, 0x29, 0x0a, 0x49, 0xae, 0xda, 0xbc, 0x33, 0xed,
+ 0x15, 0x1c, 0xd2, 0x85, 0x04, 0xc7, 0x1d, 0x88, 0x61, 0x8b, 0x6f, 0xb0, 0x60, 0xcb, 0x91, 0x10,
+ 0xa2, 0xd8, 0x62, 0xdb, 0x83, 0x2e, 0x73, 0x5d, 0x49, 0xa5, 0x56, 0xbc, 0x18, 0x3d, 0x3e, 0xca,
+ 0x8e, 0xef, 0xaa, 0x0a, 0x57, 0x9a, 0xdf, 0x96, 0x60, 0xa6, 0xe3, 0x98, 0x44, 0xab, 0x1d, 0x6a,
+ 0x4d, 0xbb, 0xae, 0x37, 0x4d, 0xf7, 0x50, 0x3b, 0x78, 0x98, 0x9e, 0x60, 0x1c, 0x78, 0xe7, 0x4c,
+ 0x0d, 0x2e, 0x96, 0x99, 0xdf, 0x75, 0x4c, 0x52, 0x3c, 0x5c, 0x17, 0x08, 0x77, 0x1f, 0xf2, 0xbb,
+ 0x3f, 0x7b, 0x7c, 0x94, 0x95, 0x77, 0x55, 0x25, 0x58, 0x75, 0x5f, 0x95, 0x3b, 0x7d, 0x8d, 0xd1,
+ 0x97, 0x21, 0x63, 0xe0, 0xb6, 0x83, 0xeb, 0x3a, 0x65, 0xa4, 0x1a, 0x43, 0xd6, 0x5a, 0xba, 0x65,
+ 0xee, 0x61, 0xe2, 0x32, 0x61, 0x9e, 0x50, 0xd3, 0xdd, 0x16, 0x7c, 0xe8, 0x0d, 0x51, 0x8f, 0x74,
+ 0x5f, 0xf1, 0x53, 0x49, 0x66, 0x73, 0x4b, 0x22, 0x1d, 0x61, 0x1b, 0x75, 0xeb, 0xfc, 0x36, 0x88,
+ 0x3a, 0x8d, 0x4f, 0x58, 0x4b, 0x2a, 0x4c, 0x05, 0x86, 0x60, 0x36, 0x4e, 0x9c, 0xe1, 0xdf, 0x18,
+ 0x59, 0x3d, 0xab, 0x29, 0xdc, 0x6b, 0x62, 0x9c, 0x71, 0x7b, 0xa2, 0xbf, 0x89, 0xdb, 0xf3, 0x0e,
+ 0xa4, 0xea, 0x76, 0xb3, 0x89, 0x19, 0x9b, 0x6b, 0xbb, 0xaa, 0x92, 0x8e, 0x31, 0xa6, 0x99, 0x3e,
+ 0x3e, 0xca, 0x26, 0x4b, 0x7e, 0x0d, 0x65, 0x9f, 0x64, 0x3d, 0x58, 0x44, 0xbf, 0x2f, 0xc1, 0x15,
+ 0x22, 0xee, 0x93, 0xd6, 0x76, 0x89, 0x56, 0x17, 0x37, 0xca, 0x5b, 0x0f, 0xb0, 0xfd, 0xfa, 0xfc,
+ 0x45, 0xae, 0x63, 0xf1, 0xa5, 0xe3, 0xa3, 0xec, 0xe9, 0x72, 0x48, 0xbd, 0xec, 0x0d, 0xbc, 0xed,
+ 0x92, 0xde, 0xaa, 0x4c, 0x09, 0x2e, 0x0d, 0x64, 0xcd, 0xb3, 0x6c, 0x97, 0x78, 0x50, 0x66, 0xcb,
+ 0x90, 0xe2, 0xbc, 0xe2, 0x49, 0xd7, 0xdc, 0x9f, 0xcc, 0x43, 0x4a, 0xc5, 0xc4, 0xb5, 0x1d, 0xec,
+ 0x5d, 0xf4, 0xe0, 0x25, 0x0d, 0x5f, 0xe0, 0x92, 0xfe, 0x48, 0x82, 0x19, 0xfa, 0x90, 0x70, 0xcc,
+ 0xb6, 0x6b, 0x3b, 0x9a, 0x83, 0x1f, 0x39, 0xa6, 0x8b, 0x3d, 0x85, 0x5c, 0x18, 0xb2, 0x6f, 0xbd,
+ 0x13, 0xc9, 0x97, 0x7d, 0x10, 0x55, 0x60, 0xf0, 0xcb, 0x78, 0xe7, 0x5b, 0xbf, 0xc8, 0xde, 0x1e,
+ 0x89, 0x95, 0x4e, 0xbe, 0x6d, 0xf2, 0x4a, 0x59, 0x45, 0xc6, 0x09, 0x60, 0x74, 0x05, 0xc2, 0xf4,
+ 0x32, 0x33, 0x5b, 0x35, 0x5e, 0x8c, 0x1d, 0x1f, 0x65, 0xc3, 0xf4, 0xba, 0xab, 0x8c, 0x8a, 0x5c,
+ 0x98, 0x15, 0x77, 0xd9, 0x17, 0x2d, 0xec, 0xea, 0x44, 0xd9, 0x92, 0xbe, 0x3c, 0xfa, 0x92, 0xf8,
+ 0xee, 0x7b, 0x47, 0xc8, 0x1e, 0x08, 0x7c, 0xf7, 0x50, 0xed, 0x44, 0x0d, 0xda, 0x86, 0x14, 0xb5,
+ 0xfe, 0x6b, 0x3a, 0xc1, 0x1a, 0x9d, 0x32, 0x49, 0xcb, 0x6c, 0xbc, 0xfe, 0xab, 0x4a, 0x1e, 0x34,
+ 0x69, 0x9b, 0x7c, 0x59, 0x34, 0x0e, 0xec, 0x5b, 0xd2, 0x08, 0xd0, 0x08, 0x5a, 0x81, 0x49, 0x57,
+ 0xaf, 0x35, 0x3d, 0x38, 0x2e, 0x1b, 0x5f, 0x3d, 0x05, 0x6e, 0x87, 0xb6, 0x0c, 0x60, 0x81, 0xeb,
+ 0x11, 0x98, 0x52, 0x76, 0x0f, 0xdb, 0x1e, 0x4e, 0x8a, 0xe1, 0x5c, 0x3b, 0x0d, 0xe7, 0xb0, 0x1d,
+ 0x84, 0x89, 0xbb, 0xa2, 0x4c, 0xd0, 0x1a, 0x24, 0xf8, 0xf3, 0x51, 0xe0, 0x4c, 0x31, 0x9c, 0xd7,
+ 0x4e, 0xc1, 0x61, 0x56, 0xb7, 0x1e, 0x40, 0x9a, 0x24, 0x3e, 0x85, 0x62, 0x45, 0xb9, 0xd1, 0x49,
+ 0xd2, 0x97, 0x18, 0xcc, 0xeb, 0xa7, 0x4d, 0x87, 0x9b, 0xa6, 0xd6, 0x9e, 0xfd, 0xa1, 0xe9, 0xee,
+ 0xef, 0x12, 0xbd, 0x81, 0x3d, 0x0e, 0x16, 0x00, 0x68, 0x09, 0x26, 0xa9, 0x71, 0xe9, 0x98, 0x06,
+ 0xd6, 0x8c, 0x1a, 0x13, 0xc0, 0xf1, 0x62, 0xea, 0xf8, 0x28, 0x0b, 0x5b, 0x82, 0x5c, 0x2e, 0xaa,
+ 0xe0, 0x35, 0x29, 0xd7, 0xd0, 0x67, 0x61, 0xba, 0xed, 0xe0, 0xb6, 0xee, 0x60, 0xad, 0x6e, 0xb7,
+ 0xda, 0x4d, 0xec, 0x62, 0x83, 0x09, 0x9c, 0x98, 0x2a, 0x8b, 0x8a, 0x92, 0x47, 0xe7, 0xcf, 0x00,
+ 0xdd, 0xa5, 0x2f, 0x4c, 0x82, 0x1d, 0xda, 0x32, 0xce, 0x5a, 0x26, 0x19, 0x55, 0x11, 0x44, 0x74,
+ 0x08, 0x73, 0xe4, 0x90, 0xb8, 0xb8, 0xa5, 0xb1, 0x7d, 0x27, 0x5a, 0xcb, 0x6c, 0x38, 0x54, 0x69,
+ 0xa4, 0xa7, 0xd9, 0xfa, 0x4a, 0xa3, 0x73, 0x5d, 0x95, 0xe1, 0xb0, 0xf3, 0x24, 0x1b, 0x02, 0x85,
+ 0xbf, 0xa1, 0x66, 0xc9, 0x80, 0x2a, 0xf4, 0x16, 0x5c, 0xea, 0x5e, 0x11, 0xa2, 0xb5, 0x3b, 0xb5,
+ 0xa6, 0x49, 0xf6, 0x31, 0x17, 0x7d, 0x31, 0x75, 0x36, 0x50, 0xb9, 0xed, 0xd5, 0xa1, 0xc3, 0x9e,
+ 0x5b, 0x5f, 0xa7, 0xbb, 0xa3, 0x37, 0x70, 0x7a, 0x72, 0x51, 0xba, 0x3e, 0x51, 0x5c, 0x7d, 0x76,
+ 0x94, 0x2d, 0x8f, 0x7c, 0x65, 0x09, 0x6e, 0x2d, 0xb9, 0x0e, 0xc6, 0x01, 0x09, 0x50, 0x12, 0x78,
+ 0xc1, 0xcb, 0xeb, 0xd1, 0x90, 0x0a, 0xd0, 0x55, 0x49, 0xe9, 0xc4, 0x85, 0xf5, 0x65, 0x00, 0x05,
+ 0x59, 0x80, 0x1c, 0xfc, 0x50, 0x6f, 0x9a, 0x86, 0xee, 0x62, 0xcd, 0xb4, 0x0c, 0xfc, 0x18, 0x93,
+ 0x34, 0x62, 0x5b, 0xff, 0xee, 0xe8, 0x5b, 0xaf, 0xfa, 0x18, 0x0a, 0x85, 0xf0, 0x6c, 0x7b, 0xa7,
+ 0x97, 0x8c, 0x09, 0xfa, 0x4b, 0x09, 0x90, 0x7f, 0xdb, 0x5b, 0xb6, 0x61, 0xee, 0x99, 0xd8, 0x21,
+ 0xe9, 0x19, 0x36, 0xe0, 0x07, 0xe7, 0x10, 0x9a, 0x02, 0x63, 0xc3, 0x83, 0x78, 0x31, 0x32, 0x73,
+ 0xda, 0xe8, 0xc7, 0x45, 0x57, 0x21, 0x65, 0xe0, 0x5a, 0xa7, 0xa1, 0xb5, 0xf5, 0x0e, 0xc1, 0x9a,
+ 0x6d, 0xa5, 0x67, 0x99, 0xbe, 0x49, 0x30, 0xea, 0x36, 0x25, 0x6e, 0x59, 0x99, 0x3f, 0x0b, 0xc1,
+ 0xf4, 0x09, 0x41, 0x8e, 0x76, 0x20, 0x64, 0x72, 0xbb, 0x3a, 0x59, 0xa4, 0x2a, 0x3e, 0xa4, 0x94,
+ 0x9f, 0x1d, 0x3d, 0xd7, 0x04, 0x43, 0xa6, 0x81, 0x1a, 0x10, 0xa7, 0x57, 0x8d, 0xbf, 0x4b, 0x43,
+ 0x0c, 0x7c, 0x8d, 0xbe, 0x4b, 0xb7, 0x19, 0xf1, 0xb9, 0x87, 0x88, 0x71, 0x70, 0xc5, 0x40, 0x59,
+ 0x98, 0x74, 0x6d, 0x0d, 0x3f, 0x36, 0x89, 0x6b, 0x5a, 0x0d, 0x66, 0x8f, 0xc6, 0x54, 0x70, 0xed,
+ 0x8a, 0xa0, 0xa0, 0x9b, 0x30, 0x69, 0xe1, 0x47, 0x9a, 0x51, 0xd3, 0x2c, 0x5d, 0xa8, 0xd1, 0x78,
+ 0x31, 0x79, 0x7c, 0x94, 0x8d, 0x6f, 0xe2, 0x47, 0xe5, 0xe2, 0xa6, 0xde, 0xc2, 0x6a, 0xdc, 0xc2,
+ 0x8f, 0xca, 0x35, 0xfa, 0x33, 0xf3, 0xc7, 0x21, 0x40, 0x27, 0x55, 0x03, 0xfa, 0x3b, 0x09, 0xae,
+ 0x78, 0x36, 0xad, 0xed, 0x98, 0x0d, 0xd3, 0xd2, 0x9b, 0x3d, 0xc6, 0x2d, 0x7f, 0x5e, 0x7d, 0xf2,
+ 0x3c, 0xfa, 0x47, 0x18, 0xbc, 0x5b, 0x02, 0xbe, 0xdf, 0xf0, 0xbd, 0x42, 0xed, 0x2f, 0x6e, 0xf8,
+ 0x9e, 0x68, 0x72, 0x5f, 0x4d, 0x77, 0x4e, 0xe9, 0x9c, 0xb9, 0x0b, 0x2f, 0x0d, 0x05, 0x3e, 0x8f,
+ 0xd9, 0x92, 0xf9, 0x96, 0x04, 0xf3, 0xa7, 0x18, 0x03, 0x41, 0x9c, 0x24, 0xc7, 0xb9, 0xd7, 0xfb,
+ 0xf0, 0xfd, 0xd2, 0x73, 0x18, 0x1c, 0xc1, 0x49, 0xac, 0xc0, 0xe5, 0x53, 0xe5, 0xe8, 0x59, 0xab,
+ 0x89, 0x05, 0x81, 0xfe, 0x55, 0x82, 0xa9, 0x3e, 0xb1, 0x80, 0x3e, 0x0e, 0xdc, 0x07, 0xe5, 0xf8,
+ 0x28, 0x1b, 0x65, 0x83, 0xbc, 0x90, 0x4b, 0x71, 0x70, 0xf2, 0x52, 0x6c, 0xd2, 0x11, 0xd8, 0xc0,
+ 0x6c, 0x84, 0xf7, 0x2f, 0x3c, 0x02, 0x87, 0xe8, 0x5e, 0x8c, 0xcc, 0xdf, 0x4b, 0x20, 0xf7, 0x4b,
+ 0x20, 0xb4, 0x05, 0x32, 0x7e, 0xec, 0x3a, 0xba, 0x16, 0x30, 0x19, 0xa4, 0xf3, 0x98, 0x0c, 0x29,
+ 0xd6, 0x7d, 0xc7, 0xb7, 0x1b, 0x3e, 0x85, 0xa4, 0x83, 0x1b, 0xd4, 0xb0, 0xaf, 0xdb, 0xd6, 0x9e,
+ 0xd9, 0x10, 0x27, 0xfd, 0xf6, 0xc8, 0x76, 0x51, 0x5e, 0x65, 0xdd, 0x4b, 0xac, 0xb7, 0x9a, 0x70,
+ 0x02, 0xa5, 0xcc, 0x37, 0x25, 0x98, 0x1b, 0x2c, 0x44, 0x07, 0xf0, 0xda, 0x76, 0x2f, 0xaf, 0xdd,
+ 0xbe, 0xb8, 0x9c, 0x0e, 0x70, 0xc8, 0x5a, 0x38, 0x26, 0xc9, 0xa1, 0xb5, 0x70, 0x2c, 0x29, 0xa7,
+ 0x72, 0x6f, 0x50, 0x66, 0x61, 0x3d, 0x7d, 0x8f, 0xc8, 0x4b, 0x00, 0xfb, 0x66, 0x63, 0x5f, 0x7b,
+ 0xa4, 0xbb, 0xd8, 0x11, 0x8e, 0xef, 0x38, 0xa5, 0x7c, 0x48, 0x09, 0xb9, 0x9f, 0x25, 0x20, 0xa9,
+ 0xb4, 0xda, 0xb6, 0xe3, 0x7a, 0x16, 0xfd, 0x3a, 0x44, 0xb8, 0x0d, 0x21, 0xb6, 0x3d, 0x3f, 0x64,
+ 0x9a, 0x3d, 0x3d, 0xb9, 0x0d, 0x28, 0x94, 0x96, 0xc0, 0x40, 0x5b, 0x10, 0xe5, 0x86, 0x17, 0x49,
+ 0xcf, 0x33, 0xb8, 0xa5, 0x91, 0xe1, 0xb8, 0x09, 0xe7, 0x99, 0x5b, 0x02, 0x05, 0x29, 0x30, 0x41,
+ 0x39, 0x83, 0xa4, 0x33, 0x0c, 0xee, 0xe6, 0xe8, 0xb3, 0x3b, 0x6c, 0x7b, 0x93, 0xe3, 0x08, 0xbe,
+ 0x19, 0x1f, 0x1a, 0x68, 0xc6, 0xbf, 0x07, 0x11, 0x1e, 0x21, 0x11, 0x7e, 0xcf, 0xec, 0x00, 0xbf,
+ 0x94, 0xb2, 0xb5, 0x6c, 0x36, 0xf1, 0x32, 0x6b, 0xe6, 0x2d, 0x9c, 0x77, 0x42, 0xaf, 0x42, 0x8c,
+ 0x10, 0x57, 0x23, 0xe6, 0xd7, 0xb8, 0x44, 0x1f, 0xe7, 0xce, 0xfd, 0x6a, 0x75, 0xa7, 0x6a, 0x7e,
+ 0x0d, 0xab, 0x51, 0x42, 0x5c, 0xfa, 0x03, 0x2d, 0x00, 0xb3, 0x0d, 0x89, 0x4e, 0x2d, 0x3e, 0x66,
+ 0xdc, 0x8d, 0xab, 0x01, 0x0a, 0xc3, 0x39, 0x30, 0xdb, 0xda, 0xde, 0x01, 0xe1, 0x16, 0x95, 0xc0,
+ 0x39, 0x30, 0xdb, 0xcb, 0x77, 0x89, 0x1a, 0xa5, 0x95, 0xcb, 0x07, 0x04, 0x65, 0x20, 0xf6, 0x48,
+ 0x6f, 0x36, 0xd9, 0x43, 0x6c, 0x82, 0xa1, 0xf8, 0xe5, 0x5e, 0x55, 0x17, 0xf9, 0xd5, 0xaa, 0x3a,
+ 0xf1, 0xf4, 0x69, 0xeb, 0xee, 0x3e, 0x7b, 0xcc, 0xc7, 0x55, 0xe0, 0xa4, 0x6d, 0xdd, 0xdd, 0x47,
+ 0x69, 0x88, 0xf2, 0x75, 0x91, 0x74, 0x6c, 0x71, 0xfc, 0x7a, 0x42, 0xf5, 0x8a, 0xe8, 0x35, 0x98,
+ 0xe2, 0x3e, 0x4c, 0xcd, 0x30, 0x1d, 0x5c, 0x77, 0x9b, 0x87, 0xcc, 0x1a, 0x8c, 0xa9, 0x29, 0x4e,
+ 0x2e, 0x0b, 0x2a, 0xba, 0x01, 0x72, 0xbf, 0xf9, 0xcc, 0xac, 0xb8, 0x98, 0x3a, 0xd5, 0x67, 0x3d,
+ 0x53, 0x4b, 0x5b, 0xb0, 0x4d, 0xc0, 0x2c, 0x4d, 0x73, 0x4b, 0x5b, 0x54, 0x74, 0x4d, 0xd2, 0x1b,
+ 0x20, 0x0b, 0xdb, 0xb9, 0xdb, 0x36, 0xc9, 0x71, 0x39, 0xbd, 0xdb, 0x34, 0x0f, 0x33, 0x6d, 0xdd,
+ 0x21, 0x58, 0xab, 0x75, 0x2c, 0xa3, 0x89, 0x35, 0x8e, 0x95, 0x4e, 0xb1, 0xd6, 0xd3, 0xac, 0xaa,
+ 0xc8, 0x6a, 0x38, 0x0b, 0x9f, 0xe5, 0xf3, 0x98, 0xfb, 0x4d, 0xf8, 0x3c, 0xae, 0x83, 0x6c, 0xe0,
+ 0x3d, 0xbd, 0xd3, 0x74, 0x35, 0xd3, 0x12, 0x7c, 0x7a, 0x99, 0x9a, 0xdf, 0x6a, 0x4a, 0xd0, 0x15,
+ 0x8b, 0x73, 0xe8, 0x37, 0x60, 0xde, 0xb7, 0x35, 0xdb, 0x8e, 0xd9, 0xd2, 0x9d, 0x43, 0x8d, 0x0b,
+ 0xc1, 0xf4, 0x67, 0x98, 0xa9, 0xb2, 0xfc, 0xec, 0x28, 0x5b, 0xbc, 0x28, 0xff, 0x70, 0xe1, 0xca,
+ 0x6c, 0x9c, 0x4b, 0xde, 0x30, 0xdb, 0x7c, 0x14, 0x5e, 0x95, 0xf9, 0x41, 0x08, 0x26, 0x98, 0x68,
+ 0x41, 0xb7, 0x21, 0x4c, 0x7b, 0x09, 0x7f, 0xe2, 0xa8, 0x4f, 0x51, 0xd6, 0x07, 0x21, 0x08, 0x33,
+ 0xeb, 0x0a, 0x31, 0x9e, 0x64, 0xbf, 0xd1, 0x3c, 0x44, 0x09, 0x7e, 0xa0, 0x3d, 0xd4, 0x9b, 0xe9,
+ 0x19, 0x76, 0x65, 0x22, 0x04, 0x3f, 0xb8, 0xaf, 0x37, 0xd1, 0x25, 0x88, 0x98, 0x44, 0xb3, 0xf0,
+ 0x23, 0x66, 0xa5, 0xc6, 0xd4, 0x09, 0x93, 0x6c, 0xe2, 0x47, 0xe8, 0x33, 0x10, 0x7f, 0xa4, 0x13,
+ 0x0d, 0xb7, 0xda, 0xee, 0x21, 0x3b, 0xb5, 0x18, 0xbd, 0x64, 0xa4, 0x42, 0xcb, 0xcc, 0xcc, 0xd3,
+ 0x9d, 0x06, 0x76, 0xb5, 0xba, 0xdd, 0xe4, 0xef, 0xca, 0x38, 0x7d, 0x06, 0x53, 0x52, 0xc9, 0x6e,
+ 0x92, 0xb5, 0x70, 0x2c, 0x24, 0x8f, 0xaf, 0x85, 0x63, 0xe3, 0x72, 0x78, 0x2d, 0x1c, 0x0b, 0xcb,
+ 0x13, 0x6b, 0xe1, 0xd8, 0x84, 0x1c, 0x59, 0x0b, 0xc7, 0x22, 0x72, 0x74, 0x2d, 0x1c, 0x8b, 0xca,
+ 0xb1, 0xb5, 0x70, 0x2c, 0x26, 0xc7, 0xd7, 0xc2, 0xb1, 0xb8, 0x0c, 0x6b, 0xe1, 0x18, 0xc8, 0x93,
+ 0x6b, 0xe1, 0xd8, 0xa4, 0x9c, 0x58, 0x0b, 0xc7, 0x12, 0x72, 0x92, 0x0b, 0xf9, 0xb5, 0x70, 0x2c,
+ 0x25, 0x4f, 0xad, 0x85, 0x63, 0x53, 0xb2, 0xbc, 0x16, 0x8e, 0xc9, 0xf2, 0xf4, 0x5a, 0x38, 0x36,
+ 0x2d, 0xa3, 0x4c, 0x45, 0xc4, 0x9a, 0x74, 0xf4, 0xa5, 0x9e, 0x7d, 0x1a, 0xf9, 0x89, 0xcc, 0x3a,
+ 0x65, 0x0a, 0x10, 0xa6, 0xa2, 0x12, 0xbd, 0xdb, 0x03, 0x32, 0xa2, 0xf2, 0x65, 0x5d, 0x72, 0x3f,
+ 0x92, 0x40, 0xae, 0xe2, 0x07, 0x1d, 0x6c, 0xd5, 0xf1, 0x7d, 0xbd, 0x59, 0xda, 0xef, 0x58, 0x07,
+ 0xe8, 0x55, 0x98, 0xaa, 0xd3, 0x1f, 0x1a, 0x77, 0x0c, 0xd3, 0x4d, 0x97, 0xd8, 0xa6, 0x27, 0x19,
+ 0xb9, 0x4a, 0xa9, 0x74, 0xef, 0x5f, 0x02, 0x10, 0xed, 0x28, 0x4b, 0x86, 0x58, 0x93, 0x38, 0x6f,
+ 0x42, 0xb9, 0xb1, 0x0f, 0xc6, 0xb1, 0x1f, 0x31, 0xf9, 0xdc, 0x03, 0xa3, 0xda, 0x8f, 0xd0, 0x12,
+ 0xcc, 0x5a, 0xf8, 0xb1, 0xab, 0xf5, 0x37, 0x66, 0xb2, 0x58, 0x9d, 0xa6, 0x75, 0xa5, 0x60, 0x87,
+ 0xdc, 0x3f, 0x84, 0x60, 0xca, 0x9b, 0xb4, 0xa7, 0x0b, 0xf7, 0x40, 0xa6, 0x0c, 0x62, 0x1a, 0x9a,
+ 0x6b, 0x73, 0x24, 0x4f, 0x2b, 0xbe, 0x37, 0xcc, 0xa3, 0xd7, 0x8b, 0x42, 0xcb, 0x8a, 0xb1, 0x63,
+ 0xb3, 0xe1, 0xb8, 0x71, 0xa0, 0x26, 0x49, 0x90, 0x96, 0xd9, 0x85, 0x94, 0xd7, 0x89, 0x53, 0x50,
+ 0x09, 0x22, 0x3d, 0xe3, 0x7d, 0x76, 0x84, 0xf1, 0xbc, 0xad, 0x56, 0x45, 0xd7, 0xcc, 0xd7, 0x01,
+ 0x9d, 0x1c, 0x3b, 0x68, 0x98, 0x4c, 0x70, 0xc3, 0x64, 0xab, 0xd7, 0x30, 0x79, 0xf7, 0x7c, 0x6b,
+ 0x0b, 0x4c, 0x3b, 0xe8, 0x3e, 0xfc, 0xce, 0x38, 0xa4, 0xb8, 0x06, 0xf6, 0x6d, 0x11, 0x2a, 0x8f,
+ 0xa9, 0xb8, 0x37, 0xad, 0x46, 0x37, 0xf4, 0x46, 0xd7, 0x17, 0x52, 0x65, 0xaf, 0xc2, 0x6f, 0xfc,
+ 0x0a, 0xb5, 0xdb, 0x74, 0xa3, 0x37, 0x46, 0x17, 0xa2, 0xf6, 0x97, 0x6e, 0xf8, 0x8d, 0xae, 0x41,
+ 0x8a, 0xd9, 0xde, 0xdd, 0x56, 0xe3, 0xac, 0x55, 0x92, 0x51, 0xfd, 0x66, 0x45, 0x48, 0x92, 0xb6,
+ 0x1e, 0x88, 0xf7, 0x85, 0x87, 0x86, 0x9a, 0x84, 0x2a, 0x4f, 0xd0, 0x3e, 0x41, 0x43, 0xca, 0xc1,
+ 0xa4, 0xd3, 0xc2, 0x5a, 0xdb, 0xe6, 0xde, 0xb0, 0x71, 0x35, 0xce, 0x29, 0xdb, 0x36, 0x41, 0xbb,
+ 0x8c, 0x55, 0xd8, 0x5e, 0x68, 0x06, 0xdf, 0x9c, 0x74, 0x64, 0xa0, 0x6f, 0x69, 0xc8, 0x76, 0xaa,
+ 0x53, 0xa4, 0x8f, 0x03, 0x3f, 0x80, 0x28, 0xe9, 0xb4, 0xa8, 0x34, 0x64, 0xda, 0x74, 0xf2, 0xd6,
+ 0xe2, 0x80, 0x39, 0x17, 0x3b, 0xcd, 0x83, 0xad, 0x76, 0x95, 0xb7, 0xf3, 0x0d, 0x26, 0x5e, 0xcc,
+ 0xfd, 0x95, 0x04, 0xf3, 0xf4, 0x96, 0xf2, 0xeb, 0x5e, 0x62, 0xb9, 0x17, 0x1e, 0xba, 0x0e, 0x51,
+ 0x66, 0x66, 0xfb, 0xcf, 0x89, 0xd5, 0xe3, 0xa3, 0x6c, 0x84, 0xb6, 0x7e, 0x6e, 0xa3, 0x20, 0x42,
+ 0x81, 0x15, 0xe6, 0x1e, 0x72, 0x1d, 0xdd, 0x22, 0x2c, 0x34, 0x48, 0x0f, 0xbe, 0x85, 0x5b, 0x35,
+ 0xec, 0xf0, 0xe3, 0x4c, 0xa8, 0xb3, 0x3d, 0x95, 0x1b, 0xbc, 0x2e, 0x97, 0x81, 0x74, 0xff, 0x94,
+ 0x7d, 0x27, 0xf4, 0xff, 0x83, 0xb9, 0x4d, 0xfc, 0x68, 0xd0, 0x6a, 0x8a, 0x10, 0xe5, 0xe2, 0xd6,
+ 0xbb, 0x34, 0xd7, 0xfb, 0x85, 0x56, 0x30, 0xfd, 0x24, 0xcf, 0x66, 0xba, 0xc3, 0x3a, 0xa8, 0x5e,
+ 0xc7, 0xdc, 0xa7, 0x30, 0xdf, 0x87, 0xee, 0x33, 0xc0, 0x07, 0x10, 0x21, 0xae, 0xee, 0x0a, 0xc3,
+ 0x38, 0x35, 0x0a, 0x7a, 0xd5, 0xd5, 0xdd, 0x0e, 0x51, 0x45, 0xbf, 0xdc, 0x35, 0x78, 0xa5, 0xd0,
+ 0x71, 0x6d, 0xca, 0x62, 0xe2, 0x35, 0x81, 0xeb, 0xb6, 0x55, 0x37, 0x9b, 0x66, 0x30, 0x20, 0x9a,
+ 0x7b, 0x15, 0xae, 0x0e, 0x6b, 0xe6, 0xef, 0x84, 0xca, 0xbc, 0xf1, 0x9d, 0x16, 0xa6, 0x2d, 0xd7,
+ 0x4d, 0xe2, 0xa2, 0x0f, 0x20, 0x21, 0x78, 0x74, 0x94, 0x88, 0xaa, 0x17, 0x1e, 0x77, 0x7c, 0x10,
+ 0x92, 0xfb, 0x6b, 0x09, 0x66, 0xca, 0x8e, 0xdd, 0x6e, 0x63, 0x43, 0xe8, 0x51, 0xbe, 0xb7, 0x9e,
+ 0xfa, 0x94, 0x02, 0xea, 0x73, 0x13, 0x42, 0x4a, 0x59, 0xbc, 0x12, 0xef, 0x3c, 0xef, 0xe3, 0x53,
+ 0x29, 0xa3, 0x77, 0xf9, 0x06, 0x77, 0x08, 0x93, 0xe8, 0xa9, 0x5b, 0x2f, 0x0f, 0x8d, 0x42, 0x77,
+ 0x77, 0xb6, 0x43, 0x72, 0xff, 0x3b, 0x01, 0x97, 0x82, 0x87, 0xb6, 0x52, 0xf2, 0x26, 0xfe, 0x15,
+ 0x88, 0x7a, 0xfe, 0xb8, 0x11, 0x24, 0xf7, 0x20, 0x88, 0xbc, 0xd8, 0x8f, 0xa0, 0x4f, 0xce, 0xc3,
+ 0x44, 0x1f, 0xf9, 0xaf, 0x25, 0x1e, 0xb1, 0xb8, 0x7d, 0x61, 0xf4, 0x72, 0xdf, 0xcb, 0xa9, 0xc7,
+ 0x68, 0x67, 0x2a, 0xee, 0x57, 0x64, 0xb4, 0xdf, 0x87, 0x08, 0xf7, 0x65, 0x8b, 0xe0, 0xe1, 0x9d,
+ 0x8b, 0x2e, 0x81, 0x3b, 0xcb, 0x55, 0x81, 0x96, 0xf9, 0x43, 0x09, 0x12, 0xc1, 0xad, 0x43, 0x26,
+ 0xc4, 0xd8, 0xb6, 0x79, 0xe2, 0x66, 0xfc, 0x85, 0xfb, 0x16, 0xf8, 0xb1, 0x28, 0x06, 0xb5, 0xd4,
+ 0x0c, 0xc7, 0x6e, 0x77, 0x83, 0xc7, 0xe3, 0x6a, 0x8c, 0x12, 0xa8, 0x15, 0x9c, 0xf9, 0x06, 0xc4,
+ 0xfd, 0x4d, 0x0f, 0x38, 0x17, 0xc7, 0x5f, 0xa0, 0x73, 0x71, 0xe8, 0xf8, 0x65, 0x48, 0xf6, 0xec,
+ 0x18, 0x9a, 0xf3, 0xe7, 0x10, 0x2e, 0x46, 0xf8, 0x1c, 0xce, 0x44, 0x09, 0x9a, 0x90, 0xb9, 0x1f,
+ 0x46, 0x61, 0x66, 0x90, 0x44, 0xfc, 0x18, 0xe4, 0x80, 0x3c, 0xd0, 0x9a, 0x26, 0x71, 0x05, 0x9f,
+ 0xde, 0x18, 0xee, 0x7c, 0x08, 0x08, 0x15, 0xc1, 0x96, 0x29, 0xa7, 0x57, 0xd4, 0x7c, 0x0a, 0x29,
+ 0x83, 0x2f, 0x42, 0x84, 0x1c, 0x44, 0xe6, 0xd6, 0x30, 0x77, 0xc1, 0x00, 0xc1, 0x22, 0xd0, 0x93,
+ 0x46, 0xa0, 0x8a, 0xa0, 0x3a, 0x24, 0x7d, 0x70, 0xf6, 0xd8, 0xa7, 0x8f, 0xc5, 0xe7, 0x17, 0x32,
+ 0x09, 0x6f, 0x14, 0xf6, 0xfc, 0x6f, 0xc0, 0x94, 0x37, 0x88, 0xe7, 0xa2, 0x88, 0xbf, 0x90, 0x61,
+ 0xbc, 0x8d, 0xa9, 0x0a, 0x97, 0xc5, 0xb7, 0x25, 0x98, 0xf1, 0x46, 0xf2, 0x5f, 0x52, 0x22, 0x5d,
+ 0x2b, 0x59, 0xac, 0x1e, 0x1f, 0x65, 0xa7, 0xc5, 0xce, 0x78, 0x7e, 0x9e, 0xe7, 0xe6, 0xc1, 0x69,
+ 0xa3, 0x0f, 0xd0, 0xa0, 0xba, 0x9e, 0xd6, 0x7b, 0x59, 0x58, 0x42, 0xd7, 0x53, 0xdb, 0xfd, 0xf9,
+ 0x75, 0x3d, 0xfd, 0xa9, 0x18, 0xe8, 0x3b, 0x12, 0x4c, 0xf3, 0x90, 0x61, 0xab, 0xe3, 0xea, 0x3c,
+ 0x69, 0xc0, 0x73, 0x38, 0x7c, 0x7c, 0x7c, 0x94, 0x9d, 0x62, 0xc7, 0xbb, 0x21, 0xea, 0xd8, 0xb0,
+ 0x17, 0x7e, 0x37, 0x76, 0x51, 0xc4, 0xfb, 0xdc, 0x27, 0x18, 0xe8, 0x2e, 0xa4, 0xb8, 0x17, 0xc6,
+ 0x4b, 0x1d, 0x65, 0xb6, 0x53, 0xb2, 0x78, 0xf5, 0xd9, 0x51, 0x76, 0x71, 0xc0, 0x3d, 0xe1, 0x0e,
+ 0x9c, 0xfb, 0xbc, 0xad, 0x9a, 0xdc, 0x0b, 0x16, 0xd1, 0x3a, 0x4c, 0x71, 0x13, 0xb3, 0x9b, 0x98,
+ 0x05, 0xa3, 0x07, 0xba, 0xb9, 0x79, 0xea, 0x53, 0xb9, 0xb7, 0x2e, 0x37, 0x07, 0xb3, 0x03, 0x6d,
+ 0x9b, 0x9f, 0x47, 0x60, 0xae, 0x57, 0xc4, 0xfa, 0xd6, 0x87, 0xd6, 0xaf, 0xc7, 0xde, 0x1f, 0x59,
+ 0x4c, 0xfb, 0x29, 0x5a, 0x4c, 0x4c, 0x7a, 0xa5, 0x7e, 0x4d, 0xf6, 0x95, 0x3e, 0x4d, 0x76, 0x01,
+ 0x7c, 0x76, 0xbc, 0x7d, 0xf8, 0x9e, 0x3a, 0xfb, 0xc8, 0xd7, 0x32, 0xdc, 0x9d, 0xf6, 0xc1, 0x05,
+ 0xe0, 0x59, 0x7f, 0x3f, 0xbd, 0xcc, 0xd3, 0x33, 0x3f, 0x91, 0x20, 0xd9, 0xb3, 0xb2, 0x5f, 0xa7,
+ 0xa2, 0xd9, 0xf6, 0x6d, 0x16, 0x9e, 0x78, 0xf5, 0xce, 0xf9, 0x97, 0xd5, 0x6b, 0xca, 0x64, 0xfe,
+ 0x56, 0x82, 0x64, 0xcf, 0x46, 0xfe, 0x8a, 0x54, 0xd4, 0x8b, 0x9f, 0x79, 0x0d, 0x52, 0xbd, 0x47,
+ 0x14, 0x18, 0x43, 0x7a, 0x31, 0x63, 0xe4, 0xbe, 0x08, 0x11, 0x4e, 0x41, 0x08, 0x52, 0x1f, 0x16,
+ 0x94, 0x1d, 0x65, 0x73, 0x45, 0x5b, 0xde, 0x52, 0xb5, 0x95, 0x92, 0x3c, 0x86, 0x12, 0x10, 0x2b,
+ 0x57, 0xd6, 0x2b, 0x94, 0x28, 0x4b, 0x68, 0x12, 0xa2, 0xac, 0x54, 0x29, 0xcb, 0xa1, 0x5c, 0x11,
+ 0x64, 0x8e, 0xbd, 0x87, 0xa9, 0x9a, 0xa1, 0xd6, 0x3e, 0xca, 0xc3, 0x0c, 0xb3, 0xcc, 0x5b, 0xd4,
+ 0xca, 0xa2, 0xd7, 0x5b, 0x0b, 0xd8, 0xb8, 0xd3, 0x7e, 0x15, 0xbd, 0xbd, 0x9b, 0x7a, 0x0b, 0xe7,
+ 0xfe, 0x26, 0x0c, 0xd3, 0x5d, 0x10, 0x4f, 0xc9, 0xfe, 0x85, 0xd4, 0x7d, 0x77, 0x44, 0xce, 0x0c,
+ 0xf9, 0x9e, 0xe8, 0x2f, 0x9e, 0x20, 0x22, 0xf4, 0xfa, 0x21, 0xbd, 0x34, 0xcf, 0x8e, 0xb2, 0xd3,
+ 0xfd, 0x93, 0x25, 0xcf, 0x19, 0x93, 0xf5, 0xa6, 0xc8, 0x1c, 0xca, 0xa6, 0x75, 0xa0, 0x75, 0x73,
+ 0xe3, 0xb8, 0x43, 0xd9, 0xb4, 0x0e, 0x76, 0x55, 0x45, 0x8d, 0xd2, 0xca, 0x5d, 0xc7, 0x44, 0x6b,
+ 0x10, 0xb6, 0xdb, 0xae, 0xf7, 0x54, 0x7e, 0xfb, 0x5c, 0x4b, 0xda, 0x6a, 0x8b, 0xf5, 0xa8, 0x0c,
+ 0x03, 0xad, 0xf1, 0x2c, 0x86, 0xee, 0x46, 0x8b, 0xc7, 0xec, 0x48, 0x22, 0x34, 0xd9, 0x73, 0x10,
+ 0x99, 0x06, 0x24, 0x82, 0x3b, 0x36, 0x20, 0xce, 0x52, 0xe8, 0x75, 0x67, 0x7c, 0x76, 0xa4, 0xa9,
+ 0x8b, 0x87, 0x60, 0x20, 0xf4, 0xf6, 0x45, 0x88, 0xfb, 0xeb, 0x38, 0x4f, 0x04, 0xd2, 0x8f, 0xc8,
+ 0x70, 0x77, 0x1f, 0xb5, 0xcf, 0xbe, 0x1f, 0x82, 0x84, 0x8a, 0x89, 0xdd, 0x7c, 0x88, 0x0d, 0x6a,
+ 0x41, 0xf9, 0xb9, 0xd8, 0xd2, 0xe8, 0xb9, 0xd8, 0x05, 0x88, 0x77, 0x35, 0xd0, 0x39, 0xf2, 0x21,
+ 0xbb, 0xbd, 0xd0, 0xc7, 0x90, 0xac, 0xd9, 0x1d, 0xcb, 0xd0, 0x9d, 0x43, 0x66, 0x57, 0x31, 0x0b,
+ 0x24, 0x35, 0x34, 0x3b, 0x2d, 0x38, 0xeb, 0x7c, 0x51, 0x74, 0xa6, 0xf6, 0x93, 0x9a, 0xa8, 0x05,
+ 0x4a, 0xb9, 0xf7, 0x20, 0x11, 0xac, 0x45, 0x31, 0x08, 0x6f, 0x6e, 0x6d, 0x56, 0xf8, 0x9d, 0x2c,
+ 0x16, 0x4a, 0x77, 0x97, 0x95, 0xf5, 0x75, 0x59, 0xa2, 0xf4, 0xca, 0x47, 0xca, 0x8e, 0x1c, 0xe2,
+ 0x19, 0xa4, 0xd5, 0x9d, 0x82, 0xba, 0xe3, 0x79, 0x45, 0x73, 0x18, 0x92, 0xc1, 0xf1, 0xa8, 0xe4,
+ 0xa3, 0x66, 0x27, 0x23, 0xf4, 0xbc, 0x68, 0x5f, 0x1b, 0x71, 0xc6, 0x1e, 0x07, 0x39, 0x41, 0xd4,
+ 0xdc, 0x3f, 0x87, 0x00, 0x75, 0x0f, 0xde, 0x17, 0x56, 0x1f, 0x01, 0xd4, 0xf7, 0x71, 0xfd, 0xa0,
+ 0x6d, 0x9b, 0x96, 0x2b, 0x92, 0xd9, 0xde, 0x19, 0x89, 0x77, 0x7c, 0x61, 0x55, 0xf2, 0xfb, 0xab,
+ 0x01, 0x2c, 0xf4, 0x07, 0xc3, 0xfd, 0xff, 0xe3, 0xcc, 0xff, 0xcf, 0x6e, 0xfe, 0xaf, 0x35, 0x06,
+ 0x90, 0x29, 0x00, 0x74, 0x67, 0x8c, 0xde, 0x1a, 0x2d, 0x0f, 0xdb, 0x8b, 0xa1, 0xb1, 0xb6, 0x41,
+ 0x5e, 0xcf, 0xfd, 0x4f, 0x18, 0x50, 0xc9, 0xc1, 0xba, 0x8b, 0xa9, 0x88, 0x26, 0xc3, 0x5c, 0x07,
+ 0x45, 0x98, 0x60, 0x76, 0x81, 0x60, 0xe4, 0x11, 0x5d, 0xf9, 0x7e, 0xf8, 0x8e, 0x45, 0x03, 0xbe,
+ 0x0a, 0x89, 0xba, 0xdd, 0xec, 0xb4, 0x2c, 0x8d, 0xe5, 0x42, 0x89, 0xf7, 0xc7, 0x17, 0x86, 0x9d,
+ 0xd8, 0x89, 0xc9, 0xe5, 0x4b, 0x76, 0x93, 0x96, 0xfd, 0x2f, 0x05, 0x18, 0x20, 0x6b, 0x81, 0xae,
+ 0x40, 0xdc, 0x97, 0x3c, 0x3c, 0x29, 0x43, 0xed, 0x12, 0xd0, 0x2d, 0x98, 0xd0, 0x89, 0x66, 0xef,
+ 0x31, 0x63, 0xfa, 0xac, 0xab, 0xa8, 0x86, 0x75, 0xb2, 0xb5, 0x87, 0x5e, 0x87, 0xe9, 0x96, 0xfe,
+ 0x58, 0xdb, 0x73, 0x78, 0x76, 0xb5, 0x66, 0x1a, 0x4d, 0x2e, 0x09, 0x25, 0x75, 0xaa, 0xa5, 0x3f,
+ 0x5e, 0x16, 0x74, 0xc5, 0x68, 0x62, 0xf4, 0x16, 0x24, 0xf7, 0x1e, 0xf0, 0xa7, 0x15, 0xd7, 0x4a,
+ 0x3c, 0xb1, 0x6c, 0xea, 0xf8, 0x28, 0x3b, 0xb9, 0x7c, 0x8f, 0x6d, 0x0c, 0x0b, 0x9a, 0x4c, 0xee,
+ 0x3d, 0xf0, 0x0b, 0x99, 0xff, 0x96, 0x20, 0x2a, 0x56, 0x84, 0xda, 0x00, 0x62, 0x7b, 0x4c, 0x83,
+ 0x9f, 0x69, 0xb2, 0x78, 0xef, 0xf8, 0x28, 0x1b, 0x2f, 0x31, 0xaa, 0x52, 0x26, 0xcf, 0x8e, 0xb2,
+ 0x1f, 0x5c, 0x54, 0xa3, 0x78, 0x20, 0x6a, 0x9c, 0x0f, 0xa2, 0x18, 0xcc, 0x63, 0xbb, 0xaf, 0x13,
+ 0x6d, 0xdf, 0x24, 0xae, 0xdd, 0x70, 0xf4, 0x96, 0xc8, 0x66, 0x48, 0xec, 0xeb, 0x64, 0xd5, 0xa3,
+ 0xa1, 0x0c, 0xb5, 0xcd, 0x1e, 0xf2, 0x54, 0x36, 0x9e, 0x0a, 0xe3, 0x97, 0xd1, 0x2d, 0xb8, 0xe4,
+ 0x77, 0xd6, 0xe8, 0x4e, 0xd5, 0x3a, 0xf5, 0x03, 0xcc, 0x74, 0x10, 0x15, 0xee, 0x33, 0x7e, 0xe5,
+ 0x86, 0xfe, 0xb8, 0xc8, 0xab, 0x72, 0x97, 0x60, 0x26, 0x70, 0xac, 0xbe, 0x25, 0x8d, 0x41, 0xe6,
+ 0x49, 0x17, 0x81, 0x0f, 0x0d, 0xee, 0xc1, 0x54, 0xdf, 0x27, 0x65, 0x42, 0xfe, 0x06, 0x3d, 0x79,
+ 0xbd, 0xdf, 0xa0, 0xe5, 0x4b, 0xbc, 0xe8, 0xbd, 0x0d, 0x52, 0xf5, 0x9e, 0x72, 0xee, 0x4d, 0x98,
+ 0xf6, 0x87, 0xf1, 0x05, 0xc9, 0x15, 0x88, 0xb3, 0x68, 0x7b, 0x4b, 0x77, 0x0e, 0xbc, 0x88, 0xbb,
+ 0x4f, 0xc8, 0x65, 0xe1, 0x25, 0xe6, 0xdd, 0xbb, 0xb7, 0xce, 0x66, 0x5c, 0xb2, 0x5b, 0x6d, 0x7e,
+ 0xec, 0x9e, 0xfb, 0x6f, 0x11, 0x16, 0x06, 0x37, 0xf0, 0x17, 0xf7, 0x13, 0x19, 0xa2, 0xdb, 0xfa,
+ 0x61, 0xd3, 0xd6, 0x0d, 0xb4, 0x08, 0x93, 0x5e, 0x92, 0x9b, 0xb7, 0xa0, 0xb8, 0x1a, 0x24, 0xf5,
+ 0xf2, 0xb1, 0xcc, 0xc2, 0x52, 0x01, 0x3e, 0x36, 0x21, 0xd5, 0x21, 0xd8, 0xa1, 0x2c, 0xa6, 0xb1,
+ 0x0f, 0x24, 0xb8, 0x3e, 0x2b, 0x16, 0x9f, 0x1d, 0x65, 0xef, 0x8c, 0xc6, 0x1d, 0xb8, 0xde, 0x71,
+ 0x4c, 0xf7, 0x30, 0x5f, 0xbd, 0xb7, 0xbe, 0x2b, 0xa0, 0xa8, 0x30, 0xb2, 0xd5, 0x64, 0x27, 0x58,
+ 0x14, 0xb9, 0x8c, 0xf4, 0xa4, 0xb5, 0x96, 0x59, 0x77, 0x6c, 0xe2, 0x45, 0x6e, 0x04, 0x75, 0x83,
+ 0x11, 0xd1, 0x6b, 0x30, 0xb5, 0x67, 0x5a, 0x2c, 0xd2, 0xea, 0xb5, 0xe3, 0x41, 0x9b, 0x94, 0x47,
+ 0x16, 0x0d, 0x1f, 0x42, 0x2a, 0x90, 0x44, 0x48, 0xb9, 0x3c, 0xc2, 0xb8, 0x7c, 0xeb, 0xf8, 0x28,
+ 0x9b, 0xec, 0x4a, 0x0d, 0xce, 0xe9, 0xcf, 0x63, 0x3b, 0x25, 0xbb, 0xc3, 0x50, 0x3e, 0x9f, 0x85,
+ 0x09, 0xf6, 0x45, 0x26, 0xcf, 0x12, 0x57, 0x79, 0x01, 0x55, 0x20, 0x29, 0x7c, 0x2d, 0xfc, 0x73,
+ 0x4d, 0x91, 0x79, 0x19, 0xf4, 0xd7, 0x7b, 0x1f, 0x74, 0xe6, 0x2b, 0x56, 0xdd, 0x36, 0xb0, 0x51,
+ 0xa1, 0x65, 0x55, 0xb8, 0x6c, 0x59, 0x81, 0xa0, 0x15, 0x48, 0xd5, 0x9b, 0x58, 0xb7, 0x3a, 0x6d,
+ 0x0f, 0x07, 0x8d, 0x88, 0x93, 0x14, 0xfd, 0x04, 0xd0, 0x26, 0xa0, 0x3d, 0x96, 0x03, 0x16, 0x9c,
+ 0x15, 0x8b, 0x73, 0x8e, 0x02, 0x26, 0xb3, 0xbe, 0x6a, 0x77, 0x66, 0xe8, 0x2a, 0x24, 0x2d, 0xdb,
+ 0xaa, 0xeb, 0x56, 0x1d, 0x37, 0x99, 0xe8, 0xe6, 0xa1, 0xd1, 0x5e, 0x22, 0x2a, 0x42, 0x84, 0x87,
+ 0xfb, 0xc5, 0x23, 0xf9, 0xfa, 0xa8, 0xdf, 0x52, 0xac, 0x8e, 0xa9, 0xa2, 0x27, 0xaa, 0x40, 0xd4,
+ 0xe1, 0x59, 0x2c, 0x2c, 0x05, 0xe0, 0x4c, 0x67, 0x55, 0x20, 0x53, 0x66, 0x75, 0x4c, 0xf5, 0xfa,
+ 0xa2, 0x1d, 0x2f, 0x61, 0x98, 0x2b, 0x6a, 0x91, 0xea, 0x99, 0x1f, 0xf1, 0x09, 0xd2, 0x05, 0xec,
+ 0x41, 0xa1, 0x0b, 0x34, 0x59, 0x54, 0x8b, 0x25, 0x07, 0x0c, 0x5f, 0x60, 0x4f, 0x02, 0x0a, 0x5d,
+ 0x20, 0xef, 0x89, 0x36, 0xa9, 0xa5, 0xe1, 0x19, 0x0f, 0x2c, 0x6d, 0x60, 0xf2, 0xd6, 0xe7, 0xce,
+ 0x63, 0x60, 0xaf, 0x8e, 0xa9, 0x01, 0x04, 0x74, 0x0f, 0x26, 0xeb, 0x5d, 0x19, 0x98, 0x9e, 0x62,
+ 0x80, 0x37, 0xcf, 0xa5, 0x08, 0x57, 0xa9, 0xf2, 0xeb, 0x52, 0xd1, 0x27, 0x90, 0x22, 0x3d, 0x0f,
+ 0xb2, 0xf4, 0x25, 0x86, 0xfa, 0xc6, 0x79, 0x9d, 0xc3, 0xab, 0x63, 0x6a, 0x1f, 0x12, 0xfa, 0xff,
+ 0x20, 0xbb, 0x7d, 0xd1, 0x1d, 0x16, 0x4d, 0x1f, 0x9e, 0x87, 0x7b, 0x4a, 0x0c, 0x6b, 0x75, 0x4c,
+ 0x3d, 0x81, 0x86, 0xbe, 0x02, 0x53, 0xa4, 0xf7, 0x33, 0xb5, 0xf4, 0x3c, 0x1b, 0xe0, 0xcd, 0xd1,
+ 0x3f, 0x6c, 0xeb, 0xe2, 0xf7, 0x63, 0x51, 0x78, 0xab, 0x37, 0x48, 0xc4, 0xb2, 0x4a, 0x86, 0xc3,
+ 0x0f, 0x0e, 0x5a, 0x51, 0xf8, 0x3e, 0x2c, 0x74, 0x17, 0xe2, 0x2d, 0x4f, 0xa9, 0xb0, 0x9c, 0x8c,
+ 0xe1, 0x6f, 0x98, 0x7e, 0x3d, 0xb7, 0x3a, 0xa6, 0x76, 0xfb, 0xa3, 0xdf, 0x96, 0xe0, 0x8a, 0x3e,
+ 0x24, 0x9a, 0xc4, 0x72, 0x38, 0x86, 0x3b, 0xfd, 0x47, 0x88, 0x59, 0xad, 0x8e, 0xa9, 0x43, 0x47,
+ 0x41, 0x0e, 0xcc, 0xe9, 0x03, 0x95, 0x5a, 0x7a, 0xe1, 0x4c, 0x43, 0x7b, 0xa8, 0xba, 0x5c, 0x1d,
+ 0x53, 0x4f, 0x41, 0x46, 0x75, 0x98, 0x26, 0xfd, 0x5f, 0x0a, 0xa6, 0x5f, 0x66, 0xc3, 0xbd, 0x75,
+ 0x26, 0x1f, 0x9c, 0xfc, 0x50, 0x71, 0x75, 0x4c, 0x3d, 0x89, 0x87, 0x5e, 0x86, 0x04, 0x4f, 0x69,
+ 0x76, 0xb0, 0x4e, 0x6c, 0x2b, 0x7d, 0x85, 0x2b, 0x60, 0x46, 0x53, 0x19, 0x09, 0x7d, 0x1d, 0xb2,
+ 0x0e, 0x76, 0x1d, 0x93, 0xd9, 0x72, 0xf8, 0x31, 0xae, 0x77, 0x98, 0xf5, 0xb7, 0xa7, 0x9b, 0xcd,
+ 0x8e, 0x83, 0xb5, 0xa6, 0xdd, 0x48, 0x2f, 0x32, 0x19, 0x3f, 0xfc, 0x21, 0x26, 0x10, 0x2a, 0x1e,
+ 0xc0, 0x32, 0xef, 0xaf, 0x5e, 0x71, 0x4e, 0xab, 0x5a, 0xb7, 0x1b, 0xc5, 0x38, 0x44, 0x45, 0x38,
+ 0xda, 0x4f, 0x37, 0xe1, 0x89, 0x26, 0x3c, 0xc5, 0x24, 0x23, 0x7f, 0x26, 0xf7, 0x8f, 0x09, 0x88,
+ 0xf9, 0xc6, 0xcb, 0x12, 0x20, 0xdf, 0x3e, 0xed, 0x7e, 0x9e, 0x40, 0xcd, 0x8a, 0x10, 0xdd, 0x00,
+ 0xaf, 0xae, 0xfb, 0x85, 0xc2, 0x9d, 0x9e, 0x04, 0xc3, 0x51, 0xbe, 0x11, 0xa6, 0x0c, 0xea, 0x67,
+ 0x20, 0x52, 0x75, 0x2f, 0x32, 0xd8, 0x7d, 0x75, 0xcf, 0x43, 0x1d, 0x29, 0x8f, 0x2c, 0xd4, 0xfd,
+ 0x35, 0x48, 0x39, 0x1d, 0x8b, 0xc5, 0x90, 0x85, 0x53, 0x89, 0x1b, 0xe5, 0x49, 0x41, 0x15, 0x7e,
+ 0xa1, 0x52, 0x9f, 0x06, 0xba, 0x71, 0xa6, 0x06, 0xf2, 0xd6, 0xbe, 0x2a, 0xf9, 0x2a, 0x68, 0xb9,
+ 0x5f, 0x05, 0xbd, 0x7e, 0xb6, 0x0a, 0x0a, 0xc0, 0xf8, 0x3a, 0x68, 0x77, 0xa0, 0x0e, 0x5a, 0x1a,
+ 0x51, 0x88, 0x06, 0x10, 0x7b, 0x95, 0x50, 0xa9, 0x4f, 0x09, 0xdd, 0x38, 0x53, 0x09, 0x05, 0xd7,
+ 0x28, 0xb4, 0xd0, 0xd6, 0x00, 0x2d, 0x74, 0xf3, 0x5c, 0xef, 0xdd, 0x55, 0xa9, 0x47, 0x0d, 0xa9,
+ 0x83, 0xd4, 0x50, 0x7e, 0x34, 0x35, 0x14, 0x80, 0xec, 0xd1, 0x43, 0x9f, 0x9e, 0xd0, 0x43, 0xf2,
+ 0xd9, 0x82, 0x7c, 0xa0, 0x27, 0x71, 0x55, 0x3a, 0xa1, 0x88, 0xf4, 0x01, 0x8a, 0x68, 0xfa, 0x4c,
+ 0xf9, 0x70, 0x5a, 0x66, 0xc2, 0xaa, 0x34, 0x40, 0x13, 0x7d, 0x04, 0x89, 0xa0, 0xf6, 0x60, 0xe9,
+ 0x67, 0xc3, 0xf5, 0xdc, 0x29, 0xdf, 0x57, 0x33, 0x1e, 0x08, 0x54, 0xa1, 0xaf, 0x9e, 0x54, 0x42,
+ 0x33, 0x67, 0x82, 0x9f, 0x92, 0xdb, 0xb0, 0x2a, 0x9d, 0xd4, 0x42, 0xeb, 0x41, 0x2d, 0x34, 0x7b,
+ 0xa6, 0x8d, 0x72, 0xe2, 0x19, 0xb4, 0x2a, 0x05, 0xd5, 0xd0, 0x77, 0x24, 0xb8, 0x32, 0x4c, 0x8f,
+ 0x08, 0x03, 0xe0, 0xfd, 0x0b, 0xaa, 0xa1, 0xc0, 0xa0, 0x43, 0x87, 0x41, 0xe4, 0x54, 0x3d, 0x34,
+ 0x7f, 0x66, 0xee, 0xd3, 0xf0, 0x57, 0xd9, 0xaa, 0x74, 0xaa, 0x22, 0x32, 0x06, 0x29, 0xa2, 0xf4,
+ 0xd9, 0x5f, 0x86, 0x9e, 0xf6, 0x99, 0xfb, 0xaa, 0x34, 0x48, 0x13, 0x3d, 0x80, 0x98, 0xeb, 0xe8,
+ 0x75, 0x16, 0x5a, 0xbc, 0xc4, 0x62, 0xc9, 0xf7, 0x85, 0x4b, 0xa9, 0x34, 0xba, 0x4b, 0x89, 0x22,
+ 0x98, 0x56, 0xc3, 0xfb, 0x97, 0xb2, 0x3b, 0xc5, 0x64, 0x2e, 0xa6, 0xa8, 0xf8, 0xa9, 0x46, 0xd9,
+ 0x38, 0x8a, 0x51, 0x04, 0x88, 0x79, 0x29, 0x55, 0x01, 0x45, 0x93, 0xfb, 0x9e, 0x04, 0xe3, 0x6b,
+ 0x76, 0x0d, 0xbd, 0x14, 0x08, 0x5c, 0x24, 0xc5, 0x5c, 0x26, 0xd6, 0xec, 0x9a, 0x88, 0x40, 0xbc,
+ 0xdf, 0xed, 0x2d, 0xfc, 0x40, 0xaf, 0x0c, 0xd9, 0x0d, 0x3f, 0xee, 0xe3, 0x77, 0x42, 0x5f, 0x86,
+ 0x68, 0x9b, 0x3f, 0x83, 0x85, 0xde, 0xc9, 0x0d, 0xeb, 0xcf, 0x5b, 0xaa, 0x5e, 0x97, 0xdc, 0x7f,
+ 0x85, 0xe0, 0xf2, 0xa9, 0x5a, 0x15, 0xcd, 0xf5, 0x84, 0x2e, 0xe2, 0x5e, 0x00, 0x02, 0x7d, 0x1e,
+ 0xe6, 0xba, 0x2a, 0x9c, 0xa7, 0x15, 0xf6, 0x68, 0xad, 0x59, 0xbf, 0x96, 0x65, 0x16, 0x0a, 0xdd,
+ 0xf5, 0x06, 0x74, 0xe9, 0x1a, 0xb6, 0xfa, 0x1e, 0xc0, 0xc8, 0xaf, 0xab, 0x58, 0x9e, 0xb6, 0xb3,
+ 0x60, 0xd2, 0xb4, 0x88, 0x4b, 0x5f, 0x56, 0x5e, 0xac, 0x78, 0xa2, 0xb8, 0x21, 0x36, 0xf1, 0x8b,
+ 0x23, 0x1d, 0x28, 0xcf, 0xf2, 0xbc, 0xb7, 0xae, 0x08, 0x1c, 0x76, 0x88, 0xd0, 0x2d, 0xa9, 0xe0,
+ 0x8d, 0xa0, 0x18, 0xe8, 0x6d, 0xef, 0x51, 0x3b, 0x31, 0xe2, 0x0b, 0x51, 0x3c, 0x7b, 0x5f, 0x83,
+ 0x29, 0xd7, 0xe9, 0x58, 0xfc, 0x1b, 0x76, 0x8e, 0xc0, 0x3c, 0x55, 0x6a, 0xca, 0x27, 0xb3, 0xf6,
+ 0xaf, 0xdf, 0x08, 0xfe, 0x6f, 0x33, 0x1b, 0xb6, 0x81, 0x51, 0x0a, 0x60, 0x5b, 0x27, 0xa4, 0xbd,
+ 0xef, 0xe8, 0x04, 0xcb, 0x63, 0x28, 0x0a, 0xe3, 0x77, 0x37, 0xaa, 0xb2, 0xf4, 0xfa, 0x47, 0xc1,
+ 0x20, 0x4f, 0x59, 0x2d, 0x28, 0x9b, 0xca, 0xe6, 0x8a, 0xb6, 0x59, 0xd8, 0xa8, 0x54, 0xe5, 0x31,
+ 0x94, 0x86, 0xd9, 0x0f, 0x0b, 0xca, 0x8e, 0x88, 0xfa, 0x68, 0xca, 0xe6, 0x4e, 0x45, 0xbd, 0x5f,
+ 0x58, 0x97, 0x25, 0x34, 0x07, 0x48, 0xdd, 0x2a, 0xdd, 0xad, 0x96, 0x8b, 0x5a, 0x69, 0x6b, 0x63,
+ 0xbb, 0x50, 0xda, 0x51, 0xb6, 0x36, 0xe5, 0x10, 0x8a, 0x41, 0xb8, 0xbc, 0xb5, 0x59, 0x91, 0xe1,
+ 0xf5, 0x9f, 0x4d, 0x88, 0xec, 0xd6, 0xab, 0x30, 0xb9, 0xbb, 0x59, 0xdd, 0xae, 0x94, 0x94, 0x65,
+ 0xa5, 0x52, 0x96, 0xc7, 0x32, 0x33, 0x4f, 0x9e, 0x2e, 0x4e, 0xd1, 0xaa, 0x5d, 0x8b, 0xb4, 0x71,
+ 0x9d, 0x19, 0x1e, 0x28, 0x03, 0x91, 0x62, 0xa1, 0x74, 0x77, 0x77, 0x5b, 0x96, 0x32, 0xa9, 0x27,
+ 0x4f, 0x17, 0x81, 0x7d, 0x44, 0xc0, 0x4d, 0x84, 0x2b, 0xdc, 0x7f, 0xbd, 0xa5, 0x56, 0xe4, 0x50,
+ 0x66, 0xea, 0xc9, 0xd3, 0xc5, 0x49, 0xe6, 0x16, 0x17, 0x8a, 0xff, 0x35, 0x48, 0x56, 0x4b, 0xab,
+ 0x95, 0x8d, 0x82, 0x56, 0x5a, 0x2d, 0x6c, 0xae, 0x54, 0xe4, 0xf1, 0xcc, 0xec, 0x93, 0xa7, 0x8b,
+ 0x72, 0xbf, 0xf2, 0xa0, 0x43, 0x28, 0x1b, 0xdb, 0x5b, 0xea, 0x8e, 0x1c, 0xee, 0x0e, 0xc1, 0x75,
+ 0x36, 0xca, 0x01, 0xf0, 0xde, 0xcb, 0x95, 0x4a, 0x59, 0x9e, 0xc8, 0xa0, 0x27, 0x4f, 0x17, 0x53,
+ 0xb4, 0xbe, 0xab, 0x8a, 0xd1, 0x35, 0x48, 0x94, 0xd4, 0x4a, 0x61, 0xa7, 0xa2, 0x55, 0x77, 0x0a,
+ 0x3b, 0x55, 0x39, 0xd2, 0x5d, 0x49, 0x40, 0xbd, 0xa2, 0x3c, 0x4c, 0x17, 0x76, 0x77, 0xb6, 0xb4,
+ 0x9e, 0xb6, 0xd1, 0xcc, 0xfc, 0x93, 0xa7, 0x8b, 0x33, 0xb4, 0x2d, 0x95, 0x6d, 0xc1, 0xf6, 0x9f,
+ 0x03, 0xb9, 0x67, 0xfe, 0xda, 0x4a, 0x49, 0x8e, 0x65, 0xe6, 0x9e, 0x3c, 0x5d, 0x44, 0xfd, 0x4b,
+ 0x58, 0x29, 0xd1, 0x4b, 0xb1, 0xf3, 0xf1, 0x76, 0xa5, 0x5c, 0xa9, 0x96, 0xb4, 0xde, 0x65, 0xc7,
+ 0x33, 0xe9, 0x27, 0x4f, 0x17, 0x67, 0x69, 0x9f, 0x13, 0x4b, 0xbf, 0x09, 0x72, 0x75, 0x47, 0xad,
+ 0x14, 0x36, 0x34, 0x65, 0x73, 0xa5, 0x52, 0x65, 0x87, 0x05, 0xdd, 0x29, 0xf5, 0x29, 0x42, 0xba,
+ 0x84, 0xcd, 0xca, 0x87, 0x7d, 0xf8, 0x93, 0xdd, 0xf6, 0x7d, 0xba, 0x0d, 0x2d, 0x42, 0x7c, 0x43,
+ 0x59, 0x51, 0x0b, 0x0c, 0x37, 0x91, 0x99, 0x7e, 0xf2, 0x74, 0x31, 0x49, 0xdb, 0xf9, 0x9a, 0x0a,
+ 0x29, 0x90, 0x65, 0x9b, 0x52, 0xdd, 0x2e, 0x6c, 0x6a, 0xa5, 0xad, 0xcd, 0x65, 0x65, 0x45, 0x53,
+ 0x2b, 0xa5, 0xad, 0xcd, 0x92, 0xb2, 0xae, 0xf0, 0x7e, 0xc9, 0xcc, 0xd5, 0x27, 0x4f, 0x17, 0x17,
+ 0xbd, 0x2d, 0x3a, 0x55, 0xaf, 0xbc, 0x07, 0x97, 0x39, 0xd4, 0xbd, 0x75, 0xbe, 0xb9, 0x41, 0x0e,
+ 0x4c, 0x65, 0x16, 0x9e, 0x3c, 0x5d, 0xcc, 0xf8, 0x20, 0x27, 0x35, 0xc4, 0x9b, 0x80, 0xc4, 0x56,
+ 0xa8, 0x95, 0xed, 0x75, 0xa5, 0xc4, 0x07, 0x9f, 0xca, 0x5c, 0x7e, 0xf2, 0x74, 0xf1, 0x52, 0x77,
+ 0x33, 0x02, 0xe2, 0x3e, 0x13, 0xfb, 0x9d, 0xef, 0x2d, 0x8c, 0xfd, 0xf9, 0xf7, 0x17, 0xc6, 0x8a,
+ 0xd7, 0x7f, 0xfc, 0x1f, 0x0b, 0x63, 0x3f, 0x3e, 0x5e, 0x90, 0x7e, 0x7a, 0xbc, 0x20, 0xfd, 0xfc,
+ 0x78, 0x41, 0xfa, 0xf7, 0xe3, 0x05, 0xe9, 0xbb, 0xbf, 0x5c, 0x18, 0xfb, 0xe9, 0x2f, 0x17, 0xc6,
+ 0x7e, 0xfe, 0xcb, 0x85, 0xb1, 0x4f, 0x22, 0x5c, 0x06, 0xd6, 0x22, 0xcc, 0xc3, 0xf7, 0xd6, 0xff,
+ 0x05, 0x00, 0x00, 0xff, 0xff, 0x37, 0xe2, 0x49, 0x63, 0x8e, 0x4c, 0x00, 0x00,
}
func (this *BackupEncryptionOptions) Equal(that interface{}) bool {
@@ -5642,32 +5634,6 @@ func (m *SchemaChangeGCDetails) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i--
dAtA[i] = 0x32
}
- if len(m.InterleavedIndexes) > 0 {
- for iNdEx := len(m.InterleavedIndexes) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.InterleavedIndexes[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintJobs(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x2a
- }
- }
- if m.InterleavedTable != nil {
- {
- size, err := m.InterleavedTable.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintJobs(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x22
- }
if m.ParentID != 0 {
i = encodeVarintJobs(dAtA, i, uint64(m.ParentID))
i--
@@ -5834,38 +5800,38 @@ func (m *SchemaChangeDetails) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i--
dAtA[i] = 0x52
if len(m.DroppedSchemas) > 0 {
- dAtA35 := make([]byte, len(m.DroppedSchemas)*10)
- var j34 int
+ dAtA34 := make([]byte, len(m.DroppedSchemas)*10)
+ var j33 int
for _, num := range m.DroppedSchemas {
for num >= 1<<7 {
- dAtA35[j34] = uint8(uint64(num)&0x7f | 0x80)
+ dAtA34[j33] = uint8(uint64(num)&0x7f | 0x80)
num >>= 7
- j34++
+ j33++
}
- dAtA35[j34] = uint8(num)
- j34++
+ dAtA34[j33] = uint8(num)
+ j33++
}
- i -= j34
- copy(dAtA[i:], dAtA35[:j34])
- i = encodeVarintJobs(dAtA, i, uint64(j34))
+ i -= j33
+ copy(dAtA[i:], dAtA34[:j33])
+ i = encodeVarintJobs(dAtA, i, uint64(j33))
i--
dAtA[i] = 0x4a
}
if len(m.DroppedTypes) > 0 {
- dAtA37 := make([]byte, len(m.DroppedTypes)*10)
- var j36 int
+ dAtA36 := make([]byte, len(m.DroppedTypes)*10)
+ var j35 int
for _, num := range m.DroppedTypes {
for num >= 1<<7 {
- dAtA37[j36] = uint8(uint64(num)&0x7f | 0x80)
+ dAtA36[j35] = uint8(uint64(num)&0x7f | 0x80)
num >>= 7
- j36++
+ j35++
}
- dAtA37[j36] = uint8(num)
- j36++
+ dAtA36[j35] = uint8(num)
+ j35++
}
- i -= j36
- copy(dAtA[i:], dAtA37[:j36])
- i = encodeVarintJobs(dAtA, i, uint64(j36))
+ i -= j35
+ copy(dAtA[i:], dAtA36[:j35])
+ i = encodeVarintJobs(dAtA, i, uint64(j35))
i--
dAtA[i] = 0x42
}
@@ -6520,20 +6486,20 @@ func (m *CreateStatsDetails_ColStat) MarshalToSizedBuffer(dAtA []byte) (int, err
dAtA[i] = 0x10
}
if len(m.ColumnIDs) > 0 {
- dAtA47 := make([]byte, len(m.ColumnIDs)*10)
- var j46 int
+ dAtA46 := make([]byte, len(m.ColumnIDs)*10)
+ var j45 int
for _, num := range m.ColumnIDs {
for num >= 1<<7 {
- dAtA47[j46] = uint8(uint64(num)&0x7f | 0x80)
+ dAtA46[j45] = uint8(uint64(num)&0x7f | 0x80)
num >>= 7
- j46++
+ j45++
}
- dAtA47[j46] = uint8(num)
- j46++
+ dAtA46[j45] = uint8(num)
+ j45++
}
- i -= j46
- copy(dAtA[i:], dAtA47[:j46])
- i = encodeVarintJobs(dAtA, i, uint64(j46))
+ i -= j45
+ copy(dAtA[i:], dAtA46[:j45])
+ i = encodeVarintJobs(dAtA, i, uint64(j45))
i--
dAtA[i] = 0xa
}
@@ -6805,20 +6771,20 @@ func (m *Payload) MarshalToSizedBuffer(dAtA []byte) (int, error) {
dAtA[i] = 0x42
}
if len(m.DescriptorIDs) > 0 {
- dAtA51 := make([]byte, len(m.DescriptorIDs)*10)
- var j50 int
+ dAtA50 := make([]byte, len(m.DescriptorIDs)*10)
+ var j49 int
for _, num := range m.DescriptorIDs {
for num >= 1<<7 {
- dAtA51[j50] = uint8(uint64(num)&0x7f | 0x80)
+ dAtA50[j49] = uint8(uint64(num)&0x7f | 0x80)
num >>= 7
- j50++
+ j49++
}
- dAtA51[j50] = uint8(num)
- j50++
+ dAtA50[j49] = uint8(num)
+ j49++
}
- i -= j50
- copy(dAtA[i:], dAtA51[:j50])
- i = encodeVarintJobs(dAtA, i, uint64(j50))
+ i -= j49
+ copy(dAtA[i:], dAtA50[:j49])
+ i = encodeVarintJobs(dAtA, i, uint64(j49))
i--
dAtA[i] = 0x32
}
@@ -8484,16 +8450,6 @@ func (m *SchemaChangeGCDetails) Size() (n int) {
if m.ParentID != 0 {
n += 1 + sovJobs(uint64(m.ParentID))
}
- if m.InterleavedTable != nil {
- l = m.InterleavedTable.Size()
- n += 1 + l + sovJobs(uint64(l))
- }
- if len(m.InterleavedIndexes) > 0 {
- for _, e := range m.InterleavedIndexes {
- l = e.Size()
- n += 1 + l + sovJobs(uint64(l))
- }
- }
if m.Tenant != nil {
l = m.Tenant.Size()
n += 1 + l + sovJobs(uint64(l))
@@ -15141,76 +15097,6 @@ func (m *SchemaChangeGCDetails) Unmarshal(dAtA []byte) error {
break
}
}
- case 4:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field InterleavedTable", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowJobs
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthJobs
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthJobs
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.InterleavedTable == nil {
- m.InterleavedTable = &descpb.TableDescriptor{}
- }
- if err := m.InterleavedTable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 5:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field InterleavedIndexes", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowJobs
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthJobs
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthJobs
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.InterleavedIndexes = append(m.InterleavedIndexes, descpb.IndexDescriptor{})
- if err := m.InterleavedIndexes[len(m.InterleavedIndexes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
case 6:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Tenant", wireType)
diff --git a/pkg/jobs/jobspb/jobs.proto b/pkg/jobs/jobspb/jobs.proto
index 0cba181da776..820c85a6f2ef 100644
--- a/pkg/jobs/jobspb/jobs.proto
+++ b/pkg/jobs/jobspb/jobs.proto
@@ -488,14 +488,7 @@ message SchemaChangeGCDetails {
// Indexes to GC.
repeated DroppedIndex indexes = 1 [(gogoproto.nullable) = false];
- // The below two fields are used only in the case of TRUNCATE operating on
- // tables with interleaved indexes. They are only set together.
-
- // InterleavedTable is the table being truncated. In particular, it is the
- // TableDescriptor before any of the truncate modifications have been applied.
- sqlbase.TableDescriptor interleaved_table = 4;
- // InterleavedIndexes is the set of interleaved indexes to truncate.
- repeated sqlbase.IndexDescriptor interleaved_indexes = 5 [(gogoproto.nullable) = false];
+ reserved 4, 5;
// Entire tables to GC.
repeated DroppedID tables = 2 [(gogoproto.nullable) = false];
diff --git a/pkg/migration/migrations/BUILD.bazel b/pkg/migration/migrations/BUILD.bazel
index 109418dcc205..371899e16320 100644
--- a/pkg/migration/migrations/BUILD.bazel
+++ b/pkg/migration/migrations/BUILD.bazel
@@ -7,7 +7,6 @@ go_library(
"database_role_settings.go",
"delete_deprecated_namespace_tabledesc.go",
"fix_descriptor_migration.go",
- "interleaved_tables.go",
"join_tokens.go",
"migrations.go",
"records_based_registry.go",
@@ -70,7 +69,6 @@ go_test(
"delete_deprecated_namespace_tabledesc_external_test.go",
"fix_descriptor_migration_external_test.go",
"helpers_test.go",
- "interleaved_tables_external_test.go",
"main_test.go",
"on_update_test.go",
"retry_jobs_with_exponential_backoff_external_test.go",
diff --git a/pkg/migration/migrations/interleaved_tables.go b/pkg/migration/migrations/interleaved_tables.go
deleted file mode 100644
index 2bce8d186836..000000000000
--- a/pkg/migration/migrations/interleaved_tables.go
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2021 The Cockroach Authors.
-//
-// Use of this software is governed by the Business Source License
-// included in the file licenses/BSL.txt.
-//
-// As of the Change Date specified in that file, in accordance with
-// the Business Source License, use of this software will be governed
-// by the Apache License, Version 2.0, included in the file
-// licenses/APL.txt.
-
-package migrations
-
-import (
- "context"
-
- "github.com/cockroachdb/cockroach/pkg/clusterversion"
- "github.com/cockroachdb/cockroach/pkg/jobs"
- "github.com/cockroachdb/cockroach/pkg/migration"
- "github.com/cockroachdb/cockroach/pkg/security"
- "github.com/cockroachdb/cockroach/pkg/sql/sem/tree"
- "github.com/cockroachdb/cockroach/pkg/sql/sessiondata"
- "github.com/cockroachdb/errors"
-)
-
-func interleavedTablesRemovedMigration(
- ctx context.Context, cv clusterversion.ClusterVersion, d migration.TenantDeps, _ *jobs.Job,
-) error {
- return interleavedTablesRemovedCheck(ctx, cv, d)
-}
-
-func interleavedTablesRemovedCheck(
- ctx context.Context, _ clusterversion.ClusterVersion, d migration.TenantDeps,
-) error {
- rows, err := d.InternalExecutor.QueryRowEx(ctx, "check-for-interleaved",
- nil, sessiondata.InternalExecutorOverride{User: security.RootUserName()},
- "SELECT EXISTS(SELECT * FROM crdb_internal.interleaved);")
- if err != nil {
- return err
- }
- if rows.Len() != 1 {
- return errors.Newf("unable to detect interleaved tables using crdb_internal.interleaved.")
- }
- boolVal, ok := rows[0].(*tree.DBool)
- if !ok || *boolVal == *tree.DBoolTrue {
- return errors.Newf("interleaved tables are no longer supported at this version, please drop or uninterleave any tables visible using crdb_internal.interleaved.")
- }
- return nil
-}
diff --git a/pkg/migration/migrations/interleaved_tables_external_test.go b/pkg/migration/migrations/interleaved_tables_external_test.go
deleted file mode 100644
index e7dcfdb48f35..000000000000
--- a/pkg/migration/migrations/interleaved_tables_external_test.go
+++ /dev/null
@@ -1,119 +0,0 @@
-// Copyright 2021 The Cockroach Authors.
-//
-// Use of this software is governed by the Business Source License
-// included in the file licenses/BSL.txt.
-//
-// As of the Change Date specified in that file, in accordance with
-// the Business Source License, use of this software will be governed
-// by the Apache License, Version 2.0, included in the file
-// licenses/APL.txt.
-
-package migrations_test
-
-import (
- "context"
- "testing"
-
- "github.com/cockroachdb/cockroach/pkg/base"
- "github.com/cockroachdb/cockroach/pkg/clusterversion"
- "github.com/cockroachdb/cockroach/pkg/server"
- "github.com/cockroachdb/cockroach/pkg/testutils"
- "github.com/cockroachdb/cockroach/pkg/testutils/sqlutils"
- "github.com/cockroachdb/cockroach/pkg/testutils/testcluster"
- "github.com/cockroachdb/cockroach/pkg/util/leaktest"
- "github.com/cockroachdb/cockroach/pkg/util/log"
- "github.com/cockroachdb/errors"
- "github.com/stretchr/testify/require"
-)
-
-func TestInterleavedTableMigration(t *testing.T) {
- defer leaktest.AfterTest(t)()
- defer log.Scope(t).Close(t)
-
- ctx := context.Background()
- tc := testcluster.StartTestCluster(t, 1, base.TestClusterArgs{
- ServerArgs: base.TestServerArgs{
- Knobs: base.TestingKnobs{
- Server: &server.TestingKnobs{
- DisableAutomaticVersionUpgrade: 1,
- BinaryVersionOverride: clusterversion.ByKey(clusterversion.PreventNewInterleavedTables - 1),
- },
- },
- },
- })
-
- defer tc.Stopper().Stop(ctx)
- db := tc.ServerConn(0)
- tdb := sqlutils.MakeSQLRunner(db)
- tdb.ExecSucceedsSoon(t, "CREATE TABLE customers (id INT PRIMARY KEY, name STRING(50));")
- tdb.ExecSucceedsSoon(t, `CREATE TABLE orders (
- customer INT,
- id INT,
- total DECIMAL(20, 5),
- PRIMARY KEY (customer, id),
- CONSTRAINT fk_customer FOREIGN KEY (customer) REFERENCES customers
- ) INTERLEAVE IN PARENT customers (customer);`)
- // Migration to the second phase should fail, since the pre-condition was violated.
- tdb.ExpectErr(t,
- "pq: verifying precondition for version 21.1-1140: interleaved tables are no longer supported at this version, please drop or uninterleave any tables visible using crdb_internal.interleaved.",
- "SET CLUSTER SETTING version = $1",
- clusterversion.ByKey(clusterversion.EnsureNoInterleavedTables).String())
- // Migration to the first phase should be fine, since it only blocks creating
- // new interleaved tables.
- tdb.ExecSucceedsSoon(t,
- "SET CLUSTER SETTING version = $1",
- clusterversion.ByKey(clusterversion.PreventNewInterleavedTables).String())
- // Migration to the next phase without interleaved tables should fail.
- tdb.ExpectErr(t,
- "pq: verifying precondition for version 21.1-1140: interleaved tables are no longer supported at this version, please drop or uninterleave any tables visible using crdb_internal.interleaved.",
- "SET CLUSTER SETTING version = $1",
- clusterversion.ByKey(clusterversion.EnsureNoInterleavedTables).String())
- // Next drop the old descriptor and wait for the jobs to complete.
- _, err := db.Exec(`ALTER RANGE default CONFIGURE ZONE USING gc.ttlseconds=1;`)
- require.NoError(t, err)
- tdb.ExecSucceedsSoon(t, `ALTER TABLE ORDERS ALTER PRIMARY KEY USING COLUMNS (customer, id);`)
- testutils.SucceedsSoon(t, func() error {
- row := tdb.QueryRow(t,
- `SELECT count(*) from [show jobs] where status not in ('succeeded', 'failed', 'aborted')`)
- count := 0
- row.Scan(&count)
- if count != 0 {
- return errors.New("Waiting for GC jobs to complete")
- }
- return nil
- })
- // Check that creation of interleaved tables is fully disabled.
- tdb.Exec(t, "CREATE TABLE customers2 (id INT PRIMARY KEY, name STRING(50));")
- tdb.Exec(t,
- `CREATE TABLE orders2 (
- customer INT,
- id INT,
- total DECIMAL(20, 5),
- PRIMARY KEY (customer, id),
- CONSTRAINT fk_customer FOREIGN KEY (customer) REFERENCES customers2
- ) INTERLEAVE IN PARENT customers2 (customer);`)
- // Check that no interleaved tables were created and the syntax is now a no-op.
- tdb.CheckQueryResults(t,
- "SELECT EXISTS(SELECT * FROM crdb_internal.interleaved);",
- [][]string{
- {"false"},
- })
- // Migration to next phase should succeed.
- tdb.ExecSucceedsSoon(t, "SET CLUSTER SETTING version = $1",
- clusterversion.ByKey(clusterversion.EnsureNoInterleavedTables).String())
- // Check that creation of interleaved tables is a no-op.
- tdb.Exec(t,
- `CREATE TABLE orders3 (
- customer INT,
- id INT,
- total DECIMAL(20, 5),
- PRIMARY KEY (customer, id),
- CONSTRAINT fk_customer FOREIGN KEY (customer) REFERENCES customers2
- ) INTERLEAVE IN PARENT customers2 (customer);`)
- // Check that no interleaved tables were created and the syntax is now a no-op.
- tdb.CheckQueryResults(t,
- "SELECT EXISTS(SELECT * FROM crdb_internal.interleaved);",
- [][]string{
- {"false"},
- })
-}
diff --git a/pkg/migration/migrations/migrations.go b/pkg/migration/migrations/migrations.go
index 19af695acc56..570bc1541d5c 100644
--- a/pkg/migration/migrations/migrations.go
+++ b/pkg/migration/migrations/migrations.go
@@ -94,12 +94,6 @@ var migrations = []migration.Migration{
toCV(clusterversion.RetryJobsWithExponentialBackoff),
NoPrecondition,
retryJobsWithExponentialBackoff),
- migration.NewTenantMigration(
- "validates no interleaved tables exist",
- toCV(clusterversion.EnsureNoInterleavedTables),
- interleavedTablesRemovedCheck,
- interleavedTablesRemovedMigration,
- ),
migration.NewTenantMigration(
"add system.zones table for secondary tenants",
toCV(clusterversion.ZonesTableForSecondaryTenants),
diff --git a/pkg/server/settingswatcher/row_decoder.go b/pkg/server/settingswatcher/row_decoder.go
index 52c8c740d31a..f837e9b90ac1 100644
--- a/pkg/server/settingswatcher/row_decoder.go
+++ b/pkg/server/settingswatcher/row_decoder.go
@@ -52,7 +52,7 @@ func (d *RowDecoder) DecodeRow(
{
types := []*types.T{tbl.PublicColumns()[0].GetType()}
nameRow := make([]rowenc.EncDatum, 1)
- _, matches, _, err := rowenc.DecodeIndexKey(d.codec, tbl, tbl.GetPrimaryIndex(), types, nameRow, nil, kv.Key)
+ _, matches, _, err := rowenc.DecodeIndexKey(d.codec, types, nameRow, nil, kv.Key)
if err != nil {
return "", "", "", false, errors.Wrap(err, "failed to decode key")
}
diff --git a/pkg/settings/registry.go b/pkg/settings/registry.go
index 71fd0076f69d..6221d7c61736 100644
--- a/pkg/settings/registry.go
+++ b/pkg/settings/registry.go
@@ -105,12 +105,13 @@ var retiredSettings = map[string]struct{}{
"sql.telemetry.query_sampling.sample_rate": {},
// removed as of 22.1.
- "sql.defaults.drop_enum_value.enabled": {},
- "trace.lightstep.token": {},
- "trace.datadog.agent": {},
- "trace.datadog.project": {},
- "sql.defaults.interleaved_tables.enabled": {},
- "server.declined_reservation_timeout": {},
+ "sql.defaults.drop_enum_value.enabled": {},
+ "trace.lightstep.token": {},
+ "trace.datadog.agent": {},
+ "trace.datadog.project": {},
+ "sql.defaults.interleaved_tables.enabled": {},
+ "sql.defaults.copy_partitioning_when_deinterleaving_table.enabled": {},
+ "server.declined_reservation_timeout": {},
}
// register adds a setting to the registry.
diff --git a/pkg/spanconfig/spanconfigkvsubscriber/span_config_decoder.go b/pkg/spanconfig/spanconfigkvsubscriber/span_config_decoder.go
index 76fa92e1f7a8..1d244903e8b5 100644
--- a/pkg/spanconfig/spanconfigkvsubscriber/span_config_decoder.go
+++ b/pkg/spanconfig/spanconfigkvsubscriber/span_config_decoder.go
@@ -49,10 +49,7 @@ func (sd *spanConfigDecoder) decode(kv roachpb.KeyValue) (entry roachpb.SpanConf
{
types := []*types.T{tbl.PublicColumns()[0].GetType()}
startKeyRow := make([]rowenc.EncDatum, 1)
- _, matches, _, err := rowenc.DecodeIndexKey(
- keys.SystemSQLCodec, tbl, tbl.GetPrimaryIndex(),
- types, startKeyRow, nil, kv.Key,
- )
+ _, matches, _, err := rowenc.DecodeIndexKey(keys.SystemSQLCodec, types, startKeyRow, nil /* colDirs */, kv.Key)
if err != nil {
return roachpb.SpanConfigEntry{}, errors.Wrapf(err, "failed to decode key: %v", kv.Key)
}
diff --git a/pkg/sql/alter_primary_key.go b/pkg/sql/alter_primary_key.go
index 9f69555ca123..adb71776aa70 100644
--- a/pkg/sql/alter_primary_key.go
+++ b/pkg/sql/alter_primary_key.go
@@ -12,13 +12,10 @@ package sql
import (
"context"
- "strings"
- "github.com/cockroachdb/cockroach/pkg/config/zonepb"
"github.com/cockroachdb/cockroach/pkg/server/telemetry"
"github.com/cockroachdb/cockroach/pkg/sql/catalog"
"github.com/cockroachdb/cockroach/pkg/sql/catalog/descpb"
- "github.com/cockroachdb/cockroach/pkg/sql/catalog/resolver"
"github.com/cockroachdb/cockroach/pkg/sql/catalog/tabledesc"
"github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgcode"
"github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgerror"
@@ -27,7 +24,6 @@ import (
"github.com/cockroachdb/cockroach/pkg/sql/sqltelemetry"
"github.com/cockroachdb/cockroach/pkg/util/errorutil/unimplemented"
"github.com/cockroachdb/errors"
- "github.com/gogo/protobuf/proto"
)
// alterPrimaryKeyLocalitySwap contains metadata on a locality swap for
@@ -71,23 +67,10 @@ func (p *planner) AlterPrimaryKey(
}
}
- if alterPKNode.Interleave != nil {
- interleaveIgnored, err := interleavedTableDeprecationAction(p.RunParams(ctx))
- if err != nil {
- return err
- }
- if interleaveIgnored {
- alterPKNode.Interleave = nil
- }
- }
-
if alterPKNode.Sharded != nil {
if !p.EvalContext().SessionData().HashShardedIndexesEnabled {
return hashShardedIndexesDisabledError
}
- if alterPKNode.Interleave != nil {
- return pgerror.Newf(pgcode.FeatureNotSupported, "interleaved indexes cannot also be hash sharded")
- }
if tableDesc.IsLocalityRegionalByRow() {
return pgerror.New(pgcode.FeatureNotSupported, "hash sharded indexes are not compatible with REGIONAL BY ROW tables")
}
@@ -147,35 +130,6 @@ func (p *planner) AlterPrimaryKey(
}
}
- // Disable primary key changes on tables that are interleaved parents.
- if tableDesc.GetPrimaryIndex().NumInterleavedBy() != 0 {
- var sb strings.Builder
- sb.WriteString("[")
- comma := ", "
- for i := 0; i < tableDesc.GetPrimaryIndex().NumInterleavedBy(); i++ {
- interleaveTableID := tableDesc.GetPrimaryIndex().GetInterleavedBy(i).Table
- if i != 0 {
- sb.WriteString(comma)
- }
- childTable, err := p.Descriptors().GetImmutableTableByID(
- ctx,
- p.Txn(),
- interleaveTableID,
- tree.ObjectLookupFlags{},
- )
- if err != nil {
- return err
- }
- sb.WriteString(childTable.GetName())
- }
- sb.WriteString("]")
- return errors.Newf(
- "cannot change primary key of table %s because table(s) %s are interleaved into it",
- tableDesc.Name,
- sb.String(),
- )
- }
-
// Validate if the end result is the same as the current
// primary index, which would mean nothing needs to be modified
// here.
@@ -276,15 +230,6 @@ func (p *planner) AlterPrimaryKey(
return err
}
- if alterPKNode.Interleave != nil {
- if err := p.addInterleave(ctx, tableDesc, newPrimaryIndexDesc, alterPKNode.Interleave); err != nil {
- return err
- }
- if err := p.finalizeInterleave(ctx, tableDesc, newPrimaryIndexDesc); err != nil {
- return err
- }
- }
-
var allowedNewColumnNames []tree.Name
var err error
// isNewPartitionAllBy is set if a new PARTITION ALL BY statement is introduced.
@@ -362,12 +307,6 @@ func (p *planner) AlterPrimaryKey(
if err != nil {
return err
}
- } else {
- if err := maybeCopyPartitioningWhenDeinterleaving(
- ctx, p, tableDesc, newPrimaryIndexDesc,
- ); err != nil {
- return err
- }
}
if partitionAllBy != nil {
@@ -399,9 +338,6 @@ func (p *planner) AlterPrimaryKey(
newUniqueIdx.KeySuffixColumnIDs = nil
newUniqueIdx.CompositeColumnIDs = nil
newUniqueIdx.KeyColumnIDs = nil
- // Make the copy of the old primary index not-interleaved. This decision
- // can be revisited based on user experience.
- newUniqueIdx.Interleave = descpb.InterleaveDescriptor{}
// Set correct version and encoding type.
newUniqueIdx.Version = descpb.StrictIndexColumnIDGuaranteesVersion
newUniqueIdx.EncodingType = descpb.SecondaryIndexEncoding
@@ -516,15 +452,6 @@ func (p *planner) AlterPrimaryKey(
if err := addIndexMutationWithSpecificPrimaryKey(ctx, tableDesc, &newIndex, newPrimaryIndexDesc); err != nil {
return err
}
- // If the index that we are rewriting is interleaved, we need to setup the rewritten
- // index to be interleaved as well. Since we cloned the index, the interleave descriptor
- // on the new index is already set up. So, we just need to add the backreference from the
- // parent to this new index.
- if len(newIndex.Interleave.Ancestors) != 0 {
- if err := p.finalizeInterleave(ctx, tableDesc, &newIndex); err != nil {
- return err
- }
- }
oldIndexIDs = append(oldIndexIDs, idx.GetID())
newIndexIDs = append(newIndexIDs, newIndex.ID)
@@ -572,94 +499,6 @@ func (p *planner) AlterPrimaryKey(
return nil
}
-func maybeCopyPartitioningWhenDeinterleaving(
- ctx context.Context,
- p *planner,
- tableDesc *tabledesc.Mutable,
- newPrimaryIndexDesc *descpb.IndexDescriptor,
-) error {
- if tableDesc.GetPrimaryIndex().NumInterleaveAncestors() == 0 ||
- !p.SessionData().CopyPartitioningWhenDeinterleavingTable ||
- len(newPrimaryIndexDesc.Interleave.Ancestors) > 0 {
- return nil
- }
-
- // The old primary key was interleaved in a parent and the new one is not.
- // In this case, we need to clone out the old primary key's partitioning
- // and zone configs and apply them to the new primary index. We do this
- // if the old primary index and the new primary index have the exact same
- // columns. That also allows us to side-step discussions of what to do
- // about partitioning for any newly created unique index we might create
- // below.
-
- root := tableDesc.GetPrimaryIndex().GetInterleaveAncestor(0)
- interleaveRoot, err := p.Descriptors().GetImmutableTableByID(ctx, p.txn, root.TableID, tree.ObjectLookupFlags{
- CommonLookupFlags: tree.CommonLookupFlags{
- Required: true,
- AvoidCached: true,
- },
- DesiredObjectKind: tree.TableObject,
- })
- if err != nil {
- return errors.Wrap(err, "looking up interleaved root")
- }
- rootIndex, err := interleaveRoot.FindIndexWithID(root.IndexID)
- if err != nil {
- return errors.Wrap(err, "looking up interleaved root index")
- }
-
- // If the new primary key does not have the interleave root as a prefix,
- // do not copy the interleave.
- if rootKeys := rootIndex.IndexDesc().KeyColumnIDs; !descpb.ColumnIDs.Equals(
- rootKeys, newPrimaryIndexDesc.KeyColumnIDs[:len(rootKeys)],
- ) {
- return nil
- }
-
- // The parent is not partitioned, return.
- if rootIndex.GetPartitioning().NumColumns() == 0 {
- return nil
- }
- newPrimaryIndexDesc.Partitioning = *rootIndex.GetPartitioning().DeepCopy().PartitioningDesc()
- rootCfg, err := getZoneConfigRaw(ctx, p.txn, p.execCfg.Codec, p.execCfg.Settings, root.TableID)
- if err != nil {
- return errors.Wrapf(err, "retrieving zone config for table %s [%d]",
- interleaveRoot.GetName(), interleaveRoot.GetID())
- }
- tableCfg, err := getZoneConfigRaw(ctx, p.txn, p.execCfg.Codec, p.execCfg.Settings, tableDesc.GetID())
- if err != nil {
- return errors.Wrapf(err, "retrieving zone config for table %s [%d]",
- tableDesc.GetName(), tableDesc.GetID())
- }
- // Initialize the zone config for the child. We expect it to be nil because
- // the table was an interleaved child and we did not allow such children to
- // have zone configs. It may be a subzone placeholder because other indexes
- // might be partitioned and have zone configs.
- if tableCfg == nil {
- // Marking NumReplicas as 0 indicates that this zone config is a
- // subzone placeholder. We assume that the value in copying out the
- // partitioning is to copy out the configuration as it applies to the
- // partitions of the primary index.
- tableCfg = &zonepb.ZoneConfig{
- NumReplicas: proto.Int(0),
- }
- } else if !tableCfg.IsSubzonePlaceholder() {
- return errors.AssertionFailedf("child table %s [%d] of interleave was not a subzone placeholder",
- tableDesc.GetName(), tableDesc.GetID())
- }
-
- for _, s := range rootCfg.Subzones {
- if s.IndexID == uint32(root.IndexID) {
- s.IndexID = uint32(newPrimaryIndexDesc.ID)
- tableCfg.Subzones = append(tableCfg.Subzones, s)
- }
- }
- _, err = writeZoneConfig(
- ctx, p.txn, tableDesc.GetID(), tableDesc, tableCfg, p.execCfg, true,
- )
- return err
-}
-
// Given the current table descriptor and the new primary keys
// index descriptor this function determines if the two are
// equivalent and if any index creation operations are needed
@@ -674,8 +513,7 @@ func (p *planner) shouldCreateIndexes(
// Validate if basic properties between the two match.
if oldPK.NumKeyColumns() != len(alterPKNode.Columns) ||
- oldPK.IsSharded() != (alterPKNode.Sharded != nil) ||
- oldPK.IsInterleaved() != (alterPKNode.Interleave != nil) {
+ oldPK.IsSharded() != (alterPKNode.Sharded != nil) {
return true, nil
}
@@ -690,30 +528,6 @@ func (p *planner) shouldCreateIndexes(
}
}
- // Validate if interleaving properties match,
- // specifically the parent table, and the index
- // involved.
- if alterPKNode.Interleave != nil {
- _, parentTable, err := resolver.ResolveExistingTableObject(
- ctx, p, &alterPKNode.Interleave.Parent, tree.ObjectLookupFlagsWithRequiredTableKind(tree.ResolveRequireTableDesc),
- )
- if err != nil {
- return true, err
- }
-
- if oldPK.NumInterleaveAncestors() == 0 {
- return true, nil
- }
- if oldPK.GetInterleaveAncestor(oldPK.NumInterleaveAncestors()-1).TableID !=
- parentTable.GetID() {
- return true, nil
- }
- if oldPK.GetInterleaveAncestor(oldPK.NumInterleaveAncestors()-1).IndexID !=
- parentTable.GetPrimaryIndexID() {
- return true, nil
- }
- }
-
// If the old primary key is dropped, then recreation
// is required.
if oldPK.IsDisabled() {
diff --git a/pkg/sql/alter_table.go b/pkg/sql/alter_table.go
index f991b114de79..77adea737d0c 100644
--- a/pkg/sql/alter_table.go
+++ b/pkg/sql/alter_table.go
@@ -225,10 +225,9 @@ func (n *alterTableNode) startExec(params runParams) error {
// Translate this operation into an ALTER PRIMARY KEY command.
alterPK := &tree.AlterTableAlterPrimaryKey{
- Columns: d.Columns,
- Sharded: d.Sharded,
- Interleave: d.Interleave,
- Name: d.Name,
+ Columns: d.Columns,
+ Sharded: d.Sharded,
+ Name: d.Name,
}
if err := params.p.AlterPrimaryKey(
params.ctx,
diff --git a/pkg/sql/alter_table_locality.go b/pkg/sql/alter_table_locality.go
index 6515ea9bcfc3..262e40757c6b 100644
--- a/pkg/sql/alter_table_locality.go
+++ b/pkg/sql/alter_table_locality.go
@@ -237,10 +237,6 @@ func (n *alterTableSetLocalityNode) alterTableLocalityToRegionalByRow(
primaryIndexColIdxStart = int(n.tableDesc.PrimaryIndex.Partitioning.NumImplicitColumns)
}
- if n.tableDesc.IsInterleaved() {
- return interleaveOnRegionalByRowError()
- }
-
for _, idx := range n.tableDesc.AllIndexes() {
if idx.IsSharded() {
return pgerror.Newf(
diff --git a/pkg/sql/backfill.go b/pkg/sql/backfill.go
index a24ea4ce3d5a..8f4c97536bd8 100644
--- a/pkg/sql/backfill.go
+++ b/pkg/sql/backfill.go
@@ -292,9 +292,7 @@ func (sc *SchemaChanger) runBackfill(ctx context.Context) error {
if col := m.AsColumn(); col != nil {
needColumnBackfill = catalog.ColumnNeedsBackfill(col)
} else if idx := m.AsIndex(); idx != nil {
- if !canClearRangeForDrop(idx) {
- droppedIndexes = append(droppedIndexes, idx)
- }
+ // no-op
} else if c := m.AsConstraint(); c != nil {
constraintsToDrop = append(constraintsToDrop, c)
} else if m.AsPrimaryKeySwap() != nil || m.AsComputedColumnSwap() != nil || m.AsMaterializedViewRefresh() != nil {
@@ -769,74 +767,6 @@ func (sc *SchemaChanger) getTableVersion(
return tableDesc, nil
}
-// TruncateInterleavedIndexes truncates the input set of indexes from the given
-// table. It is used in the schema change GC job to delete interleaved index
-// data as part of a TRUNCATE statement. Note that we cannot use
-// SchemaChanger.truncateIndexes instead because that accesses the most recent
-// version of the table when deleting. In this case, we need to use the version
-// of the table before truncation, which is passed in.
-func TruncateInterleavedIndexes(
- ctx context.Context,
- execCfg *ExecutorConfig,
- table catalog.TableDescriptor,
- indexIDs []descpb.IndexID,
-) error {
- log.Infof(ctx, "truncating %d interleaved indexes", len(indexIDs))
- chunkSize := int64(indexTruncateChunkSize)
- alloc := &rowenc.DatumAlloc{}
- codec, db := execCfg.Codec, execCfg.DB
- zoneConfigIndexIDList := make([]uint32, len(indexIDs))
- for i, id := range indexIDs {
- zoneConfigIndexIDList[i] = uint32(id)
- }
- for _, id := range indexIDs {
- idx, err := table.FindIndexWithID(id)
- if err != nil {
- return err
- }
- var resume roachpb.Span
- for rowIdx, done := int64(0), false; !done; rowIdx += chunkSize {
- log.VEventf(ctx, 2, "truncate interleaved index (%d) at row: %d, span: %s", table.GetID(), rowIdx, resume)
- resumeAt := resume
- // Make a new txn just to drop this chunk.
- if err := db.Txn(ctx, func(ctx context.Context, txn *kv.Txn) error {
- rd := row.MakeDeleter(
- codec, table, nil /* requestedCols */, &execCfg.Settings.SV, true, /* internal */
- execCfg.GetRowMetrics(true /* internal */),
- )
- td := tableDeleter{rd: rd, alloc: alloc}
- if err := td.init(ctx, txn, nil /* *tree.EvalContext */, &execCfg.Settings.SV); err != nil {
- return err
- }
- resume, err := td.deleteIndex(
- ctx,
- idx,
- resumeAt,
- chunkSize,
- false, /* traceKV */
- )
- done = resume.Key == nil
- return err
- }); err != nil {
- return err
- }
- }
- // All the data chunks have been removed. Now also removed the
- // zone configs for the dropped indexes, if any.
- if err := db.Txn(ctx, func(ctx context.Context, txn *kv.Txn) error {
- freshTableDesc, err := catalogkv.MustGetTableDescByID(ctx, txn, execCfg.Codec, table.GetID())
- if err != nil {
- return err
- }
- return RemoveIndexZoneConfigs(ctx, txn, execCfg, freshTableDesc, zoneConfigIndexIDList)
- }); err != nil {
- return err
- }
- }
- log.Infof(ctx, "finished truncating interleaved indexes")
- return nil
-}
-
// truncateIndexes truncate the KV ranges corresponding to dropped indexes.
//
// The indexes are dropped chunk by chunk, each chunk being deleted in
@@ -846,66 +776,46 @@ func (sc *SchemaChanger) truncateIndexes(
) error {
log.Infof(ctx, "clearing data for %d indexes", len(dropped))
- chunkSize := sc.getChunkSize(indexTruncateChunkSize)
- if sc.testingKnobs.BackfillChunkSize > 0 {
- chunkSize = sc.testingKnobs.BackfillChunkSize
- }
alloc := &rowenc.DatumAlloc{}
droppedIndexIDs := make([]uint32, len(dropped))
for i, idx := range dropped {
droppedIndexIDs[i] = uint32(idx.GetID())
}
for _, idx := range dropped {
- var resume roachpb.Span
- for rowIdx, done := int64(0), false; !done; rowIdx += chunkSize {
- resumeAt := resume
- if log.V(2) {
- log.Infof(ctx, "drop index (%d, %d) at row: %d, span: %s",
- sc.descID, sc.mutationID, rowIdx, resume)
- }
-
- // Make a new txn just to drop this chunk.
- if err := sc.txn(ctx, func(
- ctx context.Context, txn *kv.Txn, tc *descs.Collection,
- ) error {
- if fn := sc.execCfg.DistSQLRunTestingKnobs.RunBeforeBackfillChunk; fn != nil {
- if err := fn(resume); err != nil {
- return err
- }
- }
- if fn := sc.execCfg.DistSQLRunTestingKnobs.RunAfterBackfillChunk; fn != nil {
- defer fn()
- }
+ if log.V(2) {
+ log.Infof(ctx, "drop index (%d, %d)",
+ sc.descID, sc.mutationID)
+ }
- // Retrieve a lease for this table inside the current txn.
- tableDesc, err := sc.getTableVersion(ctx, txn, tc, version)
- if err != nil {
- return err
- }
- rd := row.MakeDeleter(
- sc.execCfg.Codec, tableDesc, nil /* requestedCols */, &sc.settings.SV,
- true /* internal */, sc.execCfg.GetRowMetrics(true /* internal */),
- )
- td := tableDeleter{rd: rd, alloc: alloc}
- if err := td.init(ctx, txn, nil /* *tree.EvalContext */, &sc.settings.SV); err != nil {
- return err
- }
- if !canClearRangeForDrop(idx) {
- resume, err = td.deleteIndex(
- ctx,
- idx,
- resumeAt,
- chunkSize,
- false, /* traceKV */
- )
- done = resume.Key == nil
+ // Make a new txn just to drop this index.
+ if err := sc.txn(ctx, func(
+ ctx context.Context, txn *kv.Txn, tc *descs.Collection,
+ ) error {
+ if fn := sc.execCfg.DistSQLRunTestingKnobs.RunBeforeBackfillChunk; fn != nil {
+ if err := fn(roachpb.Span{}); err != nil {
return err
}
- done = true
- return td.clearIndex(ctx, idx)
- }); err != nil {
+ }
+ if fn := sc.execCfg.DistSQLRunTestingKnobs.RunAfterBackfillChunk; fn != nil {
+ defer fn()
+ }
+
+ // Retrieve a lease for this table inside the current txn.
+ tableDesc, err := sc.getTableVersion(ctx, txn, tc, version)
+ if err != nil {
+ return err
+ }
+ rd := row.MakeDeleter(
+ sc.execCfg.Codec, tableDesc, nil /* requestedCols */, &sc.settings.SV,
+ true /* internal */, sc.execCfg.GetRowMetrics(true /* internal */),
+ )
+ td := tableDeleter{rd: rd, alloc: alloc}
+ if err := td.init(ctx, txn, nil /* *tree.EvalContext */, &sc.settings.SV); err != nil {
return err
}
+ return td.clearIndex(ctx, idx)
+ }); err != nil {
+ return err
}
// All the data chunks have been removed. Now also removed the
@@ -2120,24 +2030,6 @@ func runSchemaChangesInTxn(
if err := tableDesc.MakeMutationComplete(tableDesc.Mutations[m.MutationOrdinal()]); err != nil {
return err
}
-
- // If the mutation we processed was a primary key swap, there is some
- // extra work that needs to be done. Note that we don't need to create
- // a job to clean up the dropped indexes because those mutations can
- // get processed in this txn on the new table.
- if err := maybeRemoveInterleaveBackreference(
- ctx, planner.txn, planner.Descriptors(), m, tableDesc, func(
- ctx context.Context, ancestor *tabledesc.Mutable,
- ) error {
- return planner.writeSchemaChange(ctx, ancestor, descpb.InvalidMutationID,
- fmt.Sprintf("remove interleaved backreference from table %s(%d) "+
- "for primary key swap of table %s(%d)",
- ancestor.Name, ancestor.ID, tableDesc.Name, tableDesc.GetID(),
- ))
- },
- ); err != nil {
- return err
- }
}
// Clear all the mutations except for adding constraints.
tableDesc.Mutations = make([]descpb.DescriptorMutation, len(constraintAdditionMutations))
diff --git a/pkg/sql/catalog/catalogkeys/keys.go b/pkg/sql/catalog/catalogkeys/keys.go
index 9b5ef31f0c1b..f23d58f63fb4 100644
--- a/pkg/sql/catalog/catalogkeys/keys.go
+++ b/pkg/sql/catalog/catalogkeys/keys.go
@@ -50,50 +50,23 @@ func IsDefaultCreatedDescriptor(descID descpb.ID) bool {
// IndexKeyValDirs returns the corresponding encoding.Directions for all the
// encoded values in index's "fullest" possible index key, including directions
-// for table/index IDs, the interleaved sentinel and the index column values.
-// For example, given
-// CREATE INDEX foo ON bar (a, b DESC) INTERLEAVED IN PARENT bar (a)
-// a typical index key with all values specified could be
-// /51/1/42/#/51/2/1337
-// which would return the slice
-// {ASC, ASC, ASC, 0, ASC, ASC, DESC}
+// for table/index IDs and the index column values.
func IndexKeyValDirs(index catalog.Index) []encoding.Direction {
if index == nil {
return nil
}
- dirs := make([]encoding.Direction, 0, (index.NumInterleaveAncestors()+1)*2+index.NumKeyColumns())
-
- colIdx := 0
- for i := 0; i < index.NumInterleaveAncestors(); i++ {
- ancs := index.GetInterleaveAncestor(i)
- // Table/Index IDs are always encoded ascending.
- dirs = append(dirs, encoding.Ascending, encoding.Ascending)
- for i := 0; i < int(ancs.SharedPrefixLen); i++ {
- d, err := index.GetKeyColumnDirection(colIdx).ToEncodingDirection()
- if err != nil {
- panic(err)
- }
- dirs = append(dirs, d)
- colIdx++
- }
-
- // The interleaved sentinel uses the 0 value for
- // encoding.Direction when pretty-printing (see
- // encoding.go:prettyPrintFirstValue).
- dirs = append(dirs, 0)
- }
+ dirs := make([]encoding.Direction, 0, 2+index.NumKeyColumns())
// The index's table/index ID.
dirs = append(dirs, encoding.Ascending, encoding.Ascending)
- for colIdx < index.NumKeyColumns() {
+ for colIdx := 0; colIdx < index.NumKeyColumns(); colIdx++ {
d, err := index.GetKeyColumnDirection(colIdx).ToEncodingDirection()
if err != nil {
panic(err)
}
dirs = append(dirs, d)
- colIdx++
}
return dirs
diff --git a/pkg/sql/catalog/catconstants/constants.go b/pkg/sql/catalog/catconstants/constants.go
index 48072198b398..6a76b8250095 100644
--- a/pkg/sql/catalog/catconstants/constants.go
+++ b/pkg/sql/catalog/catconstants/constants.go
@@ -140,7 +140,6 @@ const (
CrdbInternalZonesTableID
CrdbInternalInvalidDescriptorsTableID
CrdbInternalClusterDatabasePrivilegesTableID
- CrdbInternalInterleaved
CrdbInternalCrossDbRefrences
CrdbInternalLostTableDescriptors
CrdbInternalClusterInflightTracesTable
diff --git a/pkg/sql/catalog/catformat/index.go b/pkg/sql/catalog/catformat/index.go
index c9cd61c1f914..9c83d3853fbb 100644
--- a/pkg/sql/catalog/catformat/index.go
+++ b/pkg/sql/catalog/catformat/index.go
@@ -42,10 +42,9 @@ func IndexForDisplay(
tableName *tree.TableName,
index catalog.Index,
partition string,
- interleave string,
semaCtx *tree.SemaContext,
) (string, error) {
- return indexForDisplay(ctx, table, tableName, index.IndexDesc(), index.Primary(), partition, interleave, semaCtx)
+ return indexForDisplay(ctx, table, tableName, index.IndexDesc(), index.Primary(), partition, semaCtx)
}
func indexForDisplay(
@@ -55,7 +54,6 @@ func indexForDisplay(
index *descpb.IndexDescriptor,
isPrimary bool,
partition string,
- interleave string,
semaCtx *tree.SemaContext,
) (string, error) {
f := tree.NewFmtCtx(tree.FmtSimple)
@@ -93,7 +91,6 @@ func indexForDisplay(
f.WriteByte(')')
}
- f.WriteString(interleave)
f.WriteString(partition)
if err := formatStorageConfigs(table, index, f); err != nil {
diff --git a/pkg/sql/catalog/catformat/index_test.go b/pkg/sql/catalog/catformat/index_test.go
index bb5027cde8a2..daef46c18a75 100644
--- a/pkg/sql/catalog/catformat/index_test.go
+++ b/pkg/sql/catalog/catformat/index_test.go
@@ -102,46 +102,30 @@ func TestIndexForDisplay(t *testing.T) {
}
testData := []struct {
- index descpb.IndexDescriptor
- tableName tree.TableName
- partition string
- interleave string
- expected string
+ index descpb.IndexDescriptor
+ tableName tree.TableName
+ partition string
+ expected string
}{
- {baseIndex, descpb.AnonymousTable, "", "", "INDEX baz (a ASC, b DESC)"},
- {baseIndex, tableName, "", "", "INDEX baz ON foo.public.bar (a ASC, b DESC)"},
- {uniqueIndex, descpb.AnonymousTable, "", "", "UNIQUE INDEX baz (a ASC, b DESC)"},
- {invertedIndex, descpb.AnonymousTable, "", "", "INVERTED INDEX baz (a)"},
- {storingIndex, descpb.AnonymousTable, "", "", "INDEX baz (a ASC, b DESC) STORING (c)"},
- {partialIndex, descpb.AnonymousTable, "", "", "INDEX baz (a ASC, b DESC) WHERE a > 1:::INT8"},
- {expressionIndex, descpb.AnonymousTable, "", "", "INDEX baz (a ASC, (a + b) DESC, b ASC)"},
+ {baseIndex, descpb.AnonymousTable, "", "INDEX baz (a ASC, b DESC)"},
+ {baseIndex, tableName, "", "INDEX baz ON foo.public.bar (a ASC, b DESC)"},
+ {uniqueIndex, descpb.AnonymousTable, "", "UNIQUE INDEX baz (a ASC, b DESC)"},
+ {invertedIndex, descpb.AnonymousTable, "", "INVERTED INDEX baz (a)"},
+ {storingIndex, descpb.AnonymousTable, "", "INDEX baz (a ASC, b DESC) STORING (c)"},
+ {partialIndex, descpb.AnonymousTable, "", "INDEX baz (a ASC, b DESC) WHERE a > 1:::INT8"},
+ {expressionIndex, descpb.AnonymousTable, "", "INDEX baz (a ASC, (a + b) DESC, b ASC)"},
{
partialIndex,
descpb.AnonymousTable,
" PARTITION BY LIST (a) (PARTITION p VALUES IN (2))",
- "",
"INDEX baz (a ASC, b DESC) PARTITION BY LIST (a) (PARTITION p VALUES IN (2)) WHERE a > 1:::INT8",
},
- {
- partialIndex,
- descpb.AnonymousTable,
- "",
- " INTERLEAVE IN PARENT par (a)",
- "INDEX baz (a ASC, b DESC) INTERLEAVE IN PARENT par (a) WHERE a > 1:::INT8",
- },
- {
- partialIndex,
- descpb.AnonymousTable,
- " PARTITION BY LIST (a) (PARTITION p VALUES IN (2))",
- " INTERLEAVE IN PARENT par (a)",
- "INDEX baz (a ASC, b DESC) INTERLEAVE IN PARENT par (a) PARTITION BY LIST (a) (PARTITION p VALUES IN (2)) WHERE a > 1:::INT8",
- },
}
for testIdx, tc := range testData {
t.Run(strconv.Itoa(testIdx), func(t *testing.T) {
got, err := indexForDisplay(
- ctx, tableDesc, &tc.tableName, &tc.index, false /* isPrimary */, tc.partition, tc.interleave, &semaCtx,
+ ctx, tableDesc, &tc.tableName, &tc.index, false /* isPrimary */, tc.partition, &semaCtx,
)
if err != nil {
t.Fatalf("unexpected error: %s", err)
diff --git a/pkg/sql/catalog/descpb/index.go b/pkg/sql/catalog/descpb/index.go
index 581310725efd..f9ffae5bc784 100644
--- a/pkg/sql/catalog/descpb/index.go
+++ b/pkg/sql/catalog/descpb/index.go
@@ -17,11 +17,6 @@ import (
"github.com/cockroachdb/errors"
)
-// IsInterleaved returns whether the index is interleaved or not.
-func (desc *IndexDescriptor) IsInterleaved() bool {
- return len(desc.Interleave.Ancestors) > 0 || len(desc.InterleavedBy) > 0
-}
-
// IsSharded returns whether the index is hash sharded or not.
func (desc *IndexDescriptor) IsSharded() bool {
return desc.Sharded.IsSharded
diff --git a/pkg/sql/catalog/descpb/structured.pb.go b/pkg/sql/catalog/descpb/structured.pb.go
index 801b08d74b96..1d8a5479c87a 100644
--- a/pkg/sql/catalog/descpb/structured.pb.go
+++ b/pkg/sql/catalog/descpb/structured.pb.go
@@ -1530,7 +1530,7 @@ type IndexDescriptor struct {
ReferencedBy []ForeignKeyReference `protobuf:"bytes,10,rep,name=referenced_by,json=referencedBy" json:"referenced_by"` // Deprecated: Do not use.
// Interleave, if it's not the zero value, describes how this index's data is
// interleaved into another index's data.
- Interleave InterleaveDescriptor `protobuf:"bytes,11,opt,name=interleave" json:"interleave"`
+ Interleave InterleaveDescriptor `protobuf:"bytes,11,opt,name=interleave" json:"interleave"` // Deprecated: Do not use.
// InterleavedBy contains a reference to every table/index that is interleaved
// into this one.
//
@@ -1542,7 +1542,7 @@ type IndexDescriptor struct {
// despite the message used here, interleavings don't have to have
// corresponding foreign key references (and whether they do or not is
// irrelevant for this field).
- InterleavedBy []ForeignKeyReference `protobuf:"bytes,12,rep,name=interleaved_by,json=interleavedBy" json:"interleaved_by"`
+ InterleavedBy []ForeignKeyReference `protobuf:"bytes,12,rep,name=interleaved_by,json=interleavedBy" json:"interleaved_by"` // Deprecated: Do not use.
// Partitioning, if it's not the zero value, describes how this index's data
// is partitioned into spans of keys each addressable by zone configs.
Partitioning PartitioningDescriptor `protobuf:"bytes,15,opt,name=partitioning" json:"partitioning"`
@@ -2232,9 +2232,6 @@ type TableDescriptor struct {
// can be reused. This list is separate because mutations can
// lie in this list for a long time (gc deadline) and should not block
// the execution of other schema changes on the table.
- //
- // TODO(vivekmenezes): This is currently only used by the non-interleaved drop
- // index case. Also use for dropped interleaved indexes and columns.
GCMutations []TableDescriptor_GCDescriptorMutation `protobuf:"bytes,33,rep,name=gc_mutations,json=gcMutations" json:"gc_mutations"`
CreateQuery string `protobuf:"bytes,34,opt,name=create_query,json=createQuery" json:"create_query"`
// Starting in 19.2 CreateAsOfTime is initialized to zero for the first
@@ -3891,360 +3888,360 @@ func init() {
}
var fileDescriptor_12dcc21c3bcc9571 = []byte{
- // 5640 bytes of a gzipped FileDescriptorProto
+ // 5636 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x3c, 0x4b, 0x73, 0x1c, 0xc7,
- 0x79, 0xd8, 0x17, 0x76, 0xf7, 0xdb, 0xd7, 0xa0, 0x09, 0x92, 0x2b, 0x98, 0x02, 0xc0, 0xa5, 0x28,
- 0x41, 0x94, 0x04, 0x52, 0x90, 0x6c, 0x53, 0x92, 0xed, 0x68, 0x5f, 0x20, 0x96, 0x04, 0x76, 0xa1,
- 0xc1, 0x82, 0x94, 0xec, 0xc4, 0xe3, 0xc1, 0x4e, 0x63, 0x31, 0xc2, 0xec, 0xcc, 0x72, 0x66, 0x96,
- 0xe0, 0xba, 0x72, 0x48, 0xf9, 0x94, 0x53, 0x92, 0x43, 0x6e, 0x29, 0x57, 0x5c, 0x29, 0x57, 0xe2,
- 0x9b, 0xcb, 0x95, 0xaa, 0xa4, 0x2a, 0x87, 0x5c, 0xe3, 0xa3, 0x53, 0xa9, 0x4a, 0xf9, 0x84, 0x4a,
- 0xe0, 0x4b, 0x7e, 0x40, 0x2a, 0x07, 0x5d, 0x92, 0xea, 0xd7, 0x3c, 0xf6, 0x01, 0x2d, 0x00, 0xc6,
- 0x07, 0xa9, 0x30, 0x5f, 0x7f, 0xdf, 0xd7, 0xdd, 0x5f, 0x7f, 0xef, 0xee, 0x25, 0xdc, 0x71, 0x9e,
- 0x1b, 0xf7, 0x3b, 0xaa, 0xab, 0x1a, 0x56, 0xf7, 0xbe, 0x86, 0x9d, 0x4e, 0xff, 0xe0, 0xbe, 0xe3,
- 0xda, 0x83, 0x8e, 0x3b, 0xb0, 0xb1, 0xb6, 0xde, 0xb7, 0x2d, 0xd7, 0x42, 0xd7, 0x3b, 0x56, 0xe7,
- 0xd8, 0xb6, 0xd4, 0xce, 0xd1, 0xba, 0xf3, 0xdc, 0x20, 0xff, 0x1d, 0xa8, 0x0e, 0x5e, 0x2a, 0x0e,
- 0x5c, 0xdd, 0xb8, 0x7f, 0x64, 0x74, 0xee, 0xbb, 0x7a, 0x0f, 0x3b, 0xae, 0xda, 0xeb, 0x33, 0x82,
- 0xa5, 0xd2, 0x04, 0xae, 0x7d, 0x5b, 0x7f, 0xa1, 0x1b, 0xb8, 0x8b, 0x39, 0xce, 0x75, 0x82, 0xe3,
- 0x0e, 0xfb, 0xd8, 0x61, 0xff, 0xe7, 0xe0, 0xd7, 0xba, 0xd8, 0xba, 0xdf, 0xc5, 0x96, 0x6e, 0x6a,
- 0xf8, 0xe5, 0xfd, 0x8e, 0x65, 0x1e, 0xea, 0x5d, 0x3e, 0xb4, 0xd8, 0xb5, 0xba, 0x16, 0xfd, 0xf3,
- 0x3e, 0xf9, 0x8b, 0x41, 0x4b, 0x3f, 0x49, 0xc0, 0xb5, 0x4d, 0xcb, 0xc6, 0x7a, 0xd7, 0x7c, 0x82,
- 0x87, 0x32, 0x3e, 0xc4, 0x36, 0x36, 0x3b, 0x18, 0xad, 0x42, 0xc2, 0x55, 0x0f, 0x0c, 0x5c, 0x8c,
- 0xac, 0x46, 0xd6, 0x72, 0x15, 0xf8, 0xf5, 0xe9, 0xca, 0xdc, 0x57, 0xa7, 0x2b, 0xd1, 0x46, 0x4d,
- 0x66, 0x03, 0xe8, 0x2e, 0x24, 0xe8, 0x2c, 0xc5, 0x28, 0xc5, 0x28, 0x70, 0x8c, 0x64, 0x83, 0x00,
- 0x09, 0x1a, 0x1d, 0x45, 0x45, 0x88, 0x9b, 0x6a, 0x0f, 0x17, 0x63, 0xab, 0x91, 0xb5, 0x74, 0x25,
- 0x4e, 0xb0, 0x64, 0x0a, 0x41, 0x4f, 0x20, 0xf5, 0x42, 0x35, 0x74, 0x4d, 0x77, 0x87, 0xc5, 0xf8,
- 0x6a, 0x64, 0x2d, 0xbf, 0xf1, 0xf6, 0xfa, 0x44, 0x51, 0xad, 0x57, 0x2d, 0xd3, 0x71, 0x6d, 0x55,
- 0x37, 0xdd, 0xa7, 0x9c, 0x80, 0x33, 0xf2, 0x18, 0xa0, 0x07, 0xb0, 0xe0, 0x1c, 0xa9, 0x36, 0xd6,
- 0x94, 0xbe, 0x8d, 0x0f, 0xf5, 0x97, 0x8a, 0x81, 0xcd, 0x62, 0x62, 0x35, 0xb2, 0x96, 0xe0, 0xa8,
- 0x05, 0x36, 0xbc, 0x4b, 0x47, 0xb7, 0xb1, 0x89, 0xda, 0x90, 0xb6, 0x4c, 0x45, 0xc3, 0x06, 0x76,
- 0x71, 0x71, 0x9e, 0xce, 0xff, 0xfe, 0x94, 0xf9, 0x27, 0x08, 0x68, 0xbd, 0xdc, 0x71, 0x75, 0xcb,
- 0x14, 0xeb, 0xb0, 0xcc, 0x1a, 0x65, 0xc4, 0xb9, 0x0e, 0xfa, 0x9a, 0xea, 0xe2, 0x62, 0xf2, 0xca,
- 0x5c, 0xf7, 0x29, 0x23, 0xb4, 0x0d, 0x89, 0x9e, 0xea, 0x76, 0x8e, 0x8a, 0x29, 0xca, 0xf1, 0xc1,
- 0x05, 0x38, 0xee, 0x10, 0x3a, 0xce, 0x90, 0x31, 0x29, 0x3d, 0x83, 0x79, 0x36, 0x0f, 0xca, 0x41,
- 0xba, 0xd9, 0x52, 0xca, 0xd5, 0x76, 0xa3, 0xd5, 0x94, 0xe6, 0x50, 0x16, 0x52, 0x72, 0x7d, 0xaf,
- 0x2d, 0x37, 0xaa, 0x6d, 0x29, 0x42, 0xbe, 0xf6, 0xea, 0x6d, 0xa5, 0xb9, 0xbf, 0xbd, 0x2d, 0x45,
- 0x51, 0x01, 0x32, 0xe4, 0xab, 0x56, 0xdf, 0x2c, 0xef, 0x6f, 0xb7, 0xa5, 0x18, 0xca, 0x40, 0xb2,
- 0x5a, 0xde, 0xab, 0x96, 0x6b, 0x75, 0x29, 0xbe, 0x14, 0xff, 0xc5, 0xcf, 0x97, 0xe7, 0x4a, 0x0f,
- 0x20, 0x41, 0xa7, 0x43, 0x00, 0xf3, 0x7b, 0x8d, 0x9d, 0xdd, 0xed, 0xba, 0x34, 0x87, 0x52, 0x10,
- 0xdf, 0x24, 0x2c, 0x22, 0x84, 0x62, 0xb7, 0x2c, 0xb7, 0x1b, 0xe5, 0x6d, 0x29, 0xca, 0x28, 0x3e,
- 0x8e, 0xff, 0xd7, 0xcf, 0x56, 0x22, 0xa5, 0x7f, 0x4d, 0xc0, 0xa2, 0xbf, 0x76, 0xff, 0xb4, 0x51,
- 0x15, 0x0a, 0x96, 0xad, 0x77, 0x75, 0x53, 0xa1, 0x3a, 0xa7, 0xe8, 0x1a, 0xd7, 0xc7, 0x6f, 0x90,
- 0xfd, 0x9c, 0x9d, 0xae, 0xe4, 0x5a, 0x74, 0xb8, 0x4d, 0x46, 0x1b, 0x35, 0xae, 0xa0, 0x39, 0x2b,
- 0x00, 0xd4, 0xd0, 0x13, 0x58, 0xe0, 0x4c, 0x3a, 0x96, 0x31, 0xe8, 0x99, 0x8a, 0xae, 0x39, 0xc5,
- 0xe8, 0x6a, 0x6c, 0x2d, 0x57, 0x59, 0x39, 0x3b, 0x5d, 0x29, 0x30, 0x16, 0x55, 0x3a, 0xd6, 0xa8,
- 0x39, 0x5f, 0x9d, 0xae, 0xa4, 0xc4, 0x87, 0xcc, 0xa7, 0xe7, 0xdf, 0x9a, 0x83, 0x9e, 0xc1, 0x75,
- 0x5b, 0xc8, 0x56, 0x0b, 0x32, 0x8c, 0x51, 0x86, 0x77, 0xce, 0x4e, 0x57, 0xae, 0x79, 0xc2, 0xd7,
- 0x26, 0x33, 0xbd, 0x66, 0x8f, 0x22, 0x68, 0x0e, 0x6a, 0x41, 0x00, 0xec, 0x6f, 0x37, 0x4e, 0xb7,
- 0xbb, 0xc2, 0xb7, 0xbb, 0xe0, 0xb3, 0x0e, 0x6f, 0x79, 0xc1, 0x1e, 0x19, 0xd0, 0x3c, 0xc3, 0x4b,
- 0x9c, 0x6b, 0x78, 0xf3, 0x57, 0x35, 0xbc, 0x90, 0x19, 0x25, 0xff, 0x5f, 0xcc, 0x28, 0xf5, 0xca,
- 0xcd, 0x28, 0xfd, 0x0a, 0xcc, 0x88, 0xe9, 0xee, 0xe3, 0x78, 0x0a, 0xa4, 0xcc, 0xe3, 0x78, 0x2a,
- 0x23, 0x65, 0x1f, 0xc7, 0x53, 0x59, 0x29, 0xf7, 0x38, 0x9e, 0xca, 0x49, 0xf9, 0xd2, 0x5f, 0x45,
- 0xe1, 0xd6, 0xbe, 0xa9, 0x3f, 0x1f, 0xe0, 0x67, 0xba, 0x7b, 0x64, 0x0d, 0x5c, 0xea, 0x17, 0x03,
- 0xba, 0xfd, 0x00, 0x52, 0x23, 0x4a, 0x7d, 0x9d, 0x9f, 0x72, 0x32, 0x7c, 0xb6, 0x49, 0x97, 0x9f,
- 0xe8, 0x43, 0x80, 0x31, 0x0d, 0x7e, 0xed, 0xec, 0x74, 0x25, 0x3d, 0x59, 0xcd, 0xd2, 0x1d, 0x4f,
- 0xb9, 0x7e, 0x4f, 0x4e, 0xb8, 0x04, 0xe9, 0xbe, 0x8d, 0x35, 0xbd, 0x43, 0x4e, 0x2d, 0xa8, 0x77,
- 0x3e, 0x98, 0x5b, 0xfc, 0xdf, 0x26, 0x41, 0x62, 0x0b, 0xad, 0x61, 0xa7, 0x63, 0xeb, 0x7d, 0xd7,
- 0xb2, 0xbd, 0x55, 0x46, 0xc6, 0x56, 0xf9, 0x26, 0x44, 0x75, 0x8d, 0x07, 0x9a, 0x1b, 0x5c, 0x4a,
- 0x51, 0x2a, 0x20, 0x7f, 0xbb, 0x51, 0x5d, 0x43, 0xeb, 0x10, 0x27, 0xd1, 0x90, 0xee, 0x33, 0xb3,
- 0xb1, 0x34, 0xba, 0x13, 0xdc, 0x5b, 0x67, 0xc1, 0xb2, 0x2d, 0x53, 0x3c, 0xb4, 0x0a, 0x29, 0x73,
- 0x60, 0x18, 0x34, 0xd0, 0x91, 0xdd, 0xa7, 0xc4, 0x96, 0x04, 0x14, 0xdd, 0x86, 0xac, 0x86, 0x0f,
- 0xd5, 0x81, 0xe1, 0x2a, 0xf8, 0x65, 0xdf, 0x66, 0xbb, 0x92, 0x33, 0x1c, 0x56, 0x7f, 0xd9, 0xb7,
- 0xd1, 0x1b, 0x90, 0xf7, 0x74, 0x95, 0x21, 0x21, 0x8a, 0x94, 0x15, 0x7a, 0x47, 0xb1, 0x6e, 0xc1,
- 0xfc, 0x91, 0xae, 0x69, 0xd8, 0xa4, 0x26, 0x27, 0x26, 0xe2, 0x30, 0xb4, 0x06, 0x59, 0xdd, 0x54,
- 0x3b, 0x1d, 0xec, 0x38, 0x3a, 0x59, 0xcc, 0x42, 0x00, 0x27, 0x34, 0x82, 0x9e, 0xc3, 0x52, 0x17,
- 0x9b, 0xd8, 0x56, 0x5d, 0xac, 0x29, 0xaa, 0xa3, 0xe8, 0x1a, 0x36, 0x5d, 0xdd, 0x1d, 0x2a, 0x74,
- 0xe3, 0xd7, 0xe8, 0x11, 0xae, 0x4f, 0x39, 0xc2, 0x47, 0x82, 0xb0, 0xec, 0x34, 0x38, 0x59, 0x7b,
- 0xd8, 0xc7, 0x7c, 0x9e, 0x9b, 0xdd, 0xc9, 0xc3, 0x68, 0x17, 0xee, 0x4e, 0x9e, 0xd2, 0xc1, 0xcf,
- 0x07, 0xc4, 0x3a, 0x14, 0xab, 0x4f, 0xec, 0xad, 0xb8, 0x48, 0xf7, 0x7d, 0x7b, 0x02, 0x9f, 0x3d,
- 0x8e, 0xd9, 0xa2, 0x88, 0x68, 0x03, 0x16, 0x06, 0x0e, 0x76, 0x7c, 0x06, 0x44, 0xa1, 0x81, 0x2a,
- 0xf4, 0x3c, 0xd7, 0xfa, 0x02, 0x41, 0x10, 0x64, 0x44, 0x87, 0x37, 0x60, 0xc1, 0x3a, 0x31, 0x47,
- 0x68, 0xb2, 0x61, 0x1a, 0x82, 0x10, 0xa4, 0xb9, 0x0d, 0xd9, 0x8e, 0xd5, 0xeb, 0x0f, 0xc4, 0xc1,
- 0x64, 0xd8, 0xe9, 0x71, 0x18, 0x3d, 0x97, 0x65, 0x48, 0xbe, 0xd0, 0x6d, 0x77, 0xa0, 0x1a, 0x45,
- 0x29, 0x20, 0x74, 0x01, 0x44, 0x9f, 0x82, 0xd4, 0xef, 0x2a, 0xaa, 0xeb, 0xda, 0xfa, 0x01, 0xe1,
- 0x63, 0x0e, 0x7a, 0xc5, 0x5c, 0x48, 0x11, 0xf3, 0xbb, 0x8f, 0xca, 0x62, 0xb8, 0x39, 0xe8, 0xc9,
- 0xf9, 0x7e, 0x37, 0xf8, 0x8d, 0x36, 0xe1, 0x75, 0xd5, 0x70, 0xb1, 0x2d, 0xa2, 0x05, 0x39, 0x28,
- 0x45, 0x37, 0x95, 0xbe, 0x6d, 0x75, 0x6d, 0xec, 0x38, 0xc5, 0x7c, 0x60, 0xde, 0xd7, 0x28, 0x2a,
- 0x53, 0x6a, 0x22, 0xfc, 0x86, 0xb9, 0xcb, 0xd1, 0xd0, 0x0f, 0x00, 0x39, 0x43, 0xc7, 0xc5, 0x3d,
- 0xc1, 0xe8, 0x58, 0x37, 0xb5, 0x62, 0x81, 0x9e, 0xf8, 0x5b, 0x53, 0x4e, 0x7c, 0x8f, 0x12, 0x30,
- 0x76, 0x4f, 0x74, 0x53, 0xe3, 0xb3, 0x48, 0xce, 0x08, 0xdc, 0x73, 0x66, 0x29, 0x29, 0xfd, 0x38,
- 0x9e, 0x4a, 0x4b, 0xf0, 0x38, 0x9e, 0x4a, 0x4a, 0xa9, 0xd2, 0x9f, 0x45, 0xe1, 0x06, 0x43, 0xdb,
- 0x54, 0x7b, 0xba, 0x31, 0xbc, 0xaa, 0xb9, 0x32, 0x2e, 0xdc, 0x5c, 0xe9, 0xf1, 0xd0, 0xad, 0x10,
- 0x32, 0x16, 0x43, 0xe9, 0xf1, 0x10, 0x58, 0x93, 0x80, 0x46, 0x7c, 0x5e, 0xfc, 0x02, 0x3e, 0xaf,
- 0x05, 0x0b, 0xc2, 0x72, 0x3d, 0x0e, 0xd4, 0x7c, 0x73, 0x95, 0x3b, 0x7c, 0x4d, 0x85, 0x1a, 0x43,
- 0x10, 0xe4, 0xe1, 0xd0, 0xaf, 0x85, 0x06, 0xb9, 0x88, 0x4a, 0xff, 0x18, 0x85, 0xc5, 0x86, 0xe9,
- 0x62, 0xdb, 0xc0, 0xea, 0x0b, 0x1c, 0x10, 0xc7, 0xe7, 0x90, 0x56, 0xcd, 0x0e, 0x76, 0x5c, 0xcb,
- 0x76, 0x8a, 0x91, 0xd5, 0xd8, 0x5a, 0x66, 0xe3, 0xc3, 0x29, 0xa7, 0x32, 0x89, 0x7e, 0xbd, 0xcc,
- 0x89, 0x85, 0xcb, 0xf4, 0x98, 0x2d, 0xfd, 0x73, 0x04, 0x52, 0x62, 0xf4, 0x12, 0x61, 0xe3, 0x9b,
- 0x90, 0xa2, 0xa9, 0xb8, 0xe2, 0x9d, 0xc9, 0x92, 0xa0, 0xe0, 0xb9, 0x7a, 0x30, 0x6d, 0x4f, 0x52,
- 0xdc, 0x86, 0x86, 0xaa, 0x93, 0x32, 0xea, 0x18, 0xa5, 0xbf, 0x29, 0xe4, 0xb7, 0x17, 0xce, 0xa9,
- 0xc7, 0x92, 0x6c, 0x26, 0x33, 0x2e, 0xb9, 0x7f, 0x88, 0xc0, 0x02, 0x21, 0xd0, 0xb0, 0x16, 0x10,
- 0xdb, 0x1d, 0x00, 0xdd, 0x51, 0x1c, 0x06, 0xa7, 0x3b, 0x12, 0xa6, 0x90, 0xd6, 0x1d, 0x8e, 0xee,
- 0xa9, 0x5a, 0x74, 0x4c, 0xd5, 0x3e, 0x82, 0x1c, 0xa5, 0x55, 0x0e, 0x06, 0x9d, 0x63, 0xec, 0x3a,
- 0x74, 0x85, 0x89, 0xca, 0x22, 0x5f, 0x61, 0x96, 0x72, 0xa8, 0xb0, 0x31, 0x39, 0xeb, 0x04, 0xbe,
- 0xc6, 0xb4, 0x2f, 0x3e, 0xa6, 0x7d, 0x7c, 0xe1, 0xbf, 0x8c, 0xc3, 0x8d, 0x5d, 0xd5, 0x76, 0x75,
- 0xe2, 0xbb, 0x74, 0xb3, 0x1b, 0x58, 0xfd, 0x5d, 0xc8, 0x98, 0x03, 0x61, 0x90, 0x0e, 0x3f, 0x10,
- 0xb6, 0x3e, 0x30, 0x07, 0xdc, 0xc0, 0x1c, 0xf4, 0x2d, 0x58, 0x24, 0x68, 0x7a, 0xaf, 0x6f, 0xe8,
- 0x1d, 0xdd, 0xf5, 0xf0, 0xe3, 0x01, 0x7c, 0x64, 0x0e, 0x7a, 0x0d, 0x8e, 0x20, 0xe8, 0xb6, 0x21,
- 0x6e, 0xe8, 0x8e, 0x4b, 0x63, 0x7d, 0x66, 0x63, 0x63, 0x8a, 0x3a, 0x4d, 0x5e, 0xdb, 0xfa, 0xb6,
- 0xee, 0xb8, 0x42, 0x56, 0x84, 0x0b, 0x6a, 0x41, 0xc2, 0x56, 0xcd, 0x2e, 0xa6, 0x76, 0x96, 0xd9,
- 0xf8, 0xe0, 0x62, 0xec, 0x64, 0x42, 0x2a, 0x32, 0x20, 0xca, 0x67, 0xe9, 0xa7, 0x11, 0x88, 0x93,
- 0x59, 0xce, 0x71, 0x05, 0x37, 0x60, 0xfe, 0x85, 0x6a, 0x0c, 0x30, 0xcb, 0x57, 0xb2, 0x32, 0xff,
- 0x42, 0x7f, 0x04, 0x05, 0x67, 0x70, 0xd0, 0x0f, 0x4c, 0xc5, 0x83, 0xf6, 0x7b, 0x17, 0x5a, 0x95,
- 0x57, 0xdc, 0x85, 0x79, 0xb1, 0x83, 0x5b, 0x7a, 0x0e, 0x09, 0xba, 0xea, 0x73, 0xd6, 0x77, 0x17,
- 0xf2, 0x87, 0xb6, 0xd5, 0x53, 0x74, 0xb3, 0x63, 0x0c, 0x1c, 0xfd, 0x05, 0xcb, 0x1d, 0xb2, 0x72,
- 0x8e, 0x40, 0x1b, 0x02, 0x48, 0x74, 0xc5, 0xb5, 0x14, 0xfc, 0x52, 0x20, 0x45, 0x29, 0x52, 0xc6,
- 0xb5, 0xea, 0x02, 0x14, 0x52, 0xf5, 0x7f, 0xca, 0x42, 0x81, 0x1a, 0xd4, 0x4c, 0xee, 0xf2, 0x6e,
- 0xc0, 0x5d, 0x5e, 0x0f, 0xb9, 0x4b, 0xcf, 0x2a, 0x89, 0xb7, 0xbc, 0x05, 0xf3, 0x03, 0x9a, 0x50,
- 0xd2, 0x25, 0x7a, 0x19, 0x04, 0x83, 0xa1, 0x87, 0x90, 0x7c, 0x81, 0x6d, 0x87, 0x84, 0x61, 0x44,
- 0x39, 0x2d, 0xf3, 0x82, 0xfc, 0xc6, 0xc8, 0x42, 0x9e, 0x32, 0x2c, 0x59, 0xa0, 0xa3, 0x35, 0x90,
- 0x8e, 0xf1, 0x50, 0x99, 0x60, 0x0b, 0xf9, 0x63, 0x52, 0x8d, 0xf9, 0xce, 0x58, 0x83, 0xeb, 0x01,
- 0x4c, 0x4d, 0xb7, 0x31, 0xcd, 0xb3, 0x9d, 0x62, 0x6a, 0x35, 0x76, 0x4e, 0x3e, 0x3d, 0xb2, 0x80,
- 0xf5, 0x9a, 0x20, 0x94, 0xaf, 0x79, 0x13, 0x78, 0x30, 0x07, 0xbd, 0x0b, 0x88, 0x78, 0x3a, 0x1c,
- 0x5e, 0x51, 0x82, 0xae, 0x48, 0xa2, 0x23, 0xc1, 0x35, 0x55, 0x20, 0x1f, 0x58, 0x13, 0x09, 0x12,
- 0xf3, 0x34, 0x48, 0xdc, 0x22, 0xd6, 0xff, 0x44, 0xb0, 0x1f, 0x8d, 0x13, 0x59, 0x6f, 0x62, 0x12,
- 0x2a, 0xf6, 0xd9, 0xbe, 0x9c, 0xc1, 0x21, 0xf1, 0x73, 0x01, 0x56, 0x49, 0xca, 0xaa, 0x74, 0x76,
- 0xba, 0x82, 0x9e, 0xe0, 0xe1, 0x1e, 0x1d, 0x9f, 0xcc, 0x10, 0x1d, 0x8f, 0x8c, 0x6b, 0x0e, 0xda,
- 0x02, 0x29, 0xb4, 0x11, 0xc2, 0x31, 0x4f, 0x39, 0x2e, 0x93, 0xb4, 0x61, 0xcf, 0xdf, 0xca, 0x28,
- 0xb7, 0x7c, 0x60, 0x9b, 0x84, 0x53, 0x1b, 0x16, 0x49, 0xce, 0x62, 0x39, 0xba, 0x1b, 0xe2, 0x96,
- 0xf3, 0xd7, 0x57, 0x15, 0xe3, 0x53, 0xd6, 0xd7, 0x19, 0x19, 0xd7, 0x1c, 0xb4, 0x07, 0x99, 0x43,
- 0x56, 0xea, 0x28, 0xc7, 0x78, 0x48, 0x8b, 0xa2, 0xcc, 0xc6, 0xbd, 0xd9, 0x8b, 0xa2, 0xca, 0x3c,
- 0x51, 0xb1, 0x62, 0x44, 0x86, 0x43, 0x6f, 0x10, 0x3d, 0x83, 0x5c, 0xa0, 0x8e, 0x3d, 0x18, 0xd2,
- 0xb4, 0xee, 0x72, 0x6c, 0xb3, 0x3e, 0xa3, 0xca, 0x10, 0x7d, 0x06, 0xa0, 0x7b, 0x71, 0x93, 0x66,
- 0x72, 0x99, 0x8d, 0x77, 0x2e, 0x10, 0x60, 0x85, 0x5b, 0xf6, 0x99, 0xa0, 0x67, 0x90, 0xf7, 0xbf,
- 0xe8, 0x62, 0xb3, 0x17, 0x5e, 0x2c, 0xe3, 0x9a, 0x0b, 0xf0, 0xa9, 0x10, 0x21, 0x64, 0x43, 0xae,
- 0xad, 0x70, 0x79, 0xd7, 0x16, 0x62, 0x84, 0xea, 0xbc, 0xc0, 0x91, 0x68, 0xd6, 0xf7, 0xce, 0x8c,
- 0x06, 0x17, 0x48, 0xf2, 0x59, 0xdd, 0xf3, 0x01, 0xa0, 0x8e, 0x8d, 0x69, 0x3e, 0x8f, 0x5f, 0xb2,
- 0x90, 0x63, 0x0c, 0x43, 0x45, 0xc7, 0x02, 0x1f, 0xaf, 0x7b, 0xc3, 0x68, 0x0b, 0x72, 0xd8, 0xec,
- 0x58, 0x9a, 0x6e, 0x76, 0xfd, 0x62, 0x83, 0x27, 0x53, 0x5f, 0x9d, 0xae, 0x7c, 0x63, 0x64, 0xd6,
- 0x3a, 0xc7, 0x25, 0x93, 0xcb, 0x59, 0x1c, 0xf8, 0x42, 0x5b, 0x90, 0x14, 0x01, 0x7f, 0x91, 0x4a,
- 0x66, 0x6d, 0x5a, 0xfa, 0x3a, 0x9a, 0x2e, 0x88, 0xec, 0x9c, 0x93, 0x93, 0x02, 0x4e, 0xd3, 0x1d,
- 0x92, 0xe8, 0x68, 0xc5, 0xeb, 0xc1, 0x02, 0x4e, 0x40, 0x51, 0x15, 0xa0, 0x8b, 0x2d, 0x85, 0xb5,
- 0x42, 0x8b, 0x37, 0xe8, 0x74, 0xcb, 0x81, 0xe9, 0xba, 0xd8, 0x5a, 0x17, 0x0d, 0x53, 0x52, 0xe3,
- 0x1e, 0xea, 0x5d, 0x91, 0x7f, 0x74, 0xb1, 0xc5, 0x00, 0xe1, 0xc2, 0xf6, 0xe6, 0xc4, 0xc2, 0xb6,
- 0xb4, 0x0c, 0x69, 0xcf, 0x89, 0xa1, 0x24, 0xc4, 0xca, 0x7b, 0x55, 0xd6, 0xfd, 0xaa, 0xd5, 0xf7,
- 0xaa, 0x52, 0xa4, 0x74, 0x1b, 0xe2, 0x74, 0xf3, 0x19, 0x48, 0x6e, 0xb6, 0xe4, 0x67, 0x65, 0xb9,
- 0xc6, 0x3a, 0x6e, 0x8d, 0xe6, 0xd3, 0xba, 0xdc, 0xae, 0xd7, 0x24, 0x11, 0x3c, 0x4e, 0xe3, 0x80,
- 0xfc, 0x62, 0xbb, 0x6d, 0xf1, 0xe6, 0x45, 0x17, 0x0a, 0x1d, 0x0f, 0xca, 0x0e, 0x20, 0xb2, 0x1a,
- 0x5d, 0xcb, 0x6f, 0x3c, 0xfc, 0xda, 0x82, 0x5d, 0xf0, 0x08, 0x82, 0x7c, 0x95, 0xc8, 0x77, 0x42,
- 0xd0, 0x40, 0xb2, 0x15, 0x1d, 0x09, 0x54, 0x32, 0x24, 0x3a, 0x47, 0xb8, 0x73, 0xcc, 0x43, 0xf5,
- 0xb7, 0xa6, 0x4c, 0x4c, 0xf3, 0xd0, 0x80, 0xfa, 0x55, 0x09, 0x8d, 0x3f, 0xb5, 0xc8, 0x21, 0x28,
- 0x2b, 0x24, 0x87, 0x9d, 0x50, 0xfc, 0x5c, 0xbb, 0x9e, 0xd4, 0x24, 0x14, 0x76, 0x1d, 0xf0, 0x41,
- 0x0f, 0xa1, 0x60, 0x5a, 0xae, 0x42, 0x8a, 0x78, 0xee, 0x2d, 0x69, 0xd1, 0x9d, 0xab, 0x48, 0x5c,
- 0x57, 0x7d, 0xbf, 0x98, 0x33, 0x2d, 0xb7, 0x39, 0x30, 0x0c, 0x06, 0x40, 0x7f, 0x12, 0x81, 0x15,
- 0x16, 0x50, 0x95, 0x13, 0xd6, 0xb6, 0x51, 0x58, 0xee, 0xec, 0xcb, 0x88, 0x36, 0xb9, 0xa6, 0x67,
- 0x4f, 0xe7, 0xf5, 0x7c, 0xf8, 0x52, 0x6f, 0x0d, 0xce, 0xc1, 0x29, 0xb5, 0x21, 0x1f, 0x3e, 0x26,
- 0x94, 0x86, 0x44, 0x75, 0xab, 0x5e, 0x7d, 0x22, 0xcd, 0xa1, 0x02, 0x64, 0x36, 0x5b, 0x72, 0xbd,
- 0xf1, 0xa8, 0xa9, 0x3c, 0xa9, 0x7f, 0xc1, 0x9a, 0xb4, 0xcd, 0x96, 0xd7, 0xa4, 0x2d, 0xc2, 0xe2,
- 0x7e, 0xb3, 0xf1, 0xd9, 0x7e, 0x5d, 0x79, 0xd6, 0x68, 0x6f, 0xb5, 0xf6, 0xdb, 0x4a, 0xa3, 0x59,
- 0xab, 0x7f, 0x2e, 0xc5, 0xbc, 0xfa, 0x2e, 0x21, 0xcd, 0x97, 0xfe, 0x6d, 0x1e, 0xf2, 0xbb, 0xb6,
- 0xde, 0x53, 0xed, 0x21, 0x89, 0x6a, 0x27, 0x6a, 0x1f, 0x7d, 0x0a, 0x8b, 0x96, 0x41, 0x32, 0x7d,
- 0x0a, 0x55, 0xbc, 0x7a, 0x21, 0x3e, 0xb9, 0xb7, 0xbf, 0x60, 0x19, 0x1a, 0xe7, 0xd0, 0xe0, 0xe5,
- 0xc2, 0xa7, 0xb0, 0x68, 0xe2, 0x93, 0x71, 0x0e, 0x91, 0x29, 0x1c, 0x4c, 0x7c, 0x32, 0xc2, 0xe1,
- 0x5d, 0xc8, 0x90, 0x35, 0x50, 0x4a, 0x2c, 0xfa, 0x5b, 0x99, 0x20, 0x11, 0x58, 0x86, 0xd6, 0x60,
- 0xc3, 0x04, 0x9b, 0xcc, 0x27, 0xb0, 0x63, 0x13, 0xb0, 0x4d, 0x7c, 0x22, 0xb0, 0x3f, 0x82, 0x1b,
- 0xe3, 0xab, 0x1b, 0x6b, 0x8f, 0x5e, 0x1b, 0x59, 0x14, 0xc9, 0x30, 0xd0, 0x97, 0xb0, 0x68, 0x58,
- 0x1d, 0xd5, 0xd0, 0xdd, 0x21, 0xf7, 0x22, 0x8a, 0x73, 0xa2, 0xf6, 0xa9, 0x46, 0x65, 0xa6, 0x1a,
- 0x5f, 0x58, 0xbe, 0xeb, 0xdb, 0x9c, 0x03, 0xf3, 0x27, 0x04, 0x24, 0x23, 0x63, 0x0c, 0xb6, 0xf4,
- 0xf7, 0x31, 0x40, 0xe3, 0xa8, 0xe8, 0x18, 0xae, 0x11, 0xc9, 0x8c, 0x2c, 0x83, 0x8a, 0x36, 0xb3,
- 0xf1, 0xcd, 0x19, 0xad, 0x30, 0xcc, 0x57, 0xb8, 0x79, 0xcb, 0xd0, 0xc2, 0x03, 0x64, 0x32, 0x22,
- 0xaa, 0xd1, 0xc9, 0xa2, 0xaf, 0x60, 0x32, 0x13, 0x9f, 0x8c, 0x4c, 0xa6, 0xc3, 0xeb, 0x64, 0x32,
- 0x1b, 0x77, 0x75, 0xcb, 0x54, 0x0d, 0xe5, 0x60, 0xa8, 0xd8, 0xd6, 0x49, 0xa0, 0x60, 0x67, 0x05,
- 0xe7, 0xda, 0xd9, 0xe9, 0x4a, 0xb1, 0x89, 0x4f, 0x64, 0x8e, 0x57, 0x19, 0xca, 0xd6, 0xc9, 0xc4,
- 0xaa, 0xbd, 0x68, 0x4e, 0xc6, 0xd2, 0x90, 0x0c, 0x6f, 0x9d, 0x33, 0x55, 0xa8, 0xc9, 0x17, 0x67,
- 0x7d, 0xac, 0xc9, 0xac, 0x6a, 0x7e, 0xeb, 0x2f, 0x94, 0xf3, 0xff, 0x32, 0x02, 0x34, 0x09, 0x1b,
- 0xb8, 0xa2, 0xad, 0x4f, 0xcf, 0xee, 0x43, 0xc8, 0x91, 0x69, 0xfd, 0x1d, 0x45, 0xa6, 0x78, 0x22,
- 0xa2, 0xce, 0xde, 0x62, 0x3f, 0x84, 0x1c, 0x39, 0x71, 0x9f, 0x2a, 0x3a, 0x8d, 0xca, 0x32, 0xbc,
- 0x4b, 0x04, 0xf4, 0x16, 0x64, 0x75, 0x93, 0xa4, 0xf5, 0xbc, 0xdd, 0x15, 0x6c, 0xf7, 0x66, 0xf8,
- 0x88, 0xbf, 0xee, 0xd2, 0xaf, 0xa2, 0x70, 0x73, 0x47, 0x75, 0xb1, 0xad, 0xab, 0x86, 0xfe, 0x63,
- 0xac, 0x3d, 0xd5, 0xc9, 0x86, 0x0f, 0x6d, 0xec, 0x1c, 0xa1, 0xcf, 0x61, 0x61, 0xcc, 0x60, 0xb8,
- 0xc2, 0xbd, 0x39, 0x5b, 0xd6, 0x21, 0x4a, 0xb3, 0x11, 0x9b, 0x42, 0x3b, 0x61, 0xc3, 0x65, 0xa5,
- 0xed, 0xc5, 0x78, 0x06, 0x2d, 0xfb, 0x21, 0x24, 0x54, 0x47, 0xb1, 0x0e, 0x79, 0x4c, 0x7a, 0x3d,
- 0xc0, 0x68, 0xe0, 0xea, 0xc6, 0xfa, 0x91, 0xd1, 0x59, 0x6f, 0x8b, 0x0b, 0x56, 0x11, 0xcd, 0x54,
- 0xa7, 0x75, 0x88, 0xde, 0x83, 0x82, 0x73, 0x64, 0x0d, 0x0c, 0x4d, 0x39, 0x50, 0x3b, 0xc7, 0x87,
- 0xba, 0x61, 0x84, 0x7a, 0xc0, 0x79, 0x36, 0x58, 0xe1, 0x63, 0x5c, 0x66, 0x7f, 0x9e, 0x04, 0xe4,
- 0xaf, 0x67, 0x67, 0xe0, 0xaa, 0x34, 0xde, 0x97, 0x61, 0x9e, 0x07, 0x1a, 0x26, 0xa3, 0xb7, 0xa6,
- 0xc6, 0xe4, 0x70, 0xcf, 0x7b, 0x6b, 0x4e, 0xe6, 0x84, 0xe8, 0x7b, 0xc1, 0xfb, 0xd4, 0x99, 0x25,
- 0xb2, 0x35, 0x27, 0x2e, 0x5a, 0x9f, 0x00, 0x04, 0x82, 0x54, 0x8a, 0x32, 0x79, 0x7b, 0xe6, 0xd4,
- 0x60, 0x6b, 0x4e, 0x0e, 0x90, 0xa3, 0x16, 0xe4, 0xfb, 0x21, 0x0f, 0xc6, 0xab, 0x83, 0xbb, 0x33,
- 0xb9, 0xbb, 0xad, 0x39, 0x79, 0x84, 0x1c, 0xfd, 0x00, 0x50, 0x67, 0xcc, 0x38, 0x8a, 0xf0, 0x35,
- 0xab, 0x1c, 0x25, 0xd8, 0x9a, 0x93, 0x27, 0xb0, 0x41, 0x5f, 0xc2, 0xcd, 0xde, 0x64, 0x3d, 0xe6,
- 0x75, 0xc2, 0xb4, 0x86, 0xf8, 0x14, 0xed, 0xdf, 0x9a, 0x93, 0xa7, 0x31, 0x44, 0x4f, 0x20, 0xe1,
- 0xb8, 0x24, 0x0d, 0x8c, 0xd1, 0x14, 0xfc, 0xfe, 0x14, 0xce, 0xe3, 0x3a, 0xb2, 0xbe, 0x47, 0xc8,
- 0x44, 0xf2, 0x43, 0x79, 0xa0, 0x67, 0x90, 0xf6, 0xaa, 0x68, 0x7e, 0xfd, 0xf2, 0xc1, 0xec, 0x0c,
- 0xbd, 0x74, 0x53, 0x24, 0xa3, 0x1e, 0x2f, 0x54, 0x86, 0x4c, 0x8f, 0xa3, 0xf9, 0x6d, 0xcf, 0x55,
- 0xde, 0x5b, 0x00, 0xc1, 0x81, 0xfa, 0xce, 0xc0, 0x97, 0x0c, 0x82, 0xa8, 0x41, 0x53, 0x6b, 0xdb,
- 0x32, 0x0c, 0x62, 0x1b, 0x34, 0xe5, 0xf1, 0x52, 0x6b, 0x01, 0x2d, 0x7d, 0x0a, 0x09, 0xba, 0x27,
- 0x92, 0xd2, 0xee, 0x37, 0x9f, 0x34, 0x5b, 0xcf, 0x9a, 0x2c, 0x45, 0xa9, 0xd5, 0xb7, 0xeb, 0xed,
- 0xba, 0xd2, 0x6a, 0x6e, 0x93, 0x14, 0xe5, 0x35, 0xb8, 0xce, 0x01, 0xe5, 0x66, 0x4d, 0x79, 0x26,
- 0x37, 0xc4, 0x50, 0xb4, 0xb4, 0x16, 0xcc, 0x99, 0x53, 0x10, 0x6f, 0xb6, 0x9a, 0x75, 0x69, 0x8e,
- 0x66, 0xcf, 0xb5, 0x9a, 0x14, 0xa1, 0xd9, 0xb3, 0xdc, 0xda, 0x95, 0xa2, 0xcc, 0xfa, 0x2a, 0x59,
- 0x00, 0xcd, 0x93, 0xc3, 0xe3, 0x78, 0x6a, 0x5e, 0x4a, 0x96, 0xfe, 0x2e, 0x02, 0x29, 0x12, 0xa8,
- 0x1b, 0xe6, 0xa1, 0x85, 0x3e, 0x80, 0x74, 0x5f, 0xb5, 0xb1, 0xe9, 0xfa, 0x9e, 0x56, 0x34, 0xa0,
- 0x53, 0xbb, 0x74, 0xc0, 0xeb, 0x8f, 0xa6, 0x18, 0x62, 0x43, 0x43, 0x9b, 0x20, 0x71, 0x22, 0xa7,
- 0x73, 0x84, 0x7b, 0xaa, 0x1f, 0x77, 0x6e, 0x79, 0x2d, 0x7e, 0x3a, 0xbe, 0x47, 0x87, 0x3d, 0x0e,
- 0xf9, 0x7e, 0x10, 0x7a, 0x4e, 0x97, 0x92, 0xfb, 0x8e, 0xbf, 0x7c, 0x1b, 0x0a, 0x23, 0x81, 0xf2,
- 0x9c, 0xae, 0xd0, 0x2a, 0xed, 0x0a, 0xc5, 0x7c, 0xbf, 0xef, 0x75, 0x85, 0xa2, 0xbc, 0x21, 0xf4,
- 0x81, 0xdf, 0xf2, 0x21, 0x07, 0x1c, 0xaf, 0xbc, 0xc6, 0xc3, 0xc3, 0xc2, 0x39, 0xdd, 0x9e, 0x5d,
- 0x58, 0xe8, 0x59, 0x9a, 0x7e, 0x48, 0x8a, 0x16, 0xa2, 0x1d, 0xae, 0xde, 0xc3, 0x3c, 0xa5, 0x9d,
- 0xc9, 0x77, 0x4a, 0x41, 0x6a, 0x32, 0x88, 0xb6, 0x21, 0xaf, 0x11, 0xaf, 0x41, 0xea, 0x42, 0xd6,
- 0xab, 0xb9, 0x4e, 0x7d, 0xfa, 0xca, 0x14, 0x4d, 0x16, 0x87, 0x25, 0x4a, 0x67, 0x41, 0xcc, 0xfa,
- 0x39, 0xa1, 0x13, 0x8c, 0xcf, 0x78, 0x82, 0x07, 0xb0, 0x34, 0x30, 0xf1, 0xcb, 0xbe, 0xe5, 0x60,
- 0x4d, 0x19, 0x3b, 0xcb, 0x35, 0xca, 0xe5, 0x2e, 0xe7, 0x72, 0x73, 0x5f, 0x60, 0x4e, 0x3c, 0xd4,
- 0x9b, 0x83, 0x89, 0xc3, 0x1a, 0x7a, 0x04, 0x49, 0xd1, 0xb6, 0x4d, 0xd1, 0xfd, 0xcd, 0xea, 0xe3,
- 0x45, 0xcd, 0xca, 0xa9, 0xd1, 0x26, 0xe4, 0x4d, 0xfc, 0x32, 0x78, 0x2b, 0x91, 0x0e, 0x99, 0x67,
- 0xb6, 0x89, 0x5f, 0x4e, 0xbe, 0x92, 0xc8, 0x9a, 0xfe, 0x88, 0x86, 0x5a, 0x90, 0x3a, 0x54, 0x7b,
- 0xba, 0xa1, 0x63, 0xa7, 0x78, 0x83, 0xae, 0xe8, 0xbd, 0x73, 0x57, 0x34, 0x7a, 0x81, 0x23, 0xec,
- 0x59, 0x30, 0xf1, 0x16, 0x46, 0x01, 0x43, 0xb2, 0xb0, 0x9b, 0xe3, 0x0b, 0x13, 0x17, 0x38, 0xa1,
- 0xcb, 0x1c, 0xba, 0x30, 0xfe, 0xa5, 0xa1, 0xcf, 0x20, 0x17, 0xce, 0x1b, 0xe0, 0x12, 0x79, 0x43,
- 0xb6, 0x1f, 0x4c, 0x1a, 0x36, 0x21, 0x29, 0x12, 0x86, 0xcc, 0x25, 0x12, 0x06, 0x41, 0x8c, 0x2a,
- 0x24, 0x1b, 0x7b, 0xe9, 0xfa, 0xe5, 0x49, 0xd6, 0xef, 0x95, 0x9e, 0x9d, 0xae, 0x64, 0xc8, 0x0e,
- 0x27, 0x5c, 0x8a, 0x64, 0x4c, 0x0f, 0xae, 0xa1, 0xc7, 0x00, 0xde, 0x6b, 0x2c, 0x87, 0xde, 0x05,
- 0x4e, 0xef, 0x18, 0xed, 0x0a, 0x44, 0x7f, 0x49, 0x72, 0x80, 0x1a, 0xed, 0x40, 0x5a, 0xb8, 0x5c,
- 0xd6, 0x1b, 0x9c, 0x1e, 0x0d, 0xc7, 0x03, 0x80, 0x70, 0xfb, 0x1e, 0x07, 0x52, 0xa0, 0x1b, 0x58,
- 0x75, 0x30, 0x6f, 0x38, 0x3d, 0x9c, 0x31, 0x5b, 0x67, 0x3a, 0x5e, 0x3d, 0x52, 0xcd, 0x2e, 0xde,
- 0x26, 0xf4, 0x95, 0x68, 0x31, 0x22, 0x33, 0x56, 0xa8, 0x09, 0x12, 0x15, 0x59, 0x30, 0x9e, 0x48,
- 0x54, 0x6a, 0x6f, 0x08, 0xef, 0x48, 0xa4, 0x36, 0x35, 0xa6, 0x50, 0x9d, 0xda, 0xf1, 0xe3, 0xca,
- 0x77, 0x20, 0x7f, 0x68, 0xd9, 0x3d, 0xd5, 0x55, 0x84, 0xf3, 0x5a, 0xf0, 0x3b, 0xdf, 0x5f, 0x9d,
- 0xae, 0xe4, 0x36, 0xe9, 0xa8, 0x70, 0x5c, 0xb9, 0xc3, 0xe0, 0x27, 0xaa, 0x88, 0xf0, 0xcb, 0x6e,
- 0xba, 0xdf, 0xfc, 0x5a, 0x61, 0x4d, 0x88, 0xba, 0xef, 0x40, 0xde, 0x3a, 0x3c, 0x34, 0x74, 0x13,
- 0x2b, 0x36, 0x56, 0x1d, 0xcb, 0x2c, 0xbe, 0x19, 0xf0, 0xbe, 0x39, 0x3e, 0x26, 0xd3, 0x21, 0xd4,
- 0x84, 0x79, 0xda, 0xa8, 0x70, 0x8a, 0x8b, 0xf4, 0x78, 0x2e, 0xd9, 0xf4, 0x90, 0x39, 0x17, 0x74,
- 0x07, 0xe0, 0x85, 0x8e, 0x4f, 0x94, 0xe7, 0x03, 0x6c, 0x0f, 0x8b, 0xc5, 0x60, 0x2f, 0x89, 0xc0,
- 0x3f, 0x23, 0x60, 0xf4, 0x2d, 0x58, 0xd4, 0x1d, 0x25, 0x98, 0x82, 0x28, 0x64, 0xb0, 0xf8, 0x76,
- 0x20, 0x0e, 0x23, 0xdd, 0x19, 0x4d, 0x5f, 0xd0, 0xfb, 0x90, 0xd6, 0x70, 0x1f, 0x9b, 0x9a, 0xd3,
- 0x32, 0x8b, 0xaf, 0xd1, 0x92, 0xf8, 0xda, 0xd9, 0xe9, 0x4a, 0xba, 0x26, 0x80, 0xdc, 0xc9, 0xf9,
- 0x58, 0xe8, 0x53, 0xc8, 0x7b, 0x1f, 0xed, 0x61, 0x1f, 0x3b, 0xc5, 0xf7, 0x28, 0x5d, 0x91, 0x1c,
- 0x6c, 0x2d, 0x34, 0x22, 0xc2, 0x5e, 0x18, 0x1f, 0x7d, 0x09, 0x59, 0x06, 0xc1, 0x5a, 0xcb, 0xac,
- 0x0c, 0x8b, 0x4b, 0x54, 0x4e, 0x0f, 0x66, 0x94, 0x93, 0xdf, 0x49, 0xf5, 0xee, 0xec, 0x6a, 0x01,
- 0x6e, 0x72, 0x88, 0x37, 0xfa, 0x43, 0xc8, 0x0a, 0x3d, 0x7c, 0x6c, 0x1d, 0x38, 0xc5, 0x6f, 0x9c,
- 0x7b, 0x31, 0x36, 0x3a, 0xd7, 0x8e, 0x4f, 0x2a, 0xbc, 0x4c, 0x90, 0x1b, 0x6a, 0x03, 0x29, 0x1f,
- 0x45, 0xe4, 0xe8, 0x50, 0x7b, 0x50, 0xbe, 0xb4, 0x0e, 0x88, 0xca, 0xaf, 0xaf, 0x46, 0xd6, 0x62,
- 0x5e, 0x42, 0xb0, 0xd8, 0xc4, 0x27, 0x41, 0xab, 0x79, 0x6c, 0x1d, 0x34, 0x6a, 0xf2, 0xa2, 0x39,
- 0x0e, 0xd5, 0xd0, 0xe7, 0x90, 0x0b, 0x3e, 0x94, 0x70, 0x8a, 0xb7, 0xce, 0x6d, 0x20, 0x8d, 0x19,
- 0xa7, 0xff, 0x74, 0xc2, 0x91, 0xb3, 0x4e, 0xe0, 0x0b, 0xdd, 0x86, 0xb4, 0x66, 0x5b, 0x7d, 0x16,
- 0xc3, 0x5f, 0xa7, 0x0b, 0x14, 0xed, 0x4f, 0xdb, 0xea, 0xd3, 0xe0, 0xac, 0x40, 0xde, 0xc6, 0x7d,
- 0x43, 0xed, 0xe0, 0x1e, 0x09, 0x8a, 0xd6, 0x61, 0x71, 0x99, 0xce, 0xbe, 0x31, 0xf3, 0xf1, 0x78,
- 0xc4, 0xc2, 0x3e, 0x02, 0xfc, 0x5a, 0x87, 0x68, 0x1f, 0x40, 0x1d, 0x68, 0xba, 0xab, 0xf4, 0x2c,
- 0x0d, 0x17, 0x57, 0xce, 0x7d, 0x58, 0x35, 0xca, 0xbc, 0x4c, 0x08, 0x77, 0x2c, 0x0d, 0x7b, 0x77,
- 0xde, 0x02, 0x80, 0xde, 0x87, 0x0c, 0xdd, 0x1a, 0x97, 0xfe, 0x2a, 0xdd, 0xdc, 0x02, 0x97, 0x7e,
- 0xba, 0x66, 0x5b, 0x7d, 0x26, 0x72, 0x2a, 0x00, 0x26, 0x67, 0x07, 0xb2, 0xdd, 0x8e, 0xe2, 0xbb,
- 0xd3, 0xdb, 0x54, 0x37, 0x3e, 0x99, 0x71, 0x2d, 0x8f, 0xaa, 0x13, 0x1c, 0xec, 0x35, 0x11, 0x17,
- 0x1e, 0x55, 0x05, 0xcc, 0x91, 0x33, 0xdd, 0x8e, 0xf7, 0x41, 0x4a, 0x6e, 0xd6, 0x29, 0xe7, 0x06,
- 0x5d, 0x0a, 0x96, 0xdc, 0x6c, 0x84, 0x99, 0x74, 0x13, 0x78, 0x4b, 0x5d, 0xa1, 0xe5, 0x2a, 0x3b,
- 0xb3, 0x3b, 0xb3, 0xe7, 0x5d, 0x79, 0x46, 0x5d, 0x76, 0x5a, 0x87, 0xf4, 0x60, 0x3b, 0x90, 0xb5,
- 0x06, 0xee, 0x81, 0x35, 0x30, 0x35, 0xe5, 0xf0, 0xd8, 0x29, 0xbe, 0x41, 0x77, 0x7b, 0xa1, 0xc6,
- 0xa9, 0xb7, 0xbb, 0x16, 0x67, 0xb4, 0xf9, 0xc4, 0x91, 0x33, 0x82, 0xeb, 0xe6, 0xb1, 0x83, 0x7e,
- 0x04, 0x19, 0xdd, 0xf4, 0xe7, 0xb8, 0x7b, 0xf1, 0x39, 0x90, 0xa8, 0x39, 0x1a, 0xa6, 0x37, 0x05,
- 0x70, 0x9e, 0x64, 0x86, 0x9f, 0x44, 0x60, 0xf5, 0x6b, 0x1a, 0xae, 0x4e, 0xf1, 0x9d, 0x73, 0xef,
- 0xab, 0x67, 0xe8, 0xb8, 0xbe, 0x7e, 0x5e, 0xc7, 0xd5, 0x41, 0x25, 0x48, 0xbb, 0xb8, 0xd7, 0xb7,
- 0x6c, 0xd5, 0x1e, 0x16, 0xdf, 0x0a, 0x3e, 0x41, 0xf0, 0xc0, 0xe8, 0x87, 0x50, 0x18, 0x6d, 0x89,
- 0xdd, 0xbb, 0x42, 0x4b, 0x4c, 0xce, 0x87, 0xdb, 0x7f, 0x68, 0x9d, 0x16, 0x21, 0xec, 0xa6, 0x47,
- 0x51, 0x0d, 0x43, 0x39, 0x18, 0x16, 0xdf, 0x0d, 0xb6, 0x23, 0xbc, 0xd1, 0xb2, 0x61, 0x54, 0x86,
- 0x4b, 0xbf, 0x88, 0xc0, 0xc2, 0x58, 0xdc, 0x46, 0x3f, 0x84, 0xa4, 0x69, 0x69, 0x81, 0xc7, 0x21,
- 0x75, 0x2e, 0xff, 0xf9, 0xa6, 0xa5, 0xb1, 0xb7, 0x21, 0x1f, 0x74, 0x75, 0xf7, 0x68, 0x70, 0xb0,
- 0xde, 0xb1, 0x7a, 0xf7, 0xbd, 0x95, 0x6b, 0x07, 0xfe, 0xdf, 0xf7, 0xfb, 0xc7, 0xdd, 0xfb, 0xf4,
- 0xaf, 0xfe, 0xc1, 0x3a, 0x23, 0x93, 0xe7, 0x09, 0xd7, 0x86, 0x86, 0xde, 0x83, 0x02, 0x7e, 0xd9,
- 0xd7, 0xed, 0x40, 0xed, 0x10, 0x0d, 0xf8, 0x9d, 0xbc, 0x3f, 0x48, 0x94, 0x94, 0x5f, 0xc3, 0xff,
- 0x2a, 0x0a, 0x85, 0x91, 0x70, 0x48, 0xea, 0x1e, 0xda, 0xa2, 0x0a, 0xd5, 0x3d, 0x04, 0x72, 0xce,
- 0x5b, 0x8f, 0xe0, 0x5b, 0xc5, 0xd8, 0x55, 0xdf, 0x2a, 0x86, 0x1f, 0x16, 0x25, 0x2e, 0xf0, 0xb0,
- 0xe8, 0x23, 0xb8, 0xa1, 0x3b, 0x8a, 0x69, 0x99, 0xe2, 0x82, 0xc1, 0x6b, 0xba, 0x04, 0x5f, 0xf6,
- 0x5d, 0xd3, 0x9d, 0xa6, 0x65, 0xb2, 0xab, 0x05, 0x6f, 0xd7, 0xfe, 0x23, 0xc0, 0xe4, 0xf8, 0x23,
- 0x40, 0xaf, 0x47, 0x1f, 0x97, 0x12, 0x4b, 0xff, 0x12, 0x81, 0x74, 0xf0, 0x35, 0x7e, 0x34, 0xdc,
- 0x39, 0x1c, 0xab, 0x05, 0x2f, 0xf9, 0xc8, 0x27, 0x2c, 0x85, 0xd8, 0x05, 0xa4, 0x70, 0x1b, 0x12,
- 0x07, 0x43, 0x51, 0xa3, 0xa5, 0x2a, 0x59, 0x3e, 0x5b, 0xbc, 0x42, 0xea, 0x81, 0xf8, 0xc1, 0x50,
- 0x3c, 0x98, 0x5a, 0xfa, 0x63, 0xc8, 0x04, 0xe2, 0xee, 0x68, 0x67, 0x22, 0x72, 0x89, 0xce, 0xc4,
- 0x1b, 0x30, 0xcf, 0xc3, 0x02, 0xd3, 0xbd, 0x1c, 0xa7, 0x4e, 0xb0, 0x90, 0x90, 0xf8, 0x92, 0x84,
- 0x03, 0x3e, 0xfb, 0x7f, 0xc7, 0x20, 0x1b, 0x8c, 0xa0, 0xc4, 0xd6, 0x75, 0xb3, 0x63, 0xd3, 0xf0,
- 0x45, 0x67, 0x8f, 0x79, 0xcf, 0x8d, 0x04, 0x98, 0xc4, 0xd5, 0x9e, 0x6e, 0x2a, 0xf4, 0xa9, 0x4a,
- 0x48, 0xbf, 0x53, 0x3d, 0xdd, 0x7c, 0x4a, 0xa0, 0x14, 0x45, 0x7d, 0xc9, 0x51, 0x62, 0x21, 0x14,
- 0xf5, 0x25, 0x43, 0x59, 0xa2, 0xa9, 0xaa, 0xed, 0x52, 0x09, 0xc5, 0x02, 0x29, 0xa8, 0xed, 0x06,
- 0x5f, 0x1d, 0x26, 0x26, 0xbd, 0x3a, 0x34, 0x21, 0xef, 0xe7, 0x0c, 0x27, 0x26, 0xb6, 0xf9, 0x75,
- 0x43, 0xf9, 0x12, 0x49, 0x83, 0xff, 0x41, 0x18, 0x89, 0x28, 0xee, 0x04, 0x81, 0x24, 0x2b, 0xed,
- 0xa8, 0x9d, 0x23, 0xac, 0x38, 0xfa, 0x8f, 0x59, 0x3b, 0xc0, 0x13, 0x0b, 0x85, 0xef, 0xe9, 0x3f,
- 0xc6, 0x4b, 0x7f, 0x13, 0x81, 0x5c, 0x88, 0x17, 0x6a, 0x40, 0x81, 0xae, 0x6e, 0xac, 0xbd, 0x7d,
- 0xdb, 0x7b, 0x9f, 0x4f, 0x86, 0x27, 0x16, 0xb3, 0x39, 0x2b, 0x30, 0xa4, 0x91, 0x3c, 0x94, 0xb1,
- 0xf2, 0x5e, 0xb7, 0x85, 0xd5, 0x38, 0x4b, 0x39, 0x85, 0x9f, 0xb8, 0x65, 0x2d, 0x1f, 0xa6, 0x05,
- 0x9b, 0xf1, 0x4b, 0x26, 0x64, 0x02, 0x99, 0xcb, 0x0c, 0xf6, 0xf3, 0x6d, 0x88, 0x7b, 0xde, 0x6c,
- 0xd6, 0x2e, 0xb2, 0xeb, 0xbb, 0xb8, 0x9f, 0x45, 0x60, 0x71, 0x52, 0x06, 0x11, 0xb2, 0x4b, 0xa6,
- 0x6d, 0x33, 0xd9, 0xe5, 0x9d, 0x60, 0x66, 0xc7, 0x34, 0x50, 0xbc, 0x8a, 0xf0, 0x73, 0xbb, 0x37,
- 0x3d, 0x3b, 0x60, 0x0a, 0x58, 0x08, 0xd9, 0x01, 0xa9, 0xe0, 0x82, 0x96, 0xf0, 0xef, 0x31, 0xc8,
- 0x8f, 0xdc, 0xbe, 0x3c, 0x85, 0xf9, 0xae, 0x61, 0x1d, 0xa8, 0x06, 0xef, 0x5a, 0x7f, 0xe7, 0x52,
- 0xa1, 0x6c, 0xfd, 0x11, 0xe5, 0xb1, 0x35, 0x27, 0x73, 0x6e, 0xc8, 0x81, 0x85, 0xe0, 0x35, 0x0b,
- 0xfb, 0x21, 0x11, 0x93, 0x6c, 0xfd, 0x72, 0x53, 0xf8, 0xf7, 0x30, 0x14, 0x71, 0x6b, 0x4e, 0x2e,
- 0xd8, 0x61, 0x10, 0xea, 0x41, 0x61, 0xe4, 0x6e, 0x87, 0x5f, 0x09, 0x54, 0xaf, 0x3a, 0xa5, 0x6c,
- 0x9d, 0x6c, 0xd1, 0xbc, 0x37, 0x00, 0x58, 0xfa, 0x03, 0x28, 0x8c, 0x2c, 0x8a, 0x9c, 0x07, 0xc3,
- 0xe1, 0x51, 0x2d, 0x4f, 0x7c, 0x18, 0x43, 0x6a, 0xaa, 0x3d, 0x2c, 0xf3, 0x51, 0x7e, 0x1e, 0x77,
- 0x21, 0x17, 0x9a, 0x02, 0xe5, 0x21, 0xaa, 0xb2, 0x27, 0x84, 0x69, 0x39, 0xaa, 0xf2, 0xc7, 0x87,
- 0x4b, 0x79, 0x98, 0x67, 0xf2, 0x0d, 0xea, 0x77, 0x05, 0x20, 0x25, 0xf2, 0x87, 0xd2, 0x1a, 0xa4,
- 0xbd, 0x44, 0x1a, 0x65, 0x21, 0x55, 0x6b, 0xec, 0x95, 0x2b, 0xdb, 0xf5, 0x9a, 0x34, 0x87, 0x72,
- 0x90, 0x96, 0xeb, 0xe5, 0x1a, 0xed, 0xb9, 0x4a, 0x91, 0x8f, 0x53, 0x7f, 0xfa, 0xb3, 0x95, 0x08,
- 0x0f, 0x32, 0xf3, 0x52, 0xf2, 0x71, 0x3c, 0x85, 0xa4, 0x6b, 0xa5, 0xff, 0x4d, 0x03, 0xaa, 0xa9,
- 0xae, 0x4a, 0x84, 0x72, 0x81, 0xce, 0x64, 0xf4, 0x1c, 0x6b, 0x9a, 0xd8, 0x64, 0x8c, 0x5f, 0xa5,
- 0xc9, 0x78, 0xa9, 0x5e, 0xe7, 0x78, 0x67, 0x72, 0xfe, 0x0a, 0x9d, 0xc9, 0x70, 0xdf, 0x27, 0x76,
- 0xa5, 0xbe, 0xcf, 0x53, 0x48, 0xb2, 0x2a, 0x93, 0xbd, 0x31, 0x9b, 0xde, 0x56, 0x18, 0x3f, 0x18,
- 0xde, 0xad, 0x71, 0xea, 0xa6, 0x6b, 0x0f, 0xbd, 0xf7, 0x30, 0x0c, 0xe6, 0xb7, 0x47, 0x52, 0xaf,
- 0xb2, 0x3d, 0x92, 0x9e, 0xde, 0x1e, 0xf9, 0x01, 0x70, 0xbb, 0x10, 0x49, 0x31, 0x9c, 0xfb, 0x34,
- 0x64, 0xc2, 0x76, 0x98, 0x11, 0xf0, 0xac, 0x38, 0x6b, 0x07, 0xbe, 0xd0, 0x8f, 0x00, 0x89, 0x7b,
- 0xd9, 0x80, 0xe4, 0xd9, 0x95, 0xce, 0xfb, 0x53, 0xb7, 0x46, 0x09, 0x26, 0x1d, 0x80, 0x78, 0x0f,
- 0xee, 0x8d, 0x39, 0x4b, 0x6d, 0x00, 0xde, 0xe0, 0x35, 0x0f, 0xad, 0x19, 0xc2, 0xc4, 0x32, 0x24,
- 0x89, 0xfb, 0xed, 0x63, 0xa6, 0xff, 0x5e, 0xdc, 0xe6, 0x40, 0x6e, 0xb3, 0x7d, 0xc8, 0x06, 0x0f,
- 0x09, 0x49, 0x10, 0x3b, 0xc6, 0x43, 0x6e, 0xda, 0xe4, 0x4f, 0xf4, 0x18, 0x12, 0x7e, 0x76, 0x31,
- 0xfd, 0xa1, 0xf8, 0xd4, 0xd3, 0x27, 0xcb, 0x95, 0x19, 0x8b, 0x8f, 0xa3, 0x0f, 0x69, 0x8a, 0x9d,
- 0x0d, 0x0a, 0x12, 0x35, 0x21, 0xe7, 0x0c, 0xec, 0x17, 0xfa, 0x0b, 0xd5, 0x50, 0xba, 0x96, 0x6a,
- 0xd0, 0x89, 0xf2, 0x1b, 0x77, 0xa6, 0x3d, 0xb4, 0xe2, 0xb8, 0x8f, 0x2c, 0xd5, 0x10, 0xad, 0x11,
- 0x27, 0x00, 0x43, 0x1f, 0x79, 0x17, 0x82, 0xfc, 0x06, 0x9d, 0x5f, 0x2e, 0x23, 0x6e, 0x86, 0x41,
- 0x3f, 0x27, 0xba, 0xbf, 0x0c, 0x44, 0x22, 0x3b, 0x57, 0x11, 0x4c, 0x1f, 0x41, 0x8b, 0xb6, 0xbe,
- 0x17, 0xd9, 0x19, 0x5e, 0xdd, 0x1c, 0xf4, 0xfc, 0xc8, 0x6e, 0xfb, 0x30, 0x0d, 0x6d, 0x41, 0xda,
- 0x8b, 0xe5, 0xd4, 0xfc, 0xf3, 0x1b, 0x6f, 0x9c, 0x23, 0xb1, 0xdd, 0x91, 0x8e, 0x85, 0x4f, 0xec,
- 0xa5, 0xd8, 0x11, 0x29, 0xea, 0x7b, 0xc3, 0xd2, 0xff, 0x64, 0x21, 0xdf, 0x1e, 0xf6, 0x27, 0x79,
- 0xbf, 0xd8, 0x14, 0xef, 0x17, 0x9f, 0xed, 0x5e, 0x26, 0x7d, 0xb5, 0x7b, 0x19, 0x78, 0xb5, 0xf7,
- 0x32, 0x99, 0x57, 0xe6, 0xfd, 0xf2, 0x57, 0xf2, 0x7e, 0xaf, 0xec, 0x96, 0x2e, 0x7a, 0x89, 0x5b,
- 0xba, 0xef, 0x42, 0x4e, 0xb5, 0x6d, 0x75, 0xc8, 0x7f, 0x87, 0xa3, 0x51, 0x57, 0x99, 0x63, 0x67,
- 0x74, 0x76, 0xba, 0x92, 0x29, 0x93, 0x41, 0xfa, 0xd3, 0x1b, 0xc1, 0x21, 0xa3, 0x7a, 0x20, 0xcd,
- 0xf7, 0xb0, 0xb9, 0x57, 0xe9, 0x61, 0x0b, 0xd3, 0x3d, 0x6c, 0x0d, 0xe2, 0xf4, 0x87, 0x3e, 0x4c,
- 0xef, 0xa7, 0x89, 0x3c, 0xac, 0xbe, 0xeb, 0x81, 0xdf, 0xfa, 0x50, 0x6a, 0xf4, 0x23, 0x58, 0x12,
- 0xaf, 0x69, 0x89, 0x3e, 0xf8, 0xb7, 0xa8, 0x81, 0x9f, 0x51, 0x95, 0xce, 0x4e, 0x57, 0x8a, 0xb2,
- 0x8f, 0xe5, 0xf3, 0x63, 0x75, 0x20, 0x91, 0x45, 0xd1, 0x9e, 0x38, 0xae, 0x39, 0xe8, 0x0b, 0xc8,
- 0x52, 0xfb, 0xee, 0xe1, 0xde, 0x01, 0xb6, 0x45, 0xa8, 0x7d, 0x30, 0xdb, 0x7a, 0x89, 0xa1, 0xef,
- 0x50, 0x42, 0xd1, 0x3b, 0xc3, 0x1e, 0xc4, 0x41, 0x0f, 0x20, 0xa1, 0x1a, 0x3a, 0x8d, 0x95, 0x5f,
- 0xf7, 0xbb, 0x3e, 0x86, 0xc8, 0x5e, 0x21, 0x07, 0xc3, 0x92, 0x74, 0x7e, 0xd7, 0x33, 0xbc, 0x9a,
- 0xe9, 0x21, 0x69, 0xe9, 0xa7, 0x31, 0x00, 0x7f, 0xb1, 0xe8, 0xdb, 0x70, 0xb3, 0x7f, 0x34, 0x74,
- 0xf4, 0x8e, 0x6a, 0x28, 0x36, 0xee, 0xdb, 0xd8, 0xc1, 0x26, 0xcb, 0xfc, 0xa9, 0x5e, 0x67, 0xe5,
- 0x1b, 0x62, 0x58, 0x0e, 0x8d, 0xa2, 0x4f, 0xe0, 0x86, 0x61, 0x75, 0x27, 0xd1, 0x05, 0xfb, 0x1e,
- 0xd7, 0x39, 0xce, 0x08, 0xb1, 0x4a, 0xaa, 0xb5, 0xbe, 0x7a, 0xa0, 0x1b, 0x7e, 0x2b, 0xe4, 0x93,
- 0x8b, 0x0a, 0x7a, 0xbd, 0xea, 0xb1, 0x10, 0xcf, 0x6a, 0x7c, 0xa6, 0xe8, 0x87, 0xe3, 0x2f, 0x13,
- 0x3e, 0xbe, 0xf0, 0x0c, 0xd3, 0x1f, 0x28, 0x94, 0xde, 0x00, 0xf0, 0xe7, 0xa7, 0x17, 0xfe, 0xdb,
- 0xdb, 0x7e, 0xc2, 0xca, 0x9f, 0x0e, 0x94, 0xee, 0x7d, 0xcd, 0xfb, 0x00, 0x80, 0x79, 0xb9, 0xbe,
- 0xd3, 0x7a, 0x5a, 0x17, 0x2f, 0x04, 0x96, 0x5a, 0x23, 0x71, 0x70, 0x3c, 0x6e, 0x45, 0x66, 0x8c,
- 0x5b, 0xfc, 0xd2, 0xfe, 0x33, 0x88, 0x13, 0x63, 0x22, 0xb3, 0xd7, 0x9b, 0xfb, 0x3b, 0xd2, 0x1c,
- 0x4a, 0x43, 0xa2, 0xbc, 0xdd, 0x28, 0xef, 0x49, 0x11, 0xb4, 0x08, 0xd2, 0xce, 0xfe, 0x76, 0xbb,
- 0x21, 0xd7, 0x1f, 0x35, 0x5a, 0x4d, 0x85, 0x22, 0x44, 0xd1, 0x32, 0x2c, 0xb5, 0x49, 0x06, 0xae,
- 0x34, 0x76, 0x76, 0xb7, 0x1b, 0xd5, 0x46, 0x5b, 0x91, 0xeb, 0xd5, 0x96, 0x5c, 0x53, 0xda, 0x5f,
- 0xec, 0xd6, 0xa5, 0x58, 0x20, 0xf0, 0xfc, 0x75, 0x1c, 0x24, 0xe6, 0x98, 0x26, 0x84, 0x9e, 0xe8,
- 0x25, 0x9e, 0x04, 0xfc, 0xde, 0xf3, 0xbf, 0x89, 0x61, 0x2b, 0xf1, 0x8a, 0x32, 0xfd, 0xf9, 0x2b,
- 0x64, 0xfa, 0xc9, 0x57, 0xf5, 0x06, 0x61, 0xd6, 0xf8, 0x14, 0x0e, 0x90, 0xf1, 0xab, 0x04, 0xc8,
- 0x80, 0x86, 0xfc, 0x3c, 0x0a, 0x10, 0xd0, 0x8d, 0xef, 0x05, 0xff, 0x59, 0x8e, 0xe9, 0xb7, 0xe0,
- 0x23, 0xa5, 0xed, 0xd6, 0x9c, 0xf8, 0x47, 0x3b, 0x1e, 0x41, 0x4a, 0xe3, 0x39, 0x25, 0x4f, 0x3d,
- 0xdf, 0x9e, 0x39, 0xf5, 0xdc, 0x9a, 0x93, 0x3d, 0x62, 0xf4, 0x49, 0xe8, 0x97, 0xd6, 0x77, 0x67,
- 0x72, 0x0d, 0x5b, 0xe2, 0xe7, 0x07, 0x65, 0x98, 0x67, 0x31, 0x9c, 0x8b, 0x69, 0xea, 0xaf, 0x57,
- 0x47, 0x4c, 0x63, 0x6b, 0x4e, 0xe6, 0x84, 0xbc, 0x0c, 0x4e, 0x42, 0x62, 0x60, 0xea, 0x96, 0x79,
- 0x4f, 0x0e, 0x3e, 0x99, 0x17, 0x3d, 0x5f, 0xe2, 0x4d, 0xe8, 0xdf, 0xaa, 0x8b, 0x35, 0xf6, 0x32,
- 0x69, 0xdf, 0x7c, 0xe1, 0x01, 0x22, 0x28, 0x0f, 0xc0, 0xc7, 0x75, 0xb3, 0x2b, 0x45, 0x69, 0xf1,
- 0x4c, 0x12, 0x79, 0xf2, 0x15, 0xbb, 0xf7, 0x5d, 0x90, 0x46, 0x7f, 0x3e, 0x1b, 0xf0, 0x41, 0x0b,
- 0x90, 0xdb, 0x79, 0x5a, 0xad, 0xb6, 0x1b, 0x3b, 0xf5, 0xbd, 0x76, 0x79, 0x67, 0x97, 0xbd, 0xc5,
- 0xa6, 0x76, 0xdf, 0x6a, 0xd4, 0xa4, 0xe8, 0xbd, 0x03, 0xb8, 0x39, 0xe5, 0xf7, 0xd6, 0xe8, 0x26,
- 0x5c, 0x6b, 0xb6, 0xda, 0x4a, 0xa3, 0x56, 0x6f, 0xb6, 0x1b, 0xed, 0x2f, 0x94, 0x6a, 0x6b, 0x7b,
- 0x7f, 0xa7, 0x29, 0xcd, 0x11, 0x7f, 0xf2, 0xa8, 0xde, 0xac, 0xcb, 0xe5, 0x76, 0xbd, 0xa6, 0x94,
- 0xb7, 0x9f, 0x95, 0xbf, 0x20, 0x5e, 0xa6, 0x08, 0x8b, 0x3e, 0xb4, 0xf2, 0x85, 0xf7, 0x6f, 0x70,
- 0x44, 0xef, 0x7d, 0x17, 0x0a, 0x23, 0xa6, 0x4c, 0x5c, 0xe2, 0xee, 0x7e, 0x65, 0xbb, 0x51, 0x9d,
- 0xf8, 0x8e, 0x0a, 0x65, 0x20, 0xd9, 0xda, 0xdc, 0xdc, 0x6e, 0x34, 0xeb, 0x52, 0xec, 0xde, 0x87,
- 0x90, 0x0d, 0x26, 0xfe, 0x48, 0x82, 0xec, 0xf7, 0x5b, 0xcd, 0xba, 0xb2, 0x59, 0x6e, 0x6c, 0xef,
- 0xcb, 0x64, 0x97, 0x08, 0xf2, 0xdc, 0xb7, 0x09, 0x58, 0xe4, 0xde, 0xbb, 0x90, 0x0b, 0x65, 0xd9,
- 0x84, 0xa7, 0x58, 0xd2, 0x1c, 0x91, 0xa9, 0xf8, 0x37, 0x44, 0xea, 0x35, 0x29, 0x52, 0x59, 0xfb,
- 0xf5, 0x7f, 0x2e, 0xcf, 0xfd, 0xfa, 0x6c, 0x39, 0xf2, 0x9b, 0xb3, 0xe5, 0xc8, 0x6f, 0xcf, 0x96,
- 0x23, 0xff, 0x71, 0xb6, 0x1c, 0xf9, 0x8b, 0xdf, 0x2d, 0xcf, 0xfd, 0xe6, 0x77, 0xcb, 0x73, 0xbf,
- 0xfd, 0xdd, 0xf2, 0xdc, 0xf7, 0xe7, 0xd9, 0x3f, 0x71, 0xf3, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff,
- 0x1e, 0xc5, 0x86, 0xa6, 0x4d, 0x47, 0x00, 0x00,
+ 0x79, 0xd8, 0xf7, 0xee, 0xb7, 0xaf, 0x41, 0x13, 0x24, 0x57, 0xb0, 0x04, 0x80, 0x4b, 0x51, 0x82,
+ 0x28, 0x09, 0xa4, 0x20, 0xd9, 0xa6, 0x24, 0xdb, 0xd1, 0xbe, 0x40, 0x2c, 0x09, 0xec, 0x42, 0x83,
+ 0x05, 0x29, 0xda, 0x89, 0xc7, 0x83, 0x9d, 0xc6, 0x62, 0x84, 0xd9, 0x99, 0xe5, 0xcc, 0x2c, 0xc1,
+ 0x75, 0xe5, 0x90, 0xf2, 0x29, 0xa7, 0x24, 0x87, 0xdc, 0x52, 0xae, 0xb8, 0x52, 0xae, 0xc4, 0x37,
+ 0x97, 0x2b, 0x55, 0xc9, 0xcd, 0xd7, 0xf8, 0xe8, 0x54, 0xaa, 0x52, 0x3e, 0xa1, 0x12, 0xf8, 0x92,
+ 0x1f, 0x90, 0xca, 0x41, 0x97, 0xa4, 0xfa, 0x35, 0x8f, 0x7d, 0x40, 0x4b, 0x90, 0xf1, 0x41, 0x2a,
+ 0xcc, 0xd7, 0xdf, 0xf7, 0xf5, 0xd7, 0xdd, 0xdf, 0xbb, 0x7b, 0x09, 0x37, 0x9d, 0xa7, 0xc6, 0x9d,
+ 0xae, 0xea, 0xaa, 0x86, 0xd5, 0xbb, 0xa3, 0x61, 0xa7, 0x3b, 0x38, 0xbc, 0xe3, 0xb8, 0xf6, 0xb0,
+ 0xeb, 0x0e, 0x6d, 0xac, 0x6d, 0x0c, 0x6c, 0xcb, 0xb5, 0xd0, 0xd5, 0xae, 0xd5, 0x3d, 0xb1, 0x2d,
+ 0xb5, 0x7b, 0xbc, 0xe1, 0x3c, 0x35, 0xc8, 0x7f, 0x87, 0xaa, 0x83, 0x97, 0x4b, 0x43, 0x57, 0x37,
+ 0xee, 0x1c, 0x1b, 0xdd, 0x3b, 0xae, 0xde, 0xc7, 0x8e, 0xab, 0xf6, 0x07, 0x8c, 0x60, 0xb9, 0x3c,
+ 0x85, 0xeb, 0xc0, 0xd6, 0x9f, 0xe9, 0x06, 0xee, 0x61, 0x8e, 0x73, 0x95, 0xe0, 0xb8, 0xa3, 0x01,
+ 0x76, 0xd8, 0xff, 0x39, 0xf8, 0xb5, 0x1e, 0xb6, 0xee, 0xf4, 0xb0, 0xa5, 0x9b, 0x1a, 0x7e, 0x7e,
+ 0xa7, 0x6b, 0x99, 0x47, 0x7a, 0x8f, 0x0f, 0x2d, 0xf5, 0xac, 0x9e, 0x45, 0xff, 0xbc, 0x43, 0xfe,
+ 0x62, 0xd0, 0xf2, 0x4f, 0x12, 0x70, 0x65, 0xcb, 0xb2, 0xb1, 0xde, 0x33, 0x1f, 0xe2, 0x91, 0x8c,
+ 0x8f, 0xb0, 0x8d, 0xcd, 0x2e, 0x46, 0x6b, 0x90, 0x70, 0xd5, 0x43, 0x03, 0x97, 0x22, 0x6b, 0x91,
+ 0xf5, 0x7c, 0x15, 0x7e, 0x73, 0xb6, 0xba, 0xf0, 0xd5, 0xd9, 0x6a, 0xb4, 0x59, 0x97, 0xd9, 0x00,
+ 0xba, 0x05, 0x09, 0x3a, 0x4b, 0x29, 0x4a, 0x31, 0x8a, 0x1c, 0x23, 0xd5, 0x24, 0x40, 0x82, 0x46,
+ 0x47, 0x51, 0x09, 0xe2, 0xa6, 0xda, 0xc7, 0xa5, 0xd8, 0x5a, 0x64, 0x3d, 0x53, 0x8d, 0x13, 0x2c,
+ 0x99, 0x42, 0xd0, 0x43, 0x48, 0x3f, 0x53, 0x0d, 0x5d, 0xd3, 0xdd, 0x51, 0x29, 0xbe, 0x16, 0x59,
+ 0x2f, 0x6c, 0xbe, 0xb3, 0x31, 0x75, 0xab, 0x36, 0x6a, 0x96, 0xe9, 0xb8, 0xb6, 0xaa, 0x9b, 0xee,
+ 0x23, 0x4e, 0xc0, 0x19, 0x79, 0x0c, 0xd0, 0x5d, 0x58, 0x74, 0x8e, 0x55, 0x1b, 0x6b, 0xca, 0xc0,
+ 0xc6, 0x47, 0xfa, 0x73, 0xc5, 0xc0, 0x66, 0x29, 0xb1, 0x16, 0x59, 0x4f, 0x70, 0xd4, 0x22, 0x1b,
+ 0xde, 0xa3, 0xa3, 0x3b, 0xd8, 0x44, 0x1d, 0xc8, 0x58, 0xa6, 0xa2, 0x61, 0x03, 0xbb, 0xb8, 0x94,
+ 0xa4, 0xf3, 0x7f, 0x30, 0x63, 0xfe, 0x29, 0x1b, 0xb4, 0x51, 0xe9, 0xba, 0xba, 0x65, 0x0a, 0x39,
+ 0x2c, 0xb3, 0x4e, 0x19, 0x71, 0xae, 0xc3, 0x81, 0xa6, 0xba, 0xb8, 0x94, 0x7a, 0x69, 0xae, 0x07,
+ 0x94, 0x11, 0xda, 0x81, 0x44, 0x5f, 0x75, 0xbb, 0xc7, 0xa5, 0x34, 0xe5, 0x78, 0xf7, 0x05, 0x38,
+ 0xee, 0x12, 0x3a, 0xce, 0x90, 0x31, 0x29, 0x3f, 0x86, 0x24, 0x9b, 0x07, 0xe5, 0x21, 0xd3, 0x6a,
+ 0x2b, 0x95, 0x5a, 0xa7, 0xd9, 0x6e, 0x49, 0x0b, 0x28, 0x07, 0x69, 0xb9, 0xb1, 0xdf, 0x91, 0x9b,
+ 0xb5, 0x8e, 0x14, 0x21, 0x5f, 0xfb, 0x8d, 0x8e, 0xd2, 0x3a, 0xd8, 0xd9, 0x91, 0xa2, 0xa8, 0x08,
+ 0x59, 0xf2, 0x55, 0x6f, 0x6c, 0x55, 0x0e, 0x76, 0x3a, 0x52, 0x0c, 0x65, 0x21, 0x55, 0xab, 0xec,
+ 0xd7, 0x2a, 0xf5, 0x86, 0x14, 0x5f, 0x8e, 0xff, 0xe2, 0xe7, 0x2b, 0x0b, 0xe5, 0xbb, 0x90, 0xa0,
+ 0xd3, 0x21, 0x80, 0xe4, 0x7e, 0x73, 0x77, 0x6f, 0xa7, 0x21, 0x2d, 0xa0, 0x34, 0xc4, 0xb7, 0x08,
+ 0x8b, 0x08, 0xa1, 0xd8, 0xab, 0xc8, 0x9d, 0x66, 0x65, 0x47, 0x8a, 0x32, 0x8a, 0x4f, 0xe2, 0xff,
+ 0xf5, 0xb3, 0xd5, 0x48, 0xf9, 0x5f, 0x13, 0xb0, 0xe4, 0xcb, 0xee, 0x9f, 0x36, 0xaa, 0x41, 0xd1,
+ 0xb2, 0xf5, 0x9e, 0x6e, 0x2a, 0x54, 0xe7, 0x14, 0x5d, 0xe3, 0xfa, 0xf8, 0x0d, 0xb2, 0x9e, 0xf3,
+ 0xb3, 0xd5, 0x7c, 0x9b, 0x0e, 0x77, 0xc8, 0x68, 0xb3, 0xce, 0x15, 0x34, 0x6f, 0x05, 0x80, 0x1a,
+ 0x7a, 0x08, 0x8b, 0x9c, 0x49, 0xd7, 0x32, 0x86, 0x7d, 0x53, 0xd1, 0x35, 0xa7, 0x14, 0x5d, 0x8b,
+ 0xad, 0xe7, 0xab, 0xab, 0xe7, 0x67, 0xab, 0x45, 0xc6, 0xa2, 0x46, 0xc7, 0x9a, 0x75, 0xe7, 0xab,
+ 0xb3, 0xd5, 0xb4, 0xf8, 0x90, 0xf9, 0xf4, 0xfc, 0x5b, 0x73, 0xd0, 0x63, 0xb8, 0x6a, 0x8b, 0xbd,
+ 0xd5, 0x82, 0x0c, 0x63, 0x94, 0xe1, 0xcd, 0xf3, 0xb3, 0xd5, 0x2b, 0xde, 0xe6, 0x6b, 0xd3, 0x99,
+ 0x5e, 0xb1, 0xc7, 0x11, 0x34, 0x07, 0xb5, 0x21, 0x00, 0xf6, 0x97, 0x1b, 0xa7, 0xcb, 0x5d, 0xe5,
+ 0xcb, 0x5d, 0xf4, 0x59, 0x87, 0x97, 0xbc, 0x68, 0x8f, 0x0d, 0x68, 0x9e, 0xe1, 0x25, 0x2e, 0x34,
+ 0xbc, 0xe4, 0xcb, 0x1a, 0x5e, 0xc8, 0x8c, 0x52, 0xff, 0x2f, 0x66, 0x94, 0x7e, 0xe5, 0x66, 0x94,
+ 0x79, 0x05, 0x66, 0xc4, 0x74, 0xf7, 0x41, 0x3c, 0x0d, 0x52, 0xf6, 0x41, 0x3c, 0x9d, 0x95, 0x72,
+ 0x0f, 0xe2, 0xe9, 0x9c, 0x94, 0x7f, 0x10, 0x4f, 0xe7, 0xa5, 0x42, 0xf9, 0x6f, 0xa2, 0xf0, 0xfa,
+ 0x81, 0xa9, 0x3f, 0x1d, 0xe2, 0xc7, 0xba, 0x7b, 0x6c, 0x0d, 0x5d, 0xea, 0x17, 0x03, 0xba, 0x7d,
+ 0x17, 0xd2, 0x63, 0x4a, 0x7d, 0x95, 0x9f, 0x72, 0x2a, 0x7c, 0xb6, 0x29, 0x97, 0x9f, 0xe8, 0x3d,
+ 0x80, 0x09, 0x0d, 0x7e, 0xed, 0xfc, 0x6c, 0x35, 0x33, 0x5d, 0xcd, 0x32, 0x5d, 0x4f, 0xb9, 0xfe,
+ 0x40, 0x4e, 0xb8, 0x0c, 0x99, 0x81, 0x8d, 0x35, 0xbd, 0x4b, 0x4e, 0x2d, 0xa8, 0x77, 0x3e, 0x98,
+ 0x5b, 0xfc, 0xdf, 0xa7, 0x40, 0x62, 0x82, 0xd6, 0xb1, 0xd3, 0xb5, 0xf5, 0x81, 0x6b, 0xd9, 0x9e,
+ 0x94, 0x91, 0x09, 0x29, 0xdf, 0x82, 0xa8, 0xae, 0xf1, 0x40, 0x73, 0x8d, 0xef, 0x52, 0x94, 0x6e,
+ 0x90, 0xbf, 0xdc, 0xa8, 0xae, 0xa1, 0x0d, 0x88, 0x93, 0x68, 0x48, 0xd7, 0x99, 0xdd, 0x5c, 0x1e,
+ 0x5f, 0x09, 0xee, 0x6f, 0xb0, 0x60, 0xd9, 0x91, 0x29, 0x1e, 0x5a, 0x83, 0xb4, 0x39, 0x34, 0x0c,
+ 0x1a, 0xe8, 0xc8, 0xea, 0xd3, 0x62, 0x49, 0x02, 0x8a, 0x6e, 0x40, 0x4e, 0xc3, 0x47, 0xea, 0xd0,
+ 0x70, 0x15, 0xfc, 0x7c, 0x60, 0xb3, 0x55, 0xc9, 0x59, 0x0e, 0x6b, 0x3c, 0x1f, 0xd8, 0xe8, 0x4d,
+ 0x28, 0x78, 0xba, 0xca, 0x90, 0x10, 0x45, 0xca, 0x09, 0xbd, 0xa3, 0x58, 0xaf, 0x43, 0xf2, 0x58,
+ 0xd7, 0x34, 0x6c, 0x52, 0x93, 0x13, 0x13, 0x71, 0x18, 0x5a, 0x87, 0x9c, 0x6e, 0xaa, 0xdd, 0x2e,
+ 0x76, 0x1c, 0x9d, 0x08, 0xb3, 0x18, 0xc0, 0x09, 0x8d, 0xa0, 0xa7, 0xb0, 0xdc, 0xc3, 0x26, 0xb6,
+ 0x55, 0x17, 0x6b, 0x8a, 0xea, 0x28, 0xba, 0x86, 0x4d, 0x57, 0x77, 0x47, 0x0a, 0x5d, 0xf8, 0x15,
+ 0x7a, 0x84, 0x1b, 0x33, 0x8e, 0xf0, 0xbe, 0x20, 0xac, 0x38, 0x4d, 0x4e, 0xd6, 0x19, 0x0d, 0x30,
+ 0x9f, 0xe7, 0x7a, 0x6f, 0xfa, 0x30, 0xda, 0x83, 0x5b, 0xd3, 0xa7, 0x74, 0xf0, 0xd3, 0x21, 0xb1,
+ 0x0e, 0xc5, 0x1a, 0x10, 0x7b, 0x2b, 0x2d, 0xd1, 0x75, 0xdf, 0x98, 0xc2, 0x67, 0x9f, 0x63, 0xb6,
+ 0x29, 0x22, 0xda, 0x84, 0xc5, 0xa1, 0x83, 0x1d, 0x9f, 0x01, 0x51, 0x68, 0xa0, 0x0a, 0x9d, 0xe4,
+ 0x5a, 0x5f, 0x24, 0x08, 0x82, 0x8c, 0xe8, 0xf0, 0x26, 0x2c, 0x5a, 0xa7, 0xe6, 0x18, 0x4d, 0x2e,
+ 0x4c, 0x43, 0x10, 0x82, 0x34, 0x37, 0x20, 0xd7, 0xb5, 0xfa, 0x83, 0xa1, 0x38, 0x98, 0x2c, 0x3b,
+ 0x3d, 0x0e, 0xa3, 0xe7, 0xb2, 0x02, 0xa9, 0x67, 0xba, 0xed, 0x0e, 0x55, 0xa3, 0x24, 0x05, 0x36,
+ 0x5d, 0x00, 0xd1, 0x67, 0x20, 0x0d, 0x7a, 0x8a, 0xea, 0xba, 0xb6, 0x7e, 0x48, 0xf8, 0x98, 0xc3,
+ 0x7e, 0x29, 0x1f, 0x52, 0xc4, 0xc2, 0xde, 0xfd, 0x8a, 0x18, 0x6e, 0x0d, 0xfb, 0x72, 0x61, 0xd0,
+ 0x0b, 0x7e, 0xa3, 0x2d, 0x78, 0x43, 0x35, 0x5c, 0x6c, 0x8b, 0x68, 0x41, 0x0e, 0x4a, 0xd1, 0x4d,
+ 0x65, 0x60, 0x5b, 0x3d, 0x1b, 0x3b, 0x4e, 0xa9, 0x10, 0x98, 0xf7, 0x35, 0x8a, 0xca, 0x94, 0x9a,
+ 0x6c, 0x7e, 0xd3, 0xdc, 0xe3, 0x68, 0xe8, 0x07, 0x80, 0x9c, 0x91, 0xe3, 0xe2, 0xbe, 0x60, 0x74,
+ 0xa2, 0x9b, 0x5a, 0xa9, 0x48, 0x4f, 0xfc, 0xed, 0x19, 0x27, 0xbe, 0x4f, 0x09, 0x18, 0xbb, 0x87,
+ 0xba, 0xa9, 0xf1, 0x59, 0x24, 0x67, 0x0c, 0xee, 0x39, 0xb3, 0xb4, 0x94, 0x79, 0x10, 0x4f, 0x67,
+ 0x24, 0x78, 0x10, 0x4f, 0xa7, 0xa4, 0x74, 0xf9, 0x2f, 0xa2, 0x70, 0x8d, 0xa1, 0x6d, 0xa9, 0x7d,
+ 0xdd, 0x18, 0xbd, 0xac, 0xb9, 0x32, 0x2e, 0xdc, 0x5c, 0xe9, 0xf1, 0xd0, 0xa5, 0x10, 0x32, 0x16,
+ 0x43, 0xe9, 0xf1, 0x10, 0x58, 0x8b, 0x80, 0xc6, 0x7c, 0x5e, 0xfc, 0x05, 0x7c, 0x5e, 0x1b, 0x16,
+ 0x85, 0xe5, 0x7a, 0x1c, 0xa8, 0xf9, 0xe6, 0xab, 0x37, 0xb9, 0x4c, 0xc5, 0x3a, 0x43, 0x10, 0xe4,
+ 0xe1, 0xd0, 0xaf, 0x85, 0x06, 0xf9, 0x16, 0x95, 0xff, 0x39, 0x0a, 0x4b, 0x4d, 0xd3, 0xc5, 0xb6,
+ 0x81, 0xd5, 0x67, 0x38, 0xb0, 0x1d, 0x5f, 0x40, 0x46, 0x35, 0xbb, 0xd8, 0x71, 0x2d, 0xdb, 0x29,
+ 0x45, 0xd6, 0x62, 0xeb, 0xd9, 0xcd, 0x8f, 0x66, 0x9c, 0xca, 0x34, 0xfa, 0x8d, 0x0a, 0x27, 0x16,
+ 0x2e, 0xd3, 0x63, 0xb6, 0xfc, 0xeb, 0x08, 0xa4, 0xc5, 0xe8, 0x25, 0xc2, 0xc6, 0x37, 0x21, 0x4d,
+ 0x53, 0x71, 0xc5, 0x3b, 0x93, 0x65, 0x41, 0xc1, 0x73, 0xf5, 0x60, 0xda, 0x9e, 0xa2, 0xb8, 0x4d,
+ 0x0d, 0xd5, 0xa6, 0x65, 0xd4, 0x31, 0x4a, 0x7f, 0x5d, 0xec, 0xdf, 0x7e, 0x38, 0xa7, 0x9e, 0x48,
+ 0xb2, 0xd9, 0x9e, 0xf1, 0x9d, 0xfb, 0xa7, 0x08, 0x2c, 0x12, 0x02, 0x0d, 0x6b, 0x81, 0x6d, 0xbb,
+ 0x09, 0xa0, 0x3b, 0x8a, 0xc3, 0xe0, 0x74, 0x45, 0xc2, 0x14, 0x32, 0xba, 0xc3, 0xd1, 0x3d, 0x55,
+ 0x8b, 0x4e, 0xa8, 0xda, 0xc7, 0x90, 0xa7, 0xb4, 0xca, 0xe1, 0xb0, 0x7b, 0x82, 0x5d, 0x87, 0x4a,
+ 0x98, 0xa8, 0x2e, 0x71, 0x09, 0x73, 0x94, 0x43, 0x95, 0x8d, 0xc9, 0x39, 0x27, 0xf0, 0x35, 0xa1,
+ 0x7d, 0xf1, 0x09, 0xed, 0xe3, 0x82, 0xff, 0x32, 0x0e, 0xd7, 0xf6, 0x54, 0xdb, 0xd5, 0x89, 0xef,
+ 0xd2, 0xcd, 0x5e, 0x40, 0xfa, 0x5b, 0x90, 0x35, 0x87, 0xc2, 0x20, 0x1d, 0x7e, 0x20, 0x4c, 0x3e,
+ 0x30, 0x87, 0xdc, 0xc0, 0x1c, 0xf4, 0x2d, 0x58, 0x22, 0x68, 0x7a, 0x7f, 0x60, 0xe8, 0x5d, 0xdd,
+ 0xf5, 0xf0, 0xe3, 0x01, 0x7c, 0x64, 0x0e, 0xfb, 0x4d, 0x8e, 0x20, 0xe8, 0x76, 0x20, 0x6e, 0xe8,
+ 0x8e, 0x4b, 0x63, 0x7d, 0x76, 0x73, 0x73, 0x86, 0x3a, 0x4d, 0x97, 0x6d, 0x63, 0x47, 0x77, 0x5c,
+ 0xb1, 0x57, 0x84, 0x0b, 0x6a, 0x43, 0xc2, 0x56, 0xcd, 0x1e, 0xa6, 0x76, 0x96, 0xdd, 0xfc, 0xf0,
+ 0xc5, 0xd8, 0xc9, 0x84, 0x54, 0x64, 0x40, 0x94, 0xcf, 0xf2, 0x4f, 0x23, 0x10, 0x27, 0xb3, 0x5c,
+ 0xe0, 0x0a, 0xae, 0x41, 0xf2, 0x99, 0x6a, 0x0c, 0x31, 0xcb, 0x57, 0x72, 0x32, 0xff, 0x42, 0x7f,
+ 0x02, 0x45, 0x67, 0x78, 0x38, 0x08, 0x4c, 0xc5, 0x83, 0xf6, 0xfb, 0x2f, 0x24, 0x95, 0x57, 0xdc,
+ 0x85, 0x79, 0xb1, 0x83, 0x5b, 0x7e, 0x0a, 0x09, 0x2a, 0xf5, 0x05, 0xf2, 0xdd, 0x82, 0xc2, 0x91,
+ 0x6d, 0xf5, 0x15, 0xdd, 0xec, 0x1a, 0x43, 0x47, 0x7f, 0xc6, 0x72, 0x87, 0x9c, 0x9c, 0x27, 0xd0,
+ 0xa6, 0x00, 0x12, 0x5d, 0x71, 0x2d, 0x05, 0x3f, 0x17, 0x48, 0x51, 0x8a, 0x94, 0x75, 0xad, 0x86,
+ 0x00, 0x85, 0x54, 0xfd, 0xd7, 0x39, 0x28, 0x52, 0x83, 0x9a, 0xcb, 0x5d, 0xde, 0x0a, 0xb8, 0xcb,
+ 0xab, 0x21, 0x77, 0xe9, 0x59, 0x25, 0xf1, 0x96, 0xaf, 0x43, 0x72, 0x48, 0x13, 0x4a, 0x2a, 0xa2,
+ 0x97, 0x41, 0x30, 0x18, 0xba, 0x07, 0xa9, 0x67, 0xd8, 0x76, 0x48, 0x18, 0x46, 0x94, 0xd3, 0x0a,
+ 0x2f, 0xc8, 0xaf, 0x8d, 0x09, 0xf2, 0x88, 0x61, 0xc9, 0x02, 0x1d, 0xad, 0x83, 0x74, 0x82, 0x47,
+ 0xca, 0x14, 0x5b, 0x28, 0x9c, 0x90, 0x6a, 0xcc, 0x77, 0xc6, 0x1a, 0x5c, 0x0d, 0x60, 0x6a, 0xba,
+ 0x8d, 0x69, 0x9e, 0xed, 0x94, 0xd2, 0x6b, 0xb1, 0x0b, 0xf2, 0xe9, 0x31, 0x01, 0x36, 0xea, 0x82,
+ 0x50, 0xbe, 0xe2, 0x4d, 0xe0, 0xc1, 0x1c, 0xf4, 0x1e, 0x20, 0xe2, 0xe9, 0x70, 0x58, 0xa2, 0x04,
+ 0x95, 0x48, 0xa2, 0x23, 0x41, 0x99, 0xaa, 0x50, 0x08, 0xc8, 0x44, 0x82, 0x44, 0x92, 0x06, 0x89,
+ 0xd7, 0x89, 0xf5, 0x3f, 0x14, 0xec, 0xc7, 0xe3, 0x44, 0xce, 0x9b, 0x98, 0x84, 0x8a, 0x03, 0xb6,
+ 0x2e, 0x67, 0x78, 0x44, 0xfc, 0x5c, 0x80, 0x55, 0x8a, 0xb2, 0x2a, 0x9f, 0x9f, 0xad, 0xa2, 0x87,
+ 0x78, 0xb4, 0x4f, 0xc7, 0xa7, 0x33, 0x44, 0x27, 0x63, 0xe3, 0x9a, 0x83, 0xb6, 0x41, 0x0a, 0x2d,
+ 0x84, 0x70, 0x2c, 0x50, 0x8e, 0x2b, 0x24, 0x6d, 0xd8, 0xf7, 0x97, 0x32, 0xce, 0xad, 0x10, 0x58,
+ 0x26, 0xe1, 0xd4, 0x81, 0x25, 0x92, 0xb3, 0x58, 0x8e, 0xee, 0x86, 0xb8, 0xe5, 0x7d, 0xf9, 0x6a,
+ 0x62, 0x7c, 0x86, 0x7c, 0xdd, 0xb1, 0x71, 0xcd, 0x41, 0xfb, 0x90, 0x3d, 0x62, 0xa5, 0x8e, 0x72,
+ 0x82, 0x47, 0xb4, 0x28, 0xca, 0x6e, 0xde, 0x9e, 0xbf, 0x28, 0xaa, 0x26, 0x89, 0x8a, 0x95, 0x22,
+ 0x32, 0x1c, 0x79, 0x83, 0xe8, 0x31, 0xe4, 0x03, 0x75, 0xec, 0xe1, 0x88, 0xa6, 0x75, 0x97, 0x63,
+ 0x9b, 0xf3, 0x19, 0x55, 0x47, 0x68, 0x1f, 0x40, 0xf7, 0xe2, 0x26, 0xcd, 0xe4, 0xb2, 0x9b, 0xef,
+ 0xbe, 0x40, 0x80, 0xf5, 0xa5, 0xf5, 0xd9, 0xa0, 0x27, 0x50, 0xf0, 0xbf, 0xa8, 0xb8, 0xb9, 0x4b,
+ 0x8b, 0x9b, 0x0f, 0x70, 0xaa, 0x92, 0x8d, 0xc8, 0x85, 0xdc, 0x5b, 0xf1, 0xf2, 0xee, 0x2d, 0xc4,
+ 0x08, 0x35, 0x78, 0x91, 0x23, 0xd1, 0xcc, 0xef, 0xdd, 0x39, 0x8d, 0x2e, 0x90, 0xe8, 0xb3, 0xda,
+ 0xe7, 0x43, 0x40, 0x5d, 0x1b, 0xd3, 0x9c, 0x1e, 0x3f, 0x67, 0x61, 0xc7, 0x18, 0x85, 0x0a, 0x8f,
+ 0x45, 0x3e, 0xde, 0xf0, 0x86, 0xd1, 0x36, 0xe4, 0xb1, 0xd9, 0xb5, 0x34, 0xdd, 0xec, 0xf9, 0x05,
+ 0x07, 0x4f, 0xa8, 0xbe, 0x3a, 0x5b, 0xfd, 0xc6, 0xd8, 0xac, 0x0d, 0x8e, 0x4b, 0x26, 0x97, 0x73,
+ 0x38, 0xf0, 0x85, 0xb6, 0x21, 0x25, 0x82, 0xfe, 0x12, 0xdd, 0x99, 0xf5, 0x59, 0x29, 0xec, 0x78,
+ 0xca, 0x20, 0x32, 0x74, 0x4e, 0x4e, 0x8a, 0x38, 0x4d, 0x77, 0x48, 0xb2, 0xa3, 0x95, 0xae, 0x06,
+ 0x8b, 0x38, 0x01, 0x45, 0x35, 0x80, 0x1e, 0xb6, 0x14, 0xd6, 0x0e, 0x2d, 0x5d, 0xa3, 0xd3, 0xad,
+ 0x04, 0xa6, 0xeb, 0x61, 0x6b, 0x43, 0x34, 0x4d, 0x49, 0x9d, 0x7b, 0xa4, 0xf7, 0x44, 0x0e, 0xd2,
+ 0xc3, 0x16, 0x03, 0x84, 0x8b, 0xdb, 0xeb, 0x53, 0x8b, 0xdb, 0xf2, 0x0a, 0x64, 0x3c, 0x47, 0x86,
+ 0x52, 0x10, 0xab, 0xec, 0xd7, 0x58, 0x07, 0xac, 0xde, 0xd8, 0xaf, 0x49, 0x91, 0xf2, 0x0d, 0x88,
+ 0xd3, 0xc5, 0x67, 0x21, 0xb5, 0xd5, 0x96, 0x1f, 0x57, 0xe4, 0x3a, 0xeb, 0xba, 0x35, 0x5b, 0x8f,
+ 0x1a, 0x72, 0xa7, 0x51, 0x97, 0x44, 0x00, 0x39, 0x8b, 0x03, 0xf2, 0x0b, 0xee, 0x8e, 0xc5, 0x1b,
+ 0x18, 0x3d, 0x28, 0x76, 0x3d, 0x28, 0x3b, 0x80, 0xc8, 0x5a, 0x74, 0xbd, 0xb0, 0x79, 0xef, 0x6b,
+ 0x8b, 0x76, 0xc1, 0x23, 0x08, 0xf2, 0x55, 0xa2, 0xd0, 0x0d, 0x41, 0x03, 0x09, 0x57, 0x74, 0x2c,
+ 0x58, 0xc9, 0x90, 0xe8, 0x1e, 0xe3, 0xee, 0x09, 0x0f, 0xd7, 0xdf, 0x9a, 0x31, 0x31, 0xcd, 0x45,
+ 0x03, 0xea, 0x57, 0x23, 0x34, 0xfe, 0xd4, 0x22, 0x8f, 0xa0, 0xac, 0x90, 0x1c, 0x76, 0x44, 0xf1,
+ 0x0b, 0x6d, 0x7b, 0x5a, 0xa3, 0x50, 0xa4, 0x5c, 0x01, 0x3f, 0x74, 0x0f, 0x8a, 0xa6, 0xe5, 0x2a,
+ 0xa4, 0x90, 0xe7, 0x1e, 0x93, 0x16, 0xde, 0xf9, 0xaa, 0xc4, 0x75, 0xd5, 0xf7, 0x8d, 0x79, 0xd3,
+ 0x72, 0x5b, 0x43, 0xc3, 0x60, 0x00, 0xf4, 0x67, 0x11, 0x58, 0x65, 0x41, 0x55, 0x39, 0x65, 0xad,
+ 0x1b, 0x85, 0xe5, 0xcf, 0xfe, 0x1e, 0xd1, 0x46, 0xd7, 0xec, 0x0c, 0xea, 0xa2, 0xbe, 0x0f, 0x17,
+ 0xf5, 0xf5, 0xe1, 0x05, 0x38, 0xe5, 0x0e, 0x14, 0xc2, 0xc7, 0x84, 0x32, 0x90, 0xa8, 0x6d, 0x37,
+ 0x6a, 0x0f, 0xa5, 0x05, 0x54, 0x84, 0xec, 0x56, 0x5b, 0x6e, 0x34, 0xef, 0xb7, 0x94, 0x87, 0x8d,
+ 0x27, 0xac, 0x51, 0xdb, 0x6a, 0x7b, 0x8d, 0xda, 0x12, 0x2c, 0x1d, 0xb4, 0x9a, 0x9f, 0x1f, 0x34,
+ 0x94, 0xc7, 0xcd, 0xce, 0x76, 0xfb, 0xa0, 0xa3, 0x34, 0x5b, 0xf5, 0xc6, 0x17, 0x52, 0xcc, 0xab,
+ 0xf1, 0x12, 0x52, 0xb2, 0xfc, 0x6f, 0x49, 0x28, 0xec, 0xd9, 0x7a, 0x5f, 0xb5, 0x47, 0x24, 0xb2,
+ 0x9d, 0xaa, 0x03, 0xf4, 0x19, 0x2c, 0x59, 0x06, 0xc9, 0xf6, 0x29, 0x54, 0xf1, 0x6a, 0x86, 0xf8,
+ 0xf4, 0xfe, 0xfe, 0xa2, 0x65, 0x68, 0x9c, 0x43, 0x93, 0x97, 0x0c, 0x9f, 0xc1, 0x92, 0x89, 0x4f,
+ 0x27, 0x39, 0x44, 0x66, 0x70, 0x30, 0xf1, 0xe9, 0x18, 0x87, 0xf7, 0x20, 0x4b, 0x64, 0xa0, 0x94,
+ 0x58, 0xf4, 0xb8, 0xb2, 0x41, 0x22, 0xb0, 0x0c, 0xad, 0xc9, 0x86, 0x09, 0x36, 0x99, 0x4f, 0x60,
+ 0xc7, 0xa6, 0x60, 0x9b, 0xf8, 0x54, 0x60, 0x7f, 0x0c, 0xd7, 0x26, 0xa5, 0x9b, 0x68, 0x91, 0x5e,
+ 0x19, 0x13, 0x8a, 0x64, 0x19, 0xe8, 0x4b, 0x58, 0x32, 0xac, 0xae, 0x6a, 0xe8, 0xee, 0x88, 0x7b,
+ 0x11, 0xc5, 0x39, 0x55, 0x07, 0x54, 0xa3, 0xb2, 0x33, 0x8d, 0x2f, 0xbc, 0xbf, 0x1b, 0x3b, 0x9c,
+ 0x03, 0xf3, 0x27, 0x04, 0x24, 0x23, 0x63, 0x02, 0xb6, 0xfc, 0x8f, 0x31, 0x40, 0x93, 0xa8, 0xe8,
+ 0x04, 0xae, 0x90, 0x9d, 0x19, 0x13, 0x83, 0x6e, 0x6d, 0x76, 0xf3, 0x9b, 0x73, 0x5a, 0x61, 0x98,
+ 0xaf, 0x70, 0xf3, 0x96, 0xa1, 0x85, 0x07, 0xc8, 0x64, 0x64, 0xab, 0xc6, 0x27, 0x8b, 0xbe, 0x82,
+ 0xc9, 0x4c, 0x7c, 0x3a, 0x36, 0x99, 0x0e, 0x6f, 0x90, 0xc9, 0x6c, 0xdc, 0xd3, 0x2d, 0x53, 0x35,
+ 0x94, 0xc3, 0x91, 0x62, 0x5b, 0xa7, 0x81, 0xa2, 0x9d, 0x15, 0x9d, 0xeb, 0xe7, 0x67, 0xab, 0xa5,
+ 0x16, 0x3e, 0x95, 0x39, 0x5e, 0x75, 0x24, 0x5b, 0xa7, 0x53, 0x2b, 0xf7, 0x92, 0x39, 0x1d, 0x4b,
+ 0x43, 0x32, 0xbc, 0x7d, 0xc1, 0x54, 0xa1, 0x46, 0x5f, 0x9c, 0xf5, 0xb2, 0xa6, 0xb3, 0xaa, 0xfb,
+ 0xed, 0xbf, 0x50, 0xde, 0xff, 0xcb, 0x08, 0xd0, 0x44, 0x6c, 0xe8, 0x8a, 0xd6, 0x3e, 0x3d, 0xbb,
+ 0x8f, 0x20, 0x4f, 0xa6, 0xf5, 0x57, 0x14, 0x99, 0xe1, 0x89, 0x88, 0x3a, 0x7b, 0xc2, 0x7e, 0x04,
+ 0x79, 0x72, 0xe2, 0x3e, 0x55, 0x74, 0x16, 0x95, 0x65, 0x78, 0x17, 0x09, 0xe8, 0x6d, 0xc8, 0xe9,
+ 0x26, 0x49, 0xed, 0x79, 0xcb, 0x2b, 0xd8, 0xf2, 0xcd, 0xf2, 0x11, 0x5f, 0xee, 0xf2, 0xaf, 0xa2,
+ 0x70, 0x7d, 0x57, 0x75, 0xb1, 0xad, 0xab, 0x86, 0xfe, 0x63, 0xac, 0x3d, 0xd2, 0xc9, 0x82, 0x8f,
+ 0x6c, 0xec, 0x1c, 0xa3, 0x2f, 0x60, 0x71, 0xc2, 0x60, 0xb8, 0xc2, 0xbd, 0x35, 0x5f, 0xd6, 0x21,
+ 0xca, 0xb3, 0x31, 0x9b, 0x42, 0xbb, 0x61, 0xc3, 0x65, 0xe5, 0xed, 0x8b, 0xf1, 0x0c, 0x5a, 0xf6,
+ 0x3d, 0x48, 0xa8, 0x8e, 0x62, 0x1d, 0xf1, 0x98, 0xf4, 0x46, 0x80, 0xd1, 0xd0, 0xd5, 0x8d, 0x8d,
+ 0x63, 0xa3, 0xbb, 0xd1, 0x11, 0x97, 0xac, 0x22, 0x9a, 0xa9, 0x4e, 0xfb, 0x08, 0xbd, 0x0f, 0x45,
+ 0xe7, 0xd8, 0x1a, 0x1a, 0x9a, 0x72, 0xa8, 0x76, 0x4f, 0x8e, 0x74, 0xc3, 0x08, 0xf5, 0x81, 0x0b,
+ 0x6c, 0xb0, 0xca, 0xc7, 0xf8, 0x9e, 0xfd, 0x65, 0x0a, 0x90, 0x2f, 0xcf, 0xee, 0xd0, 0x55, 0x69,
+ 0xbc, 0xaf, 0x40, 0x92, 0x07, 0x1a, 0xb6, 0x47, 0x6f, 0xcf, 0x8c, 0xc9, 0xe1, 0xbe, 0xf7, 0xf6,
+ 0x82, 0xcc, 0x09, 0xd1, 0xf7, 0x82, 0x77, 0xaa, 0x73, 0xef, 0xc8, 0xf6, 0x82, 0xb8, 0x6c, 0x7d,
+ 0x08, 0x10, 0x08, 0x52, 0x69, 0xca, 0xe4, 0x9d, 0xb9, 0x53, 0x83, 0xed, 0x05, 0x39, 0x40, 0x8e,
+ 0xda, 0x50, 0x18, 0x84, 0x3c, 0x18, 0xaf, 0x10, 0x6e, 0xcd, 0xe5, 0xee, 0xb6, 0x17, 0xe4, 0x31,
+ 0x72, 0xf4, 0x03, 0x40, 0xdd, 0x09, 0xe3, 0x28, 0xc1, 0xd7, 0x48, 0x39, 0x4e, 0xb0, 0xbd, 0x20,
+ 0x4f, 0x61, 0x83, 0xbe, 0x84, 0xeb, 0xfd, 0xe9, 0x7a, 0xcc, 0x6b, 0x85, 0x59, 0x4d, 0xf1, 0x19,
+ 0xda, 0xbf, 0xbd, 0x20, 0xcf, 0x62, 0x88, 0x1e, 0x42, 0xc2, 0x71, 0x49, 0x1a, 0x18, 0xa3, 0x29,
+ 0xf8, 0x9d, 0x19, 0x9c, 0x27, 0x75, 0x64, 0x63, 0x9f, 0x90, 0x89, 0xe4, 0x87, 0xf2, 0x40, 0x8f,
+ 0x21, 0xe3, 0x55, 0xd2, 0xfc, 0x0a, 0xe6, 0xc3, 0xf9, 0x19, 0x7a, 0xe9, 0xa6, 0x48, 0x46, 0x3d,
+ 0x5e, 0xa8, 0x02, 0xd9, 0x3e, 0x47, 0xf3, 0x5b, 0x9f, 0x6b, 0xbc, 0xbf, 0x00, 0x82, 0x03, 0xf5,
+ 0x9d, 0x81, 0x2f, 0x19, 0x04, 0x51, 0x93, 0xa6, 0xd6, 0xb6, 0x65, 0x18, 0xc4, 0x36, 0x68, 0xca,
+ 0xe3, 0xa5, 0xd6, 0x02, 0x5a, 0xfe, 0x0c, 0x12, 0x74, 0x4d, 0x24, 0xa5, 0x3d, 0x68, 0x3d, 0x6c,
+ 0xb5, 0x1f, 0xb7, 0x58, 0x8a, 0x52, 0x6f, 0xec, 0x34, 0x3a, 0x0d, 0xa5, 0xdd, 0xda, 0x21, 0x29,
+ 0xca, 0x6b, 0x70, 0x95, 0x03, 0x2a, 0xad, 0xba, 0xf2, 0x58, 0x6e, 0x8a, 0xa1, 0x68, 0x79, 0x3d,
+ 0x98, 0x33, 0xa7, 0x21, 0xde, 0x6a, 0xb7, 0x1a, 0xd2, 0x02, 0xcd, 0x9e, 0xeb, 0x75, 0x29, 0x42,
+ 0xb3, 0x67, 0xb9, 0xbd, 0x27, 0x45, 0x99, 0xf5, 0x55, 0x73, 0x00, 0x9a, 0xb7, 0x0f, 0x0f, 0xe2,
+ 0xe9, 0xa4, 0x94, 0x2a, 0xff, 0x43, 0x04, 0xd2, 0x24, 0x50, 0x37, 0xcd, 0x23, 0x0b, 0x7d, 0x08,
+ 0x99, 0x81, 0x6a, 0x63, 0xd3, 0xf5, 0x3d, 0xad, 0x68, 0x42, 0xa7, 0xf7, 0xe8, 0x80, 0xd7, 0x23,
+ 0x4d, 0x33, 0xc4, 0xa6, 0x86, 0xb6, 0x40, 0xe2, 0x44, 0x4e, 0xf7, 0x18, 0xf7, 0x55, 0x3f, 0xee,
+ 0xbc, 0xee, 0xb5, 0xf9, 0xe9, 0xf8, 0x3e, 0x1d, 0xf6, 0x38, 0x14, 0x06, 0x41, 0xe8, 0x05, 0x9d,
+ 0x4a, 0xee, 0x3b, 0xfe, 0xfa, 0x1d, 0x28, 0x8e, 0x05, 0xca, 0x0b, 0x3a, 0x43, 0x6b, 0xb4, 0x33,
+ 0x14, 0xf3, 0xfd, 0xbe, 0xd7, 0x19, 0x8a, 0xf2, 0xa6, 0xd0, 0x87, 0x7e, 0xdb, 0x87, 0x1c, 0x70,
+ 0xbc, 0xfa, 0x1a, 0x0f, 0x0f, 0x8b, 0x17, 0x74, 0x7c, 0xf6, 0x60, 0xb1, 0x6f, 0x69, 0xfa, 0x11,
+ 0x29, 0x5a, 0x88, 0x76, 0xb8, 0x7a, 0x1f, 0xf3, 0x94, 0x76, 0x2e, 0xdf, 0x29, 0x05, 0xa9, 0xc9,
+ 0x20, 0xda, 0x81, 0x82, 0x46, 0xbc, 0x06, 0xa9, 0x0b, 0x59, 0xbf, 0xe6, 0x2a, 0xf5, 0xe9, 0xab,
+ 0x33, 0x34, 0x59, 0x1c, 0x16, 0x67, 0x98, 0x17, 0xc4, 0xac, 0xa7, 0x13, 0x3a, 0xc1, 0xf8, 0x9c,
+ 0x27, 0x78, 0x08, 0xcb, 0x43, 0x13, 0x3f, 0x1f, 0x58, 0x0e, 0xd6, 0x94, 0x89, 0xb3, 0x5c, 0xa7,
+ 0x5c, 0x6e, 0x71, 0x2e, 0xd7, 0x0f, 0x04, 0xe6, 0xd4, 0x43, 0xbd, 0x3e, 0x9c, 0x3a, 0xac, 0xa1,
+ 0xfb, 0x90, 0x12, 0xad, 0xdb, 0x34, 0x5d, 0xdf, 0xbc, 0x3e, 0x5e, 0xd4, 0xac, 0x9c, 0x1a, 0x6d,
+ 0x41, 0xc1, 0xc4, 0xcf, 0x83, 0x37, 0x13, 0x99, 0x90, 0x79, 0xe6, 0x5a, 0xf8, 0xf9, 0xf4, 0x6b,
+ 0x89, 0x9c, 0xe9, 0x8f, 0x68, 0xa8, 0x0d, 0xe9, 0x23, 0xb5, 0xaf, 0x1b, 0x3a, 0x76, 0x4a, 0xd7,
+ 0xa8, 0x44, 0xef, 0x5f, 0x28, 0xd1, 0xf8, 0x25, 0x8e, 0xb0, 0x67, 0xc1, 0xc4, 0x13, 0x8c, 0x02,
+ 0x46, 0x44, 0xb0, 0xeb, 0x93, 0x82, 0x89, 0x4b, 0x9c, 0xd0, 0x85, 0x0e, 0x15, 0x8c, 0x7f, 0x69,
+ 0xe8, 0x73, 0xc8, 0x87, 0xf3, 0x06, 0xb8, 0x44, 0xde, 0x90, 0x1b, 0x04, 0x93, 0x86, 0x2d, 0x48,
+ 0x89, 0x84, 0x21, 0x7b, 0x89, 0x84, 0x41, 0x10, 0xa3, 0x2a, 0xc9, 0xc6, 0x9e, 0xbb, 0x7e, 0x79,
+ 0x92, 0xf3, 0xfb, 0xa5, 0xe7, 0x67, 0xab, 0x59, 0xb2, 0xc2, 0x29, 0x17, 0x23, 0x59, 0xd3, 0x83,
+ 0x6b, 0xe8, 0x01, 0x80, 0xf7, 0x22, 0xcb, 0xa1, 0xf7, 0x81, 0xb3, 0x7b, 0x46, 0x7b, 0x02, 0xd1,
+ 0x17, 0x49, 0x0e, 0x50, 0xa3, 0x5d, 0xc8, 0x08, 0x97, 0xcb, 0xfa, 0x83, 0xb3, 0xa3, 0xe1, 0x64,
+ 0x00, 0x10, 0x6e, 0xdf, 0xe3, 0x40, 0x0a, 0x74, 0x03, 0xab, 0x0e, 0xe6, 0x0d, 0xa7, 0x7b, 0x73,
+ 0x66, 0xeb, 0x4c, 0xc7, 0x6b, 0xc7, 0xaa, 0xd9, 0xc3, 0x3b, 0x84, 0xbe, 0x1a, 0x2d, 0x45, 0x64,
+ 0xc6, 0x0a, 0xb5, 0x40, 0xa2, 0x5b, 0x16, 0x8c, 0x27, 0x12, 0xdd, 0xb5, 0x37, 0x85, 0x77, 0x24,
+ 0xbb, 0x36, 0x33, 0xa6, 0x50, 0x9d, 0xda, 0xf5, 0xe3, 0xca, 0x77, 0xa0, 0x70, 0x64, 0xd9, 0x7d,
+ 0xd5, 0x55, 0x84, 0xf3, 0x5a, 0xf4, 0xbb, 0xdf, 0x5f, 0x9d, 0xad, 0xe6, 0xb7, 0xe8, 0xa8, 0x70,
+ 0x5c, 0xf9, 0xa3, 0xe0, 0x27, 0xaa, 0x8a, 0xf0, 0xcb, 0x6e, 0xbb, 0xdf, 0xfa, 0xda, 0xcd, 0x9a,
+ 0x12, 0x75, 0xdf, 0x85, 0x82, 0x75, 0x74, 0x64, 0xe8, 0x26, 0x56, 0x6c, 0xac, 0x3a, 0x96, 0x59,
+ 0x7a, 0x2b, 0xe0, 0x7d, 0xf3, 0x7c, 0x4c, 0xa6, 0x43, 0xa8, 0x05, 0x49, 0xda, 0xa8, 0x70, 0x4a,
+ 0x4b, 0xf4, 0x78, 0x2e, 0xd9, 0xf4, 0x90, 0x39, 0x17, 0x74, 0x13, 0xe0, 0x99, 0x8e, 0x4f, 0x95,
+ 0xa7, 0x43, 0x6c, 0x8f, 0x4a, 0xa5, 0x60, 0x2f, 0x89, 0xc0, 0x3f, 0x27, 0x60, 0xf4, 0x2d, 0x58,
+ 0xd2, 0x1d, 0x25, 0x98, 0x82, 0x28, 0x64, 0xb0, 0xf4, 0x4e, 0x20, 0x0e, 0x23, 0xdd, 0x19, 0x4f,
+ 0x5f, 0xd0, 0x07, 0x90, 0xd1, 0xf0, 0x00, 0x9b, 0x9a, 0xd3, 0x36, 0x4b, 0xaf, 0xd1, 0x92, 0xf8,
+ 0xca, 0xf9, 0xd9, 0x6a, 0xa6, 0x2e, 0x80, 0xdc, 0xc9, 0xf9, 0x58, 0xe8, 0x33, 0x28, 0x78, 0x1f,
+ 0x9d, 0xd1, 0x00, 0x3b, 0xa5, 0xf7, 0x29, 0x5d, 0x89, 0x1c, 0x6c, 0x3d, 0x34, 0x22, 0xc2, 0x5e,
+ 0x18, 0x1f, 0x7d, 0x09, 0x39, 0x06, 0xc1, 0x5a, 0xdb, 0xac, 0x8e, 0x4a, 0xcb, 0x74, 0x9f, 0xee,
+ 0xce, 0xb9, 0x4f, 0x7e, 0x2f, 0xd5, 0xbb, 0xb7, 0xab, 0x07, 0xb8, 0xc9, 0x21, 0xde, 0xe8, 0x8f,
+ 0x21, 0x27, 0xf4, 0xf0, 0x81, 0x75, 0xe8, 0x94, 0xbe, 0x71, 0xe1, 0xe5, 0xd8, 0xf8, 0x5c, 0xbb,
+ 0x3e, 0xa9, 0xf0, 0x32, 0x41, 0x6e, 0xa8, 0x03, 0xa4, 0x7c, 0x14, 0x91, 0xa3, 0x4b, 0xed, 0x41,
+ 0xf9, 0xd2, 0x3a, 0x24, 0x2a, 0xbf, 0xb1, 0x16, 0x59, 0x8f, 0x79, 0x09, 0xc1, 0x52, 0x0b, 0x9f,
+ 0x06, 0xad, 0xe6, 0x81, 0x75, 0xd8, 0xac, 0xcb, 0x4b, 0xe6, 0x24, 0x54, 0x43, 0x5f, 0x40, 0x3e,
+ 0xf8, 0x58, 0xc2, 0x29, 0xbd, 0x7e, 0x61, 0x03, 0x69, 0xc2, 0x38, 0xfd, 0xe7, 0x13, 0x8e, 0x9c,
+ 0x73, 0x02, 0x5f, 0xe8, 0x06, 0x64, 0x34, 0xdb, 0x1a, 0xb0, 0x18, 0xfe, 0x06, 0x15, 0x50, 0xb4,
+ 0x3f, 0x6d, 0x6b, 0x40, 0x83, 0xb3, 0x02, 0x05, 0x1b, 0x0f, 0x0c, 0xb5, 0x8b, 0xfb, 0x24, 0x28,
+ 0x5a, 0x47, 0xa5, 0x15, 0x3a, 0xfb, 0xe6, 0xdc, 0xc7, 0xe3, 0x11, 0x0b, 0xfb, 0x08, 0xf0, 0x6b,
+ 0x1f, 0xa1, 0x03, 0x00, 0x75, 0xa8, 0xe9, 0xae, 0xd2, 0xb7, 0x34, 0x5c, 0x5a, 0xbd, 0xf0, 0x71,
+ 0xd5, 0x38, 0xf3, 0x0a, 0x21, 0xdc, 0xb5, 0x34, 0xec, 0xdd, 0x7b, 0x0b, 0x00, 0xfa, 0x00, 0xb2,
+ 0x74, 0x69, 0x7c, 0xf7, 0xd7, 0xe8, 0xe2, 0x16, 0xf9, 0xee, 0x67, 0xea, 0xb6, 0x35, 0x60, 0x5b,
+ 0x4e, 0x37, 0x80, 0xed, 0xb3, 0x03, 0xb9, 0x5e, 0x57, 0xf1, 0xdd, 0xe9, 0x0d, 0xaa, 0x1b, 0x9f,
+ 0xce, 0x29, 0xcb, 0xfd, 0xda, 0x14, 0x07, 0x7b, 0x45, 0xc4, 0x85, 0xfb, 0x35, 0x01, 0x73, 0xe4,
+ 0x6c, 0xaf, 0xeb, 0x7d, 0x90, 0x92, 0x9b, 0x75, 0xca, 0xb9, 0x41, 0x97, 0x83, 0x25, 0x37, 0x1b,
+ 0x61, 0x26, 0xdd, 0x02, 0xde, 0x52, 0x57, 0x68, 0xb9, 0xca, 0xce, 0xec, 0xe6, 0xfc, 0x79, 0x57,
+ 0x81, 0x51, 0x57, 0x9c, 0xf6, 0x11, 0x3d, 0xd8, 0x2e, 0xe4, 0xac, 0xa1, 0x7b, 0x68, 0x0d, 0x4d,
+ 0x4d, 0x39, 0x3a, 0x71, 0x4a, 0x6f, 0xd2, 0xd5, 0xbe, 0x50, 0xe3, 0xd4, 0x5b, 0x5d, 0x9b, 0x33,
+ 0xda, 0x7a, 0xe8, 0xc8, 0x59, 0xc1, 0x75, 0xeb, 0xc4, 0x41, 0x3f, 0x82, 0xac, 0x6e, 0xfa, 0x73,
+ 0xdc, 0x7a, 0xf1, 0x39, 0x90, 0xa8, 0x39, 0x9a, 0xa6, 0x37, 0x05, 0x70, 0x9e, 0x64, 0x86, 0x9f,
+ 0x44, 0x60, 0xed, 0x6b, 0x1a, 0xae, 0x4e, 0xe9, 0xdd, 0x0b, 0xef, 0xac, 0xe7, 0xe8, 0xb8, 0xbe,
+ 0x71, 0x51, 0xc7, 0xd5, 0x41, 0x65, 0xc8, 0xb8, 0xb8, 0x3f, 0xb0, 0x6c, 0xd5, 0x1e, 0x95, 0xde,
+ 0x0e, 0x3e, 0x43, 0xf0, 0xc0, 0xe8, 0x87, 0x50, 0x1c, 0x6f, 0x89, 0xdd, 0x7e, 0x89, 0x96, 0x98,
+ 0x5c, 0x08, 0xb7, 0xff, 0xd0, 0x06, 0x2d, 0x42, 0xd8, 0x4d, 0x8f, 0xa2, 0x1a, 0x86, 0x72, 0x38,
+ 0x2a, 0xbd, 0x17, 0x6c, 0x47, 0x78, 0xa3, 0x15, 0xc3, 0xa8, 0x8e, 0x96, 0x7f, 0x11, 0x81, 0xc5,
+ 0x89, 0xb8, 0x8d, 0x7e, 0x08, 0x29, 0xd3, 0xd2, 0x02, 0x0f, 0x44, 0x1a, 0x7c, 0xff, 0x93, 0x2d,
+ 0x4b, 0x63, 0xef, 0x43, 0x3e, 0xec, 0xe9, 0xee, 0xf1, 0xf0, 0x70, 0xa3, 0x6b, 0xf5, 0xef, 0x78,
+ 0x92, 0x6b, 0x87, 0xfe, 0xdf, 0x77, 0x06, 0x27, 0xbd, 0x3b, 0xf4, 0xaf, 0xc1, 0xe1, 0x06, 0x23,
+ 0x93, 0x93, 0x84, 0x6b, 0x53, 0x43, 0xef, 0x43, 0x11, 0x3f, 0x1f, 0xe8, 0x76, 0xa0, 0x76, 0x88,
+ 0x06, 0xfc, 0x4e, 0xc1, 0x1f, 0x24, 0x4a, 0xca, 0xaf, 0xe2, 0x7f, 0x15, 0x85, 0xe2, 0x58, 0x38,
+ 0x24, 0x75, 0x0f, 0x6d, 0x51, 0x85, 0xea, 0x1e, 0x02, 0xb9, 0xe0, 0xbd, 0x47, 0xf0, 0xbd, 0x62,
+ 0xec, 0x65, 0xdf, 0x2b, 0x86, 0x1f, 0x17, 0x25, 0x5e, 0xe0, 0x71, 0xd1, 0xc7, 0x70, 0x4d, 0x77,
+ 0x14, 0xd3, 0x32, 0xc5, 0x05, 0x83, 0xd7, 0x74, 0x09, 0xbe, 0xee, 0xbb, 0xa2, 0x3b, 0x2d, 0xcb,
+ 0x64, 0x57, 0x0b, 0xde, 0xaa, 0xfd, 0x87, 0x80, 0xa9, 0xc9, 0x87, 0x80, 0x5e, 0x8f, 0x3e, 0x2e,
+ 0x25, 0x96, 0xff, 0x25, 0x02, 0x99, 0xe0, 0x8b, 0xfc, 0x68, 0xb8, 0x73, 0x38, 0x51, 0x0b, 0x5e,
+ 0xf2, 0xa1, 0x4f, 0x78, 0x17, 0x62, 0x2f, 0xb0, 0x0b, 0x37, 0x20, 0x71, 0x38, 0x12, 0x35, 0x5a,
+ 0xba, 0x9a, 0xe3, 0xb3, 0xc5, 0xab, 0xa4, 0x1e, 0x88, 0x1f, 0x8e, 0xc4, 0xa3, 0xa9, 0xe5, 0x3f,
+ 0x85, 0x6c, 0x20, 0xee, 0x8e, 0x77, 0x26, 0x22, 0x97, 0xe8, 0x4c, 0xbc, 0x09, 0x49, 0x1e, 0x16,
+ 0x98, 0xee, 0xe5, 0x39, 0x75, 0x82, 0x85, 0x84, 0xc4, 0x97, 0x24, 0x1c, 0xf0, 0xd9, 0xff, 0x3b,
+ 0x06, 0xb9, 0x60, 0x04, 0x25, 0xb6, 0xae, 0x9b, 0x5d, 0x9b, 0x86, 0x2f, 0x3a, 0x7b, 0xcc, 0x7b,
+ 0x72, 0x24, 0xc0, 0x24, 0xae, 0xf6, 0x75, 0x53, 0xa1, 0xcf, 0x55, 0x42, 0xfa, 0x9d, 0xee, 0xeb,
+ 0xe6, 0x23, 0x02, 0xa5, 0x28, 0xea, 0x73, 0x8e, 0x12, 0x0b, 0xa1, 0xa8, 0xcf, 0x19, 0xca, 0x32,
+ 0x4d, 0x55, 0x6d, 0x97, 0xee, 0x50, 0x2c, 0x90, 0x82, 0xda, 0x6e, 0xf0, 0xe5, 0x61, 0x62, 0xda,
+ 0xcb, 0x43, 0x13, 0x0a, 0x7e, 0xce, 0x70, 0x6a, 0x62, 0x9b, 0x5f, 0x37, 0x54, 0x2e, 0x91, 0x34,
+ 0xf8, 0x1f, 0x84, 0x91, 0x88, 0xe2, 0x4e, 0x10, 0x48, 0xb2, 0xd2, 0xae, 0xda, 0x3d, 0xc6, 0x8a,
+ 0xa3, 0xff, 0x98, 0xb5, 0x03, 0xbc, 0x6d, 0xa1, 0xf0, 0x7d, 0xfd, 0xc7, 0x78, 0xf9, 0xef, 0x22,
+ 0x90, 0x0f, 0xf1, 0x42, 0x4d, 0x28, 0x52, 0xe9, 0x26, 0xda, 0xdb, 0x37, 0xbc, 0x37, 0xfa, 0x64,
+ 0x78, 0x6a, 0x31, 0x9b, 0xb7, 0x02, 0x43, 0x1a, 0xc9, 0x43, 0x19, 0x2b, 0xef, 0x85, 0x5b, 0x58,
+ 0x8d, 0x73, 0x94, 0x53, 0xf8, 0x99, 0x5b, 0xce, 0xf2, 0x61, 0x5a, 0xb0, 0x19, 0xbf, 0x6c, 0x42,
+ 0x36, 0x90, 0xb9, 0xcc, 0x61, 0x3f, 0xdf, 0x86, 0xb8, 0xe7, 0xcd, 0xe6, 0xed, 0x22, 0xbb, 0xbe,
+ 0x8b, 0xfb, 0x59, 0x04, 0x96, 0xa6, 0x65, 0x10, 0x21, 0xbb, 0x64, 0xda, 0x36, 0x97, 0x5d, 0xde,
+ 0x0c, 0x66, 0x76, 0x4c, 0x03, 0xc5, 0x53, 0x03, 0x3f, 0xb7, 0x7b, 0xcb, 0xb3, 0x03, 0xa6, 0x80,
+ 0xc5, 0x90, 0x1d, 0x90, 0x0a, 0x2e, 0x68, 0x09, 0xff, 0x1e, 0x83, 0xc2, 0xd8, 0xed, 0xcb, 0x23,
+ 0x48, 0xf6, 0x0c, 0xeb, 0x50, 0x35, 0x78, 0xd7, 0xfa, 0x3b, 0x97, 0x0a, 0x65, 0x1b, 0xf7, 0x29,
+ 0x8f, 0xed, 0x05, 0x99, 0x73, 0x43, 0x0e, 0x2c, 0x06, 0xaf, 0x59, 0xd8, 0x8f, 0x89, 0xd8, 0xce,
+ 0x36, 0x2e, 0x37, 0x85, 0x7f, 0x0f, 0x43, 0x11, 0xb7, 0x17, 0xe4, 0xa2, 0x1d, 0x06, 0xa1, 0x3e,
+ 0x14, 0xc7, 0xee, 0x76, 0xf8, 0x95, 0x40, 0xed, 0x65, 0xa7, 0x94, 0xad, 0xd3, 0x6d, 0x9a, 0xf7,
+ 0x06, 0x00, 0xcb, 0x7f, 0x04, 0xc5, 0x31, 0xa1, 0xc8, 0x79, 0x30, 0x1c, 0x1e, 0xd5, 0x0a, 0xc4,
+ 0x87, 0x31, 0xa4, 0x96, 0xda, 0xc7, 0x32, 0x1f, 0xe5, 0xe7, 0x71, 0x0b, 0xf2, 0xa1, 0x29, 0x50,
+ 0x01, 0xa2, 0x2a, 0x7b, 0x46, 0x98, 0x91, 0xa3, 0x2a, 0x7f, 0x80, 0xb8, 0x5c, 0x80, 0x24, 0xdb,
+ 0xdf, 0xa0, 0x7e, 0x57, 0x01, 0xd2, 0x22, 0x7f, 0x28, 0xaf, 0x43, 0xc6, 0x4b, 0xa4, 0x51, 0x0e,
+ 0xd2, 0xf5, 0xe6, 0x7e, 0xa5, 0xba, 0xd3, 0xa8, 0x4b, 0x0b, 0x28, 0x0f, 0x19, 0xb9, 0x51, 0xa9,
+ 0xd3, 0x9e, 0xab, 0x14, 0xf9, 0x24, 0xfd, 0xe7, 0x3f, 0x5b, 0x8d, 0xf0, 0x20, 0x93, 0x94, 0x52,
+ 0x0f, 0xe2, 0x69, 0x24, 0x5d, 0x29, 0xff, 0x6f, 0x06, 0x50, 0x5d, 0x75, 0x55, 0xb2, 0x29, 0x2f,
+ 0xd0, 0x99, 0x8c, 0x5e, 0x60, 0x4d, 0x53, 0x9b, 0x8c, 0xf1, 0x97, 0x69, 0x32, 0x5e, 0xaa, 0xd7,
+ 0x39, 0xd9, 0x99, 0x4c, 0xbe, 0x44, 0x67, 0x32, 0xdc, 0xf7, 0x89, 0xbd, 0x54, 0xdf, 0xe7, 0x11,
+ 0xa4, 0x58, 0x95, 0xc9, 0xde, 0x99, 0xcd, 0x6e, 0x2b, 0x4c, 0x1e, 0x0c, 0xef, 0xd6, 0x38, 0x0d,
+ 0xd3, 0xb5, 0x47, 0xde, 0x7b, 0x18, 0x06, 0xf3, 0xdb, 0x23, 0xe9, 0x57, 0xd9, 0x1e, 0xc9, 0xcc,
+ 0x6e, 0x8f, 0xfc, 0x00, 0xb8, 0x5d, 0x88, 0xa4, 0x18, 0x2e, 0x7c, 0x1a, 0x32, 0x65, 0x39, 0xcc,
+ 0x08, 0x78, 0x56, 0x9c, 0xb3, 0x03, 0x5f, 0xe8, 0x47, 0x80, 0xc4, 0xbd, 0x6c, 0x60, 0xe7, 0xd9,
+ 0x95, 0xce, 0x07, 0x33, 0x97, 0x46, 0x09, 0xa6, 0x1d, 0x80, 0x78, 0x13, 0xee, 0x8d, 0x39, 0xcb,
+ 0x1d, 0x00, 0xde, 0xe0, 0x35, 0x8f, 0xac, 0x39, 0xc2, 0xc4, 0x0a, 0xa4, 0x88, 0xfb, 0x1d, 0x60,
+ 0xa6, 0xff, 0x5e, 0xdc, 0xe6, 0x40, 0x6e, 0xb3, 0x03, 0xc8, 0x05, 0x0f, 0x09, 0x49, 0x10, 0x3b,
+ 0xc1, 0x23, 0x6e, 0xda, 0xe4, 0x4f, 0xf4, 0x00, 0x12, 0x7e, 0x76, 0x31, 0xfb, 0xb1, 0xf8, 0xcc,
+ 0xd3, 0x27, 0xe2, 0xca, 0x8c, 0xc5, 0x27, 0xd1, 0x7b, 0x34, 0xc5, 0xce, 0x05, 0x37, 0x12, 0xb5,
+ 0x20, 0xef, 0x0c, 0xed, 0x67, 0xfa, 0x33, 0xd5, 0x50, 0x7a, 0x96, 0x6a, 0xd0, 0x89, 0x0a, 0x9b,
+ 0x37, 0x67, 0x3d, 0xb4, 0xe2, 0xb8, 0xf7, 0x2d, 0xd5, 0x10, 0xad, 0x11, 0x27, 0x00, 0x43, 0x1f,
+ 0x7b, 0x17, 0x82, 0xfc, 0x06, 0x9d, 0x5f, 0x2e, 0x23, 0x6e, 0x86, 0x41, 0x3f, 0x27, 0xba, 0xbf,
+ 0x0c, 0x44, 0x22, 0x3b, 0x57, 0x11, 0x4c, 0x1f, 0x42, 0x8b, 0xb6, 0xbe, 0x17, 0xd9, 0x19, 0x5e,
+ 0xc3, 0x1c, 0xf6, 0xfd, 0xc8, 0x6e, 0xfb, 0x30, 0x0d, 0x6d, 0x43, 0xc6, 0x8b, 0xe5, 0xd4, 0xfc,
+ 0x0b, 0x9b, 0x6f, 0x5e, 0xb0, 0x63, 0x7b, 0x63, 0x1d, 0x0b, 0x9f, 0xd8, 0x4b, 0xb1, 0x23, 0x52,
+ 0xd4, 0xf7, 0x86, 0xe5, 0xff, 0xc9, 0x41, 0xa1, 0x33, 0x1a, 0x4c, 0xf3, 0x7e, 0xb1, 0x19, 0xde,
+ 0x2f, 0x3e, 0xdf, 0xbd, 0x4c, 0xe6, 0xe5, 0xee, 0x65, 0xe0, 0xd5, 0xde, 0xcb, 0x64, 0x5f, 0x99,
+ 0xf7, 0x2b, 0xbc, 0x94, 0xf7, 0x7b, 0x65, 0xb7, 0x74, 0xd1, 0x4b, 0xdc, 0xd2, 0x7d, 0x17, 0xf2,
+ 0xaa, 0x6d, 0xab, 0x23, 0xfe, 0x5b, 0x1c, 0x8d, 0xba, 0xca, 0x3c, 0x3b, 0xa3, 0xf3, 0xb3, 0xd5,
+ 0x6c, 0x85, 0x0c, 0xd2, 0x9f, 0xdf, 0x08, 0x0e, 0x59, 0xd5, 0x03, 0x69, 0xbe, 0x87, 0xcd, 0xbf,
+ 0x4a, 0x0f, 0x5b, 0x9c, 0xed, 0x61, 0xeb, 0x10, 0xa7, 0x3f, 0xf6, 0x61, 0x7a, 0x3f, 0x6b, 0xcb,
+ 0xc3, 0xea, 0xbb, 0x11, 0xf8, 0xbd, 0x0f, 0xa5, 0x46, 0x3f, 0x82, 0x65, 0xf1, 0xa2, 0x96, 0xe8,
+ 0x83, 0x7f, 0x8b, 0x1a, 0xf8, 0x29, 0x55, 0xf9, 0xfc, 0x6c, 0xb5, 0x24, 0xfb, 0x58, 0x3e, 0x3f,
+ 0x56, 0x07, 0x92, 0xbd, 0x28, 0xd9, 0x53, 0xc7, 0x35, 0x07, 0x3d, 0x81, 0x1c, 0xb5, 0xef, 0x3e,
+ 0xee, 0x1f, 0x62, 0x5b, 0x84, 0xda, 0xbb, 0xf3, 0xc9, 0x4b, 0x0c, 0x7d, 0x97, 0x12, 0x8a, 0xde,
+ 0x19, 0xf6, 0x20, 0x0e, 0xba, 0x0b, 0x09, 0xd5, 0xd0, 0x69, 0xac, 0xfc, 0xba, 0xdf, 0xf6, 0x31,
+ 0x44, 0xf6, 0x12, 0x39, 0x18, 0x96, 0xa4, 0x8b, 0xbb, 0x9e, 0x61, 0x69, 0x66, 0x87, 0xa4, 0xe5,
+ 0x9f, 0xc6, 0x00, 0x7c, 0x61, 0xd1, 0xb7, 0xe1, 0xfa, 0xe0, 0x78, 0xe4, 0xe8, 0x5d, 0xd5, 0x50,
+ 0x6c, 0x3c, 0xb0, 0xb1, 0x83, 0x4d, 0x96, 0xf9, 0x53, 0xbd, 0xce, 0xc9, 0xd7, 0xc4, 0xb0, 0x1c,
+ 0x1a, 0x45, 0x9f, 0xc2, 0x35, 0xc3, 0xea, 0x4d, 0xa3, 0x0b, 0xf6, 0x3d, 0xae, 0x72, 0x9c, 0x31,
+ 0x62, 0x95, 0x54, 0x6b, 0x03, 0xf5, 0x50, 0x37, 0xfc, 0x56, 0xc8, 0xa7, 0x2f, 0xba, 0xd1, 0x1b,
+ 0x35, 0x8f, 0x85, 0x78, 0x56, 0xe3, 0x33, 0x45, 0x3f, 0x9c, 0x7c, 0x99, 0xf0, 0xc9, 0x0b, 0xcf,
+ 0x30, 0xfb, 0x81, 0x42, 0xf9, 0x4d, 0x00, 0x7f, 0x7e, 0x7a, 0xe1, 0xbf, 0xb3, 0xe3, 0x27, 0xac,
+ 0xfc, 0xe9, 0x40, 0xf9, 0xf6, 0xd7, 0xbc, 0x0f, 0x00, 0x48, 0xca, 0x8d, 0xdd, 0xf6, 0xa3, 0x86,
+ 0x78, 0x21, 0xb0, 0xdc, 0x1e, 0x8b, 0x83, 0x93, 0x71, 0x2b, 0x32, 0x67, 0xdc, 0xe2, 0x97, 0xf6,
+ 0x9f, 0x43, 0x9c, 0x18, 0x13, 0x99, 0xbd, 0xd1, 0x3a, 0xd8, 0x95, 0x16, 0x50, 0x06, 0x12, 0x95,
+ 0x9d, 0x66, 0x65, 0x5f, 0x8a, 0xa0, 0x25, 0x90, 0x76, 0x0f, 0x76, 0x3a, 0x4d, 0xb9, 0x71, 0xbf,
+ 0xd9, 0x6e, 0x29, 0x14, 0x21, 0x8a, 0x56, 0x60, 0xb9, 0x43, 0x32, 0x70, 0xa5, 0xb9, 0xbb, 0xb7,
+ 0xd3, 0xac, 0x35, 0x3b, 0x8a, 0xdc, 0xa8, 0xb5, 0xe5, 0xba, 0xd2, 0x79, 0xb2, 0xd7, 0x90, 0x62,
+ 0x81, 0xc0, 0xf3, 0xb7, 0x71, 0x90, 0x98, 0x63, 0x9a, 0x12, 0x7a, 0xa2, 0x97, 0x78, 0x12, 0xf0,
+ 0x07, 0xcf, 0xff, 0xa6, 0x86, 0xad, 0xc4, 0x2b, 0xca, 0xf4, 0x93, 0x2f, 0x91, 0xe9, 0xa7, 0x5e,
+ 0xd5, 0x1b, 0x84, 0x79, 0xe3, 0x53, 0x38, 0x40, 0xc6, 0x5f, 0x26, 0x40, 0x06, 0x34, 0xe4, 0xe7,
+ 0x51, 0x80, 0x80, 0x6e, 0x7c, 0x2f, 0xf8, 0x4f, 0x73, 0xcc, 0xbe, 0x05, 0x1f, 0x2b, 0x6d, 0xb7,
+ 0x17, 0xc4, 0x3f, 0xdc, 0x71, 0x1f, 0xd2, 0x1a, 0xcf, 0x29, 0x79, 0xea, 0xf9, 0xce, 0xdc, 0xa9,
+ 0xe7, 0xf6, 0x82, 0xec, 0x11, 0xa3, 0x4f, 0x43, 0xbf, 0xb6, 0xbe, 0x35, 0x97, 0x6b, 0xd8, 0x16,
+ 0x3f, 0x3f, 0xa8, 0x40, 0x92, 0xc5, 0x70, 0xbe, 0x4d, 0x33, 0x7f, 0xc1, 0x3a, 0x66, 0x1a, 0xdb,
+ 0x0b, 0x32, 0x27, 0xe4, 0x65, 0x70, 0x0a, 0x12, 0x43, 0x53, 0xb7, 0xcc, 0xdb, 0x72, 0xf0, 0xc9,
+ 0xbc, 0xe8, 0xf9, 0x12, 0x6f, 0x42, 0xff, 0x56, 0x5d, 0xac, 0xb1, 0x97, 0x49, 0x07, 0xe6, 0x33,
+ 0x0f, 0x10, 0x41, 0x05, 0x00, 0x3e, 0xae, 0x9b, 0x3d, 0x29, 0x4a, 0x8b, 0x67, 0x92, 0xc8, 0x93,
+ 0xaf, 0xd8, 0xed, 0xef, 0x82, 0x34, 0xfe, 0x13, 0xda, 0x80, 0x0f, 0x5a, 0x84, 0xfc, 0xee, 0xa3,
+ 0x5a, 0xad, 0xd3, 0xdc, 0x6d, 0xec, 0x77, 0x2a, 0xbb, 0x7b, 0xec, 0x2d, 0x36, 0xb5, 0xfb, 0x76,
+ 0xb3, 0x2e, 0x45, 0x6f, 0x1f, 0xc2, 0xf5, 0x19, 0xbf, 0xb9, 0x46, 0xd7, 0xe1, 0x4a, 0xab, 0xdd,
+ 0x51, 0x9a, 0xf5, 0x46, 0xab, 0xd3, 0xec, 0x3c, 0x51, 0x6a, 0xed, 0x9d, 0x83, 0xdd, 0x96, 0xb4,
+ 0x40, 0xfc, 0xc9, 0xfd, 0x46, 0xab, 0x21, 0x57, 0x3a, 0x8d, 0xba, 0x52, 0xd9, 0x79, 0x5c, 0x79,
+ 0x42, 0xbc, 0x4c, 0x09, 0x96, 0x7c, 0x68, 0xf5, 0x89, 0xf7, 0xef, 0x70, 0x44, 0x6f, 0x7f, 0x17,
+ 0x8a, 0x63, 0xa6, 0x4c, 0x5c, 0xe2, 0xde, 0x41, 0x75, 0xa7, 0x59, 0x9b, 0xfa, 0x8e, 0x0a, 0x65,
+ 0x21, 0xd5, 0xde, 0xda, 0xda, 0x69, 0xb6, 0x1a, 0x52, 0xec, 0xf6, 0x47, 0x90, 0x0b, 0x26, 0xfe,
+ 0x48, 0x82, 0xdc, 0xf7, 0xdb, 0xad, 0x86, 0xb2, 0x55, 0x69, 0xee, 0x1c, 0xc8, 0x64, 0x95, 0x08,
+ 0x0a, 0xdc, 0xb7, 0x09, 0x58, 0xe4, 0xf6, 0x7b, 0x90, 0x0f, 0x65, 0xd9, 0x84, 0xa7, 0x10, 0x69,
+ 0x81, 0xec, 0xa9, 0xf8, 0x77, 0x44, 0x1a, 0x75, 0x29, 0x52, 0x5d, 0xff, 0xcd, 0x7f, 0xae, 0x2c,
+ 0xfc, 0xe6, 0x7c, 0x25, 0xf2, 0xdb, 0xf3, 0x95, 0xc8, 0xef, 0xce, 0x57, 0x22, 0xff, 0x71, 0xbe,
+ 0x12, 0xf9, 0xab, 0xdf, 0xaf, 0x2c, 0xfc, 0xf6, 0xf7, 0x2b, 0x0b, 0xbf, 0xfb, 0xfd, 0xca, 0xc2,
+ 0xf7, 0x93, 0xec, 0x9f, 0xb9, 0xf9, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x32, 0xee, 0xe4, 0x7b,
+ 0x51, 0x47, 0x00, 0x00,
}
func (this *ForeignKeyReference) Equal(that interface{}) bool {
diff --git a/pkg/sql/catalog/descpb/structured.proto b/pkg/sql/catalog/descpb/structured.proto
index b3ea3d449cfa..1d366df7c550 100644
--- a/pkg/sql/catalog/descpb/structured.proto
+++ b/pkg/sql/catalog/descpb/structured.proto
@@ -513,7 +513,7 @@ message IndexDescriptor {
// Interleave, if it's not the zero value, describes how this index's data is
// interleaved into another index's data.
- optional InterleaveDescriptor interleave = 11 [(gogoproto.nullable) = false];
+ optional InterleaveDescriptor interleave = 11 [(gogoproto.nullable) = false, deprecated = true];
// InterleavedBy contains a reference to every table/index that is interleaved
// into this one.
@@ -526,7 +526,7 @@ message IndexDescriptor {
// despite the message used here, interleavings don't have to have
// corresponding foreign key references (and whether they do or not is
// irrelevant for this field).
- repeated ForeignKeyReference interleaved_by = 12 [(gogoproto.nullable) = false];
+ repeated ForeignKeyReference interleaved_by = 12 [(gogoproto.nullable) = false, deprecated = true];
// Partitioning, if it's not the zero value, describes how this index's data
// is partitioned into spans of keys each addressable by zone configs.
@@ -1157,9 +1157,6 @@ message TableDescriptor {
// can be reused. This list is separate because mutations can
// lie in this list for a long time (gc deadline) and should not block
// the execution of other schema changes on the table.
- //
- // TODO(vivekmenezes): This is currently only used by the non-interleaved drop
- // index case. Also use for dropped interleaved indexes and columns.
repeated GCDescriptorMutation gc_mutations = 33 [(gogoproto.nullable) = false,
(gogoproto.customname) = "GCMutations"];
diff --git a/pkg/sql/catalog/descriptor.go b/pkg/sql/catalog/descriptor.go
index 84e62a206a91..bf9ea0e4f57d 100644
--- a/pkg/sql/catalog/descriptor.go
+++ b/pkg/sql/catalog/descriptor.go
@@ -263,9 +263,6 @@ type TableDescriptor interface {
// Sequences count as physical tables because their values are stored in
// the KV layer.
IsPhysicalTable() bool
- // IsInterleaved returns true if any part of this this table is interleaved with
- // another table's data.
- IsInterleaved() bool
// MaterializedView returns whether or not this TableDescriptor is a
// MaterializedView.
MaterializedView() bool
diff --git a/pkg/sql/catalog/table_elements.go b/pkg/sql/catalog/table_elements.go
index 7e4bdea464a0..03b46ea106e6 100644
--- a/pkg/sql/catalog/table_elements.go
+++ b/pkg/sql/catalog/table_elements.go
@@ -119,7 +119,6 @@ type Index interface {
GetID() descpb.IndexID
GetName() string
- IsInterleaved() bool
IsPartial() bool
IsUnique() bool
IsDisabled() bool
@@ -141,12 +140,6 @@ type Index interface {
ExplicitColumnStartIdx() int
- NumInterleaveAncestors() int
- GetInterleaveAncestor(ancestorOrdinal int) descpb.InterleaveDescriptor_Ancestor
-
- NumInterleavedBy() int
- GetInterleavedBy(interleavedByOrdinal int) descpb.ForeignKeyReference
-
NumKeyColumns() int
GetKeyColumnID(columnOrdinal int) descpb.ColumnID
GetKeyColumnName(columnOrdinal int) string
diff --git a/pkg/sql/catalog/tabledesc/index.go b/pkg/sql/catalog/tabledesc/index.go
index 40082b8dae66..72ce0818760e 100644
--- a/pkg/sql/catalog/tabledesc/index.go
+++ b/pkg/sql/catalog/tabledesc/index.go
@@ -72,11 +72,6 @@ func (w index) GetName() string {
return w.desc.Name
}
-// IsInterleaved returns true iff the index is interleaved.
-func (w index) IsInterleaved() bool {
- return w.desc.IsInterleaved()
-}
-
// IsPartial returns true iff the index is a partial index.
func (w index) IsPartial() bool {
return w.desc.IsPartial()
@@ -234,29 +229,6 @@ func (w index) GetEncodingType() descpb.IndexDescriptorEncodingType {
return w.desc.EncodingType
}
-// NumInterleaveAncestors returns the number of interleave ancestors as per the
-// index descriptor.
-func (w index) NumInterleaveAncestors() int {
- return len(w.desc.Interleave.Ancestors)
-}
-
-// GetInterleaveAncestor returns the ancestorOrdinal-th interleave ancestor.
-func (w index) GetInterleaveAncestor(ancestorOrdinal int) descpb.InterleaveDescriptor_Ancestor {
- return w.desc.Interleave.Ancestors[ancestorOrdinal]
-}
-
-// NumInterleavedBy returns the number of tables/indexes that are interleaved
-// into this index.
-func (w index) NumInterleavedBy() int {
- return len(w.desc.InterleavedBy)
-}
-
-// GetInterleavedBy returns the interleavedByOrdinal-th table/index that is
-// interleaved into this index.
-func (w index) GetInterleavedBy(interleavedByOrdinal int) descpb.ForeignKeyReference {
- return w.desc.InterleavedBy[interleavedByOrdinal]
-}
-
// NumKeyColumns returns the number of columns in the index key.
func (w index) NumKeyColumns() int {
return len(w.desc.KeyColumnIDs)
diff --git a/pkg/sql/catalog/tabledesc/index_test.go b/pkg/sql/catalog/tabledesc/index_test.go
index c36d0c4917b6..c42226885584 100644
--- a/pkg/sql/catalog/tabledesc/index_test.go
+++ b/pkg/sql/catalog/tabledesc/index_test.go
@@ -233,8 +233,6 @@ func TestIndexInterface(t *testing.T) {
// Check index methods on features not tested here.
for _, idx := range indexes {
- require.False(t, idx.IsInterleaved(),
- errMsgFmt, "IsInterleaved", idx.GetName())
require.False(t, idx.IsDisabled(),
errMsgFmt, "IsDisabled", idx.GetName())
require.False(t, idx.IsCreatedExplicitly(),
@@ -246,10 +244,6 @@ func TestIndexInterface(t *testing.T) {
require.Equal(t, descpb.IndexDescriptorVersion(0x3), idx.GetVersion(),
errMsgFmt, "GetVersion", idx.GetName())
}
- require.Equal(t, 0, idx.NumInterleaveAncestors(),
- errMsgFmt, "NumInterleaveAncestors", idx.GetName())
- require.Equal(t, 0, idx.NumInterleavedBy(),
- errMsgFmt, "NumInterleavedBy", idx.GetName())
require.False(t, idx.HasOldStoredColumns(),
errMsgFmt, "HasOldStoredColumns", idx.GetName())
require.Equalf(t, 0, idx.NumCompositeColumns(),
diff --git a/pkg/sql/catalog/tabledesc/safe_format.go b/pkg/sql/catalog/tabledesc/safe_format.go
index af01d73e57d4..9482ac0f110b 100644
--- a/pkg/sql/catalog/tabledesc/safe_format.go
+++ b/pkg/sql/catalog/tabledesc/safe_format.go
@@ -129,28 +129,6 @@ func formatSafeIndex(
if idx.Predicate != "" {
w.Printf(", Partial: true")
}
- if !idx.Interleave.Equal(&descpb.InterleaveDescriptor{}) {
- w.Printf(", InterleaveParents: [")
- for i := range idx.Interleave.Ancestors {
- a := &idx.Interleave.Ancestors[i]
- if i > 0 {
- w.Printf(", ")
- }
- w.Printf("{TableID: %d, IndexID: %d}", a.TableID, a.IndexID)
- }
- w.Printf("]")
- }
- if len(idx.InterleavedBy) > 0 {
- w.Printf(", InterleaveChildren: [")
- for i := range idx.InterleavedBy {
- a := &idx.InterleavedBy[i]
- if i > 0 {
- w.Printf(", ")
- }
- w.Printf("{TableID: %d, IndexID: %d}", a.Table, a.Index)
- }
- w.Printf("]")
- }
w.Printf(", KeyColumns: [")
for i := range idx.KeyColumnIDs {
if i > 0 {
diff --git a/pkg/sql/catalog/tabledesc/structured.go b/pkg/sql/catalog/tabledesc/structured.go
index a66c9cc4c031..a6551ee33460 100644
--- a/pkg/sql/catalog/tabledesc/structured.go
+++ b/pkg/sql/catalog/tabledesc/structured.go
@@ -1537,13 +1537,6 @@ func (desc *wrapper) FindFKByName(name string) (*descpb.ForeignKeyConstraint, er
return nil, fmt.Errorf("fk %q does not exist", name)
}
-// IsInterleaved implements the TableDescriptor interface.
-func (desc *wrapper) IsInterleaved() bool {
- return nil != catalog.FindNonDropIndex(desc, func(idx catalog.Index) bool {
- return idx.IsInterleaved()
- })
-}
-
// IsPrimaryIndexDefaultRowID returns whether or not the table's primary
// index is the default primary key on the hidden rowid column.
func (desc *wrapper) IsPrimaryIndexDefaultRowID() bool {
@@ -2153,8 +2146,6 @@ func (desc *wrapper) IndexSpan(codec keys.SQLCodec, indexID descpb.IndexID) roac
// TableSpan implements the TableDescriptor interface.
func (desc *wrapper) TableSpan(codec keys.SQLCodec) roachpb.Span {
- // TODO(jordan): Why does IndexSpan consider interleaves but TableSpan does
- // not? Should it?
prefix := codec.TablePrefix(uint32(desc.ID))
return roachpb.Span{Key: prefix, EndKey: prefix.PrefixEnd()}
}
@@ -2268,14 +2259,6 @@ func (desc *wrapper) FindAllReferences() (map[descpb.ID]struct{}, error) {
fk := &desc.InboundFKs[i]
refs[fk.OriginTableID] = struct{}{}
}
- for _, index := range desc.NonDropIndexes() {
- for i := 0; i < index.NumInterleaveAncestors(); i++ {
- refs[index.GetInterleaveAncestor(i).TableID] = struct{}{}
- }
- for i := 0; i < index.NumInterleavedBy(); i++ {
- refs[index.GetInterleavedBy(i).Table] = struct{}{}
- }
- }
for _, c := range desc.NonDropColumns() {
for i := 0; i < c.NumUsesSequences(); i++ {
diff --git a/pkg/sql/catalog/tabledesc/validate.go b/pkg/sql/catalog/tabledesc/validate.go
index 05cdd2665ebc..81000dc0ed93 100644
--- a/pkg/sql/catalog/tabledesc/validate.go
+++ b/pkg/sql/catalog/tabledesc/validate.go
@@ -51,21 +51,13 @@ func (desc *wrapper) GetReferencedDescIDs() (catalog.DescriptorIDSet, error) {
if desc.GetParentSchemaID() != keys.PublicSchemaID {
ids.Add(desc.GetParentSchemaID())
}
- // Collect referenced table IDs in foreign keys and interleaves.
+ // Collect referenced table IDs in foreign keys.
for _, fk := range desc.OutboundFKs {
ids.Add(fk.ReferencedTableID)
}
for _, fk := range desc.InboundFKs {
ids.Add(fk.OriginTableID)
}
- for _, idx := range desc.NonDropIndexes() {
- for i := 0; i < idx.NumInterleaveAncestors(); i++ {
- ids.Add(idx.GetInterleaveAncestor(i).TableID)
- }
- for i := 0; i < idx.NumInterleavedBy(); i++ {
- ids.Add(idx.GetInterleavedBy(i).Table)
- }
- }
// Collect user defined type Oids and sequence references in columns.
for _, col := range desc.DeletableColumns() {
children, err := typedesc.GetTypeDescriptorClosure(col.GetType())
@@ -177,82 +169,6 @@ func (desc *wrapper) ValidateCrossReferences(
}
}
}
-
- // Check interleaves.
- for _, indexI := range desc.NonDropIndexes() {
- vea.Report(desc.validateIndexInterleave(indexI, vdg))
- }
- // TODO(dan): Also validate SharedPrefixLen in the interleaves.
-}
-
-func (desc *wrapper) validateIndexInterleave(
- indexI catalog.Index, vdg catalog.ValidationDescGetter,
-) error {
- // Check interleaves.
- if indexI.NumInterleaveAncestors() > 0 {
- // Only check the most recent ancestor, the rest of them don't point
- // back.
- ancestor := indexI.GetInterleaveAncestor(indexI.NumInterleaveAncestors() - 1)
- targetTable, err := vdg.GetTableDescriptor(ancestor.TableID)
- if err != nil {
- return errors.Wrapf(err,
- "invalid interleave: missing table=%d index=%d", ancestor.TableID, errors.Safe(ancestor.IndexID))
- }
- targetIndex, err := targetTable.FindIndexWithID(ancestor.IndexID)
- if err != nil {
- return errors.Wrapf(err,
- "invalid interleave: missing table=%s index=%d", targetTable.GetName(), errors.Safe(ancestor.IndexID))
- }
-
- found := false
- for j := 0; j < targetIndex.NumInterleavedBy(); j++ {
- backref := targetIndex.GetInterleavedBy(j)
- if backref.Table == desc.ID && backref.Index == indexI.GetID() {
- found = true
- break
- }
- }
- if !found {
- return errors.AssertionFailedf(
- "missing interleave back reference to %q@%q from %q@%q",
- desc.Name, indexI.GetName(), targetTable.GetName(), targetIndex.GetName())
- }
- }
-
- interleaveBackrefs := make(map[descpb.ForeignKeyReference]struct{})
- for j := 0; j < indexI.NumInterleavedBy(); j++ {
- backref := indexI.GetInterleavedBy(j)
- if _, ok := interleaveBackrefs[backref]; ok {
- return errors.AssertionFailedf("duplicated interleave backreference %+v", backref)
- }
- interleaveBackrefs[backref] = struct{}{}
- targetTable, err := vdg.GetTableDescriptor(backref.Table)
- if err != nil {
- return errors.Wrapf(err,
- "invalid interleave backreference table=%d index=%d",
- backref.Table, backref.Index)
- }
- targetIndex, err := targetTable.FindIndexWithID(backref.Index)
- if err != nil {
- return errors.Wrapf(err,
- "invalid interleave backreference table=%s index=%d",
- targetTable.GetName(), backref.Index)
- }
- if targetIndex.NumInterleaveAncestors() == 0 {
- return errors.AssertionFailedf(
- "broken interleave backward reference from %q@%q to %q@%q",
- desc.Name, indexI.GetName(), targetTable.GetName(), targetIndex.GetName())
- }
- // The last ancestor is required to be a backreference.
- ancestor := targetIndex.GetInterleaveAncestor(targetIndex.NumInterleaveAncestors() - 1)
- if ancestor.TableID != desc.ID || ancestor.IndexID != indexI.GetID() {
- return errors.AssertionFailedf(
- "broken interleave backward reference from %q@%q to %q@%q",
- desc.Name, indexI.GetName(), targetTable.GetName(), targetIndex.GetName())
- }
- }
-
- return nil
}
func (desc *wrapper) validateOutboundFK(
@@ -855,6 +771,10 @@ func (desc *wrapper) validateTableIndexes(columnNames map[string]descpb.ColumnID
return errors.AssertionFailedf("index %q contains deprecated foreign key representation", idx.GetName())
}
+ if len(idx.IndexDesc().Interleave.Ancestors) > 0 || len(idx.IndexDesc().InterleavedBy) > 0 {
+ return errors.Newf("index is interleaved")
+ }
+
if _, indexNameExists := indexNames[idx.GetName()]; indexNameExists {
for i := range desc.Indexes {
if desc.Indexes[i].Name == idx.GetName() {
@@ -1054,16 +974,6 @@ func (desc *wrapper) validatePartitioningDescriptor(
return nil
}
- // TODO(dan): The sqlccl.GenerateSubzoneSpans logic is easier if we disallow
- // setting zone configs on indexes that are interleaved into another index.
- // InterleavedBy is fine, so using the root of the interleave hierarchy will
- // work. It is expected that this is sufficient for real-world use cases.
- // Revisit this restriction if that expectation is wrong.
- if idx.NumInterleaveAncestors() > 0 {
- return errors.Errorf("cannot set a zone config for interleaved index %s; "+
- "set it on the root of the interleaved hierarchy instead", idx.GetName())
- }
-
// We don't need real prefixes in the DecodePartitionTuple calls because we're
// only using it to look for collisions and the prefix would be the same for
// all of them. Faking them out with DNull allows us to make O(list partition)
diff --git a/pkg/sql/catalog/tabledesc/validate_test.go b/pkg/sql/catalog/tabledesc/validate_test.go
index 007ee20d38bb..a23d7a42955b 100644
--- a/pkg/sql/catalog/tabledesc/validate_test.go
+++ b/pkg/sql/catalog/tabledesc/validate_test.go
@@ -1422,129 +1422,7 @@ func TestValidateCrossTableReferences(t *testing.T) {
FormatVersion: descpb.InterleavedFormatVersion,
}},
},
- // Interleaves
- { // 6
- err: `invalid interleave: missing table=52 index=2: referenced table ID 52: descriptor not found`,
- desc: descpb.TableDescriptor{
- Name: "foo",
- ID: 51,
- ParentID: 1,
- UnexposedParentSchemaID: keys.PublicSchemaID,
- FormatVersion: descpb.InterleavedFormatVersion,
- PrimaryIndex: descpb.IndexDescriptor{
- ID: 1,
- Interleave: descpb.InterleaveDescriptor{Ancestors: []descpb.InterleaveDescriptor_Ancestor{
- {TableID: 52, IndexID: 2},
- }},
- },
- },
- otherDescs: nil,
- },
- { // 7
- err: `invalid interleave: missing table=baz index=2: index-id "2" does not exist`,
- desc: descpb.TableDescriptor{
- Name: "foo",
- ID: 51,
- ParentID: 1,
- UnexposedParentSchemaID: keys.PublicSchemaID,
- FormatVersion: descpb.InterleavedFormatVersion,
- PrimaryIndex: descpb.IndexDescriptor{
- ID: 1,
- Interleave: descpb.InterleaveDescriptor{Ancestors: []descpb.InterleaveDescriptor_Ancestor{
- {TableID: 52, IndexID: 2},
- }},
- },
- },
- otherDescs: []descpb.TableDescriptor{{
- ID: 52,
- Name: "baz",
- ParentID: 1,
- UnexposedParentSchemaID: keys.PublicSchemaID,
- }},
- },
- { // 8
- err: `missing interleave back reference to "foo"@"bar" from "baz"@"qux"`,
- desc: descpb.TableDescriptor{
- Name: "foo",
- ID: 51,
- ParentID: 1,
- UnexposedParentSchemaID: keys.PublicSchemaID,
- PrimaryIndex: descpb.IndexDescriptor{
- ID: 1,
- Name: "bar",
- Interleave: descpb.InterleaveDescriptor{Ancestors: []descpb.InterleaveDescriptor_Ancestor{
- {TableID: 52, IndexID: 2},
- }},
- },
- },
- otherDescs: []descpb.TableDescriptor{{
- ID: 52,
- Name: "baz",
- ParentID: 1,
- UnexposedParentSchemaID: keys.PublicSchemaID,
- PrimaryIndex: descpb.IndexDescriptor{
- ID: 2,
- Name: "qux",
- },
- }},
- },
- { // 9
- err: `invalid interleave backreference table=52 index=2: referenced table ID 52: descriptor not found`,
- desc: descpb.TableDescriptor{
- Name: "foo",
- ID: 51,
- ParentID: 1,
- UnexposedParentSchemaID: keys.PublicSchemaID,
- PrimaryIndex: descpb.IndexDescriptor{
- ID: 1,
- InterleavedBy: []descpb.ForeignKeyReference{{Table: 52, Index: 2}},
- },
- },
- },
- { // 10
- err: `invalid interleave backreference table=baz index=2: index-id "2" does not exist`,
- desc: descpb.TableDescriptor{
- Name: "foo",
- ID: 51,
- ParentID: 1,
- UnexposedParentSchemaID: keys.PublicSchemaID,
- PrimaryIndex: descpb.IndexDescriptor{
- ID: 1,
- InterleavedBy: []descpb.ForeignKeyReference{{Table: 52, Index: 2}},
- },
- },
- otherDescs: []descpb.TableDescriptor{{
- ID: 52,
- Name: "baz",
- ParentID: 1,
- UnexposedParentSchemaID: keys.PublicSchemaID,
- }},
- },
- { // 11
- err: `broken interleave backward reference from "foo"@"bar" to "baz"@"qux"`,
- desc: descpb.TableDescriptor{
- Name: "foo",
- ID: 51,
- ParentID: 1,
- UnexposedParentSchemaID: keys.PublicSchemaID,
- PrimaryIndex: descpb.IndexDescriptor{
- ID: 1,
- Name: "bar",
- InterleavedBy: []descpb.ForeignKeyReference{{Table: 52, Index: 2}},
- },
- },
- otherDescs: []descpb.TableDescriptor{{
- Name: "baz",
- ID: 52,
- ParentID: 1,
- UnexposedParentSchemaID: keys.PublicSchemaID,
- PrimaryIndex: descpb.IndexDescriptor{
- ID: 2,
- Name: "qux",
- },
- }},
- },
- { // 12
+ { // 4
err: `referenced type ID 500: descriptor not found`,
desc: descpb.TableDescriptor{
Name: "foo",
@@ -1567,7 +1445,7 @@ func TestValidateCrossTableReferences(t *testing.T) {
},
},
// Add some expressions with invalid type references.
- { // 13
+ { // 5
err: `referenced type ID 500: descriptor not found`,
desc: descpb.TableDescriptor{
Name: "foo",
@@ -1590,7 +1468,7 @@ func TestValidateCrossTableReferences(t *testing.T) {
},
},
},
- { // 14
+ { // 6
err: `referenced type ID 500: descriptor not found`,
desc: descpb.TableDescriptor{
Name: "foo",
@@ -1613,7 +1491,7 @@ func TestValidateCrossTableReferences(t *testing.T) {
},
},
},
- { // 15
+ { // 7
err: `referenced type ID 500: descriptor not found`,
desc: descpb.TableDescriptor{
Name: "foo",
@@ -1627,7 +1505,7 @@ func TestValidateCrossTableReferences(t *testing.T) {
},
},
},
- { // 16
+ { // 8
err: `referenced type ID 500: descriptor not found`,
desc: descpb.TableDescriptor{
Name: "foo",
@@ -1651,7 +1529,7 @@ func TestValidateCrossTableReferences(t *testing.T) {
},
},
// Temporary tables.
- { // 17
+ { // 9
err: "",
desc: descpb.TableDescriptor{
Name: "foo",
diff --git a/pkg/sql/colfetcher/cfetcher.go b/pkg/sql/colfetcher/cfetcher.go
index 4daf8c2cf475..faf179f000cb 100644
--- a/pkg/sql/colfetcher/cfetcher.go
+++ b/pkg/sql/colfetcher/cfetcher.go
@@ -1382,15 +1382,13 @@ func (rf *cFetcher) KeyToDesc(key roachpb.Key) (catalog.TableDescriptor, bool) {
}
nIndexCols := rf.table.index.NumKeyColumns() + rf.table.index.NumKeySuffixColumns()
tableKeyVals := make([]rowenc.EncDatum, nIndexCols)
- _, ok, _, err := rowenc.DecodeIndexKeyWithoutTableIDIndexIDPrefix(
- rf.table.desc,
- rf.table.index,
+ _, _, err := rowenc.DecodeKeyVals(
rf.table.keyValTypes,
tableKeyVals,
rf.table.indexColumnDirs,
key[rf.table.knownPrefixLength:],
)
- if !ok || err != nil {
+ if err != nil {
return nil, false
}
return rf.table.desc, true
diff --git a/pkg/sql/crdb_internal.go b/pkg/sql/crdb_internal.go
index 758ff5030bab..6f330120db36 100644
--- a/pkg/sql/crdb_internal.go
+++ b/pkg/sql/crdb_internal.go
@@ -42,7 +42,6 @@ import (
"github.com/cockroachdb/cockroach/pkg/sql/catalog"
"github.com/cockroachdb/cockroach/pkg/sql/catalog/catalogkv"
"github.com/cockroachdb/cockroach/pkg/sql/catalog/catconstants"
- "github.com/cockroachdb/cockroach/pkg/sql/catalog/catformat"
"github.com/cockroachdb/cockroach/pkg/sql/catalog/catprivilege"
"github.com/cockroachdb/cockroach/pkg/sql/catalog/colinfo"
"github.com/cockroachdb/cockroach/pkg/sql/catalog/descpb"
@@ -151,7 +150,6 @@ var crdbInternal = virtualSchema{
catconstants.CrdbInternalZonesTableID: crdbInternalZonesTable,
catconstants.CrdbInternalInvalidDescriptorsTableID: crdbInternalInvalidDescriptorsTable,
catconstants.CrdbInternalClusterDatabasePrivilegesTableID: crdbInternalClusterDatabasePrivilegesTable,
- catconstants.CrdbInternalInterleaved: crdbInternalInterleaved,
catconstants.CrdbInternalCrossDbRefrences: crdbInternalCrossDbReferences,
catconstants.CrdbInternalLostTableDescriptors: crdbLostTableDescriptors,
catconstants.CrdbInternalClusterInflightTracesTable: crdbInternalClusterInflightTracesTable,
@@ -2384,8 +2382,7 @@ CREATE TABLE crdb_internal.create_statements (
if err != nil {
return err
}
- if err := showAlterStatementWithInterleave(ctx, &name, contextName, lookup, table.PublicNonPrimaryIndexes(), table, alterStmts,
- validateStmts, &p.semaCtx); err != nil {
+ if err := showAlterStatement(ctx, &name, contextName, lookup, table, alterStmts, validateStmts); err != nil {
return err
}
displayOptions.FKDisplayMode = IncludeFkClausesInCreate
@@ -2422,18 +2419,16 @@ CREATE TABLE crdb_internal.create_statements (
)
})
-func showAlterStatementWithInterleave(
+func showAlterStatement(
ctx context.Context,
tn *tree.TableName,
contextName string,
lCtx simpleSchemaResolver,
- allIdx []catalog.Index,
table catalog.TableDescriptor,
alterStmts *tree.DArray,
validateStmts *tree.DArray,
- semaCtx *tree.SemaContext,
) error {
- if err := table.ForeachOutboundFK(func(fk *descpb.ForeignKeyConstraint) error {
+ return table.ForeachOutboundFK(func(fk *descpb.ForeignKeyConstraint) error {
f := tree.NewFmtCtx(tree.FmtSimple)
f.WriteString("ALTER TABLE ")
f.FormatNode(tn)
@@ -2464,87 +2459,7 @@ func showAlterStatementWithInterleave(
f.FormatNameP(&fk.Name)
return validateStmts.Append(tree.NewDString(f.CloseAndGetString()))
- }); err != nil {
- return err
- }
-
- for _, idx := range allIdx {
- // Create CREATE INDEX commands for INTERLEAVE tables. These commands
- // are included in the ALTER TABLE statements.
- if idx.NumInterleaveAncestors() > 0 {
- f := tree.NewFmtCtx(tree.FmtSimple)
- parentTableID := idx.GetInterleaveAncestor(idx.NumInterleaveAncestors() - 1).TableID
- var err error
- var parentName tree.TableName
- if lCtx != nil {
- parentName, err = getParentAsTableName(lCtx, parentTableID, contextName)
- if err != nil {
- return err
- }
- } else {
- parentName = tree.MakeTableNameWithSchema(tree.Name(""), tree.PublicSchemaName, tree.Name(fmt.Sprintf("[%d as parent]", parentTableID)))
- parentName.ExplicitCatalog = false
- parentName.ExplicitSchema = false
- }
-
- var tableName tree.TableName
- if lCtx != nil {
- tableName, err = getTableNameFromTableDescriptor(lCtx, table, contextName)
- if err != nil {
- return err
- }
- } else {
- tableName = tree.MakeTableNameWithSchema(tree.Name(""), tree.PublicSchemaName, tree.Name(fmt.Sprintf("[%d as parent]", table.GetID())))
- tableName.ExplicitCatalog = false
- tableName.ExplicitSchema = false
- }
- var sharedPrefixLen int
- for i := 0; i < idx.NumInterleaveAncestors(); i++ {
- sharedPrefixLen += int(idx.GetInterleaveAncestor(i).SharedPrefixLen)
- }
- // Write the CREATE INDEX statements.
- if err := showCreateIndexWithInterleave(ctx, f, table, idx, tableName, parentName, sharedPrefixLen, semaCtx); err != nil {
- return err
- }
- if err := alterStmts.Append(tree.NewDString(f.CloseAndGetString())); err != nil {
- return err
- }
- }
- }
- return nil
-}
-
-func showCreateIndexWithInterleave(
- ctx context.Context,
- f *tree.FmtCtx,
- table catalog.TableDescriptor,
- idx catalog.Index,
- tableName tree.TableName,
- parentName tree.TableName,
- sharedPrefixLen int,
- semaCtx *tree.SemaContext,
-) error {
- f.WriteString("CREATE ")
- idxStr, err := catformat.IndexForDisplay(
- ctx, table, &tableName, idx, "" /* partition */, "" /* interleave */, semaCtx,
- )
- if err != nil {
- return err
- }
- f.WriteString(idxStr)
- f.WriteString(" INTERLEAVE IN PARENT ")
- parentName.Format(f)
- f.WriteString(" (")
- // Get all of the columns and write them.
- comma := ""
- for i := 0; i < sharedPrefixLen; i++ {
- name := idx.GetKeyColumnName(i)
- f.WriteString(comma)
- f.FormatNameP(&name)
- comma = ", "
- }
- f.WriteString(")")
- return nil
+ })
}
// crdbInternalTableColumnsTable exposes the column descriptors.
@@ -2800,7 +2715,6 @@ CREATE TABLE crdb_internal.backward_dependencies (
fkDep := tree.NewDString("fk")
viewDep := tree.NewDString("view")
sequenceDep := tree.NewDString("sequence")
- interleaveDep := tree.NewDString("interleave")
return forEachTableDescAllWithTableLookup(ctx, p, dbContext, hideVirtual, func(
db catalog.DatabaseDescriptor, _ string, table catalog.TableDescriptor, tableLookup tableLookupFn,
@@ -2808,25 +2722,6 @@ CREATE TABLE crdb_internal.backward_dependencies (
tableID := tree.NewDInt(tree.DInt(table.GetID()))
tableName := tree.NewDString(table.GetName())
- reportIdxDeps := func(idx catalog.Index) error {
- for i := 0; i < idx.NumInterleaveAncestors(); i++ {
- interleaveParent := idx.GetInterleaveAncestor(i)
- if err := addRow(
- tableID, tableName,
- tree.NewDInt(tree.DInt(idx.GetID())),
- tree.DNull,
- tree.NewDInt(tree.DInt(interleaveParent.TableID)),
- interleaveDep,
- tree.NewDInt(tree.DInt(interleaveParent.IndexID)),
- tree.DNull,
- tree.NewDString(fmt.Sprintf("SharedPrefixLen: %d",
- interleaveParent.SharedPrefixLen)),
- ); err != nil {
- return err
- }
- }
- return nil
- }
if err := table.ForeachOutboundFK(func(fk *descpb.ForeignKeyConstraint) error {
refTbl, err := tableLookup.getTableByID(fk.ReferencedTableID)
if err != nil {
@@ -2854,11 +2749,6 @@ CREATE TABLE crdb_internal.backward_dependencies (
return err
}
- // Record the backward references of the primary index.
- if err := catalog.ForEachIndex(table, catalog.IndexOpts{}, reportIdxDeps); err != nil {
- return err
- }
-
// Record the view dependencies.
for _, tIdx := range table.GetDependsOn() {
if err := addRow(
@@ -2959,31 +2849,12 @@ CREATE TABLE crdb_internal.forward_dependencies (
populate: func(ctx context.Context, p *planner, dbContext catalog.DatabaseDescriptor, addRow func(...tree.Datum) error) error {
fkDep := tree.NewDString("fk")
viewDep := tree.NewDString("view")
- interleaveDep := tree.NewDString("interleave")
sequenceDep := tree.NewDString("sequence")
return forEachTableDescAll(ctx, p, dbContext, hideVirtual, /* virtual tables have no backward/forward dependencies*/
func(db catalog.DatabaseDescriptor, _ string, table catalog.TableDescriptor) error {
tableID := tree.NewDInt(tree.DInt(table.GetID()))
tableName := tree.NewDString(table.GetName())
- reportIdxDeps := func(idx catalog.Index) error {
- for i := 0; i < idx.NumInterleavedBy(); i++ {
- interleaveRef := idx.GetInterleavedBy(i)
- if err := addRow(
- tableID, tableName,
- tree.NewDInt(tree.DInt(idx.GetID())),
- tree.NewDInt(tree.DInt(interleaveRef.Table)),
- interleaveDep,
- tree.NewDInt(tree.DInt(interleaveRef.Index)),
- tree.DNull,
- tree.NewDString(fmt.Sprintf("SharedPrefixLen: %d",
- interleaveRef.SharedPrefixLen)),
- ); err != nil {
- return err
- }
- }
- return nil
- }
if err := table.ForeachInboundFK(func(fk *descpb.ForeignKeyConstraint) error {
return addRow(
tableID, tableName,
@@ -2998,10 +2869,6 @@ CREATE TABLE crdb_internal.forward_dependencies (
return err
}
- // Record the backward references of the primary index.
- if err := catalog.ForEachIndex(table, catalog.IndexOpts{}, reportIdxDeps); err != nil {
- return err
- }
reportDependedOnBy := func(
dep *descpb.TableDescriptor_Reference, depTypeString *tree.DString,
) error {
@@ -4619,67 +4486,6 @@ CREATE TABLE crdb_internal.cluster_database_privileges (
},
}
-var crdbInternalInterleaved = virtualSchemaTable{
- comment: `virtual table with interleaved table information`,
- schema: `
-CREATE TABLE crdb_internal.interleaved (
- database_name
- STRING NOT NULL,
- schema_name
- STRING NOT NULL,
- table_name
- STRING NOT NULL,
- index_name
- STRING NOT NULL,
- parent_database_name
- STRING NOT NULL,
- parent_schema_name
- STRING NOT NULL,
- parent_table_name
- STRING NOT NULL
-);`,
- populate: func(ctx context.Context, p *planner, dbContext catalog.DatabaseDescriptor, addRow func(...tree.Datum) error) error {
- return forEachTableDescAllWithTableLookup(ctx, p, dbContext, hideVirtual,
- func(db catalog.DatabaseDescriptor, schemaName string, table catalog.TableDescriptor, lookupFn tableLookupFn) error {
- if !table.IsInterleaved() {
- return nil
- }
- // We want to include dropped indexes for cases where
- // a revert may end up adding them back.
- indexes := table.AllIndexes()
- for _, index := range indexes {
- if index.NumInterleaveAncestors() == 0 {
- continue
- }
- ancestor := index.GetInterleaveAncestor(index.NumInterleaveAncestors() - 1)
- parentTable, err := lookupFn.getTableByID(ancestor.TableID)
- if err != nil {
- return err
- }
- parentSchemaName, err := lookupFn.getSchemaNameByID(parentTable.GetParentSchemaID())
- if err != nil {
- return err
- }
- parentDatabase, err := lookupFn.getDatabaseByID(parentTable.GetParentID())
- if err != nil {
- return err
- }
-
- if err := addRow(tree.NewDString(db.GetName()),
- tree.NewDString(schemaName),
- tree.NewDString(table.GetName()),
- tree.NewDString(index.GetName()),
- tree.NewDString(parentDatabase.GetName()),
- tree.NewDString(parentSchemaName),
- tree.NewDString(parentTable.GetName())); err != nil {
- return err
- }
- }
- return nil
- })
- },
-}
-
var crdbInternalCrossDbReferences = virtualSchemaTable{
comment: `virtual table with cross db references`,
schema: `
diff --git a/pkg/sql/create_index.go b/pkg/sql/create_index.go
index 57bc03d2812f..11240f1922e8 100644
--- a/pkg/sql/create_index.go
+++ b/pkg/sql/create_index.go
@@ -13,7 +13,6 @@ package sql
import (
"context"
- "github.com/cockroachdb/cockroach/pkg/build"
"github.com/cockroachdb/cockroach/pkg/clusterversion"
"github.com/cockroachdb/cockroach/pkg/docs"
"github.com/cockroachdb/cockroach/pkg/geo/geoindex"
@@ -66,10 +65,6 @@ func (p *planner) CreateIndex(ctx context.Context, n *tree.CreateIndex) (planNod
}
if tableDesc.MaterializedView() {
- if n.Interleave != nil {
- return nil, pgerror.New(pgcode.InvalidObjectDefinition,
- "cannot create interleaved index on materialized view")
- }
if n.Sharded != nil {
return nil, pgerror.New(pgcode.InvalidObjectDefinition,
"cannot create hash sharded index on materialized view")
@@ -205,10 +200,6 @@ func MakeIndexDescriptor(
}
if n.Inverted {
- if n.Interleave != nil {
- return nil, pgerror.New(pgcode.InvalidSQLStatementName, "inverted indexes don't support interleaved tables")
- }
-
if n.Sharded != nil {
return nil, pgerror.New(pgcode.InvalidSQLStatementName, "inverted indexes don't support hash sharding")
}
@@ -245,9 +236,6 @@ func MakeIndexDescriptor(
if tableDesc.IsLocalityRegionalByRow() {
return nil, hashShardedIndexesOnRegionalByRowError()
}
- if n.Interleave != nil {
- return nil, pgerror.New(pgcode.FeatureNotSupported, "interleaved indexes cannot also be hash sharded")
- }
shardCol, newColumns, newColumn, err := setupShardedIndex(
params.ctx,
params.EvalContext(),
@@ -601,35 +589,6 @@ func maybeCreateAndAddShardCol(
return shardCol, created, err
}
-var interleavedTableDeprecationError = errors.WithIssueLink(
- pgnotice.Newf("interleaved tables and interleaved indexes are deprecated in 20.2 and will be removed in 21.2"),
- errors.IssueLink{IssueURL: build.MakeIssueURL(52009)},
-)
-
-var interleavedTableDisabledMigrationError = pgnotice.Newf(
- "creation of new interleaved tables or interleaved indexes is no longer supported and will be ignored." +
- " For details, see https://www.cockroachlabs.com/docs/releases/v20.2.0#deprecations")
-
-// interleavedTableDeprecationAction either returns an error, if interleaved
-// tables are disabled, or sends a notice, if they're not. Returns any error
-// and if the interleaved option should be ignored.
-func interleavedTableDeprecationAction(params runParams) (ignoreInterleave bool, err error) {
- // Once interleave tables should be prevented, we should
- // return a client notice and ignore opeartions.
- if params.ExecCfg().Settings.Version.IsActive(params.ctx, clusterversion.PreventNewInterleavedTables) {
- params.p.BufferClientNotice(
- params.ctx,
- interleavedTableDisabledMigrationError,
- )
- return true, nil
- }
- params.p.BufferClientNotice(
- params.ctx,
- interleavedTableDeprecationError,
- )
- return false, nil
-}
-
func (n *createIndexNode) startExec(params runParams) error {
telemetry.Inc(sqltelemetry.SchemaChangeCreateCounter("index"))
foundIndex, err := n.tableDesc.FindIndexWithName(string(n.n.Name))
@@ -666,20 +625,6 @@ func (n *createIndexNode) startExec(params runParams) error {
)
}
- if n.n.Interleave != nil {
- if n.n.PartitionByIndex != nil {
- return pgerror.New(pgcode.FeatureNotSupported, "interleaved indexes cannot be partitioned")
- }
-
- interleaveIgnored, err := interleavedTableDeprecationAction(params)
- if err != nil {
- return err
- }
- if interleaveIgnored {
- n.n.Interleave = nil
- }
- }
-
indexDesc, err := MakeIndexDescriptor(params, *n.n, n.tableDesc)
if err != nil {
return err
@@ -733,15 +678,6 @@ func (n *createIndexNode) startExec(params runParams) error {
index := n.tableDesc.Mutations[mutationIdx].GetIndex()
indexName := index.Name
- if n.n.Interleave != nil {
- if err := params.p.addInterleave(params.ctx, n.tableDesc, index, n.n.Interleave); err != nil {
- return err
- }
- if err := params.p.finalizeInterleave(params.ctx, n.tableDesc, index); err != nil {
- return err
- }
- }
-
mutationID := n.tableDesc.ClusterVersion.NextMutationID
if err := params.p.writeSchemaChange(
params.ctx, n.tableDesc, mutationID, tree.AsStringWithFQNames(n.n, params.Ann()),
diff --git a/pkg/sql/create_table.go b/pkg/sql/create_table.go
index 90d8f741551e..f566b2a90957 100644
--- a/pkg/sql/create_table.go
+++ b/pkg/sql/create_table.go
@@ -290,16 +290,6 @@ func (n *createTableNode) startExec(params runParams) error {
}
return err
}
- if n.n.Interleave != nil {
- telemetry.Inc(sqltelemetry.CreateInterleavedTableCounter)
- interleaveIgnored, err := interleavedTableDeprecationAction(params)
- if err != nil {
- return err
- }
- if interleaveIgnored {
- n.n.Interleave = nil
- }
- }
if n.n.Persistence.IsTemporary() {
telemetry.Inc(sqltelemetry.CreateTempTableCounter)
@@ -429,14 +419,6 @@ func (n *createTableNode) startExec(params runParams) error {
}
}
- for _, index := range desc.NonDropIndexes() {
- if index.NumInterleaveAncestors() > 0 {
- if err := params.p.finalizeInterleave(params.ctx, desc, index.IndexDesc()); err != nil {
- return err
- }
- }
- }
-
// Install back references to types used by this table.
if err := params.p.addBackRefsFromAllTypesInTable(params.ctx, desc); err != nil {
return err
@@ -683,11 +665,6 @@ func addUniqueWithoutIndexTableDef(
"unique constraints without an index cannot store columns",
)
}
- if d.Interleave != nil {
- return pgerror.New(pgcode.FeatureNotSupported,
- "interleaved unique constraints without an index are not supported",
- )
- }
if d.PartitionByIndex.ContainsPartitions() {
return pgerror.New(pgcode.FeatureNotSupported,
"partitioned unique constraints without an index are not supported",
@@ -1048,168 +1025,6 @@ func ResolveFK(
return nil
}
-func (p *planner) addInterleave(
- ctx context.Context,
- desc *tabledesc.Mutable,
- index *descpb.IndexDescriptor,
- interleave *tree.InterleaveDef,
-) error {
- return addInterleave(ctx, p.txn, p, desc, index, interleave)
-}
-
-// addInterleave marks an index as one that is interleaved in some parent data
-// according to the given definition.
-func addInterleave(
- ctx context.Context,
- txn *kv.Txn,
- vt resolver.SchemaResolver,
- desc *tabledesc.Mutable,
- index *descpb.IndexDescriptor,
- interleave *tree.InterleaveDef,
-) error {
- if interleave.DropBehavior != tree.DropDefault {
- return unimplemented.NewWithIssuef(
- 7854, "unsupported shorthand %s", interleave.DropBehavior)
- }
-
- if desc.IsLocalityRegionalByRow() {
- return interleaveOnRegionalByRowError()
- }
-
- _, parentTable, err := resolver.ResolveExistingTableObject(
- ctx, vt, &interleave.Parent, tree.ObjectLookupFlagsWithRequiredTableKind(tree.ResolveRequireTableDesc),
- )
- if err != nil {
- return err
- }
- parentIndex := parentTable.GetPrimaryIndex()
-
- // typeOfIndex is used to give more informative error messages.
- var typeOfIndex string
- if index.ID == desc.GetPrimaryIndexID() {
- typeOfIndex = "primary key"
- } else {
- typeOfIndex = "index"
- }
-
- if len(interleave.Fields) != parentIndex.NumKeyColumns() {
- return pgerror.Newf(
- pgcode.InvalidSchemaDefinition,
- "declared interleaved columns (%s) must match the parent's primary index (%s)",
- &interleave.Fields,
- strings.Join(parentIndex.IndexDesc().KeyColumnNames, ", "),
- )
- }
- if len(interleave.Fields) > len(index.KeyColumnIDs) {
- return pgerror.Newf(
- pgcode.InvalidSchemaDefinition,
- "declared interleaved columns (%s) must be a prefix of the %s columns being interleaved (%s)",
- &interleave.Fields,
- typeOfIndex,
- strings.Join(index.KeyColumnNames, ", "),
- )
- }
-
- for i := 0; i < parentIndex.NumKeyColumns(); i++ {
- targetColID := parentIndex.GetKeyColumnID(i)
- targetCol, err := parentTable.FindColumnWithID(targetColID)
- if err != nil {
- return err
- }
- col, err := desc.FindColumnWithID(index.KeyColumnIDs[i])
- if err != nil {
- return err
- }
- if string(interleave.Fields[i]) != col.GetName() {
- return pgerror.Newf(
- pgcode.InvalidSchemaDefinition,
- "declared interleaved columns (%s) must refer to a prefix of the %s column names being interleaved (%s)",
- &interleave.Fields,
- typeOfIndex,
- strings.Join(index.KeyColumnNames, ", "),
- )
- }
- if !col.GetType().Identical(targetCol.GetType()) || index.KeyColumnDirections[i] != parentIndex.GetKeyColumnDirection(i) {
- return pgerror.Newf(
- pgcode.InvalidSchemaDefinition,
- "declared interleaved columns (%s) must match type and sort direction of the parent's primary index (%s)",
- &interleave.Fields,
- strings.Join(parentIndex.IndexDesc().KeyColumnNames, ", "),
- )
- }
- }
-
- ancestorPrefix := make([]descpb.InterleaveDescriptor_Ancestor, parentIndex.NumInterleaveAncestors())
- for i := range ancestorPrefix {
- ancestorPrefix[i] = parentIndex.GetInterleaveAncestor(i)
- }
-
- intl := descpb.InterleaveDescriptor_Ancestor{
- TableID: parentTable.GetID(),
- IndexID: parentIndex.GetID(),
- SharedPrefixLen: uint32(parentIndex.NumKeyColumns()),
- }
- for _, ancestor := range ancestorPrefix {
- intl.SharedPrefixLen -= ancestor.SharedPrefixLen
- }
- index.Interleave = descpb.InterleaveDescriptor{Ancestors: append(ancestorPrefix, intl)}
-
- desc.State = descpb.DescriptorState_ADD
- return nil
-}
-
-// finalizeInterleave creates backreferences from an interleaving parent to the
-// child data being interleaved.
-func (p *planner) finalizeInterleave(
- ctx context.Context, desc *tabledesc.Mutable, index *descpb.IndexDescriptor,
-) error {
- // TODO(dan): This is similar to finalizeFKs. Consolidate them
- if len(index.Interleave.Ancestors) == 0 {
- return nil
- }
- // Only the last ancestor needs the backreference.
- ancestor := index.Interleave.Ancestors[len(index.Interleave.Ancestors)-1]
- var ancestorTable *tabledesc.Mutable
- if ancestor.TableID == desc.ID {
- ancestorTable = desc
- } else {
- var err error
- ancestorTable, err = p.Descriptors().GetMutableTableVersionByID(ctx, ancestor.TableID, p.txn)
- if err != nil {
- return err
- }
- }
- ancestorIndex, err := ancestorTable.FindIndexWithID(ancestor.IndexID)
- if err != nil {
- return err
- }
- ancestorIndex.IndexDesc().InterleavedBy = append(ancestorIndex.IndexDesc().InterleavedBy,
- descpb.ForeignKeyReference{Table: desc.ID, Index: index.ID})
-
- if err := p.writeSchemaChange(
- ctx, ancestorTable, descpb.InvalidMutationID,
- fmt.Sprintf(
- "updating ancestor table %s(%d) for table %s(%d)",
- ancestorTable.Name, ancestorTable.ID, desc.Name, desc.ID,
- ),
- ); err != nil {
- return err
- }
-
- if desc.State == descpb.DescriptorState_ADD {
- desc.State = descpb.DescriptorState_PUBLIC
-
- // No job description, since this is presumably part of some larger schema change.
- if err := p.writeSchemaChange(
- ctx, desc, descpb.InvalidMutationID, "",
- ); err != nil {
- return err
- }
- }
-
- return nil
-}
-
// CreatePartitioning returns a set of implicit columns and a new partitioning
// descriptor to build an index with partitioning fields populated to align with
// the tree.PartitionBy clause.
@@ -1504,11 +1319,6 @@ func NewTableDesc(
regionalByRowCol = n.Locality.RegionalByRowColumn
}
- // Check no interleaving is on the table.
- if n.Interleave != nil {
- return nil, interleaveOnRegionalByRowError()
- }
-
// Check PARTITION BY is not set on anything partitionable, and also check
// for the existence of the column to partition by.
regionalByRowColExists := false
@@ -1666,9 +1476,6 @@ func NewTableDesc(
if n.PartitionByTable.ContainsPartitions() {
return nil, pgerror.New(pgcode.FeatureNotSupported, "sharded indexes don't support partitioning")
}
- if n.Interleave != nil {
- return nil, pgerror.New(pgcode.FeatureNotSupported, "interleaved indexes cannot also be hash sharded")
- }
buckets, err := tabledesc.EvalShardBucketCount(ctx, semaCtx, evalCtx, d.PrimaryKey.ShardBuckets)
if err != nil {
return nil, err
@@ -1873,9 +1680,6 @@ func NewTableDesc(
}
columns := d.Columns
if d.Sharded != nil {
- if d.Interleave != nil {
- return nil, pgerror.New(pgcode.FeatureNotSupported, "interleaved indexes cannot also be hash sharded")
- }
if isRegionalByRow {
return nil, hashShardedIndexesOnRegionalByRowError()
}
@@ -1957,9 +1761,6 @@ func NewTableDesc(
if err := desc.AddSecondaryIndex(idx); err != nil {
return nil, err
}
- if d.Interleave != nil {
- return nil, unimplemented.NewWithIssue(9148, "use CREATE INDEX to make interleaved indexes")
- }
case *tree.UniqueConstraintTableDef:
if d.WithoutIndex {
// We will add the unique constraint below.
@@ -1995,9 +1796,6 @@ func NewTableDesc(
}
columns := d.Columns
if d.Sharded != nil {
- if n.Interleave != nil && d.PrimaryKey {
- return nil, pgerror.New(pgcode.FeatureNotSupported, "interleaved indexes cannot also be hash sharded")
- }
if isRegionalByRow {
return nil, hashShardedIndexesOnRegionalByRowError()
}
@@ -2064,12 +1862,6 @@ func NewTableDesc(
if err := desc.AddPrimaryIndex(idx); err != nil {
return nil, err
}
- if d.Interleave != nil {
- return nil, unimplemented.NewWithIssue(
- 45710,
- "interleave not supported in primary key constraint definition",
- )
- }
for _, c := range columns {
primaryIndexColumnSet[string(c.Column)] = struct{}{}
}
@@ -2078,9 +1870,6 @@ func NewTableDesc(
return nil, err
}
}
- if d.Interleave != nil {
- return nil, unimplemented.NewWithIssue(9148, "use CREATE INDEX to make interleaved indexes")
- }
case *tree.CheckConstraintTableDef, *tree.ForeignKeyConstraintTableDef, *tree.FamilyTableDef:
// pass, handled below.
@@ -2146,12 +1935,6 @@ func NewTableDesc(
}
}
- if n.Interleave != nil {
- if err := addInterleave(ctx, txn, vt, &desc, desc.GetPrimaryIndex().IndexDesc(), n.Interleave); err != nil {
- return nil, err
- }
- }
-
if n.PartitionByTable.ContainsPartitions() || desc.PartitionAllBy {
partitionBy := partitionAllBy
if partitionBy == nil {
@@ -2453,9 +2236,8 @@ func newTableDesc(
regionConfig = &conf
}
- // We need to run NewTableDesc with caching disabled, because
- // it needs to pull in descriptors from FK depended-on tables
- // and interleaved parents using their current state in KV.
+ // We need to run NewTableDesc with caching disabled, because it needs to pull
+ // in descriptors from FK depended-on tables using their current state in KV.
// See the comment at the start of NewTableDesc() and ResolveFK().
params.p.runWithOptions(resolveFlags{skipCache: true, contextDatabaseID: db.GetID()}, func() {
ret, err = NewTableDesc(
@@ -2933,10 +2715,6 @@ func hashShardedIndexesOnRegionalByRowError() error {
return pgerror.New(pgcode.FeatureNotSupported, "hash sharded indexes are not compatible with REGIONAL BY ROW tables")
}
-func interleaveOnRegionalByRowError() error {
- return pgerror.New(pgcode.FeatureNotSupported, "interleaved tables are not compatible with REGIONAL BY ROW tables")
-}
-
func checkTypeIsSupported(ctx context.Context, settings *cluster.Settings, typ *types.T) error {
version := settings.Version.ActiveVersionOrEmpty(ctx)
if supported := types.IsTypeSupportedInVersion(version, typ); !supported {
diff --git a/pkg/sql/doctor/doctor_test.go b/pkg/sql/doctor/doctor_test.go
index 273949602da9..4100d9769757 100644
--- a/pkg/sql/doctor/doctor_test.go
+++ b/pkg/sql/doctor/doctor_test.go
@@ -453,10 +453,6 @@ func TestExamineDescriptors(t *testing.T) {
desc := protoutil.Clone(validTableDesc).(*descpb.Descriptor)
tbl, _, _, _ := descpb.FromDescriptor(desc)
tbl.PrimaryIndex.Disabled = true
- tbl.PrimaryIndex.InterleavedBy = make([]descpb.ForeignKeyReference, 1)
- tbl.PrimaryIndex.InterleavedBy[0].Name = "bad_backref"
- tbl.PrimaryIndex.InterleavedBy[0].Table = 500
- tbl.PrimaryIndex.InterleavedBy[0].Index = 1
return desc
}())},
{
@@ -471,7 +467,6 @@ func TestExamineDescriptors(t *testing.T) {
{NameInfo: descpb.NameInfo{Name: "db"}, ID: 52},
},
expected: `Examining 2 descriptors and 2 namespace entries...
- ParentID 52, ParentSchemaID 29: relation "t" (51): invalid interleave backreference table=500 index=1: referenced table ID 500: descriptor not found
ParentID 52, ParentSchemaID 29: relation "t" (51): unimplemented: primary key dropped without subsequent addition of new primary key in same transaction
`,
},
diff --git a/pkg/sql/drop_index.go b/pkg/sql/drop_index.go
index 512045b572ab..7bc64a0c351a 100644
--- a/pkg/sql/drop_index.go
+++ b/pkg/sql/drop_index.go
@@ -418,17 +418,6 @@ func (p *planner) dropIndexByName(
return err
}
- if idx.NumInterleaveAncestors() > 0 {
- if err := p.removeInterleaveBackReference(ctx, tableDesc, idx); err != nil {
- return err
- }
- }
- for i := 0; i < idx.NumInterleavedBy(); i++ {
- if err := p.removeInterleave(ctx, idx.GetInterleavedBy(i)); err != nil {
- return err
- }
- }
-
var droppedViews []string
for _, tableRef := range tableDesc.DependedOnBy {
if tableRef.IndexID == idx.GetID() {
diff --git a/pkg/sql/drop_table.go b/pkg/sql/drop_table.go
index ed4b49d2f00e..11a1a6cd68a3 100644
--- a/pkg/sql/drop_table.go
+++ b/pkg/sql/drop_table.go
@@ -31,7 +31,6 @@ import (
"github.com/cockroachdb/cockroach/pkg/sql/sem/tree"
"github.com/cockroachdb/cockroach/pkg/sql/sessiondata"
"github.com/cockroachdb/cockroach/pkg/sql/sqltelemetry"
- "github.com/cockroachdb/cockroach/pkg/util/errorutil/unimplemented"
"github.com/cockroachdb/cockroach/pkg/util/log"
"github.com/cockroachdb/cockroach/pkg/util/log/eventpb"
"github.com/cockroachdb/cockroach/pkg/util/timeutil"
@@ -87,16 +86,6 @@ func (p *planner) DropTable(ctx context.Context, n *tree.DropTable) (planNode, e
}
}
}
- for _, idx := range droppedDesc.NonDropIndexes() {
- for i := 0; i < idx.NumInterleavedBy(); i++ {
- ref := idx.GetInterleavedBy(i)
- if _, ok := td[ref.Table]; !ok {
- if err := p.canRemoveInterleave(ctx, droppedDesc.Name, ref, n.DropBehavior); err != nil {
- return nil, err
- }
- }
- }
- }
for _, ref := range droppedDesc.DependedOnBy {
if _, ok := td[ref.ID]; !ok {
if err := p.canRemoveDependentView(ctx, droppedDesc, ref, n.DropBehavior); err != nil {
@@ -231,44 +220,6 @@ func (p *planner) canRemoveFKBackreference(
return p.CheckPrivilege(ctx, table, privilege.CREATE)
}
-func (p *planner) canRemoveInterleave(
- ctx context.Context, from string, ref descpb.ForeignKeyReference, behavior tree.DropBehavior,
-) error {
- table, err := p.Descriptors().GetMutableTableVersionByID(ctx, ref.Table, p.txn)
- if err != nil {
- return err
- }
- // TODO(dan): It's possible to DROP a table that has a child interleave, but
- // some loose ends would have to be addressed. The zone would have to be
- // kept and deleted when the last table in it is removed. Also, the dropped
- // table's descriptor would have to be kept around in some Dropped but
- // non-public state for referential integrity of the `InterleaveDescriptor`
- // pointers.
- if behavior != tree.DropCascade {
- return unimplemented.NewWithIssuef(
- 8036, "%q is interleaved by table %q", from, table.Name)
- }
- return p.CheckPrivilege(ctx, table, privilege.CREATE)
-}
-
-func (p *planner) removeInterleave(ctx context.Context, ref descpb.ForeignKeyReference) error {
- table, err := p.Descriptors().GetMutableTableVersionByID(ctx, ref.Table, p.txn)
- if err != nil {
- return err
- }
- if table.Dropped() {
- // The referenced table is being dropped. No need to modify it further.
- return nil
- }
- idx, err := table.FindIndexWithID(ref.Index)
- if err != nil {
- return err
- }
- idx.IndexDesc().Interleave.Ancestors = nil
- // No job description, since this is presumably part of some larger schema change.
- return p.writeSchemaChange(ctx, table, descpb.InvalidMutationID, "")
-}
-
// dropTableImpl does the work of dropping a table (and everything that depends
// on it if `cascade` is enabled). It returns a list of view names that were
// dropped due to `cascade` behavior. droppingParent indicates whether this
@@ -306,21 +257,6 @@ func (p *planner) dropTableImpl(
}
tableDesc.InboundFKs = nil
- // Remove interleave relationships.
- for _, idx := range tableDesc.NonDropIndexes() {
- if idx.NumInterleaveAncestors() > 0 {
- if err := p.removeInterleaveBackReference(ctx, tableDesc, idx); err != nil {
- return droppedViews, err
- }
- }
- for i := 0; i < idx.NumInterleavedBy(); i++ {
- ref := idx.GetInterleavedBy(i)
- if err := p.removeInterleave(ctx, ref); err != nil {
- return droppedViews, err
- }
- }
- }
-
// Remove sequence dependencies.
for _, col := range tableDesc.PublicColumns() {
if err := p.removeSequenceDependencies(ctx, tableDesc, col); err != nil {
@@ -439,15 +375,9 @@ func (p *planner) initiateDropTable(
)
}
- // If the table is not interleaved , use the delayed GC mechanism to
- // schedule usage of the more efficient ClearRange pathway. ClearRange will
- // only work if the entire hierarchy of interleaved tables are dropped at
- // once, as with ON DELETE CASCADE where the top-level "root" table is
- // dropped.
- //
- // TODO(bram): If interleaved and ON DELETE CASCADE, we will be able to use
- // this faster mechanism.
- if tableDesc.IsTable() && !tableDesc.IsInterleaved() {
+ // Use the delayed GC mechanism to schedule usage of the more efficient
+ // ClearRange pathway.
+ if tableDesc.IsTable() {
tableDesc.DropTime = timeutil.Now().UnixNano()
}
@@ -664,54 +594,6 @@ func removeFKBackReferenceFromTable(
return nil
}
-func (p *planner) removeInterleaveBackReference(
- ctx context.Context, tableDesc *tabledesc.Mutable, idx catalog.Index,
-) error {
- if idx.NumInterleaveAncestors() == 0 {
- return nil
- }
- ancestor := idx.GetInterleaveAncestor(idx.NumInterleaveAncestors() - 1)
- var t *tabledesc.Mutable
- if ancestor.TableID == tableDesc.ID {
- t = tableDesc
- } else {
- lookup, err := p.Descriptors().GetMutableTableVersionByID(ctx, ancestor.TableID, p.txn)
- if err != nil {
- return errors.Wrapf(err, "error resolving referenced table ID %d", ancestor.TableID)
- }
- t = lookup
- }
- if t.Dropped() {
- // The referenced table is being dropped. No need to modify it further.
- return nil
- }
- targetIdxI, err := t.FindIndexWithID(ancestor.IndexID)
- if err != nil {
- return err
- }
- targetIdx := targetIdxI.IndexDesc()
- foundAncestor := false
- for k, ref := range targetIdx.InterleavedBy {
- if ref.Table == tableDesc.ID && ref.Index == idx.GetID() {
- if foundAncestor {
- return errors.AssertionFailedf(
- "ancestor entry in %s for %s@%s found more than once", t.Name, tableDesc.Name, idx.GetName())
- }
- targetIdx.InterleavedBy = append(targetIdx.InterleavedBy[:k], targetIdx.InterleavedBy[k+1:]...)
- foundAncestor = true
- }
- }
- if t != tableDesc {
- return p.writeSchemaChange(
- ctx, t, descpb.InvalidMutationID,
- fmt.Sprintf("removing reference for interleaved table %s(%d)",
- t.Name, t.ID,
- ),
- )
- }
- return nil
-}
-
// removeMatchingReferences removes all refs from the provided slice that
// match the provided ID, returning the modified slice.
func removeMatchingReferences(
diff --git a/pkg/sql/exec_util.go b/pkg/sql/exec_util.go
index f5b659ef981a..b99b05a2e878 100644
--- a/pkg/sql/exec_util.go
+++ b/pkg/sql/exec_util.go
@@ -459,12 +459,6 @@ var experimentalComputedColumnRewrites = settings.RegisterValidatedStringSetting
},
)
-var copyPartitioningWhenDeinterleavingTable = settings.RegisterBoolSetting(
- `sql.defaults.copy_partitioning_when_deinterleaving_table.enabled`,
- `default value for enable_copying_partitioning_when_deinterleaving_table session variable`,
- false,
-).WithPublic()
-
var propagateInputOrdering = settings.RegisterBoolSetting(
`sql.defaults.propagate_input_ordering.enabled`,
`default value for the experimental propagate_input_ordering session variable`,
@@ -2923,12 +2917,6 @@ func (m *sessionDataMutator) SetStubCatalogTablesEnabled(enabled bool) {
m.data.StubCatalogTablesEnabled = enabled
}
-// SetCopyPartitioningWhenDeinterleavingTable sets the value for
-// CopyPartitioningWhenDeinterleavingTable.
-func (m *sessionDataMutator) SetCopyPartitioningWhenDeinterleavingTable(b bool) {
- m.data.CopyPartitioningWhenDeinterleavingTable = b
-}
-
func (m *sessionDataMutator) SetExperimentalComputedColumnRewrites(val string) {
m.data.ExperimentalComputedColumnRewrites = val
}
diff --git a/pkg/sql/gcjob/BUILD.bazel b/pkg/sql/gcjob/BUILD.bazel
index 0c89a304d3f4..3f3dd969ba23 100644
--- a/pkg/sql/gcjob/BUILD.bazel
+++ b/pkg/sql/gcjob/BUILD.bazel
@@ -31,7 +31,6 @@ go_library(
"//pkg/sql/catalog/catalogkv",
"//pkg/sql/catalog/descpb",
"//pkg/sql/catalog/descs",
- "//pkg/sql/catalog/tabledesc",
"//pkg/sql/pgwire/pgcode",
"//pkg/sql/pgwire/pgerror",
"//pkg/sql/sem/tree",
diff --git a/pkg/sql/gcjob/gc_job.go b/pkg/sql/gcjob/gc_job.go
index 8589234319c0..bfb62c3bfd8d 100644
--- a/pkg/sql/gcjob/gc_job.go
+++ b/pkg/sql/gcjob/gc_job.go
@@ -20,7 +20,6 @@ import (
"github.com/cockroachdb/cockroach/pkg/settings/cluster"
"github.com/cockroachdb/cockroach/pkg/sql"
"github.com/cockroachdb/cockroach/pkg/sql/catalog/descpb"
- "github.com/cockroachdb/cockroach/pkg/sql/catalog/tabledesc"
"github.com/cockroachdb/cockroach/pkg/util/log"
"github.com/cockroachdb/cockroach/pkg/util/timeutil"
"github.com/cockroachdb/errors"
@@ -105,29 +104,6 @@ func (r schemaChangeGCResumer) Resume(ctx context.Context, execCtx interface{})
return err
}
- // If there are any interleaved indexes to drop as part of a table TRUNCATE
- // operation, then drop the indexes before waiting on the GC timer.
- if len(details.InterleavedIndexes) > 0 {
- // Before deleting any indexes, ensure that old versions of the table
- // descriptor are no longer in use.
- _, err := sql.WaitToUpdateLeases(ctx, execCfg.LeaseManager, details.InterleavedTable.ID)
- if err != nil {
- return err
- }
- interleavedIndexIDs := make([]descpb.IndexID, len(details.InterleavedIndexes))
- for i := range details.InterleavedIndexes {
- interleavedIndexIDs[i] = details.InterleavedIndexes[i].ID
- }
- if err := sql.TruncateInterleavedIndexes(
- ctx,
- execCfg,
- tabledesc.NewBuilder(details.InterleavedTable).BuildImmutableTable(),
- interleavedIndexIDs,
- ); err != nil {
- return err
- }
- }
-
tableDropTimes, indexDropTimes := getDropTimes(details)
timer := timeutil.NewTimer()
diff --git a/pkg/sql/gcjob/table_garbage_collection.go b/pkg/sql/gcjob/table_garbage_collection.go
index 410da3c5073f..ffb8b163cce1 100644
--- a/pkg/sql/gcjob/table_garbage_collection.go
+++ b/pkg/sql/gcjob/table_garbage_collection.go
@@ -94,10 +94,7 @@ func ClearTableData(
) error {
// If DropTime isn't set, assume this drop request is from a version
// 1.1 server and invoke legacy code that uses DeleteRange and range GC.
- // TODO(pbardea): Note that we never set the drop time for interleaved tables,
- // but this check was added to be more explicit about it. This should get
- // cleaned up.
- if table.GetDropTime() == 0 || table.IsInterleaved() {
+ if table.GetDropTime() == 0 {
log.Infof(ctx, "clearing data in chunks for table %d", table.GetID())
return sql.ClearTableDataInChunks(ctx, db, codec, sv, table, false /* traceKV */)
}
diff --git a/pkg/sql/logictest/testdata/logic_test/crdb_internal b/pkg/sql/logictest/testdata/logic_test/crdb_internal
index ef1e721a02b1..e6400c8798c4 100644
--- a/pkg/sql/logictest/testdata/logic_test/crdb_internal
+++ b/pkg/sql/logictest/testdata/logic_test/crdb_internal
@@ -42,7 +42,6 @@ crdb_internal gossip_network table NULL NULL NULL
crdb_internal gossip_nodes table NULL NULL NULL
crdb_internal index_columns table NULL NULL NULL
crdb_internal index_usage_statistics table NULL NULL NULL
-crdb_internal interleaved table NULL NULL NULL
crdb_internal invalid_objects table NULL NULL NULL
crdb_internal jobs table NULL NULL NULL
crdb_internal kv_node_liveness table NULL NULL NULL
diff --git a/pkg/sql/logictest/testdata/logic_test/crdb_internal_tenant b/pkg/sql/logictest/testdata/logic_test/crdb_internal_tenant
index b3666fe59f7f..70f8555455e5 100644
--- a/pkg/sql/logictest/testdata/logic_test/crdb_internal_tenant
+++ b/pkg/sql/logictest/testdata/logic_test/crdb_internal_tenant
@@ -59,7 +59,6 @@ crdb_internal gossip_network table NULL NULL NULL
crdb_internal gossip_nodes table NULL NULL NULL
crdb_internal index_columns table NULL NULL NULL
crdb_internal index_usage_statistics table NULL NULL NULL
-crdb_internal interleaved table NULL NULL NULL
crdb_internal invalid_objects table NULL NULL NULL
crdb_internal jobs table NULL NULL NULL
crdb_internal kv_node_liveness table NULL NULL NULL
diff --git a/pkg/sql/logictest/testdata/logic_test/create_statements b/pkg/sql/logictest/testdata/logic_test/create_statements
index 8ed6d493c197..642d6fa8f9b1 100644
--- a/pkg/sql/logictest/testdata/logic_test/create_statements
+++ b/pkg/sql/logictest/testdata/logic_test/create_statements
@@ -482,23 +482,6 @@ CREATE TABLE crdb_internal.index_usage_statistics (
total_reads INT8 NOT NULL,
last_read TIMESTAMPTZ NULL
) {} {}
-CREATE TABLE crdb_internal.interleaved (
- database_name STRING NOT NULL,
- schema_name STRING NOT NULL,
- table_name STRING NOT NULL,
- index_name STRING NOT NULL,
- parent_database_name STRING NOT NULL,
- parent_schema_name STRING NOT NULL,
- parent_table_name STRING NOT NULL
-) CREATE TABLE crdb_internal.interleaved (
- database_name STRING NOT NULL,
- schema_name STRING NOT NULL,
- table_name STRING NOT NULL,
- index_name STRING NOT NULL,
- parent_database_name STRING NOT NULL,
- parent_schema_name STRING NOT NULL,
- parent_table_name STRING NOT NULL
-) {} {}
CREATE TABLE crdb_internal.invalid_objects (
id INT8 NULL,
database_name STRING NULL,
diff --git a/pkg/sql/logictest/testdata/logic_test/create_table b/pkg/sql/logictest/testdata/logic_test/create_table
index 9baa725b60df..999420fa4474 100644
--- a/pkg/sql/logictest/testdata/logic_test/create_table
+++ b/pkg/sql/logictest/testdata/logic_test/create_table
@@ -441,9 +441,6 @@ CREATE TABLE error (a INT CHECK (a > 5), CONSTRAINT check_a CHECK (a > 5))
statement error pgcode 0A000 unique constraints without an index cannot store columns
CREATE TABLE error (a INT, b INT, UNIQUE WITHOUT INDEX (a) STORING (b))
-statement error pgcode 0A000 interleaved unique constraints without an index are not supported
-CREATE TABLE error (a INT, b INT, UNIQUE WITHOUT INDEX (a) INTERLEAVE IN PARENT foo (b))
-
statement error pgcode 0A000 partitioned unique constraints without an index are not supported
CREATE TABLE error (a INT, b INT, UNIQUE WITHOUT INDEX (a) PARTITION BY LIST (b) (
PARTITION p1 VALUES IN (1)
diff --git a/pkg/sql/logictest/testdata/logic_test/grant_table b/pkg/sql/logictest/testdata/logic_test/grant_table
index 58d68b055d07..7d57f6406aec 100644
--- a/pkg/sql/logictest/testdata/logic_test/grant_table
+++ b/pkg/sql/logictest/testdata/logic_test/grant_table
@@ -54,7 +54,6 @@ test crdb_internal gossip_network public
test crdb_internal gossip_nodes public SELECT
test crdb_internal index_columns public SELECT
test crdb_internal index_usage_statistics public SELECT
-test crdb_internal interleaved public SELECT
test crdb_internal invalid_objects public SELECT
test crdb_internal jobs public SELECT
test crdb_internal kv_node_liveness public SELECT
diff --git a/pkg/sql/logictest/testdata/logic_test/information_schema b/pkg/sql/logictest/testdata/logic_test/information_schema
index 6dc765c47a9e..88d678e7e1f5 100644
--- a/pkg/sql/logictest/testdata/logic_test/information_schema
+++ b/pkg/sql/logictest/testdata/logic_test/information_schema
@@ -424,7 +424,6 @@ crdb_internal gossip_network
crdb_internal gossip_nodes
crdb_internal index_columns
crdb_internal index_usage_statistics
-crdb_internal interleaved
crdb_internal invalid_objects
crdb_internal jobs
crdb_internal kv_node_liveness
@@ -741,7 +740,6 @@ gossip_network
gossip_nodes
index_columns
index_usage_statistics
-interleaved
invalid_objects
jobs
kv_node_liveness
@@ -1095,7 +1093,6 @@ system crdb_internal gossip_network SYSTEM
system crdb_internal gossip_nodes SYSTEM VIEW NO 1
system crdb_internal index_columns SYSTEM VIEW NO 1
system crdb_internal index_usage_statistics SYSTEM VIEW NO 1
-system crdb_internal interleaved SYSTEM VIEW NO 1
system crdb_internal invalid_objects SYSTEM VIEW NO 1
system crdb_internal jobs SYSTEM VIEW NO 1
system crdb_internal kv_node_liveness SYSTEM VIEW NO 1
@@ -2664,7 +2661,6 @@ NULL public system crdb_internal gossip_network
NULL public system crdb_internal gossip_nodes SELECT NULL YES
NULL public system crdb_internal index_columns SELECT NULL YES
NULL public system crdb_internal index_usage_statistics SELECT NULL YES
-NULL public system crdb_internal interleaved SELECT NULL YES
NULL public system crdb_internal invalid_objects SELECT NULL YES
NULL public system crdb_internal jobs SELECT NULL YES
NULL public system crdb_internal kv_node_liveness SELECT NULL YES
@@ -3270,7 +3266,6 @@ NULL public system crdb_internal gossip_network
NULL public system crdb_internal gossip_nodes SELECT NULL YES
NULL public system crdb_internal index_columns SELECT NULL YES
NULL public system crdb_internal index_usage_statistics SELECT NULL YES
-NULL public system crdb_internal interleaved SELECT NULL YES
NULL public system crdb_internal invalid_objects SELECT NULL YES
NULL public system crdb_internal jobs SELECT NULL YES
NULL public system crdb_internal kv_node_liveness SELECT NULL YES
@@ -4628,7 +4623,6 @@ disable_partially_distributed_plans off
disable_plan_gists off
disallow_full_table_scans off
distsql_workmem 64 MiB
-enable_copying_partitioning_when_deinterleaving_table off
enable_drop_enum_value on
enable_experimental_alter_column_type_general off
enable_experimental_stream_replication off
diff --git a/pkg/sql/logictest/testdata/logic_test/pg_builtins b/pkg/sql/logictest/testdata/logic_test/pg_builtins
index b7a9fd3917d3..a65f0905e32a 100644
--- a/pkg/sql/logictest/testdata/logic_test/pg_builtins
+++ b/pkg/sql/logictest/testdata/logic_test/pg_builtins
@@ -177,42 +177,42 @@ is_updatable b 66 2 28
is_updatable c 66 3 28 false
is_updatable_view a 67 1 0 false
is_updatable_view b 67 2 0 false
-pg_class oid 4294967131 1 0 false
-pg_class relname 4294967131 2 0 false
-pg_class relnamespace 4294967131 3 0 false
-pg_class reltype 4294967131 4 0 false
-pg_class reloftype 4294967131 5 0 false
-pg_class relowner 4294967131 6 0 false
-pg_class relam 4294967131 7 0 false
-pg_class relfilenode 4294967131 8 0 false
-pg_class reltablespace 4294967131 9 0 false
-pg_class relpages 4294967131 10 0 false
-pg_class reltuples 4294967131 11 0 false
-pg_class relallvisible 4294967131 12 0 false
-pg_class reltoastrelid 4294967131 13 0 false
-pg_class relhasindex 4294967131 14 0 false
-pg_class relisshared 4294967131 15 0 false
-pg_class relpersistence 4294967131 16 0 false
-pg_class relistemp 4294967131 17 0 false
-pg_class relkind 4294967131 18 0 false
-pg_class relnatts 4294967131 19 0 false
-pg_class relchecks 4294967131 20 0 false
-pg_class relhasoids 4294967131 21 0 false
-pg_class relhaspkey 4294967131 22 0 false
-pg_class relhasrules 4294967131 23 0 false
-pg_class relhastriggers 4294967131 24 0 false
-pg_class relhassubclass 4294967131 25 0 false
-pg_class relfrozenxid 4294967131 26 0 false
-pg_class relacl 4294967131 27 0 false
-pg_class reloptions 4294967131 28 0 false
-pg_class relforcerowsecurity 4294967131 29 0 false
-pg_class relispartition 4294967131 30 0 false
-pg_class relispopulated 4294967131 31 0 false
-pg_class relreplident 4294967131 32 0 false
-pg_class relrewrite 4294967131 33 0 false
-pg_class relrowsecurity 4294967131 34 0 false
-pg_class relpartbound 4294967131 35 0 false
-pg_class relminmxid 4294967131 36 0 false
+pg_class oid 4294967132 1 0 false
+pg_class relname 4294967132 2 0 false
+pg_class relnamespace 4294967132 3 0 false
+pg_class reltype 4294967132 4 0 false
+pg_class reloftype 4294967132 5 0 false
+pg_class relowner 4294967132 6 0 false
+pg_class relam 4294967132 7 0 false
+pg_class relfilenode 4294967132 8 0 false
+pg_class reltablespace 4294967132 9 0 false
+pg_class relpages 4294967132 10 0 false
+pg_class reltuples 4294967132 11 0 false
+pg_class relallvisible 4294967132 12 0 false
+pg_class reltoastrelid 4294967132 13 0 false
+pg_class relhasindex 4294967132 14 0 false
+pg_class relisshared 4294967132 15 0 false
+pg_class relpersistence 4294967132 16 0 false
+pg_class relistemp 4294967132 17 0 false
+pg_class relkind 4294967132 18 0 false
+pg_class relnatts 4294967132 19 0 false
+pg_class relchecks 4294967132 20 0 false
+pg_class relhasoids 4294967132 21 0 false
+pg_class relhaspkey 4294967132 22 0 false
+pg_class relhasrules 4294967132 23 0 false
+pg_class relhastriggers 4294967132 24 0 false
+pg_class relhassubclass 4294967132 25 0 false
+pg_class relfrozenxid 4294967132 26 0 false
+pg_class relacl 4294967132 27 0 false
+pg_class reloptions 4294967132 28 0 false
+pg_class relforcerowsecurity 4294967132 29 0 false
+pg_class relispartition 4294967132 30 0 false
+pg_class relispopulated 4294967132 31 0 false
+pg_class relreplident 4294967132 32 0 false
+pg_class relrewrite 4294967132 33 0 false
+pg_class relrowsecurity 4294967132 34 0 false
+pg_class relpartbound 4294967132 35 0 false
+pg_class relminmxid 4294967132 36 0 false
# Check that the oid does not exist. If this test fail, change the oid here and in
# the next test at 'relation does not exist' value.
diff --git a/pkg/sql/logictest/testdata/logic_test/pg_catalog b/pkg/sql/logictest/testdata/logic_test/pg_catalog
index df5977c1f562..63089815bcf3 100644
--- a/pkg/sql/logictest/testdata/logic_test/pg_catalog
+++ b/pkg/sql/logictest/testdata/logic_test/pg_catalog
@@ -1408,14 +1408,14 @@ FROM pg_catalog.pg_depend
ORDER BY objid
----
classid objid objsubid refclassid refobjid refobjsubid deptype
-4294967128 109163875 0 4294967131 450499960 0 n
-4294967128 1329876328 0 4294967131 0 0 n
-4294967128 1652586190 0 4294967131 450499961 0 n
-4294967128 2093076183 0 4294967131 0 0 n
-4294967085 4079785833 0 4294967131 55 3 n
-4294967085 4079785833 0 4294967131 55 4 n
-4294967085 4079785833 0 4294967131 55 1 n
-4294967085 4079785833 0 4294967131 55 2 n
+4294967129 109163875 0 4294967132 450499960 0 n
+4294967129 1329876328 0 4294967132 0 0 n
+4294967129 1652586190 0 4294967132 450499961 0 n
+4294967129 2093076183 0 4294967132 0 0 n
+4294967086 4079785833 0 4294967132 55 3 n
+4294967086 4079785833 0 4294967132 55 4 n
+4294967086 4079785833 0 4294967132 55 1 n
+4294967086 4079785833 0 4294967132 55 2 n
# Some entries in pg_depend are dependency links from the pg_constraint system
# table to the pg_class system table. Other entries are links to pg_class when it is
@@ -1428,8 +1428,8 @@ JOIN pg_class cla ON classid=cla.oid
JOIN pg_class refcla ON refclassid=refcla.oid
----
classid refclassid tablename reftablename
-4294967085 4294967131 pg_rewrite pg_class
-4294967128 4294967131 pg_constraint pg_class
+4294967086 4294967132 pg_rewrite pg_class
+4294967129 4294967132 pg_constraint pg_class
# Some entries in pg_depend are foreign key constraints that reference an index
# in pg_class. Other entries are table-view dependencies
@@ -1621,232 +1621,231 @@ oid typname typnamespace typowner typ
100076 _newtype1 2332901747 1546506610 -1 false b
100077 newtype2 2332901747 1546506610 -1 false e
100078 _newtype2 2332901747 1546506610 -1 false b
-4294967010 spatial_ref_sys 3553698885 3233629770 -1 false c
-4294967011 geometry_columns 3553698885 3233629770 -1 false c
-4294967012 geography_columns 3553698885 3233629770 -1 false c
-4294967014 pg_views 1307062959 3233629770 -1 false c
-4294967015 pg_user 1307062959 3233629770 -1 false c
-4294967016 pg_user_mappings 1307062959 3233629770 -1 false c
-4294967017 pg_user_mapping 1307062959 3233629770 -1 false c
-4294967018 pg_type 1307062959 3233629770 -1 false c
-4294967019 pg_ts_template 1307062959 3233629770 -1 false c
-4294967020 pg_ts_parser 1307062959 3233629770 -1 false c
-4294967021 pg_ts_dict 1307062959 3233629770 -1 false c
-4294967022 pg_ts_config 1307062959 3233629770 -1 false c
-4294967023 pg_ts_config_map 1307062959 3233629770 -1 false c
-4294967024 pg_trigger 1307062959 3233629770 -1 false c
-4294967025 pg_transform 1307062959 3233629770 -1 false c
-4294967026 pg_timezone_names 1307062959 3233629770 -1 false c
-4294967027 pg_timezone_abbrevs 1307062959 3233629770 -1 false c
-4294967028 pg_tablespace 1307062959 3233629770 -1 false c
-4294967029 pg_tables 1307062959 3233629770 -1 false c
-4294967030 pg_subscription 1307062959 3233629770 -1 false c
-4294967031 pg_subscription_rel 1307062959 3233629770 -1 false c
-4294967032 pg_stats 1307062959 3233629770 -1 false c
-4294967033 pg_stats_ext 1307062959 3233629770 -1 false c
-4294967034 pg_statistic 1307062959 3233629770 -1 false c
-4294967035 pg_statistic_ext 1307062959 3233629770 -1 false c
-4294967036 pg_statistic_ext_data 1307062959 3233629770 -1 false c
-4294967037 pg_statio_user_tables 1307062959 3233629770 -1 false c
-4294967038 pg_statio_user_sequences 1307062959 3233629770 -1 false c
-4294967039 pg_statio_user_indexes 1307062959 3233629770 -1 false c
-4294967040 pg_statio_sys_tables 1307062959 3233629770 -1 false c
-4294967041 pg_statio_sys_sequences 1307062959 3233629770 -1 false c
-4294967042 pg_statio_sys_indexes 1307062959 3233629770 -1 false c
-4294967043 pg_statio_all_tables 1307062959 3233629770 -1 false c
-4294967044 pg_statio_all_sequences 1307062959 3233629770 -1 false c
-4294967045 pg_statio_all_indexes 1307062959 3233629770 -1 false c
-4294967046 pg_stat_xact_user_tables 1307062959 3233629770 -1 false c
-4294967047 pg_stat_xact_user_functions 1307062959 3233629770 -1 false c
-4294967048 pg_stat_xact_sys_tables 1307062959 3233629770 -1 false c
-4294967049 pg_stat_xact_all_tables 1307062959 3233629770 -1 false c
-4294967050 pg_stat_wal_receiver 1307062959 3233629770 -1 false c
-4294967051 pg_stat_user_tables 1307062959 3233629770 -1 false c
-4294967052 pg_stat_user_indexes 1307062959 3233629770 -1 false c
-4294967053 pg_stat_user_functions 1307062959 3233629770 -1 false c
-4294967054 pg_stat_sys_tables 1307062959 3233629770 -1 false c
-4294967055 pg_stat_sys_indexes 1307062959 3233629770 -1 false c
-4294967056 pg_stat_subscription 1307062959 3233629770 -1 false c
-4294967057 pg_stat_ssl 1307062959 3233629770 -1 false c
-4294967058 pg_stat_slru 1307062959 3233629770 -1 false c
-4294967059 pg_stat_replication 1307062959 3233629770 -1 false c
-4294967060 pg_stat_progress_vacuum 1307062959 3233629770 -1 false c
-4294967061 pg_stat_progress_create_index 1307062959 3233629770 -1 false c
-4294967062 pg_stat_progress_cluster 1307062959 3233629770 -1 false c
-4294967063 pg_stat_progress_basebackup 1307062959 3233629770 -1 false c
-4294967064 pg_stat_progress_analyze 1307062959 3233629770 -1 false c
-4294967065 pg_stat_gssapi 1307062959 3233629770 -1 false c
-4294967066 pg_stat_database 1307062959 3233629770 -1 false c
-4294967067 pg_stat_database_conflicts 1307062959 3233629770 -1 false c
-4294967068 pg_stat_bgwriter 1307062959 3233629770 -1 false c
-4294967069 pg_stat_archiver 1307062959 3233629770 -1 false c
-4294967070 pg_stat_all_tables 1307062959 3233629770 -1 false c
-4294967071 pg_stat_all_indexes 1307062959 3233629770 -1 false c
-4294967072 pg_stat_activity 1307062959 3233629770 -1 false c
-4294967073 pg_shmem_allocations 1307062959 3233629770 -1 false c
-4294967074 pg_shdepend 1307062959 3233629770 -1 false c
-4294967075 pg_shseclabel 1307062959 3233629770 -1 false c
-4294967076 pg_shdescription 1307062959 3233629770 -1 false c
-4294967077 pg_shadow 1307062959 3233629770 -1 false c
-4294967078 pg_settings 1307062959 3233629770 -1 false c
-4294967079 pg_sequences 1307062959 3233629770 -1 false c
-4294967080 pg_sequence 1307062959 3233629770 -1 false c
-4294967081 pg_seclabel 1307062959 3233629770 -1 false c
-4294967082 pg_seclabels 1307062959 3233629770 -1 false c
-4294967083 pg_rules 1307062959 3233629770 -1 false c
-4294967084 pg_roles 1307062959 3233629770 -1 false c
-4294967085 pg_rewrite 1307062959 3233629770 -1 false c
-4294967086 pg_replication_slots 1307062959 3233629770 -1 false c
-4294967087 pg_replication_origin 1307062959 3233629770 -1 false c
-4294967088 pg_replication_origin_status 1307062959 3233629770 -1 false c
-4294967089 pg_range 1307062959 3233629770 -1 false c
-4294967090 pg_publication_tables 1307062959 3233629770 -1 false c
-4294967091 pg_publication 1307062959 3233629770 -1 false c
-4294967092 pg_publication_rel 1307062959 3233629770 -1 false c
-4294967093 pg_proc 1307062959 3233629770 -1 false c
-4294967094 pg_prepared_xacts 1307062959 3233629770 -1 false c
-4294967095 pg_prepared_statements 1307062959 3233629770 -1 false c
-4294967096 pg_policy 1307062959 3233629770 -1 false c
-4294967097 pg_policies 1307062959 3233629770 -1 false c
-4294967098 pg_partitioned_table 1307062959 3233629770 -1 false c
-4294967099 pg_opfamily 1307062959 3233629770 -1 false c
-4294967100 pg_operator 1307062959 3233629770 -1 false c
-4294967101 pg_opclass 1307062959 3233629770 -1 false c
-4294967102 pg_namespace 1307062959 3233629770 -1 false c
-4294967103 pg_matviews 1307062959 3233629770 -1 false c
-4294967104 pg_locks 1307062959 3233629770 -1 false c
-4294967105 pg_largeobject 1307062959 3233629770 -1 false c
-4294967106 pg_largeobject_metadata 1307062959 3233629770 -1 false c
-4294967107 pg_language 1307062959 3233629770 -1 false c
-4294967108 pg_init_privs 1307062959 3233629770 -1 false c
-4294967109 pg_inherits 1307062959 3233629770 -1 false c
-4294967110 pg_indexes 1307062959 3233629770 -1 false c
-4294967111 pg_index 1307062959 3233629770 -1 false c
-4294967112 pg_hba_file_rules 1307062959 3233629770 -1 false c
-4294967113 pg_group 1307062959 3233629770 -1 false c
-4294967114 pg_foreign_table 1307062959 3233629770 -1 false c
-4294967115 pg_foreign_server 1307062959 3233629770 -1 false c
-4294967116 pg_foreign_data_wrapper 1307062959 3233629770 -1 false c
-4294967117 pg_file_settings 1307062959 3233629770 -1 false c
-4294967118 pg_extension 1307062959 3233629770 -1 false c
-4294967119 pg_event_trigger 1307062959 3233629770 -1 false c
-4294967120 pg_enum 1307062959 3233629770 -1 false c
-4294967121 pg_description 1307062959 3233629770 -1 false c
-4294967122 pg_depend 1307062959 3233629770 -1 false c
-4294967123 pg_default_acl 1307062959 3233629770 -1 false c
-4294967124 pg_db_role_setting 1307062959 3233629770 -1 false c
-4294967125 pg_database 1307062959 3233629770 -1 false c
-4294967126 pg_cursors 1307062959 3233629770 -1 false c
-4294967127 pg_conversion 1307062959 3233629770 -1 false c
-4294967128 pg_constraint 1307062959 3233629770 -1 false c
-4294967129 pg_config 1307062959 3233629770 -1 false c
-4294967130 pg_collation 1307062959 3233629770 -1 false c
-4294967131 pg_class 1307062959 3233629770 -1 false c
-4294967132 pg_cast 1307062959 3233629770 -1 false c
-4294967133 pg_available_extensions 1307062959 3233629770 -1 false c
-4294967134 pg_available_extension_versions 1307062959 3233629770 -1 false c
-4294967135 pg_auth_members 1307062959 3233629770 -1 false c
-4294967136 pg_authid 1307062959 3233629770 -1 false c
-4294967137 pg_attribute 1307062959 3233629770 -1 false c
-4294967138 pg_attrdef 1307062959 3233629770 -1 false c
-4294967139 pg_amproc 1307062959 3233629770 -1 false c
-4294967140 pg_amop 1307062959 3233629770 -1 false c
-4294967141 pg_am 1307062959 3233629770 -1 false c
-4294967142 pg_aggregate 1307062959 3233629770 -1 false c
-4294967144 views 359535012 3233629770 -1 false c
-4294967145 view_table_usage 359535012 3233629770 -1 false c
-4294967146 view_routine_usage 359535012 3233629770 -1 false c
-4294967147 view_column_usage 359535012 3233629770 -1 false c
-4294967148 user_privileges 359535012 3233629770 -1 false c
-4294967149 user_mappings 359535012 3233629770 -1 false c
-4294967150 user_mapping_options 359535012 3233629770 -1 false c
-4294967151 user_defined_types 359535012 3233629770 -1 false c
-4294967152 user_attributes 359535012 3233629770 -1 false c
-4294967153 usage_privileges 359535012 3233629770 -1 false c
-4294967154 udt_privileges 359535012 3233629770 -1 false c
-4294967155 type_privileges 359535012 3233629770 -1 false c
-4294967156 triggers 359535012 3233629770 -1 false c
-4294967157 triggered_update_columns 359535012 3233629770 -1 false c
-4294967158 transforms 359535012 3233629770 -1 false c
-4294967159 tablespaces 359535012 3233629770 -1 false c
-4294967160 tablespaces_extensions 359535012 3233629770 -1 false c
-4294967161 tables 359535012 3233629770 -1 false c
-4294967162 tables_extensions 359535012 3233629770 -1 false c
-4294967163 table_privileges 359535012 3233629770 -1 false c
-4294967164 table_constraints_extensions 359535012 3233629770 -1 false c
-4294967165 table_constraints 359535012 3233629770 -1 false c
-4294967166 statistics 359535012 3233629770 -1 false c
-4294967167 st_units_of_measure 359535012 3233629770 -1 false c
-4294967168 st_spatial_reference_systems 359535012 3233629770 -1 false c
-4294967169 st_geometry_columns 359535012 3233629770 -1 false c
-4294967170 session_variables 359535012 3233629770 -1 false c
-4294967171 sequences 359535012 3233629770 -1 false c
-4294967172 schema_privileges 359535012 3233629770 -1 false c
-4294967173 schemata 359535012 3233629770 -1 false c
-4294967174 schemata_extensions 359535012 3233629770 -1 false c
-4294967175 sql_sizing 359535012 3233629770 -1 false c
-4294967176 sql_parts 359535012 3233629770 -1 false c
-4294967177 sql_implementation_info 359535012 3233629770 -1 false c
-4294967178 sql_features 359535012 3233629770 -1 false c
-4294967179 routines 359535012 3233629770 -1 false c
-4294967180 routine_privileges 359535012 3233629770 -1 false c
-4294967181 role_usage_grants 359535012 3233629770 -1 false c
-4294967182 role_udt_grants 359535012 3233629770 -1 false c
-4294967183 role_table_grants 359535012 3233629770 -1 false c
-4294967184 role_routine_grants 359535012 3233629770 -1 false c
-4294967185 role_column_grants 359535012 3233629770 -1 false c
-4294967186 resource_groups 359535012 3233629770 -1 false c
-4294967187 referential_constraints 359535012 3233629770 -1 false c
-4294967188 profiling 359535012 3233629770 -1 false c
-4294967189 processlist 359535012 3233629770 -1 false c
-4294967190 plugins 359535012 3233629770 -1 false c
-4294967191 partitions 359535012 3233629770 -1 false c
-4294967192 parameters 359535012 3233629770 -1 false c
-4294967193 optimizer_trace 359535012 3233629770 -1 false c
-4294967194 keywords 359535012 3233629770 -1 false c
-4294967195 key_column_usage 359535012 3233629770 -1 false c
-4294967196 information_schema_catalog_name 359535012 3233629770 -1 false c
-4294967197 foreign_tables 359535012 3233629770 -1 false c
-4294967198 foreign_table_options 359535012 3233629770 -1 false c
-4294967199 foreign_servers 359535012 3233629770 -1 false c
-4294967200 foreign_server_options 359535012 3233629770 -1 false c
-4294967201 foreign_data_wrappers 359535012 3233629770 -1 false c
-4294967202 foreign_data_wrapper_options 359535012 3233629770 -1 false c
-4294967203 files 359535012 3233629770 -1 false c
-4294967204 events 359535012 3233629770 -1 false c
-4294967205 engines 359535012 3233629770 -1 false c
-4294967206 enabled_roles 359535012 3233629770 -1 false c
-4294967207 element_types 359535012 3233629770 -1 false c
-4294967208 domains 359535012 3233629770 -1 false c
-4294967209 domain_udt_usage 359535012 3233629770 -1 false c
-4294967210 domain_constraints 359535012 3233629770 -1 false c
-4294967211 data_type_privileges 359535012 3233629770 -1 false c
-4294967212 constraint_table_usage 359535012 3233629770 -1 false c
-4294967213 constraint_column_usage 359535012 3233629770 -1 false c
-4294967214 columns 359535012 3233629770 -1 false c
-4294967215 columns_extensions 359535012 3233629770 -1 false c
-4294967216 column_udt_usage 359535012 3233629770 -1 false c
-4294967217 column_statistics 359535012 3233629770 -1 false c
-4294967218 column_privileges 359535012 3233629770 -1 false c
-4294967219 column_options 359535012 3233629770 -1 false c
-4294967220 column_domain_usage 359535012 3233629770 -1 false c
-4294967221 column_column_usage 359535012 3233629770 -1 false c
-4294967222 collations 359535012 3233629770 -1 false c
-4294967223 collation_character_set_applicability 359535012 3233629770 -1 false c
-4294967224 check_constraints 359535012 3233629770 -1 false c
-4294967225 check_constraint_routine_usage 359535012 3233629770 -1 false c
-4294967226 character_sets 359535012 3233629770 -1 false c
-4294967227 attributes 359535012 3233629770 -1 false c
-4294967228 applicable_roles 359535012 3233629770 -1 false c
-4294967229 administrable_role_authorizations 359535012 3233629770 -1 false c
-4294967231 tenant_usage_details 1146641803 3233629770 -1 false c
-4294967232 active_range_feeds 1146641803 3233629770 -1 false c
-4294967233 default_privileges 1146641803 3233629770 -1 false c
-4294967234 regions 1146641803 3233629770 -1 false c
-4294967235 cluster_inflight_traces 1146641803 3233629770 -1 false c
-4294967236 lost_descriptors_with_data 1146641803 3233629770 -1 false c
-4294967237 cross_db_references 1146641803 3233629770 -1 false c
-4294967238 interleaved 1146641803 3233629770 -1 false c
+4294967011 spatial_ref_sys 3553698885 3233629770 -1 false c
+4294967012 geometry_columns 3553698885 3233629770 -1 false c
+4294967013 geography_columns 3553698885 3233629770 -1 false c
+4294967015 pg_views 1307062959 3233629770 -1 false c
+4294967016 pg_user 1307062959 3233629770 -1 false c
+4294967017 pg_user_mappings 1307062959 3233629770 -1 false c
+4294967018 pg_user_mapping 1307062959 3233629770 -1 false c
+4294967019 pg_type 1307062959 3233629770 -1 false c
+4294967020 pg_ts_template 1307062959 3233629770 -1 false c
+4294967021 pg_ts_parser 1307062959 3233629770 -1 false c
+4294967022 pg_ts_dict 1307062959 3233629770 -1 false c
+4294967023 pg_ts_config 1307062959 3233629770 -1 false c
+4294967024 pg_ts_config_map 1307062959 3233629770 -1 false c
+4294967025 pg_trigger 1307062959 3233629770 -1 false c
+4294967026 pg_transform 1307062959 3233629770 -1 false c
+4294967027 pg_timezone_names 1307062959 3233629770 -1 false c
+4294967028 pg_timezone_abbrevs 1307062959 3233629770 -1 false c
+4294967029 pg_tablespace 1307062959 3233629770 -1 false c
+4294967030 pg_tables 1307062959 3233629770 -1 false c
+4294967031 pg_subscription 1307062959 3233629770 -1 false c
+4294967032 pg_subscription_rel 1307062959 3233629770 -1 false c
+4294967033 pg_stats 1307062959 3233629770 -1 false c
+4294967034 pg_stats_ext 1307062959 3233629770 -1 false c
+4294967035 pg_statistic 1307062959 3233629770 -1 false c
+4294967036 pg_statistic_ext 1307062959 3233629770 -1 false c
+4294967037 pg_statistic_ext_data 1307062959 3233629770 -1 false c
+4294967038 pg_statio_user_tables 1307062959 3233629770 -1 false c
+4294967039 pg_statio_user_sequences 1307062959 3233629770 -1 false c
+4294967040 pg_statio_user_indexes 1307062959 3233629770 -1 false c
+4294967041 pg_statio_sys_tables 1307062959 3233629770 -1 false c
+4294967042 pg_statio_sys_sequences 1307062959 3233629770 -1 false c
+4294967043 pg_statio_sys_indexes 1307062959 3233629770 -1 false c
+4294967044 pg_statio_all_tables 1307062959 3233629770 -1 false c
+4294967045 pg_statio_all_sequences 1307062959 3233629770 -1 false c
+4294967046 pg_statio_all_indexes 1307062959 3233629770 -1 false c
+4294967047 pg_stat_xact_user_tables 1307062959 3233629770 -1 false c
+4294967048 pg_stat_xact_user_functions 1307062959 3233629770 -1 false c
+4294967049 pg_stat_xact_sys_tables 1307062959 3233629770 -1 false c
+4294967050 pg_stat_xact_all_tables 1307062959 3233629770 -1 false c
+4294967051 pg_stat_wal_receiver 1307062959 3233629770 -1 false c
+4294967052 pg_stat_user_tables 1307062959 3233629770 -1 false c
+4294967053 pg_stat_user_indexes 1307062959 3233629770 -1 false c
+4294967054 pg_stat_user_functions 1307062959 3233629770 -1 false c
+4294967055 pg_stat_sys_tables 1307062959 3233629770 -1 false c
+4294967056 pg_stat_sys_indexes 1307062959 3233629770 -1 false c
+4294967057 pg_stat_subscription 1307062959 3233629770 -1 false c
+4294967058 pg_stat_ssl 1307062959 3233629770 -1 false c
+4294967059 pg_stat_slru 1307062959 3233629770 -1 false c
+4294967060 pg_stat_replication 1307062959 3233629770 -1 false c
+4294967061 pg_stat_progress_vacuum 1307062959 3233629770 -1 false c
+4294967062 pg_stat_progress_create_index 1307062959 3233629770 -1 false c
+4294967063 pg_stat_progress_cluster 1307062959 3233629770 -1 false c
+4294967064 pg_stat_progress_basebackup 1307062959 3233629770 -1 false c
+4294967065 pg_stat_progress_analyze 1307062959 3233629770 -1 false c
+4294967066 pg_stat_gssapi 1307062959 3233629770 -1 false c
+4294967067 pg_stat_database 1307062959 3233629770 -1 false c
+4294967068 pg_stat_database_conflicts 1307062959 3233629770 -1 false c
+4294967069 pg_stat_bgwriter 1307062959 3233629770 -1 false c
+4294967070 pg_stat_archiver 1307062959 3233629770 -1 false c
+4294967071 pg_stat_all_tables 1307062959 3233629770 -1 false c
+4294967072 pg_stat_all_indexes 1307062959 3233629770 -1 false c
+4294967073 pg_stat_activity 1307062959 3233629770 -1 false c
+4294967074 pg_shmem_allocations 1307062959 3233629770 -1 false c
+4294967075 pg_shdepend 1307062959 3233629770 -1 false c
+4294967076 pg_shseclabel 1307062959 3233629770 -1 false c
+4294967077 pg_shdescription 1307062959 3233629770 -1 false c
+4294967078 pg_shadow 1307062959 3233629770 -1 false c
+4294967079 pg_settings 1307062959 3233629770 -1 false c
+4294967080 pg_sequences 1307062959 3233629770 -1 false c
+4294967081 pg_sequence 1307062959 3233629770 -1 false c
+4294967082 pg_seclabel 1307062959 3233629770 -1 false c
+4294967083 pg_seclabels 1307062959 3233629770 -1 false c
+4294967084 pg_rules 1307062959 3233629770 -1 false c
+4294967085 pg_roles 1307062959 3233629770 -1 false c
+4294967086 pg_rewrite 1307062959 3233629770 -1 false c
+4294967087 pg_replication_slots 1307062959 3233629770 -1 false c
+4294967088 pg_replication_origin 1307062959 3233629770 -1 false c
+4294967089 pg_replication_origin_status 1307062959 3233629770 -1 false c
+4294967090 pg_range 1307062959 3233629770 -1 false c
+4294967091 pg_publication_tables 1307062959 3233629770 -1 false c
+4294967092 pg_publication 1307062959 3233629770 -1 false c
+4294967093 pg_publication_rel 1307062959 3233629770 -1 false c
+4294967094 pg_proc 1307062959 3233629770 -1 false c
+4294967095 pg_prepared_xacts 1307062959 3233629770 -1 false c
+4294967096 pg_prepared_statements 1307062959 3233629770 -1 false c
+4294967097 pg_policy 1307062959 3233629770 -1 false c
+4294967098 pg_policies 1307062959 3233629770 -1 false c
+4294967099 pg_partitioned_table 1307062959 3233629770 -1 false c
+4294967100 pg_opfamily 1307062959 3233629770 -1 false c
+4294967101 pg_operator 1307062959 3233629770 -1 false c
+4294967102 pg_opclass 1307062959 3233629770 -1 false c
+4294967103 pg_namespace 1307062959 3233629770 -1 false c
+4294967104 pg_matviews 1307062959 3233629770 -1 false c
+4294967105 pg_locks 1307062959 3233629770 -1 false c
+4294967106 pg_largeobject 1307062959 3233629770 -1 false c
+4294967107 pg_largeobject_metadata 1307062959 3233629770 -1 false c
+4294967108 pg_language 1307062959 3233629770 -1 false c
+4294967109 pg_init_privs 1307062959 3233629770 -1 false c
+4294967110 pg_inherits 1307062959 3233629770 -1 false c
+4294967111 pg_indexes 1307062959 3233629770 -1 false c
+4294967112 pg_index 1307062959 3233629770 -1 false c
+4294967113 pg_hba_file_rules 1307062959 3233629770 -1 false c
+4294967114 pg_group 1307062959 3233629770 -1 false c
+4294967115 pg_foreign_table 1307062959 3233629770 -1 false c
+4294967116 pg_foreign_server 1307062959 3233629770 -1 false c
+4294967117 pg_foreign_data_wrapper 1307062959 3233629770 -1 false c
+4294967118 pg_file_settings 1307062959 3233629770 -1 false c
+4294967119 pg_extension 1307062959 3233629770 -1 false c
+4294967120 pg_event_trigger 1307062959 3233629770 -1 false c
+4294967121 pg_enum 1307062959 3233629770 -1 false c
+4294967122 pg_description 1307062959 3233629770 -1 false c
+4294967123 pg_depend 1307062959 3233629770 -1 false c
+4294967124 pg_default_acl 1307062959 3233629770 -1 false c
+4294967125 pg_db_role_setting 1307062959 3233629770 -1 false c
+4294967126 pg_database 1307062959 3233629770 -1 false c
+4294967127 pg_cursors 1307062959 3233629770 -1 false c
+4294967128 pg_conversion 1307062959 3233629770 -1 false c
+4294967129 pg_constraint 1307062959 3233629770 -1 false c
+4294967130 pg_config 1307062959 3233629770 -1 false c
+4294967131 pg_collation 1307062959 3233629770 -1 false c
+4294967132 pg_class 1307062959 3233629770 -1 false c
+4294967133 pg_cast 1307062959 3233629770 -1 false c
+4294967134 pg_available_extensions 1307062959 3233629770 -1 false c
+4294967135 pg_available_extension_versions 1307062959 3233629770 -1 false c
+4294967136 pg_auth_members 1307062959 3233629770 -1 false c
+4294967137 pg_authid 1307062959 3233629770 -1 false c
+4294967138 pg_attribute 1307062959 3233629770 -1 false c
+4294967139 pg_attrdef 1307062959 3233629770 -1 false c
+4294967140 pg_amproc 1307062959 3233629770 -1 false c
+4294967141 pg_amop 1307062959 3233629770 -1 false c
+4294967142 pg_am 1307062959 3233629770 -1 false c
+4294967143 pg_aggregate 1307062959 3233629770 -1 false c
+4294967145 views 359535012 3233629770 -1 false c
+4294967146 view_table_usage 359535012 3233629770 -1 false c
+4294967147 view_routine_usage 359535012 3233629770 -1 false c
+4294967148 view_column_usage 359535012 3233629770 -1 false c
+4294967149 user_privileges 359535012 3233629770 -1 false c
+4294967150 user_mappings 359535012 3233629770 -1 false c
+4294967151 user_mapping_options 359535012 3233629770 -1 false c
+4294967152 user_defined_types 359535012 3233629770 -1 false c
+4294967153 user_attributes 359535012 3233629770 -1 false c
+4294967154 usage_privileges 359535012 3233629770 -1 false c
+4294967155 udt_privileges 359535012 3233629770 -1 false c
+4294967156 type_privileges 359535012 3233629770 -1 false c
+4294967157 triggers 359535012 3233629770 -1 false c
+4294967158 triggered_update_columns 359535012 3233629770 -1 false c
+4294967159 transforms 359535012 3233629770 -1 false c
+4294967160 tablespaces 359535012 3233629770 -1 false c
+4294967161 tablespaces_extensions 359535012 3233629770 -1 false c
+4294967162 tables 359535012 3233629770 -1 false c
+4294967163 tables_extensions 359535012 3233629770 -1 false c
+4294967164 table_privileges 359535012 3233629770 -1 false c
+4294967165 table_constraints_extensions 359535012 3233629770 -1 false c
+4294967166 table_constraints 359535012 3233629770 -1 false c
+4294967167 statistics 359535012 3233629770 -1 false c
+4294967168 st_units_of_measure 359535012 3233629770 -1 false c
+4294967169 st_spatial_reference_systems 359535012 3233629770 -1 false c
+4294967170 st_geometry_columns 359535012 3233629770 -1 false c
+4294967171 session_variables 359535012 3233629770 -1 false c
+4294967172 sequences 359535012 3233629770 -1 false c
+4294967173 schema_privileges 359535012 3233629770 -1 false c
+4294967174 schemata 359535012 3233629770 -1 false c
+4294967175 schemata_extensions 359535012 3233629770 -1 false c
+4294967176 sql_sizing 359535012 3233629770 -1 false c
+4294967177 sql_parts 359535012 3233629770 -1 false c
+4294967178 sql_implementation_info 359535012 3233629770 -1 false c
+4294967179 sql_features 359535012 3233629770 -1 false c
+4294967180 routines 359535012 3233629770 -1 false c
+4294967181 routine_privileges 359535012 3233629770 -1 false c
+4294967182 role_usage_grants 359535012 3233629770 -1 false c
+4294967183 role_udt_grants 359535012 3233629770 -1 false c
+4294967184 role_table_grants 359535012 3233629770 -1 false c
+4294967185 role_routine_grants 359535012 3233629770 -1 false c
+4294967186 role_column_grants 359535012 3233629770 -1 false c
+4294967187 resource_groups 359535012 3233629770 -1 false c
+4294967188 referential_constraints 359535012 3233629770 -1 false c
+4294967189 profiling 359535012 3233629770 -1 false c
+4294967190 processlist 359535012 3233629770 -1 false c
+4294967191 plugins 359535012 3233629770 -1 false c
+4294967192 partitions 359535012 3233629770 -1 false c
+4294967193 parameters 359535012 3233629770 -1 false c
+4294967194 optimizer_trace 359535012 3233629770 -1 false c
+4294967195 keywords 359535012 3233629770 -1 false c
+4294967196 key_column_usage 359535012 3233629770 -1 false c
+4294967197 information_schema_catalog_name 359535012 3233629770 -1 false c
+4294967198 foreign_tables 359535012 3233629770 -1 false c
+4294967199 foreign_table_options 359535012 3233629770 -1 false c
+4294967200 foreign_servers 359535012 3233629770 -1 false c
+4294967201 foreign_server_options 359535012 3233629770 -1 false c
+4294967202 foreign_data_wrappers 359535012 3233629770 -1 false c
+4294967203 foreign_data_wrapper_options 359535012 3233629770 -1 false c
+4294967204 files 359535012 3233629770 -1 false c
+4294967205 events 359535012 3233629770 -1 false c
+4294967206 engines 359535012 3233629770 -1 false c
+4294967207 enabled_roles 359535012 3233629770 -1 false c
+4294967208 element_types 359535012 3233629770 -1 false c
+4294967209 domains 359535012 3233629770 -1 false c
+4294967210 domain_udt_usage 359535012 3233629770 -1 false c
+4294967211 domain_constraints 359535012 3233629770 -1 false c
+4294967212 data_type_privileges 359535012 3233629770 -1 false c
+4294967213 constraint_table_usage 359535012 3233629770 -1 false c
+4294967214 constraint_column_usage 359535012 3233629770 -1 false c
+4294967215 columns 359535012 3233629770 -1 false c
+4294967216 columns_extensions 359535012 3233629770 -1 false c
+4294967217 column_udt_usage 359535012 3233629770 -1 false c
+4294967218 column_statistics 359535012 3233629770 -1 false c
+4294967219 column_privileges 359535012 3233629770 -1 false c
+4294967220 column_options 359535012 3233629770 -1 false c
+4294967221 column_domain_usage 359535012 3233629770 -1 false c
+4294967222 column_column_usage 359535012 3233629770 -1 false c
+4294967223 collations 359535012 3233629770 -1 false c
+4294967224 collation_character_set_applicability 359535012 3233629770 -1 false c
+4294967225 check_constraints 359535012 3233629770 -1 false c
+4294967226 check_constraint_routine_usage 359535012 3233629770 -1 false c
+4294967227 character_sets 359535012 3233629770 -1 false c
+4294967228 attributes 359535012 3233629770 -1 false c
+4294967229 applicable_roles 359535012 3233629770 -1 false c
+4294967230 administrable_role_authorizations 359535012 3233629770 -1 false c
+4294967232 tenant_usage_details 1146641803 3233629770 -1 false c
+4294967233 active_range_feeds 1146641803 3233629770 -1 false c
+4294967234 default_privileges 1146641803 3233629770 -1 false c
+4294967235 regions 1146641803 3233629770 -1 false c
+4294967236 cluster_inflight_traces 1146641803 3233629770 -1 false c
+4294967237 lost_descriptors_with_data 1146641803 3233629770 -1 false c
+4294967238 cross_db_references 1146641803 3233629770 -1 false c
4294967239 cluster_database_privileges 1146641803 3233629770 -1 false c
4294967240 invalid_objects 1146641803 3233629770 -1 false c
4294967241 zones 1146641803 3233629770 -1 false c
@@ -2006,232 +2005,231 @@ oid typname typcategory typispreferred
100076 _newtype1 A false true , 0 100075 0
100077 newtype2 E false true , 0 0 100078
100078 _newtype2 A false true , 0 100077 0
-4294967010 spatial_ref_sys C false true , 4294967010 0 0
-4294967011 geometry_columns C false true , 4294967011 0 0
-4294967012 geography_columns C false true , 4294967012 0 0
-4294967014 pg_views C false true , 4294967014 0 0
-4294967015 pg_user C false true , 4294967015 0 0
-4294967016 pg_user_mappings C false true , 4294967016 0 0
-4294967017 pg_user_mapping C false true , 4294967017 0 0
-4294967018 pg_type C false true , 4294967018 0 0
-4294967019 pg_ts_template C false true , 4294967019 0 0
-4294967020 pg_ts_parser C false true , 4294967020 0 0
-4294967021 pg_ts_dict C false true , 4294967021 0 0
-4294967022 pg_ts_config C false true , 4294967022 0 0
-4294967023 pg_ts_config_map C false true , 4294967023 0 0
-4294967024 pg_trigger C false true , 4294967024 0 0
-4294967025 pg_transform C false true , 4294967025 0 0
-4294967026 pg_timezone_names C false true , 4294967026 0 0
-4294967027 pg_timezone_abbrevs C false true , 4294967027 0 0
-4294967028 pg_tablespace C false true , 4294967028 0 0
-4294967029 pg_tables C false true , 4294967029 0 0
-4294967030 pg_subscription C false true , 4294967030 0 0
-4294967031 pg_subscription_rel C false true , 4294967031 0 0
-4294967032 pg_stats C false true , 4294967032 0 0
-4294967033 pg_stats_ext C false true , 4294967033 0 0
-4294967034 pg_statistic C false true , 4294967034 0 0
-4294967035 pg_statistic_ext C false true , 4294967035 0 0
-4294967036 pg_statistic_ext_data C false true , 4294967036 0 0
-4294967037 pg_statio_user_tables C false true , 4294967037 0 0
-4294967038 pg_statio_user_sequences C false true , 4294967038 0 0
-4294967039 pg_statio_user_indexes C false true , 4294967039 0 0
-4294967040 pg_statio_sys_tables C false true , 4294967040 0 0
-4294967041 pg_statio_sys_sequences C false true , 4294967041 0 0
-4294967042 pg_statio_sys_indexes C false true , 4294967042 0 0
-4294967043 pg_statio_all_tables C false true , 4294967043 0 0
-4294967044 pg_statio_all_sequences C false true , 4294967044 0 0
-4294967045 pg_statio_all_indexes C false true , 4294967045 0 0
-4294967046 pg_stat_xact_user_tables C false true , 4294967046 0 0
-4294967047 pg_stat_xact_user_functions C false true , 4294967047 0 0
-4294967048 pg_stat_xact_sys_tables C false true , 4294967048 0 0
-4294967049 pg_stat_xact_all_tables C false true , 4294967049 0 0
-4294967050 pg_stat_wal_receiver C false true , 4294967050 0 0
-4294967051 pg_stat_user_tables C false true , 4294967051 0 0
-4294967052 pg_stat_user_indexes C false true , 4294967052 0 0
-4294967053 pg_stat_user_functions C false true , 4294967053 0 0
-4294967054 pg_stat_sys_tables C false true , 4294967054 0 0
-4294967055 pg_stat_sys_indexes C false true , 4294967055 0 0
-4294967056 pg_stat_subscription C false true , 4294967056 0 0
-4294967057 pg_stat_ssl C false true , 4294967057 0 0
-4294967058 pg_stat_slru C false true , 4294967058 0 0
-4294967059 pg_stat_replication C false true , 4294967059 0 0
-4294967060 pg_stat_progress_vacuum C false true , 4294967060 0 0
-4294967061 pg_stat_progress_create_index C false true , 4294967061 0 0
-4294967062 pg_stat_progress_cluster C false true , 4294967062 0 0
-4294967063 pg_stat_progress_basebackup C false true , 4294967063 0 0
-4294967064 pg_stat_progress_analyze C false true , 4294967064 0 0
-4294967065 pg_stat_gssapi C false true , 4294967065 0 0
-4294967066 pg_stat_database C false true , 4294967066 0 0
-4294967067 pg_stat_database_conflicts C false true , 4294967067 0 0
-4294967068 pg_stat_bgwriter C false true , 4294967068 0 0
-4294967069 pg_stat_archiver C false true , 4294967069 0 0
-4294967070 pg_stat_all_tables C false true , 4294967070 0 0
-4294967071 pg_stat_all_indexes C false true , 4294967071 0 0
-4294967072 pg_stat_activity C false true , 4294967072 0 0
-4294967073 pg_shmem_allocations C false true , 4294967073 0 0
-4294967074 pg_shdepend C false true , 4294967074 0 0
-4294967075 pg_shseclabel C false true , 4294967075 0 0
-4294967076 pg_shdescription C false true , 4294967076 0 0
-4294967077 pg_shadow C false true , 4294967077 0 0
-4294967078 pg_settings C false true , 4294967078 0 0
-4294967079 pg_sequences C false true , 4294967079 0 0
-4294967080 pg_sequence C false true , 4294967080 0 0
-4294967081 pg_seclabel C false true , 4294967081 0 0
-4294967082 pg_seclabels C false true , 4294967082 0 0
-4294967083 pg_rules C false true , 4294967083 0 0
-4294967084 pg_roles C false true , 4294967084 0 0
-4294967085 pg_rewrite C false true , 4294967085 0 0
-4294967086 pg_replication_slots C false true , 4294967086 0 0
-4294967087 pg_replication_origin C false true , 4294967087 0 0
-4294967088 pg_replication_origin_status C false true , 4294967088 0 0
-4294967089 pg_range C false true , 4294967089 0 0
-4294967090 pg_publication_tables C false true , 4294967090 0 0
-4294967091 pg_publication C false true , 4294967091 0 0
-4294967092 pg_publication_rel C false true , 4294967092 0 0
-4294967093 pg_proc C false true , 4294967093 0 0
-4294967094 pg_prepared_xacts C false true , 4294967094 0 0
-4294967095 pg_prepared_statements C false true , 4294967095 0 0
-4294967096 pg_policy C false true , 4294967096 0 0
-4294967097 pg_policies C false true , 4294967097 0 0
-4294967098 pg_partitioned_table C false true , 4294967098 0 0
-4294967099 pg_opfamily C false true , 4294967099 0 0
-4294967100 pg_operator C false true , 4294967100 0 0
-4294967101 pg_opclass C false true , 4294967101 0 0
-4294967102 pg_namespace C false true , 4294967102 0 0
-4294967103 pg_matviews C false true , 4294967103 0 0
-4294967104 pg_locks C false true , 4294967104 0 0
-4294967105 pg_largeobject C false true , 4294967105 0 0
-4294967106 pg_largeobject_metadata C false true , 4294967106 0 0
-4294967107 pg_language C false true , 4294967107 0 0
-4294967108 pg_init_privs C false true , 4294967108 0 0
-4294967109 pg_inherits C false true , 4294967109 0 0
-4294967110 pg_indexes C false true , 4294967110 0 0
-4294967111 pg_index C false true , 4294967111 0 0
-4294967112 pg_hba_file_rules C false true , 4294967112 0 0
-4294967113 pg_group C false true , 4294967113 0 0
-4294967114 pg_foreign_table C false true , 4294967114 0 0
-4294967115 pg_foreign_server C false true , 4294967115 0 0
-4294967116 pg_foreign_data_wrapper C false true , 4294967116 0 0
-4294967117 pg_file_settings C false true , 4294967117 0 0
-4294967118 pg_extension C false true , 4294967118 0 0
-4294967119 pg_event_trigger C false true , 4294967119 0 0
-4294967120 pg_enum C false true , 4294967120 0 0
-4294967121 pg_description C false true , 4294967121 0 0
-4294967122 pg_depend C false true , 4294967122 0 0
-4294967123 pg_default_acl C false true , 4294967123 0 0
-4294967124 pg_db_role_setting C false true , 4294967124 0 0
-4294967125 pg_database C false true , 4294967125 0 0
-4294967126 pg_cursors C false true , 4294967126 0 0
-4294967127 pg_conversion C false true , 4294967127 0 0
-4294967128 pg_constraint C false true , 4294967128 0 0
-4294967129 pg_config C false true , 4294967129 0 0
-4294967130 pg_collation C false true , 4294967130 0 0
-4294967131 pg_class C false true , 4294967131 0 0
-4294967132 pg_cast C false true , 4294967132 0 0
-4294967133 pg_available_extensions C false true , 4294967133 0 0
-4294967134 pg_available_extension_versions C false true , 4294967134 0 0
-4294967135 pg_auth_members C false true , 4294967135 0 0
-4294967136 pg_authid C false true , 4294967136 0 0
-4294967137 pg_attribute C false true , 4294967137 0 0
-4294967138 pg_attrdef C false true , 4294967138 0 0
-4294967139 pg_amproc C false true , 4294967139 0 0
-4294967140 pg_amop C false true , 4294967140 0 0
-4294967141 pg_am C false true , 4294967141 0 0
-4294967142 pg_aggregate C false true , 4294967142 0 0
-4294967144 views C false true , 4294967144 0 0
-4294967145 view_table_usage C false true , 4294967145 0 0
-4294967146 view_routine_usage C false true , 4294967146 0 0
-4294967147 view_column_usage C false true , 4294967147 0 0
-4294967148 user_privileges C false true , 4294967148 0 0
-4294967149 user_mappings C false true , 4294967149 0 0
-4294967150 user_mapping_options C false true , 4294967150 0 0
-4294967151 user_defined_types C false true , 4294967151 0 0
-4294967152 user_attributes C false true , 4294967152 0 0
-4294967153 usage_privileges C false true , 4294967153 0 0
-4294967154 udt_privileges C false true , 4294967154 0 0
-4294967155 type_privileges C false true , 4294967155 0 0
-4294967156 triggers C false true , 4294967156 0 0
-4294967157 triggered_update_columns C false true , 4294967157 0 0
-4294967158 transforms C false true , 4294967158 0 0
-4294967159 tablespaces C false true , 4294967159 0 0
-4294967160 tablespaces_extensions C false true , 4294967160 0 0
-4294967161 tables C false true , 4294967161 0 0
-4294967162 tables_extensions C false true , 4294967162 0 0
-4294967163 table_privileges C false true , 4294967163 0 0
-4294967164 table_constraints_extensions C false true , 4294967164 0 0
-4294967165 table_constraints C false true , 4294967165 0 0
-4294967166 statistics C false true , 4294967166 0 0
-4294967167 st_units_of_measure C false true , 4294967167 0 0
-4294967168 st_spatial_reference_systems C false true , 4294967168 0 0
-4294967169 st_geometry_columns C false true , 4294967169 0 0
-4294967170 session_variables C false true , 4294967170 0 0
-4294967171 sequences C false true , 4294967171 0 0
-4294967172 schema_privileges C false true , 4294967172 0 0
-4294967173 schemata C false true , 4294967173 0 0
-4294967174 schemata_extensions C false true , 4294967174 0 0
-4294967175 sql_sizing C false true , 4294967175 0 0
-4294967176 sql_parts C false true , 4294967176 0 0
-4294967177 sql_implementation_info C false true , 4294967177 0 0
-4294967178 sql_features C false true , 4294967178 0 0
-4294967179 routines C false true , 4294967179 0 0
-4294967180 routine_privileges C false true , 4294967180 0 0
-4294967181 role_usage_grants C false true , 4294967181 0 0
-4294967182 role_udt_grants C false true , 4294967182 0 0
-4294967183 role_table_grants C false true , 4294967183 0 0
-4294967184 role_routine_grants C false true , 4294967184 0 0
-4294967185 role_column_grants C false true , 4294967185 0 0
-4294967186 resource_groups C false true , 4294967186 0 0
-4294967187 referential_constraints C false true , 4294967187 0 0
-4294967188 profiling C false true , 4294967188 0 0
-4294967189 processlist C false true , 4294967189 0 0
-4294967190 plugins C false true , 4294967190 0 0
-4294967191 partitions C false true , 4294967191 0 0
-4294967192 parameters C false true , 4294967192 0 0
-4294967193 optimizer_trace C false true , 4294967193 0 0
-4294967194 keywords C false true , 4294967194 0 0
-4294967195 key_column_usage C false true , 4294967195 0 0
-4294967196 information_schema_catalog_name C false true , 4294967196 0 0
-4294967197 foreign_tables C false true , 4294967197 0 0
-4294967198 foreign_table_options C false true , 4294967198 0 0
-4294967199 foreign_servers C false true , 4294967199 0 0
-4294967200 foreign_server_options C false true , 4294967200 0 0
-4294967201 foreign_data_wrappers C false true , 4294967201 0 0
-4294967202 foreign_data_wrapper_options C false true , 4294967202 0 0
-4294967203 files C false true , 4294967203 0 0
-4294967204 events C false true , 4294967204 0 0
-4294967205 engines C false true , 4294967205 0 0
-4294967206 enabled_roles C false true , 4294967206 0 0
-4294967207 element_types C false true , 4294967207 0 0
-4294967208 domains C false true , 4294967208 0 0
-4294967209 domain_udt_usage C false true , 4294967209 0 0
-4294967210 domain_constraints C false true , 4294967210 0 0
-4294967211 data_type_privileges C false true , 4294967211 0 0
-4294967212 constraint_table_usage C false true , 4294967212 0 0
-4294967213 constraint_column_usage C false true , 4294967213 0 0
-4294967214 columns C false true , 4294967214 0 0
-4294967215 columns_extensions C false true , 4294967215 0 0
-4294967216 column_udt_usage C false true , 4294967216 0 0
-4294967217 column_statistics C false true , 4294967217 0 0
-4294967218 column_privileges C false true , 4294967218 0 0
-4294967219 column_options C false true , 4294967219 0 0
-4294967220 column_domain_usage C false true , 4294967220 0 0
-4294967221 column_column_usage C false true , 4294967221 0 0
-4294967222 collations C false true , 4294967222 0 0
-4294967223 collation_character_set_applicability C false true , 4294967223 0 0
-4294967224 check_constraints C false true , 4294967224 0 0
-4294967225 check_constraint_routine_usage C false true , 4294967225 0 0
-4294967226 character_sets C false true , 4294967226 0 0
-4294967227 attributes C false true , 4294967227 0 0
-4294967228 applicable_roles C false true , 4294967228 0 0
-4294967229 administrable_role_authorizations C false true , 4294967229 0 0
-4294967231 tenant_usage_details C false true , 4294967231 0 0
-4294967232 active_range_feeds C false true , 4294967232 0 0
-4294967233 default_privileges C false true , 4294967233 0 0
-4294967234 regions C false true , 4294967234 0 0
-4294967235 cluster_inflight_traces C false true , 4294967235 0 0
-4294967236 lost_descriptors_with_data C false true , 4294967236 0 0
-4294967237 cross_db_references C false true , 4294967237 0 0
-4294967238 interleaved C false true , 4294967238 0 0
+4294967011 spatial_ref_sys C false true , 4294967011 0 0
+4294967012 geometry_columns C false true , 4294967012 0 0
+4294967013 geography_columns C false true , 4294967013 0 0
+4294967015 pg_views C false true , 4294967015 0 0
+4294967016 pg_user C false true , 4294967016 0 0
+4294967017 pg_user_mappings C false true , 4294967017 0 0
+4294967018 pg_user_mapping C false true , 4294967018 0 0
+4294967019 pg_type C false true , 4294967019 0 0
+4294967020 pg_ts_template C false true , 4294967020 0 0
+4294967021 pg_ts_parser C false true , 4294967021 0 0
+4294967022 pg_ts_dict C false true , 4294967022 0 0
+4294967023 pg_ts_config C false true , 4294967023 0 0
+4294967024 pg_ts_config_map C false true , 4294967024 0 0
+4294967025 pg_trigger C false true , 4294967025 0 0
+4294967026 pg_transform C false true , 4294967026 0 0
+4294967027 pg_timezone_names C false true , 4294967027 0 0
+4294967028 pg_timezone_abbrevs C false true , 4294967028 0 0
+4294967029 pg_tablespace C false true , 4294967029 0 0
+4294967030 pg_tables C false true , 4294967030 0 0
+4294967031 pg_subscription C false true , 4294967031 0 0
+4294967032 pg_subscription_rel C false true , 4294967032 0 0
+4294967033 pg_stats C false true , 4294967033 0 0
+4294967034 pg_stats_ext C false true , 4294967034 0 0
+4294967035 pg_statistic C false true , 4294967035 0 0
+4294967036 pg_statistic_ext C false true , 4294967036 0 0
+4294967037 pg_statistic_ext_data C false true , 4294967037 0 0
+4294967038 pg_statio_user_tables C false true , 4294967038 0 0
+4294967039 pg_statio_user_sequences C false true , 4294967039 0 0
+4294967040 pg_statio_user_indexes C false true , 4294967040 0 0
+4294967041 pg_statio_sys_tables C false true , 4294967041 0 0
+4294967042 pg_statio_sys_sequences C false true , 4294967042 0 0
+4294967043 pg_statio_sys_indexes C false true , 4294967043 0 0
+4294967044 pg_statio_all_tables C false true , 4294967044 0 0
+4294967045 pg_statio_all_sequences C false true , 4294967045 0 0
+4294967046 pg_statio_all_indexes C false true , 4294967046 0 0
+4294967047 pg_stat_xact_user_tables C false true , 4294967047 0 0
+4294967048 pg_stat_xact_user_functions C false true , 4294967048 0 0
+4294967049 pg_stat_xact_sys_tables C false true , 4294967049 0 0
+4294967050 pg_stat_xact_all_tables C false true , 4294967050 0 0
+4294967051 pg_stat_wal_receiver C false true , 4294967051 0 0
+4294967052 pg_stat_user_tables C false true , 4294967052 0 0
+4294967053 pg_stat_user_indexes C false true , 4294967053 0 0
+4294967054 pg_stat_user_functions C false true , 4294967054 0 0
+4294967055 pg_stat_sys_tables C false true , 4294967055 0 0
+4294967056 pg_stat_sys_indexes C false true , 4294967056 0 0
+4294967057 pg_stat_subscription C false true , 4294967057 0 0
+4294967058 pg_stat_ssl C false true , 4294967058 0 0
+4294967059 pg_stat_slru C false true , 4294967059 0 0
+4294967060 pg_stat_replication C false true , 4294967060 0 0
+4294967061 pg_stat_progress_vacuum C false true , 4294967061 0 0
+4294967062 pg_stat_progress_create_index C false true , 4294967062 0 0
+4294967063 pg_stat_progress_cluster C false true , 4294967063 0 0
+4294967064 pg_stat_progress_basebackup C false true , 4294967064 0 0
+4294967065 pg_stat_progress_analyze C false true , 4294967065 0 0
+4294967066 pg_stat_gssapi C false true , 4294967066 0 0
+4294967067 pg_stat_database C false true , 4294967067 0 0
+4294967068 pg_stat_database_conflicts C false true , 4294967068 0 0
+4294967069 pg_stat_bgwriter C false true , 4294967069 0 0
+4294967070 pg_stat_archiver C false true , 4294967070 0 0
+4294967071 pg_stat_all_tables C false true , 4294967071 0 0
+4294967072 pg_stat_all_indexes C false true , 4294967072 0 0
+4294967073 pg_stat_activity C false true , 4294967073 0 0
+4294967074 pg_shmem_allocations C false true , 4294967074 0 0
+4294967075 pg_shdepend C false true , 4294967075 0 0
+4294967076 pg_shseclabel C false true , 4294967076 0 0
+4294967077 pg_shdescription C false true , 4294967077 0 0
+4294967078 pg_shadow C false true , 4294967078 0 0
+4294967079 pg_settings C false true , 4294967079 0 0
+4294967080 pg_sequences C false true , 4294967080 0 0
+4294967081 pg_sequence C false true , 4294967081 0 0
+4294967082 pg_seclabel C false true , 4294967082 0 0
+4294967083 pg_seclabels C false true , 4294967083 0 0
+4294967084 pg_rules C false true , 4294967084 0 0
+4294967085 pg_roles C false true , 4294967085 0 0
+4294967086 pg_rewrite C false true , 4294967086 0 0
+4294967087 pg_replication_slots C false true , 4294967087 0 0
+4294967088 pg_replication_origin C false true , 4294967088 0 0
+4294967089 pg_replication_origin_status C false true , 4294967089 0 0
+4294967090 pg_range C false true , 4294967090 0 0
+4294967091 pg_publication_tables C false true , 4294967091 0 0
+4294967092 pg_publication C false true , 4294967092 0 0
+4294967093 pg_publication_rel C false true , 4294967093 0 0
+4294967094 pg_proc C false true , 4294967094 0 0
+4294967095 pg_prepared_xacts C false true , 4294967095 0 0
+4294967096 pg_prepared_statements C false true , 4294967096 0 0
+4294967097 pg_policy C false true , 4294967097 0 0
+4294967098 pg_policies C false true , 4294967098 0 0
+4294967099 pg_partitioned_table C false true , 4294967099 0 0
+4294967100 pg_opfamily C false true , 4294967100 0 0
+4294967101 pg_operator C false true , 4294967101 0 0
+4294967102 pg_opclass C false true , 4294967102 0 0
+4294967103 pg_namespace C false true , 4294967103 0 0
+4294967104 pg_matviews C false true , 4294967104 0 0
+4294967105 pg_locks C false true , 4294967105 0 0
+4294967106 pg_largeobject C false true , 4294967106 0 0
+4294967107 pg_largeobject_metadata C false true , 4294967107 0 0
+4294967108 pg_language C false true , 4294967108 0 0
+4294967109 pg_init_privs C false true , 4294967109 0 0
+4294967110 pg_inherits C false true , 4294967110 0 0
+4294967111 pg_indexes C false true , 4294967111 0 0
+4294967112 pg_index C false true , 4294967112 0 0
+4294967113 pg_hba_file_rules C false true , 4294967113 0 0
+4294967114 pg_group C false true , 4294967114 0 0
+4294967115 pg_foreign_table C false true , 4294967115 0 0
+4294967116 pg_foreign_server C false true , 4294967116 0 0
+4294967117 pg_foreign_data_wrapper C false true , 4294967117 0 0
+4294967118 pg_file_settings C false true , 4294967118 0 0
+4294967119 pg_extension C false true , 4294967119 0 0
+4294967120 pg_event_trigger C false true , 4294967120 0 0
+4294967121 pg_enum C false true , 4294967121 0 0
+4294967122 pg_description C false true , 4294967122 0 0
+4294967123 pg_depend C false true , 4294967123 0 0
+4294967124 pg_default_acl C false true , 4294967124 0 0
+4294967125 pg_db_role_setting C false true , 4294967125 0 0
+4294967126 pg_database C false true , 4294967126 0 0
+4294967127 pg_cursors C false true , 4294967127 0 0
+4294967128 pg_conversion C false true , 4294967128 0 0
+4294967129 pg_constraint C false true , 4294967129 0 0
+4294967130 pg_config C false true , 4294967130 0 0
+4294967131 pg_collation C false true , 4294967131 0 0
+4294967132 pg_class C false true , 4294967132 0 0
+4294967133 pg_cast C false true , 4294967133 0 0
+4294967134 pg_available_extensions C false true , 4294967134 0 0
+4294967135 pg_available_extension_versions C false true , 4294967135 0 0
+4294967136 pg_auth_members C false true , 4294967136 0 0
+4294967137 pg_authid C false true , 4294967137 0 0
+4294967138 pg_attribute C false true , 4294967138 0 0
+4294967139 pg_attrdef C false true , 4294967139 0 0
+4294967140 pg_amproc C false true , 4294967140 0 0
+4294967141 pg_amop C false true , 4294967141 0 0
+4294967142 pg_am C false true , 4294967142 0 0
+4294967143 pg_aggregate C false true , 4294967143 0 0
+4294967145 views C false true , 4294967145 0 0
+4294967146 view_table_usage C false true , 4294967146 0 0
+4294967147 view_routine_usage C false true , 4294967147 0 0
+4294967148 view_column_usage C false true , 4294967148 0 0
+4294967149 user_privileges C false true , 4294967149 0 0
+4294967150 user_mappings C false true , 4294967150 0 0
+4294967151 user_mapping_options C false true , 4294967151 0 0
+4294967152 user_defined_types C false true , 4294967152 0 0
+4294967153 user_attributes C false true , 4294967153 0 0
+4294967154 usage_privileges C false true , 4294967154 0 0
+4294967155 udt_privileges C false true , 4294967155 0 0
+4294967156 type_privileges C false true , 4294967156 0 0
+4294967157 triggers C false true , 4294967157 0 0
+4294967158 triggered_update_columns C false true , 4294967158 0 0
+4294967159 transforms C false true , 4294967159 0 0
+4294967160 tablespaces C false true , 4294967160 0 0
+4294967161 tablespaces_extensions C false true , 4294967161 0 0
+4294967162 tables C false true , 4294967162 0 0
+4294967163 tables_extensions C false true , 4294967163 0 0
+4294967164 table_privileges C false true , 4294967164 0 0
+4294967165 table_constraints_extensions C false true , 4294967165 0 0
+4294967166 table_constraints C false true , 4294967166 0 0
+4294967167 statistics C false true , 4294967167 0 0
+4294967168 st_units_of_measure C false true , 4294967168 0 0
+4294967169 st_spatial_reference_systems C false true , 4294967169 0 0
+4294967170 st_geometry_columns C false true , 4294967170 0 0
+4294967171 session_variables C false true , 4294967171 0 0
+4294967172 sequences C false true , 4294967172 0 0
+4294967173 schema_privileges C false true , 4294967173 0 0
+4294967174 schemata C false true , 4294967174 0 0
+4294967175 schemata_extensions C false true , 4294967175 0 0
+4294967176 sql_sizing C false true , 4294967176 0 0
+4294967177 sql_parts C false true , 4294967177 0 0
+4294967178 sql_implementation_info C false true , 4294967178 0 0
+4294967179 sql_features C false true , 4294967179 0 0
+4294967180 routines C false true , 4294967180 0 0
+4294967181 routine_privileges C false true , 4294967181 0 0
+4294967182 role_usage_grants C false true , 4294967182 0 0
+4294967183 role_udt_grants C false true , 4294967183 0 0
+4294967184 role_table_grants C false true , 4294967184 0 0
+4294967185 role_routine_grants C false true , 4294967185 0 0
+4294967186 role_column_grants C false true , 4294967186 0 0
+4294967187 resource_groups C false true , 4294967187 0 0
+4294967188 referential_constraints C false true , 4294967188 0 0
+4294967189 profiling C false true , 4294967189 0 0
+4294967190 processlist C false true , 4294967190 0 0
+4294967191 plugins C false true , 4294967191 0 0
+4294967192 partitions C false true , 4294967192 0 0
+4294967193 parameters C false true , 4294967193 0 0
+4294967194 optimizer_trace C false true , 4294967194 0 0
+4294967195 keywords C false true , 4294967195 0 0
+4294967196 key_column_usage C false true , 4294967196 0 0
+4294967197 information_schema_catalog_name C false true , 4294967197 0 0
+4294967198 foreign_tables C false true , 4294967198 0 0
+4294967199 foreign_table_options C false true , 4294967199 0 0
+4294967200 foreign_servers C false true , 4294967200 0 0
+4294967201 foreign_server_options C false true , 4294967201 0 0
+4294967202 foreign_data_wrappers C false true , 4294967202 0 0
+4294967203 foreign_data_wrapper_options C false true , 4294967203 0 0
+4294967204 files C false true , 4294967204 0 0
+4294967205 events C false true , 4294967205 0 0
+4294967206 engines C false true , 4294967206 0 0
+4294967207 enabled_roles C false true , 4294967207 0 0
+4294967208 element_types C false true , 4294967208 0 0
+4294967209 domains C false true , 4294967209 0 0
+4294967210 domain_udt_usage C false true , 4294967210 0 0
+4294967211 domain_constraints C false true , 4294967211 0 0
+4294967212 data_type_privileges C false true , 4294967212 0 0
+4294967213 constraint_table_usage C false true , 4294967213 0 0
+4294967214 constraint_column_usage C false true , 4294967214 0 0
+4294967215 columns C false true , 4294967215 0 0
+4294967216 columns_extensions C false true , 4294967216 0 0
+4294967217 column_udt_usage C false true , 4294967217 0 0
+4294967218 column_statistics C false true , 4294967218 0 0
+4294967219 column_privileges C false true , 4294967219 0 0
+4294967220 column_options C false true , 4294967220 0 0
+4294967221 column_domain_usage C false true , 4294967221 0 0
+4294967222 column_column_usage C false true , 4294967222 0 0
+4294967223 collations C false true , 4294967223 0 0
+4294967224 collation_character_set_applicability C false true , 4294967224 0 0
+4294967225 check_constraints C false true , 4294967225 0 0
+4294967226 check_constraint_routine_usage C false true , 4294967226 0 0
+4294967227 character_sets C false true , 4294967227 0 0
+4294967228 attributes C false true , 4294967228 0 0
+4294967229 applicable_roles C false true , 4294967229 0 0
+4294967230 administrable_role_authorizations C false true , 4294967230 0 0
+4294967232 tenant_usage_details C false true , 4294967232 0 0
+4294967233 active_range_feeds C false true , 4294967233 0 0
+4294967234 default_privileges C false true , 4294967234 0 0
+4294967235 regions C false true , 4294967235 0 0
+4294967236 cluster_inflight_traces C false true , 4294967236 0 0
+4294967237 lost_descriptors_with_data C false true , 4294967237 0 0
+4294967238 cross_db_references C false true , 4294967238 0 0
4294967239 cluster_database_privileges C false true , 4294967239 0 0
4294967240 invalid_objects C false true , 4294967240 0 0
4294967241 zones C false true , 4294967241 0 0
@@ -2391,232 +2389,231 @@ oid typname typinput typoutput
100076 _newtype1 array_in array_out array_recv array_send 0 0 0
100077 newtype2 enum_in enum_out enum_recv enum_send 0 0 0
100078 _newtype2 array_in array_out array_recv array_send 0 0 0
-4294967010 spatial_ref_sys record_in record_out record_recv record_send 0 0 0
-4294967011 geometry_columns record_in record_out record_recv record_send 0 0 0
-4294967012 geography_columns record_in record_out record_recv record_send 0 0 0
-4294967014 pg_views record_in record_out record_recv record_send 0 0 0
-4294967015 pg_user record_in record_out record_recv record_send 0 0 0
-4294967016 pg_user_mappings record_in record_out record_recv record_send 0 0 0
-4294967017 pg_user_mapping record_in record_out record_recv record_send 0 0 0
-4294967018 pg_type record_in record_out record_recv record_send 0 0 0
-4294967019 pg_ts_template record_in record_out record_recv record_send 0 0 0
-4294967020 pg_ts_parser record_in record_out record_recv record_send 0 0 0
-4294967021 pg_ts_dict record_in record_out record_recv record_send 0 0 0
-4294967022 pg_ts_config record_in record_out record_recv record_send 0 0 0
-4294967023 pg_ts_config_map record_in record_out record_recv record_send 0 0 0
-4294967024 pg_trigger record_in record_out record_recv record_send 0 0 0
-4294967025 pg_transform record_in record_out record_recv record_send 0 0 0
-4294967026 pg_timezone_names record_in record_out record_recv record_send 0 0 0
-4294967027 pg_timezone_abbrevs record_in record_out record_recv record_send 0 0 0
-4294967028 pg_tablespace record_in record_out record_recv record_send 0 0 0
-4294967029 pg_tables record_in record_out record_recv record_send 0 0 0
-4294967030 pg_subscription record_in record_out record_recv record_send 0 0 0
-4294967031 pg_subscription_rel record_in record_out record_recv record_send 0 0 0
-4294967032 pg_stats record_in record_out record_recv record_send 0 0 0
-4294967033 pg_stats_ext record_in record_out record_recv record_send 0 0 0
-4294967034 pg_statistic record_in record_out record_recv record_send 0 0 0
-4294967035 pg_statistic_ext record_in record_out record_recv record_send 0 0 0
-4294967036 pg_statistic_ext_data record_in record_out record_recv record_send 0 0 0
-4294967037 pg_statio_user_tables record_in record_out record_recv record_send 0 0 0
-4294967038 pg_statio_user_sequences record_in record_out record_recv record_send 0 0 0
-4294967039 pg_statio_user_indexes record_in record_out record_recv record_send 0 0 0
-4294967040 pg_statio_sys_tables record_in record_out record_recv record_send 0 0 0
-4294967041 pg_statio_sys_sequences record_in record_out record_recv record_send 0 0 0
-4294967042 pg_statio_sys_indexes record_in record_out record_recv record_send 0 0 0
-4294967043 pg_statio_all_tables record_in record_out record_recv record_send 0 0 0
-4294967044 pg_statio_all_sequences record_in record_out record_recv record_send 0 0 0
-4294967045 pg_statio_all_indexes record_in record_out record_recv record_send 0 0 0
-4294967046 pg_stat_xact_user_tables record_in record_out record_recv record_send 0 0 0
-4294967047 pg_stat_xact_user_functions record_in record_out record_recv record_send 0 0 0
-4294967048 pg_stat_xact_sys_tables record_in record_out record_recv record_send 0 0 0
-4294967049 pg_stat_xact_all_tables record_in record_out record_recv record_send 0 0 0
-4294967050 pg_stat_wal_receiver record_in record_out record_recv record_send 0 0 0
-4294967051 pg_stat_user_tables record_in record_out record_recv record_send 0 0 0
-4294967052 pg_stat_user_indexes record_in record_out record_recv record_send 0 0 0
-4294967053 pg_stat_user_functions record_in record_out record_recv record_send 0 0 0
-4294967054 pg_stat_sys_tables record_in record_out record_recv record_send 0 0 0
-4294967055 pg_stat_sys_indexes record_in record_out record_recv record_send 0 0 0
-4294967056 pg_stat_subscription record_in record_out record_recv record_send 0 0 0
-4294967057 pg_stat_ssl record_in record_out record_recv record_send 0 0 0
-4294967058 pg_stat_slru record_in record_out record_recv record_send 0 0 0
-4294967059 pg_stat_replication record_in record_out record_recv record_send 0 0 0
-4294967060 pg_stat_progress_vacuum record_in record_out record_recv record_send 0 0 0
-4294967061 pg_stat_progress_create_index record_in record_out record_recv record_send 0 0 0
-4294967062 pg_stat_progress_cluster record_in record_out record_recv record_send 0 0 0
-4294967063 pg_stat_progress_basebackup record_in record_out record_recv record_send 0 0 0
-4294967064 pg_stat_progress_analyze record_in record_out record_recv record_send 0 0 0
-4294967065 pg_stat_gssapi record_in record_out record_recv record_send 0 0 0
-4294967066 pg_stat_database record_in record_out record_recv record_send 0 0 0
-4294967067 pg_stat_database_conflicts record_in record_out record_recv record_send 0 0 0
-4294967068 pg_stat_bgwriter record_in record_out record_recv record_send 0 0 0
-4294967069 pg_stat_archiver record_in record_out record_recv record_send 0 0 0
-4294967070 pg_stat_all_tables record_in record_out record_recv record_send 0 0 0
-4294967071 pg_stat_all_indexes record_in record_out record_recv record_send 0 0 0
-4294967072 pg_stat_activity record_in record_out record_recv record_send 0 0 0
-4294967073 pg_shmem_allocations record_in record_out record_recv record_send 0 0 0
-4294967074 pg_shdepend record_in record_out record_recv record_send 0 0 0
-4294967075 pg_shseclabel record_in record_out record_recv record_send 0 0 0
-4294967076 pg_shdescription record_in record_out record_recv record_send 0 0 0
-4294967077 pg_shadow record_in record_out record_recv record_send 0 0 0
-4294967078 pg_settings record_in record_out record_recv record_send 0 0 0
-4294967079 pg_sequences record_in record_out record_recv record_send 0 0 0
-4294967080 pg_sequence record_in record_out record_recv record_send 0 0 0
-4294967081 pg_seclabel record_in record_out record_recv record_send 0 0 0
-4294967082 pg_seclabels record_in record_out record_recv record_send 0 0 0
-4294967083 pg_rules record_in record_out record_recv record_send 0 0 0
-4294967084 pg_roles record_in record_out record_recv record_send 0 0 0
-4294967085 pg_rewrite record_in record_out record_recv record_send 0 0 0
-4294967086 pg_replication_slots record_in record_out record_recv record_send 0 0 0
-4294967087 pg_replication_origin record_in record_out record_recv record_send 0 0 0
-4294967088 pg_replication_origin_status record_in record_out record_recv record_send 0 0 0
-4294967089 pg_range record_in record_out record_recv record_send 0 0 0
-4294967090 pg_publication_tables record_in record_out record_recv record_send 0 0 0
-4294967091 pg_publication record_in record_out record_recv record_send 0 0 0
-4294967092 pg_publication_rel record_in record_out record_recv record_send 0 0 0
-4294967093 pg_proc record_in record_out record_recv record_send 0 0 0
-4294967094 pg_prepared_xacts record_in record_out record_recv record_send 0 0 0
-4294967095 pg_prepared_statements record_in record_out record_recv record_send 0 0 0
-4294967096 pg_policy record_in record_out record_recv record_send 0 0 0
-4294967097 pg_policies record_in record_out record_recv record_send 0 0 0
-4294967098 pg_partitioned_table record_in record_out record_recv record_send 0 0 0
-4294967099 pg_opfamily record_in record_out record_recv record_send 0 0 0
-4294967100 pg_operator record_in record_out record_recv record_send 0 0 0
-4294967101 pg_opclass record_in record_out record_recv record_send 0 0 0
-4294967102 pg_namespace record_in record_out record_recv record_send 0 0 0
-4294967103 pg_matviews record_in record_out record_recv record_send 0 0 0
-4294967104 pg_locks record_in record_out record_recv record_send 0 0 0
-4294967105 pg_largeobject record_in record_out record_recv record_send 0 0 0
-4294967106 pg_largeobject_metadata record_in record_out record_recv record_send 0 0 0
-4294967107 pg_language record_in record_out record_recv record_send 0 0 0
-4294967108 pg_init_privs record_in record_out record_recv record_send 0 0 0
-4294967109 pg_inherits record_in record_out record_recv record_send 0 0 0
-4294967110 pg_indexes record_in record_out record_recv record_send 0 0 0
-4294967111 pg_index record_in record_out record_recv record_send 0 0 0
-4294967112 pg_hba_file_rules record_in record_out record_recv record_send 0 0 0
-4294967113 pg_group record_in record_out record_recv record_send 0 0 0
-4294967114 pg_foreign_table record_in record_out record_recv record_send 0 0 0
-4294967115 pg_foreign_server record_in record_out record_recv record_send 0 0 0
-4294967116 pg_foreign_data_wrapper record_in record_out record_recv record_send 0 0 0
-4294967117 pg_file_settings record_in record_out record_recv record_send 0 0 0
-4294967118 pg_extension record_in record_out record_recv record_send 0 0 0
-4294967119 pg_event_trigger record_in record_out record_recv record_send 0 0 0
-4294967120 pg_enum record_in record_out record_recv record_send 0 0 0
-4294967121 pg_description record_in record_out record_recv record_send 0 0 0
-4294967122 pg_depend record_in record_out record_recv record_send 0 0 0
-4294967123 pg_default_acl record_in record_out record_recv record_send 0 0 0
-4294967124 pg_db_role_setting record_in record_out record_recv record_send 0 0 0
-4294967125 pg_database record_in record_out record_recv record_send 0 0 0
-4294967126 pg_cursors record_in record_out record_recv record_send 0 0 0
-4294967127 pg_conversion record_in record_out record_recv record_send 0 0 0
-4294967128 pg_constraint record_in record_out record_recv record_send 0 0 0
-4294967129 pg_config record_in record_out record_recv record_send 0 0 0
-4294967130 pg_collation record_in record_out record_recv record_send 0 0 0
-4294967131 pg_class record_in record_out record_recv record_send 0 0 0
-4294967132 pg_cast record_in record_out record_recv record_send 0 0 0
-4294967133 pg_available_extensions record_in record_out record_recv record_send 0 0 0
-4294967134 pg_available_extension_versions record_in record_out record_recv record_send 0 0 0
-4294967135 pg_auth_members record_in record_out record_recv record_send 0 0 0
-4294967136 pg_authid record_in record_out record_recv record_send 0 0 0
-4294967137 pg_attribute record_in record_out record_recv record_send 0 0 0
-4294967138 pg_attrdef record_in record_out record_recv record_send 0 0 0
-4294967139 pg_amproc record_in record_out record_recv record_send 0 0 0
-4294967140 pg_amop record_in record_out record_recv record_send 0 0 0
-4294967141 pg_am record_in record_out record_recv record_send 0 0 0
-4294967142 pg_aggregate record_in record_out record_recv record_send 0 0 0
-4294967144 views record_in record_out record_recv record_send 0 0 0
-4294967145 view_table_usage record_in record_out record_recv record_send 0 0 0
-4294967146 view_routine_usage record_in record_out record_recv record_send 0 0 0
-4294967147 view_column_usage record_in record_out record_recv record_send 0 0 0
-4294967148 user_privileges record_in record_out record_recv record_send 0 0 0
-4294967149 user_mappings record_in record_out record_recv record_send 0 0 0
-4294967150 user_mapping_options record_in record_out record_recv record_send 0 0 0
-4294967151 user_defined_types record_in record_out record_recv record_send 0 0 0
-4294967152 user_attributes record_in record_out record_recv record_send 0 0 0
-4294967153 usage_privileges record_in record_out record_recv record_send 0 0 0
-4294967154 udt_privileges record_in record_out record_recv record_send 0 0 0
-4294967155 type_privileges record_in record_out record_recv record_send 0 0 0
-4294967156 triggers record_in record_out record_recv record_send 0 0 0
-4294967157 triggered_update_columns record_in record_out record_recv record_send 0 0 0
-4294967158 transforms record_in record_out record_recv record_send 0 0 0
-4294967159 tablespaces record_in record_out record_recv record_send 0 0 0
-4294967160 tablespaces_extensions record_in record_out record_recv record_send 0 0 0
-4294967161 tables record_in record_out record_recv record_send 0 0 0
-4294967162 tables_extensions record_in record_out record_recv record_send 0 0 0
-4294967163 table_privileges record_in record_out record_recv record_send 0 0 0
-4294967164 table_constraints_extensions record_in record_out record_recv record_send 0 0 0
-4294967165 table_constraints record_in record_out record_recv record_send 0 0 0
-4294967166 statistics record_in record_out record_recv record_send 0 0 0
-4294967167 st_units_of_measure record_in record_out record_recv record_send 0 0 0
-4294967168 st_spatial_reference_systems record_in record_out record_recv record_send 0 0 0
-4294967169 st_geometry_columns record_in record_out record_recv record_send 0 0 0
-4294967170 session_variables record_in record_out record_recv record_send 0 0 0
-4294967171 sequences record_in record_out record_recv record_send 0 0 0
-4294967172 schema_privileges record_in record_out record_recv record_send 0 0 0
-4294967173 schemata record_in record_out record_recv record_send 0 0 0
-4294967174 schemata_extensions record_in record_out record_recv record_send 0 0 0
-4294967175 sql_sizing record_in record_out record_recv record_send 0 0 0
-4294967176 sql_parts record_in record_out record_recv record_send 0 0 0
-4294967177 sql_implementation_info record_in record_out record_recv record_send 0 0 0
-4294967178 sql_features record_in record_out record_recv record_send 0 0 0
-4294967179 routines record_in record_out record_recv record_send 0 0 0
-4294967180 routine_privileges record_in record_out record_recv record_send 0 0 0
-4294967181 role_usage_grants record_in record_out record_recv record_send 0 0 0
-4294967182 role_udt_grants record_in record_out record_recv record_send 0 0 0
-4294967183 role_table_grants record_in record_out record_recv record_send 0 0 0
-4294967184 role_routine_grants record_in record_out record_recv record_send 0 0 0
-4294967185 role_column_grants record_in record_out record_recv record_send 0 0 0
-4294967186 resource_groups record_in record_out record_recv record_send 0 0 0
-4294967187 referential_constraints record_in record_out record_recv record_send 0 0 0
-4294967188 profiling record_in record_out record_recv record_send 0 0 0
-4294967189 processlist record_in record_out record_recv record_send 0 0 0
-4294967190 plugins record_in record_out record_recv record_send 0 0 0
-4294967191 partitions record_in record_out record_recv record_send 0 0 0
-4294967192 parameters record_in record_out record_recv record_send 0 0 0
-4294967193 optimizer_trace record_in record_out record_recv record_send 0 0 0
-4294967194 keywords record_in record_out record_recv record_send 0 0 0
-4294967195 key_column_usage record_in record_out record_recv record_send 0 0 0
-4294967196 information_schema_catalog_name record_in record_out record_recv record_send 0 0 0
-4294967197 foreign_tables record_in record_out record_recv record_send 0 0 0
-4294967198 foreign_table_options record_in record_out record_recv record_send 0 0 0
-4294967199 foreign_servers record_in record_out record_recv record_send 0 0 0
-4294967200 foreign_server_options record_in record_out record_recv record_send 0 0 0
-4294967201 foreign_data_wrappers record_in record_out record_recv record_send 0 0 0
-4294967202 foreign_data_wrapper_options record_in record_out record_recv record_send 0 0 0
-4294967203 files record_in record_out record_recv record_send 0 0 0
-4294967204 events record_in record_out record_recv record_send 0 0 0
-4294967205 engines record_in record_out record_recv record_send 0 0 0
-4294967206 enabled_roles record_in record_out record_recv record_send 0 0 0
-4294967207 element_types record_in record_out record_recv record_send 0 0 0
-4294967208 domains record_in record_out record_recv record_send 0 0 0
-4294967209 domain_udt_usage record_in record_out record_recv record_send 0 0 0
-4294967210 domain_constraints record_in record_out record_recv record_send 0 0 0
-4294967211 data_type_privileges record_in record_out record_recv record_send 0 0 0
-4294967212 constraint_table_usage record_in record_out record_recv record_send 0 0 0
-4294967213 constraint_column_usage record_in record_out record_recv record_send 0 0 0
-4294967214 columns record_in record_out record_recv record_send 0 0 0
-4294967215 columns_extensions record_in record_out record_recv record_send 0 0 0
-4294967216 column_udt_usage record_in record_out record_recv record_send 0 0 0
-4294967217 column_statistics record_in record_out record_recv record_send 0 0 0
-4294967218 column_privileges record_in record_out record_recv record_send 0 0 0
-4294967219 column_options record_in record_out record_recv record_send 0 0 0
-4294967220 column_domain_usage record_in record_out record_recv record_send 0 0 0
-4294967221 column_column_usage record_in record_out record_recv record_send 0 0 0
-4294967222 collations record_in record_out record_recv record_send 0 0 0
-4294967223 collation_character_set_applicability record_in record_out record_recv record_send 0 0 0
-4294967224 check_constraints record_in record_out record_recv record_send 0 0 0
-4294967225 check_constraint_routine_usage record_in record_out record_recv record_send 0 0 0
-4294967226 character_sets record_in record_out record_recv record_send 0 0 0
-4294967227 attributes record_in record_out record_recv record_send 0 0 0
-4294967228 applicable_roles record_in record_out record_recv record_send 0 0 0
-4294967229 administrable_role_authorizations record_in record_out record_recv record_send 0 0 0
-4294967231 tenant_usage_details record_in record_out record_recv record_send 0 0 0
-4294967232 active_range_feeds record_in record_out record_recv record_send 0 0 0
-4294967233 default_privileges record_in record_out record_recv record_send 0 0 0
-4294967234 regions record_in record_out record_recv record_send 0 0 0
-4294967235 cluster_inflight_traces record_in record_out record_recv record_send 0 0 0
-4294967236 lost_descriptors_with_data record_in record_out record_recv record_send 0 0 0
-4294967237 cross_db_references record_in record_out record_recv record_send 0 0 0
-4294967238 interleaved record_in record_out record_recv record_send 0 0 0
+4294967011 spatial_ref_sys record_in record_out record_recv record_send 0 0 0
+4294967012 geometry_columns record_in record_out record_recv record_send 0 0 0
+4294967013 geography_columns record_in record_out record_recv record_send 0 0 0
+4294967015 pg_views record_in record_out record_recv record_send 0 0 0
+4294967016 pg_user record_in record_out record_recv record_send 0 0 0
+4294967017 pg_user_mappings record_in record_out record_recv record_send 0 0 0
+4294967018 pg_user_mapping record_in record_out record_recv record_send 0 0 0
+4294967019 pg_type record_in record_out record_recv record_send 0 0 0
+4294967020 pg_ts_template record_in record_out record_recv record_send 0 0 0
+4294967021 pg_ts_parser record_in record_out record_recv record_send 0 0 0
+4294967022 pg_ts_dict record_in record_out record_recv record_send 0 0 0
+4294967023 pg_ts_config record_in record_out record_recv record_send 0 0 0
+4294967024 pg_ts_config_map record_in record_out record_recv record_send 0 0 0
+4294967025 pg_trigger record_in record_out record_recv record_send 0 0 0
+4294967026 pg_transform record_in record_out record_recv record_send 0 0 0
+4294967027 pg_timezone_names record_in record_out record_recv record_send 0 0 0
+4294967028 pg_timezone_abbrevs record_in record_out record_recv record_send 0 0 0
+4294967029 pg_tablespace record_in record_out record_recv record_send 0 0 0
+4294967030 pg_tables record_in record_out record_recv record_send 0 0 0
+4294967031 pg_subscription record_in record_out record_recv record_send 0 0 0
+4294967032 pg_subscription_rel record_in record_out record_recv record_send 0 0 0
+4294967033 pg_stats record_in record_out record_recv record_send 0 0 0
+4294967034 pg_stats_ext record_in record_out record_recv record_send 0 0 0
+4294967035 pg_statistic record_in record_out record_recv record_send 0 0 0
+4294967036 pg_statistic_ext record_in record_out record_recv record_send 0 0 0
+4294967037 pg_statistic_ext_data record_in record_out record_recv record_send 0 0 0
+4294967038 pg_statio_user_tables record_in record_out record_recv record_send 0 0 0
+4294967039 pg_statio_user_sequences record_in record_out record_recv record_send 0 0 0
+4294967040 pg_statio_user_indexes record_in record_out record_recv record_send 0 0 0
+4294967041 pg_statio_sys_tables record_in record_out record_recv record_send 0 0 0
+4294967042 pg_statio_sys_sequences record_in record_out record_recv record_send 0 0 0
+4294967043 pg_statio_sys_indexes record_in record_out record_recv record_send 0 0 0
+4294967044 pg_statio_all_tables record_in record_out record_recv record_send 0 0 0
+4294967045 pg_statio_all_sequences record_in record_out record_recv record_send 0 0 0
+4294967046 pg_statio_all_indexes record_in record_out record_recv record_send 0 0 0
+4294967047 pg_stat_xact_user_tables record_in record_out record_recv record_send 0 0 0
+4294967048 pg_stat_xact_user_functions record_in record_out record_recv record_send 0 0 0
+4294967049 pg_stat_xact_sys_tables record_in record_out record_recv record_send 0 0 0
+4294967050 pg_stat_xact_all_tables record_in record_out record_recv record_send 0 0 0
+4294967051 pg_stat_wal_receiver record_in record_out record_recv record_send 0 0 0
+4294967052 pg_stat_user_tables record_in record_out record_recv record_send 0 0 0
+4294967053 pg_stat_user_indexes record_in record_out record_recv record_send 0 0 0
+4294967054 pg_stat_user_functions record_in record_out record_recv record_send 0 0 0
+4294967055 pg_stat_sys_tables record_in record_out record_recv record_send 0 0 0
+4294967056 pg_stat_sys_indexes record_in record_out record_recv record_send 0 0 0
+4294967057 pg_stat_subscription record_in record_out record_recv record_send 0 0 0
+4294967058 pg_stat_ssl record_in record_out record_recv record_send 0 0 0
+4294967059 pg_stat_slru record_in record_out record_recv record_send 0 0 0
+4294967060 pg_stat_replication record_in record_out record_recv record_send 0 0 0
+4294967061 pg_stat_progress_vacuum record_in record_out record_recv record_send 0 0 0
+4294967062 pg_stat_progress_create_index record_in record_out record_recv record_send 0 0 0
+4294967063 pg_stat_progress_cluster record_in record_out record_recv record_send 0 0 0
+4294967064 pg_stat_progress_basebackup record_in record_out record_recv record_send 0 0 0
+4294967065 pg_stat_progress_analyze record_in record_out record_recv record_send 0 0 0
+4294967066 pg_stat_gssapi record_in record_out record_recv record_send 0 0 0
+4294967067 pg_stat_database record_in record_out record_recv record_send 0 0 0
+4294967068 pg_stat_database_conflicts record_in record_out record_recv record_send 0 0 0
+4294967069 pg_stat_bgwriter record_in record_out record_recv record_send 0 0 0
+4294967070 pg_stat_archiver record_in record_out record_recv record_send 0 0 0
+4294967071 pg_stat_all_tables record_in record_out record_recv record_send 0 0 0
+4294967072 pg_stat_all_indexes record_in record_out record_recv record_send 0 0 0
+4294967073 pg_stat_activity record_in record_out record_recv record_send 0 0 0
+4294967074 pg_shmem_allocations record_in record_out record_recv record_send 0 0 0
+4294967075 pg_shdepend record_in record_out record_recv record_send 0 0 0
+4294967076 pg_shseclabel record_in record_out record_recv record_send 0 0 0
+4294967077 pg_shdescription record_in record_out record_recv record_send 0 0 0
+4294967078 pg_shadow record_in record_out record_recv record_send 0 0 0
+4294967079 pg_settings record_in record_out record_recv record_send 0 0 0
+4294967080 pg_sequences record_in record_out record_recv record_send 0 0 0
+4294967081 pg_sequence record_in record_out record_recv record_send 0 0 0
+4294967082 pg_seclabel record_in record_out record_recv record_send 0 0 0
+4294967083 pg_seclabels record_in record_out record_recv record_send 0 0 0
+4294967084 pg_rules record_in record_out record_recv record_send 0 0 0
+4294967085 pg_roles record_in record_out record_recv record_send 0 0 0
+4294967086 pg_rewrite record_in record_out record_recv record_send 0 0 0
+4294967087 pg_replication_slots record_in record_out record_recv record_send 0 0 0
+4294967088 pg_replication_origin record_in record_out record_recv record_send 0 0 0
+4294967089 pg_replication_origin_status record_in record_out record_recv record_send 0 0 0
+4294967090 pg_range record_in record_out record_recv record_send 0 0 0
+4294967091 pg_publication_tables record_in record_out record_recv record_send 0 0 0
+4294967092 pg_publication record_in record_out record_recv record_send 0 0 0
+4294967093 pg_publication_rel record_in record_out record_recv record_send 0 0 0
+4294967094 pg_proc record_in record_out record_recv record_send 0 0 0
+4294967095 pg_prepared_xacts record_in record_out record_recv record_send 0 0 0
+4294967096 pg_prepared_statements record_in record_out record_recv record_send 0 0 0
+4294967097 pg_policy record_in record_out record_recv record_send 0 0 0
+4294967098 pg_policies record_in record_out record_recv record_send 0 0 0
+4294967099 pg_partitioned_table record_in record_out record_recv record_send 0 0 0
+4294967100 pg_opfamily record_in record_out record_recv record_send 0 0 0
+4294967101 pg_operator record_in record_out record_recv record_send 0 0 0
+4294967102 pg_opclass record_in record_out record_recv record_send 0 0 0
+4294967103 pg_namespace record_in record_out record_recv record_send 0 0 0
+4294967104 pg_matviews record_in record_out record_recv record_send 0 0 0
+4294967105 pg_locks record_in record_out record_recv record_send 0 0 0
+4294967106 pg_largeobject record_in record_out record_recv record_send 0 0 0
+4294967107 pg_largeobject_metadata record_in record_out record_recv record_send 0 0 0
+4294967108 pg_language record_in record_out record_recv record_send 0 0 0
+4294967109 pg_init_privs record_in record_out record_recv record_send 0 0 0
+4294967110 pg_inherits record_in record_out record_recv record_send 0 0 0
+4294967111 pg_indexes record_in record_out record_recv record_send 0 0 0
+4294967112 pg_index record_in record_out record_recv record_send 0 0 0
+4294967113 pg_hba_file_rules record_in record_out record_recv record_send 0 0 0
+4294967114 pg_group record_in record_out record_recv record_send 0 0 0
+4294967115 pg_foreign_table record_in record_out record_recv record_send 0 0 0
+4294967116 pg_foreign_server record_in record_out record_recv record_send 0 0 0
+4294967117 pg_foreign_data_wrapper record_in record_out record_recv record_send 0 0 0
+4294967118 pg_file_settings record_in record_out record_recv record_send 0 0 0
+4294967119 pg_extension record_in record_out record_recv record_send 0 0 0
+4294967120 pg_event_trigger record_in record_out record_recv record_send 0 0 0
+4294967121 pg_enum record_in record_out record_recv record_send 0 0 0
+4294967122 pg_description record_in record_out record_recv record_send 0 0 0
+4294967123 pg_depend record_in record_out record_recv record_send 0 0 0
+4294967124 pg_default_acl record_in record_out record_recv record_send 0 0 0
+4294967125 pg_db_role_setting record_in record_out record_recv record_send 0 0 0
+4294967126 pg_database record_in record_out record_recv record_send 0 0 0
+4294967127 pg_cursors record_in record_out record_recv record_send 0 0 0
+4294967128 pg_conversion record_in record_out record_recv record_send 0 0 0
+4294967129 pg_constraint record_in record_out record_recv record_send 0 0 0
+4294967130 pg_config record_in record_out record_recv record_send 0 0 0
+4294967131 pg_collation record_in record_out record_recv record_send 0 0 0
+4294967132 pg_class record_in record_out record_recv record_send 0 0 0
+4294967133 pg_cast record_in record_out record_recv record_send 0 0 0
+4294967134 pg_available_extensions record_in record_out record_recv record_send 0 0 0
+4294967135 pg_available_extension_versions record_in record_out record_recv record_send 0 0 0
+4294967136 pg_auth_members record_in record_out record_recv record_send 0 0 0
+4294967137 pg_authid record_in record_out record_recv record_send 0 0 0
+4294967138 pg_attribute record_in record_out record_recv record_send 0 0 0
+4294967139 pg_attrdef record_in record_out record_recv record_send 0 0 0
+4294967140 pg_amproc record_in record_out record_recv record_send 0 0 0
+4294967141 pg_amop record_in record_out record_recv record_send 0 0 0
+4294967142 pg_am record_in record_out record_recv record_send 0 0 0
+4294967143 pg_aggregate record_in record_out record_recv record_send 0 0 0
+4294967145 views record_in record_out record_recv record_send 0 0 0
+4294967146 view_table_usage record_in record_out record_recv record_send 0 0 0
+4294967147 view_routine_usage record_in record_out record_recv record_send 0 0 0
+4294967148 view_column_usage record_in record_out record_recv record_send 0 0 0
+4294967149 user_privileges record_in record_out record_recv record_send 0 0 0
+4294967150 user_mappings record_in record_out record_recv record_send 0 0 0
+4294967151 user_mapping_options record_in record_out record_recv record_send 0 0 0
+4294967152 user_defined_types record_in record_out record_recv record_send 0 0 0
+4294967153 user_attributes record_in record_out record_recv record_send 0 0 0
+4294967154 usage_privileges record_in record_out record_recv record_send 0 0 0
+4294967155 udt_privileges record_in record_out record_recv record_send 0 0 0
+4294967156 type_privileges record_in record_out record_recv record_send 0 0 0
+4294967157 triggers record_in record_out record_recv record_send 0 0 0
+4294967158 triggered_update_columns record_in record_out record_recv record_send 0 0 0
+4294967159 transforms record_in record_out record_recv record_send 0 0 0
+4294967160 tablespaces record_in record_out record_recv record_send 0 0 0
+4294967161 tablespaces_extensions record_in record_out record_recv record_send 0 0 0
+4294967162 tables record_in record_out record_recv record_send 0 0 0
+4294967163 tables_extensions record_in record_out record_recv record_send 0 0 0
+4294967164 table_privileges record_in record_out record_recv record_send 0 0 0
+4294967165 table_constraints_extensions record_in record_out record_recv record_send 0 0 0
+4294967166 table_constraints record_in record_out record_recv record_send 0 0 0
+4294967167 statistics record_in record_out record_recv record_send 0 0 0
+4294967168 st_units_of_measure record_in record_out record_recv record_send 0 0 0
+4294967169 st_spatial_reference_systems record_in record_out record_recv record_send 0 0 0
+4294967170 st_geometry_columns record_in record_out record_recv record_send 0 0 0
+4294967171 session_variables record_in record_out record_recv record_send 0 0 0
+4294967172 sequences record_in record_out record_recv record_send 0 0 0
+4294967173 schema_privileges record_in record_out record_recv record_send 0 0 0
+4294967174 schemata record_in record_out record_recv record_send 0 0 0
+4294967175 schemata_extensions record_in record_out record_recv record_send 0 0 0
+4294967176 sql_sizing record_in record_out record_recv record_send 0 0 0
+4294967177 sql_parts record_in record_out record_recv record_send 0 0 0
+4294967178 sql_implementation_info record_in record_out record_recv record_send 0 0 0
+4294967179 sql_features record_in record_out record_recv record_send 0 0 0
+4294967180 routines record_in record_out record_recv record_send 0 0 0
+4294967181 routine_privileges record_in record_out record_recv record_send 0 0 0
+4294967182 role_usage_grants record_in record_out record_recv record_send 0 0 0
+4294967183 role_udt_grants record_in record_out record_recv record_send 0 0 0
+4294967184 role_table_grants record_in record_out record_recv record_send 0 0 0
+4294967185 role_routine_grants record_in record_out record_recv record_send 0 0 0
+4294967186 role_column_grants record_in record_out record_recv record_send 0 0 0
+4294967187 resource_groups record_in record_out record_recv record_send 0 0 0
+4294967188 referential_constraints record_in record_out record_recv record_send 0 0 0
+4294967189 profiling record_in record_out record_recv record_send 0 0 0
+4294967190 processlist record_in record_out record_recv record_send 0 0 0
+4294967191 plugins record_in record_out record_recv record_send 0 0 0
+4294967192 partitions record_in record_out record_recv record_send 0 0 0
+4294967193 parameters record_in record_out record_recv record_send 0 0 0
+4294967194 optimizer_trace record_in record_out record_recv record_send 0 0 0
+4294967195 keywords record_in record_out record_recv record_send 0 0 0
+4294967196 key_column_usage record_in record_out record_recv record_send 0 0 0
+4294967197 information_schema_catalog_name record_in record_out record_recv record_send 0 0 0
+4294967198 foreign_tables record_in record_out record_recv record_send 0 0 0
+4294967199 foreign_table_options record_in record_out record_recv record_send 0 0 0
+4294967200 foreign_servers record_in record_out record_recv record_send 0 0 0
+4294967201 foreign_server_options record_in record_out record_recv record_send 0 0 0
+4294967202 foreign_data_wrappers record_in record_out record_recv record_send 0 0 0
+4294967203 foreign_data_wrapper_options record_in record_out record_recv record_send 0 0 0
+4294967204 files record_in record_out record_recv record_send 0 0 0
+4294967205 events record_in record_out record_recv record_send 0 0 0
+4294967206 engines record_in record_out record_recv record_send 0 0 0
+4294967207 enabled_roles record_in record_out record_recv record_send 0 0 0
+4294967208 element_types record_in record_out record_recv record_send 0 0 0
+4294967209 domains record_in record_out record_recv record_send 0 0 0
+4294967210 domain_udt_usage record_in record_out record_recv record_send 0 0 0
+4294967211 domain_constraints record_in record_out record_recv record_send 0 0 0
+4294967212 data_type_privileges record_in record_out record_recv record_send 0 0 0
+4294967213 constraint_table_usage record_in record_out record_recv record_send 0 0 0
+4294967214 constraint_column_usage record_in record_out record_recv record_send 0 0 0
+4294967215 columns record_in record_out record_recv record_send 0 0 0
+4294967216 columns_extensions record_in record_out record_recv record_send 0 0 0
+4294967217 column_udt_usage record_in record_out record_recv record_send 0 0 0
+4294967218 column_statistics record_in record_out record_recv record_send 0 0 0
+4294967219 column_privileges record_in record_out record_recv record_send 0 0 0
+4294967220 column_options record_in record_out record_recv record_send 0 0 0
+4294967221 column_domain_usage record_in record_out record_recv record_send 0 0 0
+4294967222 column_column_usage record_in record_out record_recv record_send 0 0 0
+4294967223 collations record_in record_out record_recv record_send 0 0 0
+4294967224 collation_character_set_applicability record_in record_out record_recv record_send 0 0 0
+4294967225 check_constraints record_in record_out record_recv record_send 0 0 0
+4294967226 check_constraint_routine_usage record_in record_out record_recv record_send 0 0 0
+4294967227 character_sets record_in record_out record_recv record_send 0 0 0
+4294967228 attributes record_in record_out record_recv record_send 0 0 0
+4294967229 applicable_roles record_in record_out record_recv record_send 0 0 0
+4294967230 administrable_role_authorizations record_in record_out record_recv record_send 0 0 0
+4294967232 tenant_usage_details record_in record_out record_recv record_send 0 0 0
+4294967233 active_range_feeds record_in record_out record_recv record_send 0 0 0
+4294967234 default_privileges record_in record_out record_recv record_send 0 0 0
+4294967235 regions record_in record_out record_recv record_send 0 0 0
+4294967236 cluster_inflight_traces record_in record_out record_recv record_send 0 0 0
+4294967237 lost_descriptors_with_data record_in record_out record_recv record_send 0 0 0
+4294967238 cross_db_references record_in record_out record_recv record_send 0 0 0
4294967239 cluster_database_privileges record_in record_out record_recv record_send 0 0 0
4294967240 invalid_objects record_in record_out record_recv record_send 0 0 0
4294967241 zones record_in record_out record_recv record_send 0 0 0
@@ -2776,232 +2773,231 @@ oid typname typalign typstorage typnotn
100076 _newtype1 NULL NULL false 0 -1
100077 newtype2 NULL NULL false 0 -1
100078 _newtype2 NULL NULL false 0 -1
-4294967010 spatial_ref_sys NULL NULL false 0 -1
-4294967011 geometry_columns NULL NULL false 0 -1
-4294967012 geography_columns NULL NULL false 0 -1
-4294967014 pg_views NULL NULL false 0 -1
-4294967015 pg_user NULL NULL false 0 -1
-4294967016 pg_user_mappings NULL NULL false 0 -1
-4294967017 pg_user_mapping NULL NULL false 0 -1
-4294967018 pg_type NULL NULL false 0 -1
-4294967019 pg_ts_template NULL NULL false 0 -1
-4294967020 pg_ts_parser NULL NULL false 0 -1
-4294967021 pg_ts_dict NULL NULL false 0 -1
-4294967022 pg_ts_config NULL NULL false 0 -1
-4294967023 pg_ts_config_map NULL NULL false 0 -1
-4294967024 pg_trigger NULL NULL false 0 -1
-4294967025 pg_transform NULL NULL false 0 -1
-4294967026 pg_timezone_names NULL NULL false 0 -1
-4294967027 pg_timezone_abbrevs NULL NULL false 0 -1
-4294967028 pg_tablespace NULL NULL false 0 -1
-4294967029 pg_tables NULL NULL false 0 -1
-4294967030 pg_subscription NULL NULL false 0 -1
-4294967031 pg_subscription_rel NULL NULL false 0 -1
-4294967032 pg_stats NULL NULL false 0 -1
-4294967033 pg_stats_ext NULL NULL false 0 -1
-4294967034 pg_statistic NULL NULL false 0 -1
-4294967035 pg_statistic_ext NULL NULL false 0 -1
-4294967036 pg_statistic_ext_data NULL NULL false 0 -1
-4294967037 pg_statio_user_tables NULL NULL false 0 -1
-4294967038 pg_statio_user_sequences NULL NULL false 0 -1
-4294967039 pg_statio_user_indexes NULL NULL false 0 -1
-4294967040 pg_statio_sys_tables NULL NULL false 0 -1
-4294967041 pg_statio_sys_sequences NULL NULL false 0 -1
-4294967042 pg_statio_sys_indexes NULL NULL false 0 -1
-4294967043 pg_statio_all_tables NULL NULL false 0 -1
-4294967044 pg_statio_all_sequences NULL NULL false 0 -1
-4294967045 pg_statio_all_indexes NULL NULL false 0 -1
-4294967046 pg_stat_xact_user_tables NULL NULL false 0 -1
-4294967047 pg_stat_xact_user_functions NULL NULL false 0 -1
-4294967048 pg_stat_xact_sys_tables NULL NULL false 0 -1
-4294967049 pg_stat_xact_all_tables NULL NULL false 0 -1
-4294967050 pg_stat_wal_receiver NULL NULL false 0 -1
-4294967051 pg_stat_user_tables NULL NULL false 0 -1
-4294967052 pg_stat_user_indexes NULL NULL false 0 -1
-4294967053 pg_stat_user_functions NULL NULL false 0 -1
-4294967054 pg_stat_sys_tables NULL NULL false 0 -1
-4294967055 pg_stat_sys_indexes NULL NULL false 0 -1
-4294967056 pg_stat_subscription NULL NULL false 0 -1
-4294967057 pg_stat_ssl NULL NULL false 0 -1
-4294967058 pg_stat_slru NULL NULL false 0 -1
-4294967059 pg_stat_replication NULL NULL false 0 -1
-4294967060 pg_stat_progress_vacuum NULL NULL false 0 -1
-4294967061 pg_stat_progress_create_index NULL NULL false 0 -1
-4294967062 pg_stat_progress_cluster NULL NULL false 0 -1
-4294967063 pg_stat_progress_basebackup NULL NULL false 0 -1
-4294967064 pg_stat_progress_analyze NULL NULL false 0 -1
-4294967065 pg_stat_gssapi NULL NULL false 0 -1
-4294967066 pg_stat_database NULL NULL false 0 -1
-4294967067 pg_stat_database_conflicts NULL NULL false 0 -1
-4294967068 pg_stat_bgwriter NULL NULL false 0 -1
-4294967069 pg_stat_archiver NULL NULL false 0 -1
-4294967070 pg_stat_all_tables NULL NULL false 0 -1
-4294967071 pg_stat_all_indexes NULL NULL false 0 -1
-4294967072 pg_stat_activity NULL NULL false 0 -1
-4294967073 pg_shmem_allocations NULL NULL false 0 -1
-4294967074 pg_shdepend NULL NULL false 0 -1
-4294967075 pg_shseclabel NULL NULL false 0 -1
-4294967076 pg_shdescription NULL NULL false 0 -1
-4294967077 pg_shadow NULL NULL false 0 -1
-4294967078 pg_settings NULL NULL false 0 -1
-4294967079 pg_sequences NULL NULL false 0 -1
-4294967080 pg_sequence NULL NULL false 0 -1
-4294967081 pg_seclabel NULL NULL false 0 -1
-4294967082 pg_seclabels NULL NULL false 0 -1
-4294967083 pg_rules NULL NULL false 0 -1
-4294967084 pg_roles NULL NULL false 0 -1
-4294967085 pg_rewrite NULL NULL false 0 -1
-4294967086 pg_replication_slots NULL NULL false 0 -1
-4294967087 pg_replication_origin NULL NULL false 0 -1
-4294967088 pg_replication_origin_status NULL NULL false 0 -1
-4294967089 pg_range NULL NULL false 0 -1
-4294967090 pg_publication_tables NULL NULL false 0 -1
-4294967091 pg_publication NULL NULL false 0 -1
-4294967092 pg_publication_rel NULL NULL false 0 -1
-4294967093 pg_proc NULL NULL false 0 -1
-4294967094 pg_prepared_xacts NULL NULL false 0 -1
-4294967095 pg_prepared_statements NULL NULL false 0 -1
-4294967096 pg_policy NULL NULL false 0 -1
-4294967097 pg_policies NULL NULL false 0 -1
-4294967098 pg_partitioned_table NULL NULL false 0 -1
-4294967099 pg_opfamily NULL NULL false 0 -1
-4294967100 pg_operator NULL NULL false 0 -1
-4294967101 pg_opclass NULL NULL false 0 -1
-4294967102 pg_namespace NULL NULL false 0 -1
-4294967103 pg_matviews NULL NULL false 0 -1
-4294967104 pg_locks NULL NULL false 0 -1
-4294967105 pg_largeobject NULL NULL false 0 -1
-4294967106 pg_largeobject_metadata NULL NULL false 0 -1
-4294967107 pg_language NULL NULL false 0 -1
-4294967108 pg_init_privs NULL NULL false 0 -1
-4294967109 pg_inherits NULL NULL false 0 -1
-4294967110 pg_indexes NULL NULL false 0 -1
-4294967111 pg_index NULL NULL false 0 -1
-4294967112 pg_hba_file_rules NULL NULL false 0 -1
-4294967113 pg_group NULL NULL false 0 -1
-4294967114 pg_foreign_table NULL NULL false 0 -1
-4294967115 pg_foreign_server NULL NULL false 0 -1
-4294967116 pg_foreign_data_wrapper NULL NULL false 0 -1
-4294967117 pg_file_settings NULL NULL false 0 -1
-4294967118 pg_extension NULL NULL false 0 -1
-4294967119 pg_event_trigger NULL NULL false 0 -1
-4294967120 pg_enum NULL NULL false 0 -1
-4294967121 pg_description NULL NULL false 0 -1
-4294967122 pg_depend NULL NULL false 0 -1
-4294967123 pg_default_acl NULL NULL false 0 -1
-4294967124 pg_db_role_setting NULL NULL false 0 -1
-4294967125 pg_database NULL NULL false 0 -1
-4294967126 pg_cursors NULL NULL false 0 -1
-4294967127 pg_conversion NULL NULL false 0 -1
-4294967128 pg_constraint NULL NULL false 0 -1
-4294967129 pg_config NULL NULL false 0 -1
-4294967130 pg_collation NULL NULL false 0 -1
-4294967131 pg_class NULL NULL false 0 -1
-4294967132 pg_cast NULL NULL false 0 -1
-4294967133 pg_available_extensions NULL NULL false 0 -1
-4294967134 pg_available_extension_versions NULL NULL false 0 -1
-4294967135 pg_auth_members NULL NULL false 0 -1
-4294967136 pg_authid NULL NULL false 0 -1
-4294967137 pg_attribute NULL NULL false 0 -1
-4294967138 pg_attrdef NULL NULL false 0 -1
-4294967139 pg_amproc NULL NULL false 0 -1
-4294967140 pg_amop NULL NULL false 0 -1
-4294967141 pg_am NULL NULL false 0 -1
-4294967142 pg_aggregate NULL NULL false 0 -1
-4294967144 views NULL NULL false 0 -1
-4294967145 view_table_usage NULL NULL false 0 -1
-4294967146 view_routine_usage NULL NULL false 0 -1
-4294967147 view_column_usage NULL NULL false 0 -1
-4294967148 user_privileges NULL NULL false 0 -1
-4294967149 user_mappings NULL NULL false 0 -1
-4294967150 user_mapping_options NULL NULL false 0 -1
-4294967151 user_defined_types NULL NULL false 0 -1
-4294967152 user_attributes NULL NULL false 0 -1
-4294967153 usage_privileges NULL NULL false 0 -1
-4294967154 udt_privileges NULL NULL false 0 -1
-4294967155 type_privileges NULL NULL false 0 -1
-4294967156 triggers NULL NULL false 0 -1
-4294967157 triggered_update_columns NULL NULL false 0 -1
-4294967158 transforms NULL NULL false 0 -1
-4294967159 tablespaces NULL NULL false 0 -1
-4294967160 tablespaces_extensions NULL NULL false 0 -1
-4294967161 tables NULL NULL false 0 -1
-4294967162 tables_extensions NULL NULL false 0 -1
-4294967163 table_privileges NULL NULL false 0 -1
-4294967164 table_constraints_extensions NULL NULL false 0 -1
-4294967165 table_constraints NULL NULL false 0 -1
-4294967166 statistics NULL NULL false 0 -1
-4294967167 st_units_of_measure NULL NULL false 0 -1
-4294967168 st_spatial_reference_systems NULL NULL false 0 -1
-4294967169 st_geometry_columns NULL NULL false 0 -1
-4294967170 session_variables NULL NULL false 0 -1
-4294967171 sequences NULL NULL false 0 -1
-4294967172 schema_privileges NULL NULL false 0 -1
-4294967173 schemata NULL NULL false 0 -1
-4294967174 schemata_extensions NULL NULL false 0 -1
-4294967175 sql_sizing NULL NULL false 0 -1
-4294967176 sql_parts NULL NULL false 0 -1
-4294967177 sql_implementation_info NULL NULL false 0 -1
-4294967178 sql_features NULL NULL false 0 -1
-4294967179 routines NULL NULL false 0 -1
-4294967180 routine_privileges NULL NULL false 0 -1
-4294967181 role_usage_grants NULL NULL false 0 -1
-4294967182 role_udt_grants NULL NULL false 0 -1
-4294967183 role_table_grants NULL NULL false 0 -1
-4294967184 role_routine_grants NULL NULL false 0 -1
-4294967185 role_column_grants NULL NULL false 0 -1
-4294967186 resource_groups NULL NULL false 0 -1
-4294967187 referential_constraints NULL NULL false 0 -1
-4294967188 profiling NULL NULL false 0 -1
-4294967189 processlist NULL NULL false 0 -1
-4294967190 plugins NULL NULL false 0 -1
-4294967191 partitions NULL NULL false 0 -1
-4294967192 parameters NULL NULL false 0 -1
-4294967193 optimizer_trace NULL NULL false 0 -1
-4294967194 keywords NULL NULL false 0 -1
-4294967195 key_column_usage NULL NULL false 0 -1
-4294967196 information_schema_catalog_name NULL NULL false 0 -1
-4294967197 foreign_tables NULL NULL false 0 -1
-4294967198 foreign_table_options NULL NULL false 0 -1
-4294967199 foreign_servers NULL NULL false 0 -1
-4294967200 foreign_server_options NULL NULL false 0 -1
-4294967201 foreign_data_wrappers NULL NULL false 0 -1
-4294967202 foreign_data_wrapper_options NULL NULL false 0 -1
-4294967203 files NULL NULL false 0 -1
-4294967204 events NULL NULL false 0 -1
-4294967205 engines NULL NULL false 0 -1
-4294967206 enabled_roles NULL NULL false 0 -1
-4294967207 element_types NULL NULL false 0 -1
-4294967208 domains NULL NULL false 0 -1
-4294967209 domain_udt_usage NULL NULL false 0 -1
-4294967210 domain_constraints NULL NULL false 0 -1
-4294967211 data_type_privileges NULL NULL false 0 -1
-4294967212 constraint_table_usage NULL NULL false 0 -1
-4294967213 constraint_column_usage NULL NULL false 0 -1
-4294967214 columns NULL NULL false 0 -1
-4294967215 columns_extensions NULL NULL false 0 -1
-4294967216 column_udt_usage NULL NULL false 0 -1
-4294967217 column_statistics NULL NULL false 0 -1
-4294967218 column_privileges NULL NULL false 0 -1
-4294967219 column_options NULL NULL false 0 -1
-4294967220 column_domain_usage NULL NULL false 0 -1
-4294967221 column_column_usage NULL NULL false 0 -1
-4294967222 collations NULL NULL false 0 -1
-4294967223 collation_character_set_applicability NULL NULL false 0 -1
-4294967224 check_constraints NULL NULL false 0 -1
-4294967225 check_constraint_routine_usage NULL NULL false 0 -1
-4294967226 character_sets NULL NULL false 0 -1
-4294967227 attributes NULL NULL false 0 -1
-4294967228 applicable_roles NULL NULL false 0 -1
-4294967229 administrable_role_authorizations NULL NULL false 0 -1
-4294967231 tenant_usage_details NULL NULL false 0 -1
-4294967232 active_range_feeds NULL NULL false 0 -1
-4294967233 default_privileges NULL NULL false 0 -1
-4294967234 regions NULL NULL false 0 -1
-4294967235 cluster_inflight_traces NULL NULL false 0 -1
-4294967236 lost_descriptors_with_data NULL NULL false 0 -1
-4294967237 cross_db_references NULL NULL false 0 -1
-4294967238 interleaved NULL NULL false 0 -1
+4294967011 spatial_ref_sys NULL NULL false 0 -1
+4294967012 geometry_columns NULL NULL false 0 -1
+4294967013 geography_columns NULL NULL false 0 -1
+4294967015 pg_views NULL NULL false 0 -1
+4294967016 pg_user NULL NULL false 0 -1
+4294967017 pg_user_mappings NULL NULL false 0 -1
+4294967018 pg_user_mapping NULL NULL false 0 -1
+4294967019 pg_type NULL NULL false 0 -1
+4294967020 pg_ts_template NULL NULL false 0 -1
+4294967021 pg_ts_parser NULL NULL false 0 -1
+4294967022 pg_ts_dict NULL NULL false 0 -1
+4294967023 pg_ts_config NULL NULL false 0 -1
+4294967024 pg_ts_config_map NULL NULL false 0 -1
+4294967025 pg_trigger NULL NULL false 0 -1
+4294967026 pg_transform NULL NULL false 0 -1
+4294967027 pg_timezone_names NULL NULL false 0 -1
+4294967028 pg_timezone_abbrevs NULL NULL false 0 -1
+4294967029 pg_tablespace NULL NULL false 0 -1
+4294967030 pg_tables NULL NULL false 0 -1
+4294967031 pg_subscription NULL NULL false 0 -1
+4294967032 pg_subscription_rel NULL NULL false 0 -1
+4294967033 pg_stats NULL NULL false 0 -1
+4294967034 pg_stats_ext NULL NULL false 0 -1
+4294967035 pg_statistic NULL NULL false 0 -1
+4294967036 pg_statistic_ext NULL NULL false 0 -1
+4294967037 pg_statistic_ext_data NULL NULL false 0 -1
+4294967038 pg_statio_user_tables NULL NULL false 0 -1
+4294967039 pg_statio_user_sequences NULL NULL false 0 -1
+4294967040 pg_statio_user_indexes NULL NULL false 0 -1
+4294967041 pg_statio_sys_tables NULL NULL false 0 -1
+4294967042 pg_statio_sys_sequences NULL NULL false 0 -1
+4294967043 pg_statio_sys_indexes NULL NULL false 0 -1
+4294967044 pg_statio_all_tables NULL NULL false 0 -1
+4294967045 pg_statio_all_sequences NULL NULL false 0 -1
+4294967046 pg_statio_all_indexes NULL NULL false 0 -1
+4294967047 pg_stat_xact_user_tables NULL NULL false 0 -1
+4294967048 pg_stat_xact_user_functions NULL NULL false 0 -1
+4294967049 pg_stat_xact_sys_tables NULL NULL false 0 -1
+4294967050 pg_stat_xact_all_tables NULL NULL false 0 -1
+4294967051 pg_stat_wal_receiver NULL NULL false 0 -1
+4294967052 pg_stat_user_tables NULL NULL false 0 -1
+4294967053 pg_stat_user_indexes NULL NULL false 0 -1
+4294967054 pg_stat_user_functions NULL NULL false 0 -1
+4294967055 pg_stat_sys_tables NULL NULL false 0 -1
+4294967056 pg_stat_sys_indexes NULL NULL false 0 -1
+4294967057 pg_stat_subscription NULL NULL false 0 -1
+4294967058 pg_stat_ssl NULL NULL false 0 -1
+4294967059 pg_stat_slru NULL NULL false 0 -1
+4294967060 pg_stat_replication NULL NULL false 0 -1
+4294967061 pg_stat_progress_vacuum NULL NULL false 0 -1
+4294967062 pg_stat_progress_create_index NULL NULL false 0 -1
+4294967063 pg_stat_progress_cluster NULL NULL false 0 -1
+4294967064 pg_stat_progress_basebackup NULL NULL false 0 -1
+4294967065 pg_stat_progress_analyze NULL NULL false 0 -1
+4294967066 pg_stat_gssapi NULL NULL false 0 -1
+4294967067 pg_stat_database NULL NULL false 0 -1
+4294967068 pg_stat_database_conflicts NULL NULL false 0 -1
+4294967069 pg_stat_bgwriter NULL NULL false 0 -1
+4294967070 pg_stat_archiver NULL NULL false 0 -1
+4294967071 pg_stat_all_tables NULL NULL false 0 -1
+4294967072 pg_stat_all_indexes NULL NULL false 0 -1
+4294967073 pg_stat_activity NULL NULL false 0 -1
+4294967074 pg_shmem_allocations NULL NULL false 0 -1
+4294967075 pg_shdepend NULL NULL false 0 -1
+4294967076 pg_shseclabel NULL NULL false 0 -1
+4294967077 pg_shdescription NULL NULL false 0 -1
+4294967078 pg_shadow NULL NULL false 0 -1
+4294967079 pg_settings NULL NULL false 0 -1
+4294967080 pg_sequences NULL NULL false 0 -1
+4294967081 pg_sequence NULL NULL false 0 -1
+4294967082 pg_seclabel NULL NULL false 0 -1
+4294967083 pg_seclabels NULL NULL false 0 -1
+4294967084 pg_rules NULL NULL false 0 -1
+4294967085 pg_roles NULL NULL false 0 -1
+4294967086 pg_rewrite NULL NULL false 0 -1
+4294967087 pg_replication_slots NULL NULL false 0 -1
+4294967088 pg_replication_origin NULL NULL false 0 -1
+4294967089 pg_replication_origin_status NULL NULL false 0 -1
+4294967090 pg_range NULL NULL false 0 -1
+4294967091 pg_publication_tables NULL NULL false 0 -1
+4294967092 pg_publication NULL NULL false 0 -1
+4294967093 pg_publication_rel NULL NULL false 0 -1
+4294967094 pg_proc NULL NULL false 0 -1
+4294967095 pg_prepared_xacts NULL NULL false 0 -1
+4294967096 pg_prepared_statements NULL NULL false 0 -1
+4294967097 pg_policy NULL NULL false 0 -1
+4294967098 pg_policies NULL NULL false 0 -1
+4294967099 pg_partitioned_table NULL NULL false 0 -1
+4294967100 pg_opfamily NULL NULL false 0 -1
+4294967101 pg_operator NULL NULL false 0 -1
+4294967102 pg_opclass NULL NULL false 0 -1
+4294967103 pg_namespace NULL NULL false 0 -1
+4294967104 pg_matviews NULL NULL false 0 -1
+4294967105 pg_locks NULL NULL false 0 -1
+4294967106 pg_largeobject NULL NULL false 0 -1
+4294967107 pg_largeobject_metadata NULL NULL false 0 -1
+4294967108 pg_language NULL NULL false 0 -1
+4294967109 pg_init_privs NULL NULL false 0 -1
+4294967110 pg_inherits NULL NULL false 0 -1
+4294967111 pg_indexes NULL NULL false 0 -1
+4294967112 pg_index NULL NULL false 0 -1
+4294967113 pg_hba_file_rules NULL NULL false 0 -1
+4294967114 pg_group NULL NULL false 0 -1
+4294967115 pg_foreign_table NULL NULL false 0 -1
+4294967116 pg_foreign_server NULL NULL false 0 -1
+4294967117 pg_foreign_data_wrapper NULL NULL false 0 -1
+4294967118 pg_file_settings NULL NULL false 0 -1
+4294967119 pg_extension NULL NULL false 0 -1
+4294967120 pg_event_trigger NULL NULL false 0 -1
+4294967121 pg_enum NULL NULL false 0 -1
+4294967122 pg_description NULL NULL false 0 -1
+4294967123 pg_depend NULL NULL false 0 -1
+4294967124 pg_default_acl NULL NULL false 0 -1
+4294967125 pg_db_role_setting NULL NULL false 0 -1
+4294967126 pg_database NULL NULL false 0 -1
+4294967127 pg_cursors NULL NULL false 0 -1
+4294967128 pg_conversion NULL NULL false 0 -1
+4294967129 pg_constraint NULL NULL false 0 -1
+4294967130 pg_config NULL NULL false 0 -1
+4294967131 pg_collation NULL NULL false 0 -1
+4294967132 pg_class NULL NULL false 0 -1
+4294967133 pg_cast NULL NULL false 0 -1
+4294967134 pg_available_extensions NULL NULL false 0 -1
+4294967135 pg_available_extension_versions NULL NULL false 0 -1
+4294967136 pg_auth_members NULL NULL false 0 -1
+4294967137 pg_authid NULL NULL false 0 -1
+4294967138 pg_attribute NULL NULL false 0 -1
+4294967139 pg_attrdef NULL NULL false 0 -1
+4294967140 pg_amproc NULL NULL false 0 -1
+4294967141 pg_amop NULL NULL false 0 -1
+4294967142 pg_am NULL NULL false 0 -1
+4294967143 pg_aggregate NULL NULL false 0 -1
+4294967145 views NULL NULL false 0 -1
+4294967146 view_table_usage NULL NULL false 0 -1
+4294967147 view_routine_usage NULL NULL false 0 -1
+4294967148 view_column_usage NULL NULL false 0 -1
+4294967149 user_privileges NULL NULL false 0 -1
+4294967150 user_mappings NULL NULL false 0 -1
+4294967151 user_mapping_options NULL NULL false 0 -1
+4294967152 user_defined_types NULL NULL false 0 -1
+4294967153 user_attributes NULL NULL false 0 -1
+4294967154 usage_privileges NULL NULL false 0 -1
+4294967155 udt_privileges NULL NULL false 0 -1
+4294967156 type_privileges NULL NULL false 0 -1
+4294967157 triggers NULL NULL false 0 -1
+4294967158 triggered_update_columns NULL NULL false 0 -1
+4294967159 transforms NULL NULL false 0 -1
+4294967160 tablespaces NULL NULL false 0 -1
+4294967161 tablespaces_extensions NULL NULL false 0 -1
+4294967162 tables NULL NULL false 0 -1
+4294967163 tables_extensions NULL NULL false 0 -1
+4294967164 table_privileges NULL NULL false 0 -1
+4294967165 table_constraints_extensions NULL NULL false 0 -1
+4294967166 table_constraints NULL NULL false 0 -1
+4294967167 statistics NULL NULL false 0 -1
+4294967168 st_units_of_measure NULL NULL false 0 -1
+4294967169 st_spatial_reference_systems NULL NULL false 0 -1
+4294967170 st_geometry_columns NULL NULL false 0 -1
+4294967171 session_variables NULL NULL false 0 -1
+4294967172 sequences NULL NULL false 0 -1
+4294967173 schema_privileges NULL NULL false 0 -1
+4294967174 schemata NULL NULL false 0 -1
+4294967175 schemata_extensions NULL NULL false 0 -1
+4294967176 sql_sizing NULL NULL false 0 -1
+4294967177 sql_parts NULL NULL false 0 -1
+4294967178 sql_implementation_info NULL NULL false 0 -1
+4294967179 sql_features NULL NULL false 0 -1
+4294967180 routines NULL NULL false 0 -1
+4294967181 routine_privileges NULL NULL false 0 -1
+4294967182 role_usage_grants NULL NULL false 0 -1
+4294967183 role_udt_grants NULL NULL false 0 -1
+4294967184 role_table_grants NULL NULL false 0 -1
+4294967185 role_routine_grants NULL NULL false 0 -1
+4294967186 role_column_grants NULL NULL false 0 -1
+4294967187 resource_groups NULL NULL false 0 -1
+4294967188 referential_constraints NULL NULL false 0 -1
+4294967189 profiling NULL NULL false 0 -1
+4294967190 processlist NULL NULL false 0 -1
+4294967191 plugins NULL NULL false 0 -1
+4294967192 partitions NULL NULL false 0 -1
+4294967193 parameters NULL NULL false 0 -1
+4294967194 optimizer_trace NULL NULL false 0 -1
+4294967195 keywords NULL NULL false 0 -1
+4294967196 key_column_usage NULL NULL false 0 -1
+4294967197 information_schema_catalog_name NULL NULL false 0 -1
+4294967198 foreign_tables NULL NULL false 0 -1
+4294967199 foreign_table_options NULL NULL false 0 -1
+4294967200 foreign_servers NULL NULL false 0 -1
+4294967201 foreign_server_options NULL NULL false 0 -1
+4294967202 foreign_data_wrappers NULL NULL false 0 -1
+4294967203 foreign_data_wrapper_options NULL NULL false 0 -1
+4294967204 files NULL NULL false 0 -1
+4294967205 events NULL NULL false 0 -1
+4294967206 engines NULL NULL false 0 -1
+4294967207 enabled_roles NULL NULL false 0 -1
+4294967208 element_types NULL NULL false 0 -1
+4294967209 domains NULL NULL false 0 -1
+4294967210 domain_udt_usage NULL NULL false 0 -1
+4294967211 domain_constraints NULL NULL false 0 -1
+4294967212 data_type_privileges NULL NULL false 0 -1
+4294967213 constraint_table_usage NULL NULL false 0 -1
+4294967214 constraint_column_usage NULL NULL false 0 -1
+4294967215 columns NULL NULL false 0 -1
+4294967216 columns_extensions NULL NULL false 0 -1
+4294967217 column_udt_usage NULL NULL false 0 -1
+4294967218 column_statistics NULL NULL false 0 -1
+4294967219 column_privileges NULL NULL false 0 -1
+4294967220 column_options NULL NULL false 0 -1
+4294967221 column_domain_usage NULL NULL false 0 -1
+4294967222 column_column_usage NULL NULL false 0 -1
+4294967223 collations NULL NULL false 0 -1
+4294967224 collation_character_set_applicability NULL NULL false 0 -1
+4294967225 check_constraints NULL NULL false 0 -1
+4294967226 check_constraint_routine_usage NULL NULL false 0 -1
+4294967227 character_sets NULL NULL false 0 -1
+4294967228 attributes NULL NULL false 0 -1
+4294967229 applicable_roles NULL NULL false 0 -1
+4294967230 administrable_role_authorizations NULL NULL false 0 -1
+4294967232 tenant_usage_details NULL NULL false 0 -1
+4294967233 active_range_feeds NULL NULL false 0 -1
+4294967234 default_privileges NULL NULL false 0 -1
+4294967235 regions NULL NULL false 0 -1
+4294967236 cluster_inflight_traces NULL NULL false 0 -1
+4294967237 lost_descriptors_with_data NULL NULL false 0 -1
+4294967238 cross_db_references NULL NULL false 0 -1
4294967239 cluster_database_privileges NULL NULL false 0 -1
4294967240 invalid_objects NULL NULL false 0 -1
4294967241 zones NULL NULL false 0 -1
@@ -3161,232 +3157,231 @@ oid typname typndims typcollation typde
100076 _newtype1 0 0 NULL NULL NULL
100077 newtype2 0 0 NULL NULL NULL
100078 _newtype2 0 0 NULL NULL NULL
-4294967010 spatial_ref_sys 0 0 NULL NULL NULL
-4294967011 geometry_columns 0 0 NULL NULL NULL
-4294967012 geography_columns 0 0 NULL NULL NULL
-4294967014 pg_views 0 0 NULL NULL NULL
-4294967015 pg_user 0 0 NULL NULL NULL
-4294967016 pg_user_mappings 0 0 NULL NULL NULL
-4294967017 pg_user_mapping 0 0 NULL NULL NULL
-4294967018 pg_type 0 0 NULL NULL NULL
-4294967019 pg_ts_template 0 0 NULL NULL NULL
-4294967020 pg_ts_parser 0 0 NULL NULL NULL
-4294967021 pg_ts_dict 0 0 NULL NULL NULL
-4294967022 pg_ts_config 0 0 NULL NULL NULL
-4294967023 pg_ts_config_map 0 0 NULL NULL NULL
-4294967024 pg_trigger 0 0 NULL NULL NULL
-4294967025 pg_transform 0 0 NULL NULL NULL
-4294967026 pg_timezone_names 0 0 NULL NULL NULL
-4294967027 pg_timezone_abbrevs 0 0 NULL NULL NULL
-4294967028 pg_tablespace 0 0 NULL NULL NULL
-4294967029 pg_tables 0 0 NULL NULL NULL
-4294967030 pg_subscription 0 0 NULL NULL NULL
-4294967031 pg_subscription_rel 0 0 NULL NULL NULL
-4294967032 pg_stats 0 0 NULL NULL NULL
-4294967033 pg_stats_ext 0 0 NULL NULL NULL
-4294967034 pg_statistic 0 0 NULL NULL NULL
-4294967035 pg_statistic_ext 0 0 NULL NULL NULL
-4294967036 pg_statistic_ext_data 0 0 NULL NULL NULL
-4294967037 pg_statio_user_tables 0 0 NULL NULL NULL
-4294967038 pg_statio_user_sequences 0 0 NULL NULL NULL
-4294967039 pg_statio_user_indexes 0 0 NULL NULL NULL
-4294967040 pg_statio_sys_tables 0 0 NULL NULL NULL
-4294967041 pg_statio_sys_sequences 0 0 NULL NULL NULL
-4294967042 pg_statio_sys_indexes 0 0 NULL NULL NULL
-4294967043 pg_statio_all_tables 0 0 NULL NULL NULL
-4294967044 pg_statio_all_sequences 0 0 NULL NULL NULL
-4294967045 pg_statio_all_indexes 0 0 NULL NULL NULL
-4294967046 pg_stat_xact_user_tables 0 0 NULL NULL NULL
-4294967047 pg_stat_xact_user_functions 0 0 NULL NULL NULL
-4294967048 pg_stat_xact_sys_tables 0 0 NULL NULL NULL
-4294967049 pg_stat_xact_all_tables 0 0 NULL NULL NULL
-4294967050 pg_stat_wal_receiver 0 0 NULL NULL NULL
-4294967051 pg_stat_user_tables 0 0 NULL NULL NULL
-4294967052 pg_stat_user_indexes 0 0 NULL NULL NULL
-4294967053 pg_stat_user_functions 0 0 NULL NULL NULL
-4294967054 pg_stat_sys_tables 0 0 NULL NULL NULL
-4294967055 pg_stat_sys_indexes 0 0 NULL NULL NULL
-4294967056 pg_stat_subscription 0 0 NULL NULL NULL
-4294967057 pg_stat_ssl 0 0 NULL NULL NULL
-4294967058 pg_stat_slru 0 0 NULL NULL NULL
-4294967059 pg_stat_replication 0 0 NULL NULL NULL
-4294967060 pg_stat_progress_vacuum 0 0 NULL NULL NULL
-4294967061 pg_stat_progress_create_index 0 0 NULL NULL NULL
-4294967062 pg_stat_progress_cluster 0 0 NULL NULL NULL
-4294967063 pg_stat_progress_basebackup 0 0 NULL NULL NULL
-4294967064 pg_stat_progress_analyze 0 0 NULL NULL NULL
-4294967065 pg_stat_gssapi 0 0 NULL NULL NULL
-4294967066 pg_stat_database 0 0 NULL NULL NULL
-4294967067 pg_stat_database_conflicts 0 0 NULL NULL NULL
-4294967068 pg_stat_bgwriter 0 0 NULL NULL NULL
-4294967069 pg_stat_archiver 0 0 NULL NULL NULL
-4294967070 pg_stat_all_tables 0 0 NULL NULL NULL
-4294967071 pg_stat_all_indexes 0 0 NULL NULL NULL
-4294967072 pg_stat_activity 0 0 NULL NULL NULL
-4294967073 pg_shmem_allocations 0 0 NULL NULL NULL
-4294967074 pg_shdepend 0 0 NULL NULL NULL
-4294967075 pg_shseclabel 0 0 NULL NULL NULL
-4294967076 pg_shdescription 0 0 NULL NULL NULL
-4294967077 pg_shadow 0 0 NULL NULL NULL
-4294967078 pg_settings 0 0 NULL NULL NULL
-4294967079 pg_sequences 0 0 NULL NULL NULL
-4294967080 pg_sequence 0 0 NULL NULL NULL
-4294967081 pg_seclabel 0 0 NULL NULL NULL
-4294967082 pg_seclabels 0 0 NULL NULL NULL
-4294967083 pg_rules 0 0 NULL NULL NULL
-4294967084 pg_roles 0 0 NULL NULL NULL
-4294967085 pg_rewrite 0 0 NULL NULL NULL
-4294967086 pg_replication_slots 0 0 NULL NULL NULL
-4294967087 pg_replication_origin 0 0 NULL NULL NULL
-4294967088 pg_replication_origin_status 0 0 NULL NULL NULL
-4294967089 pg_range 0 0 NULL NULL NULL
-4294967090 pg_publication_tables 0 0 NULL NULL NULL
-4294967091 pg_publication 0 0 NULL NULL NULL
-4294967092 pg_publication_rel 0 0 NULL NULL NULL
-4294967093 pg_proc 0 0 NULL NULL NULL
-4294967094 pg_prepared_xacts 0 0 NULL NULL NULL
-4294967095 pg_prepared_statements 0 0 NULL NULL NULL
-4294967096 pg_policy 0 0 NULL NULL NULL
-4294967097 pg_policies 0 0 NULL NULL NULL
-4294967098 pg_partitioned_table 0 0 NULL NULL NULL
-4294967099 pg_opfamily 0 0 NULL NULL NULL
-4294967100 pg_operator 0 0 NULL NULL NULL
-4294967101 pg_opclass 0 0 NULL NULL NULL
-4294967102 pg_namespace 0 0 NULL NULL NULL
-4294967103 pg_matviews 0 0 NULL NULL NULL
-4294967104 pg_locks 0 0 NULL NULL NULL
-4294967105 pg_largeobject 0 0 NULL NULL NULL
-4294967106 pg_largeobject_metadata 0 0 NULL NULL NULL
-4294967107 pg_language 0 0 NULL NULL NULL
-4294967108 pg_init_privs 0 0 NULL NULL NULL
-4294967109 pg_inherits 0 0 NULL NULL NULL
-4294967110 pg_indexes 0 0 NULL NULL NULL
-4294967111 pg_index 0 0 NULL NULL NULL
-4294967112 pg_hba_file_rules 0 0 NULL NULL NULL
-4294967113 pg_group 0 0 NULL NULL NULL
-4294967114 pg_foreign_table 0 0 NULL NULL NULL
-4294967115 pg_foreign_server 0 0 NULL NULL NULL
-4294967116 pg_foreign_data_wrapper 0 0 NULL NULL NULL
-4294967117 pg_file_settings 0 0 NULL NULL NULL
-4294967118 pg_extension 0 0 NULL NULL NULL
-4294967119 pg_event_trigger 0 0 NULL NULL NULL
-4294967120 pg_enum 0 0 NULL NULL NULL
-4294967121 pg_description 0 0 NULL NULL NULL
-4294967122 pg_depend 0 0 NULL NULL NULL
-4294967123 pg_default_acl 0 0 NULL NULL NULL
-4294967124 pg_db_role_setting 0 0 NULL NULL NULL
-4294967125 pg_database 0 0 NULL NULL NULL
-4294967126 pg_cursors 0 0 NULL NULL NULL
-4294967127 pg_conversion 0 0 NULL NULL NULL
-4294967128 pg_constraint 0 0 NULL NULL NULL
-4294967129 pg_config 0 0 NULL NULL NULL
-4294967130 pg_collation 0 0 NULL NULL NULL
-4294967131 pg_class 0 0 NULL NULL NULL
-4294967132 pg_cast 0 0 NULL NULL NULL
-4294967133 pg_available_extensions 0 0 NULL NULL NULL
-4294967134 pg_available_extension_versions 0 0 NULL NULL NULL
-4294967135 pg_auth_members 0 0 NULL NULL NULL
-4294967136 pg_authid 0 0 NULL NULL NULL
-4294967137 pg_attribute 0 0 NULL NULL NULL
-4294967138 pg_attrdef 0 0 NULL NULL NULL
-4294967139 pg_amproc 0 0 NULL NULL NULL
-4294967140 pg_amop 0 0 NULL NULL NULL
-4294967141 pg_am 0 0 NULL NULL NULL
-4294967142 pg_aggregate 0 0 NULL NULL NULL
-4294967144 views 0 0 NULL NULL NULL
-4294967145 view_table_usage 0 0 NULL NULL NULL
-4294967146 view_routine_usage 0 0 NULL NULL NULL
-4294967147 view_column_usage 0 0 NULL NULL NULL
-4294967148 user_privileges 0 0 NULL NULL NULL
-4294967149 user_mappings 0 0 NULL NULL NULL
-4294967150 user_mapping_options 0 0 NULL NULL NULL
-4294967151 user_defined_types 0 0 NULL NULL NULL
-4294967152 user_attributes 0 0 NULL NULL NULL
-4294967153 usage_privileges 0 0 NULL NULL NULL
-4294967154 udt_privileges 0 0 NULL NULL NULL
-4294967155 type_privileges 0 0 NULL NULL NULL
-4294967156 triggers 0 0 NULL NULL NULL
-4294967157 triggered_update_columns 0 0 NULL NULL NULL
-4294967158 transforms 0 0 NULL NULL NULL
-4294967159 tablespaces 0 0 NULL NULL NULL
-4294967160 tablespaces_extensions 0 0 NULL NULL NULL
-4294967161 tables 0 0 NULL NULL NULL
-4294967162 tables_extensions 0 0 NULL NULL NULL
-4294967163 table_privileges 0 0 NULL NULL NULL
-4294967164 table_constraints_extensions 0 0 NULL NULL NULL
-4294967165 table_constraints 0 0 NULL NULL NULL
-4294967166 statistics 0 0 NULL NULL NULL
-4294967167 st_units_of_measure 0 0 NULL NULL NULL
-4294967168 st_spatial_reference_systems 0 0 NULL NULL NULL
-4294967169 st_geometry_columns 0 0 NULL NULL NULL
-4294967170 session_variables 0 0 NULL NULL NULL
-4294967171 sequences 0 0 NULL NULL NULL
-4294967172 schema_privileges 0 0 NULL NULL NULL
-4294967173 schemata 0 0 NULL NULL NULL
-4294967174 schemata_extensions 0 0 NULL NULL NULL
-4294967175 sql_sizing 0 0 NULL NULL NULL
-4294967176 sql_parts 0 0 NULL NULL NULL
-4294967177 sql_implementation_info 0 0 NULL NULL NULL
-4294967178 sql_features 0 0 NULL NULL NULL
-4294967179 routines 0 0 NULL NULL NULL
-4294967180 routine_privileges 0 0 NULL NULL NULL
-4294967181 role_usage_grants 0 0 NULL NULL NULL
-4294967182 role_udt_grants 0 0 NULL NULL NULL
-4294967183 role_table_grants 0 0 NULL NULL NULL
-4294967184 role_routine_grants 0 0 NULL NULL NULL
-4294967185 role_column_grants 0 0 NULL NULL NULL
-4294967186 resource_groups 0 0 NULL NULL NULL
-4294967187 referential_constraints 0 0 NULL NULL NULL
-4294967188 profiling 0 0 NULL NULL NULL
-4294967189 processlist 0 0 NULL NULL NULL
-4294967190 plugins 0 0 NULL NULL NULL
-4294967191 partitions 0 0 NULL NULL NULL
-4294967192 parameters 0 0 NULL NULL NULL
-4294967193 optimizer_trace 0 0 NULL NULL NULL
-4294967194 keywords 0 0 NULL NULL NULL
-4294967195 key_column_usage 0 0 NULL NULL NULL
-4294967196 information_schema_catalog_name 0 0 NULL NULL NULL
-4294967197 foreign_tables 0 0 NULL NULL NULL
-4294967198 foreign_table_options 0 0 NULL NULL NULL
-4294967199 foreign_servers 0 0 NULL NULL NULL
-4294967200 foreign_server_options 0 0 NULL NULL NULL
-4294967201 foreign_data_wrappers 0 0 NULL NULL NULL
-4294967202 foreign_data_wrapper_options 0 0 NULL NULL NULL
-4294967203 files 0 0 NULL NULL NULL
-4294967204 events 0 0 NULL NULL NULL
-4294967205 engines 0 0 NULL NULL NULL
-4294967206 enabled_roles 0 0 NULL NULL NULL
-4294967207 element_types 0 0 NULL NULL NULL
-4294967208 domains 0 0 NULL NULL NULL
-4294967209 domain_udt_usage 0 0 NULL NULL NULL
-4294967210 domain_constraints 0 0 NULL NULL NULL
-4294967211 data_type_privileges 0 0 NULL NULL NULL
-4294967212 constraint_table_usage 0 0 NULL NULL NULL
-4294967213 constraint_column_usage 0 0 NULL NULL NULL
-4294967214 columns 0 0 NULL NULL NULL
-4294967215 columns_extensions 0 0 NULL NULL NULL
-4294967216 column_udt_usage 0 0 NULL NULL NULL
-4294967217 column_statistics 0 0 NULL NULL NULL
-4294967218 column_privileges 0 0 NULL NULL NULL
-4294967219 column_options 0 0 NULL NULL NULL
-4294967220 column_domain_usage 0 0 NULL NULL NULL
-4294967221 column_column_usage 0 0 NULL NULL NULL
-4294967222 collations 0 0 NULL NULL NULL
-4294967223 collation_character_set_applicability 0 0 NULL NULL NULL
-4294967224 check_constraints 0 0 NULL NULL NULL
-4294967225 check_constraint_routine_usage 0 0 NULL NULL NULL
-4294967226 character_sets 0 0 NULL NULL NULL
-4294967227 attributes 0 0 NULL NULL NULL
-4294967228 applicable_roles 0 0 NULL NULL NULL
-4294967229 administrable_role_authorizations 0 0 NULL NULL NULL
-4294967231 tenant_usage_details 0 0 NULL NULL NULL
-4294967232 active_range_feeds 0 0 NULL NULL NULL
-4294967233 default_privileges 0 0 NULL NULL NULL
-4294967234 regions 0 0 NULL NULL NULL
-4294967235 cluster_inflight_traces 0 0 NULL NULL NULL
-4294967236 lost_descriptors_with_data 0 0 NULL NULL NULL
-4294967237 cross_db_references 0 0 NULL NULL NULL
-4294967238 interleaved 0 0 NULL NULL NULL
+4294967011 spatial_ref_sys 0 0 NULL NULL NULL
+4294967012 geometry_columns 0 0 NULL NULL NULL
+4294967013 geography_columns 0 0 NULL NULL NULL
+4294967015 pg_views 0 0 NULL NULL NULL
+4294967016 pg_user 0 0 NULL NULL NULL
+4294967017 pg_user_mappings 0 0 NULL NULL NULL
+4294967018 pg_user_mapping 0 0 NULL NULL NULL
+4294967019 pg_type 0 0 NULL NULL NULL
+4294967020 pg_ts_template 0 0 NULL NULL NULL
+4294967021 pg_ts_parser 0 0 NULL NULL NULL
+4294967022 pg_ts_dict 0 0 NULL NULL NULL
+4294967023 pg_ts_config 0 0 NULL NULL NULL
+4294967024 pg_ts_config_map 0 0 NULL NULL NULL
+4294967025 pg_trigger 0 0 NULL NULL NULL
+4294967026 pg_transform 0 0 NULL NULL NULL
+4294967027 pg_timezone_names 0 0 NULL NULL NULL
+4294967028 pg_timezone_abbrevs 0 0 NULL NULL NULL
+4294967029 pg_tablespace 0 0 NULL NULL NULL
+4294967030 pg_tables 0 0 NULL NULL NULL
+4294967031 pg_subscription 0 0 NULL NULL NULL
+4294967032 pg_subscription_rel 0 0 NULL NULL NULL
+4294967033 pg_stats 0 0 NULL NULL NULL
+4294967034 pg_stats_ext 0 0 NULL NULL NULL
+4294967035 pg_statistic 0 0 NULL NULL NULL
+4294967036 pg_statistic_ext 0 0 NULL NULL NULL
+4294967037 pg_statistic_ext_data 0 0 NULL NULL NULL
+4294967038 pg_statio_user_tables 0 0 NULL NULL NULL
+4294967039 pg_statio_user_sequences 0 0 NULL NULL NULL
+4294967040 pg_statio_user_indexes 0 0 NULL NULL NULL
+4294967041 pg_statio_sys_tables 0 0 NULL NULL NULL
+4294967042 pg_statio_sys_sequences 0 0 NULL NULL NULL
+4294967043 pg_statio_sys_indexes 0 0 NULL NULL NULL
+4294967044 pg_statio_all_tables 0 0 NULL NULL NULL
+4294967045 pg_statio_all_sequences 0 0 NULL NULL NULL
+4294967046 pg_statio_all_indexes 0 0 NULL NULL NULL
+4294967047 pg_stat_xact_user_tables 0 0 NULL NULL NULL
+4294967048 pg_stat_xact_user_functions 0 0 NULL NULL NULL
+4294967049 pg_stat_xact_sys_tables 0 0 NULL NULL NULL
+4294967050 pg_stat_xact_all_tables 0 0 NULL NULL NULL
+4294967051 pg_stat_wal_receiver 0 0 NULL NULL NULL
+4294967052 pg_stat_user_tables 0 0 NULL NULL NULL
+4294967053 pg_stat_user_indexes 0 0 NULL NULL NULL
+4294967054 pg_stat_user_functions 0 0 NULL NULL NULL
+4294967055 pg_stat_sys_tables 0 0 NULL NULL NULL
+4294967056 pg_stat_sys_indexes 0 0 NULL NULL NULL
+4294967057 pg_stat_subscription 0 0 NULL NULL NULL
+4294967058 pg_stat_ssl 0 0 NULL NULL NULL
+4294967059 pg_stat_slru 0 0 NULL NULL NULL
+4294967060 pg_stat_replication 0 0 NULL NULL NULL
+4294967061 pg_stat_progress_vacuum 0 0 NULL NULL NULL
+4294967062 pg_stat_progress_create_index 0 0 NULL NULL NULL
+4294967063 pg_stat_progress_cluster 0 0 NULL NULL NULL
+4294967064 pg_stat_progress_basebackup 0 0 NULL NULL NULL
+4294967065 pg_stat_progress_analyze 0 0 NULL NULL NULL
+4294967066 pg_stat_gssapi 0 0 NULL NULL NULL
+4294967067 pg_stat_database 0 0 NULL NULL NULL
+4294967068 pg_stat_database_conflicts 0 0 NULL NULL NULL
+4294967069 pg_stat_bgwriter 0 0 NULL NULL NULL
+4294967070 pg_stat_archiver 0 0 NULL NULL NULL
+4294967071 pg_stat_all_tables 0 0 NULL NULL NULL
+4294967072 pg_stat_all_indexes 0 0 NULL NULL NULL
+4294967073 pg_stat_activity 0 0 NULL NULL NULL
+4294967074 pg_shmem_allocations 0 0 NULL NULL NULL
+4294967075 pg_shdepend 0 0 NULL NULL NULL
+4294967076 pg_shseclabel 0 0 NULL NULL NULL
+4294967077 pg_shdescription 0 0 NULL NULL NULL
+4294967078 pg_shadow 0 0 NULL NULL NULL
+4294967079 pg_settings 0 0 NULL NULL NULL
+4294967080 pg_sequences 0 0 NULL NULL NULL
+4294967081 pg_sequence 0 0 NULL NULL NULL
+4294967082 pg_seclabel 0 0 NULL NULL NULL
+4294967083 pg_seclabels 0 0 NULL NULL NULL
+4294967084 pg_rules 0 0 NULL NULL NULL
+4294967085 pg_roles 0 0 NULL NULL NULL
+4294967086 pg_rewrite 0 0 NULL NULL NULL
+4294967087 pg_replication_slots 0 0 NULL NULL NULL
+4294967088 pg_replication_origin 0 0 NULL NULL NULL
+4294967089 pg_replication_origin_status 0 0 NULL NULL NULL
+4294967090 pg_range 0 0 NULL NULL NULL
+4294967091 pg_publication_tables 0 0 NULL NULL NULL
+4294967092 pg_publication 0 0 NULL NULL NULL
+4294967093 pg_publication_rel 0 0 NULL NULL NULL
+4294967094 pg_proc 0 0 NULL NULL NULL
+4294967095 pg_prepared_xacts 0 0 NULL NULL NULL
+4294967096 pg_prepared_statements 0 0 NULL NULL NULL
+4294967097 pg_policy 0 0 NULL NULL NULL
+4294967098 pg_policies 0 0 NULL NULL NULL
+4294967099 pg_partitioned_table 0 0 NULL NULL NULL
+4294967100 pg_opfamily 0 0 NULL NULL NULL
+4294967101 pg_operator 0 0 NULL NULL NULL
+4294967102 pg_opclass 0 0 NULL NULL NULL
+4294967103 pg_namespace 0 0 NULL NULL NULL
+4294967104 pg_matviews 0 0 NULL NULL NULL
+4294967105 pg_locks 0 0 NULL NULL NULL
+4294967106 pg_largeobject 0 0 NULL NULL NULL
+4294967107 pg_largeobject_metadata 0 0 NULL NULL NULL
+4294967108 pg_language 0 0 NULL NULL NULL
+4294967109 pg_init_privs 0 0 NULL NULL NULL
+4294967110 pg_inherits 0 0 NULL NULL NULL
+4294967111 pg_indexes 0 0 NULL NULL NULL
+4294967112 pg_index 0 0 NULL NULL NULL
+4294967113 pg_hba_file_rules 0 0 NULL NULL NULL
+4294967114 pg_group 0 0 NULL NULL NULL
+4294967115 pg_foreign_table 0 0 NULL NULL NULL
+4294967116 pg_foreign_server 0 0 NULL NULL NULL
+4294967117 pg_foreign_data_wrapper 0 0 NULL NULL NULL
+4294967118 pg_file_settings 0 0 NULL NULL NULL
+4294967119 pg_extension 0 0 NULL NULL NULL
+4294967120 pg_event_trigger 0 0 NULL NULL NULL
+4294967121 pg_enum 0 0 NULL NULL NULL
+4294967122 pg_description 0 0 NULL NULL NULL
+4294967123 pg_depend 0 0 NULL NULL NULL
+4294967124 pg_default_acl 0 0 NULL NULL NULL
+4294967125 pg_db_role_setting 0 0 NULL NULL NULL
+4294967126 pg_database 0 0 NULL NULL NULL
+4294967127 pg_cursors 0 0 NULL NULL NULL
+4294967128 pg_conversion 0 0 NULL NULL NULL
+4294967129 pg_constraint 0 0 NULL NULL NULL
+4294967130 pg_config 0 0 NULL NULL NULL
+4294967131 pg_collation 0 0 NULL NULL NULL
+4294967132 pg_class 0 0 NULL NULL NULL
+4294967133 pg_cast 0 0 NULL NULL NULL
+4294967134 pg_available_extensions 0 0 NULL NULL NULL
+4294967135 pg_available_extension_versions 0 0 NULL NULL NULL
+4294967136 pg_auth_members 0 0 NULL NULL NULL
+4294967137 pg_authid 0 0 NULL NULL NULL
+4294967138 pg_attribute 0 0 NULL NULL NULL
+4294967139 pg_attrdef 0 0 NULL NULL NULL
+4294967140 pg_amproc 0 0 NULL NULL NULL
+4294967141 pg_amop 0 0 NULL NULL NULL
+4294967142 pg_am 0 0 NULL NULL NULL
+4294967143 pg_aggregate 0 0 NULL NULL NULL
+4294967145 views 0 0 NULL NULL NULL
+4294967146 view_table_usage 0 0 NULL NULL NULL
+4294967147 view_routine_usage 0 0 NULL NULL NULL
+4294967148 view_column_usage 0 0 NULL NULL NULL
+4294967149 user_privileges 0 0 NULL NULL NULL
+4294967150 user_mappings 0 0 NULL NULL NULL
+4294967151 user_mapping_options 0 0 NULL NULL NULL
+4294967152 user_defined_types 0 0 NULL NULL NULL
+4294967153 user_attributes 0 0 NULL NULL NULL
+4294967154 usage_privileges 0 0 NULL NULL NULL
+4294967155 udt_privileges 0 0 NULL NULL NULL
+4294967156 type_privileges 0 0 NULL NULL NULL
+4294967157 triggers 0 0 NULL NULL NULL
+4294967158 triggered_update_columns 0 0 NULL NULL NULL
+4294967159 transforms 0 0 NULL NULL NULL
+4294967160 tablespaces 0 0 NULL NULL NULL
+4294967161 tablespaces_extensions 0 0 NULL NULL NULL
+4294967162 tables 0 0 NULL NULL NULL
+4294967163 tables_extensions 0 0 NULL NULL NULL
+4294967164 table_privileges 0 0 NULL NULL NULL
+4294967165 table_constraints_extensions 0 0 NULL NULL NULL
+4294967166 table_constraints 0 0 NULL NULL NULL
+4294967167 statistics 0 0 NULL NULL NULL
+4294967168 st_units_of_measure 0 0 NULL NULL NULL
+4294967169 st_spatial_reference_systems 0 0 NULL NULL NULL
+4294967170 st_geometry_columns 0 0 NULL NULL NULL
+4294967171 session_variables 0 0 NULL NULL NULL
+4294967172 sequences 0 0 NULL NULL NULL
+4294967173 schema_privileges 0 0 NULL NULL NULL
+4294967174 schemata 0 0 NULL NULL NULL
+4294967175 schemata_extensions 0 0 NULL NULL NULL
+4294967176 sql_sizing 0 0 NULL NULL NULL
+4294967177 sql_parts 0 0 NULL NULL NULL
+4294967178 sql_implementation_info 0 0 NULL NULL NULL
+4294967179 sql_features 0 0 NULL NULL NULL
+4294967180 routines 0 0 NULL NULL NULL
+4294967181 routine_privileges 0 0 NULL NULL NULL
+4294967182 role_usage_grants 0 0 NULL NULL NULL
+4294967183 role_udt_grants 0 0 NULL NULL NULL
+4294967184 role_table_grants 0 0 NULL NULL NULL
+4294967185 role_routine_grants 0 0 NULL NULL NULL
+4294967186 role_column_grants 0 0 NULL NULL NULL
+4294967187 resource_groups 0 0 NULL NULL NULL
+4294967188 referential_constraints 0 0 NULL NULL NULL
+4294967189 profiling 0 0 NULL NULL NULL
+4294967190 processlist 0 0 NULL NULL NULL
+4294967191 plugins 0 0 NULL NULL NULL
+4294967192 partitions 0 0 NULL NULL NULL
+4294967193 parameters 0 0 NULL NULL NULL
+4294967194 optimizer_trace 0 0 NULL NULL NULL
+4294967195 keywords 0 0 NULL NULL NULL
+4294967196 key_column_usage 0 0 NULL NULL NULL
+4294967197 information_schema_catalog_name 0 0 NULL NULL NULL
+4294967198 foreign_tables 0 0 NULL NULL NULL
+4294967199 foreign_table_options 0 0 NULL NULL NULL
+4294967200 foreign_servers 0 0 NULL NULL NULL
+4294967201 foreign_server_options 0 0 NULL NULL NULL
+4294967202 foreign_data_wrappers 0 0 NULL NULL NULL
+4294967203 foreign_data_wrapper_options 0 0 NULL NULL NULL
+4294967204 files 0 0 NULL NULL NULL
+4294967205 events 0 0 NULL NULL NULL
+4294967206 engines 0 0 NULL NULL NULL
+4294967207 enabled_roles 0 0 NULL NULL NULL
+4294967208 element_types 0 0 NULL NULL NULL
+4294967209 domains 0 0 NULL NULL NULL
+4294967210 domain_udt_usage 0 0 NULL NULL NULL
+4294967211 domain_constraints 0 0 NULL NULL NULL
+4294967212 data_type_privileges 0 0 NULL NULL NULL
+4294967213 constraint_table_usage 0 0 NULL NULL NULL
+4294967214 constraint_column_usage 0 0 NULL NULL NULL
+4294967215 columns 0 0 NULL NULL NULL
+4294967216 columns_extensions 0 0 NULL NULL NULL
+4294967217 column_udt_usage 0 0 NULL NULL NULL
+4294967218 column_statistics 0 0 NULL NULL NULL
+4294967219 column_privileges 0 0 NULL NULL NULL
+4294967220 column_options 0 0 NULL NULL NULL
+4294967221 column_domain_usage 0 0 NULL NULL NULL
+4294967222 column_column_usage 0 0 NULL NULL NULL
+4294967223 collations 0 0 NULL NULL NULL
+4294967224 collation_character_set_applicability 0 0 NULL NULL NULL
+4294967225 check_constraints 0 0 NULL NULL NULL
+4294967226 check_constraint_routine_usage 0 0 NULL NULL NULL
+4294967227 character_sets 0 0 NULL NULL NULL
+4294967228 attributes 0 0 NULL NULL NULL
+4294967229 applicable_roles 0 0 NULL NULL NULL
+4294967230 administrable_role_authorizations 0 0 NULL NULL NULL
+4294967232 tenant_usage_details 0 0 NULL NULL NULL
+4294967233 active_range_feeds 0 0 NULL NULL NULL
+4294967234 default_privileges 0 0 NULL NULL NULL
+4294967235 regions 0 0 NULL NULL NULL
+4294967236 cluster_inflight_traces 0 0 NULL NULL NULL
+4294967237 lost_descriptors_with_data 0 0 NULL NULL NULL
+4294967238 cross_db_references 0 0 NULL NULL NULL
4294967239 cluster_database_privileges 0 0 NULL NULL NULL
4294967240 invalid_objects 0 0 NULL NULL NULL
4294967241 zones 0 0 NULL NULL NULL
@@ -3678,283 +3673,282 @@ SELECT objoid, classoid, objsubid, regexp_replace(description, e'\n.*', '') AS d
FROM pg_catalog.pg_description
----
objoid classoid objsubid description
-4294967232 4294967131 0 node-level table listing all currently running range feeds
-4294967294 4294967131 0 backward inter-descriptor dependencies starting from tables accessible by current user in current database (KV scan)
-4294967292 4294967131 0 built-in functions (RAM/static)
-4294967288 4294967131 0 contention information (cluster RPC; expensive!)
-4294967239 4294967131 0 virtual table with database privileges
-4294967287 4294967131 0 DistSQL remote flows information (cluster RPC; expensive!)
-4294967235 4294967131 0 traces for in-flight spans across all nodes in the cluster (cluster RPC; expensive!)
-4294967286 4294967131 0 running queries visible by current user (cluster RPC; expensive!)
-4294967284 4294967131 0 running sessions visible to current user (cluster RPC; expensive!)
-4294967283 4294967131 0 cluster settings (RAM)
-4294967285 4294967131 0 running user transactions visible by the current user (cluster RPC; expensive!)
-4294967282 4294967131 0 CREATE statements for all user defined schemas accessible by the current user in current database (KV scan)
-4294967281 4294967131 0 CREATE and ALTER statements for all tables accessible by current user in current database (KV scan)
-4294967280 4294967131 0 CREATE statements for all user defined types accessible by the current user in current database (KV scan)
-4294967237 4294967131 0 virtual table with cross db references
-4294967279 4294967131 0 databases accessible by the current user (KV scan)
-4294967233 4294967131 0 virtual table with default privileges
-4294967278 4294967131 0 telemetry counters (RAM; local node only)
-4294967277 4294967131 0 forward inter-descriptor dependencies starting from tables accessible by current user in current database (KV scan)
-4294967274 4294967131 0 locally known gossiped health alerts (RAM; local node only)
-4294967273 4294967131 0 locally known gossiped node liveness (RAM; local node only)
-4294967272 4294967131 0 locally known edges in the gossip network (RAM; local node only)
-4294967275 4294967131 0 locally known gossiped node details (RAM; local node only)
-4294967271 4294967131 0 index columns for all indexes accessible by current user in current database (KV scan)
-4294967270 4294967131 0 cluster-wide index usage statistics (in-memory, not durable).Querying this table is an expensive operation since it creates acluster-wide RPC fanout.
-4294967238 4294967131 0 virtual table with interleaved table information
-4294967240 4294967131 0 virtual table to validate descriptors
-4294967268 4294967131 0 decoded job metadata from system.jobs (KV scan)
-4294967276 4294967131 0 node liveness status, as seen by kv
-4294967267 4294967131 0 node details across the entire cluster (cluster RPC; expensive!)
-4294967266 4294967131 0 store details and status (cluster RPC; expensive!)
-4294967265 4294967131 0 acquired table leases (RAM; local node only)
-4294967236 4294967131 0 virtual table with table descriptors that still have data
-4294967293 4294967131 0 detailed identification strings (RAM, local node only)
-4294967264 4294967131 0 contention information (RAM; local node only)
-4294967263 4294967131 0 DistSQL remote flows information (RAM; local node only)
-4294967269 4294967131 0 in-flight spans (RAM; local node only)
-4294967259 4294967131 0 current values for metrics (RAM; local node only)
-4294967262 4294967131 0 running queries visible by current user (RAM; local node only)
-4294967252 4294967131 0 server parameters, useful to construct connection URLs (RAM, local node only)
-4294967260 4294967131 0 running sessions visible by current user (RAM; local node only)
-4294967258 4294967131 0 statement statistics (in-memory, not durable; local node only). This table is wiped periodically (by default, at least every two hours)
-4294967243 4294967131 0 finer-grained transaction statistics (in-memory, not durable; local node only). This table is wiped periodically (by default, at least every two hours)
-4294967261 4294967131 0 running user transactions visible by the current user (RAM; local node only)
-4294967257 4294967131 0 per-application transaction statistics (in-memory, not durable; local node only). This table is wiped periodically (by default, at least every two hours)
-4294967256 4294967131 0 defined partitions for all tables/indexes accessible by the current user in the current database (KV scan)
-4294967255 4294967131 0 comments for predefined virtual tables (RAM/static)
-4294967254 4294967131 0 range metadata without leaseholder details (KV join; expensive!)
-4294967234 4294967131 0 available regions for the cluster
-4294967251 4294967131 0 ongoing schema changes, across all descriptors accessible by current user (KV scan; expensive!)
-4294967250 4294967131 0 session trace accumulated so far (RAM)
-4294967249 4294967131 0 session variables (RAM)
-4294967248 4294967131 0 statement statistics (cluster-wide).Querying this table is an expensive operation since it creates a cluster-wide RPC-fanout.
-4294967247 4294967131 0 details for all columns accessible by current user in current database (KV scan)
-4294967246 4294967131 0 indexes accessible by current user in current database (KV scan)
-4294967244 4294967131 0 stats for all tables accessible by current user in current database as of 10s ago
-4294967245 4294967131 0 table descriptors accessible by current user, including non-public and virtual (KV scan; expensive!)
-4294967242 4294967131 0 transaction statistics (cluster-wide).Querying this table is an expensive operation since it creates a cluster-wide RPC-fanout.
-4294967241 4294967131 0 decoded zone configurations from system.zones (KV scan)
-4294967229 4294967131 0 roles for which the current user has admin option
-4294967228 4294967131 0 roles available to the current user
-4294967227 4294967131 0 attributes was created for compatibility and is currently unimplemented
-4294967226 4294967131 0 character sets available in the current database
-4294967225 4294967131 0 check_constraint_routine_usage was created for compatibility and is currently unimplemented
-4294967224 4294967131 0 check constraints
-4294967223 4294967131 0 identifies which character set the available collations are
-4294967222 4294967131 0 shows the collations available in the current database
-4294967221 4294967131 0 column_column_usage was created for compatibility and is currently unimplemented
-4294967220 4294967131 0 column_domain_usage was created for compatibility and is currently unimplemented
-4294967219 4294967131 0 column_options was created for compatibility and is currently unimplemented
-4294967218 4294967131 0 column privilege grants (incomplete)
-4294967217 4294967131 0 column_statistics was created for compatibility and is currently unimplemented
-4294967216 4294967131 0 columns with user defined types
-4294967214 4294967131 0 table and view columns (incomplete)
-4294967215 4294967131 0 columns_extensions was created for compatibility and is currently unimplemented
-4294967213 4294967131 0 columns usage by constraints
-4294967212 4294967131 0 constraint_table_usage was created for compatibility and is currently unimplemented
-4294967211 4294967131 0 data_type_privileges was created for compatibility and is currently unimplemented
-4294967210 4294967131 0 domain_constraints was created for compatibility and is currently unimplemented
-4294967209 4294967131 0 domain_udt_usage was created for compatibility and is currently unimplemented
-4294967208 4294967131 0 domains was created for compatibility and is currently unimplemented
-4294967207 4294967131 0 element_types was created for compatibility and is currently unimplemented
-4294967206 4294967131 0 roles for the current user
-4294967205 4294967131 0 engines was created for compatibility and is currently unimplemented
-4294967204 4294967131 0 events was created for compatibility and is currently unimplemented
-4294967203 4294967131 0 files was created for compatibility and is currently unimplemented
-4294967202 4294967131 0 foreign_data_wrapper_options was created for compatibility and is currently unimplemented
-4294967201 4294967131 0 foreign_data_wrappers was created for compatibility and is currently unimplemented
-4294967200 4294967131 0 foreign_server_options was created for compatibility and is currently unimplemented
-4294967199 4294967131 0 foreign_servers was created for compatibility and is currently unimplemented
-4294967198 4294967131 0 foreign_table_options was created for compatibility and is currently unimplemented
-4294967197 4294967131 0 foreign_tables was created for compatibility and is currently unimplemented
-4294967196 4294967131 0 information_schema_catalog_name was created for compatibility and is currently unimplemented
-4294967195 4294967131 0 column usage by indexes and key constraints
-4294967194 4294967131 0 keywords was created for compatibility and is currently unimplemented
-4294967193 4294967131 0 optimizer_trace was created for compatibility and is currently unimplemented
-4294967192 4294967131 0 built-in function parameters (empty - introspection not yet supported)
-4294967191 4294967131 0 partitions was created for compatibility and is currently unimplemented
-4294967190 4294967131 0 plugins was created for compatibility and is currently unimplemented
-4294967189 4294967131 0 processlist was created for compatibility and is currently unimplemented
-4294967188 4294967131 0 profiling was created for compatibility and is currently unimplemented
-4294967187 4294967131 0 foreign key constraints
-4294967186 4294967131 0 resource_groups was created for compatibility and is currently unimplemented
-4294967185 4294967131 0 role_column_grants was created for compatibility and is currently unimplemented
-4294967184 4294967131 0 role_routine_grants was created for compatibility and is currently unimplemented
-4294967183 4294967131 0 privileges granted on table or views (incomplete; see also information_schema.table_privileges; may contain excess users or roles)
-4294967182 4294967131 0 role_udt_grants was created for compatibility and is currently unimplemented
-4294967181 4294967131 0 role_usage_grants was created for compatibility and is currently unimplemented
-4294967180 4294967131 0 routine_privileges was created for compatibility and is currently unimplemented
-4294967179 4294967131 0 built-in functions (empty - introspection not yet supported)
-4294967172 4294967131 0 schema privileges (incomplete; may contain excess users or roles)
-4294967173 4294967131 0 database schemas (may contain schemata without permission)
-4294967174 4294967131 0 schemata_extensions was created for compatibility and is currently unimplemented
-4294967171 4294967131 0 sequences
-4294967170 4294967131 0 exposes the session variables.
-4294967178 4294967131 0 sql_features was created for compatibility and is currently unimplemented
-4294967177 4294967131 0 sql_implementation_info was created for compatibility and is currently unimplemented
-4294967176 4294967131 0 sql_parts was created for compatibility and is currently unimplemented
-4294967175 4294967131 0 sql_sizing was created for compatibility and is currently unimplemented
-4294967169 4294967131 0 st_geometry_columns was created for compatibility and is currently unimplemented
-4294967168 4294967131 0 st_spatial_reference_systems was created for compatibility and is currently unimplemented
-4294967167 4294967131 0 st_units_of_measure was created for compatibility and is currently unimplemented
-4294967166 4294967131 0 index metadata and statistics (incomplete)
-4294967165 4294967131 0 table constraints
-4294967164 4294967131 0 table_constraints_extensions was created for compatibility and is currently unimplemented
-4294967163 4294967131 0 privileges granted on table or views (incomplete; may contain excess users or roles)
-4294967161 4294967131 0 tables and views
-4294967162 4294967131 0 tables_extensions was created for compatibility and is currently unimplemented
-4294967159 4294967131 0 tablespaces was created for compatibility and is currently unimplemented
-4294967160 4294967131 0 tablespaces_extensions was created for compatibility and is currently unimplemented
-4294967158 4294967131 0 transforms was created for compatibility and is currently unimplemented
-4294967157 4294967131 0 triggered_update_columns was created for compatibility and is currently unimplemented
-4294967156 4294967131 0 triggers was created for compatibility and is currently unimplemented
-4294967155 4294967131 0 type privileges (incomplete; may contain excess users or roles)
-4294967154 4294967131 0 udt_privileges was created for compatibility and is currently unimplemented
-4294967153 4294967131 0 usage_privileges was created for compatibility and is currently unimplemented
-4294967152 4294967131 0 user_attributes was created for compatibility and is currently unimplemented
-4294967151 4294967131 0 user_defined_types was created for compatibility and is currently unimplemented
-4294967150 4294967131 0 user_mapping_options was created for compatibility and is currently unimplemented
-4294967149 4294967131 0 user_mappings was created for compatibility and is currently unimplemented
-4294967148 4294967131 0 grantable privileges (incomplete)
-4294967147 4294967131 0 view_column_usage was created for compatibility and is currently unimplemented
-4294967146 4294967131 0 view_routine_usage was created for compatibility and is currently unimplemented
-4294967145 4294967131 0 view_table_usage was created for compatibility and is currently unimplemented
-4294967144 4294967131 0 views (incomplete)
-4294967142 4294967131 0 aggregated built-in functions (incomplete)
-4294967141 4294967131 0 index access methods (incomplete)
-4294967140 4294967131 0 pg_amop was created for compatibility and is currently unimplemented
-4294967139 4294967131 0 pg_amproc was created for compatibility and is currently unimplemented
-4294967138 4294967131 0 column default values
-4294967137 4294967131 0 table columns (incomplete - see also information_schema.columns)
-4294967135 4294967131 0 role membership
-4294967136 4294967131 0 authorization identifiers - differs from postgres as we do not display passwords,
-4294967134 4294967131 0 pg_available_extension_versions was created for compatibility and is currently unimplemented
-4294967133 4294967131 0 available extensions
-4294967132 4294967131 0 casts (empty - needs filling out)
-4294967131 4294967131 0 tables and relation-like objects (incomplete - see also information_schema.tables/sequences/views)
-4294967130 4294967131 0 available collations (incomplete)
-4294967129 4294967131 0 pg_config was created for compatibility and is currently unimplemented
-4294967128 4294967131 0 table constraints (incomplete - see also information_schema.table_constraints)
-4294967127 4294967131 0 encoding conversions (empty - unimplemented)
-4294967126 4294967131 0 pg_cursors was created for compatibility and is currently unimplemented
-4294967125 4294967131 0 available databases (incomplete)
-4294967124 4294967131 0 contains the default values that have been configured for session variables
-4294967123 4294967131 0 default ACLs; these are the privileges that will be assigned to newly created objects
-4294967122 4294967131 0 dependency relationships (incomplete)
-4294967121 4294967131 0 object comments
-4294967120 4294967131 0 enum types and labels (empty - feature does not exist)
-4294967119 4294967131 0 event triggers (empty - feature does not exist)
-4294967118 4294967131 0 installed extensions (empty - feature does not exist)
-4294967117 4294967131 0 pg_file_settings was created for compatibility and is currently unimplemented
-4294967116 4294967131 0 foreign data wrappers (empty - feature does not exist)
-4294967115 4294967131 0 foreign servers (empty - feature does not exist)
-4294967114 4294967131 0 foreign tables (empty - feature does not exist)
-4294967113 4294967131 0 pg_group was created for compatibility and is currently unimplemented
-4294967112 4294967131 0 pg_hba_file_rules was created for compatibility and is currently unimplemented
-4294967111 4294967131 0 indexes (incomplete)
-4294967110 4294967131 0 index creation statements
-4294967109 4294967131 0 table inheritance hierarchy (empty - feature does not exist)
-4294967108 4294967131 0 pg_init_privs was created for compatibility and is currently unimplemented
-4294967107 4294967131 0 available languages (empty - feature does not exist)
-4294967105 4294967131 0 pg_largeobject was created for compatibility and is currently unimplemented
-4294967106 4294967131 0 pg_largeobject_metadata was created for compatibility and is currently unimplemented
-4294967104 4294967131 0 locks held by active processes (empty - feature does not exist)
-4294967103 4294967131 0 available materialized views (empty - feature does not exist)
-4294967102 4294967131 0 available namespaces (incomplete; namespaces and databases are congruent in CockroachDB)
-4294967101 4294967131 0 opclass (empty - Operator classes not supported yet)
-4294967100 4294967131 0 operators (incomplete)
-4294967099 4294967131 0 pg_opfamily was created for compatibility and is currently unimplemented
-4294967098 4294967131 0 pg_partitioned_table was created for compatibility and is currently unimplemented
-4294967097 4294967131 0 pg_policies was created for compatibility and is currently unimplemented
-4294967096 4294967131 0 pg_policy was created for compatibility and is currently unimplemented
-4294967095 4294967131 0 prepared statements
-4294967094 4294967131 0 prepared transactions (empty - feature does not exist)
-4294967093 4294967131 0 built-in functions (incomplete)
-4294967091 4294967131 0 pg_publication was created for compatibility and is currently unimplemented
-4294967092 4294967131 0 pg_publication_rel was created for compatibility and is currently unimplemented
-4294967090 4294967131 0 pg_publication_tables was created for compatibility and is currently unimplemented
-4294967089 4294967131 0 range types (empty - feature does not exist)
-4294967087 4294967131 0 pg_replication_origin was created for compatibility and is currently unimplemented
-4294967088 4294967131 0 pg_replication_origin_status was created for compatibility and is currently unimplemented
-4294967086 4294967131 0 pg_replication_slots was created for compatibility and is currently unimplemented
-4294967085 4294967131 0 rewrite rules (only for referencing on pg_depend for table-view dependencies)
-4294967084 4294967131 0 database roles
-4294967083 4294967131 0 pg_rules was created for compatibility and is currently unimplemented
-4294967081 4294967131 0 security labels (empty - feature does not exist)
-4294967082 4294967131 0 security labels (empty)
-4294967080 4294967131 0 sequences (see also information_schema.sequences)
-4294967079 4294967131 0 pg_sequences is very similar as pg_sequence.
-4294967078 4294967131 0 session variables (incomplete)
-4294967077 4294967131 0 pg_shadow lists properties for roles that are marked as rolcanlogin in pg_authid
-4294967074 4294967131 0 Shared Dependencies (Roles depending on objects).
-4294967076 4294967131 0 shared object comments
-4294967073 4294967131 0 pg_shmem_allocations was created for compatibility and is currently unimplemented
-4294967075 4294967131 0 shared security labels (empty - feature not supported)
-4294967072 4294967131 0 backend access statistics (empty - monitoring works differently in CockroachDB)
-4294967071 4294967131 0 pg_stat_all_indexes was created for compatibility and is currently unimplemented
-4294967070 4294967131 0 pg_stat_all_tables was created for compatibility and is currently unimplemented
-4294967069 4294967131 0 pg_stat_archiver was created for compatibility and is currently unimplemented
-4294967068 4294967131 0 pg_stat_bgwriter was created for compatibility and is currently unimplemented
-4294967066 4294967131 0 pg_stat_database was created for compatibility and is currently unimplemented
-4294967067 4294967131 0 pg_stat_database_conflicts was created for compatibility and is currently unimplemented
-4294967065 4294967131 0 pg_stat_gssapi was created for compatibility and is currently unimplemented
-4294967064 4294967131 0 pg_stat_progress_analyze was created for compatibility and is currently unimplemented
-4294967063 4294967131 0 pg_stat_progress_basebackup was created for compatibility and is currently unimplemented
-4294967062 4294967131 0 pg_stat_progress_cluster was created for compatibility and is currently unimplemented
-4294967061 4294967131 0 pg_stat_progress_create_index was created for compatibility and is currently unimplemented
-4294967060 4294967131 0 pg_stat_progress_vacuum was created for compatibility and is currently unimplemented
-4294967059 4294967131 0 pg_stat_replication was created for compatibility and is currently unimplemented
-4294967058 4294967131 0 pg_stat_slru was created for compatibility and is currently unimplemented
-4294967057 4294967131 0 pg_stat_ssl was created for compatibility and is currently unimplemented
-4294967056 4294967131 0 pg_stat_subscription was created for compatibility and is currently unimplemented
-4294967055 4294967131 0 pg_stat_sys_indexes was created for compatibility and is currently unimplemented
-4294967054 4294967131 0 pg_stat_sys_tables was created for compatibility and is currently unimplemented
-4294967053 4294967131 0 pg_stat_user_functions was created for compatibility and is currently unimplemented
-4294967052 4294967131 0 pg_stat_user_indexes was created for compatibility and is currently unimplemented
-4294967051 4294967131 0 pg_stat_user_tables was created for compatibility and is currently unimplemented
-4294967050 4294967131 0 pg_stat_wal_receiver was created for compatibility and is currently unimplemented
-4294967049 4294967131 0 pg_stat_xact_all_tables was created for compatibility and is currently unimplemented
-4294967048 4294967131 0 pg_stat_xact_sys_tables was created for compatibility and is currently unimplemented
-4294967047 4294967131 0 pg_stat_xact_user_functions was created for compatibility and is currently unimplemented
-4294967046 4294967131 0 pg_stat_xact_user_tables was created for compatibility and is currently unimplemented
-4294967045 4294967131 0 pg_statio_all_indexes was created for compatibility and is currently unimplemented
-4294967044 4294967131 0 pg_statio_all_sequences was created for compatibility and is currently unimplemented
-4294967043 4294967131 0 pg_statio_all_tables was created for compatibility and is currently unimplemented
-4294967042 4294967131 0 pg_statio_sys_indexes was created for compatibility and is currently unimplemented
-4294967041 4294967131 0 pg_statio_sys_sequences was created for compatibility and is currently unimplemented
-4294967040 4294967131 0 pg_statio_sys_tables was created for compatibility and is currently unimplemented
-4294967039 4294967131 0 pg_statio_user_indexes was created for compatibility and is currently unimplemented
-4294967038 4294967131 0 pg_statio_user_sequences was created for compatibility and is currently unimplemented
-4294967037 4294967131 0 pg_statio_user_tables was created for compatibility and is currently unimplemented
-4294967034 4294967131 0 pg_statistic was created for compatibility and is currently unimplemented
-4294967035 4294967131 0 pg_statistic_ext has the statistics objects created with CREATE STATISTICS
-4294967036 4294967131 0 pg_statistic_ext_data was created for compatibility and is currently unimplemented
-4294967032 4294967131 0 pg_stats was created for compatibility and is currently unimplemented
-4294967033 4294967131 0 pg_stats_ext was created for compatibility and is currently unimplemented
-4294967030 4294967131 0 pg_subscription was created for compatibility and is currently unimplemented
-4294967031 4294967131 0 pg_subscription_rel was created for compatibility and is currently unimplemented
-4294967029 4294967131 0 tables summary (see also information_schema.tables, pg_catalog.pg_class)
-4294967028 4294967131 0 available tablespaces (incomplete; concept inapplicable to CockroachDB)
-4294967027 4294967131 0 pg_timezone_abbrevs was created for compatibility and is currently unimplemented
-4294967026 4294967131 0 pg_timezone_names was created for compatibility and is currently unimplemented
-4294967025 4294967131 0 pg_transform was created for compatibility and is currently unimplemented
-4294967024 4294967131 0 triggers (empty - feature does not exist)
-4294967022 4294967131 0 pg_ts_config was created for compatibility and is currently unimplemented
-4294967023 4294967131 0 pg_ts_config_map was created for compatibility and is currently unimplemented
-4294967021 4294967131 0 pg_ts_dict was created for compatibility and is currently unimplemented
-4294967020 4294967131 0 pg_ts_parser was created for compatibility and is currently unimplemented
-4294967019 4294967131 0 pg_ts_template was created for compatibility and is currently unimplemented
-4294967018 4294967131 0 scalar types (incomplete)
-4294967015 4294967131 0 database users
-4294967017 4294967131 0 local to remote user mapping (empty - feature does not exist)
-4294967016 4294967131 0 pg_user_mappings was created for compatibility and is currently unimplemented
-4294967014 4294967131 0 view definitions (incomplete - see also information_schema.views)
-4294967012 4294967131 0 Shows all defined geography columns. Matches PostGIS' geography_columns functionality.
-4294967011 4294967131 0 Shows all defined geometry columns. Matches PostGIS' geometry_columns functionality.
-4294967010 4294967131 0 Shows all defined Spatial Reference Identifiers (SRIDs). Matches PostGIS' spatial_ref_sys table.
+4294967233 4294967132 0 node-level table listing all currently running range feeds
+4294967294 4294967132 0 backward inter-descriptor dependencies starting from tables accessible by current user in current database (KV scan)
+4294967292 4294967132 0 built-in functions (RAM/static)
+4294967288 4294967132 0 contention information (cluster RPC; expensive!)
+4294967239 4294967132 0 virtual table with database privileges
+4294967287 4294967132 0 DistSQL remote flows information (cluster RPC; expensive!)
+4294967236 4294967132 0 traces for in-flight spans across all nodes in the cluster (cluster RPC; expensive!)
+4294967286 4294967132 0 running queries visible by current user (cluster RPC; expensive!)
+4294967284 4294967132 0 running sessions visible to current user (cluster RPC; expensive!)
+4294967283 4294967132 0 cluster settings (RAM)
+4294967285 4294967132 0 running user transactions visible by the current user (cluster RPC; expensive!)
+4294967282 4294967132 0 CREATE statements for all user defined schemas accessible by the current user in current database (KV scan)
+4294967281 4294967132 0 CREATE and ALTER statements for all tables accessible by current user in current database (KV scan)
+4294967280 4294967132 0 CREATE statements for all user defined types accessible by the current user in current database (KV scan)
+4294967238 4294967132 0 virtual table with cross db references
+4294967279 4294967132 0 databases accessible by the current user (KV scan)
+4294967234 4294967132 0 virtual table with default privileges
+4294967278 4294967132 0 telemetry counters (RAM; local node only)
+4294967277 4294967132 0 forward inter-descriptor dependencies starting from tables accessible by current user in current database (KV scan)
+4294967274 4294967132 0 locally known gossiped health alerts (RAM; local node only)
+4294967273 4294967132 0 locally known gossiped node liveness (RAM; local node only)
+4294967272 4294967132 0 locally known edges in the gossip network (RAM; local node only)
+4294967275 4294967132 0 locally known gossiped node details (RAM; local node only)
+4294967271 4294967132 0 index columns for all indexes accessible by current user in current database (KV scan)
+4294967270 4294967132 0 cluster-wide index usage statistics (in-memory, not durable).Querying this table is an expensive operation since it creates acluster-wide RPC fanout.
+4294967240 4294967132 0 virtual table to validate descriptors
+4294967268 4294967132 0 decoded job metadata from system.jobs (KV scan)
+4294967276 4294967132 0 node liveness status, as seen by kv
+4294967267 4294967132 0 node details across the entire cluster (cluster RPC; expensive!)
+4294967266 4294967132 0 store details and status (cluster RPC; expensive!)
+4294967265 4294967132 0 acquired table leases (RAM; local node only)
+4294967237 4294967132 0 virtual table with table descriptors that still have data
+4294967293 4294967132 0 detailed identification strings (RAM, local node only)
+4294967264 4294967132 0 contention information (RAM; local node only)
+4294967263 4294967132 0 DistSQL remote flows information (RAM; local node only)
+4294967269 4294967132 0 in-flight spans (RAM; local node only)
+4294967259 4294967132 0 current values for metrics (RAM; local node only)
+4294967262 4294967132 0 running queries visible by current user (RAM; local node only)
+4294967252 4294967132 0 server parameters, useful to construct connection URLs (RAM, local node only)
+4294967260 4294967132 0 running sessions visible by current user (RAM; local node only)
+4294967258 4294967132 0 statement statistics (in-memory, not durable; local node only). This table is wiped periodically (by default, at least every two hours)
+4294967243 4294967132 0 finer-grained transaction statistics (in-memory, not durable; local node only). This table is wiped periodically (by default, at least every two hours)
+4294967261 4294967132 0 running user transactions visible by the current user (RAM; local node only)
+4294967257 4294967132 0 per-application transaction statistics (in-memory, not durable; local node only). This table is wiped periodically (by default, at least every two hours)
+4294967256 4294967132 0 defined partitions for all tables/indexes accessible by the current user in the current database (KV scan)
+4294967255 4294967132 0 comments for predefined virtual tables (RAM/static)
+4294967254 4294967132 0 range metadata without leaseholder details (KV join; expensive!)
+4294967235 4294967132 0 available regions for the cluster
+4294967251 4294967132 0 ongoing schema changes, across all descriptors accessible by current user (KV scan; expensive!)
+4294967250 4294967132 0 session trace accumulated so far (RAM)
+4294967249 4294967132 0 session variables (RAM)
+4294967248 4294967132 0 statement statistics (cluster-wide).Querying this table is an expensive operation since it creates a cluster-wide RPC-fanout.
+4294967247 4294967132 0 details for all columns accessible by current user in current database (KV scan)
+4294967246 4294967132 0 indexes accessible by current user in current database (KV scan)
+4294967244 4294967132 0 stats for all tables accessible by current user in current database as of 10s ago
+4294967245 4294967132 0 table descriptors accessible by current user, including non-public and virtual (KV scan; expensive!)
+4294967242 4294967132 0 transaction statistics (cluster-wide).Querying this table is an expensive operation since it creates a cluster-wide RPC-fanout.
+4294967241 4294967132 0 decoded zone configurations from system.zones (KV scan)
+4294967230 4294967132 0 roles for which the current user has admin option
+4294967229 4294967132 0 roles available to the current user
+4294967228 4294967132 0 attributes was created for compatibility and is currently unimplemented
+4294967227 4294967132 0 character sets available in the current database
+4294967226 4294967132 0 check_constraint_routine_usage was created for compatibility and is currently unimplemented
+4294967225 4294967132 0 check constraints
+4294967224 4294967132 0 identifies which character set the available collations are
+4294967223 4294967132 0 shows the collations available in the current database
+4294967222 4294967132 0 column_column_usage was created for compatibility and is currently unimplemented
+4294967221 4294967132 0 column_domain_usage was created for compatibility and is currently unimplemented
+4294967220 4294967132 0 column_options was created for compatibility and is currently unimplemented
+4294967219 4294967132 0 column privilege grants (incomplete)
+4294967218 4294967132 0 column_statistics was created for compatibility and is currently unimplemented
+4294967217 4294967132 0 columns with user defined types
+4294967215 4294967132 0 table and view columns (incomplete)
+4294967216 4294967132 0 columns_extensions was created for compatibility and is currently unimplemented
+4294967214 4294967132 0 columns usage by constraints
+4294967213 4294967132 0 constraint_table_usage was created for compatibility and is currently unimplemented
+4294967212 4294967132 0 data_type_privileges was created for compatibility and is currently unimplemented
+4294967211 4294967132 0 domain_constraints was created for compatibility and is currently unimplemented
+4294967210 4294967132 0 domain_udt_usage was created for compatibility and is currently unimplemented
+4294967209 4294967132 0 domains was created for compatibility and is currently unimplemented
+4294967208 4294967132 0 element_types was created for compatibility and is currently unimplemented
+4294967207 4294967132 0 roles for the current user
+4294967206 4294967132 0 engines was created for compatibility and is currently unimplemented
+4294967205 4294967132 0 events was created for compatibility and is currently unimplemented
+4294967204 4294967132 0 files was created for compatibility and is currently unimplemented
+4294967203 4294967132 0 foreign_data_wrapper_options was created for compatibility and is currently unimplemented
+4294967202 4294967132 0 foreign_data_wrappers was created for compatibility and is currently unimplemented
+4294967201 4294967132 0 foreign_server_options was created for compatibility and is currently unimplemented
+4294967200 4294967132 0 foreign_servers was created for compatibility and is currently unimplemented
+4294967199 4294967132 0 foreign_table_options was created for compatibility and is currently unimplemented
+4294967198 4294967132 0 foreign_tables was created for compatibility and is currently unimplemented
+4294967197 4294967132 0 information_schema_catalog_name was created for compatibility and is currently unimplemented
+4294967196 4294967132 0 column usage by indexes and key constraints
+4294967195 4294967132 0 keywords was created for compatibility and is currently unimplemented
+4294967194 4294967132 0 optimizer_trace was created for compatibility and is currently unimplemented
+4294967193 4294967132 0 built-in function parameters (empty - introspection not yet supported)
+4294967192 4294967132 0 partitions was created for compatibility and is currently unimplemented
+4294967191 4294967132 0 plugins was created for compatibility and is currently unimplemented
+4294967190 4294967132 0 processlist was created for compatibility and is currently unimplemented
+4294967189 4294967132 0 profiling was created for compatibility and is currently unimplemented
+4294967188 4294967132 0 foreign key constraints
+4294967187 4294967132 0 resource_groups was created for compatibility and is currently unimplemented
+4294967186 4294967132 0 role_column_grants was created for compatibility and is currently unimplemented
+4294967185 4294967132 0 role_routine_grants was created for compatibility and is currently unimplemented
+4294967184 4294967132 0 privileges granted on table or views (incomplete; see also information_schema.table_privileges; may contain excess users or roles)
+4294967183 4294967132 0 role_udt_grants was created for compatibility and is currently unimplemented
+4294967182 4294967132 0 role_usage_grants was created for compatibility and is currently unimplemented
+4294967181 4294967132 0 routine_privileges was created for compatibility and is currently unimplemented
+4294967180 4294967132 0 built-in functions (empty - introspection not yet supported)
+4294967173 4294967132 0 schema privileges (incomplete; may contain excess users or roles)
+4294967174 4294967132 0 database schemas (may contain schemata without permission)
+4294967175 4294967132 0 schemata_extensions was created for compatibility and is currently unimplemented
+4294967172 4294967132 0 sequences
+4294967171 4294967132 0 exposes the session variables.
+4294967179 4294967132 0 sql_features was created for compatibility and is currently unimplemented
+4294967178 4294967132 0 sql_implementation_info was created for compatibility and is currently unimplemented
+4294967177 4294967132 0 sql_parts was created for compatibility and is currently unimplemented
+4294967176 4294967132 0 sql_sizing was created for compatibility and is currently unimplemented
+4294967170 4294967132 0 st_geometry_columns was created for compatibility and is currently unimplemented
+4294967169 4294967132 0 st_spatial_reference_systems was created for compatibility and is currently unimplemented
+4294967168 4294967132 0 st_units_of_measure was created for compatibility and is currently unimplemented
+4294967167 4294967132 0 index metadata and statistics (incomplete)
+4294967166 4294967132 0 table constraints
+4294967165 4294967132 0 table_constraints_extensions was created for compatibility and is currently unimplemented
+4294967164 4294967132 0 privileges granted on table or views (incomplete; may contain excess users or roles)
+4294967162 4294967132 0 tables and views
+4294967163 4294967132 0 tables_extensions was created for compatibility and is currently unimplemented
+4294967160 4294967132 0 tablespaces was created for compatibility and is currently unimplemented
+4294967161 4294967132 0 tablespaces_extensions was created for compatibility and is currently unimplemented
+4294967159 4294967132 0 transforms was created for compatibility and is currently unimplemented
+4294967158 4294967132 0 triggered_update_columns was created for compatibility and is currently unimplemented
+4294967157 4294967132 0 triggers was created for compatibility and is currently unimplemented
+4294967156 4294967132 0 type privileges (incomplete; may contain excess users or roles)
+4294967155 4294967132 0 udt_privileges was created for compatibility and is currently unimplemented
+4294967154 4294967132 0 usage_privileges was created for compatibility and is currently unimplemented
+4294967153 4294967132 0 user_attributes was created for compatibility and is currently unimplemented
+4294967152 4294967132 0 user_defined_types was created for compatibility and is currently unimplemented
+4294967151 4294967132 0 user_mapping_options was created for compatibility and is currently unimplemented
+4294967150 4294967132 0 user_mappings was created for compatibility and is currently unimplemented
+4294967149 4294967132 0 grantable privileges (incomplete)
+4294967148 4294967132 0 view_column_usage was created for compatibility and is currently unimplemented
+4294967147 4294967132 0 view_routine_usage was created for compatibility and is currently unimplemented
+4294967146 4294967132 0 view_table_usage was created for compatibility and is currently unimplemented
+4294967145 4294967132 0 views (incomplete)
+4294967143 4294967132 0 aggregated built-in functions (incomplete)
+4294967142 4294967132 0 index access methods (incomplete)
+4294967141 4294967132 0 pg_amop was created for compatibility and is currently unimplemented
+4294967140 4294967132 0 pg_amproc was created for compatibility and is currently unimplemented
+4294967139 4294967132 0 column default values
+4294967138 4294967132 0 table columns (incomplete - see also information_schema.columns)
+4294967136 4294967132 0 role membership
+4294967137 4294967132 0 authorization identifiers - differs from postgres as we do not display passwords,
+4294967135 4294967132 0 pg_available_extension_versions was created for compatibility and is currently unimplemented
+4294967134 4294967132 0 available extensions
+4294967133 4294967132 0 casts (empty - needs filling out)
+4294967132 4294967132 0 tables and relation-like objects (incomplete - see also information_schema.tables/sequences/views)
+4294967131 4294967132 0 available collations (incomplete)
+4294967130 4294967132 0 pg_config was created for compatibility and is currently unimplemented
+4294967129 4294967132 0 table constraints (incomplete - see also information_schema.table_constraints)
+4294967128 4294967132 0 encoding conversions (empty - unimplemented)
+4294967127 4294967132 0 pg_cursors was created for compatibility and is currently unimplemented
+4294967126 4294967132 0 available databases (incomplete)
+4294967125 4294967132 0 contains the default values that have been configured for session variables
+4294967124 4294967132 0 default ACLs; these are the privileges that will be assigned to newly created objects
+4294967123 4294967132 0 dependency relationships (incomplete)
+4294967122 4294967132 0 object comments
+4294967121 4294967132 0 enum types and labels (empty - feature does not exist)
+4294967120 4294967132 0 event triggers (empty - feature does not exist)
+4294967119 4294967132 0 installed extensions (empty - feature does not exist)
+4294967118 4294967132 0 pg_file_settings was created for compatibility and is currently unimplemented
+4294967117 4294967132 0 foreign data wrappers (empty - feature does not exist)
+4294967116 4294967132 0 foreign servers (empty - feature does not exist)
+4294967115 4294967132 0 foreign tables (empty - feature does not exist)
+4294967114 4294967132 0 pg_group was created for compatibility and is currently unimplemented
+4294967113 4294967132 0 pg_hba_file_rules was created for compatibility and is currently unimplemented
+4294967112 4294967132 0 indexes (incomplete)
+4294967111 4294967132 0 index creation statements
+4294967110 4294967132 0 table inheritance hierarchy (empty - feature does not exist)
+4294967109 4294967132 0 pg_init_privs was created for compatibility and is currently unimplemented
+4294967108 4294967132 0 available languages (empty - feature does not exist)
+4294967106 4294967132 0 pg_largeobject was created for compatibility and is currently unimplemented
+4294967107 4294967132 0 pg_largeobject_metadata was created for compatibility and is currently unimplemented
+4294967105 4294967132 0 locks held by active processes (empty - feature does not exist)
+4294967104 4294967132 0 available materialized views (empty - feature does not exist)
+4294967103 4294967132 0 available namespaces (incomplete; namespaces and databases are congruent in CockroachDB)
+4294967102 4294967132 0 opclass (empty - Operator classes not supported yet)
+4294967101 4294967132 0 operators (incomplete)
+4294967100 4294967132 0 pg_opfamily was created for compatibility and is currently unimplemented
+4294967099 4294967132 0 pg_partitioned_table was created for compatibility and is currently unimplemented
+4294967098 4294967132 0 pg_policies was created for compatibility and is currently unimplemented
+4294967097 4294967132 0 pg_policy was created for compatibility and is currently unimplemented
+4294967096 4294967132 0 prepared statements
+4294967095 4294967132 0 prepared transactions (empty - feature does not exist)
+4294967094 4294967132 0 built-in functions (incomplete)
+4294967092 4294967132 0 pg_publication was created for compatibility and is currently unimplemented
+4294967093 4294967132 0 pg_publication_rel was created for compatibility and is currently unimplemented
+4294967091 4294967132 0 pg_publication_tables was created for compatibility and is currently unimplemented
+4294967090 4294967132 0 range types (empty - feature does not exist)
+4294967088 4294967132 0 pg_replication_origin was created for compatibility and is currently unimplemented
+4294967089 4294967132 0 pg_replication_origin_status was created for compatibility and is currently unimplemented
+4294967087 4294967132 0 pg_replication_slots was created for compatibility and is currently unimplemented
+4294967086 4294967132 0 rewrite rules (only for referencing on pg_depend for table-view dependencies)
+4294967085 4294967132 0 database roles
+4294967084 4294967132 0 pg_rules was created for compatibility and is currently unimplemented
+4294967082 4294967132 0 security labels (empty - feature does not exist)
+4294967083 4294967132 0 security labels (empty)
+4294967081 4294967132 0 sequences (see also information_schema.sequences)
+4294967080 4294967132 0 pg_sequences is very similar as pg_sequence.
+4294967079 4294967132 0 session variables (incomplete)
+4294967078 4294967132 0 pg_shadow lists properties for roles that are marked as rolcanlogin in pg_authid
+4294967075 4294967132 0 Shared Dependencies (Roles depending on objects).
+4294967077 4294967132 0 shared object comments
+4294967074 4294967132 0 pg_shmem_allocations was created for compatibility and is currently unimplemented
+4294967076 4294967132 0 shared security labels (empty - feature not supported)
+4294967073 4294967132 0 backend access statistics (empty - monitoring works differently in CockroachDB)
+4294967072 4294967132 0 pg_stat_all_indexes was created for compatibility and is currently unimplemented
+4294967071 4294967132 0 pg_stat_all_tables was created for compatibility and is currently unimplemented
+4294967070 4294967132 0 pg_stat_archiver was created for compatibility and is currently unimplemented
+4294967069 4294967132 0 pg_stat_bgwriter was created for compatibility and is currently unimplemented
+4294967067 4294967132 0 pg_stat_database was created for compatibility and is currently unimplemented
+4294967068 4294967132 0 pg_stat_database_conflicts was created for compatibility and is currently unimplemented
+4294967066 4294967132 0 pg_stat_gssapi was created for compatibility and is currently unimplemented
+4294967065 4294967132 0 pg_stat_progress_analyze was created for compatibility and is currently unimplemented
+4294967064 4294967132 0 pg_stat_progress_basebackup was created for compatibility and is currently unimplemented
+4294967063 4294967132 0 pg_stat_progress_cluster was created for compatibility and is currently unimplemented
+4294967062 4294967132 0 pg_stat_progress_create_index was created for compatibility and is currently unimplemented
+4294967061 4294967132 0 pg_stat_progress_vacuum was created for compatibility and is currently unimplemented
+4294967060 4294967132 0 pg_stat_replication was created for compatibility and is currently unimplemented
+4294967059 4294967132 0 pg_stat_slru was created for compatibility and is currently unimplemented
+4294967058 4294967132 0 pg_stat_ssl was created for compatibility and is currently unimplemented
+4294967057 4294967132 0 pg_stat_subscription was created for compatibility and is currently unimplemented
+4294967056 4294967132 0 pg_stat_sys_indexes was created for compatibility and is currently unimplemented
+4294967055 4294967132 0 pg_stat_sys_tables was created for compatibility and is currently unimplemented
+4294967054 4294967132 0 pg_stat_user_functions was created for compatibility and is currently unimplemented
+4294967053 4294967132 0 pg_stat_user_indexes was created for compatibility and is currently unimplemented
+4294967052 4294967132 0 pg_stat_user_tables was created for compatibility and is currently unimplemented
+4294967051 4294967132 0 pg_stat_wal_receiver was created for compatibility and is currently unimplemented
+4294967050 4294967132 0 pg_stat_xact_all_tables was created for compatibility and is currently unimplemented
+4294967049 4294967132 0 pg_stat_xact_sys_tables was created for compatibility and is currently unimplemented
+4294967048 4294967132 0 pg_stat_xact_user_functions was created for compatibility and is currently unimplemented
+4294967047 4294967132 0 pg_stat_xact_user_tables was created for compatibility and is currently unimplemented
+4294967046 4294967132 0 pg_statio_all_indexes was created for compatibility and is currently unimplemented
+4294967045 4294967132 0 pg_statio_all_sequences was created for compatibility and is currently unimplemented
+4294967044 4294967132 0 pg_statio_all_tables was created for compatibility and is currently unimplemented
+4294967043 4294967132 0 pg_statio_sys_indexes was created for compatibility and is currently unimplemented
+4294967042 4294967132 0 pg_statio_sys_sequences was created for compatibility and is currently unimplemented
+4294967041 4294967132 0 pg_statio_sys_tables was created for compatibility and is currently unimplemented
+4294967040 4294967132 0 pg_statio_user_indexes was created for compatibility and is currently unimplemented
+4294967039 4294967132 0 pg_statio_user_sequences was created for compatibility and is currently unimplemented
+4294967038 4294967132 0 pg_statio_user_tables was created for compatibility and is currently unimplemented
+4294967035 4294967132 0 pg_statistic was created for compatibility and is currently unimplemented
+4294967036 4294967132 0 pg_statistic_ext has the statistics objects created with CREATE STATISTICS
+4294967037 4294967132 0 pg_statistic_ext_data was created for compatibility and is currently unimplemented
+4294967033 4294967132 0 pg_stats was created for compatibility and is currently unimplemented
+4294967034 4294967132 0 pg_stats_ext was created for compatibility and is currently unimplemented
+4294967031 4294967132 0 pg_subscription was created for compatibility and is currently unimplemented
+4294967032 4294967132 0 pg_subscription_rel was created for compatibility and is currently unimplemented
+4294967030 4294967132 0 tables summary (see also information_schema.tables, pg_catalog.pg_class)
+4294967029 4294967132 0 available tablespaces (incomplete; concept inapplicable to CockroachDB)
+4294967028 4294967132 0 pg_timezone_abbrevs was created for compatibility and is currently unimplemented
+4294967027 4294967132 0 pg_timezone_names was created for compatibility and is currently unimplemented
+4294967026 4294967132 0 pg_transform was created for compatibility and is currently unimplemented
+4294967025 4294967132 0 triggers (empty - feature does not exist)
+4294967023 4294967132 0 pg_ts_config was created for compatibility and is currently unimplemented
+4294967024 4294967132 0 pg_ts_config_map was created for compatibility and is currently unimplemented
+4294967022 4294967132 0 pg_ts_dict was created for compatibility and is currently unimplemented
+4294967021 4294967132 0 pg_ts_parser was created for compatibility and is currently unimplemented
+4294967020 4294967132 0 pg_ts_template was created for compatibility and is currently unimplemented
+4294967019 4294967132 0 scalar types (incomplete)
+4294967016 4294967132 0 database users
+4294967018 4294967132 0 local to remote user mapping (empty - feature does not exist)
+4294967017 4294967132 0 pg_user_mappings was created for compatibility and is currently unimplemented
+4294967015 4294967132 0 view definitions (incomplete - see also information_schema.views)
+4294967013 4294967132 0 Shows all defined geography columns. Matches PostGIS' geography_columns functionality.
+4294967012 4294967132 0 Shows all defined geometry columns. Matches PostGIS' geometry_columns functionality.
+4294967011 4294967132 0 Shows all defined Spatial Reference Identifiers (SRIDs). Matches PostGIS' spatial_ref_sys table.
## pg_catalog.pg_shdescription
@@ -4025,101 +4019,100 @@ FROM
WHERE
name != 'optimizer' AND name != 'crdb_version' AND name != 'session_id'
----
-name setting category short_desc extra_desc vartype
-application_name · NULL NULL NULL string
-backslash_quote safe_encoding NULL NULL NULL string
-bytea_output hex NULL NULL NULL string
-client_encoding UTF8 NULL NULL NULL string
-client_min_messages notice NULL NULL NULL string
-database test NULL NULL NULL string
-datestyle ISO, MDY NULL NULL NULL string
-datestyle_enabled off NULL NULL NULL string
-default_int_size 8 NULL NULL NULL string
-default_tablespace · NULL NULL NULL string
-default_transaction_isolation serializable NULL NULL NULL string
-default_transaction_priority normal NULL NULL NULL string
-default_transaction_read_only off NULL NULL NULL string
-default_transaction_use_follower_reads off NULL NULL NULL string
-disable_partially_distributed_plans off NULL NULL NULL string
-disable_plan_gists off NULL NULL NULL string
-disallow_full_table_scans off NULL NULL NULL string
-distsql off NULL NULL NULL string
-distsql_workmem 64 MiB NULL NULL NULL string
-enable_copying_partitioning_when_deinterleaving_table off NULL NULL NULL string
-enable_experimental_alter_column_type_general off NULL NULL NULL string
-enable_experimental_stream_replication off NULL NULL NULL string
-enable_implicit_select_for_update on NULL NULL NULL string
-enable_insert_fast_path on NULL NULL NULL string
-enable_multiregion_placement_policy off NULL NULL NULL string
-enable_seqscan on NULL NULL NULL string
-enable_zigzag_join on NULL NULL NULL string
-escape_string_warning on NULL NULL NULL string
-experimental_distsql_planning off NULL NULL NULL string
-experimental_enable_auto_rehoming off NULL NULL NULL string
-experimental_enable_hash_sharded_indexes off NULL NULL NULL string
-experimental_enable_implicit_column_partitioning off NULL NULL NULL string
-experimental_enable_temp_tables off NULL NULL NULL string
-experimental_enable_unique_without_index_constraints on NULL NULL NULL string
-experimental_use_new_schema_changer off NULL NULL NULL string
-extra_float_digits 0 NULL NULL NULL string
-force_savepoint_restart off NULL NULL NULL string
-foreign_key_cascades_limit 10000 NULL NULL NULL string
-idle_in_session_timeout 0 NULL NULL NULL string
-idle_in_transaction_session_timeout 0 NULL NULL NULL string
-inject_retry_errors_enabled off NULL NULL NULL string
-integer_datetimes on NULL NULL NULL string
-intervalstyle postgres NULL NULL NULL string
-intervalstyle_enabled off NULL NULL NULL string
-is_superuser on NULL NULL NULL string
-large_full_scan_rows 1000 NULL NULL NULL string
-lc_collate C.UTF-8 NULL NULL NULL string
-lc_ctype C.UTF-8 NULL NULL NULL string
-lc_messages C.UTF-8 NULL NULL NULL string
-lc_monetary C.UTF-8 NULL NULL NULL string
-lc_numeric C.UTF-8 NULL NULL NULL string
-lc_time C.UTF-8 NULL NULL NULL string
-locality region=test,dc=dc1 NULL NULL NULL string
-locality_optimized_partitioned_index_scan on NULL NULL NULL string
-lock_timeout 0 NULL NULL NULL string
-max_identifier_length 128 NULL NULL NULL string
-max_index_keys 32 NULL NULL NULL string
-node_id 1 NULL NULL NULL string
-null_ordered_last off NULL NULL NULL string
-on_update_rehome_row_enabled on NULL NULL NULL string
-optimizer_use_histograms on NULL NULL NULL string
-optimizer_use_multicol_stats on NULL NULL NULL string
-override_multi_region_zone_config off NULL NULL NULL string
-prefer_lookup_joins_for_fks off NULL NULL NULL string
-propagate_input_ordering off NULL NULL NULL string
-reorder_joins_limit 8 NULL NULL NULL string
-require_explicit_primary_keys off NULL NULL NULL string
-results_buffer_size 16384 NULL NULL NULL string
-role none NULL NULL NULL string
-row_security off NULL NULL NULL string
-search_path "$user", public NULL NULL NULL string
-serial_normalization rowid NULL NULL NULL string
-server_encoding UTF8 NULL NULL NULL string
-server_version 13.0.0 NULL NULL NULL string
-server_version_num 130000 NULL NULL NULL string
-session_user root NULL NULL NULL string
-sql_safe_updates off NULL NULL NULL string
-standard_conforming_strings on NULL NULL NULL string
-statement_timeout 0 NULL NULL NULL string
-stub_catalog_tables on NULL NULL NULL string
-synchronize_seqscans on NULL NULL NULL string
-synchronous_commit on NULL NULL NULL string
-testing_vectorize_inject_panics off NULL NULL NULL string
-timezone UTC NULL NULL NULL string
-tracing off NULL NULL NULL string
-transaction_isolation serializable NULL NULL NULL string
-transaction_priority normal NULL NULL NULL string
-transaction_read_only off NULL NULL NULL string
-transaction_rows_read_err 0 NULL NULL NULL string
-transaction_rows_read_log 0 NULL NULL NULL string
-transaction_rows_written_err 0 NULL NULL NULL string
-transaction_rows_written_log 0 NULL NULL NULL string
-transaction_status NoTxn NULL NULL NULL string
-vectorize on NULL NULL NULL string
+name setting category short_desc extra_desc vartype
+application_name · NULL NULL NULL string
+backslash_quote safe_encoding NULL NULL NULL string
+bytea_output hex NULL NULL NULL string
+client_encoding UTF8 NULL NULL NULL string
+client_min_messages notice NULL NULL NULL string
+database test NULL NULL NULL string
+datestyle ISO, MDY NULL NULL NULL string
+datestyle_enabled off NULL NULL NULL string
+default_int_size 8 NULL NULL NULL string
+default_tablespace · NULL NULL NULL string
+default_transaction_isolation serializable NULL NULL NULL string
+default_transaction_priority normal NULL NULL NULL string
+default_transaction_read_only off NULL NULL NULL string
+default_transaction_use_follower_reads off NULL NULL NULL string
+disable_partially_distributed_plans off NULL NULL NULL string
+disable_plan_gists off NULL NULL NULL string
+disallow_full_table_scans off NULL NULL NULL string
+distsql off NULL NULL NULL string
+distsql_workmem 64 MiB NULL NULL NULL string
+enable_experimental_alter_column_type_general off NULL NULL NULL string
+enable_experimental_stream_replication off NULL NULL NULL string
+enable_implicit_select_for_update on NULL NULL NULL string
+enable_insert_fast_path on NULL NULL NULL string
+enable_multiregion_placement_policy off NULL NULL NULL string
+enable_seqscan on NULL NULL NULL string
+enable_zigzag_join on NULL NULL NULL string
+escape_string_warning on NULL NULL NULL string
+experimental_distsql_planning off NULL NULL NULL string
+experimental_enable_auto_rehoming off NULL NULL NULL string
+experimental_enable_hash_sharded_indexes off NULL NULL NULL string
+experimental_enable_implicit_column_partitioning off NULL NULL NULL string
+experimental_enable_temp_tables off NULL NULL NULL string
+experimental_enable_unique_without_index_constraints on NULL NULL NULL string
+experimental_use_new_schema_changer off NULL NULL NULL string
+extra_float_digits 0 NULL NULL NULL string
+force_savepoint_restart off NULL NULL NULL string
+foreign_key_cascades_limit 10000 NULL NULL NULL string
+idle_in_session_timeout 0 NULL NULL NULL string
+idle_in_transaction_session_timeout 0 NULL NULL NULL string
+inject_retry_errors_enabled off NULL NULL NULL string
+integer_datetimes on NULL NULL NULL string
+intervalstyle postgres NULL NULL NULL string
+intervalstyle_enabled off NULL NULL NULL string
+is_superuser on NULL NULL NULL string
+large_full_scan_rows 1000 NULL NULL NULL string
+lc_collate C.UTF-8 NULL NULL NULL string
+lc_ctype C.UTF-8 NULL NULL NULL string
+lc_messages C.UTF-8 NULL NULL NULL string
+lc_monetary C.UTF-8 NULL NULL NULL string
+lc_numeric C.UTF-8 NULL NULL NULL string
+lc_time C.UTF-8 NULL NULL NULL string
+locality region=test,dc=dc1 NULL NULL NULL string
+locality_optimized_partitioned_index_scan on NULL NULL NULL string
+lock_timeout 0 NULL NULL NULL string
+max_identifier_length 128 NULL NULL NULL string
+max_index_keys 32 NULL NULL NULL string
+node_id 1 NULL NULL NULL string
+null_ordered_last off NULL NULL NULL string
+on_update_rehome_row_enabled on NULL NULL NULL string
+optimizer_use_histograms on NULL NULL NULL string
+optimizer_use_multicol_stats on NULL NULL NULL string
+override_multi_region_zone_config off NULL NULL NULL string
+prefer_lookup_joins_for_fks off NULL NULL NULL string
+propagate_input_ordering off NULL NULL NULL string
+reorder_joins_limit 8 NULL NULL NULL string
+require_explicit_primary_keys off NULL NULL NULL string
+results_buffer_size 16384 NULL NULL NULL string
+role none NULL NULL NULL string
+row_security off NULL NULL NULL string
+search_path "$user", public NULL NULL NULL string
+serial_normalization rowid NULL NULL NULL string
+server_encoding UTF8 NULL NULL NULL string
+server_version 13.0.0 NULL NULL NULL string
+server_version_num 130000 NULL NULL NULL string
+session_user root NULL NULL NULL string
+sql_safe_updates off NULL NULL NULL string
+standard_conforming_strings on NULL NULL NULL string
+statement_timeout 0 NULL NULL NULL string
+stub_catalog_tables on NULL NULL NULL string
+synchronize_seqscans on NULL NULL NULL string
+synchronous_commit on NULL NULL NULL string
+testing_vectorize_inject_panics off NULL NULL NULL string
+timezone UTC NULL NULL NULL string
+tracing off NULL NULL NULL string
+transaction_isolation serializable NULL NULL NULL string
+transaction_priority normal NULL NULL NULL string
+transaction_read_only off NULL NULL NULL string
+transaction_rows_read_err 0 NULL NULL NULL string
+transaction_rows_read_log 0 NULL NULL NULL string
+transaction_rows_written_err 0 NULL NULL NULL string
+transaction_rows_written_log 0 NULL NULL NULL string
+transaction_status NoTxn NULL NULL NULL string
+vectorize on NULL NULL NULL string
query TTTTTTT colnames
SELECT
@@ -4129,203 +4122,201 @@ FROM
WHERE
name != 'optimizer' AND name != 'crdb_version' AND name != 'session_id'
----
-name setting unit context enumvals boot_val reset_val
-application_name · NULL user NULL · ·
-backslash_quote safe_encoding NULL user NULL safe_encoding safe_encoding
-bytea_output hex NULL user NULL hex hex
-client_encoding UTF8 NULL user NULL UTF8 UTF8
-client_min_messages notice NULL user NULL notice notice
-database test NULL user NULL · test
-datestyle ISO, MDY NULL user NULL ISO, MDY ISO, MDY
-datestyle_enabled off NULL user NULL off off
-default_int_size 8 NULL user NULL 8 8
-default_tablespace · NULL user NULL · ·
-default_transaction_isolation serializable NULL user NULL default default
-default_transaction_priority normal NULL user NULL normal normal
-default_transaction_read_only off NULL user NULL off off
-default_transaction_use_follower_reads off NULL user NULL off off
-disable_partially_distributed_plans off NULL user NULL off off
-disable_plan_gists off NULL user NULL off off
-disallow_full_table_scans off NULL user NULL off off
-distsql off NULL user NULL off off
-distsql_workmem 64 MiB NULL user NULL 64 MiB 64 MiB
-enable_copying_partitioning_when_deinterleaving_table off NULL user NULL off off
-enable_experimental_alter_column_type_general off NULL user NULL off off
-enable_experimental_stream_replication off NULL user NULL off off
-enable_implicit_select_for_update on NULL user NULL on on
-enable_insert_fast_path on NULL user NULL on on
-enable_multiregion_placement_policy off NULL user NULL off off
-enable_seqscan on NULL user NULL on on
-enable_zigzag_join on NULL user NULL on on
-escape_string_warning on NULL user NULL on on
-experimental_distsql_planning off NULL user NULL off off
-experimental_enable_auto_rehoming off NULL user NULL off off
-experimental_enable_hash_sharded_indexes off NULL user NULL off off
-experimental_enable_implicit_column_partitioning off NULL user NULL off off
-experimental_enable_temp_tables off NULL user NULL off off
-experimental_enable_unique_without_index_constraints on NULL user NULL off off
-experimental_use_new_schema_changer off NULL user NULL off off
-extra_float_digits 0 NULL user NULL 0 2
-force_savepoint_restart off NULL user NULL off off
-foreign_key_cascades_limit 10000 NULL user NULL 10000 10000
-idle_in_session_timeout 0 NULL user NULL 0s 0s
-idle_in_transaction_session_timeout 0 NULL user NULL 0s 0s
-inject_retry_errors_enabled off NULL user NULL off off
-integer_datetimes on NULL user NULL on on
-intervalstyle postgres NULL user NULL postgres postgres
-intervalstyle_enabled off NULL user NULL off off
-is_superuser on NULL user NULL on on
-large_full_scan_rows 1000 NULL user NULL 1000 1000
-lc_collate C.UTF-8 NULL user NULL C.UTF-8 C.UTF-8
-lc_ctype C.UTF-8 NULL user NULL C.UTF-8 C.UTF-8
-lc_messages C.UTF-8 NULL user NULL C.UTF-8 C.UTF-8
-lc_monetary C.UTF-8 NULL user NULL C.UTF-8 C.UTF-8
-lc_numeric C.UTF-8 NULL user NULL C.UTF-8 C.UTF-8
-lc_time C.UTF-8 NULL user NULL C.UTF-8 C.UTF-8
-locality region=test,dc=dc1 NULL user NULL region=test,dc=dc1 region=test,dc=dc1
-locality_optimized_partitioned_index_scan on NULL user NULL on on
-lock_timeout 0 NULL user NULL 0s 0s
-max_identifier_length 128 NULL user NULL 128 128
-max_index_keys 32 NULL user NULL 32 32
-node_id 1 NULL user NULL 1 1
-null_ordered_last off NULL user NULL off off
-on_update_rehome_row_enabled on NULL user NULL on on
-optimizer_use_histograms on NULL user NULL on on
-optimizer_use_multicol_stats on NULL user NULL on on
-override_multi_region_zone_config off NULL user NULL off off
-prefer_lookup_joins_for_fks off NULL user NULL off off
-propagate_input_ordering off NULL user NULL off off
-reorder_joins_limit 8 NULL user NULL 8 8
-require_explicit_primary_keys off NULL user NULL off off
-results_buffer_size 16384 NULL user NULL 16384 16384
-role none NULL user NULL none none
-row_security off NULL user NULL off off
-search_path "$user", public NULL user NULL $user,public $user,public
-serial_normalization rowid NULL user NULL rowid rowid
-server_encoding UTF8 NULL user NULL UTF8 UTF8
-server_version 13.0.0 NULL user NULL 13.0.0 13.0.0
-server_version_num 130000 NULL user NULL 130000 130000
-session_user root NULL user NULL root root
-sql_safe_updates off NULL user NULL off off
-standard_conforming_strings on NULL user NULL on on
-statement_timeout 0 NULL user NULL 0s 0s
-stub_catalog_tables on NULL user NULL on on
-synchronize_seqscans on NULL user NULL on on
-synchronous_commit on NULL user NULL on on
-testing_vectorize_inject_panics off NULL user NULL off off
-timezone UTC NULL user NULL UTC UTC
-tracing off NULL user NULL off off
-transaction_isolation serializable NULL user NULL serializable serializable
-transaction_priority normal NULL user NULL normal normal
-transaction_read_only off NULL user NULL off off
-transaction_rows_read_err 0 NULL user NULL 0 0
-transaction_rows_read_log 0 NULL user NULL 0 0
-transaction_rows_written_err 0 NULL user NULL 0 0
-transaction_rows_written_log 0 NULL user NULL 0 0
-transaction_status NoTxn NULL user NULL NoTxn NoTxn
-vectorize on NULL user NULL on on
+name setting unit context enumvals boot_val reset_val
+application_name · NULL user NULL · ·
+backslash_quote safe_encoding NULL user NULL safe_encoding safe_encoding
+bytea_output hex NULL user NULL hex hex
+client_encoding UTF8 NULL user NULL UTF8 UTF8
+client_min_messages notice NULL user NULL notice notice
+database test NULL user NULL · test
+datestyle ISO, MDY NULL user NULL ISO, MDY ISO, MDY
+datestyle_enabled off NULL user NULL off off
+default_int_size 8 NULL user NULL 8 8
+default_tablespace · NULL user NULL · ·
+default_transaction_isolation serializable NULL user NULL default default
+default_transaction_priority normal NULL user NULL normal normal
+default_transaction_read_only off NULL user NULL off off
+default_transaction_use_follower_reads off NULL user NULL off off
+disable_partially_distributed_plans off NULL user NULL off off
+disable_plan_gists off NULL user NULL off off
+disallow_full_table_scans off NULL user NULL off off
+distsql off NULL user NULL off off
+distsql_workmem 64 MiB NULL user NULL 64 MiB 64 MiB
+enable_experimental_alter_column_type_general off NULL user NULL off off
+enable_experimental_stream_replication off NULL user NULL off off
+enable_implicit_select_for_update on NULL user NULL on on
+enable_insert_fast_path on NULL user NULL on on
+enable_multiregion_placement_policy off NULL user NULL off off
+enable_seqscan on NULL user NULL on on
+enable_zigzag_join on NULL user NULL on on
+escape_string_warning on NULL user NULL on on
+experimental_distsql_planning off NULL user NULL off off
+experimental_enable_auto_rehoming off NULL user NULL off off
+experimental_enable_hash_sharded_indexes off NULL user NULL off off
+experimental_enable_implicit_column_partitioning off NULL user NULL off off
+experimental_enable_temp_tables off NULL user NULL off off
+experimental_enable_unique_without_index_constraints on NULL user NULL off off
+experimental_use_new_schema_changer off NULL user NULL off off
+extra_float_digits 0 NULL user NULL 0 2
+force_savepoint_restart off NULL user NULL off off
+foreign_key_cascades_limit 10000 NULL user NULL 10000 10000
+idle_in_session_timeout 0 NULL user NULL 0s 0s
+idle_in_transaction_session_timeout 0 NULL user NULL 0s 0s
+inject_retry_errors_enabled off NULL user NULL off off
+integer_datetimes on NULL user NULL on on
+intervalstyle postgres NULL user NULL postgres postgres
+intervalstyle_enabled off NULL user NULL off off
+is_superuser on NULL user NULL on on
+large_full_scan_rows 1000 NULL user NULL 1000 1000
+lc_collate C.UTF-8 NULL user NULL C.UTF-8 C.UTF-8
+lc_ctype C.UTF-8 NULL user NULL C.UTF-8 C.UTF-8
+lc_messages C.UTF-8 NULL user NULL C.UTF-8 C.UTF-8
+lc_monetary C.UTF-8 NULL user NULL C.UTF-8 C.UTF-8
+lc_numeric C.UTF-8 NULL user NULL C.UTF-8 C.UTF-8
+lc_time C.UTF-8 NULL user NULL C.UTF-8 C.UTF-8
+locality region=test,dc=dc1 NULL user NULL region=test,dc=dc1 region=test,dc=dc1
+locality_optimized_partitioned_index_scan on NULL user NULL on on
+lock_timeout 0 NULL user NULL 0s 0s
+max_identifier_length 128 NULL user NULL 128 128
+max_index_keys 32 NULL user NULL 32 32
+node_id 1 NULL user NULL 1 1
+null_ordered_last off NULL user NULL off off
+on_update_rehome_row_enabled on NULL user NULL on on
+optimizer_use_histograms on NULL user NULL on on
+optimizer_use_multicol_stats on NULL user NULL on on
+override_multi_region_zone_config off NULL user NULL off off
+prefer_lookup_joins_for_fks off NULL user NULL off off
+propagate_input_ordering off NULL user NULL off off
+reorder_joins_limit 8 NULL user NULL 8 8
+require_explicit_primary_keys off NULL user NULL off off
+results_buffer_size 16384 NULL user NULL 16384 16384
+role none NULL user NULL none none
+row_security off NULL user NULL off off
+search_path "$user", public NULL user NULL $user,public $user,public
+serial_normalization rowid NULL user NULL rowid rowid
+server_encoding UTF8 NULL user NULL UTF8 UTF8
+server_version 13.0.0 NULL user NULL 13.0.0 13.0.0
+server_version_num 130000 NULL user NULL 130000 130000
+session_user root NULL user NULL root root
+sql_safe_updates off NULL user NULL off off
+standard_conforming_strings on NULL user NULL on on
+statement_timeout 0 NULL user NULL 0s 0s
+stub_catalog_tables on NULL user NULL on on
+synchronize_seqscans on NULL user NULL on on
+synchronous_commit on NULL user NULL on on
+testing_vectorize_inject_panics off NULL user NULL off off
+timezone UTC NULL user NULL UTC UTC
+tracing off NULL user NULL off off
+transaction_isolation serializable NULL user NULL serializable serializable
+transaction_priority normal NULL user NULL normal normal
+transaction_read_only off NULL user NULL off off
+transaction_rows_read_err 0 NULL user NULL 0 0
+transaction_rows_read_log 0 NULL user NULL 0 0
+transaction_rows_written_err 0 NULL user NULL 0 0
+transaction_rows_written_log 0 NULL user NULL 0 0
+transaction_status NoTxn NULL user NULL NoTxn NoTxn
+vectorize on NULL user NULL on on
query TTTTTT colnames
SELECT name, source, min_val, max_val, sourcefile, sourceline FROM pg_catalog.pg_settings
----
-name source min_val max_val sourcefile sourceline
-application_name NULL NULL NULL NULL NULL
-backslash_quote NULL NULL NULL NULL NULL
-bytea_output NULL NULL NULL NULL NULL
-client_encoding NULL NULL NULL NULL NULL
-client_min_messages NULL NULL NULL NULL NULL
-crdb_version NULL NULL NULL NULL NULL
-database NULL NULL NULL NULL NULL
-datestyle NULL NULL NULL NULL NULL
-datestyle_enabled NULL NULL NULL NULL NULL
-default_int_size NULL NULL NULL NULL NULL
-default_tablespace NULL NULL NULL NULL NULL
-default_transaction_isolation NULL NULL NULL NULL NULL
-default_transaction_priority NULL NULL NULL NULL NULL
-default_transaction_read_only NULL NULL NULL NULL NULL
-default_transaction_use_follower_reads NULL NULL NULL NULL NULL
-disable_partially_distributed_plans NULL NULL NULL NULL NULL
-disable_plan_gists NULL NULL NULL NULL NULL
-disallow_full_table_scans NULL NULL NULL NULL NULL
-distsql NULL NULL NULL NULL NULL
-distsql_workmem NULL NULL NULL NULL NULL
-enable_copying_partitioning_when_deinterleaving_table NULL NULL NULL NULL NULL
-enable_experimental_alter_column_type_general NULL NULL NULL NULL NULL
-enable_experimental_stream_replication NULL NULL NULL NULL NULL
-enable_implicit_select_for_update NULL NULL NULL NULL NULL
-enable_insert_fast_path NULL NULL NULL NULL NULL
-enable_multiregion_placement_policy NULL NULL NULL NULL NULL
-enable_seqscan NULL NULL NULL NULL NULL
-enable_zigzag_join NULL NULL NULL NULL NULL
-escape_string_warning NULL NULL NULL NULL NULL
-experimental_distsql_planning NULL NULL NULL NULL NULL
-experimental_enable_auto_rehoming NULL NULL NULL NULL NULL
-experimental_enable_hash_sharded_indexes NULL NULL NULL NULL NULL
-experimental_enable_implicit_column_partitioning NULL NULL NULL NULL NULL
-experimental_enable_temp_tables NULL NULL NULL NULL NULL
-experimental_enable_unique_without_index_constraints NULL NULL NULL NULL NULL
-experimental_use_new_schema_changer NULL NULL NULL NULL NULL
-extra_float_digits NULL NULL NULL NULL NULL
-force_savepoint_restart NULL NULL NULL NULL NULL
-foreign_key_cascades_limit NULL NULL NULL NULL NULL
-idle_in_session_timeout NULL NULL NULL NULL NULL
-idle_in_transaction_session_timeout NULL NULL NULL NULL NULL
-inject_retry_errors_enabled NULL NULL NULL NULL NULL
-integer_datetimes NULL NULL NULL NULL NULL
-intervalstyle NULL NULL NULL NULL NULL
-intervalstyle_enabled NULL NULL NULL NULL NULL
-is_superuser NULL NULL NULL NULL NULL
-large_full_scan_rows NULL NULL NULL NULL NULL
-lc_collate NULL NULL NULL NULL NULL
-lc_ctype NULL NULL NULL NULL NULL
-lc_messages NULL NULL NULL NULL NULL
-lc_monetary NULL NULL NULL NULL NULL
-lc_numeric NULL NULL NULL NULL NULL
-lc_time NULL NULL NULL NULL NULL
-locality NULL NULL NULL NULL NULL
-locality_optimized_partitioned_index_scan NULL NULL NULL NULL NULL
-lock_timeout NULL NULL NULL NULL NULL
-max_identifier_length NULL NULL NULL NULL NULL
-max_index_keys NULL NULL NULL NULL NULL
-node_id NULL NULL NULL NULL NULL
-null_ordered_last NULL NULL NULL NULL NULL
-on_update_rehome_row_enabled NULL NULL NULL NULL NULL
-optimizer NULL NULL NULL NULL NULL
-optimizer_use_histograms NULL NULL NULL NULL NULL
-optimizer_use_multicol_stats NULL NULL NULL NULL NULL
-override_multi_region_zone_config NULL NULL NULL NULL NULL
-prefer_lookup_joins_for_fks NULL NULL NULL NULL NULL
-propagate_input_ordering NULL NULL NULL NULL NULL
-reorder_joins_limit NULL NULL NULL NULL NULL
-require_explicit_primary_keys NULL NULL NULL NULL NULL
-results_buffer_size NULL NULL NULL NULL NULL
-role NULL NULL NULL NULL NULL
-row_security NULL NULL NULL NULL NULL
-search_path NULL NULL NULL NULL NULL
-serial_normalization NULL NULL NULL NULL NULL
-server_encoding NULL NULL NULL NULL NULL
-server_version NULL NULL NULL NULL NULL
-server_version_num NULL NULL NULL NULL NULL
-session_id NULL NULL NULL NULL NULL
-session_user NULL NULL NULL NULL NULL
-sql_safe_updates NULL NULL NULL NULL NULL
-standard_conforming_strings NULL NULL NULL NULL NULL
-statement_timeout NULL NULL NULL NULL NULL
-stub_catalog_tables NULL NULL NULL NULL NULL
-synchronize_seqscans NULL NULL NULL NULL NULL
-synchronous_commit NULL NULL NULL NULL NULL
-testing_vectorize_inject_panics NULL NULL NULL NULL NULL
-timezone NULL NULL NULL NULL NULL
-tracing NULL NULL NULL NULL NULL
-transaction_isolation NULL NULL NULL NULL NULL
-transaction_priority NULL NULL NULL NULL NULL
-transaction_read_only NULL NULL NULL NULL NULL
-transaction_rows_read_err NULL NULL NULL NULL NULL
-transaction_rows_read_log NULL NULL NULL NULL NULL
-transaction_rows_written_err NULL NULL NULL NULL NULL
-transaction_rows_written_log NULL NULL NULL NULL NULL
-transaction_status NULL NULL NULL NULL NULL
-vectorize NULL NULL NULL NULL NULL
+name source min_val max_val sourcefile sourceline
+application_name NULL NULL NULL NULL NULL
+backslash_quote NULL NULL NULL NULL NULL
+bytea_output NULL NULL NULL NULL NULL
+client_encoding NULL NULL NULL NULL NULL
+client_min_messages NULL NULL NULL NULL NULL
+crdb_version NULL NULL NULL NULL NULL
+database NULL NULL NULL NULL NULL
+datestyle NULL NULL NULL NULL NULL
+datestyle_enabled NULL NULL NULL NULL NULL
+default_int_size NULL NULL NULL NULL NULL
+default_tablespace NULL NULL NULL NULL NULL
+default_transaction_isolation NULL NULL NULL NULL NULL
+default_transaction_priority NULL NULL NULL NULL NULL
+default_transaction_read_only NULL NULL NULL NULL NULL
+default_transaction_use_follower_reads NULL NULL NULL NULL NULL
+disable_partially_distributed_plans NULL NULL NULL NULL NULL
+disable_plan_gists NULL NULL NULL NULL NULL
+disallow_full_table_scans NULL NULL NULL NULL NULL
+distsql NULL NULL NULL NULL NULL
+distsql_workmem NULL NULL NULL NULL NULL
+enable_experimental_alter_column_type_general NULL NULL NULL NULL NULL
+enable_experimental_stream_replication NULL NULL NULL NULL NULL
+enable_implicit_select_for_update NULL NULL NULL NULL NULL
+enable_insert_fast_path NULL NULL NULL NULL NULL
+enable_multiregion_placement_policy NULL NULL NULL NULL NULL
+enable_seqscan NULL NULL NULL NULL NULL
+enable_zigzag_join NULL NULL NULL NULL NULL
+escape_string_warning NULL NULL NULL NULL NULL
+experimental_distsql_planning NULL NULL NULL NULL NULL
+experimental_enable_auto_rehoming NULL NULL NULL NULL NULL
+experimental_enable_hash_sharded_indexes NULL NULL NULL NULL NULL
+experimental_enable_implicit_column_partitioning NULL NULL NULL NULL NULL
+experimental_enable_temp_tables NULL NULL NULL NULL NULL
+experimental_enable_unique_without_index_constraints NULL NULL NULL NULL NULL
+experimental_use_new_schema_changer NULL NULL NULL NULL NULL
+extra_float_digits NULL NULL NULL NULL NULL
+force_savepoint_restart NULL NULL NULL NULL NULL
+foreign_key_cascades_limit NULL NULL NULL NULL NULL
+idle_in_session_timeout NULL NULL NULL NULL NULL
+idle_in_transaction_session_timeout NULL NULL NULL NULL NULL
+inject_retry_errors_enabled NULL NULL NULL NULL NULL
+integer_datetimes NULL NULL NULL NULL NULL
+intervalstyle NULL NULL NULL NULL NULL
+intervalstyle_enabled NULL NULL NULL NULL NULL
+is_superuser NULL NULL NULL NULL NULL
+large_full_scan_rows NULL NULL NULL NULL NULL
+lc_collate NULL NULL NULL NULL NULL
+lc_ctype NULL NULL NULL NULL NULL
+lc_messages NULL NULL NULL NULL NULL
+lc_monetary NULL NULL NULL NULL NULL
+lc_numeric NULL NULL NULL NULL NULL
+lc_time NULL NULL NULL NULL NULL
+locality NULL NULL NULL NULL NULL
+locality_optimized_partitioned_index_scan NULL NULL NULL NULL NULL
+lock_timeout NULL NULL NULL NULL NULL
+max_identifier_length NULL NULL NULL NULL NULL
+max_index_keys NULL NULL NULL NULL NULL
+node_id NULL NULL NULL NULL NULL
+null_ordered_last NULL NULL NULL NULL NULL
+on_update_rehome_row_enabled NULL NULL NULL NULL NULL
+optimizer NULL NULL NULL NULL NULL
+optimizer_use_histograms NULL NULL NULL NULL NULL
+optimizer_use_multicol_stats NULL NULL NULL NULL NULL
+override_multi_region_zone_config NULL NULL NULL NULL NULL
+prefer_lookup_joins_for_fks NULL NULL NULL NULL NULL
+propagate_input_ordering NULL NULL NULL NULL NULL
+reorder_joins_limit NULL NULL NULL NULL NULL
+require_explicit_primary_keys NULL NULL NULL NULL NULL
+results_buffer_size NULL NULL NULL NULL NULL
+role NULL NULL NULL NULL NULL
+row_security NULL NULL NULL NULL NULL
+search_path NULL NULL NULL NULL NULL
+serial_normalization NULL NULL NULL NULL NULL
+server_encoding NULL NULL NULL NULL NULL
+server_version NULL NULL NULL NULL NULL
+server_version_num NULL NULL NULL NULL NULL
+session_id NULL NULL NULL NULL NULL
+session_user NULL NULL NULL NULL NULL
+sql_safe_updates NULL NULL NULL NULL NULL
+standard_conforming_strings NULL NULL NULL NULL NULL
+statement_timeout NULL NULL NULL NULL NULL
+stub_catalog_tables NULL NULL NULL NULL NULL
+synchronize_seqscans NULL NULL NULL NULL NULL
+synchronous_commit NULL NULL NULL NULL NULL
+testing_vectorize_inject_panics NULL NULL NULL NULL NULL
+timezone NULL NULL NULL NULL NULL
+tracing NULL NULL NULL NULL NULL
+transaction_isolation NULL NULL NULL NULL NULL
+transaction_priority NULL NULL NULL NULL NULL
+transaction_read_only NULL NULL NULL NULL NULL
+transaction_rows_read_err NULL NULL NULL NULL NULL
+transaction_rows_read_log NULL NULL NULL NULL NULL
+transaction_rows_written_err NULL NULL NULL NULL NULL
+transaction_rows_written_log NULL NULL NULL NULL NULL
+transaction_status NULL NULL NULL NULL NULL
+vectorize NULL NULL NULL NULL NULL
# pg_catalog.pg_sequence
@@ -5167,7 +5158,7 @@ indoption
query TTI
SELECT database_name, descriptor_name, descriptor_id from test.crdb_internal.create_statements where descriptor_name = 'pg_views'
----
-test pg_views 4294967014
+test pg_views 4294967015
# Verify INCLUDED columns appear in pg_index. See issue #59563
statement ok
diff --git a/pkg/sql/logictest/testdata/logic_test/show_source b/pkg/sql/logictest/testdata/logic_test/show_source
index 3af3a22abe54..da2d9214dd5e 100644
--- a/pkg/sql/logictest/testdata/logic_test/show_source
+++ b/pkg/sql/logictest/testdata/logic_test/show_source
@@ -45,7 +45,6 @@ disable_plan_gists off
disallow_full_table_scans off
distsql off
distsql_workmem 64 MiB
-enable_copying_partitioning_when_deinterleaving_table off
enable_experimental_alter_column_type_general off
enable_experimental_stream_replication off
enable_implicit_select_for_update on
diff --git a/pkg/sql/logictest/testdata/logic_test/table b/pkg/sql/logictest/testdata/logic_test/table
index 96a29d7e7f98..4e93cf1125c6 100644
--- a/pkg/sql/logictest/testdata/logic_test/table
+++ b/pkg/sql/logictest/testdata/logic_test/table
@@ -580,7 +580,6 @@ gossip_network NULL
gossip_nodes NULL
index_columns NULL
index_usage_statistics NULL
-interleaved NULL
invalid_objects NULL
jobs NULL
kv_node_liveness NULL
diff --git a/pkg/sql/opt/cat/BUILD.bazel b/pkg/sql/opt/cat/BUILD.bazel
index cd58913190ae..8ccdc2ef326f 100644
--- a/pkg/sql/opt/cat/BUILD.bazel
+++ b/pkg/sql/opt/cat/BUILD.bazel
@@ -30,7 +30,6 @@ go_library(
"//pkg/sql/sem/tree",
"//pkg/sql/sessiondata",
"//pkg/sql/types",
- "//pkg/util",
"//pkg/util/treeprinter",
"@com_github_cockroachdb_errors//:errors",
"@com_github_lib_pq//oid",
diff --git a/pkg/sql/opt/cat/index.go b/pkg/sql/opt/cat/index.go
index 2806c983e546..94b6e235c00b 100644
--- a/pkg/sql/opt/cat/index.go
+++ b/pkg/sql/opt/cat/index.go
@@ -174,49 +174,6 @@ type Index interface {
// list, and ImplicitPartitioningColumnCount < LaxKeyColumnCount.
ImplicitPartitioningColumnCount() int
- // InterleaveAncestorCount returns the number of interleave ancestors for this
- // index (or zero if this is not an interleaved index). Each ancestor is an
- // index (usually from another table) with a key that shares a prefix with
- // the key of this index.
- //
- // Each ancestor contributes one or more key columns; together these pieces
- // form a prefix of an index key.
- //
- // The ancestors appear in the order they appear in an encoded key. This means
- // they are always in the far-to-near ancestor order (e.g.
- // grand-grand-parent, grand-parent, parent).
- //
- //
- // Example:
- // Index 1 -> /a/b
- // Index 2 -> /a/b/c
- // Index 3 -> /a/b/c/d
- //
- // Index 3 has two ancestors; the first is index 1 (contributing 2 key
- // columns) and the second is index 2 (contributing 1 key column).
- InterleaveAncestorCount() int
-
- // InterleaveAncestor returns information about an ancestor index.
- //
- // numKeyCols is the number of key columns that this ancestor contributes to
- // an encoded key. In other words: each ancestor has a shared key prefix
- // with this index; numKeyCols is the difference the shared prefix length for
- // this ancestor and the shared prefix length for the previous ancestor.
- // See InterleaveAncestorCount for an example.
- InterleaveAncestor(i int) (table, index StableID, numKeyCols int)
-
- // InterleavedByCount returns the number of indexes (usually from other
- // tables) that are interleaved into this index.
- //
- // Note that these indexes can themselves be interleaved by other indexes, but
- // this list contains only those for which this index is a direct interleave
- // parent.
- InterleavedByCount() int
-
- // InterleavedBy returns information about an index that is interleaved into
- // this index; see InterleavedByCount.
- InterleavedBy(i int) (table, index StableID)
-
// GeoConfig returns a geospatial index configuration. If non-nil, it
// describes the configuration for this geospatial inverted index.
GeoConfig() *geoindex.Config
diff --git a/pkg/sql/opt/cat/utils.go b/pkg/sql/opt/cat/utils.go
index 29397031de9c..ff1ddca49076 100644
--- a/pkg/sql/opt/cat/utils.go
+++ b/pkg/sql/opt/cat/utils.go
@@ -19,7 +19,6 @@ import (
"github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgcode"
"github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgerror"
"github.com/cockroachdb/cockroach/pkg/sql/sem/tree"
- "github.com/cockroachdb/cockroach/pkg/util"
"github.com/cockroachdb/cockroach/pkg/util/treeprinter"
"github.com/cockroachdb/errors"
)
@@ -239,23 +238,6 @@ func formatCatalogIndex(tab Table, ord int, tp treeprinter.Node) {
FormatZone(p.Zone(), part)
}
}
- if n := idx.InterleaveAncestorCount(); n > 0 {
- c := child.Child("interleave ancestors")
- for i := 0; i < n; i++ {
- table, index, numKeyCols := idx.InterleaveAncestor(i)
- c.Childf(
- "table=%d index=%d (%d key column%s)",
- table, index, numKeyCols, util.Pluralize(int64(numKeyCols)),
- )
- }
- }
- if n := idx.InterleavedByCount(); n > 0 {
- c := child.Child("interleaved by")
- for i := 0; i < n; i++ {
- table, index := idx.InterleavedBy(i)
- c.Childf("table=%d index=%d", table, index)
- }
- }
if pred, isPartial := idx.Predicate(); isPartial {
child.Childf("WHERE %s", pred)
}
diff --git a/pkg/sql/opt/testutils/opttester/testfixtures/tpcc_schema b/pkg/sql/opt/testutils/opttester/testfixtures/tpcc_schema
index 66c38d98449e..9e931e76ab86 100644
--- a/pkg/sql/opt/testutils/opttester/testfixtures/tpcc_schema
+++ b/pkg/sql/opt/testutils/opttester/testfixtures/tpcc_schema
@@ -29,7 +29,7 @@ CREATE TABLE district
d_next_o_id integer,
primary key (d_w_id, d_id),
foreign key (d_w_id) references warehouse (w_id)
-) interleave in parent warehouse (d_w_id)
+)
----
exec-ddl
@@ -59,7 +59,7 @@ CREATE TABLE customer
primary key (c_w_id, c_d_id, c_id),
index customer_idx (c_w_id, c_d_id, c_last, c_first),
foreign key (c_w_id, c_d_id) references district (d_w_id, d_id)
-) interleave in parent district (c_w_id, c_d_id)
+)
----
exec-ddl
@@ -94,7 +94,7 @@ CREATE TABLE "order"
primary key (o_w_id, o_d_id, o_id DESC),
unique index order_idx (o_w_id, o_d_id, o_c_id, o_id DESC) storing (o_entry_d, o_carrier_id),
foreign key (o_w_id, o_d_id, o_c_id) references customer (c_w_id, c_d_id, c_id)
-) interleave in parent district (o_w_id, o_d_id)
+)
----
exec-ddl
@@ -105,7 +105,7 @@ CREATE TABLE new_order
no_w_id integer not null,
primary key (no_w_id, no_d_id, no_o_id),
foreign key (no_w_id, no_d_id, no_o_id) references "order" (o_w_id, o_d_id, o_id)
-) interleave in parent "order" (no_w_id, no_d_id, no_o_id)
+)
----
exec-ddl
@@ -143,7 +143,7 @@ CREATE TABLE stock
primary key (s_w_id, s_i_id),
foreign key (s_w_id) references warehouse (w_id),
foreign key (s_i_id) references item (i_id)
-) interleave in parent warehouse (s_w_id)
+)
----
exec-ddl
@@ -162,5 +162,5 @@ CREATE TABLE order_line
primary key (ol_w_id, ol_d_id, ol_o_id DESC, ol_number),
foreign key (ol_w_id, ol_d_id, ol_o_id) references "order" (o_w_id, o_d_id, o_id),
foreign key (ol_supply_w_id, ol_i_id) references stock (s_w_id, s_i_id)
-) interleave in parent "order" (ol_w_id, ol_d_id, ol_o_id)
+)
----
diff --git a/pkg/sql/opt/testutils/testcat/create_index.go b/pkg/sql/opt/testutils/testcat/create_index.go
index 8b5bb5006b63..25c98279b844 100644
--- a/pkg/sql/opt/testutils/testcat/create_index.go
+++ b/pkg/sql/opt/testutils/testcat/create_index.go
@@ -37,7 +37,6 @@ func (tc *Catalog) CreateIndex(stmt *tree.CreateIndex, version descpb.IndexDescr
Columns: stmt.Columns,
Sharded: stmt.Sharded,
Storing: stmt.Storing,
- Interleave: stmt.Interleave,
Inverted: stmt.Inverted,
PartitionByIndex: stmt.PartitionByIndex,
Predicate: stmt.Predicate,
diff --git a/pkg/sql/opt/testutils/testcat/create_table.go b/pkg/sql/opt/testutils/testcat/create_table.go
index b5e65220bfa8..6fae6a02ba13 100644
--- a/pkg/sql/opt/testutils/testcat/create_table.go
+++ b/pkg/sql/opt/testutils/testcat/create_table.go
@@ -76,12 +76,6 @@ func (tc *Catalog) CreateTable(stmt *tree.CreateTable) *Table {
tab := &Table{TabID: tc.nextStableID(), TabName: stmt.Table, Catalog: tc}
- // TODO(andyk): For now, just remember that the table was interleaved. In the
- // future, it may be necessary to extract additional metadata.
- if stmt.Interleave != nil {
- tab.interleaved = true
- }
-
// Find the PK columns; we have to force these to be non-nullable.
pkCols := make(map[tree.Name]struct{})
for _, def := range stmt.Defs {
diff --git a/pkg/sql/opt/testutils/testcat/test_catalog.go b/pkg/sql/opt/testutils/testcat/test_catalog.go
index b092c570bf65..5cbda4006e9e 100644
--- a/pkg/sql/opt/testutils/testcat/test_catalog.go
+++ b/pkg/sql/opt/testutils/testcat/test_catalog.go
@@ -602,10 +602,6 @@ type Table struct {
writeOnlyIdxCount int
deleteOnlyIdxCount int
- // interleaved is true if the table's rows are interleaved with rows from
- // other table(s).
- interleaved bool
-
outboundFKs []ForeignKeyConstraint
inboundFKs []ForeignKeyConstraint
@@ -952,26 +948,6 @@ func (ti *Index) ImplicitPartitioningColumnCount() int {
return 0
}
-// InterleaveAncestorCount is part of the cat.Index interface.
-func (ti *Index) InterleaveAncestorCount() int {
- return 0
-}
-
-// InterleaveAncestor is part of the cat.Index interface.
-func (ti *Index) InterleaveAncestor(i int) (table, index cat.StableID, numKeyCols int) {
- panic("no interleavings")
-}
-
-// InterleavedByCount is part of the cat.Index interface.
-func (ti *Index) InterleavedByCount() int {
- return 0
-}
-
-// InterleavedBy is part of the cat.Index interface.
-func (ti *Index) InterleavedBy(i int) (table, index cat.StableID) {
- panic("no interleavings")
-}
-
// GeoConfig is part of the cat.Index interface.
func (ti *Index) GeoConfig() *geoindex.Config {
return ti.geoConfig
diff --git a/pkg/sql/opt/xform/testdata/external/customer b/pkg/sql/opt/xform/testdata/external/customer
index 3d7fbdb89b34..87ea560bba3a 100644
--- a/pkg/sql/opt/xform/testdata/external/customer
+++ b/pkg/sql/opt/xform/testdata/external/customer
@@ -72,7 +72,7 @@ CREATE TABLE article (
UNIQUE INDEX article_hash_key (hash ASC),
UNIQUE INDEX article_idx_read_key (id ASC) STORING (read),
FAMILY "primary" (id, feed, folder, hash, title, summary, content, link, read, date, retrieved)
-) INTERLEAVE IN PARENT feed (folder, feed)
+)
----
opt
diff --git a/pkg/sql/opt/xform/testdata/rules/join b/pkg/sql/opt/xform/testdata/rules/join
index 3aa2d0265b70..817157d0810d 100644
--- a/pkg/sql/opt/xform/testdata/rules/join
+++ b/pkg/sql/opt/xform/testdata/rules/join
@@ -240,160 +240,6 @@ memo (optimized, ~37KB, required=[presentation: a:1,b:2,c:3,s:7,t:8,u:9,x:12,y:1
├── G16: (eq G14 G17)
└── G17: (variable x)
-# Regression test for #36226.
-exec-ddl
-CREATE TABLE parent1 (pid1 INT PRIMARY KEY, pa1 INT)
-----
-
-exec-ddl
-CREATE TABLE child1 (
- pid1 INT,
- cid1 INT,
- ca1 INT,
- PRIMARY KEY(pid1, cid1)
-)
-INTERLEAVE IN PARENT parent1 (pid1)
-----
-
-exec-ddl
-CREATE TABLE grandchild1 (
- pid1 INT,
- cid1 INT,
- gcid1 INT,
- gca1 INT,
- PRIMARY KEY(pid1, cid1, gcid1)
-)
-INTERLEAVE IN PARENT child1 (pid1, cid1)
-----
-
-opt expect=ReorderJoins join-limit=4
-SELECT * FROM grandchild1
-JOIN child1 USING (pid1, cid1)
-JOIN parent1 USING (pid1)
-ORDER BY pid1
-----
-project
- ├── columns: pid1:1!null cid1:2!null gcid1:3!null gca1:4 ca1:9 pa1:13
- ├── key: (1-3)
- ├── fd: (1-3)-->(4), (1,2)-->(9), (1)-->(13)
- ├── ordering: +1
- └── inner-join (lookup parent1)
- ├── columns: grandchild1.pid1:1!null grandchild1.cid1:2!null gcid1:3!null gca1:4 child1.pid1:7!null child1.cid1:8!null ca1:9 parent1.pid1:12!null pa1:13
- ├── key columns: [1] = [12]
- ├── lookup columns are key
- ├── key: (3,8,12)
- ├── fd: (1-3)-->(4), (7,8)-->(9), (1)==(7,12), (7)==(1,12), (2)==(8), (8)==(2), (12)-->(13), (12)==(1,7)
- ├── ordering: +(1|7|12) [actual: +1]
- ├── inner-join (merge)
- │ ├── columns: grandchild1.pid1:1!null grandchild1.cid1:2!null gcid1:3!null gca1:4 child1.pid1:7!null child1.cid1:8!null ca1:9
- │ ├── left ordering: +1,+2
- │ ├── right ordering: +7,+8
- │ ├── key: (3,7,8)
- │ ├── fd: (1-3)-->(4), (7,8)-->(9), (1)==(7), (7)==(1), (2)==(8), (8)==(2)
- │ ├── ordering: +(1|7) [actual: +1]
- │ ├── scan grandchild1
- │ │ ├── columns: grandchild1.pid1:1!null grandchild1.cid1:2!null gcid1:3!null gca1:4
- │ │ ├── key: (1-3)
- │ │ ├── fd: (1-3)-->(4)
- │ │ └── ordering: +1,+2
- │ ├── scan child1
- │ │ ├── columns: child1.pid1:7!null child1.cid1:8!null ca1:9
- │ │ ├── key: (7,8)
- │ │ ├── fd: (7,8)-->(9)
- │ │ └── ordering: +7,+8
- │ └── filters (true)
- └── filters (true)
-
-memo expect=ReorderJoins join-limit=4
-SELECT * FROM grandchild1
-JOIN child1 USING (pid1, cid1)
-JOIN parent1 USING (pid1)
-ORDER BY pid1
-----
-memo (optimized, ~34KB, required=[presentation: pid1:1,cid1:2,gcid1:3,gca1:4,ca1:9,pa1:13] [ordering: +1])
- ├── G1: (project G2 G3 pid1 cid1 gcid1 gca1 ca1 pa1)
- │ ├── [presentation: pid1:1,cid1:2,gcid1:3,gca1:4,ca1:9,pa1:13] [ordering: +1]
- │ │ ├── best: (project G2="[ordering: +(1|7|12)]" G3 pid1 cid1 gcid1 gca1 ca1 pa1)
- │ │ └── cost: 2816.50
- │ └── []
- │ ├── best: (project G2 G3 pid1 cid1 gcid1 gca1 ca1 pa1)
- │ └── cost: 2816.50
- ├── G2: (inner-join G4 G5 G6) (inner-join G7 G8 G9) (inner-join G8 G7 G9) (inner-join G10 G11 G9) (inner-join G11 G10 G9) (inner-join G5 G4 G6) (merge-join G4 G5 G12 inner-join,+1,+12) (lookup-join G4 G12 parent1,keyCols=[1],outCols=(1-4,7-9,12,13)) (merge-join G7 G8 G12 inner-join,+1,+2,+7,+8) (merge-join G8 G7 G12 inner-join,+7,+8,+1,+2) (lookup-join G8 G12 grandchild1,keyCols=[7 8],outCols=(1-4,7-9,12,13)) (merge-join G10 G11 G12 inner-join,+7,+8,+1,+2) (merge-join G11 G10 G12 inner-join,+1,+2,+7,+8) (lookup-join G11 G12 child1,keyCols=[1 2],outCols=(1-4,7-9,12,13)) (merge-join G5 G4 G12 inner-join,+12,+1)
- │ ├── [ordering: +(1|7|12)]
- │ │ ├── best: (lookup-join G4="[ordering: +(1|7)]" G12 parent1,keyCols=[1],outCols=(1-4,7-9,12,13))
- │ │ └── cost: 2815.48
- │ └── []
- │ ├── best: (lookup-join G4 G12 parent1,keyCols=[1],outCols=(1-4,7-9,12,13))
- │ └── cost: 2815.48
- ├── G3: (projections)
- ├── G4: (inner-join G7 G10 G9) (inner-join G10 G7 G9) (merge-join G7 G10 G12 inner-join,+1,+2,+7,+8) (lookup-join G7 G12 child1,keyCols=[1 2],outCols=(1-4,7-9)) (merge-join G10 G7 G12 inner-join,+7,+8,+1,+2) (lookup-join G10 G12 grandchild1,keyCols=[7 8],outCols=(1-4,7-9))
- │ ├── [ordering: +(1|7)]
- │ │ ├── best: (merge-join G7="[ordering: +1,+2]" G10="[ordering: +7,+8]" G12 inner-join,+1,+2,+7,+8)
- │ │ └── cost: 2210.46
- │ └── []
- │ ├── best: (merge-join G7="[ordering: +1,+2]" G10="[ordering: +7,+8]" G12 inner-join,+1,+2,+7,+8)
- │ └── cost: 2210.46
- ├── G5: (scan parent1,cols=(12,13))
- │ ├── [ordering: +12]
- │ │ ├── best: (scan parent1,cols=(12,13))
- │ │ └── cost: 1064.42
- │ └── []
- │ ├── best: (scan parent1,cols=(12,13))
- │ └── cost: 1064.42
- ├── G6: (filters G13)
- ├── G7: (scan grandchild1,cols=(1-4))
- │ ├── [ordering: +1,+2]
- │ │ ├── best: (scan grandchild1,cols=(1-4))
- │ │ └── cost: 1104.82
- │ ├── [ordering: +1]
- │ │ ├── best: (scan grandchild1,cols=(1-4))
- │ │ └── cost: 1104.82
- │ └── []
- │ ├── best: (scan grandchild1,cols=(1-4))
- │ └── cost: 1104.82
- ├── G8: (inner-join G10 G5 G14) (inner-join G5 G10 G14) (merge-join G10 G5 G12 inner-join,+7,+12) (lookup-join G10 G12 parent1,keyCols=[7],outCols=(7-9,12,13)) (merge-join G5 G10 G12 inner-join,+12,+7) (lookup-join G5 G12 child1,keyCols=[12],outCols=(7-9,12,13))
- │ ├── [ordering: +(7|12),+8]
- │ │ ├── best: (sort G8)
- │ │ └── cost: 2459.51
- │ ├── [ordering: +(7|12)]
- │ │ ├── best: (merge-join G10="[ordering: +7]" G5="[ordering: +12]" G12 inner-join,+7,+12)
- │ │ └── cost: 2179.06
- │ └── []
- │ ├── best: (merge-join G10="[ordering: +7]" G5="[ordering: +12]" G12 inner-join,+7,+12)
- │ └── cost: 2179.06
- ├── G9: (filters G15 G16)
- ├── G10: (scan child1,cols=(7-9))
- │ ├── [ordering: +7,+8]
- │ │ ├── best: (scan child1,cols=(7-9))
- │ │ └── cost: 1084.62
- │ ├── [ordering: +7]
- │ │ ├── best: (scan child1,cols=(7-9))
- │ │ └── cost: 1084.62
- │ └── []
- │ ├── best: (scan child1,cols=(7-9))
- │ └── cost: 1084.62
- ├── G11: (inner-join G7 G5 G6) (inner-join G5 G7 G6) (merge-join G7 G5 G12 inner-join,+1,+12) (lookup-join G7 G12 parent1,keyCols=[1],outCols=(1-4,12,13)) (merge-join G5 G7 G12 inner-join,+12,+1) (lookup-join G5 G12 grandchild1,keyCols=[12],outCols=(1-4,12,13))
- │ ├── [ordering: +(1|12),+2]
- │ │ ├── best: (sort G11)
- │ │ └── cost: 2489.71
- │ ├── [ordering: +(1|12)]
- │ │ ├── best: (merge-join G7="[ordering: +1]" G5="[ordering: +12]" G12 inner-join,+1,+12)
- │ │ └── cost: 2199.26
- │ └── []
- │ ├── best: (merge-join G7="[ordering: +1]" G5="[ordering: +12]" G12 inner-join,+1,+12)
- │ └── cost: 2199.26
- ├── G12: (filters)
- ├── G13: (eq G17 G18)
- ├── G14: (filters G19)
- ├── G15: (eq G17 G20)
- ├── G16: (eq G21 G22)
- ├── G17: (variable grandchild1.pid1)
- ├── G18: (variable parent1.pid1)
- ├── G19: (eq G20 G18)
- ├── G20: (variable child1.pid1)
- ├── G21: (variable grandchild1.cid1)
- └── G22: (variable child1.cid1)
-
# Cross joins are not reordered apart from commutation.
memo
SELECT * FROM abc, stu, xyz, pqr WHERE a = 1
diff --git a/pkg/sql/opt_catalog.go b/pkg/sql/opt_catalog.go
index 48a49029fd49..cda502e15bc0 100644
--- a/pkg/sql/opt_catalog.go
+++ b/pkg/sql/opt_catalog.go
@@ -1408,28 +1408,6 @@ func (oi *optIndex) ImplicitPartitioningColumnCount() int {
return oi.idx.GetPartitioning().NumImplicitColumns()
}
-// InterleaveAncestorCount is part of the cat.Index interface.
-func (oi *optIndex) InterleaveAncestorCount() int {
- return oi.idx.NumInterleaveAncestors()
-}
-
-// InterleaveAncestor is part of the cat.Index interface.
-func (oi *optIndex) InterleaveAncestor(i int) (table, index cat.StableID, numKeyCols int) {
- a := oi.idx.GetInterleaveAncestor(i)
- return cat.StableID(a.TableID), cat.StableID(a.IndexID), int(a.SharedPrefixLen)
-}
-
-// InterleavedByCount is part of the cat.Index interface.
-func (oi *optIndex) InterleavedByCount() int {
- return oi.idx.NumInterleavedBy()
-}
-
-// InterleavedBy is part of the cat.Index interface.
-func (oi *optIndex) InterleavedBy(i int) (table, index cat.StableID) {
- ref := oi.idx.GetInterleavedBy(i)
- return cat.StableID(ref.Table), cat.StableID(ref.Index)
-}
-
// GeoConfig is part of the cat.Index interface.
func (oi *optIndex) GeoConfig() *geoindex.Config {
return &oi.idx.IndexDesc().GeoConfig
@@ -2177,26 +2155,6 @@ func (oi *optVirtualIndex) ImplicitPartitioningColumnCount() int {
return 0
}
-// InterleaveAncestorCount is part of the cat.Index interface.
-func (oi *optVirtualIndex) InterleaveAncestorCount() int {
- return 0
-}
-
-// InterleaveAncestor is part of the cat.Index interface.
-func (oi *optVirtualIndex) InterleaveAncestor(i int) (table, index cat.StableID, numKeyCols int) {
- panic(errors.AssertionFailedf("no interleavings"))
-}
-
-// InterleavedByCount is part of the cat.Index interface.
-func (oi *optVirtualIndex) InterleavedByCount() int {
- return 0
-}
-
-// InterleavedBy is part of the cat.Index interface.
-func (oi *optVirtualIndex) InterleavedBy(i int) (table, index cat.StableID) {
- panic(errors.AssertionFailedf("no interleavings"))
-}
-
// GeoConfig is part of the cat.Index interface.
func (oi *optVirtualIndex) GeoConfig() *geoindex.Config {
return nil
diff --git a/pkg/sql/parser/sql.y b/pkg/sql/parser/sql.y
index 844f79fba8ac..48a88bce41e0 100644
--- a/pkg/sql/parser/sql.y
+++ b/pkg/sql/parser/sql.y
@@ -573,9 +573,6 @@ func (u *sqlSymUnion) dropBehavior() tree.DropBehavior {
func (u *sqlSymUnion) validationBehavior() tree.ValidationBehavior {
return u.val.(tree.ValidationBehavior)
}
-func (u *sqlSymUnion) interleave() *tree.InterleaveDef {
- return u.val.(*tree.InterleaveDef)
-}
func (u *sqlSymUnion) partitionBy() *tree.PartitionBy {
return u.val.(*tree.PartitionBy)
}
@@ -795,9 +792,9 @@ func (u *sqlSymUnion) setVar() *tree.SetVar {
%token HAVING HASH HIGH HISTOGRAM HOUR
%token IDENTITY
-%token IF IFERROR IFNULL IGNORE_FOREIGN_KEYS ILIKE IMMEDIATE IMPORT IN INCLUDE INCLUDE_DEPRECATED_INTERLEAVES INCLUDING INCREMENT INCREMENTAL
+%token IF IFERROR IFNULL IGNORE_FOREIGN_KEYS ILIKE IMMEDIATE IMPORT IN INCLUDE INCLUDING INCREMENT INCREMENTAL
%token INET INET_CONTAINED_BY_OR_EQUALS
-%token INET_CONTAINS_OR_EQUALS INDEX INDEXES INHERITS INJECT INTERLEAVE INITIALLY
+%token INET_CONTAINS_OR_EQUALS INDEX INDEXES INHERITS INJECT INITIALLY
%token INNER INSERT INT INTEGER
%token INTERSECT INTERVAL INTO INTO_DB INVERTED IS ISERROR ISNULL ISOLATION
@@ -1140,7 +1137,6 @@ func (u *sqlSymUnion) setVar() *tree.SetVar {
%type alter_index_cmds
%type opt_drop_behavior
-%type opt_interleave_drop_behavior
%type opt_validate_behavior
@@ -1189,7 +1185,6 @@ func (u *sqlSymUnion) setVar() *tree.SetVar {
%type <[]tree.LikeTableOption> like_table_option_list
%type like_table_option
%type opt_create_table_on_commit
-%type <*tree.InterleaveDef> opt_interleave
%type <*tree.PartitionBy> opt_partition_by partition_by partition_by_inner
%type <*tree.PartitionByTable> opt_partition_by_table partition_by_table
%type <*tree.PartitionByIndex> opt_partition_by_index partition_by_index
@@ -2239,12 +2234,11 @@ alter_table_cmd:
}
// ALTER TABLE VALIDATE CONSTRAINT ...
// ALTER TABLE ALTER PRIMARY KEY USING INDEX
-| ALTER PRIMARY KEY USING COLUMNS '(' index_params ')' opt_hash_sharded opt_interleave
+| ALTER PRIMARY KEY USING COLUMNS '(' index_params ')' opt_hash_sharded
{
$$.val = &tree.AlterTableAlterPrimaryKey{
Columns: $7.idxElems(),
Sharded: $9.shardedIndexDef(),
- Interleave: $10.interleave(),
}
}
| VALIDATE CONSTRAINT constraint_name
@@ -2596,7 +2590,6 @@ opt_clear_data:
// encryption_passphrase="secret": encrypt backups
// kms="[kms_provider]://[kms_host]/[master_key_identifier]?[parameters]" : encrypt backups using KMS
// detached: execute backup job asynchronously, without waiting for its completion
-// include_deprecated_interleaves: allow backing up interleaved tables, even if future versions will be unable to restore.
//
// %SeeAlso: RESTORE, WEBDOCS/backup.html
backup_stmt:
@@ -2702,10 +2695,6 @@ backup_options:
{
$$.val = &tree.BackupOptions{EncryptionKMSURI: $3.stringOrPlaceholderOptList()}
}
-| INCLUDE_DEPRECATED_INTERLEAVES
- {
- $$.val = &tree.BackupOptions{IncludeDeprecatedInterleaves: true}
- }
// %Help: CREATE SCHEDULE FOR BACKUP - backup data periodically
@@ -6326,20 +6315,20 @@ alter_schema_stmt:
// %Help: CREATE TABLE - create a new table
// %Category: DDL
// %Text:
-// CREATE [[GLOBAL | LOCAL] {TEMPORARY | TEMP}] TABLE [IF NOT EXISTS] ( ) [] []
-// CREATE [[GLOBAL | LOCAL] {TEMPORARY | TEMP}] TABLE [IF NOT EXISTS] [( )] AS [] []
+// CREATE [[GLOBAL | LOCAL] {TEMPORARY | TEMP}] TABLE [IF NOT EXISTS] ( ) []
+// CREATE [[GLOBAL | LOCAL] {TEMPORARY | TEMP}] TABLE [IF NOT EXISTS] [( )] AS []
//
// Table elements:
// []
// [UNIQUE | INVERTED] INDEX [] ( [ASC | DESC] [, ...] )
-// [USING HASH WITH BUCKET_COUNT = ] [{STORING | INCLUDE | COVERING} ( )] []
+// [USING HASH WITH BUCKET_COUNT = ] [{STORING | INCLUDE | COVERING} ( )]
// FAMILY [] ( )
// [CONSTRAINT ]
//
// Table constraints:
// PRIMARY KEY ( ) [USING HASH WITH BUCKET_COUNT = ]
// FOREIGN KEY ( ) REFERENCES [( )] [ON DELETE {NO ACTION | RESTRICT}] [ON UPDATE {NO ACTION | RESTRICT}]
-// UNIQUE ( ) [{STORING | INCLUDE | COVERING} ( )] []
+// UNIQUE ( ) [{STORING | INCLUDE | COVERING} ( )]
// CHECK ( )
//
// Column qualifiers:
@@ -6349,9 +6338,6 @@ alter_schema_stmt:
// COLLATE
// AS ( ) { STORED | VIRTUAL }
//
-// Interleave clause:
-// INTERLEAVE IN PARENT ( ) [CASCADE | RESTRICT]
-//
// On commit clause:
// ON COMMIT {PRESERVE ROWS | DROP | DELETE ROWS}
//
@@ -6359,36 +6345,34 @@ alter_schema_stmt:
// WEBDOCS/create-table.html
// WEBDOCS/create-table-as.html
create_table_stmt:
- CREATE opt_persistence_temp_table TABLE table_name '(' opt_table_elem_list ')' opt_create_table_inherits opt_interleave opt_partition_by_table opt_table_with opt_create_table_on_commit opt_locality
+ CREATE opt_persistence_temp_table TABLE table_name '(' opt_table_elem_list ')' opt_create_table_inherits opt_partition_by_table opt_table_with opt_create_table_on_commit opt_locality
{
name := $4.unresolvedObjectName().ToTableName()
$$.val = &tree.CreateTable{
Table: name,
IfNotExists: false,
- Interleave: $9.interleave(),
Defs: $6.tblDefs(),
AsSource: nil,
- PartitionByTable: $10.partitionByTable(),
+ PartitionByTable: $9.partitionByTable(),
Persistence: $2.persistence(),
- StorageParams: $11.storageParams(),
- OnCommit: $12.createTableOnCommitSetting(),
- Locality: $13.locality(),
+ StorageParams: $10.storageParams(),
+ OnCommit: $11.createTableOnCommitSetting(),
+ Locality: $12.locality(),
}
}
-| CREATE opt_persistence_temp_table TABLE IF NOT EXISTS table_name '(' opt_table_elem_list ')' opt_create_table_inherits opt_interleave opt_partition_by_table opt_table_with opt_create_table_on_commit opt_locality
+| CREATE opt_persistence_temp_table TABLE IF NOT EXISTS table_name '(' opt_table_elem_list ')' opt_create_table_inherits opt_partition_by_table opt_table_with opt_create_table_on_commit opt_locality
{
name := $7.unresolvedObjectName().ToTableName()
$$.val = &tree.CreateTable{
Table: name,
IfNotExists: true,
- Interleave: $12.interleave(),
Defs: $9.tblDefs(),
AsSource: nil,
- PartitionByTable: $13.partitionByTable(),
+ PartitionByTable: $12.partitionByTable(),
Persistence: $2.persistence(),
- StorageParams: $14.storageParams(),
- OnCommit: $15.createTableOnCommitSetting(),
- Locality: $16.locality(),
+ StorageParams: $13.storageParams(),
+ OnCommit: $14.createTableOnCommitSetting(),
+ Locality: $15.locality(),
}
}
@@ -6479,7 +6463,6 @@ create_table_as_stmt:
$$.val = &tree.CreateTable{
Table: name,
IfNotExists: false,
- Interleave: nil,
Defs: $5.tblDefs(),
AsSource: $8.slct(),
StorageParams: $6.storageParams(),
@@ -6493,7 +6476,6 @@ create_table_as_stmt:
$$.val = &tree.CreateTable{
Table: name,
IfNotExists: true,
- Interleave: nil,
Defs: $8.tblDefs(),
AsSource: $11.slct(),
StorageParams: $9.storageParams(),
@@ -6608,38 +6590,6 @@ like_table_option:
| ALL { $$.val = tree.LikeTableOption{Opt: tree.LikeTableOptAll} }
-opt_interleave:
- INTERLEAVE IN PARENT table_name '(' name_list ')' opt_interleave_drop_behavior
- {
- name := $4.unresolvedObjectName().ToTableName()
- $$.val = &tree.InterleaveDef{
- Parent: name,
- Fields: $6.nameList(),
- DropBehavior: $8.dropBehavior(),
- }
- }
-| /* EMPTY */
- {
- $$.val = (*tree.InterleaveDef)(nil)
- }
-
-// TODO(dan): This can be removed in favor of opt_drop_behavior when #7854 is fixed.
-opt_interleave_drop_behavior:
- CASCADE
- {
- /* SKIP DOC */
- $$.val = tree.DropCascade
- }
-| RESTRICT
- {
- /* SKIP DOC */
- $$.val = tree.DropRestrict
- }
-| /* EMPTY */
- {
- $$.val = tree.DropDefault
- }
-
partition:
PARTITION partition_name
{
@@ -6943,20 +6893,19 @@ generated_by_default_as:
GENERATED_BY_DEFAULT BY DEFAULT AS {}
index_def:
- INDEX opt_index_name '(' index_params ')' opt_hash_sharded opt_storing opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+ INDEX opt_index_name '(' index_params ')' opt_hash_sharded opt_storing opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
{
$$.val = &tree.IndexTableDef{
Name: tree.Name($2),
Columns: $4.idxElems(),
Sharded: $6.shardedIndexDef(),
Storing: $7.nameList(),
- Interleave: $8.interleave(),
- PartitionByIndex: $9.partitionByIndex(),
- StorageParams: $10.storageParams(),
- Predicate: $11.expr(),
+ PartitionByIndex: $8.partitionByIndex(),
+ StorageParams: $9.storageParams(),
+ Predicate: $10.expr(),
}
}
-| UNIQUE INDEX opt_index_name '(' index_params ')' opt_hash_sharded opt_storing opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+| UNIQUE INDEX opt_index_name '(' index_params ')' opt_hash_sharded opt_storing opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
{
$$.val = &tree.UniqueConstraintTableDef{
IndexTableDef: tree.IndexTableDef {
@@ -6964,10 +6913,9 @@ index_def:
Columns: $5.idxElems(),
Sharded: $7.shardedIndexDef(),
Storing: $8.nameList(),
- Interleave: $9.interleave(),
- PartitionByIndex: $10.partitionByIndex(),
- StorageParams: $11.storageParams(),
- Predicate: $12.expr(),
+ PartitionByIndex: $9.partitionByIndex(),
+ StorageParams: $10.storageParams(),
+ Predicate: $11.expr(),
},
}
}
@@ -7014,26 +6962,24 @@ constraint_elem:
}
}
| UNIQUE opt_without_index '(' index_params ')'
- opt_storing opt_interleave opt_partition_by_index opt_deferrable opt_where_clause
+ opt_storing opt_partition_by_index opt_deferrable opt_where_clause
{
$$.val = &tree.UniqueConstraintTableDef{
WithoutIndex: $2.bool(),
IndexTableDef: tree.IndexTableDef{
Columns: $4.idxElems(),
Storing: $6.nameList(),
- Interleave: $7.interleave(),
- PartitionByIndex: $8.partitionByIndex(),
- Predicate: $10.expr(),
+ PartitionByIndex: $7.partitionByIndex(),
+ Predicate: $9.expr(),
},
}
}
-| PRIMARY KEY '(' index_params ')' opt_hash_sharded opt_interleave
+| PRIMARY KEY '(' index_params ')' opt_hash_sharded
{
$$.val = &tree.UniqueConstraintTableDef{
IndexTableDef: tree.IndexTableDef{
Columns: $4.idxElems(),
Sharded: $6.shardedIndexDef(),
- Interleave: $7.interleave(),
},
PrimaryKey: true,
}
@@ -7728,17 +7674,14 @@ enum_val_list:
// %Text:
// CREATE [UNIQUE | INVERTED] INDEX [CONCURRENTLY] [IF NOT EXISTS] []
// ON ( [ASC | DESC] [, ...] )
-// [USING HASH WITH BUCKET_COUNT = ] [STORING ( )] []
+// [USING HASH WITH BUCKET_COUNT = ] [STORING ( )]
// [PARTITION BY ]
// [WITH ]
//
-// Interleave clause:
-// INTERLEAVE IN PARENT ( ) [CASCADE | RESTRICT]
-//
// %SeeAlso: CREATE TABLE, SHOW INDEXES, SHOW CREATE,
// WEBDOCS/create-index.html
create_index_stmt:
- CREATE opt_unique INDEX opt_concurrently opt_index_name ON table_name opt_index_access_method '(' index_params ')' opt_hash_sharded opt_storing opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+ CREATE opt_unique INDEX opt_concurrently opt_index_name ON table_name opt_index_access_method '(' index_params ')' opt_hash_sharded opt_storing opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
{
table := $7.unresolvedObjectName().ToTableName()
$$.val = &tree.CreateIndex{
@@ -7748,15 +7691,14 @@ create_index_stmt:
Columns: $10.idxElems(),
Sharded: $12.shardedIndexDef(),
Storing: $13.nameList(),
- Interleave: $14.interleave(),
- PartitionByIndex: $15.partitionByIndex(),
- StorageParams: $16.storageParams(),
- Predicate: $17.expr(),
+ PartitionByIndex: $14.partitionByIndex(),
+ StorageParams: $15.storageParams(),
+ Predicate: $16.expr(),
Inverted: $8.bool(),
Concurrently: $4.bool(),
}
}
-| CREATE opt_unique INDEX opt_concurrently IF NOT EXISTS index_name ON table_name opt_index_access_method '(' index_params ')' opt_hash_sharded opt_storing opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+| CREATE opt_unique INDEX opt_concurrently IF NOT EXISTS index_name ON table_name opt_index_access_method '(' index_params ')' opt_hash_sharded opt_storing opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
{
table := $10.unresolvedObjectName().ToTableName()
$$.val = &tree.CreateIndex{
@@ -7767,15 +7709,14 @@ create_index_stmt:
Columns: $13.idxElems(),
Sharded: $15.shardedIndexDef(),
Storing: $16.nameList(),
- Interleave: $17.interleave(),
- PartitionByIndex: $18.partitionByIndex(),
+ PartitionByIndex: $17.partitionByIndex(),
Inverted: $11.bool(),
- StorageParams: $19.storageParams(),
- Predicate: $20.expr(),
+ StorageParams: $18.storageParams(),
+ Predicate: $19.expr(),
Concurrently: $4.bool(),
}
}
-| CREATE opt_unique INVERTED INDEX opt_concurrently opt_index_name ON table_name '(' index_params ')' opt_storing opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+| CREATE opt_unique INVERTED INDEX opt_concurrently opt_index_name ON table_name '(' index_params ')' opt_storing opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
{
table := $8.unresolvedObjectName().ToTableName()
$$.val = &tree.CreateIndex{
@@ -7785,14 +7726,13 @@ create_index_stmt:
Inverted: true,
Columns: $10.idxElems(),
Storing: $12.nameList(),
- Interleave: $13.interleave(),
- PartitionByIndex: $14.partitionByIndex(),
- StorageParams: $15.storageParams(),
- Predicate: $16.expr(),
+ PartitionByIndex: $13.partitionByIndex(),
+ StorageParams: $14.storageParams(),
+ Predicate: $15.expr(),
Concurrently: $5.bool(),
}
}
-| CREATE opt_unique INVERTED INDEX opt_concurrently IF NOT EXISTS index_name ON table_name '(' index_params ')' opt_storing opt_interleave opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
+| CREATE opt_unique INVERTED INDEX opt_concurrently IF NOT EXISTS index_name ON table_name '(' index_params ')' opt_storing opt_partition_by_index opt_with_storage_parameter_list opt_where_clause
{
table := $11.unresolvedObjectName().ToTableName()
$$.val = &tree.CreateIndex{
@@ -7803,10 +7743,9 @@ create_index_stmt:
IfNotExists: true,
Columns: $13.idxElems(),
Storing: $15.nameList(),
- Interleave: $16.interleave(),
- PartitionByIndex: $17.partitionByIndex(),
- StorageParams: $18.storageParams(),
- Predicate: $19.expr(),
+ PartitionByIndex: $16.partitionByIndex(),
+ StorageParams: $17.storageParams(),
+ Predicate: $18.expr(),
Concurrently: $5.bool(),
}
}
@@ -13254,7 +13193,6 @@ unreserved_keyword:
| IMMEDIATE
| IMPORT
| INCLUDE
-| INCLUDE_DEPRECATED_INTERLEAVES
| INCLUDING
| INCREMENT
| INCREMENTAL
@@ -13262,7 +13200,6 @@ unreserved_keyword:
| INHERITS
| INJECT
| INSERT
-| INTERLEAVE
| INTO_DB
| INVERTED
| ISOLATION
diff --git a/pkg/sql/parser/testdata/alter_table b/pkg/sql/parser/testdata/alter_table
index 1a8fc2e60437..d99b30854284 100644
--- a/pkg/sql/parser/testdata/alter_table
+++ b/pkg/sql/parser/testdata/alter_table
@@ -449,14 +449,6 @@ ALTER TABLE a ADD PRIMARY KEY (x, y, z) -- fully parenthesized
ALTER TABLE a ADD PRIMARY KEY (x, y, z) -- literals removed
ALTER TABLE _ ADD PRIMARY KEY (_, _, _) -- identifiers removed
-parse
-ALTER TABLE a ADD PRIMARY KEY (x, y, z) USING HASH WITH BUCKET_COUNT = 10 INTERLEAVE IN PARENT b (x, y)
-----
-ALTER TABLE a ADD PRIMARY KEY (x, y, z) USING HASH WITH BUCKET_COUNT = 10 INTERLEAVE IN PARENT b (x, y)
-ALTER TABLE a ADD PRIMARY KEY (x, y, z) USING HASH WITH BUCKET_COUNT = (10) INTERLEAVE IN PARENT b (x, y) -- fully parenthesized
-ALTER TABLE a ADD PRIMARY KEY (x, y, z) USING HASH WITH BUCKET_COUNT = _ INTERLEAVE IN PARENT b (x, y) -- literals removed
-ALTER TABLE _ ADD PRIMARY KEY (_, _, _) USING HASH WITH BUCKET_COUNT = 10 INTERLEAVE IN PARENT _ (_, _) -- identifiers removed
-
parse
ALTER TABLE a ADD CONSTRAINT "primary" PRIMARY KEY (x, y, z)
----
@@ -465,14 +457,6 @@ ALTER TABLE a ADD CONSTRAINT "primary" PRIMARY KEY (x, y, z) -- fully parenthesi
ALTER TABLE a ADD CONSTRAINT "primary" PRIMARY KEY (x, y, z) -- literals removed
ALTER TABLE _ ADD CONSTRAINT _ PRIMARY KEY (_, _, _) -- identifiers removed
-parse
-ALTER TABLE a ADD CONSTRAINT "primary" PRIMARY KEY (x, y, z) USING HASH WITH BUCKET_COUNT = 10 INTERLEAVE IN PARENT b (x, y)
-----
-ALTER TABLE a ADD CONSTRAINT "primary" PRIMARY KEY (x, y, z) USING HASH WITH BUCKET_COUNT = 10 INTERLEAVE IN PARENT b (x, y)
-ALTER TABLE a ADD CONSTRAINT "primary" PRIMARY KEY (x, y, z) USING HASH WITH BUCKET_COUNT = (10) INTERLEAVE IN PARENT b (x, y) -- fully parenthesized
-ALTER TABLE a ADD CONSTRAINT "primary" PRIMARY KEY (x, y, z) USING HASH WITH BUCKET_COUNT = _ INTERLEAVE IN PARENT b (x, y) -- literals removed
-ALTER TABLE _ ADD CONSTRAINT _ PRIMARY KEY (_, _, _) USING HASH WITH BUCKET_COUNT = 10 INTERLEAVE IN PARENT _ (_, _) -- identifiers removed
-
parse
ALTER TABLE a ALTER COLUMN b SET DEFAULT 42
----
diff --git a/pkg/sql/parser/testdata/backup_restore b/pkg/sql/parser/testdata/backup_restore
index de734d0e1646..6bd44dbcc447 100644
--- a/pkg/sql/parser/testdata/backup_restore
+++ b/pkg/sql/parser/testdata/backup_restore
@@ -281,14 +281,6 @@ BACKUP TABLE foo TO '_' WITH revision_history, encryption_passphrase = '*****' -
BACKUP TABLE _ TO 'bar' WITH revision_history, encryption_passphrase = '*****' -- identifiers removed
BACKUP TABLE foo TO 'bar' WITH revision_history, encryption_passphrase = 'secret' -- passwords exposed
-parse
-BACKUP foo TO 'bar' WITH KMS = 'foo', revision_history, include_deprecated_interleaves
-----
-BACKUP TABLE foo TO 'bar' WITH revision_history, kms = 'foo', include_deprecated_interleaves -- normalized!
-BACKUP TABLE (foo) TO ('bar') WITH revision_history, kms = ('foo'), include_deprecated_interleaves -- fully parenthesized
-BACKUP TABLE foo TO '_' WITH revision_history, kms = '_', include_deprecated_interleaves -- literals removed
-BACKUP TABLE _ TO 'bar' WITH revision_history, kms = 'foo', include_deprecated_interleaves -- identifiers removed
-
parse
BACKUP foo TO 'bar' WITH KMS = ('foo', 'bar'), revision_history
----
diff --git a/pkg/sql/parser/testdata/create_index b/pkg/sql/parser/testdata/create_index
index 23cacbaf0e81..9d66f02fa74f 100644
--- a/pkg/sql/parser/testdata/create_index
+++ b/pkg/sql/parser/testdata/create_index
@@ -80,22 +80,6 @@ CREATE INDEX ON a (b) WHERE ((c) > (3)) -- fully parenthesized
CREATE INDEX ON a (b) WHERE c > _ -- literals removed
CREATE INDEX ON _ (_) WHERE _ > 3 -- identifiers removed
-parse
-CREATE INDEX ON a (b) INTERLEAVE IN PARENT c (d)
-----
-CREATE INDEX ON a (b) INTERLEAVE IN PARENT c (d)
-CREATE INDEX ON a (b) INTERLEAVE IN PARENT c (d) -- fully parenthesized
-CREATE INDEX ON a (b) INTERLEAVE IN PARENT c (d) -- literals removed
-CREATE INDEX ON _ (_) INTERLEAVE IN PARENT _ (_) -- identifiers removed
-
-parse
-CREATE INDEX ON a (b) INTERLEAVE IN PARENT c.d (e)
-----
-CREATE INDEX ON a (b) INTERLEAVE IN PARENT c.d (e)
-CREATE INDEX ON a (b) INTERLEAVE IN PARENT c.d (e) -- fully parenthesized
-CREATE INDEX ON a (b) INTERLEAVE IN PARENT c.d (e) -- literals removed
-CREATE INDEX ON _ (_) INTERLEAVE IN PARENT _._ (_) -- identifiers removed
-
parse
CREATE INDEX ON a (b ASC, c DESC)
----
@@ -144,22 +128,6 @@ CREATE UNIQUE INDEX a ON b (c) WHERE ((d) > (3)) -- fully parenthesized
CREATE UNIQUE INDEX a ON b (c) WHERE d > _ -- literals removed
CREATE UNIQUE INDEX _ ON _ (_) WHERE _ > 3 -- identifiers removed
-parse
-CREATE UNIQUE INDEX a ON b (c) INTERLEAVE IN PARENT d (e, f)
-----
-CREATE UNIQUE INDEX a ON b (c) INTERLEAVE IN PARENT d (e, f)
-CREATE UNIQUE INDEX a ON b (c) INTERLEAVE IN PARENT d (e, f) -- fully parenthesized
-CREATE UNIQUE INDEX a ON b (c) INTERLEAVE IN PARENT d (e, f) -- literals removed
-CREATE UNIQUE INDEX _ ON _ (_) INTERLEAVE IN PARENT _ (_, _) -- identifiers removed
-
-parse
-CREATE UNIQUE INDEX a ON b (c) INTERLEAVE IN PARENT d.e (f, g)
-----
-CREATE UNIQUE INDEX a ON b (c) INTERLEAVE IN PARENT d.e (f, g)
-CREATE UNIQUE INDEX a ON b (c) INTERLEAVE IN PARENT d.e (f, g) -- fully parenthesized
-CREATE UNIQUE INDEX a ON b (c) INTERLEAVE IN PARENT d.e (f, g) -- literals removed
-CREATE UNIQUE INDEX _ ON _ (_) INTERLEAVE IN PARENT _._ (_, _) -- identifiers removed
-
parse
CREATE UNIQUE INDEX a ON b.c (d)
----
@@ -201,14 +169,6 @@ CREATE INVERTED INDEX a ON b (c) WHERE ((d) > (3)) -- fully parenthesized
CREATE INVERTED INDEX a ON b (c) WHERE d > _ -- literals removed
CREATE INVERTED INDEX _ ON _ (_) WHERE _ > 3 -- identifiers removed
-parse
-CREATE INVERTED INDEX a ON b (c) INTERLEAVE IN PARENT d (e)
-----
-CREATE INVERTED INDEX a ON b (c) INTERLEAVE IN PARENT d (e)
-CREATE INVERTED INDEX a ON b (c) INTERLEAVE IN PARENT d (e) -- fully parenthesized
-CREATE INVERTED INDEX a ON b (c) INTERLEAVE IN PARENT d (e) -- literals removed
-CREATE INVERTED INDEX _ ON _ (_) INTERLEAVE IN PARENT _ (_) -- identifiers removed
-
parse
CREATE INVERTED INDEX IF NOT EXISTS a ON b (c) WHERE d > 3
----
diff --git a/pkg/sql/parser/testdata/create_table b/pkg/sql/parser/testdata/create_table
index 57ffac6f8f70..83e9d4daa3ea 100644
--- a/pkg/sql/parser/testdata/create_table
+++ b/pkg/sql/parser/testdata/create_table
@@ -558,14 +558,6 @@ CREATE TABLE a (b INT8, CONSTRAINT foo UNIQUE (b) WHERE ((c) > (3))) -- fully pa
CREATE TABLE a (b INT8, CONSTRAINT foo UNIQUE (b) WHERE c > _) -- literals removed
CREATE TABLE _ (_ INT8, CONSTRAINT _ UNIQUE (_) WHERE _ > 3) -- identifiers removed
-parse
-CREATE TABLE a (b INT, UNIQUE INDEX foo (b) INTERLEAVE IN PARENT c (d))
-----
-CREATE TABLE a (b INT8, CONSTRAINT foo UNIQUE (b) INTERLEAVE IN PARENT c (d)) -- normalized!
-CREATE TABLE a (b INT8, CONSTRAINT foo UNIQUE (b) INTERLEAVE IN PARENT c (d)) -- fully parenthesized
-CREATE TABLE a (b INT8, CONSTRAINT foo UNIQUE (b) INTERLEAVE IN PARENT c (d)) -- literals removed
-CREATE TABLE _ (_ INT8, CONSTRAINT _ UNIQUE (_) INTERLEAVE IN PARENT _ (_)) -- identifiers removed
-
parse
CREATE TABLE a (UNIQUE INDEX (b) PARTITION BY LIST (c) (PARTITION d VALUES IN (1)))
----
@@ -1321,14 +1313,6 @@ CREATE TABLE a (b INT8, c STRING, CONSTRAINT d UNIQUE WITHOUT INDEX (b, c)) -- f
CREATE TABLE a (b INT8, c STRING, CONSTRAINT d UNIQUE WITHOUT INDEX (b, c)) -- literals removed
CREATE TABLE _ (_ INT8, _ STRING, CONSTRAINT _ UNIQUE WITHOUT INDEX (_, _)) -- identifiers removed
-parse
-CREATE TABLE a (b INT8, c STRING, CONSTRAINT d UNIQUE (b, c) INTERLEAVE IN PARENT d (e, f))
-----
-CREATE TABLE a (b INT8, c STRING, CONSTRAINT d UNIQUE (b, c) INTERLEAVE IN PARENT d (e, f))
-CREATE TABLE a (b INT8, c STRING, CONSTRAINT d UNIQUE (b, c) INTERLEAVE IN PARENT d (e, f)) -- fully parenthesized
-CREATE TABLE a (b INT8, c STRING, CONSTRAINT d UNIQUE (b, c) INTERLEAVE IN PARENT d (e, f)) -- literals removed
-CREATE TABLE _ (_ INT8, _ STRING, CONSTRAINT _ UNIQUE (_, _) INTERLEAVE IN PARENT _ (_, _)) -- identifiers removed
-
error
CREATE TABLE test (
CONSTRAINT foo INDEX (bar)
@@ -1613,14 +1597,6 @@ CREATE TABLE a (b INT8, c STRING, INDEX (b ASC, c DESC) STORING (c)) -- fully pa
CREATE TABLE a (b INT8, c STRING, INDEX (b ASC, c DESC) STORING (c)) -- literals removed
CREATE TABLE _ (_ INT8, _ STRING, INDEX (_ ASC, _ DESC) STORING (_)) -- identifiers removed
-parse
-CREATE TABLE a (b INT8, INDEX (b) INTERLEAVE IN PARENT c (d, e))
-----
-CREATE TABLE a (b INT8, INDEX (b) INTERLEAVE IN PARENT c (d, e))
-CREATE TABLE a (b INT8, INDEX (b) INTERLEAVE IN PARENT c (d, e)) -- fully parenthesized
-CREATE TABLE a (b INT8, INDEX (b) INTERLEAVE IN PARENT c (d, e)) -- literals removed
-CREATE TABLE _ (_ INT8, INDEX (_) INTERLEAVE IN PARENT _ (_, _)) -- identifiers removed
-
parse
CREATE TABLE a (b INT8, FAMILY (b))
----
@@ -1637,22 +1613,6 @@ CREATE TABLE a (b INT8, c STRING, FAMILY foo (b), FAMILY (c)) -- fully parenthes
CREATE TABLE a (b INT8, c STRING, FAMILY foo (b), FAMILY (c)) -- literals removed
CREATE TABLE _ (_ INT8, _ STRING, FAMILY _ (_), FAMILY (_)) -- identifiers removed
-parse
-CREATE TABLE a (b INT8) INTERLEAVE IN PARENT foo (c, d)
-----
-CREATE TABLE a (b INT8) INTERLEAVE IN PARENT foo (c, d)
-CREATE TABLE a (b INT8) INTERLEAVE IN PARENT foo (c, d) -- fully parenthesized
-CREATE TABLE a (b INT8) INTERLEAVE IN PARENT foo (c, d) -- literals removed
-CREATE TABLE _ (_ INT8) INTERLEAVE IN PARENT _ (_, _) -- identifiers removed
-
-parse
-CREATE TABLE a (b INT8) INTERLEAVE IN PARENT foo (c) CASCADE
-----
-CREATE TABLE a (b INT8) INTERLEAVE IN PARENT foo (c) CASCADE
-CREATE TABLE a (b INT8) INTERLEAVE IN PARENT foo (c) CASCADE -- fully parenthesized
-CREATE TABLE a (b INT8) INTERLEAVE IN PARENT foo (c) CASCADE -- literals removed
-CREATE TABLE _ (_ INT8) INTERLEAVE IN PARENT _ (_) CASCADE -- identifiers removed
-
parse
CREATE TABLE a.b (b INT8)
----
@@ -1835,15 +1795,6 @@ CREATE TABLE a (b INT8) PARTITION ALL BY RANGE (b) (PARTITION p1 VALUES FROM ((m
CREATE TABLE a (b INT8) PARTITION ALL BY RANGE (b) (PARTITION p1 VALUES FROM (minvalue) TO (_), PARTITION p2 VALUES FROM (_, maxvalue) TO (_, _), PARTITION p3 VALUES FROM (_, _) TO (maxvalue)) -- literals removed
CREATE TABLE _ (_ INT8) PARTITION ALL BY RANGE (_) (PARTITION _ VALUES FROM (_) TO (1), PARTITION _ VALUES FROM (2, _) TO (4, 4), PARTITION _ VALUES FROM (4, 4) TO (_)) -- identifiers removed
-
-parse
-CREATE TABLE a () INTERLEAVE IN PARENT b (c) PARTITION BY LIST (d) (PARTITION e VALUES IN (1))
-----
-CREATE TABLE a () INTERLEAVE IN PARENT b (c) PARTITION BY LIST (d) (PARTITION e VALUES IN (1))
-CREATE TABLE a () INTERLEAVE IN PARENT b (c) PARTITION BY LIST (d) (PARTITION e VALUES IN ((1))) -- fully parenthesized
-CREATE TABLE a () INTERLEAVE IN PARENT b (c) PARTITION BY LIST (d) (PARTITION e VALUES IN (_)) -- literals removed
-CREATE TABLE _ () INTERLEAVE IN PARENT _ (_) PARTITION BY LIST (_) (PARTITION _ VALUES IN (1)) -- identifiers removed
-
parse
CREATE TABLE IF NOT EXISTS a () PARTITION BY LIST (b) (PARTITION c VALUES IN (1))
----
diff --git a/pkg/sql/pg_catalog.go b/pkg/sql/pg_catalog.go
index 85c925d7a312..888c82925ac9 100644
--- a/pkg/sql/pg_catalog.go
+++ b/pkg/sql/pg_catalog.go
@@ -1807,11 +1807,11 @@ https://www.postgresql.org/docs/9.5/view-pg-indexes.html`,
populate: func(ctx context.Context, p *planner, dbContext catalog.DatabaseDescriptor, addRow func(...tree.Datum) error) error {
h := makeOidHasher()
return forEachTableDescWithTableLookup(ctx, p, dbContext, hideVirtual, /* virtual tables do not have indexes */
- func(db catalog.DatabaseDescriptor, scName string, table catalog.TableDescriptor, tableLookup tableLookupFn) error {
+ func(db catalog.DatabaseDescriptor, scName string, table catalog.TableDescriptor, _ tableLookupFn) error {
scNameName := tree.NewDName(scName)
tblName := tree.NewDName(table.GetName())
return catalog.ForEachIndex(table, catalog.IndexOpts{}, func(index catalog.Index) error {
- def, err := indexDefFromDescriptor(ctx, p, db, scName, table, index, tableLookup)
+ def, err := indexDefFromDescriptor(ctx, p, db, scName, table, index)
if err != nil {
return err
}
@@ -1838,7 +1838,6 @@ func indexDefFromDescriptor(
schemaName string,
table catalog.TableDescriptor,
index catalog.Index,
- tableLookup tableLookupFn,
) (string, error) {
colNames := index.IndexDesc().KeyColumnNames[index.ExplicitColumnStartIdx():]
indexDef := tree.CreateIndex{
@@ -1884,34 +1883,6 @@ func indexDefFromDescriptor(
name := index.GetStoredColumnName(i)
indexDef.Storing[i] = tree.Name(name)
}
- if index.NumInterleaveAncestors() > 0 {
- intl := index.IndexDesc().Interleave
- parentTable, err := tableLookup.getTableByID(intl.Ancestors[len(intl.Ancestors)-1].TableID)
- if err != nil {
- return "", err
- }
- parentSchemaName := tableLookup.getSchemaName(parentTable)
- parentDb, err := tableLookup.getDatabaseByID(parentTable.GetParentID())
- if err != nil {
- return "", err
- }
- var sharedPrefixLen int
- for _, ancestor := range intl.Ancestors {
- sharedPrefixLen += int(ancestor.SharedPrefixLen)
- }
- fields := colNames[:sharedPrefixLen]
- intlDef := &tree.InterleaveDef{
- Parent: tree.MakeTableNameWithSchema(
- tree.Name(parentDb.GetName()),
- tree.Name(parentSchemaName),
- tree.Name(parentTable.GetName())),
- Fields: make(tree.NameList, len(fields)),
- }
- for i, field := range fields {
- intlDef.Fields[i] = tree.Name(field)
- }
- indexDef.Interleave = intlDef
- }
if index.IsPartial() {
// Format the raw predicate for display in order to resolve user-defined
// types to a human readable form.
diff --git a/pkg/sql/pgwire/testdata/pgtest/notice b/pkg/sql/pgwire/testdata/pgtest/notice
index d6a9ee5c8925..906613ce9ed2 100644
--- a/pkg/sql/pgwire/testdata/pgtest/notice
+++ b/pkg/sql/pgwire/testdata/pgtest/notice
@@ -55,7 +55,7 @@ Query {"String": "DROP INDEX t_x_idx"}
until crdb_only
CommandComplete
----
-{"Severity":"NOTICE","SeverityUnlocalized":"","Code":"00000","Message":"the data for dropped indexes is reclaimed asynchronously","Detail":"","Hint":"The reclamation delay can be customized in the zone configuration for the table.","Position":0,"InternalPosition":0,"InternalQuery":"","Where":"","SchemaName":"","TableName":"","ColumnName":"","DataTypeName":"","ConstraintName":"","File":"drop_index.go","Line":547,"Routine":"dropIndexByName","UnknownFields":null}
+{"Severity":"NOTICE","SeverityUnlocalized":"","Code":"00000","Message":"the data for dropped indexes is reclaimed asynchronously","Detail":"","Hint":"The reclamation delay can be customized in the zone configuration for the table.","Position":0,"InternalPosition":0,"InternalQuery":"","Where":"","SchemaName":"","TableName":"","ColumnName":"","DataTypeName":"","ConstraintName":"","File":"drop_index.go","Line":536,"Routine":"dropIndexByName","UnknownFields":null}
{"Type":"CommandComplete","CommandTag":"DROP INDEX"}
until noncrdb_only
diff --git a/pkg/sql/randgen/mutator.go b/pkg/sql/randgen/mutator.go
index 0ff53b1a3f43..467d04192d7a 100644
--- a/pkg/sql/randgen/mutator.go
+++ b/pkg/sql/randgen/mutator.go
@@ -643,10 +643,6 @@ var postgresStatementMutator MultiStatementMutation = func(rng *rand.Rand, stmts
case *tree.SetClusterSetting, *tree.SetVar:
continue
case *tree.CreateTable:
- if stmt.Interleave != nil {
- stmt.Interleave = nil
- changed = true
- }
if stmt.PartitionByTable != nil {
stmt.PartitionByTable = nil
changed = true
@@ -674,10 +670,6 @@ var postgresStatementMutator MultiStatementMutation = func(rng *rand.Rand, stmts
changed = true
}
case *tree.UniqueConstraintTableDef:
- if def.Interleave != nil {
- def.Interleave = nil
- changed = true
- }
if def.PartitionByIndex != nil {
def.PartitionByIndex = nil
changed = true
@@ -714,10 +706,6 @@ func postgresCreateTableMutator(
mutated = append(mutated, stmt)
switch stmt := stmt.(type) {
case *tree.CreateTable:
- if stmt.Interleave != nil {
- stmt.Interleave = nil
- changed = true
- }
// Get all the column types first.
colTypes := make(map[string]*types.T)
for _, def := range stmt.Defs {
diff --git a/pkg/sql/randgen/schema.go b/pkg/sql/randgen/schema.go
index 6db9ad36feb6..49e95d8062da 100644
--- a/pkg/sql/randgen/schema.go
+++ b/pkg/sql/randgen/schema.go
@@ -77,8 +77,7 @@ func RandCreateTables(
// Make some random tables.
tables := make([]tree.Statement, num)
for i := 0; i < num; i++ {
- var interleave *tree.CreateTable
- t := RandCreateTableWithInterleave(rng, prefix, i+1, interleave, nil)
+ t := RandCreateTable(rng, prefix, i+1)
tables[i] = t
}
@@ -91,25 +90,13 @@ func RandCreateTables(
// RandCreateTable creates a random CreateTable definition.
func RandCreateTable(rng *rand.Rand, prefix string, tableIdx int) *tree.CreateTable {
- return RandCreateTableWithInterleave(rng, prefix, tableIdx, nil, nil)
+ return RandCreateTableWithColumnIndexNumberGenerator(rng, prefix, tableIdx, nil /* generateColumnIndexNumber */)
}
// RandCreateTableWithColumnIndexNumberGenerator creates a random CreateTable definition
// using the passed function to generate column index numbers for column names.
func RandCreateTableWithColumnIndexNumberGenerator(
rng *rand.Rand, prefix string, tableIdx int, generateColumnIndexNumber func() int64,
-) *tree.CreateTable {
- return RandCreateTableWithInterleave(rng, prefix, tableIdx, nil, generateColumnIndexNumber)
-}
-
-// RandCreateTableWithInterleave creates a random CreateTable definition,
-// interleaved into the given other CreateTable definition.
-func RandCreateTableWithInterleave(
- rng *rand.Rand,
- prefix string,
- tableIdx int,
- interleaveInto *tree.CreateTable,
- generateColumnIndexNumber func() int64,
) *tree.CreateTable {
// columnDefs contains the list of Columns we'll add to our table.
nColumns := randutil.RandIntInRange(rng, 1, 20)
@@ -118,22 +105,6 @@ func RandCreateTableWithInterleave(
// families, etc) we'll add to our table.
defs := make(tree.TableDefs, 0, len(columnDefs))
- // Find columnDefs from previous create table.
- interleaveIntoColumnDefs := make(map[tree.Name]*tree.ColumnTableDef)
- var interleaveIntoPK *tree.UniqueConstraintTableDef
- if interleaveInto != nil {
- for i := range interleaveInto.Defs {
- switch d := interleaveInto.Defs[i].(type) {
- case *tree.ColumnTableDef:
- interleaveIntoColumnDefs[d.Name] = d
- case *tree.UniqueConstraintTableDef:
- if d.PrimaryKey {
- interleaveIntoPK = d
- }
- }
- }
- }
-
// colIdx generates numbers that are incorporated into column names.
colIdx := func(ordinal int) int {
if generateColumnIndexNumber != nil {
@@ -142,98 +113,43 @@ func RandCreateTableWithInterleave(
return ordinal
}
- var interleaveDef *tree.InterleaveDef
- if interleaveIntoPK != nil && len(interleaveIntoPK.Columns) > 0 {
- // Make the interleave prefix, which has to be exactly the columns in the
- // parent's primary index.
- prefixLength := len(interleaveIntoPK.Columns)
- fields := make(tree.NameList, prefixLength)
- for i := range interleaveIntoPK.Columns[:prefixLength] {
- def := interleaveIntoColumnDefs[interleaveIntoPK.Columns[i].Column]
- columnDefs = append(columnDefs, def)
- defs = append(defs, def)
- fields[i] = def.Name
- }
-
- extraCols := make([]*tree.ColumnTableDef, nColumns)
- // Add more columns to the table.
- for i := range extraCols {
- // Loop until we generate an indexable column type.
- var extraCol *tree.ColumnTableDef
- for {
- extraCol = randColumnTableDef(rng, tableIdx, colIdx(i+prefixLength))
- extraColType := tree.MustBeStaticallyKnownType(extraCol.Type)
- if colinfo.ColumnTypeIsIndexable(extraColType) {
- break
- }
- }
- extraCols[i] = extraCol
- columnDefs = append(columnDefs, extraCol)
- defs = append(defs, extraCol)
- }
+ // Make new defs from scratch.
+ nComputedColumns := randutil.RandIntInRange(rng, 0, (nColumns+1)/2)
+ nNormalColumns := nColumns - nComputedColumns
+ for i := 0; i < nNormalColumns; i++ {
+ columnDef := randColumnTableDef(rng, tableIdx, colIdx(i))
+ columnDefs = append(columnDefs, columnDef)
+ defs = append(defs, columnDef)
+ }
- rng.Shuffle(nColumns, func(i, j int) {
- extraCols[i], extraCols[j] = extraCols[j], extraCols[i]
- })
-
- // Create the primary key to interleave, maybe add some new columns to the
- // one we're interleaving.
- pk := &tree.UniqueConstraintTableDef{
- PrimaryKey: true,
- IndexTableDef: tree.IndexTableDef{
- Columns: interleaveIntoPK.Columns[:prefixLength:prefixLength],
- },
- }
- for i := range extraCols[:rng.Intn(len(extraCols))] {
- pk.Columns = append(pk.Columns, tree.IndexElem{
- Column: extraCols[i].Name,
- Direction: tree.Direction(rng.Intn(int(tree.Descending) + 1)),
+ // Make a random primary key with high likelihood.
+ if rng.Intn(8) != 0 {
+ indexDef, ok := randIndexTableDefFromCols(rng, columnDefs, false /* allowExpressions */)
+ if ok && !indexDef.Inverted {
+ defs = append(defs, &tree.UniqueConstraintTableDef{
+ PrimaryKey: true,
+ IndexTableDef: indexDef,
})
}
- defs = append(defs, pk)
- interleaveDef = &tree.InterleaveDef{
- Parent: interleaveInto.Table,
- Fields: fields,
- }
- } else {
- // Make new defs from scratch.
- nComputedColumns := randutil.RandIntInRange(rng, 0, (nColumns+1)/2)
- nNormalColumns := nColumns - nComputedColumns
- for i := 0; i < nNormalColumns; i++ {
- columnDef := randColumnTableDef(rng, tableIdx, colIdx(i))
- columnDefs = append(columnDefs, columnDef)
- defs = append(defs, columnDef)
- }
-
- // Make a random primary key with high likelihood.
- if rng.Intn(8) != 0 {
- indexDef, ok := randIndexTableDefFromCols(rng, columnDefs, false /* allowExpressions */)
- if ok && !indexDef.Inverted {
- defs = append(defs, &tree.UniqueConstraintTableDef{
- PrimaryKey: true,
- IndexTableDef: indexDef,
- })
- }
- // Although not necessary for Cockroach to function correctly,
- // but for ease of use for any code that introspects on the
- // AST data structure (instead of the descriptor which doesn't
- // exist yet), explicitly set all PK cols as NOT NULL.
- for _, col := range columnDefs {
- for _, elem := range indexDef.Columns {
- if col.Name == elem.Column {
- col.Nullable.Nullability = tree.NotNull
- }
+ // Although not necessary for Cockroach to function correctly,
+ // but for ease of use for any code that introspects on the
+ // AST data structure (instead of the descriptor which doesn't
+ // exist yet), explicitly set all PK cols as NOT NULL.
+ for _, col := range columnDefs {
+ for _, elem := range indexDef.Columns {
+ if col.Name == elem.Column {
+ col.Nullable.Nullability = tree.NotNull
}
}
}
+ }
- // Make defs for computed columns.
- normalColDefs := columnDefs
- for i := nNormalColumns; i < nColumns; i++ {
- columnDef := randComputedColumnTableDef(rng, normalColDefs, tableIdx, colIdx(i))
- columnDefs = append(columnDefs, columnDef)
- defs = append(defs, columnDef)
- }
+ // Make defs for computed columns.
+ normalColDefs := columnDefs
+ for i := nNormalColumns; i < nColumns; i++ {
+ columnDef := randComputedColumnTableDef(rng, normalColDefs, tableIdx, colIdx(i))
+ columnDefs = append(columnDefs, columnDef)
+ defs = append(defs, columnDef)
}
// Make indexes.
@@ -256,9 +172,8 @@ func RandCreateTableWithInterleave(
}
ret := &tree.CreateTable{
- Table: tree.MakeUnqualifiedTableName(tree.Name(fmt.Sprintf("%s%d", prefix, tableIdx))),
- Defs: defs,
- Interleave: interleaveDef,
+ Table: tree.MakeUnqualifiedTableName(tree.Name(fmt.Sprintf("%s%d", prefix, tableIdx))),
+ Defs: defs,
}
// Create some random column families.
diff --git a/pkg/sql/resolver.go b/pkg/sql/resolver.go
index 8e3e194db4a9..9dc0df193f76 100644
--- a/pkg/sql/resolver.go
+++ b/pkg/sql/resolver.go
@@ -1232,37 +1232,6 @@ func (l *internalLookupCtx) getSchemaName(table catalog.TableDescriptor) string
return schemaName
}
-// getParentAsTableName returns a TreeTable object of the parent table for a
-// given table ID. Used to get the parent table of a table with interleaved
-// indexes.
-func getParentAsTableName(
- l simpleSchemaResolver, parentTableID descpb.ID, dbPrefix string,
-) (tree.TableName, error) {
- var parentName tree.TableName
- parentTable, err := l.getTableByID(parentTableID)
- if err != nil {
- return tree.TableName{}, err
- }
- var parentSchemaName tree.Name
- if parentTable.GetParentSchemaID() == keys.PublicSchemaID {
- parentSchemaName = tree.PublicSchemaName
- } else {
- parentSchema, err := l.getSchemaByID(parentTable.GetParentSchemaID())
- if err != nil {
- return tree.TableName{}, err
- }
- parentSchemaName = tree.Name(parentSchema.GetName())
- }
- parentDbDesc, err := l.getDatabaseByID(parentTable.GetParentID())
- if err != nil {
- return tree.TableName{}, err
- }
- parentName = tree.MakeTableNameWithSchema(tree.Name(parentDbDesc.GetName()),
- parentSchemaName, tree.Name(parentTable.GetName()))
- parentName.ExplicitCatalog = parentDbDesc.GetName() != dbPrefix
- return parentName, nil
-}
-
// getTableNameFromTableDescriptor returns a TableName object for a given
// TableDescriptor.
func getTableNameFromTableDescriptor(
diff --git a/pkg/sql/revert.go b/pkg/sql/revert.go
index a13c4ae913b8..97a8e701fdb0 100644
--- a/pkg/sql/revert.go
+++ b/pkg/sql/revert.go
@@ -56,8 +56,7 @@ func RevertTables(
spans := make([]roachpb.Span, 0, len(tables))
- // Check that all the tables are revertable -- i.e. offline and that their
- // full interleave hierarchy is being reverted.
+ // Check that all the tables are revertable -- i.e. offline.
for i := range tables {
if tables[i].GetState() != descpb.DescriptorState_OFFLINE {
return errors.New("only offline tables can be reverted")
@@ -66,20 +65,6 @@ func RevertTables(
if !tables[i].IsPhysicalTable() {
return errors.Errorf("cannot revert virtual table %s", tables[i].GetName())
}
- for _, idx := range tables[i].NonDropIndexes() {
- for j := 0; j < idx.NumInterleaveAncestors(); j++ {
- parent := idx.GetInterleaveAncestor(j)
- if !reverting[parent.TableID] {
- return errors.New("cannot revert table without reverting all interleaved tables and indexes")
- }
- }
- for j := 0; j < idx.NumInterleavedBy(); j++ {
- child := idx.GetInterleavedBy(j)
- if !reverting[child.Table] {
- return errors.New("cannot revert table without reverting all interleaved tables and indexes")
- }
- }
- }
spans = append(spans, tables[i].TableSpan(execCfg.Codec))
}
diff --git a/pkg/sql/row/deleter.go b/pkg/sql/row/deleter.go
index cbe770340fcf..b6f6d6165a47 100644
--- a/pkg/sql/row/deleter.go
+++ b/pkg/sql/row/deleter.go
@@ -162,33 +162,3 @@ func (rd *Deleter) DeleteRow(
return nil
})
}
-
-// DeleteIndexRow adds to the batch the kv operations necessary to delete a
-// table row from the given index.
-func (rd *Deleter) DeleteIndexRow(
- ctx context.Context, b *kv.Batch, idx catalog.Index, values []tree.Datum, traceKV bool,
-) error {
- // We want to include empty k/v pairs because we want
- // to delete all k/v's for this row. By setting includeEmpty
- // to true, we will get a k/v pair for each family in the row,
- // which will guarantee that we delete all the k/v's in this row.
- secondaryIndexEntry, err := rowenc.EncodeSecondaryIndex(
- rd.Helper.Codec,
- rd.Helper.TableDesc,
- idx,
- rd.FetchColIDtoRowIndex,
- values,
- true, /* includeEmpty */
- )
- if err != nil {
- return err
- }
-
- for _, entry := range secondaryIndexEntry {
- if traceKV {
- log.VEventf(ctx, 2, "Del %s", entry.Key)
- }
- b.Del(entry.Key)
- }
- return nil
-}
diff --git a/pkg/sql/row/fetcher.go b/pkg/sql/row/fetcher.go
index c0e7fc2004a4..a8897eaa3b62 100644
--- a/pkg/sql/row/fetcher.go
+++ b/pkg/sql/row/fetcher.go
@@ -786,14 +786,16 @@ func (rf *Fetcher) prettyEncDatums(types []*types.T, vals []rowenc.EncDatum) str
func (rf *Fetcher) ReadIndexKey(
key roachpb.Key,
) (remaining []byte, ok bool, foundNull bool, err error) {
- return rowenc.DecodeIndexKeyWithoutTableIDIndexIDPrefix(
- rf.table.desc,
- rf.table.index,
+ remaining, foundNull, err = rowenc.DecodeKeyVals(
rf.table.keyValTypes,
rf.table.keyVals,
rf.table.indexColumnDirs,
key[rf.table.knownPrefixLength:],
)
+ if err != nil {
+ return nil, false, false, err
+ }
+ return remaining, true, foundNull, nil
}
// KeyToDesc implements the KeyToDescTranslator interface. The implementation is
diff --git a/pkg/sql/rowenc/index_encoding.go b/pkg/sql/rowenc/index_encoding.go
index cbc2fbf8fd8a..196b17b672a3 100644
--- a/pkg/sql/rowenc/index_encoding.go
+++ b/pkg/sql/rowenc/index_encoding.go
@@ -43,10 +43,6 @@ import (
func MakeIndexKeyPrefix(
codec keys.SQLCodec, desc catalog.TableDescriptor, indexID descpb.IndexID,
) []byte {
- if i, err := desc.FindIndexWithID(indexID); err == nil && i.NumInterleaveAncestors() > 0 {
- ancestor := i.GetInterleaveAncestor(0)
- return codec.IndexPrefix(uint32(ancestor.TableID), uint32(ancestor.IndexID))
- }
return codec.IndexPrefix(uint32(desc.GetID()), uint32(indexID))
}
@@ -148,45 +144,11 @@ func EncodePartialIndexKey(
// We know we will append to the key which will cause the capacity to grow so
// make it bigger from the get-go.
// Add the length of the key prefix as an initial guess.
- // Add 3 bytes for every ancestor: table,index id + interleave sentinel.
// Add 2 bytes for every column value. An underestimate for all but low integers.
- key = growKey(keyPrefix, len(keyPrefix)+3*index.NumInterleaveAncestors()+2*len(values))
+ key = growKey(keyPrefix, len(keyPrefix)+2*len(values))
dirs := directions(index.IndexDesc().KeyColumnDirections)
- if index.NumInterleaveAncestors() > 0 {
- for i := 0; i < index.NumInterleaveAncestors(); i++ {
- ancestor := index.GetInterleaveAncestor(i)
- // The first ancestor is assumed to already be encoded in keyPrefix.
- if i != 0 {
- key = EncodePartialTableIDIndexID(key, ancestor.TableID, ancestor.IndexID)
- }
-
- partial := false
- length := int(ancestor.SharedPrefixLen)
- if length > len(colIDs) {
- length = len(colIDs)
- partial = true
- }
- key, colIDWithNullVal, err = EncodeColumns(colIDs[:length], dirs[:length], colMap, values, key)
- if err != nil {
- return nil, colIDWithNullVal, err
- }
- if partial {
- // Early stop. Note that if we had exactly SharedPrefixLen columns
- // remaining, we want to append the next tableID/indexID pair because
- // that results in a more specific key.
- return key, colIDWithNullVal, nil
- }
- colIDs, dirs = colIDs[length:], dirs[length:]
- // Each ancestor is separated by an interleaved
- // sentinel (0xfe).
- key = encoding.EncodeInterleavedSentinel(key)
- }
-
- key = EncodePartialTableIDIndexID(key, tableDesc.GetID(), index.GetID())
- }
-
var keyColIDWithNullVal, keySuffixColIDWithNullVal descpb.ColumnID
key, keyColIDWithNullVal, err = EncodeColumns(colIDs, dirs, colMap, values, key)
if colIDWithNullVal == 0 {
@@ -462,43 +424,6 @@ func MakeKeyFromEncDatums(
key := make(roachpb.Key, len(keyPrefix), len(keyPrefix)*2)
copy(key, keyPrefix)
- if index.NumInterleaveAncestors() > 0 {
- for i := 0; i < index.NumInterleaveAncestors(); i++ {
- ancestor := index.GetInterleaveAncestor(i)
- // The first ancestor is assumed to already be encoded in keyPrefix.
- if i != 0 {
- key = EncodePartialTableIDIndexID(key, ancestor.TableID, ancestor.IndexID)
- }
-
- partial := false
- length := int(ancestor.SharedPrefixLen)
- if length > len(types) {
- length = len(types)
- partial = true
- }
- var (
- err error
- n bool
- )
- key, n, err = appendEncDatumsToKey(key, types[:length], values[:length], dirs[:length], alloc)
- if err != nil {
- return nil, false, false, err
- }
- containsNull = containsNull || n
- if partial {
- // Early stop - the number of desired columns was fewer than the number
- // left in the current interleave.
- return key, false, false, nil
- }
- types, values, dirs = types[length:], values[length:], dirs[length:]
-
- // Each ancestor is separated by an interleaved
- // sentinel (0xfe).
- key = encoding.EncodeInterleavedSentinel(key)
- }
-
- key = EncodePartialTableIDIndexID(key, tableDesc.GetID(), index.GetID())
- }
var (
err error
n bool
@@ -550,12 +475,6 @@ func appendEncDatumsToKey(
return key, containsNull, nil
}
-// EncodePartialTableIDIndexID encodes a table id followed by an index id to an
-// existing key. The key must already contain a tenant id.
-func EncodePartialTableIDIndexID(key []byte, tableID descpb.ID, indexID descpb.IndexID) []byte {
- return keys.MakeTableIDIndexID(key, uint32(tableID), uint32(indexID))
-}
-
// DecodePartialTableIDIndexID decodes a table id followed by an index id. The
// input key must already have its tenant id removed.
func DecodePartialTableIDIndexID(key []byte) ([]byte, descpb.ID, descpb.IndexID, error) {
@@ -574,58 +493,15 @@ func DecodeIndexKeyPrefix(
if err != nil {
return 0, nil, err
}
-
- // TODO(dan): This whole operation is n^2 because of the interleaves
- // bookkeeping. We could improve it to n with a prefix tree of components.
-
- interleaves := append(make([]catalog.Index, 0, len(desc.ActiveIndexes())), desc.ActiveIndexes()...)
-
- for component := 0; ; component++ {
- var tableID descpb.ID
- key, tableID, indexID, err = DecodePartialTableIDIndexID(key)
- if err != nil {
- return 0, nil, err
- }
- if tableID == desc.GetID() {
- // Once desc's table id has been decoded, there can be no more
- // interleaves.
- break
- }
-
- for i := len(interleaves) - 1; i >= 0; i-- {
- if interleaves[i].NumInterleaveAncestors() <= component ||
- interleaves[i].GetInterleaveAncestor(component).TableID != tableID ||
- interleaves[i].GetInterleaveAncestor(component).IndexID != indexID {
-
- // This component, and thus this interleave, doesn't match what was
- // decoded, remove it.
- copy(interleaves[i:], interleaves[i+1:])
- interleaves = interleaves[:len(interleaves)-1]
- }
- }
- // The decoded key doesn't many any known interleaves
- if len(interleaves) == 0 {
- return 0, nil, errors.Errorf("no known interleaves for key")
- }
-
- // Anything left has the same SharedPrefixLen at index `component`, so just
- // use the first one.
- for i := uint32(0); i < interleaves[0].GetInterleaveAncestor(component).SharedPrefixLen; i++ {
- l, err := encoding.PeekLength(key)
- if err != nil {
- return 0, nil, err
- }
- key = key[l:]
- }
-
- // Consume the interleaved sentinel.
- var ok bool
- key, ok = encoding.DecodeIfInterleavedSentinel(key)
- if !ok {
- return 0, nil, errors.Errorf("invalid interleave key")
- }
+ var tableID descpb.ID
+ key, tableID, indexID, err = DecodePartialTableIDIndexID(key)
+ if err != nil {
+ return 0, nil, err
+ }
+ if tableID != desc.GetID() {
+ return 0, nil, errors.Errorf(
+ "unexpected table ID %d, expected %d instead", tableID, desc.GetID())
}
-
return indexID, key, err
}
@@ -639,8 +515,6 @@ func DecodeIndexKeyPrefix(
// no error.
func DecodeIndexKey(
codec keys.SQLCodec,
- desc catalog.TableDescriptor,
- index catalog.Index,
types []*types.T,
vals []EncDatum,
colDirs []descpb.IndexDescriptor_Direction,
@@ -654,80 +528,11 @@ func DecodeIndexKey(
if err != nil {
return nil, false, false, err
}
- return DecodeIndexKeyWithoutTableIDIndexIDPrefix(desc, index, types, vals, colDirs, key)
-}
-
-// DecodeIndexKeyWithoutTableIDIndexIDPrefix is the same as DecodeIndexKey,
-// except it expects its index key is missing in its tenant id and first table
-// id / index id key prefix.
-func DecodeIndexKeyWithoutTableIDIndexIDPrefix(
- desc catalog.TableDescriptor,
- index catalog.Index,
- types []*types.T,
- vals []EncDatum,
- colDirs []descpb.IndexDescriptor_Direction,
- key []byte,
-) (remainingKey []byte, matches bool, foundNull bool, _ error) {
- var decodedTableID descpb.ID
- var decodedIndexID descpb.IndexID
- var err error
-
- if index.NumInterleaveAncestors() > 0 {
- for i := 0; i < index.NumInterleaveAncestors(); i++ {
- ancestor := index.GetInterleaveAncestor(i)
- // Our input key had its first table id / index id chopped off, so
- // don't try to decode those for the first ancestor.
- if i != 0 {
- key, decodedTableID, decodedIndexID, err = DecodePartialTableIDIndexID(key)
- if err != nil {
- return nil, false, false, err
- }
- if decodedTableID != ancestor.TableID || decodedIndexID != ancestor.IndexID {
- return nil, false, false, nil
- }
- }
-
- length := int(ancestor.SharedPrefixLen)
- var isNull bool
- key, isNull, err = DecodeKeyVals(types[:length], vals[:length], colDirs[:length], key)
- if err != nil {
- return nil, false, false, err
- }
- types, vals, colDirs = types[length:], vals[length:], colDirs[length:]
- foundNull = foundNull || isNull
-
- // Consume the interleaved sentinel.
- var ok bool
- key, ok = encoding.DecodeIfInterleavedSentinel(key)
- if !ok {
- return nil, false, false, nil
- }
- }
-
- key, decodedTableID, decodedIndexID, err = DecodePartialTableIDIndexID(key)
- if err != nil {
- return nil, false, false, err
- }
- if decodedTableID != desc.GetID() || decodedIndexID != index.GetID() {
- return nil, false, false, nil
- }
- }
-
- var isNull bool
- key, isNull, err = DecodeKeyVals(types, vals, colDirs, key)
+ remainingKey, foundNull, err = DecodeKeyVals(types, vals, colDirs, key)
if err != nil {
return nil, false, false, err
}
- foundNull = foundNull || isNull
-
- // We're expecting a column family id next (a varint). If
- // interleavedSentinel is actually next, then this key is for a child
- // table.
- if _, ok := encoding.DecodeIfInterleavedSentinel(key); ok {
- return nil, false, false, nil
- }
-
- return key, true, foundNull, nil
+ return remainingKey, true, foundNull, nil
}
// DecodeKeyVals decodes the values that are part of the key. The decoded
@@ -1528,177 +1333,14 @@ func EncodeSecondaryIndexes(
return secondaryIndexEntries, memUsedEncodingSecondaryIdxs, nil
}
-// IndexKeyEquivSignature parses an index key if and only if the index key
-// belongs to a table where its equivalence signature and all its interleave
-// ancestors' signatures can be found in validEquivSignatures. Any tenant ID
-// prefix should be removed before calling this function.
-//
-// Its validEquivSignatures argument is a map containing equivalence signatures
-// of valid ancestors of the desired table and of the desired table itself.
-//
-// IndexKeyEquivSignature returns whether or not the index key satisfies the
-// above condition, the value mapped to by the desired table (could be a table
-// index), and the rest of the key that's not part of the signature.
-//
-// It also requires two []byte buffers: one for the signature (signatureBuf) and
-// one for the rest of the key (keyRestBuf).
-//
-// The equivalence signature defines the equivalence classes for the signature
-// of potentially interleaved tables. For example, the equivalence signatures
-// for the following interleaved indexes:
-//
-//
-//
-//
-// and index keys
-// : ////
-// : /////#//child index id>//
-//
-// correspond to the equivalence signatures
-// : //
-// : ///#//
-//
-// Equivalence signatures allow us to associate an index key with its table
-// without having to invoke DecodeIndexKey multiple times.
-//
-// IndexKeyEquivSignature will return false if the a table's ancestor'ssignature
-// or the table's signature (table which the index key belongs to) is not mapped
-// in validEquivSignatures.
-//
-// For example, suppose the given key is
-//
-// ////#///
-//
-// and validEquivSignatures contains
-//
-// //t1 index id>
-// //t1 index id>/#//
-//
-// IndexKeyEquivSignature will short-circuit and return false once
-//
-// //
-//
-// is processed since t2's signature is not specified in validEquivSignatures.
-func IndexKeyEquivSignature(
- key []byte, validEquivSignatures map[string]int, signatureBuf []byte, restBuf []byte,
-) (tableIdx int, restResult []byte, success bool, err error) {
- signatureBuf = signatureBuf[:0]
- restResult = restBuf[:0]
- for {
- // Well-formed key is guaranteed to to have 2 varints for every
- // ancestor: the TableID and descpb.IndexID.
- // We extract these out and add them to our buffer.
- for i := 0; i < 2; i++ {
- idLen, err := encoding.PeekLength(key)
- if err != nil {
- return 0, nil, false, err
- }
- signatureBuf = append(signatureBuf, key[:idLen]...)
- key = key[idLen:]
- }
-
- // The current signature (either an ancestor table's or the key's)
- // is not one of the validEquivSignatures.
- // We can short-circuit and return false.
- recentTableIdx, found := validEquivSignatures[string(signatureBuf)]
- if !found {
- return 0, nil, false, nil
- }
-
- var isSentinel bool
- // Peek and discard encoded index values.
- for {
- key, isSentinel = encoding.DecodeIfInterleavedSentinel(key)
- // We stop once the key is empty or if we encounter a
- // sentinel for the next TableID-descpb.IndexID pair.
- if len(key) == 0 || isSentinel {
- break
- }
- len, err := encoding.PeekLength(key)
- if err != nil {
- return 0, nil, false, err
- }
- // Append any other bytes (column values initially,
- // then family ID and timestamp) to return.
- restResult = append(restResult, key[:len]...)
- key = key[len:]
- }
-
- if !isSentinel {
- // The key has been fully decomposed and is valid up to
- // this point.
- // Return the most recent table index from
- // validEquivSignatures.
- return recentTableIdx, restResult, true, nil
- }
- // If there was a sentinel, we know there are more
- // descendant(s).
- // We insert an interleave sentinel and continue extracting the
- // next descendant's IDs.
- signatureBuf = encoding.EncodeInterleavedSentinel(signatureBuf)
- }
-}
-
-// TableEquivSignatures returns the equivalence signatures for each interleave
-// ancestor and itself. See IndexKeyEquivSignature for more info.
-func TableEquivSignatures(
- desc catalog.TableDescriptor, index catalog.Index,
-) (signatures [][]byte, err error) {
- // signatures contains the slice reference to the signature of every
- // ancestor of the current table-index.
- // The last slice reference is the given table-index's signature.
- signatures = make([][]byte, index.NumInterleaveAncestors()+1)
- // fullSignature is the backing byte slice for each individual signature
- // as it buffers each block of table and index IDs.
- // We eagerly allocate 4 bytes for each of the two IDs per ancestor
- // (which can fit Uvarint IDs up to 2^17-1 without another allocation),
- // 1 byte for each interleave sentinel, and 4 bytes each for the given
- // table's and index's ID.
- fullSignature := make([]byte, 0, index.NumInterleaveAncestors()*9+8)
-
- // Encode the table's ancestors' TableIDs and descpb.IndexIDs.
- for i := 0; i < index.NumInterleaveAncestors(); i++ {
- ancestor := index.GetInterleaveAncestor(i)
- fullSignature = EncodePartialTableIDIndexID(fullSignature, ancestor.TableID, ancestor.IndexID)
- // Create a reference up to this point for the ancestor's
- // signature.
- signatures[i] = fullSignature
- // Append Interleave sentinel after every ancestor.
- fullSignature = encoding.EncodeInterleavedSentinel(fullSignature)
- }
-
- // Encode the table's table and index IDs.
- fullSignature = EncodePartialTableIDIndexID(fullSignature, desc.GetID(), index.GetID())
- // Create a reference for the given table's signature as the last
- // element of signatures.
- signatures[len(signatures)-1] = fullSignature
-
- return signatures, nil
-}
-
// maxKeyTokens returns the maximum number of key tokens in an index's key,
// including the table ID, index ID, and index column values (including extra
// columns that may be stored in the key).
// It requires knowledge of whether the key will or might contain a NULL value:
// if uncertain, pass in true to 'overestimate' the maxKeyTokens.
//
-// In general, a key belonging to an interleaved index grandchild is encoded as:
-//
-// /table/index//...//#/table/index//...//#/table/index//.../
-//
-// The part of the key with respect to the grandchild index would be
-// the entire key since there are no grand-grandchild table/index IDs or
-// . The maximal prefix of the key that belongs to child is
-//
-// /table/index//...//#/table/index//.../
-//
-// and the maximal prefix of the key that belongs to parent is
-//
-// /table/index//.../
-//
// This returns the maximum number of in this prefix.
func maxKeyTokens(index catalog.Index, containsNull bool) int {
- nTables := index.NumInterleaveAncestors() + 1
nKeyCols := index.NumKeyColumns()
// Non-unique secondary indexes or unique secondary indexes with a NULL
@@ -1709,20 +1351,7 @@ func maxKeyTokens(index catalog.Index, containsNull bool) int {
nKeyCols += index.NumKeySuffixColumns()
}
- // To illustrate how we compute max # of key tokens, take the
- // key in the example above and let the respective index be child.
- // We'd like to return the number of bytes in
- //
- // /table/index//...//#/table/index//.../
- // For each table-index, there is
- // 1. table ID
- // 2. index ID
- // 3. interleave sentinel
- // or 3 * nTables.
- // Each must be a part of the index's columns (nKeys).
- // Finally, we do not want to include the interleave sentinel for the
- // current index (-1).
- return 3*nTables + nKeyCols - 1
+ return 2 + nKeyCols
}
// AdjustEndKeyForInterleave returns an exclusive end key. It does two things:
diff --git a/pkg/sql/rowenc/index_encoding_test.go b/pkg/sql/rowenc/index_encoding_test.go
index 3872f7dadfeb..c777d72c3cb5 100644
--- a/pkg/sql/rowenc/index_encoding_test.go
+++ b/pkg/sql/rowenc/index_encoding_test.go
@@ -33,7 +33,6 @@ import (
"github.com/cockroachdb/cockroach/pkg/sql/sem/tree"
"github.com/cockroachdb/cockroach/pkg/sql/types"
"github.com/cockroachdb/cockroach/pkg/testutils"
- "github.com/cockroachdb/cockroach/pkg/util/encoding"
"github.com/cockroachdb/cockroach/pkg/util/json"
"github.com/cockroachdb/cockroach/pkg/util/leaktest"
"github.com/cockroachdb/cockroach/pkg/util/randutil"
@@ -119,7 +118,7 @@ func decodeIndex(
}
values := make([]EncDatum, index.NumKeyColumns())
colDirs := index.IndexDesc().KeyColumnDirections
- _, ok, _, err := DecodeIndexKey(codec, tableDesc, index, types, values, colDirs, key)
+ _, ok, _, err := DecodeIndexKey(codec, types, values, colDirs, key)
if err != nil {
return nil, err
}
@@ -950,320 +949,6 @@ func TestMarshalColumnValue(t *testing.T) {
}
}
-type interleaveTableArgs struct {
- indexKeyArgs indexKeyTest
- values []tree.Datum
-}
-
-type interleaveInfo struct {
- tableID uint64
- values []tree.Datum
- equivSig []byte
- children map[string]*interleaveInfo
-}
-
-func createHierarchy() map[string]*interleaveInfo {
- return map[string]*interleaveInfo{
- "t1": {
- tableID: 50,
- values: []tree.Datum{tree.NewDInt(10)},
- children: map[string]*interleaveInfo{
- "t2": {
- tableID: 100,
- values: []tree.Datum{tree.NewDInt(10), tree.NewDInt(15)},
- },
- "t3": {
- tableID: 150,
- values: []tree.Datum{tree.NewDInt(10), tree.NewDInt(20)},
- children: map[string]*interleaveInfo{
- "t4": {
- tableID: 20,
- values: []tree.Datum{tree.NewDInt(10), tree.NewDInt(30)},
- },
- },
- },
- },
- },
- }
-}
-
-type equivSigTestCases struct {
- name string
- table interleaveTableArgs
- expected [][]byte
-}
-
-func createEquivTCs(hierarchy map[string]*interleaveInfo) []equivSigTestCases {
- return []equivSigTestCases{
- {
- name: "NoAncestors",
- table: interleaveTableArgs{
- indexKeyArgs: indexKeyTest{tableID: 50},
- values: []tree.Datum{tree.NewDInt(10)},
- },
- expected: [][]byte{hierarchy["t1"].equivSig},
- },
-
- {
- name: "OneAncestor",
- table: interleaveTableArgs{
- indexKeyArgs: indexKeyTest{tableID: 100, primaryInterleaves: []descpb.ID{50}},
- values: []tree.Datum{tree.NewDInt(10), tree.NewDInt(20)},
- },
- expected: [][]byte{hierarchy["t1"].equivSig, hierarchy["t1"].children["t2"].equivSig},
- },
-
- {
- name: "TwoAncestors",
- table: interleaveTableArgs{
- indexKeyArgs: indexKeyTest{tableID: 20, primaryInterleaves: []descpb.ID{50, 150}},
- values: []tree.Datum{tree.NewDInt(10), tree.NewDInt(20), tree.NewDInt(30)},
- },
- expected: [][]byte{hierarchy["t1"].equivSig, hierarchy["t1"].children["t3"].equivSig, hierarchy["t1"].children["t3"].children["t4"].equivSig},
- },
- }
-}
-
-// equivSignatures annotates the hierarchy with the equivalence signatures
-// for each table and returns an in-order depth-first traversal of the
-// equivalence signatures.
-func equivSignatures(
- hierarchy map[string]*interleaveInfo, parent []byte, signatures [][]byte,
-) [][]byte {
- for _, info := range hierarchy {
- // Reset the reference to the parent for every child.
- curParent := parent
- curParent = encoding.EncodeUvarintAscending(curParent, info.tableID)
- // Primary ID is always 1
- curParent = encoding.EncodeUvarintAscending(curParent, 1)
- info.equivSig = make([]byte, len(curParent))
- copy(info.equivSig, curParent)
- signatures = append(signatures, info.equivSig)
- if len(info.children) > 0 {
- curParent = encoding.EncodeInterleavedSentinel(curParent)
- signatures = equivSignatures(info.children, curParent, signatures)
- }
- }
- return signatures
-}
-
-func TestIndexKeyEquivSignature(t *testing.T) {
- hierarchy := createHierarchy()
- hierarchySigs := equivSignatures(hierarchy, nil /*parent*/, nil /*signatures*/)
- // validEquivSigs is necessary for IndexKeyEquivSignatures.
- validEquivSigs := make(map[string]int)
- for i, sig := range hierarchySigs {
- validEquivSigs[string(sig)] = i
- }
-
- // Required buffers when extracting the index key's equivalence signature.
- var keySigBuf, keyRestBuf []byte
-
- for _, tc := range createEquivTCs(hierarchy) {
- t.Run(tc.name, func(t *testing.T) {
- // We need to initialize this for makeTableDescForTest.
- tc.table.indexKeyArgs.primaryValues = tc.table.values
- // Setup descriptors and form an index key.
- desc, colMap := makeTableDescForTest(tc.table.indexKeyArgs)
- primaryKeyPrefix := MakeIndexKeyPrefix(keys.SystemSQLCodec, desc, desc.GetPrimaryIndexID())
- primaryKey, _, err := EncodeIndexKey(
- desc, desc.GetPrimaryIndex(), colMap, tc.table.values, primaryKeyPrefix)
- if err != nil {
- t.Fatal(err)
- }
-
- tableIdx, restKey, match, err := IndexKeyEquivSignature(primaryKey, validEquivSigs, keySigBuf, keyRestBuf)
- if err != nil {
- t.Fatal(err)
- }
- if !match {
- t.Fatalf("expected to extract equivalence signature from index key, instead false returned")
- }
-
- tableSig := tc.expected[len(tc.expected)-1]
- expectedTableIdx := validEquivSigs[string(tableSig)]
- if expectedTableIdx != tableIdx {
- t.Fatalf("table index returned does not match table index from validEquivSigs.\nexpected %d\nactual %d", expectedTableIdx, tableIdx)
- }
-
- // Column values should be at the beginning of the
- // remaining bytes of the key.
- pkIndexDesc := desc.GetPrimaryIndex().IndexDesc()
- colVals, nullColID, err := EncodeColumns(
- pkIndexDesc.KeyColumnIDs,
- pkIndexDesc.KeyColumnDirections,
- colMap,
- tc.table.values,
- nil, /* keyPrefix */
- )
- if err != nil {
- t.Fatal(err)
- }
- if nullColID != 0 {
- t.Fatalf("unexpected null values when encoding expected column values")
- }
-
- if !bytes.Equal(colVals, restKey[:len(colVals)]) {
- t.Fatalf("missing column values from rest of key.\nexpected %v\nactual %v", colVals, restKey[:len(colVals)])
- }
-
- // The remaining bytes of the key should be the same
- // length as the primary key minus the equivalence
- // signature bytes.
- if len(primaryKey)-len(tableSig) != len(restKey) {
- t.Fatalf("unexpected rest of key length, expected %d, actual %d", len(primaryKey)-len(tableSig), len(restKey))
- }
- })
- }
-}
-
-// TestTableEquivSignatures verifies that TableEquivSignatures returns a slice
-// of slice references to a table's interleave ancestors' equivalence
-// signatures.
-func TestTableEquivSignatures(t *testing.T) {
- hierarchy := createHierarchy()
- equivSignatures(hierarchy, nil /*parent*/, nil /*signatures*/)
-
- for _, tc := range createEquivTCs(hierarchy) {
- t.Run(tc.name, func(t *testing.T) {
- // We need to initialize this for makeTableDescForTest.
- tc.table.indexKeyArgs.primaryValues = tc.table.values
- // Setup descriptors and form an index key.
- desc, _ := makeTableDescForTest(tc.table.indexKeyArgs)
- equivSigs, err := TableEquivSignatures(desc, desc.GetPrimaryIndex())
- if err != nil {
- t.Fatal(err)
- }
-
- if len(equivSigs) != len(tc.expected) {
- t.Fatalf("expected %d equivalence signatures from TableEquivSignatures, actual %d", len(tc.expected), len(equivSigs))
- }
- for i, sig := range equivSigs {
- if !bytes.Equal(sig, tc.expected[i]) {
- t.Fatalf("equivalence signatures at index %d do not match.\nexpected\t%v\nactual\t%v", i, tc.expected[i], sig)
- }
- }
- })
- }
-}
-
-// TestEquivSignature verifies that invoking IndexKeyEquivSignature for an encoded index key
-// for a given table-index pair returns the equivalent equivalence signature as
-// that of the table-index from invoking TableEquivSignatures.
-// It also checks that the equivalence signature is not equivalent to any other
-// tables' equivalence signatures.
-func TestEquivSignature(t *testing.T) {
- for _, tc := range []struct {
- name string
- tables []interleaveTableArgs
- }{
- {
- name: "Simple",
- tables: []interleaveTableArgs{
- {
- indexKeyArgs: indexKeyTest{tableID: 50},
- values: []tree.Datum{tree.NewDInt(10)},
- },
- {
- indexKeyArgs: indexKeyTest{tableID: 51},
- values: []tree.Datum{tree.NewDInt(20)},
- },
- },
- },
-
- {
- name: "ParentAndChild",
- tables: []interleaveTableArgs{
- {
- indexKeyArgs: indexKeyTest{tableID: 50},
- values: []tree.Datum{tree.NewDInt(10)},
- },
- {
- indexKeyArgs: indexKeyTest{tableID: 51, primaryInterleaves: []descpb.ID{50}},
- values: []tree.Datum{tree.NewDInt(10), tree.NewDInt(20)},
- },
- },
- },
-
- {
- name: "Siblings",
- tables: []interleaveTableArgs{
- {
- indexKeyArgs: indexKeyTest{tableID: 50},
- values: []tree.Datum{tree.NewDInt(10)},
- },
- {
- indexKeyArgs: indexKeyTest{tableID: 51, primaryInterleaves: []descpb.ID{50}},
- values: []tree.Datum{tree.NewDInt(10), tree.NewDInt(20)},
- },
- {
- indexKeyArgs: indexKeyTest{tableID: 52, primaryInterleaves: []descpb.ID{50}},
- values: []tree.Datum{tree.NewDInt(30), tree.NewDInt(40)},
- },
- },
- },
- } {
- t.Run(tc.name, func(t *testing.T) {
- keyEquivSigs := make([][]byte, len(tc.tables))
- tableEquivSigs := make([][]byte, len(tc.tables))
-
- for i, table := range tc.tables {
- // We need to initialize this for makeTableDescForTest.
- table.indexKeyArgs.primaryValues = table.values
-
- // Setup descriptors and form an index key.
- desc, colMap := makeTableDescForTest(table.indexKeyArgs)
- primaryKeyPrefix := MakeIndexKeyPrefix(keys.SystemSQLCodec, desc, desc.GetPrimaryIndexID())
- primaryKey, _, err := EncodeIndexKey(
- desc, desc.GetPrimaryIndex(), colMap, table.values, primaryKeyPrefix)
- if err != nil {
- t.Fatal(err)
- }
-
- // Extract out the table's equivalence signature.
- tempEquivSigs, err := TableEquivSignatures(desc, desc.GetPrimaryIndex())
- if err != nil {
- t.Fatal(err)
- }
- // The last signature is this table's.
- tableEquivSigs[i] = tempEquivSigs[len(tempEquivSigs)-1]
-
- validEquivSigs := make(map[string]int)
- for i, sig := range tempEquivSigs {
- validEquivSigs[string(sig)] = i
- }
- // Extract out the corresponding table index
- // of the index key's signature.
- tableIdx, _, _, err := IndexKeyEquivSignature(primaryKey, validEquivSigs, nil /*keySigBuf*/, nil /*keyRestBuf*/)
- if err != nil {
- t.Fatal(err)
- }
- // Map the table index back to the signature.
- keyEquivSigs[i] = tempEquivSigs[tableIdx]
- }
-
- for i, keySig := range keyEquivSigs {
- for j, tableSig := range tableEquivSigs {
- if i == j {
- // The corresponding table should have the same
- // equivalence signature as the one derived from the key.
- if !bytes.Equal(keySig, tableSig) {
- t.Fatalf("IndexKeyEquivSignature differs from equivalence signature for its table.\nKeySignature: %v\nTableSignature: %v", keySig, tableSig)
- }
- } else {
- // A different table should not have
- // the same equivalence signature.
- if bytes.Equal(keySig, tableSig) {
- t.Fatalf("IndexKeyEquivSignature produces equivalent signature for a different table.\nKeySignature: %v\nTableSignature: %v", keySig, tableSig)
- }
- }
- }
- }
-
- })
- }
-}
-
func TestDecodeTableValue(t *testing.T) {
a := &DatumAlloc{}
for _, tc := range []struct {
@@ -1299,10 +984,6 @@ func TestDecodeTableValue(t *testing.T) {
}
}
-// See CreateTestInterleavedHierarchy for the longest chain used for the short
-// format.
-var shortFormTables = [3]string{"parent1", "child1", "grandchild1"}
-
// ExtractIndexKey constructs the index (primary) key for a row from any index
// key/value entry, including secondary indexes.
//
@@ -1330,23 +1011,9 @@ func ExtractIndexKey(
}
values := make([]EncDatum, index.NumKeyColumns())
dirs := index.IndexDesc().KeyColumnDirections
- if index.NumInterleaveAncestors() > 0 {
- // TODO(dan): In the interleaved index case, we parse the key twice; once to
- // find the index id so we can look up the descriptor, and once to extract
- // the values. Only parse once.
- var ok bool
- _, ok, _, err = DecodeIndexKey(codec, tableDesc, index, indexTypes, values, dirs, entry.Key)
- if err != nil {
- return nil, err
- }
- if !ok {
- return nil, errors.Errorf("descriptor did not match key")
- }
- } else {
- key, _, err = DecodeKeyVals(indexTypes, values, dirs, key)
- if err != nil {
- return nil, err
- }
+ key, _, err = DecodeKeyVals(indexTypes, values, dirs, key)
+ if err != nil {
+ return nil, err
}
// Extract the values for index.KeySuffixColumnIDs
diff --git a/pkg/sql/schema_changer.go b/pkg/sql/schema_changer.go
index 49169c4e6b64..bd46f85ae355 100644
--- a/pkg/sql/schema_changer.go
+++ b/pkg/sql/schema_changer.go
@@ -1082,25 +1082,24 @@ func (sc *SchemaChanger) done(ctx context.Context) error {
}
isRollback = m.IsRollback()
if idx := m.AsIndex(); m.Dropped() && idx != nil {
- if canClearRangeForDrop(idx) {
- // how we keep track of dropped index names (for, e.g., zone config
- // lookups), even though in the absence of a GC job there's nothing to
- // clean them up.
- scTable.GCMutations = append(
- scTable.GCMutations,
- descpb.TableDescriptor_GCDescriptorMutation{
- IndexID: idx.GetID(),
- })
+ // how we keep track of dropped index names (for, e.g., zone config
+ // lookups), even though in the absence of a GC job there's nothing to
+ // clean them up.
+ scTable.GCMutations = append(
+ scTable.GCMutations,
+ descpb.TableDescriptor_GCDescriptorMutation{
+ IndexID: idx.GetID(),
+ })
- description := sc.job.Payload().Description
- if isRollback {
- description = "ROLLBACK of " + description
- }
+ description := sc.job.Payload().Description
+ if isRollback {
+ description = "ROLLBACK of " + description
+ }
- if err := sc.createIndexGCJob(ctx, idx.GetID(), txn, description); err != nil {
- return err
- }
+ if err := sc.createIndexGCJob(ctx, idx.GetID(), txn, description); err != nil {
+ return err
}
+
}
if constraint := m.AsConstraint(); constraint != nil && constraint.Adding() {
if constraint.IsForeignKey() && constraint.ForeignKey().Validity == descpb.ConstraintValidity_Unvalidated {
@@ -1221,14 +1220,6 @@ func (sc *SchemaChanger) done(ctx context.Context) error {
}
}
- if err := maybeRemoveInterleaveBackreference(ctx, txn, descsCol, m, scTable, func(
- ctx context.Context, ancestor *tabledesc.Mutable,
- ) error {
- return descsCol.WriteDescToBatch(ctx, kvTrace, ancestor, b)
- }); err != nil {
- return err
- }
-
// If we performed MakeMutationComplete on a PrimaryKeySwap mutation, then we need to start
// a job for the index deletion mutations that the primary key swap mutation added, if any.
if err := sc.queueCleanupJobs(ctx, scTable, txn); err != nil {
@@ -1354,61 +1345,6 @@ func (sc *SchemaChanger) done(ctx context.Context) error {
return nil
}
-// If this mutation is a primary key swap that is not being rolled back,
-// and the old index had an interleaved parent, remove the backreference
-// from the parent.
-func maybeRemoveInterleaveBackreference(
- ctx context.Context,
- txn *kv.Txn,
- descsCol *descs.Collection,
- mutation catalog.Mutation,
- scTable *tabledesc.Mutable,
- writeFunc func(ctx context.Context, ancestor *tabledesc.Mutable) error,
-) error {
- if !mutation.Adding() {
- return nil
- }
- pkSwap := mutation.AsPrimaryKeySwap()
- if pkSwap == nil {
- return nil
- }
- return pkSwap.ForEachOldIndexIDs(func(id descpb.IndexID) error {
- oldIndex, err := scTable.FindIndexWithID(id)
- if err != nil {
- return err
- }
- if oldIndex.NumInterleaveAncestors() != 0 {
- ancestorInfo := oldIndex.GetInterleaveAncestor(oldIndex.NumInterleaveAncestors() - 1)
- ancestor, err := descsCol.GetMutableTableVersionByID(ctx, ancestorInfo.TableID, txn)
- if err != nil {
- return err
- }
- ancestorIdxI, err := ancestor.FindIndexWithID(ancestorInfo.IndexID)
- if err != nil {
- return err
- }
- ancestorIdx := ancestorIdxI.IndexDesc()
- foundAncestor := false
- for k, ref := range ancestorIdx.InterleavedBy {
- if ref.Table == scTable.ID && ref.Index == oldIndex.GetID() {
- if foundAncestor {
- return errors.AssertionFailedf(
- "ancestor entry in %s for %s@%s found more than once",
- ancestor.Name, scTable.Name, oldIndex.GetName())
- }
- ancestorIdx.InterleavedBy = append(
- ancestorIdx.InterleavedBy[:k], ancestorIdx.InterleavedBy[k+1:]...)
- foundAncestor = true
- if err := writeFunc(ctx, ancestor); err != nil {
- return err
- }
- }
- }
- }
- return nil
- })
-}
-
// maybeUpdateZoneConfigsForPKChange moves zone configs for any rewritten
// indexes from the old index over to the new index. Noop if run on behalf of a
// tenant.
diff --git a/pkg/sql/schemachanger/scbuild/table.go b/pkg/sql/schemachanger/scbuild/table.go
index bc2c31a99878..48942e3d6c4a 100644
--- a/pkg/sql/schemachanger/scbuild/table.go
+++ b/pkg/sql/schemachanger/scbuild/table.go
@@ -683,16 +683,6 @@ func (b *buildContext) maybeCleanTableFKs(
func (b *buildContext) dropTableDesc(
ctx context.Context, table catalog.TableDescriptor, behavior tree.DropBehavior,
) {
- // Interleaved tables not supported in new schema changer.
- if table.IsInterleaved() {
- panic(¬ImplementedError{
- n: &tree.DropTable{
- Names: []tree.TableName{
- tree.MakeUnqualifiedTableName(tree.Name(table.GetName())),
- },
- },
- detail: "drop on interleaved table"})
- }
// Drop dependent views
onErrPanic(table.ForeachDependedOnBy(func(dep *descpb.TableDescriptor_Reference) error {
diff --git a/pkg/sql/sem/tree/alter_table.go b/pkg/sql/sem/tree/alter_table.go
index 34458cbc87a1..f08b9ad6ac41 100644
--- a/pkg/sql/sem/tree/alter_table.go
+++ b/pkg/sql/sem/tree/alter_table.go
@@ -255,10 +255,9 @@ func (node *AlterTableAlterColumnType) GetColumn() Name {
// AlterTableAlterPrimaryKey represents an ALTER TABLE ALTER PRIMARY KEY command.
type AlterTableAlterPrimaryKey struct {
- Columns IndexElemList
- Interleave *InterleaveDef
- Sharded *ShardedIndexDef
- Name Name
+ Columns IndexElemList
+ Sharded *ShardedIndexDef
+ Name Name
}
// TelemetryCounter implements the AlterTableCmd interface.
@@ -274,9 +273,6 @@ func (node *AlterTableAlterPrimaryKey) Format(ctx *FmtCtx) {
if node.Sharded != nil {
ctx.FormatNode(node.Sharded)
}
- if node.Interleave != nil {
- ctx.FormatNode(node.Interleave)
- }
}
// AlterTableDropColumn represents a DROP COLUMN command.
diff --git a/pkg/sql/sem/tree/backup.go b/pkg/sql/sem/tree/backup.go
index ba6c4ed8f40f..6ec8925fa606 100644
--- a/pkg/sql/sem/tree/backup.go
+++ b/pkg/sql/sem/tree/backup.go
@@ -36,11 +36,10 @@ const (
// BackupOptions describes options for the BACKUP execution.
type BackupOptions struct {
- CaptureRevisionHistory bool
- EncryptionPassphrase Expr
- Detached bool
- EncryptionKMSURI StringOrPlaceholderOptList
- IncludeDeprecatedInterleaves bool
+ CaptureRevisionHistory bool
+ EncryptionPassphrase Expr
+ Detached bool
+ EncryptionKMSURI StringOrPlaceholderOptList
}
var _ NodeFormatter = &BackupOptions{}
@@ -238,11 +237,6 @@ func (o *BackupOptions) Format(ctx *FmtCtx) {
ctx.WriteString("kms = ")
ctx.FormatNode(&o.EncryptionKMSURI)
}
-
- if o.IncludeDeprecatedInterleaves {
- maybeAddSep()
- ctx.WriteString("include_deprecated_interleaves")
- }
}
// CombineWith merges other backup options into this backup options struct.
@@ -276,14 +270,6 @@ func (o *BackupOptions) CombineWith(other *BackupOptions) error {
return errors.New("kms specified multiple times")
}
- if o.IncludeDeprecatedInterleaves {
- if other.IncludeDeprecatedInterleaves {
- return errors.New("include_deprecated_interleaves option specified multiple times")
- }
- } else {
- o.IncludeDeprecatedInterleaves = other.IncludeDeprecatedInterleaves
- }
-
return nil
}
diff --git a/pkg/sql/sem/tree/create.go b/pkg/sql/sem/tree/create.go
index a15721a8a6d9..8082b99273bf 100644
--- a/pkg/sql/sem/tree/create.go
+++ b/pkg/sql/sem/tree/create.go
@@ -213,7 +213,6 @@ type CreateIndex struct {
// Extra columns to be stored together with the indexed ones as an optimization
// for improved reading performance.
Storing NameList
- Interleave *InterleaveDef
PartitionByIndex *PartitionByIndex
StorageParams StorageParams
Predicate Expr
@@ -261,9 +260,6 @@ func (node *CreateIndex) Format(ctx *FmtCtx) {
ctx.FormatNode(&node.Storing)
ctx.WriteByte(')')
}
- if node.Interleave != nil {
- ctx.FormatNode(node.Interleave)
- }
if node.PartitionByIndex != nil {
ctx.FormatNode(node.PartitionByIndex)
}
@@ -937,7 +933,6 @@ type IndexTableDef struct {
Columns IndexElemList
Sharded *ShardedIndexDef
Storing NameList
- Interleave *InterleaveDef
Inverted bool
PartitionByIndex *PartitionByIndex
StorageParams StorageParams
@@ -965,9 +960,6 @@ func (node *IndexTableDef) Format(ctx *FmtCtx) {
ctx.FormatNode(&node.Storing)
ctx.WriteByte(')')
}
- if node.Interleave != nil {
- ctx.FormatNode(node.Interleave)
- }
if node.PartitionByIndex != nil {
ctx.FormatNode(node.PartitionByIndex)
}
@@ -1037,9 +1029,6 @@ func (node *UniqueConstraintTableDef) Format(ctx *FmtCtx) {
ctx.FormatNode(&node.Storing)
ctx.WriteByte(')')
}
- if node.Interleave != nil {
- ctx.FormatNode(node.Interleave)
- }
if node.PartitionByIndex != nil {
ctx.FormatNode(node.PartitionByIndex)
}
@@ -1214,32 +1203,6 @@ func (node *ShardedIndexDef) Format(ctx *FmtCtx) {
ctx.FormatNode(node.ShardBuckets)
}
-// InterleaveDef represents an interleave definition within a CREATE TABLE
-// or CREATE INDEX statement.
-type InterleaveDef struct {
- Parent TableName
- Fields NameList
- DropBehavior DropBehavior
-}
-
-// Format implements the NodeFormatter interface.
-func (node *InterleaveDef) Format(ctx *FmtCtx) {
- ctx.WriteString(" INTERLEAVE IN PARENT ")
- ctx.FormatNode(&node.Parent)
- ctx.WriteString(" (")
- for i := range node.Fields {
- if i > 0 {
- ctx.WriteString(", ")
- }
- ctx.FormatNode(&node.Fields[i])
- }
- ctx.WriteString(")")
- if node.DropBehavior != DropDefault {
- ctx.WriteString(" ")
- ctx.WriteString(node.DropBehavior.String())
- }
-}
-
// PartitionByType is an enum of each type of partitioning (LIST/RANGE).
type PartitionByType string
@@ -1429,7 +1392,6 @@ const (
type CreateTable struct {
IfNotExists bool
Table TableName
- Interleave *InterleaveDef
PartitionByTable *PartitionByTable
Persistence Persistence
StorageParams StorageParams
@@ -1495,9 +1457,6 @@ func (node *CreateTable) FormatBody(ctx *FmtCtx) {
ctx.WriteString(" (")
ctx.FormatNode(&node.Defs)
ctx.WriteByte(')')
- if node.Interleave != nil {
- ctx.FormatNode(node.Interleave)
- }
if node.PartitionByTable != nil {
ctx.FormatNode(node.PartitionByTable)
}
diff --git a/pkg/sql/sem/tree/pretty.go b/pkg/sql/sem/tree/pretty.go
index 0b95a6fd27b8..75bf11a7a900 100644
--- a/pkg/sql/sem/tree/pretty.go
+++ b/pkg/sql/sem/tree/pretty.go
@@ -1239,9 +1239,6 @@ func (node *CreateTable) doc(p *PrettyCfg) pretty.Doc {
if node.As() {
clauses = append(clauses, p.Doc(node.AsSource))
}
- if node.Interleave != nil {
- clauses = append(clauses, p.Doc(node.Interleave))
- }
if node.PartitionByTable != nil {
clauses = append(clauses, p.Doc(node.PartitionByTable))
}
@@ -1559,22 +1556,6 @@ func (node *ShardedIndexDef) doc(p *PrettyCfg) pretty.Doc {
return pretty.Fold(pretty.ConcatSpace, parts...)
}
-func (node *InterleaveDef) doc(p *PrettyCfg) pretty.Doc {
- // Final layout:
- //
- // INTERLEAVE IN PARENT tbl (...) [RESTRICT|CASCADE]
- //
- parts := []pretty.Doc{
- pretty.Keyword("INTERLEAVE IN PARENT"),
- p.Doc(&node.Parent),
- p.bracket("(", p.Doc(&node.Fields), ")"),
- }
- if node.DropBehavior != DropDefault {
- parts = append(parts, pretty.Keyword(node.DropBehavior.String()))
- }
- return pretty.Fold(pretty.ConcatSpace, parts...)
-}
-
func (node *CreateIndex) doc(p *PrettyCfg) pretty.Doc {
// Final layout:
// CREATE [UNIQUE] [INVERTED] INDEX [name]
@@ -1620,9 +1601,6 @@ func (node *CreateIndex) doc(p *PrettyCfg) pretty.Doc {
")", "",
))
}
- if node.Interleave != nil {
- clauses = append(clauses, p.Doc(node.Interleave))
- }
if node.PartitionByIndex != nil {
clauses = append(clauses, p.Doc(node.PartitionByIndex))
}
@@ -1693,9 +1671,6 @@ func (node *IndexTableDef) doc(p *PrettyCfg) pretty.Doc {
p.Doc(&node.Storing),
")", ""))
}
- if node.Interleave != nil {
- clauses = append(clauses, p.Doc(node.Interleave))
- }
if node.PartitionByIndex != nil {
clauses = append(clauses, p.Doc(node.PartitionByIndex))
}
@@ -1756,9 +1731,7 @@ func (node *UniqueConstraintTableDef) doc(p *PrettyCfg) pretty.Doc {
p.Doc(&node.Storing),
")", ""))
}
- if node.Interleave != nil {
- clauses = append(clauses, p.Doc(node.Interleave))
- }
+
if node.PartitionByIndex != nil {
clauses = append(clauses, p.Doc(node.PartitionByIndex))
}
diff --git a/pkg/sql/sem/tree/testdata/pretty/20.align-deindent.golden.short b/pkg/sql/sem/tree/testdata/pretty/20.align-deindent.golden.short
index c8c04fab861b..ca469c5031b9 100644
--- a/pkg/sql/sem/tree/testdata/pretty/20.align-deindent.golden.short
+++ b/pkg/sql/sem/tree/testdata/pretty/20.align-deindent.golden.short
@@ -5,8 +5,7 @@
CREATE TABLE t (
a INT8, b INT8, c INT8,
PRIMARY KEY (a, b)
-) INTERLEAVE IN PARENT p2 (i)
- PARTITION BY LIST (a) (
+) PARTITION BY LIST (a) (
PARTITION p1
VALUES IN (
1
diff --git a/pkg/sql/sem/tree/testdata/pretty/20.align-only.golden.short b/pkg/sql/sem/tree/testdata/pretty/20.align-only.golden.short
index c8c04fab861b..ca469c5031b9 100644
--- a/pkg/sql/sem/tree/testdata/pretty/20.align-only.golden.short
+++ b/pkg/sql/sem/tree/testdata/pretty/20.align-only.golden.short
@@ -5,8 +5,7 @@
CREATE TABLE t (
a INT8, b INT8, c INT8,
PRIMARY KEY (a, b)
-) INTERLEAVE IN PARENT p2 (i)
- PARTITION BY LIST (a) (
+) PARTITION BY LIST (a) (
PARTITION p1
VALUES IN (
1
diff --git a/pkg/sql/sem/tree/testdata/pretty/20.ref.golden.short b/pkg/sql/sem/tree/testdata/pretty/20.ref.golden.short
index feb7008e0a42..15a169ca3cd3 100644
--- a/pkg/sql/sem/tree/testdata/pretty/20.ref.golden.short
+++ b/pkg/sql/sem/tree/testdata/pretty/20.ref.golden.short
@@ -6,7 +6,6 @@ CREATE TABLE t (
a INT8, b INT8, c INT8,
PRIMARY KEY (a, b)
)
- INTERLEAVE IN PARENT p2 (i)
PARTITION BY LIST (a)
(
PARTITION p1 VALUES IN (1),
diff --git a/pkg/sql/sem/tree/testdata/pretty/20.sql b/pkg/sql/sem/tree/testdata/pretty/20.sql
index 581e4f51ce31..dc6740fd3eb3 100644
--- a/pkg/sql/sem/tree/testdata/pretty/20.sql
+++ b/pkg/sql/sem/tree/testdata/pretty/20.sql
@@ -1,4 +1,4 @@
-CREATE TABLE t (a INT, b INT, c INT, PRIMARY KEY (a, b)) INTERLEAVE IN PARENT p2 (i) PARTITION BY LIST (a) (
+CREATE TABLE t (a INT, b INT, c INT, PRIMARY KEY (a, b)) PARTITION BY LIST (a) (
PARTITION p1 VALUES IN (1),
PARTITION p2 VALUES IN (2)
)
diff --git a/pkg/sql/sem/tree/testdata/pretty/create_interleaved_drop.align-deindent.golden b/pkg/sql/sem/tree/testdata/pretty/create_interleaved_drop.align-deindent.golden
deleted file mode 100644
index b690994cdea9..000000000000
--- a/pkg/sql/sem/tree/testdata/pretty/create_interleaved_drop.align-deindent.golden
+++ /dev/null
@@ -1,50 +0,0 @@
-// Code generated by TestPretty. DO NOT EDIT.
-// GENERATED FILE DO NOT EDIT
-1:
--
-CREATE TABLE t (
- a
- INT8
-)
- INTERLEAVE IN PARENT p2 (
- i,
- test
- ) RESTRICT
-
-10:
-----------
-CREATE TABLE t (
- a INT8
-)
- INTERLEAVE IN PARENT p2 (
- i,
- test
- ) RESTRICT
-
-16:
-----------------
-CREATE TABLE t (
- a INT8
-) INTERLEAVE IN PARENT p2 (
- i,
- test
- ) RESTRICT
-
-44:
---------------------------------------------
-CREATE TABLE t (
- a INT8
-) INTERLEAVE IN PARENT p2 (i, test) RESTRICT
-
-49:
--------------------------------------------------
-CREATE TABLE t (a INT8) INTERLEAVE IN PARENT p2 (
- i,
- test
- ) RESTRICT
-
-66:
-------------------------------------------------------------------
-CREATE TABLE t (a INT8) INTERLEAVE IN PARENT p2 (i, test) RESTRICT
-
-
diff --git a/pkg/sql/sem/tree/testdata/pretty/create_interleaved_drop.align-deindent.golden.short b/pkg/sql/sem/tree/testdata/pretty/create_interleaved_drop.align-deindent.golden.short
deleted file mode 100644
index dd789f37978e..000000000000
--- a/pkg/sql/sem/tree/testdata/pretty/create_interleaved_drop.align-deindent.golden.short
+++ /dev/null
@@ -1,12 +0,0 @@
-// Code generated by TestPretty. DO NOT EDIT.
-// GENERATED FILE DO NOT EDIT
-1:
--
-CREATE TABLE t (
- a INT8
-) INTERLEAVE IN PARENT p2 (
- i,
- test
- ) RESTRICT
-
-
diff --git a/pkg/sql/sem/tree/testdata/pretty/create_interleaved_drop.align-only.golden b/pkg/sql/sem/tree/testdata/pretty/create_interleaved_drop.align-only.golden
deleted file mode 100644
index b690994cdea9..000000000000
--- a/pkg/sql/sem/tree/testdata/pretty/create_interleaved_drop.align-only.golden
+++ /dev/null
@@ -1,50 +0,0 @@
-// Code generated by TestPretty. DO NOT EDIT.
-// GENERATED FILE DO NOT EDIT
-1:
--
-CREATE TABLE t (
- a
- INT8
-)
- INTERLEAVE IN PARENT p2 (
- i,
- test
- ) RESTRICT
-
-10:
-----------
-CREATE TABLE t (
- a INT8
-)
- INTERLEAVE IN PARENT p2 (
- i,
- test
- ) RESTRICT
-
-16:
-----------------
-CREATE TABLE t (
- a INT8
-) INTERLEAVE IN PARENT p2 (
- i,
- test
- ) RESTRICT
-
-44:
---------------------------------------------
-CREATE TABLE t (
- a INT8
-) INTERLEAVE IN PARENT p2 (i, test) RESTRICT
-
-49:
--------------------------------------------------
-CREATE TABLE t (a INT8) INTERLEAVE IN PARENT p2 (
- i,
- test
- ) RESTRICT
-
-66:
-------------------------------------------------------------------
-CREATE TABLE t (a INT8) INTERLEAVE IN PARENT p2 (i, test) RESTRICT
-
-
diff --git a/pkg/sql/sem/tree/testdata/pretty/create_interleaved_drop.align-only.golden.short b/pkg/sql/sem/tree/testdata/pretty/create_interleaved_drop.align-only.golden.short
deleted file mode 100644
index dd789f37978e..000000000000
--- a/pkg/sql/sem/tree/testdata/pretty/create_interleaved_drop.align-only.golden.short
+++ /dev/null
@@ -1,12 +0,0 @@
-// Code generated by TestPretty. DO NOT EDIT.
-// GENERATED FILE DO NOT EDIT
-1:
--
-CREATE TABLE t (
- a INT8
-) INTERLEAVE IN PARENT p2 (
- i,
- test
- ) RESTRICT
-
-
diff --git a/pkg/sql/sem/tree/testdata/pretty/create_interleaved_drop.ref.golden b/pkg/sql/sem/tree/testdata/pretty/create_interleaved_drop.ref.golden
deleted file mode 100644
index 599ae2cfa805..000000000000
--- a/pkg/sql/sem/tree/testdata/pretty/create_interleaved_drop.ref.golden
+++ /dev/null
@@ -1,41 +0,0 @@
-// Code generated by TestPretty. DO NOT EDIT.
-// GENERATED FILE DO NOT EDIT
-1:
--
-CREATE TABLE t (
- a
- INT8
-)
- INTERLEAVE IN PARENT p2 (
- i,
- test
- ) RESTRICT
-
-10:
-----------
-CREATE TABLE t (
- a INT8
-)
- INTERLEAVE IN PARENT p2 (
- i,
- test
- ) RESTRICT
-
-23:
------------------------
-CREATE TABLE t (a INT8)
- INTERLEAVE IN PARENT p2 (
- i,
- test
- ) RESTRICT
-
-46:
-----------------------------------------------
-CREATE TABLE t (a INT8)
- INTERLEAVE IN PARENT p2 (i, test) RESTRICT
-
-66:
-------------------------------------------------------------------
-CREATE TABLE t (a INT8) INTERLEAVE IN PARENT p2 (i, test) RESTRICT
-
-
diff --git a/pkg/sql/sem/tree/testdata/pretty/create_interleaved_drop.ref.golden.short b/pkg/sql/sem/tree/testdata/pretty/create_interleaved_drop.ref.golden.short
deleted file mode 100644
index c59ef4ae2328..000000000000
--- a/pkg/sql/sem/tree/testdata/pretty/create_interleaved_drop.ref.golden.short
+++ /dev/null
@@ -1,11 +0,0 @@
-// Code generated by TestPretty. DO NOT EDIT.
-// GENERATED FILE DO NOT EDIT
-1:
--
-CREATE TABLE t (a INT8)
- INTERLEAVE IN PARENT p2 (
- i,
- test
- ) RESTRICT
-
-
diff --git a/pkg/sql/sem/tree/testdata/pretty/create_interleaved_drop.sql b/pkg/sql/sem/tree/testdata/pretty/create_interleaved_drop.sql
deleted file mode 100644
index 25cd20bf1d4d..000000000000
--- a/pkg/sql/sem/tree/testdata/pretty/create_interleaved_drop.sql
+++ /dev/null
@@ -1 +0,0 @@
-create table t (a int) interleave in parent p2 (i, "test") restrict
diff --git a/pkg/sql/sessiondatapb/local_only_session_data.pb.go b/pkg/sql/sessiondatapb/local_only_session_data.pb.go
index 7fc6b2e79ef1..7db16611bd8a 100644
--- a/pkg/sql/sessiondatapb/local_only_session_data.pb.go
+++ b/pkg/sql/sessiondatapb/local_only_session_data.pb.go
@@ -145,11 +145,6 @@ type LocalOnlySessionData struct {
// experimentalComputedColumnRewrites cluster setting for a description of the
// format.
ExperimentalComputedColumnRewrites string `protobuf:"bytes,35,opt,name=experimental_computed_column_rewrites,json=experimentalComputedColumnRewrites,proto3" json:"experimental_computed_column_rewrites,omitempty"`
- // CopyPartitioningWhenDeinterleavingTable indicates that when running an
- // ALTER PRIMARY KEY that retains the same columns but removes any
- // interleaving that zone configurations and partitioning from the root
- // of that interleave should be applied to the new primary index.
- CopyPartitioningWhenDeinterleavingTable bool `protobuf:"varint,36,opt,name=copy_partitioning_when_deinterleaving_table,json=copyPartitioningWhenDeinterleavingTable,proto3" json:"copy_partitioning_when_deinterleaving_table,omitempty"`
// EnableStreamReplication indicates whether to allow setting up a replication
// stream.
EnableStreamReplication bool `protobuf:"varint,37,opt,name=enable_stream_replication,json=enableStreamReplication,proto3" json:"enable_stream_replication,omitempty"`
@@ -310,131 +305,129 @@ func init() {
}
var fileDescriptor_21ead158cf36da28 = []byte{
- // 1981 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0x5f, 0x53, 0x1c, 0xc7,
- 0x11, 0xd7, 0x59, 0xb6, 0x23, 0x06, 0x81, 0x60, 0x8d, 0xcc, 0x02, 0x82, 0x03, 0xfd, 0xb1, 0x90,
- 0x65, 0x83, 0x2d, 0x3b, 0x8e, 0xec, 0x54, 0x12, 0x9b, 0x03, 0xac, 0x3f, 0xd8, 0xa0, 0x3d, 0x64,
- 0x55, 0x9c, 0x54, 0x4d, 0x0d, 0xbb, 0x7d, 0x77, 0x63, 0x76, 0x67, 0xf6, 0x66, 0x66, 0x81, 0xe3,
- 0x21, 0x9f, 0x21, 0x55, 0x79, 0xce, 0xf7, 0xf1, 0xa3, 0x1f, 0xfd, 0x44, 0x25, 0xe8, 0x43, 0xa4,
- 0x4a, 0x4f, 0xa9, 0xee, 0xd9, 0xbd, 0x3b, 0x04, 0x76, 0xaa, 0xf2, 0x76, 0xd7, 0xbf, 0x5f, 0xff,
- 0xa6, 0xa7, 0xa7, 0xbb, 0x67, 0x96, 0xad, 0xda, 0x6e, 0xba, 0x6a, 0xc1, 0x5a, 0xa9, 0x55, 0x22,
- 0x9c, 0xc8, 0xf7, 0x56, 0x53, 0x1d, 0x8b, 0x94, 0x6b, 0x95, 0xf6, 0x78, 0x09, 0x70, 0x44, 0x56,
- 0x72, 0xa3, 0x9d, 0x0e, 0xe6, 0x62, 0x1d, 0xef, 0x1b, 0x2d, 0xe2, 0xce, 0x8a, 0xed, 0xa6, 0x2b,
- 0x67, 0x5c, 0x67, 0xa7, 0xda, 0xba, 0xad, 0x89, 0xb7, 0x8a, 0xbf, 0xbc, 0xcb, 0xcd, 0xff, 0xcc,
- 0xb3, 0xa9, 0x2d, 0x14, 0xdd, 0x56, 0x69, 0xaf, 0xe9, 0x1d, 0xd6, 0x85, 0x13, 0xc1, 0x07, 0x2c,
- 0xb0, 0xe2, 0x00, 0xb8, 0x13, 0x7b, 0x29, 0x58, 0x9e, 0x1b, 0x68, 0xc9, 0xa3, 0xb0, 0xb6, 0x58,
- 0x5b, 0x1e, 0x89, 0x26, 0x10, 0xd9, 0x25, 0x60, 0x87, 0xec, 0xc1, 0x5f, 0xd8, 0x9c, 0xce, 0x9d,
- 0xcc, 0xe4, 0x31, 0x18, 0xde, 0xda, 0xe7, 0xb1, 0xb0, 0xb1, 0x48, 0xc0, 0xf2, 0x54, 0x66, 0xd2,
- 0x85, 0x6f, 0x2c, 0xd6, 0x96, 0x2f, 0xaf, 0xdd, 0x38, 0x3d, 0xa9, 0x87, 0xdb, 0x15, 0x6d, 0xf3,
- 0x69, 0xa3, 0x24, 0x6d, 0x21, 0x27, 0x0a, 0xfb, 0x02, 0x9b, 0xfb, 0x67, 0x90, 0xe0, 0x53, 0x76,
- 0xd5, 0xba, 0xcc, 0x71, 0x27, 0x33, 0xd0, 0x85, 0x0b, 0x2f, 0x93, 0xda, 0xe4, 0xab, 0x93, 0xfa,
- 0x18, 0x9a, 0x56, 0xd6, 0x0b, 0x23, 0x9c, 0xd4, 0x2a, 0x1a, 0x45, 0xda, 0xae, 0x67, 0x05, 0x8f,
- 0xd8, 0xb4, 0x4c, 0x52, 0xe0, 0x52, 0xf5, 0x53, 0x55, 0x09, 0xbc, 0xf9, 0x4b, 0x02, 0x53, 0xe8,
- 0xf1, 0x58, 0x95, 0x79, 0xa8, 0x94, 0x38, 0xbb, 0x55, 0x29, 0x39, 0x23, 0x94, 0x15, 0x31, 0x92,
- 0xcf, 0xa9, 0xbe, 0xf5, 0x4b, 0xaa, 0x75, 0xaf, 0xba, 0x3b, 0xf0, 0x7d, 0x6d, 0x81, 0xcf, 0xd8,
- 0xb4, 0xd2, 0x4e, 0xc6, 0xc0, 0x13, 0x69, 0xf3, 0x54, 0xe0, 0xe1, 0x1e, 0x80, 0x91, 0xae, 0x17,
- 0xbe, 0xbd, 0x58, 0x5b, 0x1e, 0x8b, 0xae, 0x7b, 0x78, 0xdd, 0xa3, 0xcd, 0x12, 0x0c, 0x56, 0xd8,
- 0x3b, 0x06, 0xb4, 0x49, 0xc0, 0xf0, 0x1f, 0xb4, 0x54, 0x55, 0xb6, 0x7f, 0x83, 0x81, 0x44, 0x93,
- 0x25, 0xf4, 0x04, 0x11, 0x9f, 0xc8, 0x8f, 0xd8, 0x54, 0x02, 0x2d, 0x51, 0xa4, 0x8e, 0xbb, 0x23,
- 0xc5, 0x73, 0x23, 0x35, 0x2d, 0x72, 0x85, 0x1c, 0x82, 0x12, 0xdb, 0x3d, 0x52, 0x3b, 0x25, 0x12,
- 0x7c, 0xcc, 0xae, 0x0f, 0x7b, 0x18, 0x10, 0x09, 0x55, 0x5f, 0x38, 0xb2, 0x58, 0x5b, 0xbe, 0x32,
- 0xec, 0x12, 0x81, 0x48, 0xb0, 0x86, 0x82, 0x35, 0xb6, 0x30, 0xec, 0x52, 0x58, 0xe0, 0x2d, 0x9d,
- 0xa6, 0xfa, 0x10, 0x0c, 0xf9, 0xdb, 0x90, 0x91, 0xef, 0xec, 0xc0, 0xf7, 0xb9, 0x85, 0xcd, 0x92,
- 0x82, 0x32, 0x36, 0xd8, 0x66, 0xb7, 0x73, 0x61, 0x9c, 0x14, 0x69, 0xda, 0xc3, 0x9c, 0x38, 0x23,
- 0xf7, 0x0a, 0x07, 0x09, 0xcf, 0x53, 0xa1, 0x2c, 0x5a, 0xb0, 0xf8, 0x92, 0x70, 0x94, 0x94, 0x96,
- 0xfa, 0xdc, 0xf5, 0x01, 0x75, 0x07, 0x99, 0xeb, 0x25, 0x31, 0x78, 0xc8, 0x06, 0xe5, 0x45, 0x21,
- 0x75, 0xa4, 0x75, 0xba, 0x6d, 0x44, 0x66, 0xc3, 0xab, 0x24, 0xf2, 0x6e, 0x1f, 0x7f, 0x6e, 0xe1,
- 0x51, 0x1f, 0x0d, 0xbe, 0x64, 0xf3, 0x67, 0x3d, 0xb3, 0x22, 0x75, 0x92, 0xc7, 0x3a, 0xe5, 0xd6,
- 0x09, 0x67, 0xc3, 0x31, 0x72, 0x9f, 0x19, 0x76, 0xff, 0x06, 0x29, 0x0d, 0x9d, 0x36, 0x91, 0x10,
- 0x7c, 0xc1, 0x66, 0xa8, 0x6d, 0xa5, 0xeb, 0xf1, 0x8a, 0x95, 0x70, 0x0b, 0xc2, 0xc4, 0x9d, 0x70,
- 0x9c, 0xbc, 0xa7, 0x2b, 0x42, 0xd5, 0x1d, 0x49, 0x93, 0xe0, 0x60, 0x89, 0x5d, 0xb5, 0xa2, 0x05,
- 0xbc, 0xc8, 0x13, 0xe1, 0xc0, 0x86, 0xd7, 0x88, 0x3e, 0x8a, 0xb6, 0xe7, 0xde, 0x14, 0xfc, 0x99,
- 0xcd, 0x61, 0x73, 0x82, 0xe1, 0xa9, 0xd6, 0xfb, 0x45, 0x5e, 0x96, 0x42, 0x4b, 0x63, 0x23, 0xda,
- 0x70, 0x02, 0x3d, 0xd6, 0xe6, 0x4e, 0x4f, 0xea, 0xd3, 0x3b, 0x44, 0xdb, 0x22, 0x16, 0x55, 0xc5,
- 0xa6, 0x36, 0x9b, 0x4f, 0x6d, 0x34, 0x9d, 0x5f, 0x04, 0xec, 0x5b, 0xac, 0xaf, 0x63, 0xd9, 0x3e,
- 0x16, 0x6d, 0xd2, 0xe4, 0xa0, 0x7c, 0xd6, 0x27, 0x29, 0x88, 0x49, 0x0f, 0x21, 0x7f, 0xc3, 0x03,
- 0xc1, 0x57, 0x6c, 0xde, 0x40, 0xb7, 0x90, 0x06, 0x38, 0x1c, 0xe5, 0xa9, 0x8c, 0xa5, 0xc3, 0x22,
- 0xcb, 0x84, 0xe9, 0xf1, 0x7d, 0xe8, 0xd9, 0x30, 0xf0, 0x27, 0x5f, 0x92, 0x36, 0x4a, 0xce, 0x8e,
- 0xa7, 0x3c, 0x85, 0x9e, 0xc5, 0x56, 0x68, 0x69, 0x13, 0x03, 0xc7, 0x11, 0x93, 0x6b, 0xa9, 0x1c,
- 0x37, 0x60, 0x9d, 0x30, 0x2e, 0x7c, 0x87, 0x9c, 0xaf, 0x13, 0xdc, 0xac, 0xd0, 0xc8, 0x83, 0xc1,
- 0x43, 0x36, 0x23, 0xb0, 0x82, 0x70, 0x50, 0xe5, 0xc2, 0x00, 0x17, 0x16, 0x93, 0x4d, 0x05, 0x13,
- 0x4e, 0x79, 0x4f, 0x22, 0xec, 0x78, 0xfc, 0x2b, 0xbb, 0x9d, 0x3b, 0xac, 0x11, 0xdc, 0xa4, 0x83,
- 0x2c, 0xaf, 0x06, 0x5d, 0xb5, 0xc9, 0xeb, 0x7e, 0x93, 0x08, 0xf9, 0x49, 0x57, 0x6d, 0x72, 0x9b,
- 0xdd, 0x96, 0x59, 0xb9, 0xb9, 0x58, 0xa7, 0x45, 0xa6, 0x38, 0xd5, 0x1f, 0xf6, 0xb5, 0x54, 0xed,
- 0xbe, 0xc0, 0xbb, 0xbe, 0x36, 0x2b, 0x6e, 0x83, 0xa8, 0x3b, 0x43, 0xcc, 0x4a, 0xf0, 0x05, 0xbb,
- 0xa7, 0x0f, 0xc0, 0x18, 0x99, 0x54, 0xc5, 0x65, 0xa0, 0x8d, 0x83, 0xe5, 0x58, 0x2b, 0xe0, 0xb1,
- 0x56, 0x2d, 0x39, 0x50, 0x0d, 0x49, 0xf5, 0x76, 0xe5, 0x40, 0x95, 0x16, 0x11, 0xfd, 0x7b, 0xad,
- 0xa0, 0x41, 0xe4, 0x4a, 0xf8, 0x4f, 0xec, 0x46, 0x47, 0xd8, 0x0e, 0xb7, 0x1d, 0x61, 0x12, 0x48,
- 0xb8, 0x54, 0x09, 0x1c, 0x0d, 0x6d, 0x71, 0xc6, 0x57, 0x2e, 0x72, 0x9a, 0x9e, 0xf2, 0xd8, 0x33,
- 0x2a, 0x81, 0xcf, 0xd9, 0x0c, 0xb6, 0x1a, 0xe5, 0xb5, 0x55, 0xa4, 0xa9, 0xcf, 0x11, 0xb7, 0xb1,
- 0x50, 0x36, 0x9c, 0xf5, 0x6d, 0x53, 0x11, 0x36, 0x8b, 0x34, 0xa5, 0x44, 0x35, 0x11, 0x0d, 0x7e,
- 0xcf, 0x66, 0xfb, 0x59, 0xb2, 0x90, 0x42, 0xec, 0xa8, 0x22, 0x7d, 0x1d, 0x87, 0x73, 0xbe, 0xea,
- 0x2b, 0x46, 0x93, 0x08, 0x9b, 0xda, 0xf8, 0x9a, 0x0e, 0x96, 0xd9, 0x84, 0x54, 0x16, 0x8c, 0xe3,
- 0x2d, 0x61, 0x1d, 0xcf, 0x85, 0xeb, 0x84, 0x37, 0xc8, 0x65, 0xdc, 0xdb, 0x37, 0x85, 0x75, 0x3b,
- 0xc2, 0x75, 0x82, 0x47, 0x6c, 0x49, 0xa4, 0x0e, 0x4c, 0x75, 0x12, 0xae, 0x97, 0x03, 0x6f, 0x83,
- 0x02, 0x23, 0xd2, 0xfe, 0x3e, 0xe7, 0xc9, 0x75, 0x9e, 0x88, 0xfe, 0x18, 0x76, 0x7b, 0x39, 0x7c,
- 0xed, 0x59, 0xd5, 0x5e, 0x3f, 0x64, 0x81, 0xed, 0xa9, 0xb8, 0x63, 0xb4, 0xd2, 0x85, 0xe5, 0xb1,
- 0xce, 0x70, 0x94, 0x2e, 0xf8, 0x2a, 0x18, 0x42, 0x1a, 0x04, 0x04, 0xef, 0xb1, 0x6b, 0x5e, 0x9e,
- 0x5b, 0xe8, 0x52, 0x46, 0xc2, 0x3a, 0x71, 0xc7, 0xbc, 0xb9, 0x09, 0x5d, 0x4c, 0x44, 0xb0, 0xcb,
- 0xee, 0x96, 0xbc, 0x42, 0xc9, 0x6e, 0x01, 0xfc, 0x50, 0xba, 0x8e, 0x2e, 0x9c, 0x3f, 0x0c, 0x3c,
- 0x5d, 0xeb, 0x8c, 0x90, 0xca, 0xd9, 0x70, 0x89, 0xfc, 0x6f, 0x79, 0xfa, 0x73, 0x62, 0xbf, 0xf0,
- 0x64, 0x3a, 0x96, 0xc6, 0x80, 0x1a, 0xfc, 0x81, 0xcd, 0x59, 0x57, 0xec, 0xf1, 0x58, 0x38, 0x91,
- 0xea, 0xf6, 0xeb, 0xb5, 0x7b, 0x93, 0x94, 0x42, 0xa4, 0x34, 0x3c, 0xe3, 0x6c, 0x09, 0x3f, 0x63,
- 0x77, 0xe0, 0x28, 0x07, 0x23, 0x33, 0x50, 0x4e, 0xa4, 0xb8, 0xd9, 0x9c, 0xc6, 0x6b, 0x99, 0x45,
- 0x03, 0x87, 0x46, 0xe2, 0xb8, 0xb9, 0x45, 0xd7, 0xfd, 0xcd, 0x61, 0x72, 0xa3, 0xe4, 0xfa, 0x44,
- 0x46, 0x25, 0x33, 0xf8, 0x2b, 0xbb, 0x1f, 0xeb, 0xbc, 0x77, 0xb6, 0x15, 0x0e, 0x3b, 0xa0, 0x78,
- 0x02, 0x52, 0x39, 0x30, 0x29, 0x88, 0x03, 0xb4, 0x51, 0xa8, 0xe1, 0x6d, 0x8a, 0xf0, 0x2e, 0xba,
- 0x0c, 0xb7, 0xc4, 0x8b, 0x0e, 0xa8, 0xf5, 0x33, 0x7c, 0x0a, 0x1c, 0x47, 0x68, 0x95, 0x6d, 0x67,
- 0x40, 0x64, 0xdc, 0x00, 0x56, 0x0e, 0x5d, 0xaf, 0xe1, 0x1d, 0x5f, 0x4c, 0x65, 0xde, 0x09, 0x8f,
- 0x06, 0xb0, 0xbf, 0x24, 0x6d, 0x91, 0x3a, 0xcb, 0xf7, 0x8a, 0x16, 0xce, 0x49, 0x2b, 0x8f, 0x21,
- 0x7c, 0xaf, 0xba, 0x24, 0x09, 0x5a, 0x23, 0xa4, 0x29, 0x8f, 0x01, 0xaf, 0x8a, 0xdc, 0xe8, 0x5c,
- 0xb4, 0x85, 0xc3, 0x2b, 0x3f, 0x2f, 0x1c, 0xa7, 0x7b, 0x54, 0xaa, 0x76, 0x78, 0xd7, 0xd7, 0x7c,
- 0x1f, 0x7f, 0x8c, 0xf0, 0x76, 0x89, 0x06, 0xff, 0xa8, 0xb1, 0x33, 0xa9, 0xa2, 0x9b, 0xcb, 0x76,
- 0x53, 0x1a, 0x42, 0x94, 0x90, 0x4c, 0x27, 0x10, 0x2e, 0xd3, 0x3b, 0x61, 0xf3, 0xf4, 0xa4, 0x5e,
- 0xdf, 0x18, 0x62, 0xe3, 0xdd, 0xd5, 0x7c, 0xb6, 0xb5, 0x53, 0x72, 0xbf, 0xd1, 0x09, 0xbc, 0xfa,
- 0xdf, 0x94, 0xa8, 0x0e, 0xaf, 0x11, 0x6c, 0x37, 0x1d, 0x26, 0x04, 0x9b, 0x6c, 0x0c, 0xe3, 0xe0,
- 0x18, 0x08, 0xad, 0x7f, 0x8f, 0xd6, 0xbf, 0x79, 0x7a, 0x52, 0x1f, 0x2d, 0x05, 0xcb, 0xb5, 0xae,
- 0x95, 0x7f, 0x37, 0x8e, 0x20, 0x26, 0xed, 0x51, 0x74, 0x6c, 0x76, 0x53, 0xd2, 0x79, 0xc1, 0x66,
- 0x2c, 0x18, 0x29, 0x52, 0xae, 0xb4, 0xc9, 0x44, 0x2a, 0x8f, 0x29, 0xbf, 0x5e, 0xf3, 0x7d, 0xd2,
- 0x9c, 0x7b, 0x75, 0x52, 0x9f, 0x6e, 0x12, 0xe9, 0xdb, 0x61, 0x0e, 0x89, 0x4d, 0xdb, 0x8b, 0x81,
- 0x60, 0x9b, 0x4d, 0x2b, 0x38, 0xe4, 0x36, 0xee, 0x40, 0x26, 0x78, 0xdc, 0x11, 0xaa, 0x0d, 0xc6,
- 0xcb, 0xde, 0x27, 0xd9, 0xf0, 0xd5, 0x49, 0x7d, 0xea, 0x5b, 0x38, 0x6c, 0x12, 0xa3, 0xe1, 0x09,
- 0xa4, 0x39, 0xa5, 0x2e, 0xb0, 0x06, 0x7f, 0x63, 0xe3, 0x16, 0xba, 0x05, 0xa8, 0x18, 0x78, 0x2c,
- 0xe2, 0x0e, 0x84, 0x1f, 0x2c, 0x5e, 0x5e, 0x1e, 0x7d, 0xb0, 0xbe, 0xf2, 0x2b, 0xef, 0xe3, 0x95,
- 0x8b, 0x5e, 0xc1, 0x2b, 0xcd, 0x52, 0xa7, 0x81, 0x32, 0x1b, 0xca, 0x99, 0x9e, 0x7f, 0xe0, 0x9d,
- 0xb1, 0x47, 0x63, 0x76, 0xf8, 0x6f, 0x70, 0x9f, 0x4d, 0xe6, 0xa9, 0x88, 0x01, 0xcf, 0xa4, 0xdf,
- 0x93, 0x1f, 0x52, 0xe9, 0x4c, 0xf4, 0x81, 0xaa, 0x17, 0x73, 0x16, 0x54, 0x0f, 0xc9, 0xc2, 0x82,
- 0xe1, 0xf4, 0x2c, 0x0f, 0x57, 0xb0, 0xf1, 0xd6, 0xd6, 0x5e, 0x9d, 0xd4, 0xff, 0xd8, 0x96, 0xae,
- 0x53, 0xec, 0xad, 0xc4, 0x3a, 0x5b, 0xed, 0x87, 0x9f, 0xec, 0x0d, 0x7e, 0xaf, 0xe6, 0xfb, 0xed,
- 0x55, 0x0b, 0x71, 0x81, 0x0f, 0xb6, 0x95, 0xe6, 0xb3, 0xad, 0xe7, 0x16, 0x8c, 0x12, 0x19, 0xec,
- 0xa0, 0x52, 0x34, 0x51, 0xaa, 0xa3, 0x95, 0x2c, 0xc1, 0x2a, 0x9b, 0xa2, 0xb7, 0x9c, 0x3e, 0xb4,
- 0x1c, 0xbb, 0xd7, 0x81, 0xe2, 0xa9, 0x6e, 0x87, 0xab, 0xbe, 0x23, 0xdc, 0x91, 0x8a, 0xf4, 0xa1,
- 0x7d, 0xe1, 0x91, 0x2d, 0xdd, 0xbe, 0xd0, 0x01, 0x8c, 0x09, 0x3f, 0xba, 0xc8, 0x61, 0xc3, 0x98,
- 0xe0, 0x1e, 0x9b, 0xec, 0x3b, 0xd0, 0x93, 0x11, 0xe5, 0x3f, 0x26, 0xf6, 0x78, 0xc9, 0xc6, 0x77,
- 0x1e, 0x6a, 0x9f, 0xa3, 0xa2, 0xf0, 0x83, 0x73, 0x54, 0x54, 0x7d, 0xc0, 0xae, 0x8b, 0xc2, 0x69,
- 0x6e, 0xa0, 0xa3, 0xb3, 0xe1, 0x9b, 0xf6, 0x13, 0x4a, 0xed, 0x3b, 0x08, 0x46, 0x25, 0x56, 0x65,
- 0x77, 0x89, 0x5d, 0x95, 0x96, 0xdb, 0x22, 0x07, 0x83, 0xd9, 0x0d, 0x3f, 0xf5, 0xef, 0x27, 0x69,
- 0x9b, 0x95, 0x09, 0x77, 0x97, 0x0a, 0xd3, 0x06, 0x7f, 0xc3, 0xe1, 0x24, 0xa7, 0x68, 0xc2, 0xdf,
- 0x2e, 0xd6, 0x96, 0x6b, 0xd1, 0x24, 0x61, 0x78, 0xb9, 0xe1, 0x38, 0xc7, 0x70, 0x70, 0xf8, 0x4a,
- 0xf5, 0x03, 0xde, 0x68, 0x06, 0x9c, 0xe9, 0x61, 0xc4, 0xda, 0x0c, 0x86, 0xef, 0x67, 0x7e, 0xf8,
- 0x7a, 0x4a, 0x84, 0x8c, 0x0d, 0x22, 0x54, 0x21, 0xbd, 0xcf, 0x26, 0x15, 0xae, 0x44, 0x43, 0x05,
- 0x12, 0x9e, 0x0a, 0xeb, 0xc2, 0xdf, 0x91, 0xd3, 0x35, 0x04, 0xb6, 0xbd, 0x7d, 0x4b, 0x58, 0x87,
- 0x1f, 0x61, 0xe5, 0x5b, 0x97, 0x66, 0x08, 0x6f, 0x63, 0x7f, 0x87, 0x0f, 0x7d, 0x29, 0x95, 0x08,
- 0x36, 0xfb, 0xd7, 0x68, 0x0f, 0xf6, 0xd9, 0x78, 0x5c, 0x58, 0xa7, 0x33, 0x7a, 0x66, 0x6a, 0x65,
- 0xc3, 0xcf, 0xff, 0xdf, 0xba, 0x6f, 0x90, 0xce, 0xb6, 0x97, 0xa1, 0xba, 0x8f, 0xc6, 0xe2, 0x61,
- 0xdb, 0x6c, 0x97, 0x05, 0xe7, 0x9b, 0x23, 0x98, 0x60, 0x97, 0xf7, 0xa1, 0x47, 0x9f, 0x89, 0x63,
- 0x11, 0xfe, 0x0c, 0x36, 0xd8, 0x5b, 0x07, 0x22, 0x2d, 0x80, 0xbe, 0x01, 0x47, 0x1f, 0xac, 0xfe,
- 0x6a, 0x2c, 0xe7, 0x15, 0x23, 0xef, 0xfd, 0xc5, 0x1b, 0x0f, 0x6b, 0xb3, 0x5f, 0xb2, 0xe0, 0x7c,
- 0x5c, 0xc3, 0x4b, 0x8e, 0xf8, 0x25, 0xa7, 0x86, 0x97, 0x1c, 0x19, 0x52, 0x78, 0xf2, 0xe6, 0x95,
- 0xe9, 0x89, 0xf0, 0xc9, 0x9b, 0x57, 0x16, 0x27, 0x96, 0x6e, 0xfe, 0xb3, 0x76, 0xe1, 0x0e, 0xee,
- 0xb0, 0x71, 0x9a, 0x19, 0x09, 0x3f, 0x00, 0x83, 0xa1, 0x95, 0x9b, 0x19, 0xf3, 0xd6, 0xef, 0xbc,
- 0x31, 0xb8, 0xc5, 0xc6, 0xe2, 0xc2, 0x18, 0xec, 0xf0, 0xc1, 0x5a, 0x97, 0xa3, 0xab, 0xa5, 0xf1,
- 0x3b, 0xb4, 0x05, 0x37, 0xd8, 0x88, 0x54, 0xb1, 0xa1, 0x7e, 0xf7, 0x5f, 0xad, 0xd1, 0xc0, 0x10,
- 0xcc, 0x33, 0xa6, 0x8a, 0xcc, 0xbb, 0x5b, 0xff, 0x4d, 0x1a, 0x8d, 0xa8, 0x22, 0x23, 0x5f, 0xbb,
- 0xb6, 0xfa, 0xe3, 0xbf, 0x17, 0x2e, 0xfd, 0x78, 0xba, 0x50, 0xfb, 0xe9, 0x74, 0xa1, 0xf6, 0xf3,
- 0xe9, 0x42, 0xed, 0x5f, 0xa7, 0x0b, 0xb5, 0xbf, 0xbf, 0x5c, 0xb8, 0xf4, 0xd3, 0xcb, 0x85, 0x4b,
- 0x3f, 0xbf, 0x5c, 0xb8, 0xf4, 0xfd, 0xd8, 0x99, 0xe4, 0xed, 0xbd, 0x4d, 0xa3, 0xe3, 0x93, 0xff,
- 0x06, 0x00, 0x00, 0xff, 0xff, 0xdd, 0xa0, 0xca, 0x9c, 0x37, 0x10, 0x00, 0x00,
+ // 1947 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0x5d, 0x53, 0x1c, 0xc7,
+ 0xd5, 0xd6, 0x5a, 0xb2, 0x5f, 0xd1, 0x08, 0x04, 0x63, 0x64, 0x06, 0x10, 0x2c, 0xe8, 0xc3, 0x46,
+ 0xfe, 0x60, 0x6d, 0xd9, 0xaf, 0x23, 0x3b, 0x95, 0xc4, 0x66, 0x01, 0xeb, 0x03, 0x1b, 0x34, 0x8b,
+ 0xac, 0x8a, 0x73, 0xd1, 0xd5, 0xcc, 0x9c, 0xdd, 0x6d, 0x33, 0xd3, 0x3d, 0xdb, 0xdd, 0x23, 0x58,
+ 0x2e, 0xf2, 0x1b, 0x52, 0x95, 0xeb, 0x54, 0xfe, 0x8e, 0x2f, 0x7d, 0xe9, 0x2b, 0x2a, 0x41, 0xff,
+ 0x42, 0x57, 0xa9, 0x73, 0x7a, 0x66, 0x77, 0x11, 0xd8, 0xa9, 0xca, 0xdd, 0xee, 0x79, 0x9e, 0xf3,
+ 0x74, 0xf7, 0xe9, 0xf3, 0xd1, 0xc3, 0x1a, 0xb6, 0x97, 0x36, 0x2c, 0x58, 0x2b, 0xb5, 0x4a, 0x84,
+ 0x13, 0xf9, 0x7e, 0x23, 0xd5, 0xb1, 0x48, 0xb9, 0x56, 0x69, 0x9f, 0x97, 0x00, 0x47, 0x64, 0x2d,
+ 0x37, 0xda, 0xe9, 0x60, 0x21, 0xd6, 0xf1, 0x81, 0xd1, 0x22, 0xee, 0xae, 0xd9, 0x5e, 0xba, 0x76,
+ 0xc6, 0x75, 0x7e, 0xa6, 0xa3, 0x3b, 0x9a, 0x78, 0x0d, 0xfc, 0xe5, 0x5d, 0x6e, 0xfd, 0x73, 0x91,
+ 0xcd, 0x6c, 0xa3, 0xe8, 0x8e, 0x4a, 0xfb, 0x2d, 0xef, 0xb0, 0x21, 0x9c, 0x08, 0x3e, 0x64, 0x81,
+ 0x15, 0x2f, 0x80, 0x3b, 0xb1, 0x9f, 0x82, 0xe5, 0xb9, 0x81, 0xb6, 0x3c, 0x0a, 0x6b, 0xcb, 0xb5,
+ 0xd5, 0xb1, 0x68, 0x0a, 0x91, 0x3d, 0x02, 0x76, 0xc9, 0x1e, 0xfc, 0x85, 0x2d, 0xe8, 0xdc, 0xc9,
+ 0x4c, 0x1e, 0x83, 0xe1, 0xed, 0x03, 0x1e, 0x0b, 0x1b, 0x8b, 0x04, 0x2c, 0x4f, 0x65, 0x26, 0x5d,
+ 0xf8, 0xc6, 0x72, 0x6d, 0xf5, 0xf2, 0xfa, 0xcd, 0xd3, 0x93, 0x7a, 0xb8, 0x53, 0xd1, 0xb6, 0x9e,
+ 0x34, 0x4b, 0xd2, 0x36, 0x72, 0xa2, 0x70, 0x20, 0xb0, 0x75, 0x70, 0x06, 0x09, 0x3e, 0x63, 0xd7,
+ 0xac, 0xcb, 0x1c, 0x77, 0x32, 0x03, 0x5d, 0xb8, 0xf0, 0x32, 0xa9, 0x4d, 0xbf, 0x3a, 0xa9, 0x4f,
+ 0xa0, 0x69, 0x6d, 0xa3, 0x30, 0xc2, 0x49, 0xad, 0xa2, 0x71, 0xa4, 0xed, 0x79, 0x56, 0xf0, 0x90,
+ 0xcd, 0xca, 0x24, 0x05, 0x2e, 0xd5, 0x20, 0x54, 0x95, 0xc0, 0x95, 0x5f, 0x13, 0x98, 0x41, 0x8f,
+ 0x47, 0xaa, 0x8c, 0x43, 0xa5, 0xc4, 0xd9, 0xed, 0x4a, 0xc9, 0x19, 0xa1, 0xac, 0x88, 0x91, 0x7c,
+ 0x4e, 0xf5, 0xcd, 0x5f, 0x53, 0xad, 0x7b, 0xd5, 0xbd, 0xa1, 0xef, 0x6b, 0x0b, 0x7c, 0xce, 0x66,
+ 0x95, 0x76, 0x32, 0x06, 0x9e, 0x48, 0x9b, 0xa7, 0x02, 0x2f, 0xf7, 0x05, 0x18, 0xe9, 0xfa, 0xe1,
+ 0x5b, 0xcb, 0xb5, 0xd5, 0x89, 0xe8, 0x86, 0x87, 0x37, 0x3c, 0xda, 0x2a, 0xc1, 0x60, 0x8d, 0xbd,
+ 0x6d, 0x40, 0x9b, 0x04, 0x0c, 0xff, 0x51, 0x4b, 0x55, 0x45, 0xfb, 0xff, 0x70, 0x23, 0xd1, 0x74,
+ 0x09, 0x3d, 0x46, 0xc4, 0x07, 0xf2, 0x63, 0x36, 0x93, 0x40, 0x5b, 0x14, 0xa9, 0xe3, 0xee, 0x48,
+ 0xf1, 0xdc, 0x48, 0x4d, 0x8b, 0x5c, 0x25, 0x87, 0xa0, 0xc4, 0xf6, 0x8e, 0xd4, 0x6e, 0x89, 0x04,
+ 0x9f, 0xb0, 0x1b, 0xa3, 0x1e, 0x06, 0x44, 0x42, 0xd9, 0x17, 0x8e, 0x2d, 0xd7, 0x56, 0xaf, 0x8e,
+ 0xba, 0x44, 0x20, 0x12, 0xcc, 0xa1, 0x60, 0x9d, 0x2d, 0x8d, 0xba, 0x14, 0x16, 0x78, 0x5b, 0xa7,
+ 0xa9, 0x3e, 0x04, 0x43, 0xfe, 0x36, 0x64, 0xe4, 0x3b, 0x3f, 0xf4, 0x7d, 0x66, 0x61, 0xab, 0xa4,
+ 0xa0, 0x8c, 0x0d, 0x76, 0xd8, 0x9d, 0x5c, 0x18, 0x27, 0x45, 0x9a, 0xf6, 0x31, 0x26, 0xce, 0xc8,
+ 0xfd, 0xc2, 0x41, 0xc2, 0xf3, 0x54, 0x28, 0x8b, 0x16, 0x4c, 0xbe, 0x24, 0x1c, 0x27, 0xa5, 0x95,
+ 0x01, 0x77, 0x63, 0x48, 0xdd, 0x45, 0xe6, 0x46, 0x49, 0x0c, 0x1e, 0xb0, 0x61, 0x7a, 0xd1, 0x96,
+ 0xba, 0xd2, 0x3a, 0xdd, 0x31, 0x22, 0xb3, 0xe1, 0x35, 0x12, 0x79, 0x67, 0x80, 0x3f, 0xb3, 0xf0,
+ 0x70, 0x80, 0x06, 0x5f, 0xb1, 0xc5, 0xb3, 0x9e, 0x59, 0x91, 0x3a, 0xc9, 0x63, 0x9d, 0x72, 0xeb,
+ 0x84, 0xb3, 0xe1, 0x04, 0xb9, 0xcf, 0x8d, 0xba, 0x7f, 0x8b, 0x94, 0xa6, 0x4e, 0x5b, 0x48, 0x08,
+ 0xbe, 0x64, 0x73, 0x54, 0xb6, 0xd2, 0xf5, 0x79, 0xc5, 0x4a, 0xb8, 0x05, 0x61, 0xe2, 0x6e, 0x38,
+ 0x49, 0xde, 0xb3, 0x15, 0xa1, 0xaa, 0x8e, 0xa4, 0x45, 0x70, 0xb0, 0xc2, 0xae, 0x59, 0xd1, 0x06,
+ 0x5e, 0xe4, 0x89, 0x70, 0x60, 0xc3, 0xeb, 0x44, 0x1f, 0x47, 0xdb, 0x33, 0x6f, 0x0a, 0xfe, 0xcc,
+ 0x16, 0xb0, 0x38, 0xc1, 0xf0, 0x54, 0xeb, 0x83, 0x22, 0x2f, 0x53, 0xa1, 0xad, 0xb1, 0x10, 0x6d,
+ 0x38, 0x85, 0x1e, 0xeb, 0x0b, 0xa7, 0x27, 0xf5, 0xd9, 0x5d, 0xa2, 0x6d, 0x13, 0x8b, 0xb2, 0x62,
+ 0x4b, 0x9b, 0xad, 0x27, 0x36, 0x9a, 0xcd, 0x2f, 0x02, 0x0e, 0x2c, 0xe6, 0xd7, 0xb1, 0xec, 0x1c,
+ 0x8b, 0x0e, 0x69, 0x72, 0x50, 0x3e, 0xea, 0xd3, 0xb4, 0x89, 0x69, 0x0f, 0x21, 0x7f, 0xd3, 0x03,
+ 0xc1, 0xd7, 0x6c, 0xd1, 0x40, 0xaf, 0x90, 0x06, 0x38, 0x1c, 0xe5, 0xa9, 0x8c, 0xa5, 0xc3, 0x24,
+ 0xcb, 0x84, 0xe9, 0xf3, 0x03, 0xe8, 0xdb, 0x30, 0xf0, 0x37, 0x5f, 0x92, 0x36, 0x4b, 0xce, 0xae,
+ 0xa7, 0x3c, 0x81, 0xbe, 0xc5, 0x52, 0x68, 0x6b, 0x13, 0x03, 0xc7, 0x16, 0x93, 0x6b, 0xa9, 0x1c,
+ 0x37, 0x60, 0x9d, 0x30, 0x2e, 0x7c, 0x9b, 0x9c, 0x6f, 0x10, 0xdc, 0xaa, 0xd0, 0xc8, 0x83, 0xc1,
+ 0x03, 0x36, 0x27, 0x30, 0x83, 0xb0, 0x51, 0xe5, 0xc2, 0x00, 0x17, 0x16, 0x83, 0x4d, 0x09, 0x13,
+ 0xce, 0x78, 0x4f, 0x22, 0xec, 0x7a, 0xfc, 0x6b, 0xbb, 0x93, 0x3b, 0xcc, 0x11, 0x3c, 0xa4, 0x83,
+ 0x2c, 0xaf, 0x1a, 0x5d, 0x75, 0xc8, 0x1b, 0xfe, 0x90, 0x08, 0xf9, 0x4e, 0x57, 0x1d, 0x72, 0x87,
+ 0xdd, 0x91, 0x59, 0x79, 0xb8, 0x58, 0xa7, 0x45, 0xa6, 0x38, 0xe5, 0x1f, 0xd6, 0xb5, 0x54, 0x9d,
+ 0x81, 0xc0, 0x3b, 0x3e, 0x37, 0x2b, 0x6e, 0x93, 0xa8, 0xbb, 0x23, 0xcc, 0x4a, 0xf0, 0x39, 0xbb,
+ 0xa7, 0x5f, 0x80, 0x31, 0x32, 0xa9, 0x92, 0xcb, 0x40, 0x07, 0x1b, 0xcb, 0xb1, 0x56, 0xc0, 0x63,
+ 0xad, 0xda, 0x72, 0xa8, 0x1a, 0x92, 0xea, 0x9d, 0xca, 0x81, 0x32, 0x2d, 0x22, 0xfa, 0x0f, 0x5a,
+ 0x41, 0x93, 0xc8, 0x95, 0xf0, 0x9f, 0xd8, 0xcd, 0xae, 0xb0, 0x5d, 0x6e, 0xbb, 0xc2, 0x24, 0x90,
+ 0x70, 0xa9, 0x12, 0x38, 0x1a, 0x39, 0xe2, 0x9c, 0xcf, 0x5c, 0xe4, 0xb4, 0x3c, 0xe5, 0x91, 0x67,
+ 0x54, 0x02, 0x5f, 0xb0, 0x39, 0x2c, 0x35, 0x8a, 0x6b, 0xbb, 0x48, 0x53, 0x1f, 0x23, 0x6e, 0x63,
+ 0xa1, 0x6c, 0x38, 0xef, 0xcb, 0xa6, 0x22, 0x6c, 0x15, 0x69, 0x4a, 0x81, 0x6a, 0x21, 0x1a, 0xfc,
+ 0x9e, 0xcd, 0x0f, 0xa2, 0x64, 0x21, 0x85, 0xd8, 0x51, 0x46, 0xfa, 0x3c, 0x0e, 0x17, 0x7c, 0xd6,
+ 0x57, 0x8c, 0x16, 0x11, 0xb6, 0xb4, 0xf1, 0x39, 0x1d, 0xac, 0xb2, 0x29, 0xa9, 0x2c, 0x18, 0xc7,
+ 0xdb, 0xc2, 0x3a, 0x9e, 0x0b, 0xd7, 0x0d, 0x6f, 0x92, 0xcb, 0xa4, 0xb7, 0x6f, 0x09, 0xeb, 0x76,
+ 0x85, 0xeb, 0x06, 0x0f, 0xd9, 0x8a, 0x48, 0x1d, 0x98, 0xea, 0x26, 0x5c, 0x3f, 0x07, 0xde, 0x01,
+ 0x05, 0x46, 0xa4, 0x83, 0x73, 0x2e, 0x92, 0xeb, 0x22, 0x11, 0xfd, 0x35, 0xec, 0xf5, 0x73, 0xf8,
+ 0xc6, 0xb3, 0xaa, 0xb3, 0x7e, 0xc4, 0x02, 0xdb, 0x57, 0x71, 0xd7, 0x68, 0xa5, 0x0b, 0xcb, 0x63,
+ 0x9d, 0x61, 0x2b, 0x5d, 0xf2, 0x59, 0x30, 0x82, 0x34, 0x09, 0x08, 0xde, 0x65, 0xd7, 0xbd, 0x3c,
+ 0xb7, 0xd0, 0xa3, 0x88, 0x84, 0x75, 0xe2, 0x4e, 0x78, 0x73, 0x0b, 0x7a, 0x18, 0x88, 0x60, 0x8f,
+ 0xbd, 0x57, 0xf2, 0x0a, 0x25, 0x7b, 0x05, 0xf0, 0x43, 0xe9, 0xba, 0xba, 0x70, 0xfe, 0x32, 0xf0,
+ 0x76, 0xad, 0x33, 0x42, 0x2a, 0x67, 0xc3, 0x15, 0xf2, 0xbf, 0xed, 0xe9, 0xcf, 0x88, 0xfd, 0xdc,
+ 0x93, 0xe9, 0x5a, 0x9a, 0x43, 0x6a, 0xf0, 0x07, 0xb6, 0x60, 0x5d, 0xb1, 0xcf, 0x63, 0xe1, 0x44,
+ 0xaa, 0x3b, 0xaf, 0xe7, 0xee, 0x2d, 0x52, 0x0a, 0x91, 0xd2, 0xf4, 0x8c, 0xb3, 0x29, 0xfc, 0x94,
+ 0xdd, 0x85, 0xa3, 0x1c, 0x8c, 0xcc, 0x40, 0x39, 0x91, 0xe2, 0x61, 0x73, 0x6a, 0xaf, 0x65, 0x14,
+ 0x0d, 0x1c, 0x1a, 0x89, 0xed, 0xe6, 0x36, 0x8d, 0xfb, 0x5b, 0xa3, 0xe4, 0x66, 0xc9, 0xf5, 0x81,
+ 0x8c, 0x4a, 0x26, 0x36, 0xb9, 0x2a, 0x1e, 0xce, 0x80, 0xc8, 0xb8, 0x01, 0xbc, 0x5b, 0x1a, 0x80,
+ 0xe1, 0x5d, 0x7f, 0xdd, 0x65, 0x64, 0x08, 0x8f, 0x86, 0xb0, 0x1f, 0x63, 0xb6, 0x48, 0x9d, 0xe5,
+ 0xfb, 0x45, 0x1b, 0x3b, 0x99, 0x95, 0xc7, 0x10, 0xbe, 0x5b, 0x8d, 0x31, 0x82, 0xd6, 0x09, 0x69,
+ 0xc9, 0x63, 0xc0, 0x66, 0x9e, 0x1b, 0x9d, 0x8b, 0x8e, 0x70, 0x38, 0x94, 0xf3, 0xc2, 0x71, 0x9a,
+ 0x74, 0x52, 0x75, 0xc2, 0xf7, 0x7c, 0x56, 0x0e, 0xf0, 0x47, 0x08, 0xef, 0x94, 0x68, 0xf0, 0xf7,
+ 0x1a, 0x3b, 0x73, 0x18, 0x9a, 0x2d, 0xb6, 0x97, 0x52, 0x9b, 0xa0, 0xea, 0xcd, 0x74, 0x02, 0xe1,
+ 0x2a, 0x4d, 0xf2, 0xad, 0xd3, 0x93, 0x7a, 0x7d, 0x73, 0x84, 0x8d, 0xd3, 0xa5, 0xf5, 0x74, 0x7b,
+ 0xb7, 0xe4, 0x7e, 0xab, 0x13, 0x78, 0xf5, 0xdf, 0x29, 0x51, 0x1d, 0x5e, 0x23, 0xd8, 0x5e, 0x3a,
+ 0x4a, 0x08, 0xb6, 0xd8, 0x04, 0xee, 0x83, 0xe3, 0x46, 0x68, 0xfd, 0x7b, 0xb4, 0xfe, 0xad, 0xd3,
+ 0x93, 0xfa, 0x78, 0x29, 0x58, 0xae, 0x75, 0xbd, 0xfc, 0xbb, 0x79, 0x04, 0x31, 0x69, 0x8f, 0xa3,
+ 0x63, 0xab, 0x97, 0x92, 0xce, 0x73, 0x36, 0x67, 0xc1, 0x48, 0x91, 0x72, 0xa5, 0x4d, 0x26, 0x52,
+ 0x79, 0x4c, 0xf1, 0xf5, 0x9a, 0xef, 0x93, 0xe6, 0xc2, 0xab, 0x93, 0xfa, 0x6c, 0x8b, 0x48, 0xdf,
+ 0x8d, 0x72, 0x48, 0x6c, 0xd6, 0x5e, 0x0c, 0x04, 0x3b, 0x6c, 0x56, 0xc1, 0x21, 0xb7, 0x71, 0x17,
+ 0x32, 0xc1, 0xe3, 0xae, 0x50, 0x1d, 0x30, 0x5e, 0xf6, 0x03, 0x92, 0x0d, 0x5f, 0x9d, 0xd4, 0x67,
+ 0xbe, 0x83, 0xc3, 0x16, 0x31, 0x9a, 0x9e, 0x40, 0x9a, 0x33, 0xea, 0x02, 0x6b, 0xf0, 0x57, 0x36,
+ 0x69, 0xa1, 0x57, 0x80, 0x8a, 0x81, 0xc7, 0x22, 0xee, 0x42, 0xf8, 0xe1, 0xf2, 0xe5, 0xd5, 0xf1,
+ 0xfb, 0x1b, 0x6b, 0xbf, 0xf1, 0x82, 0x5d, 0xbb, 0xe8, 0x9d, 0xba, 0xd6, 0x2a, 0x75, 0x9a, 0x28,
+ 0xb3, 0xa9, 0x9c, 0xe9, 0xfb, 0x27, 0xd8, 0x19, 0x7b, 0x34, 0x61, 0x47, 0xff, 0x06, 0x1f, 0xb0,
+ 0xe9, 0x3c, 0x15, 0x31, 0xe0, 0x9d, 0x0c, 0xaa, 0xe6, 0x23, 0x4a, 0x9d, 0xa9, 0x01, 0x50, 0x55,
+ 0x4b, 0xce, 0x82, 0xea, 0xa9, 0x57, 0x58, 0x30, 0x9c, 0x1e, 0xce, 0xe1, 0x1a, 0x96, 0xc6, 0xfa,
+ 0xfa, 0xab, 0x93, 0xfa, 0x1f, 0x3b, 0xd2, 0x75, 0x8b, 0xfd, 0xb5, 0x58, 0x67, 0x8d, 0xc1, 0xf6,
+ 0x93, 0xfd, 0xe1, 0xef, 0x46, 0x7e, 0xd0, 0x69, 0x58, 0x88, 0x0b, 0x7c, 0x52, 0xad, 0xb5, 0x9e,
+ 0x6e, 0x3f, 0xb3, 0x60, 0x94, 0xc8, 0x60, 0x17, 0x95, 0xa2, 0xa9, 0x52, 0x1d, 0xad, 0x64, 0x09,
+ 0x1a, 0x6c, 0x86, 0x5e, 0x5b, 0xfa, 0xd0, 0x72, 0xac, 0x2f, 0x07, 0x8a, 0xa7, 0xba, 0x13, 0x36,
+ 0x7c, 0x45, 0xb8, 0x23, 0x15, 0xe9, 0x43, 0xfb, 0xdc, 0x23, 0xdb, 0xba, 0x73, 0xa1, 0x03, 0x18,
+ 0x13, 0x7e, 0x7c, 0x91, 0xc3, 0xa6, 0x31, 0xc1, 0x3d, 0x36, 0x3d, 0x70, 0xa0, 0x47, 0x1d, 0xca,
+ 0x7f, 0x42, 0xec, 0xc9, 0x92, 0x8d, 0x2f, 0x31, 0xd4, 0x3e, 0x47, 0x45, 0xe1, 0xfb, 0xe7, 0xa8,
+ 0xa8, 0x7a, 0x9f, 0xdd, 0x10, 0x85, 0xd3, 0xdc, 0x40, 0x57, 0x67, 0xa3, 0xb3, 0xf0, 0x53, 0x0a,
+ 0xed, 0xdb, 0x08, 0x46, 0x25, 0x56, 0x45, 0x77, 0x85, 0x5d, 0x93, 0x96, 0xdb, 0x22, 0x07, 0x83,
+ 0xd1, 0x0d, 0x3f, 0xf3, 0x2f, 0x1c, 0x69, 0x5b, 0x95, 0x09, 0x4f, 0x97, 0x0a, 0xd3, 0x01, 0x3f,
+ 0x83, 0xb0, 0xd7, 0xd2, 0x6e, 0xc2, 0xff, 0x5f, 0xae, 0xad, 0xd6, 0xa2, 0x69, 0xc2, 0x70, 0xfc,
+ 0x60, 0xc3, 0xc5, 0xed, 0x60, 0x7b, 0x94, 0xea, 0x47, 0x9c, 0x39, 0x06, 0x9c, 0xe9, 0xe3, 0x8e,
+ 0xb5, 0x19, 0xb6, 0xc7, 0xcf, 0x7d, 0x7b, 0xf4, 0x94, 0x08, 0x19, 0x9b, 0x44, 0xa8, 0xb6, 0xf4,
+ 0x3e, 0x9b, 0x56, 0xb8, 0x12, 0x35, 0x15, 0x48, 0x78, 0x2a, 0xac, 0x0b, 0x7f, 0x47, 0x4e, 0xd7,
+ 0x11, 0xd8, 0xf1, 0xf6, 0x6d, 0x61, 0x1d, 0x7e, 0x26, 0x95, 0xaf, 0x51, 0xea, 0x21, 0xbc, 0x83,
+ 0xf5, 0x1d, 0x3e, 0xf0, 0xa9, 0x54, 0x22, 0x58, 0xec, 0xdf, 0xa0, 0x3d, 0x38, 0x60, 0x93, 0x71,
+ 0x61, 0x9d, 0xce, 0xe8, 0x21, 0xa8, 0x95, 0x0d, 0xbf, 0xf8, 0x5f, 0xf3, 0xbe, 0x49, 0x3a, 0x3b,
+ 0x5e, 0x86, 0xf2, 0x3e, 0x9a, 0x88, 0x47, 0x6d, 0xf3, 0x3d, 0x16, 0x9c, 0x2f, 0x8e, 0x60, 0x8a,
+ 0x5d, 0x3e, 0x80, 0x3e, 0x7d, 0xc8, 0x4d, 0x44, 0xf8, 0x33, 0xd8, 0x64, 0x6f, 0xbe, 0x10, 0x69,
+ 0x01, 0xf4, 0x95, 0x36, 0x7e, 0xbf, 0xf1, 0x9b, 0x7b, 0x39, 0xaf, 0x18, 0x79, 0xef, 0x2f, 0xdf,
+ 0x78, 0x50, 0x9b, 0xff, 0x8a, 0x05, 0xe7, 0xf7, 0x35, 0xba, 0xe4, 0x98, 0x5f, 0x72, 0x66, 0x74,
+ 0xc9, 0xb1, 0x11, 0x85, 0xc7, 0x57, 0xae, 0xce, 0x4e, 0x85, 0x8f, 0xaf, 0x5c, 0x5d, 0x9e, 0x5a,
+ 0x79, 0x7c, 0xe5, 0xea, 0x9d, 0xa9, 0xbb, 0xb7, 0xfe, 0x51, 0xbb, 0xf0, 0x1c, 0x77, 0xd9, 0x24,
+ 0x75, 0x8e, 0x84, 0xbf, 0x00, 0x83, 0x1b, 0x2c, 0x8f, 0x34, 0xe1, 0xad, 0xdf, 0x7b, 0x63, 0x70,
+ 0x9b, 0x4d, 0xc4, 0x85, 0x31, 0x58, 0xe7, 0xc3, 0x15, 0x2f, 0x47, 0xd7, 0x4a, 0xe3, 0xf7, 0x68,
+ 0x0b, 0x6e, 0xb2, 0x31, 0xa9, 0x62, 0x43, 0x55, 0xef, 0xbf, 0x2e, 0xa3, 0xa1, 0x21, 0x58, 0x64,
+ 0x4c, 0x15, 0x99, 0x77, 0xb7, 0xfe, 0xdb, 0x31, 0x1a, 0x53, 0x45, 0x46, 0xbe, 0x76, 0xbd, 0xf1,
+ 0xd3, 0xbf, 0x97, 0x2e, 0xfd, 0x74, 0xba, 0x54, 0xfb, 0xf9, 0x74, 0xa9, 0xf6, 0xcb, 0xe9, 0x52,
+ 0xed, 0x5f, 0xa7, 0x4b, 0xb5, 0xbf, 0xbd, 0x5c, 0xba, 0xf4, 0xf3, 0xcb, 0xa5, 0x4b, 0xbf, 0xbc,
+ 0x5c, 0xba, 0xf4, 0xc3, 0xc4, 0x99, 0x10, 0xee, 0xbf, 0x45, 0x0d, 0xe4, 0xd3, 0xff, 0x04, 0x00,
+ 0x00, 0xff, 0xff, 0xd0, 0x11, 0x9c, 0xa0, 0xdf, 0x0f, 0x00, 0x00,
}
func (m *LocalOnlySessionData) Marshal() (dAtA []byte, err error) {
@@ -690,18 +683,6 @@ func (m *LocalOnlySessionData) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i--
dAtA[i] = 0xa8
}
- if m.CopyPartitioningWhenDeinterleavingTable {
- i--
- if m.CopyPartitioningWhenDeinterleavingTable {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x2
- i--
- dAtA[i] = 0xa0
- }
if len(m.ExperimentalComputedColumnRewrites) > 0 {
i -= len(m.ExperimentalComputedColumnRewrites)
copy(dAtA[i:], m.ExperimentalComputedColumnRewrites)
@@ -1191,9 +1172,6 @@ func (m *LocalOnlySessionData) Size() (n int) {
if l > 0 {
n += 2 + l + sovLocalOnlySessionData(uint64(l))
}
- if m.CopyPartitioningWhenDeinterleavingTable {
- n += 3
- }
if m.EnableStreamReplication {
n += 3
}
@@ -2009,26 +1987,6 @@ func (m *LocalOnlySessionData) Unmarshal(dAtA []byte) error {
}
m.ExperimentalComputedColumnRewrites = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 36:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field CopyPartitioningWhenDeinterleavingTable", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowLocalOnlySessionData
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.CopyPartitioningWhenDeinterleavingTable = bool(v != 0)
case 37:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field EnableStreamReplication", wireType)
diff --git a/pkg/sql/sessiondatapb/local_only_session_data.proto b/pkg/sql/sessiondatapb/local_only_session_data.proto
index 8c3be5b4f798..0373f20ab39c 100644
--- a/pkg/sql/sessiondatapb/local_only_session_data.proto
+++ b/pkg/sql/sessiondatapb/local_only_session_data.proto
@@ -133,11 +133,7 @@ message LocalOnlySessionData {
// experimentalComputedColumnRewrites cluster setting for a description of the
// format.
string experimental_computed_column_rewrites = 35;
- // CopyPartitioningWhenDeinterleavingTable indicates that when running an
- // ALTER PRIMARY KEY that retains the same columns but removes any
- // interleaving that zone configurations and partitioning from the root
- // of that interleave should be applied to the new primary index.
- bool copy_partitioning_when_deinterleaving_table = 36;
+ reserved 36;
// EnableStreamReplication indicates whether to allow setting up a replication
// stream.
bool enable_stream_replication = 37;
diff --git a/pkg/sql/show_create.go b/pkg/sql/show_create.go
index 0f267b53ae6b..a7a942609b41 100644
--- a/pkg/sql/show_create.go
+++ b/pkg/sql/show_create.go
@@ -59,10 +59,9 @@ type ShowCreateDisplayOptions struct {
// ShowCreateTable returns a valid SQL representation of the CREATE
// TABLE statement used to create the given table.
//
-// The names of the tables references by foreign keys, and the
-// interleaved parent if any, are prefixed by their own database name
-// unless it is equal to the given dbPrefix. This allows us to elide
-// the prefix when the given table references other tables in the
+// The names of the tables referenced by foreign keys are prefixed by their own
+// database name unless it is equal to the given dbPrefix. This allows us to
+// elide the prefix when the given table references other tables in the
// current database.
func ShowCreateTable(
ctx context.Context,
@@ -134,61 +133,30 @@ func ShowCreateTable(
return "", err
}
}
- allIdx := append(
- append([]catalog.Index{}, desc.PublicNonPrimaryIndexes()...),
- desc.GetPrimaryIndex())
- for _, idx := range allIdx {
- // Only add indexes to the create_statement column, and not to the
- // create_nofks column if they are not associated with an INTERLEAVE
- // statement.
- // Initialize to false if Interleave has no ancestors, indicating that the
- // index is not interleaved at all.
- includeInterleaveClause := idx.NumInterleaveAncestors() == 0
- if displayOptions.FKDisplayMode != OmitFKClausesFromCreate {
- // The caller is instructing us to not omit FK clauses from inside the CREATE.
- // (i.e. the caller does not want them as separate DDL.)
- // Since we're including FK clauses, we need to also include the PARTITION and INTERLEAVE
- // clauses as well.
- includeInterleaveClause = true
+ for _, idx := range desc.PublicNonPrimaryIndexes() {
+ // Showing the primary index is handled above.
+
+ // Build the PARTITION BY clause.
+ var partitionBuf bytes.Buffer
+ if err := ShowCreatePartitioning(
+ a, p.ExecCfg().Codec, desc, idx, idx.GetPartitioning(), &partitionBuf, 1 /* indent */, 0, /* colOffset */
+ ); err != nil {
+ return "", err
}
- if !idx.Primary() && includeInterleaveClause {
- // Showing the primary index is handled above.
-
- // Build the PARTITION BY clause.
- var partitionBuf bytes.Buffer
- if err := ShowCreatePartitioning(
- a, p.ExecCfg().Codec, desc, idx, idx.GetPartitioning(), &partitionBuf, 1 /* indent */, 0, /* colOffset */
- ); err != nil {
- return "", err
- }
-
- // Add interleave or Foreign Key indexes only to the create_table columns,
- // and not the create_nofks column.
- var interleaveBuf bytes.Buffer
- if includeInterleaveClause {
- // TODO(mgartner): The logic in showCreateInterleave can be
- // moved to catformat.IndexForDisplay.
- if err := showCreateInterleave(idx, &interleaveBuf, dbPrefix, lCtx); err != nil {
- return "", err
- }
- }
-
- f.WriteString(",\n\t")
- idxStr, err := catformat.IndexForDisplay(
- ctx,
- desc,
- &descpb.AnonymousTable,
- idx,
- partitionBuf.String(),
- interleaveBuf.String(),
- p.RunParams(ctx).p.SemaCtx(),
- )
- if err != nil {
- return "", err
- }
- f.WriteString(idxStr)
+ f.WriteString(",\n\t")
+ idxStr, err := catformat.IndexForDisplay(
+ ctx,
+ desc,
+ &descpb.AnonymousTable,
+ idx,
+ partitionBuf.String(),
+ p.RunParams(ctx).p.SemaCtx(),
+ )
+ if err != nil {
+ return "", err
}
+ f.WriteString(idxStr)
}
// Create the FAMILY and CONSTRAINTs of the CREATE statement
@@ -197,9 +165,6 @@ func ShowCreateTable(
return "", err
}
- if err := showCreateInterleave(desc.GetPrimaryIndex(), &f.Buffer, dbPrefix, lCtx); err != nil {
- return "", err
- }
if err := ShowCreatePartitioning(
a, p.ExecCfg().Codec, desc, desc.GetPrimaryIndex(), desc.GetPrimaryIndex().GetPartitioning(), &f.Buffer, 0 /* indent */, 0, /* colOffset */
); err != nil {
diff --git a/pkg/sql/show_create_clauses.go b/pkg/sql/show_create_clauses.go
index 646699ff0a9c..8eba73ec35d8 100644
--- a/pkg/sql/show_create_clauses.go
+++ b/pkg/sql/show_create_clauses.go
@@ -381,46 +381,6 @@ func showCreateLocality(desc catalog.TableDescriptor, f *tree.FmtCtx) error {
return nil
}
-// showCreateInterleave returns an INTERLEAVE IN PARENT clause for the specified
-// index, if applicable.
-//
-// The name of the parent table is prefixed by its database name unless
-// it is equal to the given dbPrefix. This allows us to elide the prefix
-// when the given index is interleaved in a table of the current database.
-func showCreateInterleave(
- idx catalog.Index, buf *bytes.Buffer, dbPrefix string, lCtx simpleSchemaResolver,
-) error {
- if idx.NumInterleaveAncestors() == 0 {
- return nil
- }
- intl := idx.IndexDesc().Interleave
- parentTableID := intl.Ancestors[len(intl.Ancestors)-1].TableID
- var err error
- var parentName tree.TableName
- if lCtx != nil {
- parentName, err = getParentAsTableName(lCtx, parentTableID, dbPrefix)
- if err != nil {
- return err
- }
- } else {
- parentName = tree.MakeTableNameWithSchema(tree.Name(""), tree.PublicSchemaName, tree.Name(fmt.Sprintf("[%d as parent]", parentTableID)))
- parentName.ExplicitCatalog = false
- parentName.ExplicitSchema = false
- }
- var sharedPrefixLen int
- for _, ancestor := range intl.Ancestors {
- sharedPrefixLen += int(ancestor.SharedPrefixLen)
- }
- buf.WriteString(" INTERLEAVE IN PARENT ")
- fmtCtx := tree.NewFmtCtx(tree.FmtSimple)
- fmtCtx.FormatNode(&parentName)
- buf.WriteString(fmtCtx.CloseAndGetString())
- buf.WriteString(" (")
- formatQuoteNames(buf, idx.IndexDesc().KeyColumnNames[:sharedPrefixLen]...)
- buf.WriteString(")")
- return nil
-}
-
// ShowCreatePartitioning returns a PARTITION BY clause for the specified
// index, if applicable.
func ShowCreatePartitioning(
diff --git a/pkg/sql/span/span_builder.go b/pkg/sql/span/span_builder.go
index 27175cbf796a..8498a7c96cee 100644
--- a/pkg/sql/span/span_builder.go
+++ b/pkg/sql/span/span_builder.go
@@ -84,24 +84,9 @@ func MakeBuilder(
}
// Set up the interstices for encoding interleaved tables later.
+ //
+ // TODO(yuzefovich): simplify this, interleaves are dead now.
s.interstices[0] = s.KeyPrefix
- if index.NumInterleaveAncestors() > 0 {
- // TODO(rohany): too much of this code is copied from EncodePartialIndexKey.
- sharedPrefixLen := 0
- for i := 0; i < index.NumInterleaveAncestors(); i++ {
- ancestor := index.GetInterleaveAncestor(i)
- // The first ancestor is already encoded in interstices[0].
- if i != 0 {
- s.interstices[sharedPrefixLen] = rowenc.EncodePartialTableIDIndexID(
- s.interstices[sharedPrefixLen], ancestor.TableID, ancestor.IndexID)
- }
- sharedPrefixLen += int(ancestor.SharedPrefixLen)
- s.interstices[sharedPrefixLen] = encoding.EncodeInterleavedSentinel(
- s.interstices[sharedPrefixLen])
- }
- s.interstices[sharedPrefixLen] = rowenc.EncodePartialTableIDIndexID(
- s.interstices[sharedPrefixLen], table.GetID(), index.GetID())
- }
return s
}
diff --git a/pkg/sql/sqlinstance/instancestorage/row_codec.go b/pkg/sql/sqlinstance/instancestorage/row_codec.go
index bec03699f019..2e3993dc5cbf 100644
--- a/pkg/sql/sqlinstance/instancestorage/row_codec.go
+++ b/pkg/sql/sqlinstance/instancestorage/row_codec.go
@@ -91,7 +91,7 @@ func (d *rowCodec) decodeRow(
{
types := []*types.T{tbl.PublicColumns()[0].GetType()}
row := make([]rowenc.EncDatum, 1)
- _, _, _, err := rowenc.DecodeIndexKey(d.codec, tbl, tbl.GetPrimaryIndex(), types, row, nil, kv.Key)
+ _, _, _, err := rowenc.DecodeIndexKey(d.codec, types, row, nil, kv.Key)
if err != nil {
return base.SQLInstanceID(0), "", "", hlc.Timestamp{}, false, errors.Wrap(err, "failed to decode key")
}
diff --git a/pkg/sql/sqltelemetry/schema.go b/pkg/sql/sqltelemetry/schema.go
index 308262775111..d0624cd08998 100644
--- a/pkg/sql/sqltelemetry/schema.go
+++ b/pkg/sql/sqltelemetry/schema.go
@@ -31,10 +31,6 @@ func SchemaNewTypeCounter(t string) telemetry.Counter {
}
var (
- // CreateInterleavedTableCounter is to be incremented every time an
- // interleaved table is being created.
- CreateInterleavedTableCounter = telemetry.GetCounterOnce("sql.schema.create_interleaved_table")
-
// CreateTempTableCounter is to be incremented every time a TEMP TABLE
// has been created.
CreateTempTableCounter = telemetry.GetCounterOnce("sql.schema.create_temp_table")
diff --git a/pkg/sql/stats/stats_cache.go b/pkg/sql/stats/stats_cache.go
index 5a8443b01a49..bf6365cc102b 100644
--- a/pkg/sql/stats/stats_cache.go
+++ b/pkg/sql/stats/stats_cache.go
@@ -22,7 +22,6 @@ import (
"github.com/cockroachdb/cockroach/pkg/sql/catalog"
"github.com/cockroachdb/cockroach/pkg/sql/catalog/descpb"
"github.com/cockroachdb/cockroach/pkg/sql/catalog/descs"
- "github.com/cockroachdb/cockroach/pkg/sql/catalog/systemschema"
"github.com/cockroachdb/cockroach/pkg/sql/opt/cat"
"github.com/cockroachdb/cockroach/pkg/sql/rowenc"
"github.com/cockroachdb/cockroach/pkg/sql/sem/tree"
@@ -181,14 +180,11 @@ func NewTableStatisticsCache(
func decodeTableStatisticsKV(
codec keys.SQLCodec, kv *roachpb.RangeFeedValue, da *rowenc.DatumAlloc,
) (tableDesc descpb.ID, err error) {
- tbl := systemschema.TableStatisticsTable
// The primary key of table_statistics is (tableID INT, statisticID INT).
types := []*types.T{types.Int, types.Int}
dirs := []descpb.IndexDescriptor_Direction{descpb.IndexDescriptor_ASC, descpb.IndexDescriptor_ASC}
keyVals := make([]rowenc.EncDatum, 2)
- _, matches, _, err := rowenc.DecodeIndexKey(
- codec, tbl, tbl.GetPrimaryIndex(), types, keyVals, dirs, kv.Key,
- )
+ _, matches, _, err := rowenc.DecodeIndexKey(codec, types, keyVals, dirs, kv.Key)
if err != nil {
return 0, err
}
diff --git a/pkg/sql/tablewriter_delete.go b/pkg/sql/tablewriter_delete.go
index 3083ab4a6c57..f789e21282e5 100644
--- a/pkg/sql/tablewriter_delete.go
+++ b/pkg/sql/tablewriter_delete.go
@@ -17,12 +17,9 @@ import (
"github.com/cockroachdb/cockroach/pkg/roachpb"
"github.com/cockroachdb/cockroach/pkg/settings"
"github.com/cockroachdb/cockroach/pkg/sql/catalog"
- "github.com/cockroachdb/cockroach/pkg/sql/catalog/descpb"
"github.com/cockroachdb/cockroach/pkg/sql/row"
"github.com/cockroachdb/cockroach/pkg/sql/rowenc"
- "github.com/cockroachdb/cockroach/pkg/sql/rowinfra"
"github.com/cockroachdb/cockroach/pkg/sql/sem/tree"
- "github.com/cockroachdb/cockroach/pkg/util"
"github.com/cockroachdb/cockroach/pkg/util/log"
"github.com/cockroachdb/errors"
)
@@ -60,34 +57,21 @@ func (td *tableDeleter) row(
}
// deleteAllRows runs the kv operations necessary to delete all sql rows in the
-// table passed at construction. This may require a scan.
+// table passed at construction, using the DelRange KV request to delete data
+// quickly.
//
// resume is the resume-span which should be used for the table deletion when
// the table deletion is chunked. The first call to this method should use a
// zero resume-span. After a chunk is deleted a new resume-span is returned.
//
-// limit is a limit on either the number of keys or table-rows (for
-// interleaved tables) deleted in the operation.
-func (td *tableDeleter) deleteAllRows(
- ctx context.Context, resume roachpb.Span, limit int64, traceKV bool,
-) (roachpb.Span, error) {
- if td.tableDesc().IsInterleaved() {
- log.VEvent(ctx, 2, "delete forced to scan: table is interleaved")
- return td.deleteAllRowsScan(ctx, resume, limit, traceKV)
- }
- // TODO(pbardea): Is this ever called anymore?
- return td.deleteAllRowsFast(ctx, resume, limit, traceKV)
-}
-
-// deleteAllRowsFast uses the DelRange KV request to delete data quickly,
-// relative to deleteAllRowsScan.
+// limit is a limit on the number of keys deleted in the operation.
//
// Note that this method leaves a RocksDB deletion tombstone on every key in the
// table, resulting in substantial write amplification. When possible, the
// schema changer avoids using a tableDeleter entirely in favor of the
// ClearRange KV request, which uses RocksDB range deletion tombstones to avoid
// write amplification.
-func (td *tableDeleter) deleteAllRowsFast(
+func (td *tableDeleter) deleteAllRows(
ctx context.Context, resume roachpb.Span, limit int64, traceKV bool,
) (roachpb.Span, error) {
if resume.Key == nil {
@@ -111,81 +95,8 @@ func (td *tableDeleter) deleteAllRowsFast(
return td.b.Results[0].ResumeSpanAsValue(), nil
}
-func (td *tableDeleter) deleteAllRowsScan(
- ctx context.Context, resume roachpb.Span, limit int64, traceKV bool,
-) (roachpb.Span, error) {
- if resume.Key == nil {
- resume = td.tableDesc().PrimaryIndexSpan(td.rd.Helper.Codec)
- }
-
- var valNeededForCol util.FastIntSet
- for i := range td.rd.FetchCols {
- col := td.rd.FetchCols[i].GetID()
- valNeededForCol.Add(td.rd.FetchColIDtoRowIndex.GetDefault(col))
- }
-
- var rf row.Fetcher
- tableArgs := row.FetcherTableArgs{
- Desc: td.tableDesc(),
- Index: td.tableDesc().GetPrimaryIndex(),
- ColIdxMap: td.rd.FetchColIDtoRowIndex,
- Cols: td.rd.FetchCols,
- ValNeededForCol: valNeededForCol,
- }
- if err := rf.Init(
- ctx,
- td.rd.Helper.Codec,
- false, /* reverse */
- // TODO(nvanbenschoten): it might make sense to use a FOR_UPDATE locking
- // strength here. Consider hooking this in to the same knob that will
- // control whether we perform locking implicitly during DELETEs.
- descpb.ScanLockingStrength_FOR_NONE,
- descpb.ScanLockingWaitPolicy_BLOCK,
- td.lockTimeout,
- false, /* isCheck */
- td.alloc,
- // TODO(bulkio): this might need a memory monitor for the slow case of truncate.
- nil, /* memMonitor */
- tableArgs,
- ); err != nil {
- return resume, err
- }
- if err := rf.StartScan(
- ctx, td.txn, roachpb.Spans{resume}, rowinfra.DefaultBatchBytesLimit, rowinfra.NoRowLimit, traceKV, td.forceProductionBatchSizes,
- ); err != nil {
- return resume, err
- }
-
- for i := int64(0); i < limit; i++ {
- datums, _, _, err := rf.NextRowDecoded(ctx)
- if err != nil {
- return resume, err
- }
- if datums == nil {
- // Done deleting all rows.
- resume = roachpb.Span{}
- break
- }
- // An empty PartialIndexUpdateHelper is passed here, meaning that DEL
- // operations will be issued for every partial index, regardless of
- // whether or not the row is indexed by the partial index.
- // TODO(mgartner): Try evaluating each partial index predicate
- // expression for each row and benchmark to determine if it is faster
- // than simply issuing DEL operations for entries that do not exist.
- var pm row.PartialIndexUpdateHelper
- if err = td.row(ctx, datums, pm, traceKV); err != nil {
- return resume, err
- }
- }
- if resume.Key != nil {
- // Update the resume start key for the next iteration.
- resume.Key = rf.Key()
- }
- return resume, td.finalize(ctx)
-}
-
// deleteIndex runs the kv operations necessary to delete all kv entries in the
-// given index. This may require a scan.
+// given index.
//
// resume is the resume-span which should be used for the index deletion
// when the index deletion is chunked. The first call to this method should
@@ -195,18 +106,6 @@ func (td *tableDeleter) deleteAllRowsScan(
// limit is a limit on the number of index entries deleted in the operation.
func (td *tableDeleter) deleteIndex(
ctx context.Context, idx catalog.Index, resume roachpb.Span, limit int64, traceKV bool,
-) (roachpb.Span, error) {
- if idx.IsInterleaved() {
- if log.V(2) {
- log.Info(ctx, "delete forced to scan: table is interleaved")
- }
- return td.deleteIndexScan(ctx, idx, resume, limit, traceKV)
- }
- return td.deleteIndexFast(ctx, idx, resume, limit, traceKV)
-}
-
-func (td *tableDeleter) deleteIndexFast(
- ctx context.Context, idx catalog.Index, resume roachpb.Span, limit int64, traceKV bool,
) (roachpb.Span, error) {
if resume.Key == nil {
resume = td.tableDesc().IndexSpan(td.rd.Helper.Codec, idx.GetID())
@@ -227,10 +126,6 @@ func (td *tableDeleter) deleteIndexFast(
}
func (td *tableDeleter) clearIndex(ctx context.Context, idx catalog.Index) error {
- if idx.IsInterleaved() {
- return errors.Errorf("unexpected interleaved index %d", idx.GetID())
- }
-
sp := td.tableDesc().IndexSpan(td.rd.Helper.Codec, idx.GetID())
// ClearRange cannot be run in a transaction, so create a
@@ -248,72 +143,6 @@ func (td *tableDeleter) clearIndex(ctx context.Context, idx catalog.Index) error
return td.txn.DB().Run(ctx, b)
}
-func (td *tableDeleter) deleteIndexScan(
- ctx context.Context, idx catalog.Index, resume roachpb.Span, limit int64, traceKV bool,
-) (roachpb.Span, error) {
- if resume.Key == nil {
- resume = td.tableDesc().PrimaryIndexSpan(td.rd.Helper.Codec)
- }
-
- var valNeededForCol util.FastIntSet
- for i := range td.rd.FetchCols {
- col := td.rd.FetchCols[i].GetID()
- valNeededForCol.Add(td.rd.FetchColIDtoRowIndex.GetDefault(col))
- }
-
- var rf row.Fetcher
- tableArgs := row.FetcherTableArgs{
- Desc: td.tableDesc(),
- Index: td.tableDesc().GetPrimaryIndex(),
- ColIdxMap: td.rd.FetchColIDtoRowIndex,
- Cols: td.rd.FetchCols,
- ValNeededForCol: valNeededForCol,
- }
- if err := rf.Init(
- ctx,
- td.rd.Helper.Codec,
- false, /* reverse */
- // TODO(nvanbenschoten): it might make sense to use a FOR_UPDATE locking
- // strength here. Consider hooking this in to the same knob that will
- // control whether we perform locking implicitly during DELETEs.
- descpb.ScanLockingStrength_FOR_NONE,
- descpb.ScanLockingWaitPolicy_BLOCK,
- td.lockTimeout,
- false, /* isCheck */
- td.alloc,
- // TODO(bulkio): this might need a memory monitor.
- nil, /* memMonitor */
- tableArgs,
- ); err != nil {
- return resume, err
- }
- if err := rf.StartScan(
- ctx, td.txn, roachpb.Spans{resume}, rowinfra.DefaultBatchBytesLimit, rowinfra.NoRowLimit, traceKV, td.forceProductionBatchSizes,
- ); err != nil {
- return resume, err
- }
-
- for i := int64(0); i < limit; i++ {
- datums, _, _, err := rf.NextRowDecoded(ctx)
- if err != nil {
- return resume, err
- }
- if datums == nil {
- // Done deleting all rows.
- resume = roachpb.Span{}
- break
- }
- if err := td.rd.DeleteIndexRow(ctx, td.b, idx, datums, traceKV); err != nil {
- return resume, err
- }
- }
- if resume.Key != nil {
- // Update the resume start key for the next iteration.
- resume.Key = rf.Key()
- }
- return resume, td.finalize(ctx)
-}
-
func (td *tableDeleter) tableDesc() catalog.TableDescriptor {
return td.rd.Helper.TableDesc
}
diff --git a/pkg/sql/testdata/telemetry/error b/pkg/sql/testdata/telemetry/error
index 1113d6cbf5f1..1c6687ed15bb 100644
--- a/pkg/sql/testdata/telemetry/error
+++ b/pkg/sql/testdata/telemetry/error
@@ -89,14 +89,6 @@ errorcodes.XXUUU
othererror.XXUUU
othererror.XXUUU.crdb_internal.set_vmodule()
-# 0A000 is pgcode.FeatureNotSupported.
-feature-usage
-CREATE TABLE foo (a INT8 PRIMARY KEY, b INT8, INDEX (b) INTERLEAVE IN PARENT foo (b))
-----
-error: pq: unimplemented: use CREATE INDEX to make interleaved indexes
-errorcodes.0A000
-unimplemented.#9148
-
# 22012 is pgcode.DivisionByZero.
feature-usage
SELECT 2/0
diff --git a/pkg/sql/truncate.go b/pkg/sql/truncate.go
index 761047762801..6e84b9c6682c 100644
--- a/pkg/sql/truncate.go
+++ b/pkg/sql/truncate.go
@@ -35,7 +35,6 @@ import (
"github.com/cockroachdb/cockroach/pkg/util/errorutil/unimplemented"
"github.com/cockroachdb/cockroach/pkg/util/log"
"github.com/cockroachdb/cockroach/pkg/util/log/eventpb"
- "github.com/cockroachdb/cockroach/pkg/util/protoutil"
"github.com/cockroachdb/cockroach/pkg/util/timeutil"
"github.com/cockroachdb/errors"
)
@@ -64,24 +63,6 @@ func (t *truncateNode) startExec(params runParams) error {
// while constructing the list of tables that should be truncated.
toTraverse := make([]tabledesc.Mutable, 0, len(n.Tables))
- // Collect copies of each interleaved descriptor being truncated before any
- // modification has been done to them. We need this in order to truncate
- // the interleaved indexes in the GC job. We have to collect these descriptors
- // before the truncate modifications to know what are the correct index spans
- // to delete. Once changes have been made, the index spans where k/v data for
- // the table reside are no longer accessible from the table.
- interleaveCopies := make(map[descpb.ID]*descpb.TableDescriptor)
- maybeAddInterleave := func(desc catalog.TableDescriptor) {
- if !desc.IsInterleaved() {
- return
- }
- _, ok := interleaveCopies[desc.GetID()]
- if ok {
- return
- }
- interleaveCopies[desc.GetID()] = protoutil.Clone(desc.TableDesc()).(*descpb.TableDescriptor)
- }
-
for i := range n.Tables {
tn := &n.Tables[i]
_, tableDesc, err := p.ResolveMutableTableDescriptor(
@@ -96,7 +77,6 @@ func (t *truncateNode) startExec(params runParams) error {
toTruncate[tableDesc.ID] = tn.FQString()
toTraverse = append(toTraverse, *tableDesc)
- maybeAddInterleave(tableDesc)
}
// Check that any referencing tables are contained in the set, or, if CASCADE
@@ -129,7 +109,6 @@ func (t *truncateNode) startExec(params runParams) error {
}
toTruncate[other.ID] = otherName.FQString()
toTraverse = append(toTraverse, *other)
- maybeAddInterleave(other)
return nil
}
@@ -139,14 +118,6 @@ func (t *truncateNode) startExec(params runParams) error {
return err
}
}
- for _, idx := range tableDesc.NonDropIndexes() {
- for i := 0; i < idx.NumInterleavedBy(); i++ {
- ref := idx.GetInterleavedBy(i)
- if err := maybeEnqueue(ref.Table, "interleaved by"); err != nil {
- return err
- }
- }
- }
}
// Mark this query as non-cancellable if autocommitting.
@@ -155,7 +126,7 @@ func (t *truncateNode) startExec(params runParams) error {
}
for id, name := range toTruncate {
- if err := p.truncateTable(ctx, id, interleaveCopies, tree.AsStringWithFQNames(t.n, params.Ann())); err != nil {
+ if err := p.truncateTable(ctx, id, tree.AsStringWithFQNames(t.n, params.Ann())); err != nil {
return err
}
@@ -190,15 +161,8 @@ var PreservedSplitCountMultiple = settings.RegisterIntSetting(
// truncateTable truncates the data of a table in a single transaction. It does
// so by dropping all existing indexes on the table and creating new ones without
// backfilling any data into the new indexes. The old indexes are cleaned up
-// asynchronously by the SchemaChangeGCJob. interleaveDescs is a set of
-// interleaved TableDescriptors being truncated before any of the truncate
-// mutations have been applied.
-func (p *planner) truncateTable(
- ctx context.Context,
- id descpb.ID,
- interleaveDescs map[descpb.ID]*descpb.TableDescriptor,
- jobDesc string,
-) error {
+// asynchronously by the SchemaChangeGCJob.
+func (p *planner) truncateTable(ctx context.Context, id descpb.ID, jobDesc string) error {
// Read the table descriptor because it might have changed
// while another table in the truncation list was truncated.
tableDesc, err := p.Descriptors().GetMutableTableVersionByID(ctx, id, p.txn)
@@ -206,12 +170,6 @@ func (p *planner) truncateTable(
return err
}
- // Get all tables that might reference this one.
- allRefs, err := p.findAllReferencingInterleaves(ctx, tableDesc)
- if err != nil {
- return err
- }
-
if err := checkTableForDisallowedMutationsWithTruncate(tableDesc); err != nil {
return err
}
@@ -263,28 +221,18 @@ func (p *planner) truncateTable(
// Create schema change GC jobs for all of the indexes.
dropTime := timeutil.Now().UnixNano()
droppedIndexes := make([]jobspb.SchemaChangeGCDetails_DroppedIndex, 0, len(oldIndexes))
- var droppedInterleaves []descpb.IndexDescriptor
for i := range oldIndexes {
idx := oldIndexes[i]
- if idx.IsInterleaved() {
- droppedInterleaves = append(droppedInterleaves, idx)
- } else {
- droppedIndexes = append(droppedIndexes, jobspb.SchemaChangeGCDetails_DroppedIndex{
- IndexID: idx.ID,
- DropTime: dropTime,
- })
- }
+ droppedIndexes = append(droppedIndexes, jobspb.SchemaChangeGCDetails_DroppedIndex{
+ IndexID: idx.ID,
+ DropTime: dropTime,
+ })
}
details := jobspb.SchemaChangeGCDetails{
Indexes: droppedIndexes,
ParentID: tableDesc.ID,
}
- // If we have any interleaved indexes, add that information to the job record.
- if len(droppedInterleaves) > 0 {
- details.InterleavedTable = interleaveDescs[tableDesc.ID]
- details.InterleavedIndexes = droppedInterleaves
- }
record := CreateGCJobRecord(jobDesc, p.User(), details)
if _, err := p.ExecCfg().JobRegistry.CreateAdoptableJobWithTxn(
ctx, record, p.ExecCfg().JobRegistry.MakeJobID(), p.txn); err != nil {
@@ -315,20 +263,6 @@ func (p *planner) truncateTable(
return err
}
- // Reassign any referenced index ID's from other tables.
- if err := p.reassignInterleaveIndexReferences(ctx, allRefs, tableDesc.ID, indexIDMapping); err != nil {
- return err
- }
- // Reassign any self references.
- if err := p.reassignInterleaveIndexReferences(
- ctx,
- []*tabledesc.Mutable{tableDesc},
- tableDesc.ID,
- indexIDMapping,
- ); err != nil {
- return err
- }
-
// Move any zone configs on indexes over to the new set of indexes.
swapInfo := &descpb.PrimaryKeySwap{
OldPrimaryIndexId: oldIndexIDs[0],
@@ -465,30 +399,6 @@ func ClearTableDataInChunks(
return nil
}
-// findAllReferencingInterleaves finds all tables that might interleave or
-// be interleaved by the input table.
-func (p *planner) findAllReferencingInterleaves(
- ctx context.Context, table *tabledesc.Mutable,
-) ([]*tabledesc.Mutable, error) {
- refs, err := table.FindAllReferences()
- if err != nil {
- return nil, err
- }
- tables := make([]*tabledesc.Mutable, 0, len(refs))
- for id := range refs {
- if id == table.ID {
- continue
- }
- t, err := p.Descriptors().GetMutableTableVersionByID(ctx, id, p.txn)
- if err != nil {
- return nil, err
- }
- tables = append(tables, t)
- }
-
- return tables, nil
-}
-
// copySplitPointsToNewIndexes copies any range split points from the indexes
// given by the oldIndexIDs slice to the indexes given by the newIndexIDs slice
// on the table given by the tableID.
@@ -638,43 +548,6 @@ func (p *planner) copySplitPointsToNewIndexes(
return p.txn.DB().Run(ctx, &b)
}
-// reassignInterleaveIndexReferences reassigns all index ID's present in
-// interleave descriptor references according to indexIDMapping.
-func (p *planner) reassignInterleaveIndexReferences(
- ctx context.Context,
- tables []*tabledesc.Mutable,
- truncatedID descpb.ID,
- indexIDMapping map[descpb.IndexID]descpb.IndexID,
-) error {
- for _, table := range tables {
- changed := false
- if err := catalog.ForEachNonDropIndex(table, func(indexI catalog.Index) error {
- index := indexI.IndexDesc()
- for j, a := range index.Interleave.Ancestors {
- if a.TableID == truncatedID {
- index.Interleave.Ancestors[j].IndexID = indexIDMapping[index.Interleave.Ancestors[j].IndexID]
- changed = true
- }
- }
- for j, c := range index.InterleavedBy {
- if c.Table == truncatedID {
- index.InterleavedBy[j].Index = indexIDMapping[index.InterleavedBy[j].Index]
- changed = true
- }
- }
- return nil
- }); err != nil {
- return err
- }
- if changed {
- if err := p.writeSchemaChange(ctx, table, descpb.InvalidMutationID, "updating reference for truncated table"); err != nil {
- return err
- }
- }
- }
- return nil
-}
-
func (p *planner) reassignIndexComments(
ctx context.Context, table *tabledesc.Mutable, indexIDMapping map[descpb.IndexID]descpb.IndexID,
) error {
@@ -713,11 +586,3 @@ func (p *planner) reassignIndexComments(
}
return nil
}
-
-// canClearRangeForDrop returns if an index can be deleted by deleting every
-// key from a single span.
-// This determines whether an index is dropped during a schema change, or if
-// it is only deleted upon GC.
-func canClearRangeForDrop(index catalog.Index) bool {
- return !index.IsInterleaved()
-}
diff --git a/pkg/sql/vars.go b/pkg/sql/vars.go
index b61c49535e6c..a5aa24af37cd 100644
--- a/pkg/sql/vars.go
+++ b/pkg/sql/vars.go
@@ -1634,24 +1634,6 @@ var varGen = map[string]sessionVar{
},
},
- `enable_copying_partitioning_when_deinterleaving_table`: {
- GetStringVal: makePostgresBoolGetStringValFn(`enable_experimental_stream_replication`),
- Set: func(_ context.Context, m sessionDataMutator, s string) error {
- b, err := paramparse.ParseBoolVar(`enable_experimental_stream_replication`, s)
- if err != nil {
- return err
- }
- m.SetCopyPartitioningWhenDeinterleavingTable(b)
- return nil
- },
- Get: func(evalCtx *extendedEvalContext) (string, error) {
- return formatBoolAsPostgresSetting(evalCtx.SessionData().CopyPartitioningWhenDeinterleavingTable), nil
- },
- GlobalDefault: func(sv *settings.Values) string {
- return formatBoolAsPostgresSetting(copyPartitioningWhenDeinterleavingTable.Get(sv))
- },
- },
-
`null_ordered_last`: {
GetStringVal: makePostgresBoolGetStringValFn(`null_ordered_last`),
Set: func(_ context.Context, m sessionDataMutator, s string) error {
diff --git a/pkg/testutils/sqlutils/table_gen.go b/pkg/testutils/sqlutils/table_gen.go
index 762a333f83fe..7fe710536cb2 100644
--- a/pkg/testutils/sqlutils/table_gen.go
+++ b/pkg/testutils/sqlutils/table_gen.go
@@ -57,7 +57,7 @@ func genValues(w io.Writer, firstRow, lastRow int, fn GenRowFn, shouldPrint bool
func CreateTable(
tb testing.TB, sqlDB *gosql.DB, tableName, schema string, numRows int, fn GenRowFn,
) {
- CreateTableInterleaved(tb, sqlDB, tableName, schema, "" /*interleaveSchema*/, numRows, fn)
+ CreateTableDebug(tb, sqlDB, tableName, schema, numRows, fn, false /* print */)
}
// CreateTableDebug is identical to debug, but allows for the added option of
@@ -70,38 +70,9 @@ func CreateTableDebug(
fn GenRowFn,
shouldPrint bool,
) {
- CreateTableInterleavedDebug(tb, sqlDB, tableName, schema, "" /*interleaveSchema*/, numRows, fn, shouldPrint)
-}
-
-// CreateTableInterleaved is identical to CreateTable with the added option
-// of specifying an interleave schema for interleaving the table.
-func CreateTableInterleaved(
- tb testing.TB,
- sqlDB *gosql.DB,
- tableName, schema, interleaveSchema string,
- numRows int,
- fn GenRowFn,
-) {
- CreateTableInterleavedDebug(tb, sqlDB, tableName, schema, interleaveSchema, numRows, fn, false /* print */)
-}
-
-// CreateTableInterleavedDebug is identical to CreateTableInterleaved with the
-// option of printing the table being created.
-func CreateTableInterleavedDebug(
- tb testing.TB,
- sqlDB *gosql.DB,
- tableName, schema, interleaveSchema string,
- numRows int,
- fn GenRowFn,
- shouldPrint bool,
-) {
- if interleaveSchema != "" {
- interleaveSchema = fmt.Sprintf(`INTERLEAVE IN PARENT %s.%s`, TestDB, interleaveSchema)
- }
-
r := MakeSQLRunner(sqlDB)
stmt := fmt.Sprintf(`CREATE DATABASE IF NOT EXISTS %s;`, TestDB)
- stmt += fmt.Sprintf(`CREATE TABLE %s.%s (%s) %s;`, TestDB, tableName, schema, interleaveSchema)
+ stmt += fmt.Sprintf(`CREATE TABLE %s.%s (%s);`, TestDB, tableName, schema)
r.Exec(tb, stmt)
if shouldPrint {
fmt.Printf("Creating table: %s\n%s\n", tableName, schema)
diff --git a/pkg/workload/ledger/ledger.go b/pkg/workload/ledger/ledger.go
index 1e68d06b3a54..1bd1eabb8543 100644
--- a/pkg/workload/ledger/ledger.go
+++ b/pkg/workload/ledger/ledger.go
@@ -21,7 +21,6 @@ import (
"github.com/cockroachdb/cockroach/pkg/util/timeutil"
"github.com/cockroachdb/cockroach/pkg/workload"
"github.com/cockroachdb/cockroach/pkg/workload/histogram"
- "github.com/cockroachdb/errors"
"github.com/spf13/pflag"
)
@@ -31,7 +30,6 @@ type ledger struct {
seed int64
customers int
- interleaved bool
inlineArgs bool
splits int
fks bool
@@ -60,7 +58,6 @@ var ledgerMeta = workload.Meta{
g.connFlags = workload.NewConnFlags(&g.flags)
g.flags.Int64Var(&g.seed, `seed`, 1, `Random number generator seed`)
g.flags.IntVar(&g.customers, `customers`, 1000, `Number of customers`)
- g.flags.BoolVar(&g.interleaved, `interleaved`, false, `Use interleaved tables`)
g.flags.BoolVar(&g.inlineArgs, `inline-args`, false, `Use inline query arguments`)
g.flags.IntVar(&g.splits, `splits`, 0, `Number of splits to perform before starting normal operations`)
g.flags.BoolVar(&g.fks, `fks`, true, `Add the foreign keys`)
@@ -87,9 +84,6 @@ func (w *ledger) Flags() workload.Flags { return w.flags }
func (w *ledger) Hooks() workload.Hooks {
return workload.Hooks{
Validate: func() error {
- if w.interleaved {
- return errors.Errorf("interleaved tables are not yet supported")
- }
return initializeMix(w)
},
PostLoad: func(sqlDB *gosql.DB) error {
diff --git a/pkg/workload/tpcc/ddls.go b/pkg/workload/tpcc/ddls.go
index ec0e1d0ed686..b52afdde9974 100644
--- a/pkg/workload/tpcc/ddls.go
+++ b/pkg/workload/tpcc/ddls.go
@@ -53,8 +53,6 @@ const (
family static (d_w_id, d_id, d_name, d_street_1, d_street_2, d_city, d_state, d_zip),
family dynamic_1 (d_ytd),
family dynamic_2 (d_next_o_id, d_tax)`
- tpccDistrictSchemaInterleaveSuffix = `
- interleave in parent warehouse (d_w_id)`
// CUSTOMER table.
tpccCustomerSchemaBase = `(
@@ -87,8 +85,6 @@ const (
c_city, c_state, c_zip, c_phone, c_since, c_credit, c_credit_lim, c_discount
),
family dynamic (c_balance, c_ytd_payment, c_payment_cnt, c_data, c_delivery_cnt)`
- tpccCustomerSchemaInterleaveSuffix = `
- interleave in parent district (c_w_id, c_d_id)`
// HISTORY table.
tpccHistorySchemaBase = `(
@@ -119,8 +115,6 @@ const (
primary key (o_w_id, o_d_id, o_id DESC),
unique index order_idx (o_w_id, o_d_id, o_c_id, o_id DESC) storing (o_entry_d, o_carrier_id)
`
- tpccOrderSchemaInterleaveSuffix = `
- interleave in parent district (o_w_id, o_d_id)`
// NEW-ORDER table.
tpccNewOrderSchema = `(
@@ -129,11 +123,6 @@ const (
no_w_id integer not null,
primary key (no_w_id, no_d_id, no_o_id)
`
- // This natural-seeming interleave makes performance worse, because this
- // table has a ton of churn and produces a lot of MVCC tombstones, which
- // then will gum up the works of scans over the parent table.
- // tpccNewOrderSchemaInterleaveSuffix = `
- // interleave in parent "order" (no_w_id, no_d_id, no_o_id)`
// ITEM table.
tpccItemSchema = `(
@@ -167,8 +156,6 @@ const (
primary key (s_w_id, s_i_id)`
deprecatedTpccStockSchemaFkSuffix = `
index stock_item_fk_idx (s_i_id)`
- tpccStockSchemaInterleaveSuffix = `
- interleave in parent warehouse (s_w_id)`
// ORDER-LINE table.
tpccOrderLineSchemaBase = `(
@@ -185,8 +172,6 @@ const (
primary key (ol_w_id, ol_d_id, ol_o_id DESC, ol_number)`
deprecatedTpccOrderLineSchemaFkSuffix = `
index order_line_stock_fk_idx (ol_supply_w_id, ol_i_id)`
- tpccOrderLineSchemaInterleaveSuffix = `
- interleave in parent "order" (ol_w_id, ol_d_id, ol_o_id)`
localityRegionalByRowSuffix = `
locality regional by row`
@@ -197,11 +182,10 @@ const (
)
type schemaOptions struct {
- fkClause string
- familyClause string
- columnClause string
- localityClause string
- interleaveClause string
+ fkClause string
+ familyClause string
+ columnClause string
+ localityClause string
}
type makeSchemaOption func(o *schemaOptions)
@@ -222,14 +206,6 @@ func maybeAddColumnFamiliesSuffix(separateColumnFamilies bool, suffix string) ma
}
}
-func maybeAddInterleaveSuffix(interleave bool, suffix string) makeSchemaOption {
- return func(o *schemaOptions) {
- if interleave {
- o.interleaveClause = suffix
- }
- }
-}
-
func maybeAddLocalityRegionalByRow(
multiRegionCfg multiRegionConfig, partColName string,
) makeSchemaOption {
@@ -271,9 +247,6 @@ func makeSchema(base string, opts ...makeSchemaOption) string {
if o.columnClause != "" {
ret += "," + o.columnClause
}
- if o.interleaveClause != "" {
- ret += "," + o.interleaveClause
- }
ret += endSchema
if o.localityClause != "" {
ret += o.localityClause
diff --git a/pkg/workload/tpcc/tpcc.go b/pkg/workload/tpcc/tpcc.go
index cf602ff43472..6ea0c7ffc11f 100644
--- a/pkg/workload/tpcc/tpcc.go
+++ b/pkg/workload/tpcc/tpcc.go
@@ -40,7 +40,6 @@ type tpcc struct {
seed uint64
warehouses int
activeWarehouses int
- interleaved bool
nowString []byte
numConns int
@@ -184,10 +183,6 @@ var tpccMeta = workload.Meta{
g.flags.IntVar(&g.warehouses, `warehouses`, 1, `Number of warehouses for loading`)
g.flags.BoolVar(&g.fks, `fks`, true, `Add the foreign keys`)
g.flags.BoolVar(&g.deprecatedFkIndexes, `deprecated-fk-indexes`, false, `Add deprecated foreign keys (needed when running against v20.1 or below clusters)`)
- g.flags.BoolVar(&g.interleaved, `interleaved`, false, `Use interleaved tables`)
- if err := g.Flags().MarkHidden("interleaved"); err != nil {
- panic(errors.Wrap(err, "no interleaved flag?"))
- }
g.flags.StringVar(&g.mix, `mix`,
`newOrder=10,payment=10,orderStatus=1,delivery=1,stockLevel=1`,
@@ -595,10 +590,6 @@ func (w *tpcc) Tables() []workload.Table {
w.separateColumnFamilies,
tpccDistrictColumnFamiliesSuffix,
),
- maybeAddInterleaveSuffix(
- w.interleaved,
- tpccDistrictSchemaInterleaveSuffix,
- ),
maybeAddLocalityRegionalByRow(w.multiRegionCfg, `d_w_id`),
),
InitialRows: workload.BatchedTuples{
@@ -617,10 +608,6 @@ func (w *tpcc) Tables() []workload.Table {
Name: `customer`,
Schema: makeSchema(
tpccCustomerSchemaBase,
- maybeAddInterleaveSuffix(
- w.interleaved,
- tpccCustomerSchemaInterleaveSuffix,
- ),
maybeAddColumnFamiliesSuffix(
w.separateColumnFamilies,
tpccCustomerColumnFamiliesSuffix,
@@ -659,10 +646,6 @@ func (w *tpcc) Tables() []workload.Table {
Name: `order`,
Schema: makeSchema(
tpccOrderSchemaBase,
- maybeAddInterleaveSuffix(
- w.interleaved,
- tpccOrderSchemaInterleaveSuffix,
- ),
maybeAddLocalityRegionalByRow(w.multiRegionCfg, `o_w_id`),
),
InitialRows: workload.BatchedTuples{
@@ -704,10 +687,6 @@ func (w *tpcc) Tables() []workload.Table {
Name: `stock`,
Schema: makeSchema(
tpccStockSchemaBase,
- maybeAddInterleaveSuffix(
- w.interleaved,
- tpccStockSchemaInterleaveSuffix,
- ),
maybeAddFkSuffix(
w.deprecatedFkIndexes,
deprecatedTpccStockSchemaFkSuffix,
@@ -724,10 +703,6 @@ func (w *tpcc) Tables() []workload.Table {
Name: `order_line`,
Schema: makeSchema(
tpccOrderLineSchemaBase,
- maybeAddInterleaveSuffix(
- w.interleaved,
- tpccOrderLineSchemaInterleaveSuffix,
- ),
maybeAddFkSuffix(
w.deprecatedFkIndexes,
deprecatedTpccOrderLineSchemaFkSuffix,