vet/pkg/storage/ent_sqlite.go
2025-01-29 13:21:12 +05:30

55 lines
1.0 KiB
Go

package storage
import (
"context"
"fmt"
"github.com/safedep/vet/ent"
)
type EntSqliteClientConfig struct {
// Path to the sqlite database file
Path string
// Read Only mode
ReadOnly bool
// Skip schema creation
SkipSchemaCreation bool
}
type entSqliteClient struct {
client *ent.Client
}
func NewEntSqliteClient(config EntSqliteClientConfig) (Storage[*ent.Client], error) {
mode := "rwc"
if config.ReadOnly {
mode = "r"
}
dbConn := fmt.Sprintf("file:%s?mode=%s&_fk=1", mode, config.Path)
client, err := ent.Open("sqlite3", dbConn)
if err != nil {
return nil, fmt.Errorf("failed to open sqlite3 connection: %w", err)
}
if !config.SkipSchemaCreation {
if err := client.Schema.Create(context.Background()); err != nil {
return nil, fmt.Errorf("failed to create schema resources: %w", err)
}
}
return &entSqliteClient{
client: client,
}, nil
}
func (c *entSqliteClient) Client() (*ent.Client, error) {
return c.client, nil
}
func (c *entSqliteClient) Close() error {
return c.client.Close()
}