MCPcopy Create free account
hub / github.com/OpenListTeam/OpenList / SearchNode

Function SearchNode

internal/db/searchnode.go:57–91  ·  view source on GitHub ↗
(req model.SearchReq, useFullText bool)

Source from the content-addressed store, hash-verified

55}
56
57func SearchNode(req model.SearchReq, useFullText bool) ([]model.SearchNode, int64, error) {
58 var searchDB *gorm.DB
59 if !useFullText || conf.Conf.Database.Type == "sqlite3" {
60 keywordsClause := db.Where("1 = 1")
61 for _, keyword := range strings.Fields(req.Keywords) {
62 keywordsClause = keywordsClause.Where("name LIKE ?", fmt.Sprintf("%%%s%%", keyword))
63 }
64 searchDB = db.Model(&model.SearchNode{}).Where(whereInParent(req.Parent)).Where(keywordsClause)
65 } else {
66 switch conf.Conf.Database.Type {
67 case "mysql":
68 searchDB = db.Model(&model.SearchNode{}).Where(whereInParent(req.Parent)).
69 Where("MATCH (name) AGAINST (? IN BOOLEAN MODE)", "'*"+req.Keywords+"*'")
70 case "postgres":
71 searchDB = db.Model(&model.SearchNode{}).Where(whereInParent(req.Parent)).
72 Where("to_tsvector(name) @@ to_tsquery(?)", strings.Join(strings.Fields(req.Keywords), " & "))
73 }
74 }
75
76 if req.Scope != 0 {
77 isDir := req.Scope == 1
78 searchDB.Where(db.Where("is_dir = ?", isDir))
79 }
80
81 var count int64
82 if err := searchDB.Count(&count).Error; err != nil {
83 return nil, 0, errors.Wrapf(err, "failed get search items count")
84 }
85 var files []model.SearchNode
86 if err := searchDB.Order("name asc").Offset((req.Page - 1) * req.PerPage).Limit(req.PerPage).
87 Find(&files).Error; err != nil {
88 return nil, 0, err
89 }
90 return files, count, nil
91}

Callers 2

SearchMethod · 0.92
SearchMethod · 0.92

Calls 3

whereInParentFunction · 0.85
CountMethod · 0.80
LimitMethod · 0.80

Tested by

no test coverage detected