db_common

package
v0.15.0-rc.3 Latest Latest
Warning

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

Go to latest
Published: Jun 20, 2022 License: AGPL-3.0 Imports: 19 Imported by: 0

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 added in v0.9.0

func BuildSchemaMetadata(rows *sql.Rows) (*schema.Metadata, error)

func CreateIntrospectionTables added in v0.9.0

func CreateIntrospectionTables(ctx context.Context, workspaceResources *modconfig.ModResources, session *DatabaseSession) error

func CreatePreparedStatements

func CreatePreparedStatements(ctx context.Context, resourceMaps *modconfig.ModResources, session *DatabaseSession) (err error, warnings []string)

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 added in v0.9.0

func GetPreparedStatementsSQL(resourceMaps *modconfig.ModResources) 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 added in v0.9.0

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 added in v0.8.3

func WaitForConnection(ctx context.Context, db *sql.DB) (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,

Types

type AcquireSessionResult added in v0.10.0

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

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

type ColumnTag added in v0.9.0

type ColumnTag struct {
	Column     string
	ColumnType string
}

type DatabaseSession added in v0.10.0

type DatabaseSession struct {
	BackendPid  uint32                `json:"backend_pid"`
	LifeCycle   *utils.LifecycleTimer `json:"lifecycle"`
	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 *sql.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 added in v0.10.0

func NewDBSession(backendPid uint32) *DatabaseSession

func (*DatabaseSession) Close added in v0.10.0

func (s *DatabaseSession) Close(waitForCleanup bool) error

func (*DatabaseSession) UpdateUsage added in v0.10.0

func (s *DatabaseSession) UpdateUsage()

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

type EnsureSessionStateCallback added in v0.8.3

type EnsureSessionStateCallback = func(context.Context, *DatabaseSession) (err error, warnings []string)

type InitResult

type InitResult struct {
	Error    error
	Warnings []string
	Messages []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

Jump to

Keyboard shortcuts

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