1// Code generated by sqlc. DO NOT EDIT.
2// versions:
3// sqlc v1.30.0
4// source: history.sql
5
6package sqlc
7
8import (
9 "context"
10 "database/sql"
11)
12
13const CapVisitCount = `-- name: CapVisitCount :exec
14UPDATE history SET visit_count = ? WHERE url = ? AND visit_count > ?
15`
16
17type CapVisitCountParams struct {
18 VisitCount sql.NullInt64 `json:"visit_count"`
19 Url string `json:"url"`
20 VisitCount_2 sql.NullInt64 `json:"visit_count_2"`
21}
22
23func (q *Queries) CapVisitCount(ctx context.Context, arg CapVisitCountParams) error {
24 _, err := q.db.ExecContext(ctx, CapVisitCount, arg.VisitCount, arg.Url, arg.VisitCount_2)
25 return err
26}
27
28const DeleteAllHistory = `-- name: DeleteAllHistory :exec
29DELETE FROM history
30`
31
32func (q *Queries) DeleteAllHistory(ctx context.Context) error {
33 _, err := q.db.ExecContext(ctx, DeleteAllHistory)
34 return err
35}
36
37const DeleteHistoryByDomain = `-- name: DeleteHistoryByDomain :exec
38DELETE FROM history WHERE domain = ?1
39`
40
41func (q *Queries) DeleteHistoryByDomain(ctx context.Context, domain sql.NullString) error {
42 _, err := q.db.ExecContext(ctx, DeleteHistoryByDomain, domain)
43 return err
44}
45
46const DeleteHistoryByID = `-- name: DeleteHistoryByID :exec
47DELETE FROM history WHERE id = ?
48`
49
50func (q *Queries) DeleteHistoryByID(ctx context.Context, id int64) error {
51 _, err := q.db.ExecContext(ctx, DeleteHistoryByID, id)
52 return err
53}
54
55const DeleteHistoryOlderThan = `-- name: DeleteHistoryOlderThan :exec
56DELETE FROM history WHERE last_visited < ?
57`
58
59func (q *Queries) DeleteHistoryOlderThan(ctx context.Context, lastVisited sql.NullTime) error {
60 _, err := q.db.ExecContext(ctx, DeleteHistoryOlderThan, lastVisited)
61 return err
62}
63
64const DeleteHistorySince = `-- name: DeleteHistorySince :exec
65DELETE FROM history WHERE last_visited >= ?
66`
67
68func (q *Queries) DeleteHistorySince(ctx context.Context, lastVisited sql.NullTime) error {
69 _, err := q.db.ExecContext(ctx, DeleteHistorySince, lastVisited)
70 return err
71}
72
73const GetAllMostVisited = `-- name: GetAllMostVisited :many
74SELECT id, url, title, favicon_url, visit_count, last_visited, created_at, domain FROM history
75ORDER BY visit_count DESC, last_visited DESC
76`
77
78func (q *Queries) GetAllMostVisited(ctx context.Context) ([]History, error) {
79 rows, err := q.db.QueryContext(ctx, GetAllMostVisited)
80 if err != nil {
81 return nil, err
82 }
83 defer rows.Close()
84 items := []History{}
85 for rows.Next() {
86 var i History
87 if err := rows.Scan(
88 &i.ID,
89 &i.Url,
90 &i.Title,
91 &i.FaviconUrl,
92 &i.VisitCount,
93 &i.LastVisited,
94 &i.CreatedAt,
95 &i.Domain,
96 ); err != nil {
97 return nil, err
98 }
99 items = append(items, i)
100 }
101 if err := rows.Close(); err != nil {
102 return nil, err
103 }
104 if err := rows.Err(); err != nil {
105 return nil, err
106 }
107 return items, nil
108}
109
110const GetAllRecentHistory = `-- name: GetAllRecentHistory :many
111SELECT id, url, title, favicon_url, visit_count, last_visited, created_at, domain FROM history
112ORDER BY last_visited DESC, id DESC
113`
114
115func (q *Queries) GetAllRecentHistory(ctx context.Context) ([]History, error) {
116 rows, err := q.db.QueryContext(ctx, GetAllRecentHistory)
117 if err != nil {
118 return nil, err
119 }
120 defer rows.Close()
121 items := []History{}
122 for rows.Next() {
123 var i History
124 if err := rows.Scan(
125 &i.ID,
126 &i.Url,
127 &i.Title,
128 &i.FaviconUrl,
129 &i.VisitCount,
130 &i.LastVisited,
131 &i.CreatedAt,
132 &i.Domain,
133 ); err != nil {
134 return nil, err
135 }
136 items = append(items, i)
137 }
138 if err := rows.Close(); err != nil {
139 return nil, err
140 }
141 if err := rows.Err(); err != nil {
142 return nil, err
143 }
144 return items, nil
145}
146
147const GetAllRecentHistoryByDomain = `-- name: GetAllRecentHistoryByDomain :many
148SELECT id, url, title, favicon_url, visit_count, last_visited, created_at, domain FROM history
149WHERE domain = ?1
150ORDER BY last_visited DESC, id DESC
151`
152
153func (q *Queries) GetAllRecentHistoryByDomain(ctx context.Context, domain sql.NullString) ([]History, error) {
154 rows, err := q.db.QueryContext(ctx, GetAllRecentHistoryByDomain, domain)
155 if err != nil {
156 return nil, err
157 }
158 defer rows.Close()
159 items := []History{}
160 for rows.Next() {
161 var i History
162 if err := rows.Scan(
163 &i.ID,
164 &i.Url,
165 &i.Title,
166 &i.FaviconUrl,
167 &i.VisitCount,
168 &i.LastVisited,
169 &i.CreatedAt,
170 &i.Domain,
171 ); err != nil {
172 return nil, err
173 }
174 items = append(items, i)
175 }
176 if err := rows.Close(); err != nil {
177 return nil, err
178 }
179 if err := rows.Err(); err != nil {
180 return nil, err
181 }
182 return items, nil
183}
184
185const GetDailyVisitCount = `-- name: GetDailyVisitCount :many
186SELECT
187 date(last_visited) as day,
188 COUNT(*) as entries,
189 SUM(visit_count) as visits
190FROM history
191WHERE last_visited >= date('now', ?)
192GROUP BY day
193ORDER BY day ASC
194`
195
196type GetDailyVisitCountRow struct {
197 Day interface{} `json:"day"`
198 Entries int64 `json:"entries"`
199 Visits sql.NullFloat64 `json:"visits"`
200}
201
202func (q *Queries) GetDailyVisitCount(ctx context.Context, date interface{}) ([]GetDailyVisitCountRow, error) {
203 rows, err := q.db.QueryContext(ctx, GetDailyVisitCount, date)
204 if err != nil {
205 return nil, err
206 }
207 defer rows.Close()
208 items := []GetDailyVisitCountRow{}
209 for rows.Next() {
210 var i GetDailyVisitCountRow
211 if err := rows.Scan(&i.Day, &i.Entries, &i.Visits); err != nil {
212 return nil, err
213 }
214 items = append(items, i)
215 }
216 if err := rows.Close(); err != nil {
217 return nil, err
218 }
219 if err := rows.Err(); err != nil {
220 return nil, err
221 }
222 return items, nil
223}
224
225const GetDomainStats = `-- name: GetDomainStats :many
226SELECT
227 COALESCE(domain, '') as domain,
228 COUNT(*) as page_count,
229 SUM(visit_count) as total_visits,
230 MAX(last_visited) as last_visit
231FROM history
232WHERE domain IS NOT NULL AND domain != ''
233GROUP BY domain
234ORDER BY total_visits DESC
235LIMIT ?
236`
237
238type GetDomainStatsRow struct {
239 Domain string `json:"domain"`
240 PageCount int64 `json:"page_count"`
241 TotalVisits sql.NullFloat64 `json:"total_visits"`
242 LastVisit interface{} `json:"last_visit"`
243}
244
245func (q *Queries) GetDomainStats(ctx context.Context, limit int64) ([]GetDomainStatsRow, error) {
246 rows, err := q.db.QueryContext(ctx, GetDomainStats, limit)
247 if err != nil {
248 return nil, err
249 }
250 defer rows.Close()
251 items := []GetDomainStatsRow{}
252 for rows.Next() {
253 var i GetDomainStatsRow
254 if err := rows.Scan(
255 &i.Domain,
256 &i.PageCount,
257 &i.TotalVisits,
258 &i.LastVisit,
259 ); err != nil {
260 return nil, err
261 }
262 items = append(items, i)
263 }
264 if err := rows.Close(); err != nil {
265 return nil, err
266 }
267 if err := rows.Err(); err != nil {
268 return nil, err
269 }
270 return items, nil
271}
272
273const GetHistoryByURL = `-- name: GetHistoryByURL :one
274SELECT id, url, title, favicon_url, visit_count, last_visited, created_at, domain FROM history WHERE url = ? LIMIT 1
275`
276
277func (q *Queries) GetHistoryByURL(ctx context.Context, url string) (History, error) {
278 row := q.db.QueryRowContext(ctx, GetHistoryByURL, url)
279 var i History
280 err := row.Scan(
281 &i.ID,
282 &i.Url,
283 &i.Title,
284 &i.FaviconUrl,
285 &i.VisitCount,
286 &i.LastVisited,
287 &i.CreatedAt,
288 &i.Domain,
289 )
290 return i, err
291}
292
293const GetHistoryStats = `-- name: GetHistoryStats :one
294SELECT
295 COUNT(*) as total_entries,
296 COALESCE(SUM(visit_count), 0) as total_visits,
297 COUNT(DISTINCT date(last_visited)) as unique_days
298FROM history
299`
300
301type GetHistoryStatsRow struct {
302 TotalEntries int64 `json:"total_entries"`
303 TotalVisits interface{} `json:"total_visits"`
304 UniqueDays int64 `json:"unique_days"`
305}
306
307func (q *Queries) GetHistoryStats(ctx context.Context) (GetHistoryStatsRow, error) {
308 row := q.db.QueryRowContext(ctx, GetHistoryStats)
309 var i GetHistoryStatsRow
310 err := row.Scan(&i.TotalEntries, &i.TotalVisits, &i.UniqueDays)
311 return i, err
312}
313
314const GetHourlyDistribution = `-- name: GetHourlyDistribution :many
315SELECT
316 CAST(strftime('%H', last_visited) AS INTEGER) as hour,
317 COUNT(*) as visit_count
318FROM history
319GROUP BY hour
320ORDER BY hour
321`
322
323type GetHourlyDistributionRow struct {
324 Hour int64 `json:"hour"`
325 VisitCount int64 `json:"visit_count"`
326}
327
328func (q *Queries) GetHourlyDistribution(ctx context.Context) ([]GetHourlyDistributionRow, error) {
329 rows, err := q.db.QueryContext(ctx, GetHourlyDistribution)
330 if err != nil {
331 return nil, err
332 }
333 defer rows.Close()
334 items := []GetHourlyDistributionRow{}
335 for rows.Next() {
336 var i GetHourlyDistributionRow
337 if err := rows.Scan(&i.Hour, &i.VisitCount); err != nil {
338 return nil, err
339 }
340 items = append(items, i)
341 }
342 if err := rows.Close(); err != nil {
343 return nil, err
344 }
345 if err := rows.Err(); err != nil {
346 return nil, err
347 }
348 return items, nil
349}
350
351const GetMostVisited = `-- name: GetMostVisited :many
352SELECT id, url, title, favicon_url, visit_count, last_visited, created_at, domain FROM history
353WHERE last_visited >= datetime('now', ?)
354ORDER BY visit_count DESC, last_visited DESC
355`
356
357func (q *Queries) GetMostVisited(ctx context.Context, datetime interface{}) ([]History, error) {
358 rows, err := q.db.QueryContext(ctx, GetMostVisited, datetime)
359 if err != nil {
360 return nil, err
361 }
362 defer rows.Close()
363 items := []History{}
364 for rows.Next() {
365 var i History
366 if err := rows.Scan(
367 &i.ID,
368 &i.Url,
369 &i.Title,
370 &i.FaviconUrl,
371 &i.VisitCount,
372 &i.LastVisited,
373 &i.CreatedAt,
374 &i.Domain,
375 ); err != nil {
376 return nil, err
377 }
378 items = append(items, i)
379 }
380 if err := rows.Close(); err != nil {
381 return nil, err
382 }
383 if err := rows.Err(); err != nil {
384 return nil, err
385 }
386 return items, nil
387}
388
389const GetRecentHistory = `-- name: GetRecentHistory :many
390SELECT id, url, title, favicon_url, visit_count, last_visited, created_at, domain FROM history
391ORDER BY last_visited DESC, id DESC
392LIMIT ? OFFSET ?
393`
394
395type GetRecentHistoryParams struct {
396 Limit int64 `json:"limit"`
397 Offset int64 `json:"offset"`
398}
399
400func (q *Queries) GetRecentHistory(ctx context.Context, arg GetRecentHistoryParams) ([]History, error) {
401 rows, err := q.db.QueryContext(ctx, GetRecentHistory, arg.Limit, arg.Offset)
402 if err != nil {
403 return nil, err
404 }
405 defer rows.Close()
406 items := []History{}
407 for rows.Next() {
408 var i History
409 if err := rows.Scan(
410 &i.ID,
411 &i.Url,
412 &i.Title,
413 &i.FaviconUrl,
414 &i.VisitCount,
415 &i.LastVisited,
416 &i.CreatedAt,
417 &i.Domain,
418 ); err != nil {
419 return nil, err
420 }
421 items = append(items, i)
422 }
423 if err := rows.Close(); err != nil {
424 return nil, err
425 }
426 if err := rows.Err(); err != nil {
427 return nil, err
428 }
429 return items, nil
430}
431
432const GetRecentHistoryByDomain = `-- name: GetRecentHistoryByDomain :many
433SELECT id, url, title, favicon_url, visit_count, last_visited, created_at, domain FROM history
434WHERE domain = ?1
435ORDER BY last_visited DESC, id DESC
436LIMIT ?3 OFFSET ?2
437`
438
439type GetRecentHistoryByDomainParams struct {
440 Domain sql.NullString `json:"domain"`
441 Offset int64 `json:"offset"`
442 Limit int64 `json:"limit"`
443}
444
445func (q *Queries) GetRecentHistoryByDomain(ctx context.Context, arg GetRecentHistoryByDomainParams) ([]History, error) {
446 rows, err := q.db.QueryContext(ctx, GetRecentHistoryByDomain, arg.Domain, arg.Offset, arg.Limit)
447 if err != nil {
448 return nil, err
449 }
450 defer rows.Close()
451 items := []History{}
452 for rows.Next() {
453 var i History
454 if err := rows.Scan(
455 &i.ID,
456 &i.Url,
457 &i.Title,
458 &i.FaviconUrl,
459 &i.VisitCount,
460 &i.LastVisited,
461 &i.CreatedAt,
462 &i.Domain,
463 ); err != nil {
464 return nil, err
465 }
466 items = append(items, i)
467 }
468 if err := rows.Close(); err != nil {
469 return nil, err
470 }
471 if err := rows.Err(); err != nil {
472 return nil, err
473 }
474 return items, nil
475}
476
477const GetRecentHistorySince = `-- name: GetRecentHistorySince :many
478SELECT id, url, title, favicon_url, visit_count, last_visited, created_at, domain FROM history
479WHERE last_visited >= datetime('now', ?)
480ORDER BY last_visited DESC
481`
482
483func (q *Queries) GetRecentHistorySince(ctx context.Context, datetime interface{}) ([]History, error) {
484 rows, err := q.db.QueryContext(ctx, GetRecentHistorySince, datetime)
485 if err != nil {
486 return nil, err
487 }
488 defer rows.Close()
489 items := []History{}
490 for rows.Next() {
491 var i History
492 if err := rows.Scan(
493 &i.ID,
494 &i.Url,
495 &i.Title,
496 &i.FaviconUrl,
497 &i.VisitCount,
498 &i.LastVisited,
499 &i.CreatedAt,
500 &i.Domain,
501 ); err != nil {
502 return nil, err
503 }
504 items = append(items, i)
505 }
506 if err := rows.Close(); err != nil {
507 return nil, err
508 }
509 if err := rows.Err(); err != nil {
510 return nil, err
511 }
512 return items, nil
513}
514
515const GetRecentHistoryWindow = `-- name: GetRecentHistoryWindow :many
516SELECT id, url, title, favicon_url, visit_count, last_visited, created_at, domain FROM history
517WHERE last_visited < ?1 OR (last_visited = ?1 AND id < ?2)
518ORDER BY last_visited DESC, id DESC
519LIMIT ?3
520`
521
522type GetRecentHistoryWindowParams struct {
523 Before sql.NullTime `json:"before"`
524 BeforeID int64 `json:"before_id"`
525 Limit int64 `json:"limit"`
526}
527
528func (q *Queries) GetRecentHistoryWindow(ctx context.Context, arg GetRecentHistoryWindowParams) ([]History, error) {
529 rows, err := q.db.QueryContext(ctx, GetRecentHistoryWindow, arg.Before, arg.BeforeID, arg.Limit)
530 if err != nil {
531 return nil, err
532 }
533 defer rows.Close()
534 items := []History{}
535 for rows.Next() {
536 var i History
537 if err := rows.Scan(
538 &i.ID,
539 &i.Url,
540 &i.Title,
541 &i.FaviconUrl,
542 &i.VisitCount,
543 &i.LastVisited,
544 &i.CreatedAt,
545 &i.Domain,
546 ); err != nil {
547 return nil, err
548 }
549 items = append(items, i)
550 }
551 if err := rows.Close(); err != nil {
552 return nil, err
553 }
554 if err := rows.Err(); err != nil {
555 return nil, err
556 }
557 return items, nil
558}
559
560const GetRecentHistoryWindowByDomain = `-- name: GetRecentHistoryWindowByDomain :many
561SELECT id, url, title, favicon_url, visit_count, last_visited, created_at, domain FROM history
562WHERE domain = ?1 AND (last_visited < ?2 OR (last_visited = ?2 AND id < ?3))
563ORDER BY last_visited DESC, id DESC
564LIMIT ?4
565`
566
567type GetRecentHistoryWindowByDomainParams struct {
568 Domain sql.NullString `json:"domain"`
569 Before sql.NullTime `json:"before"`
570 BeforeID int64 `json:"before_id"`
571 Limit int64 `json:"limit"`
572}
573
574func (q *Queries) GetRecentHistoryWindowByDomain(ctx context.Context, arg GetRecentHistoryWindowByDomainParams) ([]History, error) {
575 rows, err := q.db.QueryContext(ctx, GetRecentHistoryWindowByDomain,
576 arg.Domain,
577 arg.Before,
578 arg.BeforeID,
579 arg.Limit,
580 )
581 if err != nil {
582 return nil, err
583 }
584 defer rows.Close()
585 items := []History{}
586 for rows.Next() {
587 var i History
588 if err := rows.Scan(
589 &i.ID,
590 &i.Url,
591 &i.Title,
592 &i.FaviconUrl,
593 &i.VisitCount,
594 &i.LastVisited,
595 &i.CreatedAt,
596 &i.Domain,
597 ); err != nil {
598 return nil, err
599 }
600 items = append(items, i)
601 }
602 if err := rows.Close(); err != nil {
603 return nil, err
604 }
605 if err := rows.Err(); err != nil {
606 return nil, err
607 }
608 return items, nil
609}
610
611const IncrementVisitCount = `-- name: IncrementVisitCount :exec
612UPDATE history
613SET visit_count = visit_count + 1, last_visited = CURRENT_TIMESTAMP
614WHERE url = ?
615`
616
617func (q *Queries) IncrementVisitCount(ctx context.Context, url string) error {
618 _, err := q.db.ExecContext(ctx, IncrementVisitCount, url)
619 return err
620}
621
622const IncrementVisitCountByDelta = `-- name: IncrementVisitCountByDelta :exec
623UPDATE history
624SET visit_count = visit_count + ?, last_visited = CURRENT_TIMESTAMP
625WHERE url = ?
626`
627
628type IncrementVisitCountByDeltaParams struct {
629 VisitCount sql.NullInt64 `json:"visit_count"`
630 Url string `json:"url"`
631}
632
633func (q *Queries) IncrementVisitCountByDelta(ctx context.Context, arg IncrementVisitCountByDeltaParams) error {
634 _, err := q.db.ExecContext(ctx, IncrementVisitCountByDelta, arg.VisitCount, arg.Url)
635 return err
636}
637
638const SearchHistory = `-- name: SearchHistory :many
639SELECT id, url, title, favicon_url, visit_count, last_visited, created_at, domain FROM history
640WHERE url LIKE '%' || ? || '%' OR title LIKE '%' || ? || '%'
641ORDER BY visit_count DESC, last_visited DESC
642LIMIT ?
643`
644
645type SearchHistoryParams struct {
646 Column1 sql.NullString `json:"column_1"`
647 Column2 sql.NullString `json:"column_2"`
648 Limit int64 `json:"limit"`
649}
650
651func (q *Queries) SearchHistory(ctx context.Context, arg SearchHistoryParams) ([]History, error) {
652 rows, err := q.db.QueryContext(ctx, SearchHistory, arg.Column1, arg.Column2, arg.Limit)
653 if err != nil {
654 return nil, err
655 }
656 defer rows.Close()
657 items := []History{}
658 for rows.Next() {
659 var i History
660 if err := rows.Scan(
661 &i.ID,
662 &i.Url,
663 &i.Title,
664 &i.FaviconUrl,
665 &i.VisitCount,
666 &i.LastVisited,
667 &i.CreatedAt,
668 &i.Domain,
669 ); err != nil {
670 return nil, err
671 }
672 items = append(items, i)
673 }
674 if err := rows.Close(); err != nil {
675 return nil, err
676 }
677 if err := rows.Err(); err != nil {
678 return nil, err
679 }
680 return items, nil
681}
682
683const SearchHistoryFTSTitle = `-- name: SearchHistoryFTSTitle :many
684SELECT h.id, h.url, h.title, h.favicon_url, h.visit_count, h.last_visited, h.created_at, h.domain
685FROM history_fts fts
686JOIN history h ON fts.rowid = h.id
687WHERE fts.title MATCH ?1
688ORDER BY h.visit_count DESC, h.last_visited DESC
689LIMIT ?2
690`
691
692type SearchHistoryFTSTitleParams struct {
693 Query string `json:"query"`
694 Limit int64 `json:"limit"`
695}
696
697func (q *Queries) SearchHistoryFTSTitle(ctx context.Context, arg SearchHistoryFTSTitleParams) ([]History, error) {
698 rows, err := q.db.QueryContext(ctx, SearchHistoryFTSTitle, arg.Query, arg.Limit)
699 if err != nil {
700 return nil, err
701 }
702 defer rows.Close()
703 items := []History{}
704 for rows.Next() {
705 var i History
706 if err := rows.Scan(
707 &i.ID,
708 &i.Url,
709 &i.Title,
710 &i.FaviconUrl,
711 &i.VisitCount,
712 &i.LastVisited,
713 &i.CreatedAt,
714 &i.Domain,
715 ); err != nil {
716 return nil, err
717 }
718 items = append(items, i)
719 }
720 if err := rows.Close(); err != nil {
721 return nil, err
722 }
723 if err := rows.Err(); err != nil {
724 return nil, err
725 }
726 return items, nil
727}
728
729const SearchHistoryFTSUrl = `-- name: SearchHistoryFTSUrl :many
730SELECT h.id, h.url, h.title, h.favicon_url, h.visit_count, h.last_visited, h.created_at, h.domain
731FROM history_fts fts
732JOIN history h ON fts.rowid = h.id
733WHERE fts.url MATCH ?1
734ORDER BY h.visit_count DESC, h.last_visited DESC
735LIMIT ?2
736`
737
738type SearchHistoryFTSUrlParams struct {
739 Query string `json:"query"`
740 Limit int64 `json:"limit"`
741}
742
743func (q *Queries) SearchHistoryFTSUrl(ctx context.Context, arg SearchHistoryFTSUrlParams) ([]History, error) {
744 rows, err := q.db.QueryContext(ctx, SearchHistoryFTSUrl, arg.Query, arg.Limit)
745 if err != nil {
746 return nil, err
747 }
748 defer rows.Close()
749 items := []History{}
750 for rows.Next() {
751 var i History
752 if err := rows.Scan(
753 &i.ID,
754 &i.Url,
755 &i.Title,
756 &i.FaviconUrl,
757 &i.VisitCount,
758 &i.LastVisited,
759 &i.CreatedAt,
760 &i.Domain,
761 ); err != nil {
762 return nil, err
763 }
764 items = append(items, i)
765 }
766 if err := rows.Close(); err != nil {
767 return nil, err
768 }
769 if err := rows.Err(); err != nil {
770 return nil, err
771 }
772 return items, nil
773}
774
775const SearchHistoryFTSUrlWithDomainBoost = `-- name: SearchHistoryFTSUrlWithDomainBoost :many
776SELECT h.id, h.url, h.title, h.favicon_url, h.visit_count, h.last_visited, h.created_at,
777 CASE
778 WHEN h.url LIKE '%://' || ?1 || '.%' THEN 2
779 WHEN h.url LIKE '%://%.' || ?1 || '.%' THEN 2
780 WHEN h.url LIKE '%://' || ?1 || '/%' THEN 2
781 WHEN h.url LIKE '%://%.' || ?1 || '/%' THEN 1
782 ELSE 0
783 END as domain_boost
784FROM history_fts fts
785JOIN history h ON fts.rowid = h.id
786WHERE fts.url MATCH ?2
787ORDER BY domain_boost DESC, h.visit_count DESC, h.last_visited DESC
788LIMIT ?3
789`
790
791type SearchHistoryFTSUrlWithDomainBoostParams struct {
792 Term sql.NullString `json:"term"`
793 Query string `json:"query"`
794 Limit int64 `json:"limit"`
795}
796
797type SearchHistoryFTSUrlWithDomainBoostRow struct {
798 ID int64 `json:"id"`
799 Url string `json:"url"`
800 Title sql.NullString `json:"title"`
801 FaviconUrl sql.NullString `json:"favicon_url"`
802 VisitCount sql.NullInt64 `json:"visit_count"`
803 LastVisited sql.NullTime `json:"last_visited"`
804 CreatedAt sql.NullTime `json:"created_at"`
805 DomainBoost int64 `json:"domain_boost"`
806}
807
808func (q *Queries) SearchHistoryFTSUrlWithDomainBoost(ctx context.Context, arg SearchHistoryFTSUrlWithDomainBoostParams) ([]SearchHistoryFTSUrlWithDomainBoostRow, error) {
809 rows, err := q.db.QueryContext(ctx, SearchHistoryFTSUrlWithDomainBoost, arg.Term, arg.Query, arg.Limit)
810 if err != nil {
811 return nil, err
812 }
813 defer rows.Close()
814 items := []SearchHistoryFTSUrlWithDomainBoostRow{}
815 for rows.Next() {
816 var i SearchHistoryFTSUrlWithDomainBoostRow
817 if err := rows.Scan(
818 &i.ID,
819 &i.Url,
820 &i.Title,
821 &i.FaviconUrl,
822 &i.VisitCount,
823 &i.LastVisited,
824 &i.CreatedAt,
825 &i.DomainBoost,
826 ); err != nil {
827 return nil, err
828 }
829 items = append(items, i)
830 }
831 if err := rows.Close(); err != nil {
832 return nil, err
833 }
834 if err := rows.Err(); err != nil {
835 return nil, err
836 }
837 return items, nil
838}
839
840const UpsertHistory = `-- name: UpsertHistory :exec
841INSERT INTO history (url, title, favicon_url, domain)
842VALUES (?, ?, ?, ?)
843ON CONFLICT(url)
844DO UPDATE SET
845 visit_count = visit_count + 1,
846 last_visited = CURRENT_TIMESTAMP,
847 title = COALESCE(EXCLUDED.title, history.title),
848 favicon_url = COALESCE(EXCLUDED.favicon_url, history.favicon_url),
849 domain = COALESCE(EXCLUDED.domain, history.domain)
850`
851
852type UpsertHistoryParams struct {
853 Url string `json:"url"`
854 Title sql.NullString `json:"title"`
855 FaviconUrl sql.NullString `json:"favicon_url"`
856 Domain sql.NullString `json:"domain"`
857}
858
859func (q *Queries) UpsertHistory(ctx context.Context, arg UpsertHistoryParams) error {
860 _, err := q.db.ExecContext(ctx, UpsertHistory,
861 arg.Url,
862 arg.Title,
863 arg.FaviconUrl,
864 arg.Domain,
865 )
866 return err
867}