db_common

package
v0.20.0-alpha.6 Latest Latest
Warning

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

Go to latest
Published: Apr 20, 2023 License: AGPL-3.0 Imports: 27 Imported by: 1

Documentation

Index

Constants

View Source
const TagColumn = "column"

TagColumn is the tag used to specify the column name and type in the introspection tables

Variables

View Source
var ErrServiceInRecoveryMode = errors.New("service is in recovery mode")

Functions

func AddRootCertToConfig added in v0.17.0

func AddRootCertToConfig(config *pgconn.Config, certLocation string) error

func BuildSchemaMetadata

func BuildSchemaMetadata(rows pgx.Rows) (_ *schema.Metadata, err error)

func CacheClear added in v0.20.0

func CacheClear(ctx context.Context, connection *pgx.Conn) error

CacheClear resets the max time on the cache anything below this is not accepted

func CreateIntrospectionTables

func CreateIntrospectionTables(ctx context.Context, workspaceResources *modconfig.ResourceMaps, conn *pgx.Conn) error

func ExecuteQuery

func ExecuteQuery(ctx context.Context, client Client, queryString string, args ...any) (*queryresult.ResultStreamer, error)

ExecuteQuery executes a single query. If shutdownAfterCompletion is true, shutdown the client after completion

func GetDefaultSearchPath

func GetDefaultSearchPath(ctx context.Context, foreignSchemaNames []string) []string

GetDefaultSearchPath builds default search path from the connection schemas, book-ended with public and internal

func LoadForeignSchemaNames added in v0.20.0

func LoadForeignSchemaNames(ctx context.Context, conn *pgx.Conn) ([]string, error)

func LoadSchemaNames

func LoadSchemaNames(ctx context.Context, conn *pgx.Conn) ([]string, error)

func MaxDbConnections added in v0.20.0

func MaxDbConnections() int

func PgEscapeName

func PgEscapeName(name string) string

PgEscapeName escapes strings which will be usaed for Podsdtgres object identifiers (table names, column names, schema names)

func PgEscapeSearchPath

func PgEscapeSearchPath(searchPath []string) []string

PgEscapeSearchPath applies postgres escaping to search path and remove whitespace

func PgEscapeString

func PgEscapeString(str string) string

PgEscapeString escapes strings which are to be inserted use a custom escape tag to avoid chance of clash with the escaped text https://medium.com/@lnishada/postgres-dollar-quoting-6d23e4f186ec

func SetCacheEnabled added in v0.20.0

func SetCacheEnabled(ctx context.Context, enabled bool, connection *pgx.Conn) error

SetCacheEnabled enables/disables the cache

func SetCacheTtl added in v0.20.0

func SetCacheTtl(ctx context.Context, duration time.Duration, connection *pgx.Conn) error

SetCacheTtl set the cache ttl on the client

func WaitForConnection

func WaitForConnection(ctx context.Context, connStr string, options ...WaitOption) (conn *pgx.Conn, err error)

func WaitForConnectionPing added in v0.19.0

func WaitForConnectionPing(ctx context.Context, connection *pgx.Conn, waitOptions ...WaitOption) (err error)

WaitForConnectionPing PINGs the DB - retrying after a backoff of constants.ServicePingInterval - but only for constants.DBConnectionTimeout returns the error from the database if the dbClient does not respond successfully after a timeout

func WaitForPool added in v0.17.0

func WaitForPool(ctx context.Context, db *pgxpool.Pool, waitOptions ...WaitOption) (err error)

WaitForPool waits for the db to start accepting connections and returns true returns false if the dbClient does not start within a stipulated time,

func WaitForRecovery added in v0.19.0

func WaitForRecovery(ctx context.Context, connection *pgx.Conn, waitOptions ...WaitOption) (err error)

WaitForRecovery returns an error (ErrRecoveryMode) if the service stays in recovery mode for more than constants.DBRecoveryWaitTimeout

Types

type AcquireSessionResult

type AcquireSessionResult struct {
	Session *DatabaseSession
	modconfig.ErrorAndWarnings
}

type Client

type Client interface {
	Close(ctx context.Context) error

	ForeignSchemaNames() []string
	AllSchemaNames() []string
	LoadSchemaNames(ctx context.Context) error

	GetCurrentSearchPath(context.Context) ([]string, error)
	GetCurrentSearchPathForDbConnection(context.Context, *sql.Conn) ([]string, error)
	SetRequiredSessionSearchPath(context.Context) error
	GetRequiredSessionSearchPath() []string
	ConstructSearchPath(context.Context, []string, []string) ([]string, error)

	AcquireSession(context.Context) *AcquireSessionResult

	ExecuteSync(context.Context, string, ...any) (*queryresult.SyncQueryResult, error)
	Execute(context.Context, string, ...any) (*queryresult.Result, error)

	ExecuteSyncInSession(context.Context, *DatabaseSession, string, ...any) (*queryresult.SyncQueryResult, error)
	ExecuteInSession(context.Context, *DatabaseSession, func(), string, ...any) (*queryresult.Result, error)

	RefreshSessions(ctx context.Context) *AcquireSessionResult
	GetSchemaFromDB(context.Context, ...string) (*schema.Metadata, error)
}

type ColumnTag

type ColumnTag struct {
	Column string
	// the introspected go type
	ColumnType string
}

ColumnTag is a struct used to display column info in introspection tables

type DatabaseSession

type DatabaseSession struct {
	BackendPid  uint32    `json:"backend_pid"`
	UsedCount   int       `json:"used"`
	LastUsed    time.Time `json:"last_used"`
	SearchPath  []string  `json:"-"`
	Initialized bool      `json:"-"`

	// this gets rewritten, since the database/sql gives back a new instance everytime
	Connection *pgxpool.Conn `json:"-"`

	// the id of the last scan metadata retrieved
	ScanMetadataMaxId int64 `json:"-"`
}

DatabaseSession wraps over the raw database/sql.Conn and also allows for retaining useful instrumentation

func NewDBSession

func NewDBSession(backendPid uint32) *DatabaseSession

func (*DatabaseSession) Close

func (s *DatabaseSession) Close(waitForCleanup bool)

func (*DatabaseSession) UpdateUsage

func (s *DatabaseSession) UpdateUsage()

UpdateUsage updates the UsedCount of the DatabaseSession and also the lastUsed time

type InitResult

type InitResult struct {
	Error    error
	Warnings []string
	Messages []string

	// allow overriding of the display functions
	DisplayMessage func(ctx context.Context, m string)
	DisplayWarning func(ctx context.Context, w string)
}

func (*InitResult) AddMessage

func (r *InitResult) AddMessage(message string)

func (*InitResult) AddWarnings

func (r *InitResult) AddWarnings(warnings ...string)

func (*InitResult) DisplayMessages

func (r *InitResult) DisplayMessages()

func (*InitResult) HasMessages

func (r *InitResult) HasMessages() bool

type WaitOption added in v0.19.0

type WaitOption func(w *waitConfig)

func WithRetryInterval added in v0.19.0

func WithRetryInterval(d time.Duration) WaitOption

func WithTimeout added in v0.19.0

func WithTimeout(d time.Duration) WaitOption

Jump to

Keyboard shortcuts

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