# Create four indexes:
# 1. a 'vanilla' index;
# 2. a partial, expression index;
# 3. a hash-sharded index;
# 4. TODO(xiang): a unique, composite index with a dependent view and a dependent FK constraint
setup
CREATE TABLE t1(i INT, j STRING);
CREATE INDEX idx1 ON t1(i);
CREATE INDEX idx2 ON t1(lower(j)) WHERE i > 0;
CREATE INDEX idx3 ON t1(i) USING HASH;
CREATE VIEW v AS SELECT count(j) FROM t1@idx3;
CREATE MATERIALIZED VIEW v2 AS SELECT i, j FROM t1;
CREATE INDEX idx ON v2(j);
CREATE MATERIALIZED VIEW v3 AS SELECT j FROM v2@idx
----

build
DROP INDEX idx1 CASCADE
----
- [[IndexData:{DescID: 104, IndexID: 1}, PUBLIC], PUBLIC]
  {indexId: 1, tableId: 104}
- [[IndexColumn:{DescID: 104, ColumnID: 1, IndexID: 2}, ABSENT], PUBLIC]
  {columnId: 1, indexId: 2, tableId: 104}
- [[IndexColumn:{DescID: 104, ColumnID: 3, IndexID: 2}, ABSENT], PUBLIC]
  {columnId: 3, indexId: 2, kind: KEY_SUFFIX, tableId: 104}
- [[SecondaryIndex:{DescID: 104, IndexID: 2, ConstraintID: 0, RecreateSourceIndexID: 0}, ABSENT], PUBLIC]
  {indexId: 2, isCreatedExplicitly: true, tableId: 104}
- [[IndexName:{DescID: 104, Name: idx1, IndexID: 2}, ABSENT], PUBLIC]
  {indexId: 2, name: idx1, tableId: 104}
- [[IndexData:{DescID: 104, IndexID: 2}, ABSENT], PUBLIC]
  {indexId: 2, tableId: 104}
- [[IndexData:{DescID: 104, IndexID: 4}, PUBLIC], PUBLIC]
  {indexId: 4, tableId: 104}
- [[IndexData:{DescID: 104, IndexID: 6}, PUBLIC], PUBLIC]
  {indexId: 6, tableId: 104}
- [[TableData:{DescID: 104, ReferencedDescID: 100}, PUBLIC], PUBLIC]
  {databaseId: 100, tableId: 104}

build
DROP INDEX idx2 CASCADE
----
- [[Column:{DescID: 104, ColumnID: 4}, ABSENT], PUBLIC]
  {columnId: 4, isInaccessible: true, tableId: 104}
- [[ColumnName:{DescID: 104, Name: crdb_internal_idx_expr, ColumnID: 4}, ABSENT], PUBLIC]
  {columnId: 4, name: crdb_internal_idx_expr, tableId: 104}
- [[ColumnComputeExpression:{DescID: 104, ColumnID: 4, Usage: REGULAR}, ABSENT], PUBLIC]
  {columnId: 4, expr: lower(j), referencedColumnIds: [2], tableId: 104}
- [[ColumnType:{DescID: 104, ColumnFamilyID: 0, ColumnID: 4, TypeName: STRING}, ABSENT], PUBLIC]
  {columnId: 4, elementCreationMetadata: {in231OrLater: true, in243OrLater: true}, isNullable: true, isVirtual: true, tableId: 104, type: {family: StringFamily, oid: 25}, typeName: STRING}
- [[IndexData:{DescID: 104, IndexID: 1}, PUBLIC], PUBLIC]
  {indexId: 1, tableId: 104}
- [[IndexData:{DescID: 104, IndexID: 2}, PUBLIC], PUBLIC]
  {indexId: 2, tableId: 104}
- [[IndexColumn:{DescID: 104, ColumnID: 4, IndexID: 4}, ABSENT], PUBLIC]
  {columnId: 4, indexId: 4, tableId: 104}
- [[IndexColumn:{DescID: 104, ColumnID: 3, IndexID: 4}, ABSENT], PUBLIC]
  {columnId: 3, indexId: 4, kind: KEY_SUFFIX, tableId: 104}
- [[SecondaryIndex:{DescID: 104, IndexID: 4, ConstraintID: 0, RecreateSourceIndexID: 0}, ABSENT], PUBLIC]
  {expr: 'i > 0:::INT8', indexId: 4, isCreatedExplicitly: true, referencedColumnIds: [1], tableId: 104}
- [[IndexName:{DescID: 104, Name: idx2, IndexID: 4}, ABSENT], PUBLIC]
  {indexId: 4, name: idx2, tableId: 104}
- [[IndexData:{DescID: 104, IndexID: 4}, ABSENT], PUBLIC]
  {indexId: 4, tableId: 104}
- [[IndexData:{DescID: 104, IndexID: 6}, PUBLIC], PUBLIC]
  {indexId: 6, tableId: 104}
- [[TableData:{DescID: 104, ReferencedDescID: 100}, PUBLIC], PUBLIC]
  {databaseId: 100, tableId: 104}

build
DROP INDEX idx3 CASCADE
----
- [[Column:{DescID: 104, ColumnID: 5}, ABSENT], PUBLIC]
  {columnId: 5, isHidden: true, tableId: 104}
- [[ColumnName:{DescID: 104, Name: crdb_internal_i_shard_16, ColumnID: 5}, ABSENT], PUBLIC]
  {columnId: 5, name: crdb_internal_i_shard_16, tableId: 104}
- [[ColumnComputeExpression:{DescID: 104, ColumnID: 5, Usage: REGULAR}, ABSENT], PUBLIC]
  {columnId: 5, expr: 'mod(fnv32(md5(crdb_internal.datums_to_bytes(i))), 16:::INT8)', referencedColumnIds: [1], tableId: 104}
- [[ColumnType:{DescID: 104, ColumnFamilyID: 0, ColumnID: 5, TypeName: INT8}, ABSENT], PUBLIC]
  {columnId: 5, elementCreationMetadata: {in231OrLater: true, in243OrLater: true}, isVirtual: true, tableId: 104, type: {family: IntFamily, oid: 20, width: 64}, typeName: INT8}
- [[ColumnNotNull:{DescID: 104, ColumnID: 5, IndexID: 0}, ABSENT], PUBLIC]
  {columnId: 5, tableId: 104}
- [[IndexData:{DescID: 104, IndexID: 1}, PUBLIC], PUBLIC]
  {indexId: 1, tableId: 104}
- [[IndexData:{DescID: 104, IndexID: 2}, PUBLIC], PUBLIC]
  {indexId: 2, tableId: 104}
- [[IndexData:{DescID: 104, IndexID: 4}, PUBLIC], PUBLIC]
  {indexId: 4, tableId: 104}
- [[IndexColumn:{DescID: 104, ColumnID: 5, IndexID: 6}, ABSENT], PUBLIC]
  {columnId: 5, indexId: 6, tableId: 104}
- [[IndexColumn:{DescID: 104, ColumnID: 1, IndexID: 6}, ABSENT], PUBLIC]
  {columnId: 1, indexId: 6, ordinalInKind: 1, tableId: 104}
- [[IndexColumn:{DescID: 104, ColumnID: 3, IndexID: 6}, ABSENT], PUBLIC]
  {columnId: 3, indexId: 6, kind: KEY_SUFFIX, tableId: 104}
- [[SecondaryIndex:{DescID: 104, IndexID: 6, ConstraintID: 0, RecreateSourceIndexID: 0}, ABSENT], PUBLIC]
  {indexId: 6, isCreatedExplicitly: true, sharding: {columnNames: [i], isSharded: true, name: crdb_internal_i_shard_16, shardBuckets: 16}, tableId: 104}
- [[IndexName:{DescID: 104, Name: idx3, IndexID: 6}, ABSENT], PUBLIC]
  {indexId: 6, name: idx3, tableId: 104}
- [[IndexData:{DescID: 104, IndexID: 6}, ABSENT], PUBLIC]
  {indexId: 6, tableId: 104}
- [[CheckConstraint:{DescID: 104, IndexID: 0, ConstraintID: 2, ReferencedColumnIDs: [5]}, ABSENT], PUBLIC]
  {columnIds: [5], constraintId: 2, expr: 'crdb_internal_i_shard_16 IN (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)', fromHashShardedColumn: true, referencedColumnIds: [5], tableId: 104}
- [[ConstraintWithoutIndexName:{DescID: 104, Name: check_crdb_internal_i_shard_16, ConstraintID: 2}, ABSENT], PUBLIC]
  {constraintId: 2, name: check_crdb_internal_i_shard_16, tableId: 104}
- [[TableData:{DescID: 104, ReferencedDescID: 100}, PUBLIC], PUBLIC]
  {databaseId: 100, tableId: 104}
- [[Namespace:{DescID: 105, Name: v, ReferencedDescID: 100}, ABSENT], PUBLIC]
  {databaseId: 100, descriptorId: 105, name: v, schemaId: 101}
- [[Owner:{DescID: 105}, ABSENT], PUBLIC]
  {descriptorId: 105, owner: root}
- [[UserPrivileges:{DescID: 105, Name: admin}, ABSENT], PUBLIC]
  {descriptorId: 105, privileges: "2", userName: admin, withGrantOption: "2"}
- [[UserPrivileges:{DescID: 105, Name: root}, ABSENT], PUBLIC]
  {descriptorId: 105, privileges: "2", userName: root, withGrantOption: "2"}
- [[View:{DescID: 105}, ABSENT], PUBLIC]
  {forwardReferences: [{columnIds: [2], indexId: 6, toId: 104}], usesRelationIds: [104], viewId: 105}
- [[SchemaChild:{DescID: 105, ReferencedDescID: 101}, ABSENT], PUBLIC]
  {childObjectId: 105, schemaId: 101}
- [[Column:{DescID: 105, ColumnID: 1}, ABSENT], PUBLIC]
  {columnId: 1, tableId: 105}
- [[ColumnName:{DescID: 105, Name: count, ColumnID: 1}, ABSENT], PUBLIC]
  {columnId: 1, name: count, tableId: 105}
- [[ColumnType:{DescID: 105, ColumnFamilyID: 0, ColumnID: 1, TypeName: INT8}, ABSENT], PUBLIC]
  {columnId: 1, elementCreationMetadata: {in231OrLater: true, in243OrLater: true}, isNullable: true, tableId: 105, type: {family: IntFamily, oid: 20, width: 64}, typeName: INT8}
- [[Column:{DescID: 105, ColumnID: 4294967295}, ABSENT], PUBLIC]
  {columnId: 4.294967295e+09, isHidden: true, isSystemColumn: true, tableId: 105}
- [[ColumnName:{DescID: 105, Name: crdb_internal_mvcc_timestamp, ColumnID: 4294967295}, ABSENT], PUBLIC]
  {columnId: 4.294967295e+09, name: crdb_internal_mvcc_timestamp, tableId: 105}
- [[ColumnType:{DescID: 105, ColumnFamilyID: 0, ColumnID: 4294967295, TypeName: DECIMAL}, ABSENT], PUBLIC]
  {columnId: 4.294967295e+09, elementCreationMetadata: {in231OrLater: true, in243OrLater: true}, isNullable: true, tableId: 105, type: {family: DecimalFamily, oid: 1700}, typeName: DECIMAL}
- [[Column:{DescID: 105, ColumnID: 4294967294}, ABSENT], PUBLIC]
  {columnId: 4.294967294e+09, isHidden: true, isSystemColumn: true, tableId: 105}
- [[ColumnName:{DescID: 105, Name: tableoid, ColumnID: 4294967294}, ABSENT], PUBLIC]
  {columnId: 4.294967294e+09, name: tableoid, tableId: 105}
- [[ColumnType:{DescID: 105, ColumnFamilyID: 0, ColumnID: 4294967294, TypeName: OID}, ABSENT], PUBLIC]
  {columnId: 4.294967294e+09, elementCreationMetadata: {in231OrLater: true, in243OrLater: true}, isNullable: true, tableId: 105, type: {family: OidFamily, oid: 26}, typeName: OID}
- [[Column:{DescID: 105, ColumnID: 4294967293}, ABSENT], PUBLIC]
  {columnId: 4.294967293e+09, isHidden: true, isSystemColumn: true, tableId: 105}
- [[ColumnName:{DescID: 105, Name: crdb_internal_origin_id, ColumnID: 4294967293}, ABSENT], PUBLIC]
  {columnId: 4.294967293e+09, name: crdb_internal_origin_id, tableId: 105}
- [[ColumnType:{DescID: 105, ColumnFamilyID: 0, ColumnID: 4294967293, TypeName: INT4}, ABSENT], PUBLIC]
  {columnId: 4.294967293e+09, elementCreationMetadata: {in231OrLater: true, in243OrLater: true}, isNullable: true, tableId: 105, type: {family: IntFamily, oid: 23, width: 32}, typeName: INT4}
- [[Column:{DescID: 105, ColumnID: 4294967292}, ABSENT], PUBLIC]
  {columnId: 4.294967292e+09, isHidden: true, isSystemColumn: true, tableId: 105}
- [[ColumnName:{DescID: 105, Name: crdb_internal_origin_timestamp, ColumnID: 4294967292}, ABSENT], PUBLIC]
  {columnId: 4.294967292e+09, name: crdb_internal_origin_timestamp, tableId: 105}
- [[ColumnType:{DescID: 105, ColumnFamilyID: 0, ColumnID: 4294967292, TypeName: DECIMAL}, ABSENT], PUBLIC]
  {columnId: 4.294967292e+09, elementCreationMetadata: {in231OrLater: true, in243OrLater: true}, isNullable: true, tableId: 105, type: {family: DecimalFamily, oid: 1700}, typeName: DECIMAL}

build
DROP INDEX v2@idx CASCADE
----
- [[IndexData:{DescID: 106, IndexID: 1}, PUBLIC], PUBLIC]
  {indexId: 1, tableId: 106}
- [[IndexColumn:{DescID: 106, ColumnID: 2, IndexID: 2}, ABSENT], PUBLIC]
  {columnId: 2, indexId: 2, tableId: 106}
- [[IndexColumn:{DescID: 106, ColumnID: 3, IndexID: 2}, ABSENT], PUBLIC]
  {columnId: 3, indexId: 2, kind: KEY_SUFFIX, tableId: 106}
- [[SecondaryIndex:{DescID: 106, IndexID: 2, ConstraintID: 0, RecreateSourceIndexID: 0}, ABSENT], PUBLIC]
  {indexId: 2, isCreatedExplicitly: true, tableId: 106}
- [[IndexName:{DescID: 106, Name: idx, IndexID: 2}, ABSENT], PUBLIC]
  {indexId: 2, name: idx, tableId: 106}
- [[IndexData:{DescID: 106, IndexID: 2}, ABSENT], PUBLIC]
  {indexId: 2, tableId: 106}
- [[TableData:{DescID: 106, ReferencedDescID: 100}, PUBLIC], PUBLIC]
  {databaseId: 100, tableId: 106}
- [[Namespace:{DescID: 107, Name: v3, ReferencedDescID: 100}, ABSENT], PUBLIC]
  {databaseId: 100, descriptorId: 107, name: v3, schemaId: 101}
- [[Owner:{DescID: 107}, ABSENT], PUBLIC]
  {descriptorId: 107, owner: root}
- [[UserPrivileges:{DescID: 107, Name: admin}, ABSENT], PUBLIC]
  {descriptorId: 107, privileges: "2", userName: admin, withGrantOption: "2"}
- [[UserPrivileges:{DescID: 107, Name: root}, ABSENT], PUBLIC]
  {descriptorId: 107, privileges: "2", userName: root, withGrantOption: "2"}
- [[View:{DescID: 107}, ABSENT], PUBLIC]
  {forwardReferences: [{columnIds: [2], indexId: 2, toId: 106}], isMaterialized: true, usesRelationIds: [106], viewId: 107}
- [[SchemaChild:{DescID: 107, ReferencedDescID: 101}, ABSENT], PUBLIC]
  {childObjectId: 107, schemaId: 101}
- [[ColumnFamily:{DescID: 107, Name: primary, ColumnFamilyID: 0}, ABSENT], PUBLIC]
  {name: primary, tableId: 107}
- [[Column:{DescID: 107, ColumnID: 1}, ABSENT], PUBLIC]
  {columnId: 1, tableId: 107}
- [[ColumnName:{DescID: 107, Name: j, ColumnID: 1}, ABSENT], PUBLIC]
  {columnId: 1, name: j, tableId: 107}
- [[ColumnType:{DescID: 107, ColumnFamilyID: 0, ColumnID: 1, TypeName: STRING}, ABSENT], PUBLIC]
  {columnId: 1, elementCreationMetadata: {in231OrLater: true, in243OrLater: true}, isNullable: true, tableId: 107, type: {family: StringFamily, oid: 25}, typeName: STRING}
- [[Column:{DescID: 107, ColumnID: 2}, ABSENT], PUBLIC]
  {columnId: 2, isHidden: true, tableId: 107}
- [[ColumnName:{DescID: 107, Name: rowid, ColumnID: 2}, ABSENT], PUBLIC]
  {columnId: 2, name: rowid, tableId: 107}
- [[ColumnType:{DescID: 107, ColumnFamilyID: 0, ColumnID: 2, TypeName: INT8}, ABSENT], PUBLIC]
  {columnId: 2, elementCreationMetadata: {in231OrLater: true, in243OrLater: true}, tableId: 107, type: {family: IntFamily, oid: 20, width: 64}, typeName: INT8}
- [[ColumnNotNull:{DescID: 107, ColumnID: 2, IndexID: 0}, ABSENT], PUBLIC]
  {columnId: 2, tableId: 107}
- [[ColumnDefaultExpression:{DescID: 107, ColumnID: 2, Expr: unique_rowid()}, ABSENT], PUBLIC]
  {columnId: 2, expr: unique_rowid(), tableId: 107}
- [[Column:{DescID: 107, ColumnID: 4294967295}, ABSENT], PUBLIC]
  {columnId: 4.294967295e+09, isHidden: true, isSystemColumn: true, tableId: 107}
- [[ColumnName:{DescID: 107, Name: crdb_internal_mvcc_timestamp, ColumnID: 4294967295}, ABSENT], PUBLIC]
  {columnId: 4.294967295e+09, name: crdb_internal_mvcc_timestamp, tableId: 107}
- [[ColumnType:{DescID: 107, ColumnFamilyID: 0, ColumnID: 4294967295, TypeName: DECIMAL}, ABSENT], PUBLIC]
  {columnId: 4.294967295e+09, elementCreationMetadata: {in231OrLater: true, in243OrLater: true}, isNullable: true, tableId: 107, type: {family: DecimalFamily, oid: 1700}, typeName: DECIMAL}
- [[Column:{DescID: 107, ColumnID: 4294967294}, ABSENT], PUBLIC]
  {columnId: 4.294967294e+09, isHidden: true, isSystemColumn: true, tableId: 107}
- [[ColumnName:{DescID: 107, Name: tableoid, ColumnID: 4294967294}, ABSENT], PUBLIC]
  {columnId: 4.294967294e+09, name: tableoid, tableId: 107}
- [[ColumnType:{DescID: 107, ColumnFamilyID: 0, ColumnID: 4294967294, TypeName: OID}, ABSENT], PUBLIC]
  {columnId: 4.294967294e+09, elementCreationMetadata: {in231OrLater: true, in243OrLater: true}, isNullable: true, tableId: 107, type: {family: OidFamily, oid: 26}, typeName: OID}
- [[Column:{DescID: 107, ColumnID: 4294967293}, ABSENT], PUBLIC]
  {columnId: 4.294967293e+09, isHidden: true, isSystemColumn: true, tableId: 107}
- [[ColumnName:{DescID: 107, Name: crdb_internal_origin_id, ColumnID: 4294967293}, ABSENT], PUBLIC]
  {columnId: 4.294967293e+09, name: crdb_internal_origin_id, tableId: 107}
- [[ColumnType:{DescID: 107, ColumnFamilyID: 0, ColumnID: 4294967293, TypeName: INT4}, ABSENT], PUBLIC]
  {columnId: 4.294967293e+09, elementCreationMetadata: {in231OrLater: true, in243OrLater: true}, isNullable: true, tableId: 107, type: {family: IntFamily, oid: 23, width: 32}, typeName: INT4}
- [[Column:{DescID: 107, ColumnID: 4294967292}, ABSENT], PUBLIC]
  {columnId: 4.294967292e+09, isHidden: true, isSystemColumn: true, tableId: 107}
- [[ColumnName:{DescID: 107, Name: crdb_internal_origin_timestamp, ColumnID: 4294967292}, ABSENT], PUBLIC]
  {columnId: 4.294967292e+09, name: crdb_internal_origin_timestamp, tableId: 107}
- [[ColumnType:{DescID: 107, ColumnFamilyID: 0, ColumnID: 4294967292, TypeName: DECIMAL}, ABSENT], PUBLIC]
  {columnId: 4.294967292e+09, elementCreationMetadata: {in231OrLater: true, in243OrLater: true}, isNullable: true, tableId: 107, type: {family: DecimalFamily, oid: 1700}, typeName: DECIMAL}
- [[IndexColumn:{DescID: 107, ColumnID: 2, IndexID: 1}, ABSENT], PUBLIC]
  {columnId: 2, indexId: 1, tableId: 107}
- [[IndexColumn:{DescID: 107, ColumnID: 1, IndexID: 1}, ABSENT], PUBLIC]
  {columnId: 1, indexId: 1, kind: STORED, tableId: 107}
- [[PrimaryIndex:{DescID: 107, IndexID: 1, ConstraintID: 1}, ABSENT], PUBLIC]
  {constraintId: 1, indexId: 1, isUnique: true, tableId: 107}
- [[IndexName:{DescID: 107, Name: v3_pkey, IndexID: 1}, ABSENT], PUBLIC]
  {indexId: 1, name: v3_pkey, tableId: 107}
- [[IndexData:{DescID: 107, IndexID: 1}, ABSENT], PUBLIC]
  {indexId: 1, tableId: 107}
- [[TableData:{DescID: 107, ReferencedDescID: 100}, ABSENT], PUBLIC]
  {databaseId: 100, tableId: 107}
