// Package models contains generated code for schema 'db.sqlite'. package models // Code generated by xo. DO NOT EDIT. import ( "context" "database/sql" "database/sql/driver" "fmt" "io" "time" ) var ( // logf is used by generated code to log SQL queries. logf = func(string, ...interface{}) {} // errf is used by generated code to log SQL errors. errf = func(string, ...interface{}) {} ) // logerror logs the error and returns it. func logerror(err error) error { errf("ERROR: %v", err) return err } // Logf logs a message using the package logger. func Logf(s string, v ...interface{}) { logf(s, v...) } // SetLogger sets the package logger. Valid logger types: // // io.Writer // func(string, ...interface{}) (int, error) // fmt.Printf // func(string, ...interface{}) // log.Printf // func SetLogger(logger interface{}) { logf = convLogger(logger) } // Errorf logs an error message using the package error logger. func Errorf(s string, v ...interface{}) { errf(s, v...) } // SetErrorLogger sets the package error logger. Valid logger types: // // io.Writer // func(string, ...interface{}) (int, error) // fmt.Printf // func(string, ...interface{}) // log.Printf // func SetErrorLogger(logger interface{}) { errf = convLogger(logger) } // convLogger converts logger to the standard logger interface. func convLogger(logger interface{}) func(string, ...interface{}) { switch z := logger.(type) { case io.Writer: return func(s string, v ...interface{}) { fmt.Fprintf(z, s, v...) } case func(string, ...interface{}) (int, error): // fmt.Printf return func(s string, v ...interface{}) { _, _ = z(s, v...) } case func(string, ...interface{}): // log.Printf return z } panic(fmt.Sprintf("unsupported logger type %T", logger)) } // DB is the common interface for database operations that can be used with // types from schema 'db.sqlite'. // // This works with both database/sql.DB and database/sql.Tx. type DB interface { ExecContext(context.Context, string, ...interface{}) (sql.Result, error) QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) QueryRowContext(context.Context, string, ...interface{}) *sql.Row } // Error is an error. type Error string // Error satisfies the error interface. func (err Error) Error() string { return string(err) } // Error values. const ( // ErrAlreadyExists is the already exists error. ErrAlreadyExists Error = "already exists" // ErrDoesNotExist is the does not exist error. ErrDoesNotExist Error = "does not exist" // ErrMarkedForDeletion is the marked for deletion error. ErrMarkedForDeletion Error = "marked for deletion" ) // ErrInsertFailed is the insert failed error. type ErrInsertFailed struct { Err error } // Error satisfies the error interface. func (err *ErrInsertFailed) Error() string { return fmt.Sprintf("insert failed: %v", err.Err) } // Unwrap satisfies the unwrap interface. func (err *ErrInsertFailed) Unwrap() error { return err.Err } // ErrUpdateFailed is the update failed error. type ErrUpdateFailed struct { Err error } // Error satisfies the error interface. func (err *ErrUpdateFailed) Error() string { return fmt.Sprintf("update failed: %v", err.Err) } // Unwrap satisfies the unwrap interface. func (err *ErrUpdateFailed) Unwrap() error { return err.Err } // ErrUpsertFailed is the upsert failed error. type ErrUpsertFailed struct { Err error } // Error satisfies the error interface. func (err *ErrUpsertFailed) Error() string { return fmt.Sprintf("upsert failed: %v", err.Err) } // Unwrap satisfies the unwrap interface. func (err *ErrUpsertFailed) Unwrap() error { return err.Err } // ErrInvalidTime is the invalid Time error. type ErrInvalidTime string // Error satisfies the error interface. func (err ErrInvalidTime) Error() string { return fmt.Sprintf("invalid Time (%s)", string(err)) } // Time is a SQLite3 Time that scans for the various timestamps values used by // SQLite3 database drivers to store time.Time values. type Time struct { time time.Time } // NewTime creates a time. func NewTime(t time.Time) Time { return Time{time: t} } // String satisfies the fmt.Stringer interface. func (t Time) String() string { return t.time.String() } // Format formats the time. func (t Time) Format(layout string) string { return t.time.Format(layout) } // Time returns a time.Time. func (t Time) Time() time.Time { return t.time } // Value satisfies the sql/driver.Valuer interface. func (t Time) Value() (driver.Value, error) { return t.time, nil } // Scan satisfies the sql.Scanner interface. func (t *Time) Scan(v interface{}) error { switch x := v.(type) { case time.Time: t.time = x return nil case []byte: return t.Parse(string(x)) case string: return t.Parse(x) } return ErrInvalidTime(fmt.Sprintf("%T", v)) } // Parse attempts to Parse string s to t. func (t *Time) Parse(s string) error { if s == "" { return nil } for _, f := range TimestampFormats { if z, err := time.Parse(f, s); err == nil { t.time = z return nil } } return ErrInvalidTime(s) } // TimestampFormats are the timestamp formats used by SQLite3 database drivers // to store a time.Time in SQLite3. // // The first format in the slice will be used when saving time values into the // database. When parsing a string from a timestamp or datetime column, the // formats are tried in order. var TimestampFormats = []string{ // By default, use timestamps with the timezone they have. When parsed, // they will be returned with the same timezone. "2006-01-02 15:04:05.999999999-07:00", "2006-01-02T15:04:05.999999999-07:00", "2006-01-02 15:04:05.999999999", "2006-01-02T15:04:05.999999999", "2006-01-02 15:04:05", "2006-01-02T15:04:05", "2006-01-02 15:04", "2006-01-02T15:04", "2006-01-02", }