Co-authored-by: Jeffrey Smith <jasafpro@gmail.com> Co-committed-by: Jeffrey Smith <jasafpro@gmail.com>
56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package postgres
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
)
|
|
|
|
// ExtDataStore implements store.ExtDataStore for Postgres.
|
|
type ExtDataStore struct {
|
|
db *sql.DB
|
|
}
|
|
|
|
func NewExtDataStore(db *sql.DB) *ExtDataStore {
|
|
return &ExtDataStore{db: db}
|
|
}
|
|
|
|
func (s *ExtDataStore) RegisterTable(ctx context.Context, packageID, tableName string) error {
|
|
_, err := s.db.ExecContext(ctx,
|
|
`INSERT INTO ext_data_tables (package_id, table_name)
|
|
VALUES ($1, $2)
|
|
ON CONFLICT (package_id, table_name) DO NOTHING`,
|
|
packageID, tableName)
|
|
return err
|
|
}
|
|
|
|
func (s *ExtDataStore) ListTables(ctx context.Context, packageID string) ([]string, error) {
|
|
rows, err := s.db.QueryContext(ctx,
|
|
`SELECT table_name FROM ext_data_tables
|
|
WHERE package_id = $1
|
|
ORDER BY table_name`,
|
|
packageID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
|
|
var names []string
|
|
for rows.Next() {
|
|
var n string
|
|
if err := rows.Scan(&n); err != nil {
|
|
return nil, err
|
|
}
|
|
names = append(names, n)
|
|
}
|
|
if names == nil {
|
|
names = []string{}
|
|
}
|
|
return names, nil
|
|
}
|
|
|
|
func (s *ExtDataStore) DeletePackageTables(ctx context.Context, packageID string) error {
|
|
_, err := s.db.ExecContext(ctx,
|
|
`DELETE FROM ext_data_tables WHERE package_id = $1`, packageID)
|
|
return err
|
|
}
|