30 lines
734 B
Go
30 lines
734 B
Go
package postgres
|
|
|
|
// Mechanism of combination several session updates into one
|
|
const sessionUpdateReq = `UPDATE sessions SET (pages_count, events_count) = (pages_count + $1, events_count + $2) WHERE session_id = $3`
|
|
|
|
type sessionUpdates struct {
|
|
sessionID uint64
|
|
pages int
|
|
events int
|
|
}
|
|
|
|
func NewSessionUpdates(sessionID uint64) *sessionUpdates {
|
|
return &sessionUpdates{
|
|
sessionID: sessionID,
|
|
pages: 0,
|
|
events: 0,
|
|
}
|
|
}
|
|
|
|
func (su *sessionUpdates) add(pages, events int) {
|
|
su.pages += pages
|
|
su.events += events
|
|
}
|
|
|
|
func (su *sessionUpdates) request() (string, []interface{}) {
|
|
if su.pages == 0 && su.events == 0 {
|
|
return "", nil
|
|
}
|
|
return sessionUpdateReq, []interface{}{su.pages, su.events, su.sessionID}
|
|
}
|