Documentation
¶
Index ¶
- Constants
- func ConcatPath(p1, p2 string) string
- func Count(ctx context.Context, q sqlx.QueryerContext, query string, params ...any) (int64, error)
- func MapError(err error) error
- func MapKeywordsToListFn(startMark, endMark string) func(item SearchQueryResultItem) SearchQueryResultItem
- func Path(names []string) string
- func Scan[T any](rows *sqlx.Rows) (T, error)
- func ScanRows[T any](rows *sqlx.Rows) ([]T, error)
- func ScanRowsQueryResult[T any](rows *sqlx.Rows) ([]T, error)
- func ScanRowsQueryResultAndMap[T, K any](rows *sqlx.Rows, mapFn func(entity T) K) ([]K, error)
- func SplitPath(path string) []string
- func ToNodePath(path string) string
- func ToNodePathName(path string) (string, string)
- func ToNodePathNamePairs(path string) [][]string
- type Db
- type DbConfig
- type DbContainer
- type DbOption
- type Format
- type IndexRecord
- type IndexRecordQuery
- type ModelTx
- type Node
- type QueryResult
- type SearchQuery
- type SearchQueryResult
- type SearchQueryResultItem
- type Tags
- type Tx
Constants ¶
const ( PqForeignKeyViolationError = pq.ErrorCode("23503") PqUniqueViolationError = pq.ErrorCode("23505") )
const ( NodeFlagFolder = 0 NodeFlagDocument = 1 // if it is set, it is a document. If not set, it is a folder )
Variables ¶
This section is empty.
Functions ¶
func ConcatPath ¶ added in v0.80.0
ConcatPath allows to concat two paths
func MapKeywordsToListFn ¶ added in v0.58.0
func MapKeywordsToListFn(startMark, endMark string) func(item SearchQueryResultItem) SearchQueryResultItem
func ScanRowsQueryResult ¶ added in v0.51.0
func ScanRowsQueryResultAndMap ¶ added in v0.51.0
func SplitPath ¶ added in v0.80.0
SplitPath splits the path on the nodes name according to their levels: "/aaa" -> "aaa" "aaa" -> "aaa" "///aaa//bbb" -> "aaa", "bbb" "aaa//bbb/c" -> "aaa", "bbb", "c"
func ToNodePath ¶ added in v0.80.0
ToNodePath returns the path in a form as expected by Node
func ToNodePathName ¶ added in v0.80.0
ToNodePathName returns the path and name parts of the given path as expected by Node
func ToNodePathNamePairs ¶ added in v0.80.0
ToNodePathNamePairs returns all the possible {path, name} pairs along the given path as expected by Node
Types ¶
type Db ¶
type Db interface {
// NewModelTx creates new ModelTx object
NewModelTx(ctx context.Context) ModelTx
// NewTx creates Tx object
NewTx(ctx context.Context) Tx
}
Db interface exposes
type DbConfig ¶ added in v0.51.0
type DbConfig struct {
Host string
Port string
User string
Password string
DbName string
SslMode string
}
func (DbConfig) DataSourceFull ¶ added in v0.51.0
func (DbConfig) DataSourceNoDb ¶ added in v0.51.0
type DbContainer ¶ added in v0.53.0
func NewNilDbContainer ¶ added in v0.53.0
func NewNilDbContainer(opts ...DbOption) (DbContainer, error)
func NewPgDbContainer ¶ added in v0.53.0
NewPgDbContainer runs pg database in a docker container.
type DbOption ¶ added in v0.51.0
type DbOption func(cfg *DbConfig)
func WithDbName ¶ added in v0.51.0
func WithPassword ¶ added in v0.61.0
func WithSslMode ¶ added in v0.61.0
type IndexRecord ¶ added in v0.0.2
type IndexRecord struct {
ID string `db:"id"`
NodeID int64 `db:"node_id"`
Segment string `db:"segment"`
Vector []byte `db:"vector"`
Format string `db:"format"`
RankMult float64 `db:"rank_multiplier"`
CreatedAt time.Time `db:"created_at"`
UpdatedAt time.Time `db:"updated_at"`
// search module specific fields
SegmentTsVector string `db:"segment_tsvector"`
}
type IndexRecordQuery ¶ added in v0.4.0
type ModelTx ¶
type ModelTx interface {
Tx
// CreateFormat creates format entry
CreateFormat(format Format) (Format, error)
// GetFormat retrieves format entry by ID
GetFormat(ID string) (Format, error)
// DeleteFormat deletes format entry by ID (only if not referenced)
DeleteFormat(ID string) error
// ListFormats lists all the existing format entries
ListFormats() ([]Format, error)
// CreateNodes allows to create one or several new Nodes. If a Node with the path already exists,
// the function will return ErrExists.
CreateNodes(nodes ...Node) ([]Node, error)
// ListNodes returns all nodes for the path. For example for the path="/a/b/doc.txt"
// the result nodes will be {<"/", "a">, {<"/a/", "b">, <"/a/b/", "doc.txt">}
ListNodes(path string) ([]Node, error)
// ListChildren returns the children for the path: all nodes of the 1st level with the path prefix in Path
//
// Example: for the nodes={<"/", "a">, <"/a/", "c">, <"/a/", "b">, <"/a/b/", "cc">}
// the result for the "/a/" will be {<"/a/", "c">, <"/a/", "b">}
ListChildren(path string) ([]Node, error)
// GetNode returns the node by its fqnp
GetNode(fqnp string) (Node, error)
// UpdateNode updates node data
UpdateNode(node Node) error
// DeleteNode deletes the Node and all records associated with the Node.
// force allows to delete folder nodes with children. If the node is folder, and there are children,
// but the force flag is false, the function will return ErrConflict error
//
// NOTE: The operation is not atomic until an external transaction is not started,
// the caller MUST start the transaction before using this method.
DeleteNode(nID int64, force bool) error
// UpsertIndexRecords creates or updates index record entries. It returns the new records created
UpsertIndexRecords(records ...IndexRecord) (int64, error)
// DeleteIndexRecords deletes index record entries
DeleteIndexRecords(records ...IndexRecord) (int64, error)
// QueryIndexRecords lists query matching index record entries
QueryIndexRecords(query IndexRecordQuery) (QueryResult[IndexRecord, string], error)
// Search performs search across existing index records
// the query string should be formed in accordance with the query
// language of the underlying search engine
//
// NOTE: The operation is not atomic until an external transaction is not started,
// the caller MUST start the transaction before using this method.
Search(query SearchQuery) (SearchQueryResult, error)
}
ModelTx provides a transaction with some methods for accessing to the Model objects
type Node ¶ added in v0.80.0
type Node struct {
ID int64 `db:"id"`
Path string `db:"path"`
// Name is either name of the folder or a document
Name string `db:"name"`
Tags Tags `db:"tags"`
Flags int32 `db:"flags"`
CreatedAt time.Time `db:"created_at"`
UpdatedAt time.Time `db:"updated_at"`
}
Node describes an object. The node has Path and Name, and the pair <Path, Name> must be unique within the tree. Name cannot be empty.
Root path is "/". The 3rd level path, for example, could be "/aaa/bbb/ccc/". Path is always ends by "/"
type QueryResult ¶
type SearchQuery ¶ added in v0.7.0
type SearchQueryResult ¶ added in v0.80.0
type SearchQueryResult struct {
Items []SearchQueryResultItem
Total int64
}
type SearchQueryResultItem ¶ added in v0.7.0
type SearchQueryResultItem struct {
IndexRecord
Path string `db:"path"`
MatchedKeywordsList []string // mapped manually after filling the MatchedKeywords
MatchedKeywords string `db:"matched_keywords"`
Score float32 `db:"score"`
}
type Tx ¶
type Tx interface {
// MustBegin starts the transaction
MustBegin()
// MustBeginSerializable starts new transaction with Serializable isolation level
MustBeginSerializable()
// Commit commits the changes made within the transaction
Commit() error
// Rollback rolls the transaction back
Rollback() error
// ExecScript allows to execute the sql statements from the file provided
ExecScript(sqlScript string) error
}
Tx interface describes an abstract DB transaction.