execution

package
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Aug 31, 2026 License: Apache-2.0 Imports: 15 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrInvalidLimit                = errors.New("execution: invalid resource limit")
	ErrInvalidRequest              = errors.New("execution: invalid request")
	ErrInvalidCursor               = errors.New("execution: invalid cursor")
	ErrSourceNotFound              = errors.New("execution: source not found")
	ErrUnsupportedSourceCapability = errors.New("execution: unsupported source capability")
	ErrSchemaNotFound              = errors.New("execution: schema not found")
	ErrRelationNotFound            = errors.New("execution: relation not found")
	ErrUnsupportedRelationKind     = errors.New("execution: unsupported relation kind")
	ErrDataPorchAccessDenied       = errors.New("execution: dataporch access denied")
	ErrDatabasePermissionDenied    = errors.New("execution: database permission denied")
	ErrDatabaseUnavailable         = errors.New("execution: database unavailable")
	ErrQueryTimeout                = errors.New("execution: query timeout")
	ErrCancelled                   = errors.New("execution: cancelled")
	ErrInternal                    = errors.New("execution: internal failure")
)
View Source
var (
	ErrInvalidQuery                 = errors.New("execution: invalid query")
	ErrReadOnlyViolation            = errors.New("execution: read only violation")
	ErrQueryCancelled               = errors.New("execution: query cancelled")
	ErrResultTooLarge               = errors.New("execution: result too large")
	ErrDatabaseAuthenticationFailed = errors.New("execution: database authentication failed")
	ErrDatabaseConflict             = errors.New("execution: database conflict")
	ErrDatabaseResourceExhausted    = errors.New("execution: database resource exhausted")
	ErrDatabaseError                = errors.New("execution: database error")
)
View Source
var ErrSourceKindMismatch = errors.New("execution: source kind mismatch")

Functions

This section is empty.

Types

type Authorizer

type Authorizer interface {
	Authorize(context.Context, access.Request) error
}

type Capability

type Capability string
const CapabilityRelationalDatabase Capability = "relational_database"

type Column

type Column struct {
	Name              string     `json:"name"`
	OrdinalPosition   int        `json:"ordinal_position"`
	FormattedType     string     `json:"formatted_type"`
	Type              DataType   `json:"type"`
	Nullable          bool       `json:"nullable"`
	DefaultExpression *string    `json:"default_expression"`
	Identity          *Identity  `json:"identity"`
	Generated         *Generated `json:"generated"`
	Description       *string    `json:"description,omitempty"`
}

type ColumnDiscoveryPage

type ColumnDiscoveryPage struct {
	Columns      []Column
	RelationKind RelationKind
	Constraints  []Constraint
	HasMore      bool
}

type ColumnDiscoveryRequest

type ColumnDiscoveryRequest struct {
	SourceID            connection.ID
	Schema              string
	Table               string
	Search              string
	IncludeDescriptions bool
	Limit               int
	AfterOrdinal        int
}

type Constraint

type Constraint struct {
	Name              string               `json:"name,omitempty"`
	Kind              string               `json:"kind"`
	Columns           []string             `json:"columns"`
	Deferrable        bool                 `json:"deferrable"`
	InitiallyDeferred bool                 `json:"initially_deferred"`
	Referenced        *ConstraintReference `json:"referenced,omitempty"`
	MatchType         string               `json:"match_type,omitempty"`
	UpdateAction      string               `json:"update_action,omitempty"`
	DeleteAction      string               `json:"delete_action,omitempty"`
	NullsNotDistinct  *bool                `json:"nulls_not_distinct,omitempty"`
	CheckExpression   *string              `json:"check_expression,omitempty"`
	Validated         bool                 `json:"validated"`
}

type ConstraintReference

type ConstraintReference struct {
	Schema  string   `json:"schema"`
	Table   string   `json:"table"`
	Columns []string `json:"columns"`
}

type DataSource

type DataSource struct {
	ID           connection.ID   `json:"id"`
	Kind         connection.Kind `json:"kind"`
	Capabilities []Capability    `json:"capabilities"`
}

type DataType

type DataType struct {
	Schema            string         `json:"schema"`
	Name              string         `json:"name"`
	Category          TypeCategory   `json:"category"`
	Length            *int32         `json:"length"`
	Precision         *int32         `json:"precision"`
	Scale             *int32         `json:"scale"`
	TemporalPrecision *int32         `json:"temporal_precision"`
	IsArray           bool           `json:"is_array"`
	ElementType       *TypeReference `json:"element_type"`
	DomainBaseType    *TypeReference `json:"domain"`
	Affinity          TypeAffinity   `json:"affinity,omitempty"`
}

type DatabaseError

type DatabaseError struct {
	Kind                connection.Kind `json:"kind"`
	Code                string          `json:"code,omitempty"`
	ExtendedCode        string          `json:"extended_code,omitempty"`
	Severity            string          `json:"severity,omitempty"`
	SeverityUnlocalized string          `json:"severity_unlocalized,omitempty"`
	Message             string          `json:"message,omitempty"`
	Truncated           bool            `json:"truncated,omitempty"`
	Detail              string          `json:"detail,omitempty"`
	Hint                string          `json:"hint,omitempty"`
	Position            int32           `json:"position,omitempty"`
	InternalPosition    int32           `json:"internal_position,omitempty"`
	InternalQuery       string          `json:"internal_query,omitempty"`
	Where               string          `json:"where,omitempty"`
	SchemaName          string          `json:"schema_name,omitempty"`
	TableName           string          `json:"table_name,omitempty"`
	ColumnName          string          `json:"column_name,omitempty"`
	DataTypeName        string          `json:"data_type_name,omitempty"`
	ConstraintName      string          `json:"constraint_name,omitempty"`
	File                string          `json:"file,omitempty"`
	Line                int32           `json:"line,omitempty"`
	Routine             string          `json:"routine,omitempty"`
}

func (*DatabaseError) Error

func (e *DatabaseError) Error() string

type DatabaseFailure

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

func NewDatabaseFailure

func NewDatabaseFailure(
	category ErrorCategory,
	retryable bool,
	databaseError *DatabaseError,
) *DatabaseFailure

func (*DatabaseFailure) Error

func (f *DatabaseFailure) Error() string

func (*DatabaseFailure) Unwrap

func (f *DatabaseFailure) Unwrap() error

type Dependencies

type Dependencies struct {
	Sources                  SourceRegistry
	Authorizer               Authorizer
	MaxLimit                 int
	RelationalDiscoverers    []RelationalDiscoverer
	RelationalQueryExecutors []RelationalQueryExecutor
}

type ErrorCategory

type ErrorCategory string
const (
	ErrorCategoryInvalidRequest              ErrorCategory = "invalid_request"
	ErrorCategoryInvalidCursor               ErrorCategory = "invalid_cursor"
	ErrorCategorySourceNotFound              ErrorCategory = "source_not_found"
	ErrorCategoryUnsupportedSourceCapability ErrorCategory = "unsupported_source_capability"
	ErrorCategorySchemaNotFound              ErrorCategory = "schema_not_found"
	ErrorCategoryRelationNotFound            ErrorCategory = "relation_not_found"
	ErrorCategoryUnsupportedRelationKind     ErrorCategory = "unsupported_relation_kind"
	ErrorCategoryDataPorchAccessDenied       ErrorCategory = "dataporch_access_denied"
	ErrorCategoryDatabasePermissionDenied    ErrorCategory = "database_permission_denied"
	ErrorCategoryDatabaseUnavailable         ErrorCategory = "database_unavailable"
	ErrorCategoryQueryTimeout                ErrorCategory = "query_timeout"
	ErrorCategoryCancelled                   ErrorCategory = "cancelled"
	ErrorCategoryInternal                    ErrorCategory = "internal"
)
const (
	ErrorCategorySourceKindMismatch           ErrorCategory = "source_kind_mismatch"
	ErrorCategoryInvalidQuery                 ErrorCategory = "invalid_query"
	ErrorCategoryReadOnlyViolation            ErrorCategory = "read_only_violation"
	ErrorCategoryQueryCancelled               ErrorCategory = "query_cancelled"
	ErrorCategoryResultTooLarge               ErrorCategory = "result_too_large"
	ErrorCategoryDatabaseAuthenticationFailed ErrorCategory = "database_authentication_failed"
	ErrorCategoryDatabaseConflict             ErrorCategory = "database_conflict"
	ErrorCategoryDatabaseResourceExhausted    ErrorCategory = "database_resource_exhausted"
	ErrorCategoryDatabaseError                ErrorCategory = "database_error"
)

type Failure

type Failure struct {
	Category      ErrorCategory  `json:"category"`
	Message       string         `json:"message"`
	Retryable     bool           `json:"retryable"`
	DatabaseError *DatabaseError `json:"database_error,omitempty"`
}

func Classify

func Classify(err error) Failure

func ClassifyRelationalQuery

func ClassifyRelationalQuery(ctx context.Context, err error) Failure

type Generated

type Generated struct {
	Kind       string `json:"kind"`
	Expression string `json:"expression,omitempty"`
}

type Identity

type Identity struct {
	Generation string `json:"generation"`
}

type ListDataSourcesRequest

type ListDataSourcesRequest struct {
	Search string `json:"search,omitempty"`
	Limit  *int   `json:"limit,omitempty"`
	Cursor string `json:"cursor,omitempty"`
}

type ListDataSourcesResult

type ListDataSourcesResult struct {
	Sources    []DataSource `json:"sources"`
	NextCursor string       `json:"next_cursor,omitempty"`
}

type ListRelationalColumnsRequest

type ListRelationalColumnsRequest struct {
	SourceID            connection.ID `json:"source_id"`
	Schema              string        `json:"schema"`
	Table               string        `json:"table"`
	Search              string        `json:"search,omitempty"`
	IncludeDescriptions bool          `json:"include_descriptions,omitempty"`
	Limit               *int          `json:"limit,omitempty"`
	Cursor              string        `json:"cursor,omitempty"`
}

type ListRelationalColumnsResult

type ListRelationalColumnsResult struct {
	SourceID     connection.ID `json:"source_id"`
	Schema       string        `json:"schema"`
	Table        string        `json:"table"`
	RelationKind RelationKind  `json:"relation_kind"`
	Columns      []Column      `json:"columns"`
	Constraints  []Constraint  `json:"constraints"`
	NextCursor   string        `json:"next_cursor,omitempty"`
}

type ListRelationalSchemasRequest

type ListRelationalSchemasRequest struct {
	SourceID            connection.ID `json:"source_id"`
	Search              string        `json:"search,omitempty"`
	IncludeDescriptions bool          `json:"include_descriptions,omitempty"`
	Limit               *int          `json:"limit,omitempty"`
	Cursor              string        `json:"cursor,omitempty"`
}

type ListRelationalSchemasResult

type ListRelationalSchemasResult struct {
	SourceID   connection.ID `json:"source_id"`
	Schemas    []Schema      `json:"schemas"`
	NextCursor string        `json:"next_cursor,omitempty"`
}

type ListRelationalTablesRequest

type ListRelationalTablesRequest struct {
	SourceID            connection.ID `json:"source_id"`
	Schema              string        `json:"schema"`
	Search              string        `json:"search,omitempty"`
	IncludeDescriptions bool          `json:"include_descriptions,omitempty"`
	Limit               *int          `json:"limit,omitempty"`
	Cursor              string        `json:"cursor,omitempty"`
}

type ListRelationalTablesResult

type ListRelationalTablesResult struct {
	SourceID   connection.ID `json:"source_id"`
	Schema     string        `json:"schema"`
	Tables     []Table       `json:"tables"`
	NextCursor string        `json:"next_cursor,omitempty"`
}

type RelationKind

type RelationKind string
const (
	RelationKindTable            RelationKind = "table"
	RelationKindPartitionedTable RelationKind = "partitioned_table"
	RelationKindView             RelationKind = "view"
	RelationKindMaterializedView RelationKind = "materialized_view"
	RelationKindForeignTable     RelationKind = "foreign_table"
	RelationKindVirtualTable     RelationKind = "virtual_table"
)

type RelationalQueryColumn

type RelationalQueryColumn struct {
	Name         string `json:"name"`
	DatabaseType string `json:"database_type"`
}

type RelationalQueryExecutionRequest

type RelationalQueryExecutionRequest struct {
	Source connection.Definition
	Query  string
}

type RelationalQueryExecutor

type RelationalQueryExecutor interface {
	Kind() connection.Kind
	Query(context.Context, RelationalQueryExecutionRequest) (RelationalQueryResult, error)
}

type RelationalQueryRequest

type RelationalQueryRequest struct {
	Kind     connection.Kind
	SourceID connection.ID
	Query    string
}

type RelationalQueryResult

type RelationalQueryResult struct {
	Kind      connection.Kind         `json:"kind"`
	SourceID  connection.ID           `json:"source_id"`
	Columns   []RelationalQueryColumn `json:"columns"`
	Rows      [][]*string             `json:"rows"`
	RowCount  int                     `json:"row_count"`
	Truncated bool                    `json:"truncated"`
}

type Schema

type Schema struct {
	Name        string  `json:"name"`
	Description *string `json:"description,omitempty"`
}

type SchemaDiscoveryPage

type SchemaDiscoveryPage struct {
	Schemas []Schema
	HasMore bool
}

type SchemaDiscoveryRequest

type SchemaDiscoveryRequest struct {
	SourceID            connection.ID
	Search              string
	IncludeDescriptions bool
	Limit               int
	AfterName           string
}

type Service

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

func New

func New(dependencies Dependencies) (*Service, error)

func (*Service) ListDataSources

func (s *Service) ListDataSources(ctx context.Context, request ListDataSourcesRequest) (ListDataSourcesResult, error)

func (*Service) ListRelationalColumns

func (s *Service) ListRelationalColumns(
	ctx context.Context,
	request ListRelationalColumnsRequest,
) (ListRelationalColumnsResult, error)

func (*Service) ListRelationalSchemas

func (s *Service) ListRelationalSchemas(
	ctx context.Context,
	request ListRelationalSchemasRequest,
) (ListRelationalSchemasResult, error)

func (*Service) ListRelationalTables

func (s *Service) ListRelationalTables(
	ctx context.Context,
	request ListRelationalTablesRequest,
) (ListRelationalTablesResult, error)

func (*Service) QueryRelationalDatabase

func (s *Service) QueryRelationalDatabase(
	ctx context.Context,
	request RelationalQueryRequest,
) (RelationalQueryResult, error)

type SourceRegistry

type SourceRegistry interface {
	List() []connection.Definition
	Lookup(connection.ID) (connection.Definition, error)
}

type Table

type Table struct {
	Name        string       `json:"name"`
	Kind        RelationKind `json:"kind"`
	Description *string      `json:"description,omitempty"`
}

type TableDiscoveryPage

type TableDiscoveryPage struct {
	Tables  []Table
	HasMore bool
}

type TableDiscoveryRequest

type TableDiscoveryRequest struct {
	SourceID            connection.ID
	Schema              string
	Search              string
	IncludeDescriptions bool
	Limit               int
	AfterName           string
}

type TypeAffinity

type TypeAffinity string
const (
	TypeAffinityInteger TypeAffinity = "integer"
	TypeAffinityText    TypeAffinity = "text"
	TypeAffinityBlob    TypeAffinity = "blob"
	TypeAffinityReal    TypeAffinity = "real"
	TypeAffinityNumeric TypeAffinity = "numeric"
)

type TypeCategory

type TypeCategory string
const (
	TypeCategoryBase       TypeCategory = "base"
	TypeCategoryArray      TypeCategory = "array"
	TypeCategoryDomain     TypeCategory = "domain"
	TypeCategoryEnum       TypeCategory = "enum"
	TypeCategoryComposite  TypeCategory = "composite"
	TypeCategoryRange      TypeCategory = "range"
	TypeCategoryMultirange TypeCategory = "multirange"
	TypeCategoryPseudo     TypeCategory = "pseudo"
	TypeCategoryOther      TypeCategory = "other"
	TypeCategoryDynamic    TypeCategory = "dynamic"
)

type TypeReference

type TypeReference struct {
	Schema string `json:"schema"`
	Name   string `json:"name"`
}

Jump to

Keyboard shortcuts

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