samepackage

package
v0.0.7 Latest Latest
Warning

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

Go to latest
Published: Aug 3, 2026 License: MIT Imports: 15 Imported by: 0

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Analyses

type Analyses interface {
	AnalysesReader
	AnalysesWriter
}

Analyses exposes all queries in its generated store group.

type AnalysesReader

type AnalysesReader interface {
	// GetAnalysis executes the generated GetAnalysis query.
	GetAnalysis(ctx context.Context, arg *GetAnalysisT, storeOptions ...QueryOption) (*Analysis, error)
	// GetTenantUserAnalysis executes the generated GetTenantUserAnalysis query.
	GetTenantUserAnalysis(ctx context.Context, arg *GetTenantUserAnalysisT, storeOptions ...QueryOption) (*GetTenantUserAnalysisRow, error)
}

AnalysesReader exposes read queries in the Analyses store group.

type AnalysesWriter

type AnalysesWriter interface {
}

AnalysesWriter exposes write queries in the Analyses store group.

type Analysis

type Analysis struct {
	ID           int64
	TenantID     int64
	Description  *string
	State        NullAnalysisState
	Source       netip.Addr
	ActiveWindow pgtype.Range[pgtype.Timestamptz]
}

type AnalysisState

type AnalysisState string
const (
	AnalysisStatePending  AnalysisState = "pending"
	AnalysisStateComplete AnalysisState = "complete"
)

func (*AnalysisState) Scan

func (e *AnalysisState) Scan(src interface{}) error

type CopyUsersParams

type CopyUsersParams struct {
	ID       int64
	TenantID int64
	Name     string
}

type CopyUsersT

type CopyUsersT struct {
	TenantKey
	ID   int64
	Name string
}

CopyUsersT combines SQL and routing parameters for CopyUsers.

type CreateUserParams

type CreateUserParams struct {
	ID       int64
	TenantID int64
	Name     string
}

type CreateUserT

type CreateUserT struct {
	TenantKey
	ID   int64
	Name string
}

CreateUserT combines SQL and routing parameters for CreateUser.

type DBTX

type DBTX interface {
	Exec(context.Context, string, ...interface{}) (pgconn.CommandTag, error)
	Query(context.Context, string, ...interface{}) (pgx.Rows, error)
	QueryRow(context.Context, string, ...interface{}) pgx.Row
	CopyFrom(ctx context.Context, tableName pgx.Identifier, columnNames []string, rowSrc pgx.CopyFromSource) (int64, error)
}

type GetAnalysisParams

type GetAnalysisParams struct {
	TenantID int64
	ID       int64
}

type GetAnalysisT

type GetAnalysisT struct {
	TenantKey
	ID int64
}

GetAnalysisT combines SQL and routing parameters for GetAnalysis.

type GetTenantUserAnalysisParams

type GetTenantUserAnalysisParams struct {
	UserID     int64
	AnalysisID int64
}

type GetTenantUserAnalysisRow

type GetTenantUserAnalysisRow struct {
	UserID     int64
	AnalysisID int64
}

type GetTenantUserAnalysisT

type GetTenantUserAnalysisT struct {
	TenantKey
	UserID     int64
	AnalysisID int64
}

GetTenantUserAnalysisT combines SQL and routing parameters for GetTenantUserAnalysis.

type GetUserParams

type GetUserParams struct {
	TenantID int64
	ID       int64
}

type GetUserT

type GetUserT struct {
	TenantKey
	ID int64
}

GetUserT combines SQL and routing parameters for GetUser.

type ListP2PMessageIDsByChatParams

type ListP2PMessageIDsByChatParams struct {
	Limit        int32
	UserID       int64
	PeerID       int64
	CreatedSince pgtype.Timestamptz
	LastID       interface{}
}

type ListP2PMessageIDsByChatT

type ListP2PMessageIDsByChatT struct {
	MessageKey
	Limit        int32
	PeerID       int64
	CreatedSince pgtype.Timestamptz
	LastID       interface{}
}

ListP2PMessageIDsByChatT combines SQL and routing parameters for ListP2PMessageIDsByChat.

type ListP2PMessagesByChatParams

type ListP2PMessagesByChatParams struct {
	Limit        int32
	UserID       int64
	PeerID       int64
	CreatedSince pgtype.Timestamptz
	LastID       interface{}
}

type ListP2PMessagesByChatT

type ListP2PMessagesByChatT struct {
	MessageKey
	Limit        int32
	PeerID       int64
	CreatedSince pgtype.Timestamptz
	LastID       interface{}
}

ListP2PMessagesByChatT combines SQL and routing parameters for ListP2PMessagesByChat.

type ListUsersByIDsT

type ListUsersByIDsT struct {
	TenantKey
	ID int64
}

ListUsersByIDsT combines SQL and routing parameters for ListUsersByIDs.

type Message

type Message struct {
	ID              interface{}
	UserID          int64
	ToUserOrGroupID int64
	InGroup         bool
	CreatedAt       pgtype.Timestamptz
	DeletedAt       pgtype.Timestamptz
}

type MessageInbox

type MessageInbox struct {
	ID              int64
	ToUserOrGroupID *int64
}

type MessageKey

type MessageKey struct {
	UserID          int64
	ToUserOrGroupID int64
	InGroup         bool
}

MessageKey is the shared shard key for the "messageKey" route.

type NullAnalysisState

type NullAnalysisState struct {
	AnalysisState AnalysisState
	Valid         bool // Valid is true if AnalysisState is not NULL
}

func (*NullAnalysisState) Scan

func (ns *NullAnalysisState) Scan(value interface{}) error

Scan implements the Scanner interface.

func (NullAnalysisState) Value

func (ns NullAnalysisState) Value() (driver.Value, error)

Value implements the driver Valuer interface.

type Querier

type Querier interface {
	// kind: write
	// shard: tenantKey(tenant_id)
	// store: Users
	CopyUsers(ctx context.Context, arg []*CopyUsersParams) (int64, error)
	// kind: write
	// shard: tenantKey(tenant_id)
	// store: Users
	CreateUser(ctx context.Context, arg *CreateUserParams) (*User, error)
	// kind: write
	// shard: all()
	// store: Users
	DeleteAllUsers(ctx context.Context) error
	// kind: write
	// shard: all()
	// store: Users
	DeleteAllUsersByName(ctx context.Context, name string) (int64, error)
	// kind: read
	// shard: tenantKey(tenant_id)
	// store: Analyses
	GetAnalysis(ctx context.Context, arg *GetAnalysisParams) (*Analysis, error)
	// kind: read
	// shard: tenantKey(tenant_id)
	// store: Analyses
	GetTenantUserAnalysis(ctx context.Context, arg *GetTenantUserAnalysisParams) (*GetTenantUserAnalysisRow, error)
	// kind: read
	// shard: tenantKey(tenant_id)
	// store: Users
	GetUser(ctx context.Context, arg *GetUserParams) (*User, error)
	// kind: read
	// shard: all()
	// store: Users
	ListAllUsers(ctx context.Context) ([]*User, error)
	// kind: read
	// shard: messageKey(user_id, to_user_or_group_id, in_group)
	// store: QueryMessage
	ListP2PMessageIDsByChat(ctx context.Context, arg *ListP2PMessageIDsByChatParams) ([]interface{}, error)
	// kind: read
	// shard: messageKey(user_id, to_user_or_group_id, in_group)
	// store: QueryMessage
	ListP2PMessagesByChat(ctx context.Context, arg *ListP2PMessagesByChatParams) ([]*Message, error)
	// kind: read
	// shard: tenantKey(tenant_id)
	// store: Users
	ListUsersByIDs(ctx context.Context, ids []int64) ([]*User, error)
	// kind: write
	// shard: tenantKey(tenant_id)
	// store: Users
	UpdateUserName(ctx context.Context, arg *UpdateUserNameParams) (*User, error)
}

type Queries

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

func New

func New(db DBTX) *Queries

func (*Queries) CopyUsers

func (q *Queries) CopyUsers(ctx context.Context, arg []*CopyUsersParams) (int64, error)

kind: write shard: tenantKey(tenant_id) store: Users

func (*Queries) CreateUser

func (q *Queries) CreateUser(ctx context.Context, arg *CreateUserParams) (*User, error)

kind: write shard: tenantKey(tenant_id) store: Users

func (*Queries) DeleteAllUsers

func (q *Queries) DeleteAllUsers(ctx context.Context) error

kind: write shard: all() store: Users

func (*Queries) DeleteAllUsersByName

func (q *Queries) DeleteAllUsersByName(ctx context.Context, name string) (int64, error)

kind: write shard: all() store: Users

func (*Queries) GetAnalysis

func (q *Queries) GetAnalysis(ctx context.Context, arg *GetAnalysisParams) (*Analysis, error)

kind: read shard: tenantKey(tenant_id) store: Analyses

func (*Queries) GetTenantUserAnalysis

func (q *Queries) GetTenantUserAnalysis(ctx context.Context, arg *GetTenantUserAnalysisParams) (*GetTenantUserAnalysisRow, error)

kind: read shard: tenantKey(tenant_id) store: Analyses

func (*Queries) GetUser

func (q *Queries) GetUser(ctx context.Context, arg *GetUserParams) (*User, error)

kind: read shard: tenantKey(tenant_id) store: Users

func (*Queries) ListAllUsers

func (q *Queries) ListAllUsers(ctx context.Context) ([]*User, error)

kind: read shard: all() store: Users

func (*Queries) ListP2PMessageIDsByChat

func (q *Queries) ListP2PMessageIDsByChat(ctx context.Context, arg *ListP2PMessageIDsByChatParams) ([]interface{}, error)

kind: read shard: messageKey(user_id, to_user_or_group_id, in_group) store: QueryMessage

func (*Queries) ListP2PMessagesByChat

func (q *Queries) ListP2PMessagesByChat(ctx context.Context, arg *ListP2PMessagesByChatParams) ([]*Message, error)

kind: read shard: messageKey(user_id, to_user_or_group_id, in_group) store: QueryMessage

func (*Queries) ListUsersByIDs

func (q *Queries) ListUsersByIDs(ctx context.Context, ids []int64) ([]*User, error)

kind: read shard: tenantKey(tenant_id) store: Users

func (*Queries) UpdateUserName

func (q *Queries) UpdateUserName(ctx context.Context, arg *UpdateUserNameParams) (*User, error)

kind: write shard: tenantKey(tenant_id) store: Users

func (*Queries) WithTx

func (q *Queries) WithTx(tx pgx.Tx) *Queries

type QueryMessage

type QueryMessage interface {
	QueryMessageReader
	QueryMessageWriter
}

QueryMessage exposes all queries in its generated store group.

type QueryMessageReader

type QueryMessageReader interface {
	// ListP2PMessageIDsByChat executes the generated ListP2PMessageIDsByChat query.
	ListP2PMessageIDsByChat(ctx context.Context, arg *ListP2PMessageIDsByChatT, storeOptions ...QueryOption) ([]interface{}, error)
	// ListP2PMessagesByChat executes the generated ListP2PMessagesByChat query.
	ListP2PMessagesByChat(ctx context.Context, arg *ListP2PMessagesByChatT, storeOptions ...QueryOption) ([]*Message, error)
}

QueryMessageReader exposes read queries in the QueryMessage store group.

type QueryMessageWriter

type QueryMessageWriter interface {
}

QueryMessageWriter exposes write queries in the QueryMessage store group.

type QueryOption

type QueryOption func(*queryOptions)

QueryOption customizes routing for one generated query call.

func ReadFromPrimary

func ReadFromPrimary() QueryOption

ReadFromPrimary routes a read query to the primary database.

func WithTx

func WithTx(tx pgx.Tx) QueryOption

WithTx executes a query through tx and suppresses write mirrors.

type ShardResolver

type ShardResolver[SK any] interface {
	// MessageKey resolves the "messageKey" shard route.
	MessageKey(key MessageKey) SK
	// TenantKey resolves the "tenantKey" shard route.
	TenantKey(key TenantKey) SK
}

ShardResolver resolves generated query parameters to shard keys.

type ShardedOption

type ShardedOption func(*shardedOptions)

ShardedOption customizes a sharded topology.

func WithReplicaSet

func WithReplicaSet(name string, primary DBTX, replicas ...DBTX) ShardedOption

WithReplicaSet appends a named primary and its optional read replicas.

func WithVShardMapping

func WithVShardMapping(mainReplicaSet string, vshards []uint64, mirrorReplicaSets ...string) ShardedOption

WithVShardMapping maps virtual shards to a main replica set and optional ordered write mirrors.

type SingletonOption

type SingletonOption func(*singletonConfig)

SingletonOption customizes a single-database topology.

func WithDatabaseName

func WithDatabaseName(name string) SingletonOption

WithDatabaseName identifies the database in telemetry. An empty name defaults to "default".

func WithReadReplicas

func WithReadReplicas(databases ...DBTX) SingletonOption

WithReadReplicas appends databases used for round-robin reads.

func WithWriteMirrors

func WithWriteMirrors(databases ...DBTX) SingletonOption

WithWriteMirrors appends databases that synchronously receive writes.

type Store

type Store interface {
	// Analyses returns the Analyses query group.
	Analyses() Analyses
	// QueryMessage returns the QueryMessage query group.
	QueryMessage() QueryMessage
	// Users returns the Users query group.
	Users() Users
}

Store is the topology-independent generated query API.

Example
log := &callLog{}
queries, err := NewStore(
	context.Background(),
	Sharded(
		1,
		pgmesh.ConstantShardHashFor[uint64](0),
		tenantResolver{},
		WithReplicaSet(
			"main",
			&fakeDB{name: "primary", log: log},
			&fakeDB{name: "replica", log: log},
		),
		WithReplicaSet("mirror", &fakeDB{name: "mirror", log: log}),
		WithVShardMapping("main", []uint64{0}, "mirror"),
	),
)
if err != nil {
	panic(err)
}

ctx := context.Background()
users := queries.Users()
if _, err := users.GetUser(ctx, &GetUserT{TenantKey: TenantKey{TenantID: 10}, ID: 20}); err != nil {
	panic(err)
}
if _, err := users.GetUser(ctx, &GetUserT{TenantKey: TenantKey{TenantID: 10}, ID: 20}, ReadFromPrimary()); err != nil {
	panic(err)
}
if _, err := users.CreateUser(ctx, &CreateUserT{TenantKey: TenantKey{TenantID: 10}, ID: 20, Name: "user"}); err != nil {
	panic(err)
}

fmt.Println(log.snapshot())
Output:
[replica primary primary mirror]

func NewStore

func NewStore(ctx context.Context, topology Topology, options ...StoreOption) (Store, error)

NewStore creates the generated query API from an opaque topology configuration.

type StoreOption

type StoreOption func(*storeOptions)

StoreOption customizes a generated store.

func WithAnalysesFactory

func WithAnalysesFactory(createAnalyses func(Analyses) Analyses) StoreOption

WithAnalysesFactory configures an optional wrapper for the Analyses query group. A nil factory leaves the generated query group unwrapped.

func WithCopyUsersBatching

func WithCopyUsersBatching(config pgmesh.CopyBatchConfig) StoreOption

WithCopyUsersBatching enables asynchronous micro-batching for CopyUsers.

func WithLogger

func WithLogger(logger *slog.Logger) StoreOption

WithLogger configures optional structured logging for routed queries. A nil logger disables logging.

func WithMeterProvider

func WithMeterProvider(provider metric.MeterProvider) StoreOption

WithMeterProvider configures the provider used for routed query metrics. A nil provider uses the global OpenTelemetry meter provider.

func WithQueryMessageFactory

func WithQueryMessageFactory(createQueryMessage func(QueryMessage) QueryMessage) StoreOption

WithQueryMessageFactory configures an optional wrapper for the QueryMessage query group. A nil factory leaves the generated query group unwrapped.

func WithTracerProvider

func WithTracerProvider(provider trace.TracerProvider) StoreOption

WithTracerProvider configures the provider used for routed query spans. A nil provider uses the global OpenTelemetry tracer provider.

func WithUsersFactory

func WithUsersFactory(createUsers func(Users) Users) StoreOption

WithUsersFactory configures an optional wrapper for the Users query group. A nil factory leaves the generated query group unwrapped.

type TenantKey

type TenantKey struct {
	TenantID int64
}

TenantKey is the shared shard key for the "tenantKey" route.

type Topology

type Topology interface {
	// contains filtered or unexported methods
}

Topology is an opaque database topology for Store.

func Sharded

func Sharded[SK any](numVShards uint64, shardHasher pgmesh.ShardHasher[SK], resolver ShardResolver[SK], options ...ShardedOption) Topology

Sharded returns an opaque sharded topology.

func Singleton

func Singleton(primary DBTX, options ...SingletonOption) Topology

Singleton returns a topology with one primary database.

type UpdateUserNameParams

type UpdateUserNameParams struct {
	TenantID int64
	ID       int64
	Name     string
}

type UpdateUserNameT

type UpdateUserNameT struct {
	TenantKey
	ID   int64
	Name string
}

UpdateUserNameT combines SQL and routing parameters for UpdateUserName.

type User

type User struct {
	ID       int64
	TenantID int64
	Name     string
}

type Users

type Users interface {
	UsersReader
	UsersWriter
}

Users exposes all queries in its generated store group.

type UsersReader

type UsersReader interface {
	// GetUser executes the generated GetUser query.
	GetUser(ctx context.Context, arg *GetUserT, storeOptions ...QueryOption) (*User, error)
	// ListAllUsers executes the generated ListAllUsers query.
	ListAllUsers(ctx context.Context, storeOptions ...QueryOption) ([]*User, error)
	// ListUsersByIDs executes the generated ListUsersByIDs query.
	ListUsersByIDs(ctx context.Context, arg []*ListUsersByIDsT, storeOptions ...QueryOption) ([]*User, error)
}

UsersReader exposes read queries in the Users store group.

type UsersWriter

type UsersWriter interface {
	// CopyUsers executes the generated CopyUsers query.
	CopyUsers(ctx context.Context, arg []*CopyUsersT, storeOptions ...QueryOption) (int64, error)
	// CopyUsersAsync accepts rows for asynchronous COPY.
	CopyUsersAsync(ctx context.Context, arg []*CopyUsersT) *pgmesh.Future[int64]
	// FlushCopyUsers drains asynchronous submissions accepted before its barrier.
	FlushCopyUsers(ctx context.Context) error
	// CreateUser executes the generated CreateUser query.
	CreateUser(ctx context.Context, arg *CreateUserT, storeOptions ...QueryOption) (*User, error)
	// DeleteAllUsers executes the generated DeleteAllUsers query.
	DeleteAllUsers(ctx context.Context, storeOptions ...QueryOption) error
	// DeleteAllUsersByName executes the generated DeleteAllUsersByName query.
	DeleteAllUsersByName(ctx context.Context, name string, storeOptions ...QueryOption) (int64, error)
	// UpdateUserName executes the generated UpdateUserName query.
	UpdateUserName(ctx context.Context, arg *UpdateUserNameT, storeOptions ...QueryOption) (*User, error)
}

UsersWriter exposes write queries in the Users store group.

Jump to

Keyboard shortcuts

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