mirror of
https://github.com/mickael-kerjean/filestash
synced 2025-12-06 08:22:24 +01:00
feature (psql): psql backend improvements
This commit is contained in:
parent
c6a3808957
commit
2babd4205b
2 changed files with 42 additions and 10 deletions
|
|
@ -63,7 +63,11 @@ func (this PSQL) Cat(path string) (io.ReadCloser, error) {
|
|||
forms[i].Opts = link.values
|
||||
}
|
||||
}
|
||||
} else if values, err := _findEnumValues(this.ctx, this.db, columns[i]); err == nil && len(values) > 0 {
|
||||
forms[i].Type = "select"
|
||||
forms[i].Opts = values
|
||||
}
|
||||
|
||||
}
|
||||
b, err := Form{Elmnts: forms}.MarshalJSON()
|
||||
if err != nil {
|
||||
|
|
@ -117,3 +121,28 @@ func _findRelation(ctx context.Context, db *sql.DB, el Column) (LocationColumn,
|
|||
}
|
||||
return l, nil
|
||||
}
|
||||
|
||||
func _findEnumValues(ctx context.Context, db *sql.DB, el Column) ([]string, error) {
|
||||
var count int
|
||||
if err := db.QueryRowContext(ctx, `
|
||||
SELECT COUNT(*)
|
||||
FROM pg_type
|
||||
WHERE typname = $1 AND typtype = 'e'
|
||||
`, el.Type).Scan(&count); err != nil || count == 0 {
|
||||
return nil, err
|
||||
}
|
||||
rows, err := db.QueryContext(ctx, `SELECT unnest(enum_range(NULL::`+el.Type+`))`)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
values := []string{}
|
||||
for rows.Next() {
|
||||
var value string
|
||||
if err := rows.Scan(&value); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
values = append(values, value)
|
||||
}
|
||||
rows.Close()
|
||||
return values, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -87,6 +87,9 @@ func _calculateScore(column Column) int {
|
|||
scoreName := 1
|
||||
if slices.Contains(column.Constraint, "PRIMARY KEY") {
|
||||
scoreType = 3
|
||||
if column.Type == "uuid" {
|
||||
scoreType = 1
|
||||
}
|
||||
} else if slices.Contains(column.Constraint, "UNIQUE") {
|
||||
scoreType = 2
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue