db

package
v0.4.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 2, 2024 License: BSD-3-Clause-Clear Imports: 22 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ErrTextCreationFailed      = "resource creation failed"
	ErrTextDeletionFailed      = "resource deletion failed"
	ErrTextDeactivationFailed  = "resource deactivation failed"
	ErrTextGetRetrievalFailed  = "resource retrieval failed"
	ErrTextListRetrievalFailed = "resource list retrieval failed"
	ErrTextUpdateFailed        = "resource update failed"
	ErrTextNotFound            = "resource not found"
	ErrTextConflict            = "resource unique field violation"
	ErrTextRelationInvalid     = "resource relation invalid"
	ErrTextEnumValueInvalid    = "enum value invalid"
	ErrTextUUIDInvalid         = "invalid input syntax for type uuid"
	ErrTextRestrictViolation   = "intended action would violate a restriction"
	ErrTextFqnMissingValue     = "FQN must specify a valid value and be of format 'https://<namespace>/attr/<attribute name>/value/<value>'"
)

Variables

This section is empty.

Functions

func IsQueryBuilderSetClauseError

func IsQueryBuilderSetClauseError(err error) bool

func KeyAccessServerProtoJSON

func KeyAccessServerProtoJSON(keyAccessServerJSON []byte) ([]*policy.KeyAccessServer, error)

func MarshalCreateMetadata

func MarshalCreateMetadata(metadata *common.MetadataMutable) ([]byte, *common.Metadata, error)

func MarshalUpdateMetadata

func MarshalUpdateMetadata(m *common.MetadataMutable, b common.MetadataUpdateEnum, getExtendableMetadata func() (*common.Metadata, error)) ([]byte, *common.Metadata, error)

func NewStatementBuilder

func NewStatementBuilder() sq.StatementBuilderType

Postgres uses $1, $2, etc. for placeholders

func NewTable

func NewTable(schema string) func(name string) Table

func NewUniqueAlreadyExistsError

func NewUniqueAlreadyExistsError(value string) error

func StatusifyError

func StatusifyError(err error, fallbackErr string, log ...any) error

func WrapIfKnownInvalidQueryErr

func WrapIfKnownInvalidQueryErr(err error) error

Get helpful error message for PostgreSQL violation

Types

type Client

type Client struct {
	Pgx PgxIface

	// This is the stdlib connection that is used for transactions
	SQLDB *sql.DB
	// contains filtered or unexported fields
}

A wrapper around a pgxpool.Pool and sql.DB reference.

Each service should have a single instance of the Client to share a connection pool, schema (driven by the service namespace), and an embedded file system for migrations.

The 'search_path' is set to the schema on connection to the database.

If the database config 'runMigrations' is set to true, the client will run migrations on startup, once per namespace (as there should only be one embedded migrations FS per namespace).

Multiple pools, schemas, or migrations per service are not supported. Multiple databases per PostgreSQL instance or multiple PostgreSQL servers per platform instance are not supported.

func New

func New(ctx context.Context, config Config, o ...OptsFunc) (*Client, error)

func (*Client) Close

func (c *Client) Close()

func (Client) Exec

func (c Client) Exec(ctx context.Context, sql string, args []interface{}) error

Common function for all exec calls

func (*Client) MigrationDown

func (c *Client) MigrationDown(ctx context.Context, migrations *embed.FS) error

func (*Client) MigrationStatus

func (c *Client) MigrationStatus(ctx context.Context) ([]*goose.MigrationStatus, error)

func (Client) Query

func (c Client) Query(ctx context.Context, sql string, args []interface{}) (pgx.Rows, error)

Common function for all query calls

func (Client) QueryRow

func (c Client) QueryRow(ctx context.Context, sql string, args []interface{}) (pgx.Row, error)

Common function for all queryRow calls

func (*Client) RunMigrations

func (c *Client) RunMigrations(ctx context.Context, migrations *embed.FS) (int, error)

RunMigrations runs the migrations for the schema Schema will be created if it doesn't exist

func (*Client) Schema

func (c *Client) Schema() string

type Config

type Config struct {
	Host          string `yaml:"host" default:"localhost"`
	Port          int    `yaml:"port" default:"5432"`
	Database      string `yaml:"database" default:"opentdf"`
	User          string `yaml:"user" default:"postgres"`
	Password      string `yaml:"password" default:"changeme" secret:"true"`
	RunMigrations bool   `yaml:"runMigrations" default:"true"`
	SSLMode       string `yaml:"sslmode" default:"prefer"`
	Schema        string `yaml:"schema" default:"opentdf"`

	VerifyConnection bool `yaml:"verifyConnection" default:"true"`
	MigrationsFS     *embed.FS
}

type DBError

type DBError string //nolint:revive // DBError is a valid name for this type
const (
	ErrUniqueConstraintViolation DBError = "ErrUniqueConstraintViolation: value must be unique"
	ErrNotNullViolation          DBError = "ErrNotNullViolation: value cannot be null"
	ErrForeignKeyViolation       DBError = "ErrForeignKeyViolation: value is referenced by another table"
	ErrRestrictViolation         DBError = "ErrRestrictViolation: value cannot be deleted due to restriction"
	ErrNotFound                  DBError = "ErrNotFound: value not found"
	ErrEnumValueInvalid          DBError = "ErrEnumValueInvalid: not a valid enum value"
	ErrUUIDInvalid               DBError = "ErrUUIDInvalid: value not a valid UUID"
	ErrFqnMissingValue           DBError = "ErrFqnMissingValue: FQN must include a value"
	ErrMissingValue              DBError = "ErrMissingValue: value must be included"
)

func (DBError) Error

func (e DBError) Error() string

type OptsFunc

type OptsFunc func(c Config) Config

func WithMigrations

func WithMigrations(fs *embed.FS) OptsFunc

func WithService

func WithService(name string) OptsFunc

type PgxIface

type PgxIface interface {
	Acquire(ctx context.Context) (*pgxpool.Conn, error)
	Exec(context.Context, string, ...any) (pgconn.CommandTag, error)
	QueryRow(context.Context, string, ...any) pgx.Row
	Query(context.Context, string, ...any) (pgx.Rows, error)
	Ping(context.Context) error
	Close()
	Config() *pgxpool.Config
}

We can rename this but wanted to get mocks working.

type Table

type Table struct {
	// contains filtered or unexported fields
}

func (Table) Field

func (t Table) Field(field string) string

func (Table) Name

func (t Table) Name() string

func (Table) WithoutSchema

func (t Table) WithoutSchema() Table

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL