mirror of https://github.com/writeas/writefreely
A focused writing and publishing space.
https://write.with.parts
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
966 B
53 lines
966 B
package db
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
type CreateIndexSqlBuilder struct {
|
|
Dialect DialectType
|
|
Name string
|
|
Table string
|
|
Unique bool
|
|
Columns []string
|
|
}
|
|
|
|
type DropIndexSqlBuilder struct {
|
|
Dialect DialectType
|
|
Name string
|
|
Table string
|
|
}
|
|
|
|
func (b *CreateIndexSqlBuilder) ToSQL() (string, error) {
|
|
var str strings.Builder
|
|
|
|
str.WriteString("CREATE ")
|
|
if b.Unique {
|
|
str.WriteString("UNIQUE ")
|
|
}
|
|
str.WriteString("INDEX ")
|
|
str.WriteString(b.Name)
|
|
str.WriteString(" on ")
|
|
str.WriteString(b.Table)
|
|
|
|
if len(b.Columns) == 0 {
|
|
return "", fmt.Errorf("columns provided for this index: %s", b.Name)
|
|
}
|
|
|
|
str.WriteString(" (")
|
|
columnCount := len(b.Columns)
|
|
for i, thing := range b.Columns {
|
|
str.WriteString(thing)
|
|
if i < columnCount-1 {
|
|
str.WriteString(", ")
|
|
}
|
|
}
|
|
str.WriteString(")")
|
|
|
|
return str.String(), nil
|
|
}
|
|
|
|
func (b *DropIndexSqlBuilder) ToSQL() (string, error) {
|
|
return fmt.Sprintf("DROP INDEX %s on %s", b.Name, b.Table), nil
|
|
}
|
|
|