optimize sql generation in datastore.InsertPageviews func.

This commit is contained in:
Danny van Kooten 2018-07-15 09:36:28 +02:00
parent 1fea0dc66f
commit b2d881e31b
1 changed files with 6 additions and 6 deletions

View File

@ -32,17 +32,17 @@ func (db *sqlstore) InsertPageviews(pageviews []*models.Pageview) error {
return nil return nil
} }
placeholders := make([]string, 0, n) // generate placeholders string
values := make([]interface{}, 0, n*10) placeholders := strings.Repeat("(?, ?, ?, ?, ?, ?, ?, ?, ?, ?),", n)
placeholders = placeholders[:len(placeholders)-1]
// generate values slice
values := make([]interface{}, 0, n*10)
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
placeholders = append(placeholders, "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")
values = append(values, pageviews[i].ID, pageviews[i].Hostname, pageviews[i].Pathname, pageviews[i].IsNewVisitor, pageviews[i].IsNewSession, pageviews[i].IsUnique, pageviews[i].IsBounce, pageviews[i].Referrer, pageviews[i].Duration, pageviews[i].Timestamp) values = append(values, pageviews[i].ID, pageviews[i].Hostname, pageviews[i].Pathname, pageviews[i].IsNewVisitor, pageviews[i].IsNewSession, pageviews[i].IsUnique, pageviews[i].IsBounce, pageviews[i].Referrer, pageviews[i].Duration, pageviews[i].Timestamp)
} }
query := `INSERT INTO pageviews(id, hostname, pathname, is_new_visitor, is_new_session, is_unique, is_bounce, referrer, duration, timestamp) VALUES ` query := `INSERT INTO pageviews(id, hostname, pathname, is_new_visitor, is_new_session, is_unique, is_bounce, referrer, duration, timestamp) VALUES ` + placeholders
query = query + strings.Join(placeholders, ",")
query = db.Rebind(query) query = db.Rebind(query)
_, err := db.Exec(query, values...) _, err := db.Exec(query, values...)
if err != nil { if err != nil {