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.enabledbooleanfalseif true, creating sequences owned by tables from other databases is allowed sql.cross_db_sequence_references.enabledbooleanfalseif true, sequences referenced by tables from other databases are allowed sql.cross_db_views.enabledbooleanfalseif true, creating views that refer to other databases is allowed -sql.defaults.copy_partitioning_when_deinterleaving_table.enabledbooleanfalsedefault value for enable_copying_partitioning_when_deinterleaving_table session variable sql.defaults.datestyleenumerationiso, mdydefault value for DateStyle session setting [iso, mdy = 0, iso, dmy = 1, iso, ymd = 2] sql.defaults.datestyle.enabledbooleanfalsedefault value for datestyle_enabled session setting sql.defaults.default_int_sizeinteger8the 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,