v0.33.2 57f21d6

history.sql.go RawHistoryFolder

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 GetMostVisitedHistory = `-- name: GetMostVisitedHistory :many
390SELECT id, url, title, favicon_url, visit_count, last_visited, created_at, domain FROM history
391ORDER BY visit_count DESC, last_visited DESC
392LIMIT ?1
393`
394
395func (q *Queries) GetMostVisitedHistory(ctx context.Context, limit int64) ([]History, error) {
396	rows, err := q.db.QueryContext(ctx, GetMostVisitedHistory, limit)
397	if err != nil {
398		return nil, err
399	}
400	defer rows.Close()
401	items := []History{}
402	for rows.Next() {
403		var i History
404		if err := rows.Scan(
405			&i.ID,
406			&i.Url,
407			&i.Title,
408			&i.FaviconUrl,
409			&i.VisitCount,
410			&i.LastVisited,
411			&i.CreatedAt,
412			&i.Domain,
413		); err != nil {
414			return nil, err
415		}
416		items = append(items, i)
417	}
418	if err := rows.Close(); err != nil {
419		return nil, err
420	}
421	if err := rows.Err(); err != nil {
422		return nil, err
423	}
424	return items, nil
425}
426
427const GetMostVisitedHistorySinceCutoff = `-- name: GetMostVisitedHistorySinceCutoff :many
428SELECT id, url, title, favicon_url, visit_count, last_visited, created_at, domain FROM history
429WHERE last_visited >= ?1
430ORDER BY visit_count DESC, last_visited DESC
431LIMIT ?2
432`
433
434type GetMostVisitedHistorySinceCutoffParams struct {
435	Cutoff sql.NullTime `json:"cutoff"`
436	Limit  int64        `json:"limit"`
437}
438
439// Bounded window variant: the direct comparison keeps the last_visited index
440// usable. Rows with a NULL last_visited are intentionally excluded.
441func (q *Queries) GetMostVisitedHistorySinceCutoff(ctx context.Context, arg GetMostVisitedHistorySinceCutoffParams) ([]History, error) {
442	rows, err := q.db.QueryContext(ctx, GetMostVisitedHistorySinceCutoff, arg.Cutoff, arg.Limit)
443	if err != nil {
444		return nil, err
445	}
446	defer rows.Close()
447	items := []History{}
448	for rows.Next() {
449		var i History
450		if err := rows.Scan(
451			&i.ID,
452			&i.Url,
453			&i.Title,
454			&i.FaviconUrl,
455			&i.VisitCount,
456			&i.LastVisited,
457			&i.CreatedAt,
458			&i.Domain,
459		); err != nil {
460			return nil, err
461		}
462		items = append(items, i)
463	}
464	if err := rows.Close(); err != nil {
465		return nil, err
466	}
467	if err := rows.Err(); err != nil {
468		return nil, err
469	}
470	return items, nil
471}
472
473const GetRecentHistory = `-- name: GetRecentHistory :many
474SELECT id, url, title, favicon_url, visit_count, last_visited, created_at, domain FROM history
475ORDER BY last_visited DESC, id DESC
476LIMIT ? OFFSET ?
477`
478
479type GetRecentHistoryParams struct {
480	Limit  int64 `json:"limit"`
481	Offset int64 `json:"offset"`
482}
483
484func (q *Queries) GetRecentHistory(ctx context.Context, arg GetRecentHistoryParams) ([]History, error) {
485	rows, err := q.db.QueryContext(ctx, GetRecentHistory, arg.Limit, arg.Offset)
486	if err != nil {
487		return nil, err
488	}
489	defer rows.Close()
490	items := []History{}
491	for rows.Next() {
492		var i History
493		if err := rows.Scan(
494			&i.ID,
495			&i.Url,
496			&i.Title,
497			&i.FaviconUrl,
498			&i.VisitCount,
499			&i.LastVisited,
500			&i.CreatedAt,
501			&i.Domain,
502		); err != nil {
503			return nil, err
504		}
505		items = append(items, i)
506	}
507	if err := rows.Close(); err != nil {
508		return nil, err
509	}
510	if err := rows.Err(); err != nil {
511		return nil, err
512	}
513	return items, nil
514}
515
516const GetRecentHistoryByDomain = `-- name: GetRecentHistoryByDomain :many
517SELECT id, url, title, favicon_url, visit_count, last_visited, created_at, domain FROM history
518WHERE domain = ?1
519ORDER BY last_visited DESC, id DESC
520LIMIT ?3 OFFSET ?2
521`
522
523type GetRecentHistoryByDomainParams struct {
524	Domain sql.NullString `json:"domain"`
525	Offset int64          `json:"offset"`
526	Limit  int64          `json:"limit"`
527}
528
529func (q *Queries) GetRecentHistoryByDomain(ctx context.Context, arg GetRecentHistoryByDomainParams) ([]History, error) {
530	rows, err := q.db.QueryContext(ctx, GetRecentHistoryByDomain, arg.Domain, arg.Offset, arg.Limit)
531	if err != nil {
532		return nil, err
533	}
534	defer rows.Close()
535	items := []History{}
536	for rows.Next() {
537		var i History
538		if err := rows.Scan(
539			&i.ID,
540			&i.Url,
541			&i.Title,
542			&i.FaviconUrl,
543			&i.VisitCount,
544			&i.LastVisited,
545			&i.CreatedAt,
546			&i.Domain,
547		); err != nil {
548			return nil, err
549		}
550		items = append(items, i)
551	}
552	if err := rows.Close(); err != nil {
553		return nil, err
554	}
555	if err := rows.Err(); err != nil {
556		return nil, err
557	}
558	return items, nil
559}
560
561const GetRecentHistorySince = `-- name: GetRecentHistorySince :many
562SELECT id, url, title, favicon_url, visit_count, last_visited, created_at, domain FROM history
563WHERE last_visited >= datetime('now', ?)
564ORDER BY last_visited DESC
565`
566
567func (q *Queries) GetRecentHistorySince(ctx context.Context, datetime interface{}) ([]History, error) {
568	rows, err := q.db.QueryContext(ctx, GetRecentHistorySince, datetime)
569	if err != nil {
570		return nil, err
571	}
572	defer rows.Close()
573	items := []History{}
574	for rows.Next() {
575		var i History
576		if err := rows.Scan(
577			&i.ID,
578			&i.Url,
579			&i.Title,
580			&i.FaviconUrl,
581			&i.VisitCount,
582			&i.LastVisited,
583			&i.CreatedAt,
584			&i.Domain,
585		); err != nil {
586			return nil, err
587		}
588		items = append(items, i)
589	}
590	if err := rows.Close(); err != nil {
591		return nil, err
592	}
593	if err := rows.Err(); err != nil {
594		return nil, err
595	}
596	return items, nil
597}
598
599const GetRecentHistorySinceCutoff = `-- name: GetRecentHistorySinceCutoff :many
600SELECT id, url, title, favicon_url, visit_count, last_visited, created_at, domain FROM history
601WHERE last_visited >= ?1
602ORDER BY last_visited DESC, id DESC
603LIMIT ?3 OFFSET ?2
604`
605
606type GetRecentHistorySinceCutoffParams struct {
607	Cutoff sql.NullTime `json:"cutoff"`
608	Offset int64        `json:"offset"`
609	Limit  int64        `json:"limit"`
610}
611
612// Bounded window variant: the direct comparison keeps the last_visited index
613// usable. Rows with a NULL last_visited are intentionally excluded.
614func (q *Queries) GetRecentHistorySinceCutoff(ctx context.Context, arg GetRecentHistorySinceCutoffParams) ([]History, error) {
615	rows, err := q.db.QueryContext(ctx, GetRecentHistorySinceCutoff, arg.Cutoff, arg.Offset, arg.Limit)
616	if err != nil {
617		return nil, err
618	}
619	defer rows.Close()
620	items := []History{}
621	for rows.Next() {
622		var i History
623		if err := rows.Scan(
624			&i.ID,
625			&i.Url,
626			&i.Title,
627			&i.FaviconUrl,
628			&i.VisitCount,
629			&i.LastVisited,
630			&i.CreatedAt,
631			&i.Domain,
632		); err != nil {
633			return nil, err
634		}
635		items = append(items, i)
636	}
637	if err := rows.Close(); err != nil {
638		return nil, err
639	}
640	if err := rows.Err(); err != nil {
641		return nil, err
642	}
643	return items, nil
644}
645
646const GetRecentHistoryWindow = `-- name: GetRecentHistoryWindow :many
647SELECT id, url, title, favicon_url, visit_count, last_visited, created_at, domain FROM history
648WHERE last_visited < ?1 OR (last_visited = ?1 AND id < ?2)
649ORDER BY last_visited DESC, id DESC
650LIMIT ?3
651`
652
653type GetRecentHistoryWindowParams struct {
654	Before   sql.NullTime `json:"before"`
655	BeforeID int64        `json:"before_id"`
656	Limit    int64        `json:"limit"`
657}
658
659func (q *Queries) GetRecentHistoryWindow(ctx context.Context, arg GetRecentHistoryWindowParams) ([]History, error) {
660	rows, err := q.db.QueryContext(ctx, GetRecentHistoryWindow, arg.Before, arg.BeforeID, arg.Limit)
661	if err != nil {
662		return nil, err
663	}
664	defer rows.Close()
665	items := []History{}
666	for rows.Next() {
667		var i History
668		if err := rows.Scan(
669			&i.ID,
670			&i.Url,
671			&i.Title,
672			&i.FaviconUrl,
673			&i.VisitCount,
674			&i.LastVisited,
675			&i.CreatedAt,
676			&i.Domain,
677		); err != nil {
678			return nil, err
679		}
680		items = append(items, i)
681	}
682	if err := rows.Close(); err != nil {
683		return nil, err
684	}
685	if err := rows.Err(); err != nil {
686		return nil, err
687	}
688	return items, nil
689}
690
691const GetRecentHistoryWindowByDomain = `-- name: GetRecentHistoryWindowByDomain :many
692SELECT id, url, title, favicon_url, visit_count, last_visited, created_at, domain FROM history
693WHERE domain = ?1 AND (last_visited < ?2 OR (last_visited = ?2 AND id < ?3))
694ORDER BY last_visited DESC, id DESC
695LIMIT ?4
696`
697
698type GetRecentHistoryWindowByDomainParams struct {
699	Domain   sql.NullString `json:"domain"`
700	Before   sql.NullTime   `json:"before"`
701	BeforeID int64          `json:"before_id"`
702	Limit    int64          `json:"limit"`
703}
704
705func (q *Queries) GetRecentHistoryWindowByDomain(ctx context.Context, arg GetRecentHistoryWindowByDomainParams) ([]History, error) {
706	rows, err := q.db.QueryContext(ctx, GetRecentHistoryWindowByDomain,
707		arg.Domain,
708		arg.Before,
709		arg.BeforeID,
710		arg.Limit,
711	)
712	if err != nil {
713		return nil, err
714	}
715	defer rows.Close()
716	items := []History{}
717	for rows.Next() {
718		var i History
719		if err := rows.Scan(
720			&i.ID,
721			&i.Url,
722			&i.Title,
723			&i.FaviconUrl,
724			&i.VisitCount,
725			&i.LastVisited,
726			&i.CreatedAt,
727			&i.Domain,
728		); err != nil {
729			return nil, err
730		}
731		items = append(items, i)
732	}
733	if err := rows.Close(); err != nil {
734		return nil, err
735	}
736	if err := rows.Err(); err != nil {
737		return nil, err
738	}
739	return items, nil
740}
741
742const IncrementVisitCount = `-- name: IncrementVisitCount :exec
743UPDATE history
744SET visit_count = visit_count + 1, last_visited = CURRENT_TIMESTAMP
745WHERE url = ?
746`
747
748func (q *Queries) IncrementVisitCount(ctx context.Context, url string) error {
749	_, err := q.db.ExecContext(ctx, IncrementVisitCount, url)
750	return err
751}
752
753const IncrementVisitCountByDelta = `-- name: IncrementVisitCountByDelta :exec
754UPDATE history
755SET visit_count = visit_count + ?, last_visited = CURRENT_TIMESTAMP
756WHERE url = ?
757`
758
759type IncrementVisitCountByDeltaParams struct {
760	VisitCount sql.NullInt64 `json:"visit_count"`
761	Url        string        `json:"url"`
762}
763
764func (q *Queries) IncrementVisitCountByDelta(ctx context.Context, arg IncrementVisitCountByDeltaParams) error {
765	_, err := q.db.ExecContext(ctx, IncrementVisitCountByDelta, arg.VisitCount, arg.Url)
766	return err
767}
768
769const SearchHistory = `-- name: SearchHistory :many
770SELECT id, url, title, favicon_url, visit_count, last_visited, created_at, domain FROM history
771WHERE url LIKE '%' || ? || '%' OR title LIKE '%' || ? || '%'
772ORDER BY visit_count DESC, last_visited DESC
773LIMIT ?
774`
775
776type SearchHistoryParams struct {
777	Column1 sql.NullString `json:"column_1"`
778	Column2 sql.NullString `json:"column_2"`
779	Limit   int64          `json:"limit"`
780}
781
782func (q *Queries) SearchHistory(ctx context.Context, arg SearchHistoryParams) ([]History, error) {
783	rows, err := q.db.QueryContext(ctx, SearchHistory, arg.Column1, arg.Column2, arg.Limit)
784	if err != nil {
785		return nil, err
786	}
787	defer rows.Close()
788	items := []History{}
789	for rows.Next() {
790		var i History
791		if err := rows.Scan(
792			&i.ID,
793			&i.Url,
794			&i.Title,
795			&i.FaviconUrl,
796			&i.VisitCount,
797			&i.LastVisited,
798			&i.CreatedAt,
799			&i.Domain,
800		); err != nil {
801			return nil, err
802		}
803		items = append(items, i)
804	}
805	if err := rows.Close(); err != nil {
806		return nil, err
807	}
808	if err := rows.Err(); err != nil {
809		return nil, err
810	}
811	return items, nil
812}
813
814const SearchHistoryFTSTitle = `-- name: SearchHistoryFTSTitle :many
815SELECT h.id, h.url, h.title, h.favicon_url, h.visit_count, h.last_visited, h.created_at, h.domain
816FROM history_fts fts
817JOIN history h ON fts.rowid = h.id
818WHERE fts.title MATCH ?1
819  AND (?2 IS NULL OR h.last_visited >= ?2)
820ORDER BY h.visit_count DESC, h.last_visited DESC
821LIMIT ?3
822`
823
824type SearchHistoryFTSTitleParams struct {
825	Query  string      `json:"query"`
826	Cutoff interface{} `json:"cutoff"`
827	Limit  int64       `json:"limit"`
828}
829
830func (q *Queries) SearchHistoryFTSTitle(ctx context.Context, arg SearchHistoryFTSTitleParams) ([]History, error) {
831	rows, err := q.db.QueryContext(ctx, SearchHistoryFTSTitle, arg.Query, arg.Cutoff, arg.Limit)
832	if err != nil {
833		return nil, err
834	}
835	defer rows.Close()
836	items := []History{}
837	for rows.Next() {
838		var i History
839		if err := rows.Scan(
840			&i.ID,
841			&i.Url,
842			&i.Title,
843			&i.FaviconUrl,
844			&i.VisitCount,
845			&i.LastVisited,
846			&i.CreatedAt,
847			&i.Domain,
848		); err != nil {
849			return nil, err
850		}
851		items = append(items, i)
852	}
853	if err := rows.Close(); err != nil {
854		return nil, err
855	}
856	if err := rows.Err(); err != nil {
857		return nil, err
858	}
859	return items, nil
860}
861
862const SearchHistoryFTSUrlWithDomainBoost = `-- name: SearchHistoryFTSUrlWithDomainBoost :many
863SELECT h.id, h.url, h.title, h.favicon_url, h.visit_count, h.last_visited, h.created_at,
864       CASE
865           WHEN h.url LIKE '%://' || ?1 || '.%' THEN 2
866           WHEN h.url LIKE '%://%.' || ?1 || '.%' THEN 2
867           WHEN h.url LIKE '%://' || ?1 || '/%' THEN 2
868           WHEN h.url LIKE '%://%.' || ?1 || '/%' THEN 1
869           ELSE 0
870       END as domain_boost
871FROM history_fts fts
872JOIN history h ON fts.rowid = h.id
873WHERE fts.url MATCH ?2
874  AND (?3 IS NULL OR h.last_visited >= ?3)
875ORDER BY domain_boost DESC, h.visit_count DESC, h.last_visited DESC
876LIMIT ?4
877`
878
879type SearchHistoryFTSUrlWithDomainBoostParams struct {
880	Term   sql.NullString `json:"term"`
881	Query  string         `json:"query"`
882	Cutoff interface{}    `json:"cutoff"`
883	Limit  int64          `json:"limit"`
884}
885
886type SearchHistoryFTSUrlWithDomainBoostRow struct {
887	ID          int64          `json:"id"`
888	Url         string         `json:"url"`
889	Title       sql.NullString `json:"title"`
890	FaviconUrl  sql.NullString `json:"favicon_url"`
891	VisitCount  sql.NullInt64  `json:"visit_count"`
892	LastVisited sql.NullTime   `json:"last_visited"`
893	CreatedAt   sql.NullTime   `json:"created_at"`
894	DomainBoost int64          `json:"domain_boost"`
895}
896
897func (q *Queries) SearchHistoryFTSUrlWithDomainBoost(ctx context.Context, arg SearchHistoryFTSUrlWithDomainBoostParams) ([]SearchHistoryFTSUrlWithDomainBoostRow, error) {
898	rows, err := q.db.QueryContext(ctx, SearchHistoryFTSUrlWithDomainBoost,
899		arg.Term,
900		arg.Query,
901		arg.Cutoff,
902		arg.Limit,
903	)
904	if err != nil {
905		return nil, err
906	}
907	defer rows.Close()
908	items := []SearchHistoryFTSUrlWithDomainBoostRow{}
909	for rows.Next() {
910		var i SearchHistoryFTSUrlWithDomainBoostRow
911		if err := rows.Scan(
912			&i.ID,
913			&i.Url,
914			&i.Title,
915			&i.FaviconUrl,
916			&i.VisitCount,
917			&i.LastVisited,
918			&i.CreatedAt,
919			&i.DomainBoost,
920		); err != nil {
921			return nil, err
922		}
923		items = append(items, i)
924	}
925	if err := rows.Close(); err != nil {
926		return nil, err
927	}
928	if err := rows.Err(); err != nil {
929		return nil, err
930	}
931	return items, nil
932}
933
934const UpsertHistory = `-- name: UpsertHistory :exec
935INSERT INTO history (url, title, favicon_url, domain)
936VALUES (?, ?, ?, ?)
937ON CONFLICT(url)
938DO UPDATE SET
939    visit_count = visit_count + 1,
940    last_visited = CURRENT_TIMESTAMP,
941    title = COALESCE(EXCLUDED.title, history.title),
942    favicon_url = COALESCE(EXCLUDED.favicon_url, history.favicon_url),
943    domain = COALESCE(EXCLUDED.domain, history.domain)
944`
945
946type UpsertHistoryParams struct {
947	Url        string         `json:"url"`
948	Title      sql.NullString `json:"title"`
949	FaviconUrl sql.NullString `json:"favicon_url"`
950	Domain     sql.NullString `json:"domain"`
951}
952
953func (q *Queries) UpsertHistory(ctx context.Context, arg UpsertHistoryParams) error {
954	_, err := q.db.ExecContext(ctx, UpsertHistory,
955		arg.Url,
956		arg.Title,
957		arg.FaviconUrl,
958		arg.Domain,
959	)
960	return err
961}

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 8

Tags 42

↑↓ moveenter openesc close