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 Basis
- 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
- type Vector
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 Basis ¶ added in v0.5.0
type Basis json.RawMessage
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 Vector `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 SearchQuery struct { Path string Query string // underlying search engine query Tags Tags // index tags // Strict defines the search records behavior: // - If true, the search will select between all records associated with the Path node only (Path == "PathXName" for the Node with <PathX, Name> pair) // - If false, the search will select between records in the Path subtree for all records there (every Node where path has Path prefix), // but only one most relevant record per one node (one record per <PathX, Name> pair) Strict bool Offset int Limit int }
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.
type Vector ¶ added in v0.5.0
type Vector json.RawMessage