mirror of
https://github.com/mickael-kerjean/filestash.git
synced 2025-10-30 01:26:43 +08:00
81 lines
1.8 KiB
Go
81 lines
1.8 KiB
Go
package plg_backend_psql
|
|
|
|
import (
|
|
"os"
|
|
"time"
|
|
|
|
. "github.com/mickael-kerjean/filestash/server/common"
|
|
)
|
|
|
|
func (this PSQL) Ls(path string) ([]os.FileInfo, error) {
|
|
defer this.Close()
|
|
l, err := getPath(path)
|
|
if err != nil {
|
|
Log.Debug("pl_backend_psql::ls method=getPath err=%s", err.Error())
|
|
return nil, err
|
|
}
|
|
if l.table == "" {
|
|
rows, err := this.db.QueryContext(this.ctx, `
|
|
SELECT table_name FROM information_schema.tables
|
|
WHERE table_schema = 'public'
|
|
AND table_type = 'BASE TABLE'
|
|
`)
|
|
if err != nil {
|
|
Log.Debug("plg_backend_psql::ls method=query err=%s", err.Error())
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
out := []os.FileInfo{}
|
|
for rows.Next() {
|
|
var name string
|
|
if err := rows.Scan(&name); err != nil {
|
|
Log.Debug("plg_backend_psql::ls method=scan err=%s", err.Error())
|
|
return nil, err
|
|
}
|
|
out = append(out, File{
|
|
FName: name,
|
|
FType: "directory",
|
|
})
|
|
}
|
|
return out, nil
|
|
} else if l.row == "" {
|
|
columns, key, err := processTable(this.ctx, this.db, l.table)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
query := `SELECT "` + key + `", NULL FROM "` + l.table + `" LIMIT 500000`
|
|
for _, c := range columns {
|
|
if c.Type == "timestamptz" {
|
|
query = `SELECT "` + key + `", "` + c.Name + `" FROM "` + l.table + `" LIMIT 500000`
|
|
break
|
|
}
|
|
}
|
|
rows, err := this.db.QueryContext(this.ctx, query)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
out := []os.FileInfo{}
|
|
for rows.Next() {
|
|
var name string
|
|
var t *time.Time
|
|
if err = rows.Scan(&name, &t); err != nil {
|
|
return nil, err
|
|
}
|
|
out = append(out, File{
|
|
FName: name + ".form",
|
|
FType: "file",
|
|
FTime: func() int64 {
|
|
if t == nil {
|
|
return 0
|
|
}
|
|
return t.Unix()
|
|
}(),
|
|
FSize: -1,
|
|
})
|
|
}
|
|
return out, nil
|
|
}
|
|
return []os.FileInfo{}, ErrNotValid
|
|
}
|