v0.31.0 bf0756b

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 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}

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