lure/internal/db/db.go

68 lines
1.9 KiB
Go
Raw Normal View History

package db
import (
"github.com/genjidb/genji"
)
2022-12-01 06:15:34 +00:00
// Package is a LURE package's database representation
type Package struct {
Name string `sh:"name,required"`
Version string `sh:"version,required"`
Release int `sh:"release,required"`
Epoch uint `sh:"epoch"`
Description string `sh:"desc"`
Homepage string `sh:"homepage"`
Maintainer string `sh:"maintainer"`
Architectures []string `sh:"architectures"`
Licenses []string `sh:"license"`
Provides []string `sh:"provides"`
Conflicts []string `sh:"conflicts"`
2022-12-01 06:22:37 +00:00
Replaces []string `sh:"replaces"`
Depends map[string][]string
BuildDepends map[string][]string
Repository string
}
// Init initializes the database
func Init(db *genji.DB) error {
return db.Exec(`
CREATE TABLE IF NOT EXISTS pkgs (
2022-12-01 06:52:21 +00:00
name TEXT NOT NULL,
repository TEXT NOT NULL,
version TEXT NOT NULL,
release INT NOT NULL,
epoch INT,
description TEXT,
homepage TEXT,
maintainer TEXT,
2022-12-01 06:22:37 +00:00
architectures ARRAY,
2022-12-01 06:52:21 +00:00
licenses ARRAY,
provides ARRAY,
conflicts ARRAY,
replaces ARRAY,
depends (...),
builddepends (...),
2022-12-01 06:22:37 +00:00
UNIQUE(name, repository)
);
`)
}
// InsertPackage adds a package to the database
func InsertPackage(db *genji.DB, pkg Package) error {
return db.Exec("INSERT INTO pkgs VALUES ? ON CONFLICT DO REPLACE;", pkg)
}
// GetPkgs returns a result containing packages that match the where conditions
func GetPkgs(db *genji.DB, where string, args ...any) (*genji.Result, error) {
stream, err := db.Query("SELECT * FROM pkgs WHERE "+where, args...)
if err != nil {
return nil, err
}
return stream, nil
}
// DeletePkgs deletes all packages matching the where conditions
func DeletePkgs(db *genji.DB, where string, args ...any) error {
2022-12-04 22:52:46 +00:00
return db.Exec("DELETE FROM pkgs WHERE "+where, args...)
}