Documentation
¶
Index ¶
- Constants
- func ErrorConvertToAPI(err error) *connect.Error
- func ErrorIsNoRows(err error) bool
- func StableSearch[T any](ctx context.Context, workMan workerpool.Manager, query *SearchQuery, ...) (workerpool.JobResultPipe[[]T], error)
- type BaseModel
- func (model *BaseModel) BeforeCreate(db *gorm.DB) error
- func (model *BaseModel) BeforeSave(db *gorm.DB) error
- func (model *BaseModel) BeforeUpdate(_ *gorm.DB) error
- func (model *BaseModel) CopyPartitionInfo(parent *BaseModel)
- func (model *BaseModel) GenID(ctx context.Context)
- func (model *BaseModel) GetAccessID() string
- func (model *BaseModel) GetID() string
- func (model *BaseModel) GetPartitionID() string
- func (model *BaseModel) GetTenantID() string
- func (model *BaseModel) GetVersion() uint
- func (model *BaseModel) ValidXID(id string) bool
- type BaseModelI
- type DSN
- func (d DSN) ChangePort(newPort string) (DSN, error)
- func (d DSN) DelPath() DSN
- func (d DSN) ExtendPath(epath ...string) DSN
- func (d DSN) ExtendQuery(key, value string) DSN
- func (d DSN) GetQuery(key string) string
- func (d DSN) IsCache() bool
- func (d DSN) IsDB() bool
- func (d DSN) IsMem() bool
- func (d DSN) IsMySQL() bool
- func (d DSN) IsNats() bool
- func (d DSN) IsPostgres() bool
- func (d DSN) IsQueue() bool
- func (d DSN) IsRedis() bool
- func (d DSN) PrefixPath(prefix string) DSN
- func (d DSN) RemoveQuery(key ...string) DSN
- func (d DSN) String() string
- func (d DSN) SuffixPath(suffix string) DSN
- func (d DSN) ToArray() []DSN
- func (d DSN) ToURI() (*url.URL, error)
- func (d DSN) Valid() bool
- func (d DSN) WithPassword(password string) (DSN, error)
- func (d DSN) WithPath(path string) (DSN, error)
- func (d DSN) WithPathSuffix(suffix string) (DSN, error)
- func (d DSN) WithQuery(query string) (DSN, error)
- func (d DSN) WithUser(user string) (DSN, error)
- func (d DSN) WithUserAndPassword(userName, password string) (DSN, error)
- type JSONMap
- func (m *JSONMap) Copy() JSONMap
- func (m *JSONMap) FromProtoStruct(s *structpb.Struct) JSONMap
- func (m *JSONMap) GetFloat(key string) float64
- func (m *JSONMap) GetString(key string) string
- func (m *JSONMap) GormDBDataType(db *gorm.DB, _ *schema.Field) string
- func (m *JSONMap) GormDataType() string
- func (m *JSONMap) GormValue(_ context.Context, db *gorm.DB) clause.Expr
- func (m *JSONMap) MarshalJSON() ([]byte, error)
- func (m *JSONMap) Scan(value any) error
- func (m *JSONMap) ToProtoStruct() *structpb.Struct
- func (m *JSONMap) UnmarshalJSON(data []byte) error
- func (m *JSONMap) Update(update JSONMap) JSONMap
- func (m *JSONMap) Value() (driver.Value, error)
- type Paginator
- type SearchOption
- func WithSearchBatchSize(batchSize int) SearchOption
- func WithSearchByTimePeriod(period *TimePeriod) SearchOption
- func WithSearchFiltersAndByValue(filters map[string]any) SearchOption
- func WithSearchFiltersOrByValue(filters map[string]any) SearchOption
- func WithSearchLimit(limit int) SearchOption
- func WithSearchOffset(offset int) SearchOption
- type SearchQuery
- type TimePeriod
- type UnitMeasure
Constants ¶
const ( PostgresScheme = "postgres" MysqlScheme = "mysql://" MemScheme = "mem://" RedisScheme = "redis://" NatsScheme = "nats://" )
Constants for database drivers.
Variables ¶
This section is empty.
Functions ¶
func ErrorConvertToAPI ¶ added in v1.67.12
ErrorConvertToAPI converts GORM errors to appropriate Connect RPC errors efficiently.
func ErrorIsNoRows ¶
ErrorIsNoRows validate if supplied error is because of record missing in DB.
func StableSearch ¶
func StableSearch[T any]( ctx context.Context, workMan workerpool.Manager, query *SearchQuery, searchFunc func(ctx context.Context, query *SearchQuery) ([]T, error), ) (workerpool.JobResultPipe[[]T], error)
StableSearch executes the provided `searchFunc` until the paginator reports that all results have been consumed, streaming batches through the workerpool. It is safe to call from multiple goroutines; the provided `workerpool.Manager` coordinates execution and buffering of results.
Types ¶
type BaseModel ¶
type BaseModel struct {
ID string `gorm:"type:varchar(50);primary_key"`
CreatedAt time.Time
ModifiedAt time.Time
Version uint `gorm:"DEFAULT 0"`
TenantID string `gorm:"type:varchar(50);index:,composite:base_tenancy"`
PartitionID string `gorm:"type:varchar(50);index:,composite:base_tenancy"`
AccessID string `gorm:"type:varchar(50);index:,composite:base_tenancy"`
DeletedAt gorm.DeletedAt `sql:"index"`
}
BaseModel base table struct to be extended by other models.
func (*BaseModel) BeforeSave ¶
BeforeSave Ensures we update a migrations time stamps.
func (*BaseModel) BeforeUpdate ¶
BeforeUpdate Updates time stamp every time we update status of a migration.
func (*BaseModel) CopyPartitionInfo ¶
func (*BaseModel) GetAccessID ¶ added in v1.69.11
func (*BaseModel) GetPartitionID ¶ added in v1.69.11
func (*BaseModel) GetTenantID ¶ added in v1.69.11
func (*BaseModel) GetVersion ¶
type BaseModelI ¶
type DSN ¶ added in v1.63.3
type DSN string
A DSN for conveniently handling a URI connection string.
func (DSN) ExtendPath ¶ added in v1.63.3
func (DSN) ExtendQuery ¶ added in v1.63.3
func (DSN) IsPostgres ¶ added in v1.63.3
func (DSN) PrefixPath ¶ added in v1.63.3
func (DSN) RemoveQuery ¶ added in v1.63.3
func (DSN) SuffixPath ¶ added in v1.63.3
func (DSN) WithPathSuffix ¶ added in v1.63.3
type JSONMap ¶ added in v1.63.2
JSONMap is a GORM-compatible map[string]any that stores JSONB/JSON in a DB.
func (*JSONMap) Copy ¶ added in v1.63.2
Copy returns a deep copy of the JSONMap. Nested maps and slices are recursively copied so that the returned JSONMap can be modified without affecting the original.
func (*JSONMap) FromProtoStruct ¶ added in v1.63.2
FromProtoStruct populates the JSONMap with data from a protocol buffer Struct. If the receiver is nil, a new JSONMap will be created and returned. If the input struct is nil, the receiver is returned unchanged. Returns the receiver (or a new JSONMap if receiver was nil) for method chaining.
func (*JSONMap) GetFloat ¶ added in v1.63.2
GetFloat retrieves a string value from the JSONMap by key. It returns the string and a boolean indicating if the value was found and is a string.
func (*JSONMap) GetString ¶ added in v1.63.2
GetString retrieves a string value from the JSONMap by key. It returns the string and a boolean indicating if the value was found and is a string.
func (*JSONMap) GormDBDataType ¶ added in v1.63.2
GormDBDataType returns the dialect-specific database column type.
func (*JSONMap) GormDataType ¶ added in v1.63.2
GormDataType returns the common GORM data type.
func (*JSONMap) GormValue ¶ added in v1.63.2
GormValue optimizes how values are rendered in SQL for specific dialects.
func (*JSONMap) MarshalJSON ¶ added in v1.63.2
MarshalJSON customizes the JSON encoding.
func (*JSONMap) Scan ¶ added in v1.63.2
Scan implements the sql.Scanner interface for database deserialization.
func (*JSONMap) ToProtoStruct ¶ added in v1.63.2
ToProtoStruct converts a JSONMap into a structpb.Struct safely and efficiently.
func (*JSONMap) UnmarshalJSON ¶ added in v1.63.2
UnmarshalJSON deserializes JSON into the map.
type Paginator ¶
Paginator tracks the current pagination state for a query. It keeps the desired `Limit` alongside the currently loaded `Offset` and the `BatchSize` used when streaming batched results through the worker pool.
func (*Paginator) CanLoad ¶
CanLoad reports whether the paginator is still within the requested limit.
func (*Paginator) SetBatchSize ¶
SetBatchSize overrides the streaming batch size. It is primarily used by tests to exercise edge cases.
type SearchOption ¶ added in v1.64.3
type SearchOption func(*SearchQuery)
SearchOption mutates a `SearchQuery` during construction. Options are provided to `NewSearchQuery()` to override pagination defaults, attach filters, or scope execution to a time period.
func WithSearchBatchSize ¶ added in v1.64.3
func WithSearchBatchSize(batchSize int) SearchOption
WithSearchBatchSize allows callers to request a specific streaming batch size. Values larger than `defaultBatchSize` are capped when the query is constructed.
func WithSearchByTimePeriod ¶ added in v1.64.3
func WithSearchByTimePeriod(period *TimePeriod) SearchOption
WithSearchByTimePeriod constrains the search to the provided date range.
func WithSearchFiltersAndByValue ¶ added in v1.64.3
func WithSearchFiltersAndByValue(filters map[string]any) SearchOption
WithSearchFiltersAndByValue supplies AND filters whose values are compared for equality in repository implementations. The keys should have query selection e.g. `id LIKE ?`.
func WithSearchFiltersOrByValue ¶ added in v1.64.17
func WithSearchFiltersOrByValue(filters map[string]any) SearchOption
WithSearchFiltersOrByValue supplies OR filters whose values are map entries the keys should have query selection, e.g. `LIKE ?`.
func WithSearchLimit ¶ added in v1.64.3
func WithSearchLimit(limit int) SearchOption
WithSearchLimit sets the total number of rows the paginator should attempt to load before terminating.
func WithSearchOffset ¶ added in v1.64.3
func WithSearchOffset(offset int) SearchOption
WithSearchOffset configures the paginator to start from the provided page number. The actual row offset is derived inside `NewSearchQuery()`.
type SearchQuery ¶
type SearchQuery struct {
// We query with the value key is in the form key = ? and value whatever should be substituted
FiltersOrByValue map[string]any
FiltersAndByValue map[string]any
TimePeriod *TimePeriod
Pagination *Paginator
OrderBy string
}
SearchQuery captures the minimal information a repository needs to translate a high-level search request into storage-specific operations. The query is constructed via functional options and is treated as immutable after creation so that the worker-pool driven search pipeline can safely share it between goroutines.
Fields:
- `Query` holds the raw text or identifier provided by the caller. Repository implementations are free to interpret it (for example, applying full-text search) but should avoid mutating it.
- `FiltersOrByQuery` stores OR filters whose values indicate how the `Query` should be interpolated into storage-level predicates (e.g. `LIKE ?`).
- `FiltersAndByValue` stores exact-match filters that are combined using AND semantics.
- `TimePeriod` optionally restricts results to a date range on a specific column.
- `Pagination` tracks the intended result window and streaming batch size.
func NewSearchQuery ¶
func NewSearchQuery(opts ...SearchOption) *SearchQuery
NewSearchQuery builds a `SearchQuery` with sensible pagination defaults and applies the provided options. The paginator stores offsets in terms of page numbers; once options are applied we convert the supplied offset into the absolute row offset expected by downstream code.
type TimePeriod ¶ added in v1.64.3
TimePeriod is an inclusive date range constraint that can be applied to a search query. The repository-layer decides which column is filtered via `Field`.
type UnitMeasure ¶ added in v1.63.3
type UnitMeasure int64
func (*UnitMeasure) UnmarshalText ¶ added in v1.63.3
func (d *UnitMeasure) UnmarshalText(text []byte) error