db_common

package
v0.17.0-alpha.28 Latest Latest
Warning

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

Go to latest
Published: Oct 21, 2022 License: AGPL-3.0 Imports: 21 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

This section is empty.

Functions

func BuildSchemaMetadata

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

func CreateIntrospectionTables

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

func CreatePreparedStatements

func CreatePreparedStatements(ctx context.Context, resourceMaps *modconfig.ResourceMaps, conn *pgx.Conn) (error, map[string]error)

func ExecuteQuery

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

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

func GetPreparedStatementsSQL

func GetPreparedStatementsSQL(resourceMaps *modconfig.ResourceMaps) map[string]string

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 WaitForConnection

func WaitForConnection(ctx context.Context, db *pgx.Conn) (err error)

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

func WaitForPool added in v0.17.0

func WaitForPool(ctx context.Context, db *pgxpool.Pool) (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,

Types

type AcquireSessionResult

type AcquireSessionResult struct {
	Session  *DatabaseSession
	Error    error
	Warnings []string
}

type Client

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

	ForeignSchemaNames() []string
	LoadForeignSchemaNames(ctx context.Context) error
	ConnectionMap() *steampipeconfig.ConnectionDataMap

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

	AcquireSession(context.Context) *AcquireSessionResult

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

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

	CacheOn(context.Context) error
	CacheOff(context.Context) error
	CacheClear(context.Context) error

	RefreshSessions(ctx context.Context) *AcquireSessionResult
	GetSchemaFromDB(context.Context) (*schema.Metadata, error)
	// remote client will have empty implementation
	RefreshConnectionAndSearchPaths(context.Context) *steampipeconfig.RefreshConnectionResult
}

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) AddPreparedStatementFailures added in v0.17.0

func (r *InitResult) AddPreparedStatementFailures(preparedStatementFailures map[string]*steampipeconfig.PreparedStatementFailure)

func (*InitResult) AddWarnings

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

func (*InitResult) DisplayMessages

func (r *InitResult) DisplayMessages()

func (*InitResult) HasMessages

func (r *InitResult) HasMessages() bool

Jump to

Keyboard shortcuts

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