/
githubmirror
/
squirrel
Обзор
Документация
Войти
/
githubmirror
/
squirrel
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
part.go
63 строки
1 KB
Igor Lazarev
#316 JoinClause with subquery produces wrong dollar parameter placeholders (#317)
20 май 2022, 18:33
Не верифицирован
20 май 2022, 18:33
9b18b54
Код
Авторство
О чём код?
package squirrel import ( "fmt" "io" ) type part struct { pred interface{} args []interface{} } func newPart(pred interface{}, args ...interface{}) Sqlizer { return &part{pred, args} } func (p part) ToSql() (sql string, args []interface{}, err error) { switch pred := p.pred.(type) { case nil: // no-op case Sqlizer: sql, args, err = nestedToSql(pred) case string: sql = pred args = p.args default: err = fmt.Errorf("expected string or Sqlizer, not %T", pred) } return } func nestedToSql(s Sqlizer) (string, []interface{}, error) { if raw, ok := s.(rawSqlizer); ok { return raw.toSqlRaw() } else { return s.ToSql() } } func appendToSql(parts []Sqlizer, w io.Writer, sep string, args []interface{}) ([]interface{}, error) { for i, p := range parts { partSql, partArgs, err := nestedToSql(p) if err != nil { return nil, err } else if len(partSql) == 0 { continue } if i > 0 { _, err := io.WriteString(w, sep) if err != nil { return nil, err } } _, err = io.WriteString(w, partSql) if err != nil { return nil, err } args = append(args, partArgs...) } return args, nil }