Documentation
¶
Overview ¶
Package store provides the worklog data storage layer.
Index ¶
- Constants
- type DB
- func (db *DB) AmendEvents(ctx context.Context, ts time.Time, note *worklog.Amendment) (sql.Result, error)
- func (db *DB) Backup(ctx context.Context, n int, sleep time.Duration) (string, error)
- func (db *DB) BucketID(uid string) string
- func (db *DB) BucketMetadata(ctx context.Context, bid string) (*worklog.BucketMetadata, error)
- func (db *DB) Buckets(ctx context.Context) ([]worklog.BucketMetadata, error)
- func (db *DB) Close(_ context.Context) error
- func (db *DB) CreateBucket(ctx context.Context, uid, name, typ, client string, created time.Time, ...) (m *worklog.BucketMetadata, err error)
- func (db *DB) Dump(ctx context.Context) ([]worklog.BucketMetadata, error)
- func (db *DB) DumpRange(ctx context.Context, start, end time.Time) ([]worklog.BucketMetadata, error)
- func (db *DB) Events(ctx context.Context, bid string) ([]worklog.Event, error)
- func (db *DB) EventsRange(ctx context.Context, bid string, start, end time.Time, limit int) ([]worklog.Event, error)
- func (db *DB) EventsRangeFunc(ctx context.Context, bid string, start, end time.Time, limit int, ...) error
- func (db *DB) InsertEvent(ctx context.Context, e *worklog.Event) (sql.Result, error)
- func (db *DB) LastEvent(ctx context.Context, uid string) (*worklog.Event, error)
- func (db *DB) Load(ctx context.Context, buckets []worklog.BucketMetadata, replace bool) (err error)
- func (db *DB) Name() string
- func (db *DB) Select(ctx context.Context, query string) ([]map[string]any, error)
- func (db *DB) UpdateEvent(ctx context.Context, e *worklog.Event) (sql.Result, error)
Constants ¶
const ( EventsRange = `` /* 278-byte string literal not displayed */ EventsRangeUntil = `` /* 221-byte string literal not displayed */ EventsRangeFrom = `` /* 219-byte string literal not displayed */ EventsLimit = `` /* 162-byte string literal not displayed */ )
const AmendEvents = `` /* 1327-byte string literal not displayed */
const BucketMetadata = `select id, name, type, client, hostname, created, datastr from buckets where id = ?`
const Buckets = `select id, name, type, client, hostname, created, datastr from buckets`
const CreateBucket = `insert into buckets(id, name, type, client, hostname, created, datastr) values (?, ?, ?, ?, ?, ?, ?)`
const DeleteBucket = `delete from buckets where id = ?`
const DeleteBucketEvents = `delete from events where bucketrow in (
select rowid from buckets where id = ?
)`
const DeleteEvent = `delete from events where bucketrow = (
select rowid from buckets where id = ?
) and id = ?`
const Event = `` /* 131-byte string literal not displayed */
const Events = `select id, starttime, endtime, datastr from events where bucketrow = (
select rowid from buckets where id = ?
)`
const InsertEvent = `insert into events(bucketrow, starttime, endtime, datastr) values ((select rowid from buckets where id = ?), ?, ?, ?)`
const LastEvent = `` /* 285-byte string literal not displayed */
const Schema = `` /* 832-byte string literal not displayed */
Schema is the DB schema.
const UpdateEvent = `` /* 130-byte string literal not displayed */
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type DB ¶
type DB struct {
// contains filtered or unexported fields
}
DB is a persistent store.
func Open ¶
Open opens an existing DB. See https://pkg.go.dev/modernc.org/sqlite#Driver.Open for name handling details. Two connections to the database are created, one with mode=rwc and one with mode=ro. Any mode in the provided name will be ignored. Open attempts to get the CNAME for the host, which may wait indefinitely, so a timeout context can be provided to fall back to the kernel-provided hostname.
func (*DB) AmendEvents ¶
func (db *DB) AmendEvents(ctx context.Context, ts time.Time, note *worklog.Amendment) (sql.Result, error)
AmendEvents adds amendment notes to the data for events in the store overlapping the note. On return the note.Replace slice will be sorted.
The SQL command run is AmendEvents.
func (*DB) Backup ¶
Backup creates a backup of the DB using the SQLite backup API, sleeping between each step of n pages. n must fit into an int32, and if it is zero or less, the full database will be backed up in a single step. It returns the path of the backup.
func (*DB) BucketMetadata ¶
BucketMetadata returns the metadata for the bucket with the provided internal bucket ID. The SQL command run is BucketMetadata.
func (*DB) Buckets ¶
Buckets returns the full set of bucket metadata. The SQL command run is Buckets.
func (*DB) CreateBucket ¶
func (db *DB) CreateBucket(ctx context.Context, uid, name, typ, client string, created time.Time, data map[string]any) (m *worklog.BucketMetadata, err error)
CreateBucket creates a new entry in the bucket table. If the entry already exists it will return an sqlite.Error with the code sqlite3.SQLITE_CONSTRAINT_UNIQUE. The SQL command run is CreateBucket.
func (*DB) Dump ¶
Dump dumps the complete database into a slice of worklog.BucketMetadata.
func (*DB) DumpRange ¶
func (db *DB) DumpRange(ctx context.Context, start, end time.Time) ([]worklog.BucketMetadata, error)
DumpRange dumps the database spanning the specified time range into a slice of worklog.BucketMetadata.
func (*DB) Events ¶
Buckets returns the full set of events in the bucket with the provided internal bucket ID. The SQL command run is Events.
func (*DB) EventsRange ¶
func (db *DB) EventsRange(ctx context.Context, bid string, start, end time.Time, limit int) ([]worklog.Event, error)
EventsRange returns the events in the bucket with the provided bucket ID within the specified time range, sorted descending by end time. The SQL command run is EventsRange, EventsRangeUntil, EventsRangeFrom or EventsLimit depending on whether start and end are zero.
func (*DB) EventsRangeFunc ¶
func (db *DB) EventsRangeFunc(ctx context.Context, bid string, start, end time.Time, limit int, fn func(worklog.Event) error) error
EventsRange calls fn on all the events in the bucket with the provided bucket ID within the specified time range, sorted descending by end time. The SQL command run is EventsRange, EventsRangeUntil, EventsRangeFrom or EventsLimit depending on whether start and end are zero.
func (*DB) InsertEvent ¶
InsertEvent inserts a new event into the events table. The SQL command run is InsertEvent.
func (*DB) LastEvent ¶
LastEvent returns the last event in the named bucket. The SQL command run is LastEvent.
func (*DB) Load ¶
Load loads a complete database from a slice of worklog.BucketMetadata. Event IDs will be regenerated by the backing database and so will not match the input data. If replace is true and a bucket already exists matching the bucket in the provided buckets slice, the existing events will be deleted and replaced. If replace is false, the new events will be added to the existing events in the store.