Documentation
¶
Overview ¶
Package db offers client struct and functions to interact with database connection. It provides encrypting, decrypting, and a way to reset the database.
Index ¶
Constants ¶
const ( // InformerObjectCacheDBPath is where SQLite's object database file will be stored relative to process running steve // It's given in two parts because the root is used as the suffix for the tempfile, and then we'll add a ".db" after it. // In non-test mode, we can append the ".db" extension right here. InformerObjectCacheDBPathRoot = "informer_object_cache" InformerObjectCacheDBPath = InformerObjectCacheDBPathRoot + ".db" )
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Client ¶
type Client interface {
WithTransaction(ctx context.Context, forWriting bool, f WithTransactionFunction) error
Prepare(stmt string) Stmt
QueryForRows(ctx context.Context, stmt Stmt, params ...any) (Rows, error)
ReadObjects(rows Rows, typ reflect.Type) ([]any, error)
ReadStrings(rows Rows) ([]string, error)
ReadStrings2(rows Rows) ([][]string, error)
ReadInt(rows Rows) (int, error)
ReadStringIntString(rows Rows) ([][]string, error)
Upsert(tx TxClient, stmt Stmt, key string, obj SerializedObject) error
NewConnection(isTemp bool) (string, error)
Serialize(obj any, encrypt bool) (SerializedObject, error)
Deserialize(SerializedObject, any) error
}
Client defines a database client that provides encrypting, decrypting, and database resetting
type ClientOption ¶ added in v0.7.20
type ClientOption func(*client)
func WithEncoding ¶ added in v0.7.20
func WithEncoding(encType Encoding) ClientOption
type Connection ¶
type Connection interface {
BeginTx(ctx context.Context, opts *sql.TxOptions) (*sql.Tx, error)
Exec(query string, args ...any) (sql.Result, error)
Prepare(query string) (*sql.Stmt, error)
Close() error
}
Connection represents a connection pool.
type Decryptor ¶
type Decryptor interface {
// Decrypt accepts a chunk of encrypted data, the nonce used to encrypt it and the ID of the used key (as it rotates). It returns the decrypted data or an error.
Decrypt([]byte, []byte, uint32) ([]byte, error)
}
Decryptor decrypts data previously encrypted by Encryptor.
type Encryptor ¶
type Encryptor interface {
// Encrypt encrypts the specified data, returning: the encrypted data, the nonce used to encrypt the data, and an ID identifying the key that was used (as it rotates). On failure error is returned instead.
Encrypt([]byte) ([]byte, []byte, uint32, error)
}
Encryptor encrypts data with a key which is rotated to avoid wear-out.
type QueryError ¶
QueryError encapsulates an error while executing a query
func (*QueryError) Error ¶
func (e *QueryError) Error() string
Error returns a string representation of this QueryError
type Rows ¶
Rows represents sql rows. It exposes method to navigate the rows, read their outputs, and close them.
type SerializedObject ¶ added in v0.7.20
type Stmt ¶ added in v0.7.18
type Stmt interface {
Exec(args ...any) (sql.Result, error)
QueryContext(ctx context.Context, args ...any) (Rows, error)
Close() error
// SQLStmt unwraps the original sql.Stmt
SQLStmt() *sql.Stmt
// GetQueryString returns the original text used to prepare this statement
GetQueryString() string
}
Stmt is an interface over a subset of sql.Stmt methods rationale: allow mocking
type TxClient ¶ added in v0.7.18
type TxClient interface {
Exec(query string, args ...any) (sql.Result, error)
Stmt(stmt Stmt) Stmt
}
TxClient is an interface over a subset of sql.Tx methods rationale 1: explicitly forbid direct access to Commit and Rollback functionality as that is exclusively dealt with by WithTransaction in ../db rationale 2: allow mocking
func NewTxClient ¶ added in v0.7.18
func NewTxClient(tx *sql.Tx, opts ...TxClientOption) TxClient
type TxClientOption ¶ added in v0.7.19
type TxClientOption func(*txClient)
func WithQueryLogger ¶ added in v0.7.19
func WithQueryLogger(logger logging.QueryLogger) TxClientOption
type WithTransactionFunction ¶ added in v0.5.7
WithTransactionFunction is a function that uses a transaction