db_common

package
v0.2.0-beta.1 Latest Latest
Warning

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

Go to latest
Published: Dec 19, 2023 License: AGPL-3.0 Imports: 31 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

View Source
var ErrServiceInRecoveryMode = errors.New("service is in recovery mode")
View Source
var Functions = []SQLFunction{
	{
		Name:     "glob",
		Params:   map[string]string{"input_glob": "text"},
		Returns:  "text",
		Language: "plpgsql",
		Body: `
declare
	output_pattern text;
begin
	output_pattern = replace(input_glob, '*', '%');
	output_pattern = replace(output_pattern, '?', '_');
	return output_pattern;
end;
`,
	},
	{
		Name:     constants.FunctionCacheSet,
		Params:   map[string]string{"command": "text"},
		Returns:  "void",
		Language: "plpgsql",
		Body: `
begin
	IF command = 'on' THEN
		INSERT INTO steampipe_internal.steampipe_settings("name","value") VALUES ('cache','true');
	ELSIF command = 'off' THEN
		INSERT INTO steampipe_internal.steampipe_settings("name","value") VALUES ('cache','false');
	ELSIF command = 'clear' THEN
		INSERT INTO steampipe_internal.steampipe_settings("name","value") VALUES ('cache_clear_time','');
	ELSE
		RAISE EXCEPTION 'Unknown value % for set_cache - valid values are on, off and clear.', $1;
	END IF;
end;
`,
	},
	{
		Name:     constants.FunctionConnectionCacheClear,
		Params:   map[string]string{"connection": "text"},
		Returns:  "void",
		Language: "plpgsql",
		Body: `
begin
		INSERT INTO steampipe_internal.steampipe_settings("name","value") VALUES ('connection_cache_clear',connection);
end;
`,
	},
	{
		Name:     constants.FunctionCacheSetTtl,
		Params:   map[string]string{"duration": "int"},
		Returns:  "void",
		Language: "plpgsql",
		Body: `
begin
	INSERT INTO steampipe_internal.steampipe_settings("name","value") VALUES ('cache_ttl',duration);
end;
`,
	},
}

Functions is a list of SQLFunction objects that are installed in the db 'steampipe_internal' schema startup

Functions

func AddRootCertToConfig

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

func AddSearchPathPrefix

func AddSearchPathPrefix(searchPathPrefix []string, searchPath []string) []string

func BeginFunc

func BeginFunc(ctx context.Context, db TxBeginner, fn func(*sql.Tx) error) error

func BuildSearchPathResult

func BuildSearchPathResult(searchPathString string) ([]string, error)

func CollectOneToStructByName

func CollectOneToStructByName[T any](rows *sql.Rows) (*T, error)

func CollectToStructByName

func CollectToStructByName[T any](rows *sql.Rows) ([]T, error)

func CreateIntrospectionTables

func CreateIntrospectionTables(ctx context.Context, workspaceResources *modconfig.ResourceMaps, tx *sql.Tx) error

func EnsureInternalSchemaSuffix

func EnsureInternalSchemaSuffix(searchPath []string) []string

func ExecuteSystemClientCall

func ExecuteSystemClientCall(ctx context.Context, conn *sql.Conn, executor SystemClientExecutor) error

ExecuteSystemClientCall creates a transaction and sets the application_name to the one used by the system client, executes the callback and sets the application name back to the client app name

func GetCommentsQueryForPlugin

func GetCommentsQueryForPlugin(connectionName string, p map[string]*proto.TableSchema) string

func GetDeleteConnectionQuery

func GetDeleteConnectionQuery(name string) string

func GetMissingSchemaFromIsRelationNotFoundError

func GetMissingSchemaFromIsRelationNotFoundError(err error) (string, string, bool)

func GetUpdateConnectionQuery

func GetUpdateConnectionQuery(connectionName, pluginSchemaName string) string

func GetUserSearchPath

func GetUserSearchPath(ctx context.Context, conn *sql.Conn) ([]string, error)

TODO:: KAI :: we need to fix this this is going to be referred to from steampipe code in the future and

func IsClientAppName

func IsClientAppName(appName string) bool

TODO think about app specific stuff here

func IsClientSystemAppName

func IsClientSystemAppName(appName string) bool

func IsRelationNotFoundError

func IsRelationNotFoundError(err error) bool

func IsSchemaNameValid

func IsSchemaNameValid(name string) (bool, string)

IsSchemaNameValid verifies that the given string is a valid pgsql schema name

func IsServiceAppName

func IsServiceAppName(appName string) bool

func LoadForeignSchemaNames

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

func MaxDbConnections

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 WaitForConnectionPing

func WaitForConnectionPing(ctx context.Context, connection *sql.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

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

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

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

Types

type ColumnSchema

type ColumnSchema struct {
	ID          string
	Name        string
	NotNull     bool
	Type        string
	Default     string
	Description string
}

ColumnSchema contains the details of a single column in a table

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

func NewColumnTag

func NewColumnTag(field reflect.StructField) (*ColumnTag, bool)

type ExecContext

type ExecContext interface {
	ExecContext(ctx context.Context, query string, args ...interface{}) (sql.Result, error)
}

type InitResult

type InitResult struct {
	error_helpers.ErrorAndWarnings
	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(messages ...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

func (*InitResult) Merge

func (r *InitResult) Merge(other InitResult)

type NotificationListener

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

func NewNotificationListener

func NewNotificationListener(ctx context.Context, conn *pgx.Conn) (*NotificationListener, error)

func (*NotificationListener) RegisterListener

func (c *NotificationListener) RegisterListener(onNotification func(*pgconn.Notification))

func (*NotificationListener) Stop

func (c *NotificationListener) Stop(ctx context.Context)

type QueryWithArgs

type QueryWithArgs struct {
	Query string
	Args  []any
}

type SQLFunction

type SQLFunction struct {
	Name     string
	Params   map[string]string
	Returns  string
	Body     string
	Language string
}

SQLFunction is a struct for an sqlFunc

type SchemaMetadata

type SchemaMetadata struct {
	// map {schemaname, {map {tablename -> tableschema}}
	Schemas map[string]map[string]TableSchema
	// the name of the temporary schema
	TemporarySchemaName string
}

SchemaMetadata is a struct to represent the schema of the database

func LoadSchemaMetadata

func LoadSchemaMetadata(ctx context.Context, conn *sql.Conn, query string) (*SchemaMetadata, error)

func NewSchemaMetadata

func NewSchemaMetadata() *SchemaMetadata

func (*SchemaMetadata) GetSchemas

func (m *SchemaMetadata) GetSchemas() []string

GetSchemas returns all foreign schema names

func (*SchemaMetadata) GetTablesInSchema

func (m *SchemaMetadata) GetTablesInSchema(schemaName string) map[string]struct{}

GetTablesInSchema returns a lookup of all foreign tables in a given foreign schema

type SystemClientExecutor

type SystemClientExecutor func(context.Context, *sql.Tx) error

SystemClientExecutor is the executor function that is called within a transaction make sure that by the time the executor finishes execution, the connection is freed otherwise we will get a `conn is busy` error

type TableSchema

type TableSchema struct {
	// map columnName -> columnSchema
	Columns     map[string]ColumnSchema
	Name        string
	FullName    string
	Schema      string
	Description string
}

TableSchema contains the details of a single table in the schema

type TxBeginner

type TxBeginner interface {
	BeginTx(context.Context, *sql.TxOptions) (*sql.Tx, error)
}

type WaitOption

type WaitOption func(w *waitConfig)

func WithRetryInterval

func WithRetryInterval(d time.Duration) WaitOption

func WithTimeout

func WithTimeout(d time.Duration) WaitOption

Jump to

Keyboard shortcuts

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