77 _ "github.com/lib/pq"
88 "log"
99 "os"
10+ "strings"
1011)
1112
1213func GetDatabaseURL () (string , error ) {
@@ -83,26 +84,11 @@ func FetchTerms(db *sql.DB, term string) ([]string, error) {
8384 return result , rows .Err ()
8485}
8586
86- func FetchCards ( db * sql.DB , cond Condition ) ([]Card , error ) {
87+ func scanCards ( rows * sql.Rows ) ([]Card , error ) {
8788 cards := []Card {}
8889
89- query := Select ("record" ).From ("cards" ).Where (cond ).Limit (100 ).OrderBy ("name" , true )
90-
91- ql , items , err := query .ToSql ()
92-
93- if err != nil {
94- return cards , err
95- }
96-
97- log .Println (ql , items )
98-
99- rows , err := db .Query (ql , items ... )
100-
101- if err != nil {
102- return cards , err
103- }
104-
10590 defer rows .Close ()
91+
10692 for rows .Next () {
10793 var blob []byte
10894 var card Card
@@ -111,7 +97,7 @@ func FetchCards(db *sql.DB, cond Condition) ([]Card, error) {
11197 return cards , err
11298 }
11399
114- err = json .Unmarshal (blob , & card )
100+ err : = json .Unmarshal (blob , & card )
115101
116102 if err != nil {
117103 return cards , err
@@ -122,9 +108,44 @@ func FetchCards(db *sql.DB, cond Condition) ([]Card, error) {
122108 if err := rows .Err (); err != nil {
123109 return cards , err
124110 }
111+
125112 return cards , nil
126113}
127114
115+ func FetchTypeahead (db * sql.DB , search string ) ([]Card , error ) {
116+ if strings .ContainsAny (search , "%_" ) {
117+ return []Card {}, fmt .Errorf ("Search string can't contain '%%' or '_'" )
118+ }
119+
120+ rows , err := db .Query ("SELECT record FROM cards WHERE name ILIKE $1 ORDER BY name LIMIT 10" , search + "%" )
121+
122+ if err != nil {
123+ return []Card {}, err
124+ }
125+
126+ return scanCards (rows )
127+ }
128+
129+ func FetchCards (db * sql.DB , cond Condition ) ([]Card , error ) {
130+ query := Select ("record" ).From ("cards" ).Where (cond ).Limit (100 ).OrderBy ("name" , true )
131+
132+ ql , items , err := query .ToSql ()
133+
134+ if err != nil {
135+ return []Card {}, err
136+ }
137+
138+ log .Println (ql , items )
139+
140+ rows , err := db .Query (ql , items ... )
141+
142+ if err != nil {
143+ return []Card {}, err
144+ }
145+
146+ return scanCards (rows )
147+ }
148+
128149func FetchCard (db * sql.DB , id string ) (Card , error ) {
129150 var blob []byte
130151 var card Card
0 commit comments