From e02ad854383265db216ed92b10c4f12408999d6a Mon Sep 17 00:00:00 2001 From: jan Date: Mon, 14 Nov 2016 21:55:41 +0100 Subject: grilist wieder schnell machen diff --git a/modules/grils/grils.go b/modules/grils/grils.go index d68c6df..0ba4c61 100644 --- a/modules/grils/grils.go +++ b/modules/grils/grils.go @@ -65,16 +65,23 @@ func (m *GrilsModule) getGrils(whereClause string, params ...interface{}) ([]*mo gril := &models.Gril{} var tags []byte var otherNames []byte - err = rows.Scan(&gril.ID, &gril.KanjiName, &gril.RomajiName, &otherNames, &gril.UpdatedAt, &gril.Age, &gril.Birthday, &tags) + + var kanjiName *string + err = rows.Scan(&gril.ID, &kanjiName, &gril.RomajiName, &otherNames, &gril.UpdatedAt, &gril.Age, &gril.Birthday, &tags) if err != nil { log.Println(gril.ID) log.Println("error scanning in getGrils:", err) continue } + if kanjiName != nil { + gril.KanjiName = *kanjiName + } gril.Tags = pgArray(tags) gril.OtherNames = pgArray(otherNames) + m.c.Insert(gril.ID, gril) + grils = append(grils, gril) } @@ -166,7 +173,7 @@ func (m *GrilsModule) FromID(id int) (*models.Gril, error) { defer rows.Close() for rows.Next() { - var name string + var name *string var name_type int if err := rows.Scan(&name, &name_type); err != nil { return nil, err @@ -174,43 +181,14 @@ func (m *GrilsModule) FromID(id int) (*models.Gril, error) { switch name_type { case 0: - gril.KanjiName = name + gril.KanjiName = *name break case 1: - gril.RomajiName = name + gril.RomajiName = *name default: - gril.OtherNames = append(gril.OtherNames, name) + gril.OtherNames = append(gril.OtherNames, *name) } } - /*rows, err := m.g.DB.Query(`SELECT name FROM grilist.gril_names WHERE gril_id = $1 AND name_type > 1`, id) - if err != nil { - return nil, err - } - defer rows.Close() - - for rows.Next() { - var name string - if err := rows.Scan(&name); err != nil { - return nil, err - } - gril.OtherNames = append(gril.OtherNames, name) - } - rows.Close() - - // Tags holen - rows, err := m.g.DB.Query(`SELECT name FROM grilist.tags WHERE id IN (SELECT tag_id FROM grilist.grils_tags WHERE gril_id = $1)`, id) - if err != nil { - return nil, err - } - defer rows.Close() - - for rows.Next() { - var name string - if err := rows.Scan(&name); err != nil { - return nil, err - } - gril.Tags = append(gril.Tags, name) - }*/ m.c.Insert(id, gril) log.Printf("get_gril_from_id: %dms", time.Since(t1).Nanoseconds()/1000000) @@ -222,9 +200,16 @@ func (m *GrilsModule) FromIDs(ids []int) ([]*models.Gril, error) { return make([]*models.Gril, 0), nil } + t1 := time.Now() idList := "(" first := true + var list []*models.Gril for _, v := range ids { + if m.c.Has(v) { + g, _ := m.c.Get(v) + list = append(list, g.(*models.Gril)) + continue + } if first { first = false } else { @@ -234,7 +219,12 @@ func (m *GrilsModule) FromIDs(ids []int) ([]*models.Gril, error) { } idList += ")" grils, err := m.getGrils("id IN " + idList) - return grils, err + + for _, g := range grils { + list = append(list, g) + } + log.Printf("get_gril_from_ids: %dms", time.Since(t1).Nanoseconds()/1000000) + return list, err } func (m *GrilsModule) viewGril(w http.ResponseWriter, r *http.Request, p httprouter.Params) { diff --git a/modules/lists/lists.go b/modules/lists/lists.go index c287dc5..65919e8 100644 --- a/modules/lists/lists.go +++ b/modules/lists/lists.go @@ -78,6 +78,7 @@ func (m *Module) getListGrils(list *models.List) error { defer rows.Close() list.Grils = list.Grils[:0] + var ids []int for rows.Next() { var grilID int lg := &models.ListGril{} @@ -86,16 +87,21 @@ func (m *Module) getListGrils(list *models.List) error { log.Println("error scanning row in getListGrils:", err) continue } - - gril, err := m.grils.FromID(grilID) - if err != nil { - log.Println("error getting listGril:", err) - continue - } - lg.Gril = gril + ids = append(ids, grilID) list.Grils = append(list.Grils, lg) } + + // grils holen + grils, err := m.grils.FromIDs(ids) + if err != nil { + return err + } + + for id, gril := range grils { + list.Grils[id].Gril = gril + } + sort.Sort(ListGrils(list.Grils)) return nil } -- cgit v0.10.1