xorm/filter.go

50 lines
1.3 KiB
Go
Raw Normal View History

package xorm
import (
2013-12-18 03:31:32 +00:00
"fmt"
"strings"
)
2013-11-22 06:11:07 +00:00
// Filter is an interface to filter SQL
type Filter interface {
2013-12-18 03:31:32 +00:00
Do(sql string, session *Session) string
}
2013-11-22 06:11:07 +00:00
// PgSeqFilter filter SQL replace ?, ? ... to $1, $2 ...
type PgSeqFilter struct {
}
func (s *PgSeqFilter) Do(sql string, session *Session) string {
2013-12-18 03:31:32 +00:00
segs := strings.Split(sql, "?")
size := len(segs)
res := ""
for i, c := range segs {
if i < size-1 {
res += c + fmt.Sprintf("$%v", i+1)
}
}
res += segs[size-1]
return res
}
2013-11-22 06:11:07 +00:00
// QuoteFilter filter SQL replace ` to database's own quote character
type QuoteFilter struct {
}
func (s *QuoteFilter) Do(sql string, session *Session) string {
2013-12-18 03:31:32 +00:00
return strings.Replace(sql, "`", session.Engine.QuoteStr(), -1)
}
2013-11-22 06:11:07 +00:00
// IdFilter filter SQL replace (id) to primary key column name
type IdFilter struct {
}
func (i *IdFilter) Do(sql string, session *Session) string {
if session.Statement.RefTable != nil && len(session.Statement.RefTable.PrimaryKeys) == 1 {
sql = strings.Replace(sql, "`(id)`", session.Engine.Quote(session.Statement.RefTable.PrimaryKeys[0]), -1)
sql = strings.Replace(sql, session.Engine.Quote("(id)"), session.Engine.Quote(session.Statement.RefTable.PrimaryKeys[0]), -1)
return strings.Replace(sql, "(id)", session.Engine.Quote(session.Statement.RefTable.PrimaryKeys[0]), -1)
2013-12-18 03:31:32 +00:00
}
return sql
}