chore: added normal index in sql schema

This commit is contained in:
aniket 2025-10-02 15:48:59 +05:30
parent cbb24d9a34
commit 5e3449db63
No known key found for this signature in database
GPG Key ID: 0A7D63CA7885F524
2 changed files with 100 additions and 0 deletions

View File

@ -114,3 +114,78 @@ func (index *UniqueIndex) ToDropSQL(fmter SQLFormatter) []byte {
return sql return sql
} }
type NormalIndex struct {
TableName TableName
ColumnNames []ColumnName
name string
}
func (index *NormalIndex) Name() string {
if index.name != "" {
return index.name
}
var b strings.Builder
b.WriteString(IndexTypeIndex.String())
b.WriteString("_")
b.WriteString(string(index.TableName))
b.WriteString("_")
for i, column := range index.ColumnNames {
if i > 0 {
b.WriteString("_")
}
b.WriteString(string(column))
}
return b.String()
}
func (index *NormalIndex) Named(name string) Index {
copyOfColumnNames := make([]ColumnName, len(index.ColumnNames))
copy(copyOfColumnNames, index.ColumnNames)
return &NormalIndex{
TableName: index.TableName,
ColumnNames: copyOfColumnNames,
name: name,
}
}
func (*NormalIndex) Type() IndexType {
return IndexTypeIndex
}
func (index *NormalIndex) Columns() []ColumnName {
return index.ColumnNames
}
func (index *NormalIndex) ToCreateSQL(fmter SQLFormatter) []byte {
sql := []byte{}
sql = append(sql, "CREATE INDEX IF NOT EXISTS "...)
sql = fmter.AppendIdent(sql, index.Name())
sql = append(sql, " ON "...)
sql = fmter.AppendIdent(sql, string(index.TableName))
sql = append(sql, " ("...)
for i, column := range index.ColumnNames {
if i > 0 {
sql = append(sql, ", "...)
}
sql = fmter.AppendIdent(sql, string(column))
}
sql = append(sql, ")"...)
return sql
}
func (index *NormalIndex) ToDropSQL(fmter SQLFormatter) []byte {
sql := []byte{}
sql = append(sql, "DROP INDEX IF EXISTS "...)
sql = fmter.AppendIdent(sql, index.Name())
return sql
}

View File

@ -38,6 +38,31 @@ func TestIndexToCreateSQL(t *testing.T) {
}, },
sql: `CREATE UNIQUE INDEX IF NOT EXISTS "my_index" ON "users" ("id", "name", "email")`, sql: `CREATE UNIQUE INDEX IF NOT EXISTS "my_index" ON "users" ("id", "name", "email")`,
}, },
{
name: "Normal_1Column",
index: &NormalIndex{
TableName: "users",
ColumnNames: []ColumnName{"org_id"},
},
sql: `CREATE INDEX IF NOT EXISTS "ix_users_org_id" ON "users" ("org_id")`,
},
{
name: "Normal_2Columns",
index: &NormalIndex{
TableName: "users",
ColumnNames: []ColumnName{"org_id", "status"},
},
sql: `CREATE INDEX IF NOT EXISTS "ix_users_org_id_status" ON "users" ("org_id", "status")`,
},
{
name: "Normal_3Columns_Named",
index: &NormalIndex{
TableName: "route_policy",
ColumnNames: []ColumnName{"org_id", "enabled", "kind"},
name: "idx_custom_name",
},
sql: `CREATE INDEX IF NOT EXISTS "idx_custom_name" ON "route_policy" ("org_id", "enabled", "kind")`,
},
} }
for _, testCase := range testCases { for _, testCase := range testCases {