mirror of
https://github.com/geektutu/7days-golang.git
synced 2024-04-21 12:32:11 +00:00
76 lines
1.6 KiB
Go
76 lines
1.6 KiB
Go
package session
|
|
|
|
import (
|
|
"database/sql"
|
|
"geeorm/clause"
|
|
"geeorm/dialect"
|
|
"geeorm/log"
|
|
"geeorm/schema"
|
|
"strings"
|
|
)
|
|
|
|
// Session keep a pointer to sql.DB and provides all execution of all
|
|
// kind of database operations.
|
|
type Session struct {
|
|
db *sql.DB
|
|
dialect dialect.Dialect
|
|
refTable *schema.Schema
|
|
clause clause.Clause
|
|
sql strings.Builder
|
|
sqlVars []interface{}
|
|
}
|
|
|
|
// New creates a instance of Session
|
|
func New(db *sql.DB, dialect dialect.Dialect) *Session {
|
|
return &Session{
|
|
db: db,
|
|
dialect: dialect,
|
|
}
|
|
}
|
|
|
|
// Clear initialize the state of a session
|
|
func (s *Session) Clear() {
|
|
s.sql.Reset()
|
|
s.sqlVars = nil
|
|
s.clause = clause.Clause{}
|
|
}
|
|
|
|
// DB returns *sql.DB
|
|
func (s *Session) DB() *sql.DB {
|
|
return s.db
|
|
}
|
|
|
|
// Exec raw sql with sqlVars
|
|
func (s *Session) Exec() (result sql.Result, err error) {
|
|
defer s.Clear()
|
|
log.Info(s.sql.String(), s.sqlVars)
|
|
if result, err = s.DB().Exec(s.sql.String(), s.sqlVars...); err != nil {
|
|
log.Error(err)
|
|
}
|
|
return
|
|
}
|
|
|
|
// QueryRow gets a record from db
|
|
func (s *Session) QueryRow() *sql.Row {
|
|
defer s.Clear()
|
|
log.Info(s.sql.String(), s.sqlVars)
|
|
return s.DB().QueryRow(s.sql.String(), s.sqlVars...)
|
|
}
|
|
|
|
// QueryRows gets a list of records from db
|
|
func (s *Session) QueryRows() (rows *sql.Rows, err error) {
|
|
defer s.Clear()
|
|
log.Info(s.sql.String(), s.sqlVars)
|
|
if rows, err = s.DB().Query(s.sql.String(), s.sqlVars...); err != nil {
|
|
log.Error(err)
|
|
}
|
|
return
|
|
}
|
|
|
|
// Raw appends sql and sqlVars
|
|
func (s *Session) Raw(sql string, values ...interface{}) *Session {
|
|
s.sql.WriteString(sql)
|
|
s.sql.WriteString(" ")
|
|
s.sqlVars = append(s.sqlVars, values...)
|
|
return s
|
|
} |