Skip to content

Commit 0000931

Browse files
authored
修复PostgreSQL数据库下,添加项目成员和全文搜索时发生的SQL语法兼容性错误 (#986)
* FixedBUG: pq: 不支持 LIMIT #,# 语法 * FixedBug: 修复全文搜索时,因不兼容PostgreSQL发生的语法错误 * 读取 dbadapter 以尽可能的兼容不同数据库
1 parent 0a93dbe commit 0000931

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

models/DocumentSearchResult.go

+12-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package models
22

33
import (
4+
"fmt"
45
"regexp"
56
"strings"
67
"time"
@@ -36,6 +37,15 @@ func need_escape(keyword string) bool {
3637
return false
3738
}
3839

40+
func escape_name(name string) string {
41+
dbadapter, _ := web.AppConfig.String("db_adapter")
42+
ch := "`"
43+
if strings.EqualFold(dbadapter, "postgres") {
44+
ch = `"`
45+
}
46+
return fmt.Sprintf("%s%s%s", ch, name, ch)
47+
}
48+
3949
func NewDocumentSearchResult() *DocumentSearchResult {
4050
return &DocumentSearchResult{}
4151
}
@@ -294,7 +304,7 @@ WHERE (book.privately_owned = 0 OR rel1.relationship_id > 0 or team.team_member_
294304
func (m *DocumentSearchResult) SearchDocument(keyword string, bookId int) (docs []*DocumentSearchResult, err error) {
295305
o := orm.NewOrm()
296306

297-
sql := "SELECT * FROM md_documents WHERE book_id = ? AND (document_name LIKE ? OR `release` LIKE ?) "
307+
sql := fmt.Sprintf("SELECT * FROM md_documents WHERE book_id = ? AND (document_name LIKE ? OR %s LIKE ?) ", escape_name("release"))
298308
keyword = "%" + keyword + "%"
299309

300310
_need_escape := need_escape(keyword)
@@ -304,7 +314,6 @@ func (m *DocumentSearchResult) SearchDocument(keyword string, bookId int) (docs
304314
}
305315
return sql
306316
}
307-
308317
_, err = o.Raw(escape_sql(sql), bookId, keyword, keyword).QueryRows(&docs)
309318

310319
return
@@ -314,7 +323,7 @@ func (m *DocumentSearchResult) SearchDocument(keyword string, bookId int) (docs
314323
func (m *DocumentSearchResult) SearchAllDocument(keyword string) (docs []*DocumentSearchResult, err error) {
315324
o := orm.NewOrm()
316325

317-
sql := "SELECT * FROM md_documents WHERE (document_name LIKE ? OR `release` LIKE ?) "
326+
sql := fmt.Sprintf("SELECT * FROM md_documents WHERE (document_name LIKE ? OR %s LIKE ?) ", escape_name("release"))
318327
keyword = "%" + keyword + "%"
319328

320329
_need_escape := need_escape(keyword)

models/MemberResult.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ func (m *MemberRelationshipResult) FindNotJoinUsersByAccount(bookId, limit int,
115115
func (m *MemberRelationshipResult) FindNotJoinUsersByAccountOrRealName(bookId, limit int, keyWord string) ([]*Member, error) {
116116
o := orm.NewOrm()
117117

118-
sql := "SELECT m.* FROM md_members as m LEFT JOIN md_relationship as rel ON rel.member_id = m.member_id AND rel.book_id = ? WHERE rel.relationship_id IS NULL AND (m.real_name LIKE ? OR m.account LIKE ?) LIMIT 0,?;"
118+
sql := "SELECT m.* FROM md_members as m LEFT JOIN md_relationship as rel ON rel.member_id = m.member_id AND rel.book_id = ? WHERE rel.relationship_id IS NULL AND (m.real_name LIKE ? OR m.account LIKE ?) LIMIT ? OFFSET 0;"
119119

120120
var members []*Member
121121

0 commit comments

Comments
 (0)