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 DeleteAllHistory = `-- name: DeleteAllHistory :exec
14DELETE FROM history
15`
16
17func (q *Queries) DeleteAllHistory(ctx context.Context) error {
18 _, err := q.db.ExecContext(ctx, DeleteAllHistory)
19 return err
20}
21
22const DeleteHistoryByDomain = `-- name: DeleteHistoryByDomain :exec
23DELETE FROM history WHERE url LIKE '%://' || ? || '/%' OR url LIKE '%://' || ? || '?%' OR url LIKE '%://' || ? || '#%' OR url LIKE '%://' || ?
24`
25
26type DeleteHistoryByDomainParams struct {
27 Column1 sql.NullString `json:"column_1"`
28 Column2 sql.NullString `json:"column_2"`
29 Column3 sql.NullString `json:"column_3"`
30 Column4 sql.NullString `json:"column_4"`
31}
32
33func (q *Queries) DeleteHistoryByDomain(ctx context.Context, arg DeleteHistoryByDomainParams) error {
34 _, err := q.db.ExecContext(ctx, DeleteHistoryByDomain,
35 arg.Column1,
36 arg.Column2,
37 arg.Column3,
38 arg.Column4,
39 )
40 return err
41}
42
43const DeleteHistoryByID = `-- name: DeleteHistoryByID :exec
44DELETE FROM history WHERE id = ?
45`
46
47func (q *Queries) DeleteHistoryByID(ctx context.Context, id int64) error {
48 _, err := q.db.ExecContext(ctx, DeleteHistoryByID, id)
49 return err
50}
51
52const DeleteHistoryOlderThan = `-- name: DeleteHistoryOlderThan :exec
53DELETE FROM history WHERE last_visited < ?
54`
55
56func (q *Queries) DeleteHistoryOlderThan(ctx context.Context, lastVisited sql.NullTime) error {
57 _, err := q.db.ExecContext(ctx, DeleteHistoryOlderThan, lastVisited)
58 return err
59}
60
61const GetAllMostVisited = `-- name: GetAllMostVisited :many
62SELECT id, url, title, favicon_url, visit_count, last_visited, created_at FROM history
63ORDER BY visit_count DESC, last_visited DESC
64`
65
66func (q *Queries) GetAllMostVisited(ctx context.Context) ([]History, error) {
67 rows, err := q.db.QueryContext(ctx, GetAllMostVisited)
68 if err != nil {
69 return nil, err
70 }
71 defer rows.Close()
72 items := []History{}
73 for rows.Next() {
74 var i History
75 if err := rows.Scan(
76 &i.ID,
77 &i.Url,
78 &i.Title,
79 &i.FaviconUrl,
80 &i.VisitCount,
81 &i.LastVisited,
82 &i.CreatedAt,
83 ); err != nil {
84 return nil, err
85 }
86 items = append(items, i)
87 }
88 if err := rows.Close(); err != nil {
89 return nil, err
90 }
91 if err := rows.Err(); err != nil {
92 return nil, err
93 }
94 return items, nil
95}
96
97const GetAllRecentHistory = `-- name: GetAllRecentHistory :many
98SELECT id, url, title, favicon_url, visit_count, last_visited, created_at FROM history
99ORDER BY last_visited DESC
100`
101
102func (q *Queries) GetAllRecentHistory(ctx context.Context) ([]History, error) {
103 rows, err := q.db.QueryContext(ctx, GetAllRecentHistory)
104 if err != nil {
105 return nil, err
106 }
107 defer rows.Close()
108 items := []History{}
109 for rows.Next() {
110 var i History
111 if err := rows.Scan(
112 &i.ID,
113 &i.Url,
114 &i.Title,
115 &i.FaviconUrl,
116 &i.VisitCount,
117 &i.LastVisited,
118 &i.CreatedAt,
119 ); err != nil {
120 return nil, err
121 }
122 items = append(items, i)
123 }
124 if err := rows.Close(); err != nil {
125 return nil, err
126 }
127 if err := rows.Err(); err != nil {
128 return nil, err
129 }
130 return items, nil
131}
132
133const GetDailyVisitCount = `-- name: GetDailyVisitCount :many
134SELECT date(last_visited) as day, COUNT(*) as entries, SUM(visit_count) as visits FROM history WHERE last_visited >= date('now', ?) GROUP BY day ORDER BY day ASC
135`
136
137type GetDailyVisitCountRow struct {
138 Day interface{} `json:"day"`
139 Entries int64 `json:"entries"`
140 Visits sql.NullFloat64 `json:"visits"`
141}
142
143func (q *Queries) GetDailyVisitCount(ctx context.Context, date interface{}) ([]GetDailyVisitCountRow, error) {
144 rows, err := q.db.QueryContext(ctx, GetDailyVisitCount, date)
145 if err != nil {
146 return nil, err
147 }
148 defer rows.Close()
149 items := []GetDailyVisitCountRow{}
150 for rows.Next() {
151 var i GetDailyVisitCountRow
152 if err := rows.Scan(&i.Day, &i.Entries, &i.Visits); err != nil {
153 return nil, err
154 }
155 items = append(items, i)
156 }
157 if err := rows.Close(); err != nil {
158 return nil, err
159 }
160 if err := rows.Err(); err != nil {
161 return nil, err
162 }
163 return items, nil
164}
165
166const GetDomainStats = `-- name: GetDomainStats :many
167SELECT SUBSTR(SUBSTR(url, INSTR(url, '://') + 3), 1, CASE WHEN INSTR(SUBSTR(url, INSTR(url, '://') + 3), '/') > 0 THEN INSTR(SUBSTR(url, INSTR(url, '://') + 3), '/') - 1 ELSE LENGTH(SUBSTR(url, INSTR(url, '://') + 3)) END) as domain, COUNT(*) as page_count, SUM(visit_count) as total_visits, MAX(last_visited) as last_visit FROM history GROUP BY domain ORDER BY total_visits DESC LIMIT ?
168`
169
170type GetDomainStatsRow struct {
171 Domain string `json:"domain"`
172 PageCount int64 `json:"page_count"`
173 TotalVisits sql.NullFloat64 `json:"total_visits"`
174 LastVisit interface{} `json:"last_visit"`
175}
176
177func (q *Queries) GetDomainStats(ctx context.Context, limit int64) ([]GetDomainStatsRow, error) {
178 rows, err := q.db.QueryContext(ctx, GetDomainStats, limit)
179 if err != nil {
180 return nil, err
181 }
182 defer rows.Close()
183 items := []GetDomainStatsRow{}
184 for rows.Next() {
185 var i GetDomainStatsRow
186 if err := rows.Scan(
187 &i.Domain,
188 &i.PageCount,
189 &i.TotalVisits,
190 &i.LastVisit,
191 ); err != nil {
192 return nil, err
193 }
194 items = append(items, i)
195 }
196 if err := rows.Close(); err != nil {
197 return nil, err
198 }
199 if err := rows.Err(); err != nil {
200 return nil, err
201 }
202 return items, nil
203}
204
205const GetHistoryByURL = `-- name: GetHistoryByURL :one
206SELECT id, url, title, favicon_url, visit_count, last_visited, created_at FROM history WHERE url = ? LIMIT 1
207`
208
209func (q *Queries) GetHistoryByURL(ctx context.Context, url string) (History, error) {
210 row := q.db.QueryRowContext(ctx, GetHistoryByURL, url)
211 var i History
212 err := row.Scan(
213 &i.ID,
214 &i.Url,
215 &i.Title,
216 &i.FaviconUrl,
217 &i.VisitCount,
218 &i.LastVisited,
219 &i.CreatedAt,
220 )
221 return i, err
222}
223
224const GetHistoryStats = `-- name: GetHistoryStats :one
225SELECT COUNT(*) as total_entries, COALESCE(SUM(visit_count), 0) as total_visits, COUNT(DISTINCT date(last_visited)) as unique_days FROM history
226`
227
228type GetHistoryStatsRow struct {
229 TotalEntries int64 `json:"total_entries"`
230 TotalVisits interface{} `json:"total_visits"`
231 UniqueDays int64 `json:"unique_days"`
232}
233
234func (q *Queries) GetHistoryStats(ctx context.Context) (GetHistoryStatsRow, error) {
235 row := q.db.QueryRowContext(ctx, GetHistoryStats)
236 var i GetHistoryStatsRow
237 err := row.Scan(&i.TotalEntries, &i.TotalVisits, &i.UniqueDays)
238 return i, err
239}
240
241const GetHourlyDistribution = `-- name: GetHourlyDistribution :many
242SELECT CAST(strftime('%H', last_visited) AS INTEGER) as hour, COUNT(*) as visit_count FROM history GROUP BY hour ORDER BY hour
243`
244
245type GetHourlyDistributionRow struct {
246 Hour int64 `json:"hour"`
247 VisitCount int64 `json:"visit_count"`
248}
249
250func (q *Queries) GetHourlyDistribution(ctx context.Context) ([]GetHourlyDistributionRow, error) {
251 rows, err := q.db.QueryContext(ctx, GetHourlyDistribution)
252 if err != nil {
253 return nil, err
254 }
255 defer rows.Close()
256 items := []GetHourlyDistributionRow{}
257 for rows.Next() {
258 var i GetHourlyDistributionRow
259 if err := rows.Scan(&i.Hour, &i.VisitCount); 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 GetMostVisited = `-- name: GetMostVisited :many
274SELECT id, url, title, favicon_url, visit_count, last_visited, created_at FROM history
275WHERE last_visited >= datetime('now', ?)
276ORDER BY visit_count DESC, last_visited DESC
277`
278
279func (q *Queries) GetMostVisited(ctx context.Context, datetime interface{}) ([]History, error) {
280 rows, err := q.db.QueryContext(ctx, GetMostVisited, datetime)
281 if err != nil {
282 return nil, err
283 }
284 defer rows.Close()
285 items := []History{}
286 for rows.Next() {
287 var i History
288 if err := rows.Scan(
289 &i.ID,
290 &i.Url,
291 &i.Title,
292 &i.FaviconUrl,
293 &i.VisitCount,
294 &i.LastVisited,
295 &i.CreatedAt,
296 ); err != nil {
297 return nil, err
298 }
299 items = append(items, i)
300 }
301 if err := rows.Close(); err != nil {
302 return nil, err
303 }
304 if err := rows.Err(); err != nil {
305 return nil, err
306 }
307 return items, nil
308}
309
310const GetRecentHistory = `-- name: GetRecentHistory :many
311SELECT id, url, title, favicon_url, visit_count, last_visited, created_at FROM history ORDER BY last_visited DESC LIMIT ? OFFSET ?
312`
313
314type GetRecentHistoryParams struct {
315 Limit int64 `json:"limit"`
316 Offset int64 `json:"offset"`
317}
318
319func (q *Queries) GetRecentHistory(ctx context.Context, arg GetRecentHistoryParams) ([]History, error) {
320 rows, err := q.db.QueryContext(ctx, GetRecentHistory, arg.Limit, arg.Offset)
321 if err != nil {
322 return nil, err
323 }
324 defer rows.Close()
325 items := []History{}
326 for rows.Next() {
327 var i History
328 if err := rows.Scan(
329 &i.ID,
330 &i.Url,
331 &i.Title,
332 &i.FaviconUrl,
333 &i.VisitCount,
334 &i.LastVisited,
335 &i.CreatedAt,
336 ); err != nil {
337 return nil, err
338 }
339 items = append(items, i)
340 }
341 if err := rows.Close(); err != nil {
342 return nil, err
343 }
344 if err := rows.Err(); err != nil {
345 return nil, err
346 }
347 return items, nil
348}
349
350const GetRecentHistorySince = `-- name: GetRecentHistorySince :many
351SELECT id, url, title, favicon_url, visit_count, last_visited, created_at FROM history
352WHERE last_visited >= datetime('now', ?)
353ORDER BY last_visited DESC
354`
355
356func (q *Queries) GetRecentHistorySince(ctx context.Context, datetime interface{}) ([]History, error) {
357 rows, err := q.db.QueryContext(ctx, GetRecentHistorySince, datetime)
358 if err != nil {
359 return nil, err
360 }
361 defer rows.Close()
362 items := []History{}
363 for rows.Next() {
364 var i History
365 if err := rows.Scan(
366 &i.ID,
367 &i.Url,
368 &i.Title,
369 &i.FaviconUrl,
370 &i.VisitCount,
371 &i.LastVisited,
372 &i.CreatedAt,
373 ); err != nil {
374 return nil, err
375 }
376 items = append(items, i)
377 }
378 if err := rows.Close(); err != nil {
379 return nil, err
380 }
381 if err := rows.Err(); err != nil {
382 return nil, err
383 }
384 return items, nil
385}
386
387const IncrementVisitCount = `-- name: IncrementVisitCount :exec
388UPDATE history
389SET visit_count = visit_count + 1, last_visited = CURRENT_TIMESTAMP
390WHERE url = ?
391`
392
393func (q *Queries) IncrementVisitCount(ctx context.Context, url string) error {
394 _, err := q.db.ExecContext(ctx, IncrementVisitCount, url)
395 return err
396}
397
398const SearchHistory = `-- name: SearchHistory :many
399SELECT id, url, title, favicon_url, visit_count, last_visited, created_at FROM history
400WHERE url LIKE '%' || ? || '%' OR title LIKE '%' || ? || '%'
401ORDER BY visit_count DESC, last_visited DESC
402LIMIT ?
403`
404
405type SearchHistoryParams struct {
406 Column1 sql.NullString `json:"column_1"`
407 Column2 sql.NullString `json:"column_2"`
408 Limit int64 `json:"limit"`
409}
410
411func (q *Queries) SearchHistory(ctx context.Context, arg SearchHistoryParams) ([]History, error) {
412 rows, err := q.db.QueryContext(ctx, SearchHistory, arg.Column1, arg.Column2, arg.Limit)
413 if err != nil {
414 return nil, err
415 }
416 defer rows.Close()
417 items := []History{}
418 for rows.Next() {
419 var i History
420 if err := rows.Scan(
421 &i.ID,
422 &i.Url,
423 &i.Title,
424 &i.FaviconUrl,
425 &i.VisitCount,
426 &i.LastVisited,
427 &i.CreatedAt,
428 ); err != nil {
429 return nil, err
430 }
431 items = append(items, i)
432 }
433 if err := rows.Close(); err != nil {
434 return nil, err
435 }
436 if err := rows.Err(); err != nil {
437 return nil, err
438 }
439 return items, nil
440}
441
442const SearchHistoryFTSTitle = `-- name: SearchHistoryFTSTitle :many
443SELECT h.id, h.url, h.title, h.favicon_url, h.visit_count, h.last_visited, h.created_at
444FROM history_fts fts
445JOIN history h ON fts.rowid = h.id
446WHERE fts.title MATCH ?1
447ORDER BY h.visit_count DESC, h.last_visited DESC
448LIMIT ?2
449`
450
451type SearchHistoryFTSTitleParams struct {
452 Query string `json:"query"`
453 Limit int64 `json:"limit"`
454}
455
456func (q *Queries) SearchHistoryFTSTitle(ctx context.Context, arg SearchHistoryFTSTitleParams) ([]History, error) {
457 rows, err := q.db.QueryContext(ctx, SearchHistoryFTSTitle, arg.Query, arg.Limit)
458 if err != nil {
459 return nil, err
460 }
461 defer rows.Close()
462 items := []History{}
463 for rows.Next() {
464 var i History
465 if err := rows.Scan(
466 &i.ID,
467 &i.Url,
468 &i.Title,
469 &i.FaviconUrl,
470 &i.VisitCount,
471 &i.LastVisited,
472 &i.CreatedAt,
473 ); err != nil {
474 return nil, err
475 }
476 items = append(items, i)
477 }
478 if err := rows.Close(); err != nil {
479 return nil, err
480 }
481 if err := rows.Err(); err != nil {
482 return nil, err
483 }
484 return items, nil
485}
486
487const SearchHistoryFTSUrl = `-- name: SearchHistoryFTSUrl :many
488SELECT h.id, h.url, h.title, h.favicon_url, h.visit_count, h.last_visited, h.created_at
489FROM history_fts fts
490JOIN history h ON fts.rowid = h.id
491WHERE fts.url MATCH ?1
492ORDER BY h.visit_count DESC, h.last_visited DESC
493LIMIT ?2
494`
495
496type SearchHistoryFTSUrlParams struct {
497 Query string `json:"query"`
498 Limit int64 `json:"limit"`
499}
500
501func (q *Queries) SearchHistoryFTSUrl(ctx context.Context, arg SearchHistoryFTSUrlParams) ([]History, error) {
502 rows, err := q.db.QueryContext(ctx, SearchHistoryFTSUrl, arg.Query, arg.Limit)
503 if err != nil {
504 return nil, err
505 }
506 defer rows.Close()
507 items := []History{}
508 for rows.Next() {
509 var i History
510 if err := rows.Scan(
511 &i.ID,
512 &i.Url,
513 &i.Title,
514 &i.FaviconUrl,
515 &i.VisitCount,
516 &i.LastVisited,
517 &i.CreatedAt,
518 ); err != nil {
519 return nil, err
520 }
521 items = append(items, i)
522 }
523 if err := rows.Close(); err != nil {
524 return nil, err
525 }
526 if err := rows.Err(); err != nil {
527 return nil, err
528 }
529 return items, nil
530}
531
532const SearchHistoryFTSUrlWithDomainBoost = `-- name: SearchHistoryFTSUrlWithDomainBoost :many
533SELECT h.id, h.url, h.title, h.favicon_url, h.visit_count, h.last_visited, h.created_at,
534 CASE
535 WHEN h.url LIKE '%://' || ?1 || '.%' THEN 2
536 WHEN h.url LIKE '%://%.' || ?1 || '.%' THEN 2
537 WHEN h.url LIKE '%://' || ?1 || '/%' THEN 2
538 WHEN h.url LIKE '%://%.' || ?1 || '/%' THEN 1
539 ELSE 0
540 END as domain_boost
541FROM history_fts fts
542JOIN history h ON fts.rowid = h.id
543WHERE fts.url MATCH ?2
544ORDER BY domain_boost DESC, h.visit_count DESC, h.last_visited DESC
545LIMIT ?3
546`
547
548type SearchHistoryFTSUrlWithDomainBoostParams struct {
549 Term sql.NullString `json:"term"`
550 Query string `json:"query"`
551 Limit int64 `json:"limit"`
552}
553
554type SearchHistoryFTSUrlWithDomainBoostRow struct {
555 ID int64 `json:"id"`
556 Url string `json:"url"`
557 Title sql.NullString `json:"title"`
558 FaviconUrl sql.NullString `json:"favicon_url"`
559 VisitCount sql.NullInt64 `json:"visit_count"`
560 LastVisited sql.NullTime `json:"last_visited"`
561 CreatedAt sql.NullTime `json:"created_at"`
562 DomainBoost int64 `json:"domain_boost"`
563}
564
565func (q *Queries) SearchHistoryFTSUrlWithDomainBoost(ctx context.Context, arg SearchHistoryFTSUrlWithDomainBoostParams) ([]SearchHistoryFTSUrlWithDomainBoostRow, error) {
566 rows, err := q.db.QueryContext(ctx, SearchHistoryFTSUrlWithDomainBoost, arg.Term, arg.Query, arg.Limit)
567 if err != nil {
568 return nil, err
569 }
570 defer rows.Close()
571 items := []SearchHistoryFTSUrlWithDomainBoostRow{}
572 for rows.Next() {
573 var i SearchHistoryFTSUrlWithDomainBoostRow
574 if err := rows.Scan(
575 &i.ID,
576 &i.Url,
577 &i.Title,
578 &i.FaviconUrl,
579 &i.VisitCount,
580 &i.LastVisited,
581 &i.CreatedAt,
582 &i.DomainBoost,
583 ); err != nil {
584 return nil, err
585 }
586 items = append(items, i)
587 }
588 if err := rows.Close(); err != nil {
589 return nil, err
590 }
591 if err := rows.Err(); err != nil {
592 return nil, err
593 }
594 return items, nil
595}
596
597const UpsertHistory = `-- name: UpsertHistory :exec
598INSERT INTO history (url, title, favicon_url)
599VALUES (?, ?, ?)
600ON CONFLICT(url)
601DO UPDATE SET
602 visit_count = visit_count + 1,
603 last_visited = CURRENT_TIMESTAMP,
604 title = COALESCE(EXCLUDED.title, history.title),
605 favicon_url = COALESCE(EXCLUDED.favicon_url, history.favicon_url)
606`
607
608type UpsertHistoryParams struct {
609 Url string `json:"url"`
610 Title sql.NullString `json:"title"`
611 FaviconUrl sql.NullString `json:"favicon_url"`
612}
613
614func (q *Queries) UpsertHistory(ctx context.Context, arg UpsertHistoryParams) error {
615 _, err := q.db.ExecContext(ctx, UpsertHistory, arg.Url, arg.Title, arg.FaviconUrl)
616 return err
617}