1// Code generated by sqlc. DO NOT EDIT.
2// versions:
3// sqlc v1.22.0
4// source: sessions.sql
5
6package db
7
8import (
9 "context"
10 "database/sql"
11)
12
13const createSession = `-- name: CreateSession :one
14INSERT INTO sessions (
15 id,
16 parent_session_id,
17 title,
18 message_count,
19 prompt_tokens,
20 completion_tokens,
21 cost,
22 summary_message_id,
23 updated_at,
24 created_at
25) VALUES (
26 ?,
27 ?,
28 ?,
29 ?,
30 ?,
31 ?,
32 ?,
33 null,
34 strftime('%s', 'now'),
35 strftime('%s', 'now')
36) RETURNING id, parent_session_id, title, message_count, prompt_tokens, completion_tokens, cost, updated_at, created_at, summary_message_id
37`
38
39type CreateSessionParams struct {
40 ID string `json:"id"`
41 ParentSessionID sql.NullString `json:"parent_session_id"`
42 Title string `json:"title"`
43 MessageCount int64 `json:"message_count"`
44 PromptTokens int64 `json:"prompt_tokens"`
45 CompletionTokens int64 `json:"completion_tokens"`
46 Cost float64 `json:"cost"`
47}
48
49func (q *Queries) CreateSession(ctx context.Context, arg CreateSessionParams) (Session, error) {
50 row := q.queryRow(ctx, q.createSessionStmt, createSession,
51 arg.ID,
52 arg.ParentSessionID,
53 arg.Title,
54 arg.MessageCount,
55 arg.PromptTokens,
56 arg.CompletionTokens,
57 arg.Cost,
58 )
59 var i Session
60 err := row.Scan(
61 &i.ID,
62 &i.ParentSessionID,
63 &i.Title,
64 &i.MessageCount,
65 &i.PromptTokens,
66 &i.CompletionTokens,
67 &i.Cost,
68 &i.UpdatedAt,
69 &i.CreatedAt,
70 &i.SummaryMessageID,
71 )
72 return i, err
73}
74
75const deleteSession = `-- name: DeleteSession :exec
76DELETE FROM sessions
77WHERE id = ?
78`
79
80func (q *Queries) DeleteSession(ctx context.Context, id string) error {
81 _, err := q.exec(ctx, q.deleteSessionStmt, deleteSession, id)
82 return err
83}
84
85const getSessionByID = `-- name: GetSessionByID :one
86SELECT id, parent_session_id, title, message_count, prompt_tokens, completion_tokens, cost, updated_at, created_at, summary_message_id
87FROM sessions
88WHERE id = ? LIMIT 1
89`
90
91func (q *Queries) GetSessionByID(ctx context.Context, id string) (Session, error) {
92 row := q.queryRow(ctx, q.getSessionByIDStmt, getSessionByID, id)
93 var i Session
94 err := row.Scan(
95 &i.ID,
96 &i.ParentSessionID,
97 &i.Title,
98 &i.MessageCount,
99 &i.PromptTokens,
100 &i.CompletionTokens,
101 &i.Cost,
102 &i.UpdatedAt,
103 &i.CreatedAt,
104 &i.SummaryMessageID,
105 )
106 return i, err
107}
108
109const getSessionStats = `-- name: GetSessionStats :one
110SELECT
111 COUNT(*) as total_sessions,
112 SUM(message_count) as total_messages,
113 SUM(prompt_tokens) as total_prompt_tokens,
114 SUM(completion_tokens) as total_completion_tokens,
115 SUM(cost) as total_cost,
116 AVG(cost) as avg_cost_per_session
117FROM sessions
118`
119
120type GetSessionStatsRow struct {
121 TotalSessions int64 `json:"total_sessions"`
122 TotalMessages sql.NullFloat64 `json:"total_messages"`
123 TotalPromptTokens sql.NullFloat64 `json:"total_prompt_tokens"`
124 TotalCompletionTokens sql.NullFloat64 `json:"total_completion_tokens"`
125 TotalCost sql.NullFloat64 `json:"total_cost"`
126 AvgCostPerSession sql.NullFloat64 `json:"avg_cost_per_session"`
127}
128
129func (q *Queries) GetSessionStats(ctx context.Context) (GetSessionStatsRow, error) {
130 row := q.queryRow(ctx, q.getSessionStatsStmt, getSessionStats)
131 var i GetSessionStatsRow
132 err := row.Scan(
133 &i.TotalSessions,
134 &i.TotalMessages,
135 &i.TotalPromptTokens,
136 &i.TotalCompletionTokens,
137 &i.TotalCost,
138 &i.AvgCostPerSession,
139 )
140 return i, err
141}
142
143const getSessionStatsByDay = `-- name: GetSessionStatsByDay :many
144SELECT
145 date(created_at, 'unixepoch') as day,
146 COUNT(*) as session_count,
147 SUM(message_count) as message_count,
148 SUM(prompt_tokens) as prompt_tokens,
149 SUM(completion_tokens) as completion_tokens,
150 SUM(cost) as total_cost,
151 AVG(cost) as avg_cost
152FROM sessions
153GROUP BY date(created_at, 'unixepoch')
154ORDER BY day DESC
155`
156
157type GetSessionStatsByDayRow struct {
158 Day interface{} `json:"day"`
159 SessionCount int64 `json:"session_count"`
160 MessageCount sql.NullFloat64 `json:"message_count"`
161 PromptTokens sql.NullFloat64 `json:"prompt_tokens"`
162 CompletionTokens sql.NullFloat64 `json:"completion_tokens"`
163 TotalCost sql.NullFloat64 `json:"total_cost"`
164 AvgCost sql.NullFloat64 `json:"avg_cost"`
165}
166
167func (q *Queries) GetSessionStatsByDay(ctx context.Context) ([]GetSessionStatsByDayRow, error) {
168 rows, err := q.query(ctx, q.getSessionStatsByDayStmt, getSessionStatsByDay)
169 if err != nil {
170 return nil, err
171 }
172 defer rows.Close()
173 items := []GetSessionStatsByDayRow{}
174 for rows.Next() {
175 var i GetSessionStatsByDayRow
176 if err := rows.Scan(
177 &i.Day,
178 &i.SessionCount,
179 &i.MessageCount,
180 &i.PromptTokens,
181 &i.CompletionTokens,
182 &i.TotalCost,
183 &i.AvgCost,
184 ); err != nil {
185 return nil, err
186 }
187 items = append(items, i)
188 }
189 if err := rows.Close(); err != nil {
190 return nil, err
191 }
192 if err := rows.Err(); err != nil {
193 return nil, err
194 }
195 return items, nil
196}
197
198const getSessionStatsByMonth = `-- name: GetSessionStatsByMonth :many
199SELECT
200 strftime('%Y-%m', datetime(created_at, 'unixepoch')) as month,
201 COUNT(*) as session_count,
202 SUM(message_count) as message_count,
203 SUM(prompt_tokens) as prompt_tokens,
204 SUM(completion_tokens) as completion_tokens,
205 SUM(cost) as total_cost,
206 AVG(cost) as avg_cost
207FROM sessions
208GROUP BY strftime('%Y-%m', datetime(created_at, 'unixepoch'))
209ORDER BY month DESC
210`
211
212type GetSessionStatsByMonthRow struct {
213 Month interface{} `json:"month"`
214 SessionCount int64 `json:"session_count"`
215 MessageCount sql.NullFloat64 `json:"message_count"`
216 PromptTokens sql.NullFloat64 `json:"prompt_tokens"`
217 CompletionTokens sql.NullFloat64 `json:"completion_tokens"`
218 TotalCost sql.NullFloat64 `json:"total_cost"`
219 AvgCost sql.NullFloat64 `json:"avg_cost"`
220}
221
222func (q *Queries) GetSessionStatsByMonth(ctx context.Context) ([]GetSessionStatsByMonthRow, error) {
223 rows, err := q.query(ctx, q.getSessionStatsByMonthStmt, getSessionStatsByMonth)
224 if err != nil {
225 return nil, err
226 }
227 defer rows.Close()
228 items := []GetSessionStatsByMonthRow{}
229 for rows.Next() {
230 var i GetSessionStatsByMonthRow
231 if err := rows.Scan(
232 &i.Month,
233 &i.SessionCount,
234 &i.MessageCount,
235 &i.PromptTokens,
236 &i.CompletionTokens,
237 &i.TotalCost,
238 &i.AvgCost,
239 ); err != nil {
240 return nil, err
241 }
242 items = append(items, i)
243 }
244 if err := rows.Close(); err != nil {
245 return nil, err
246 }
247 if err := rows.Err(); err != nil {
248 return nil, err
249 }
250 return items, nil
251}
252
253const getSessionStatsByWeek = `-- name: GetSessionStatsByWeek :many
254SELECT
255 date(created_at, 'unixepoch', 'weekday 0', '-6 days') as week_start,
256 COUNT(*) as session_count,
257 SUM(message_count) as message_count,
258 SUM(prompt_tokens) as prompt_tokens,
259 SUM(completion_tokens) as completion_tokens,
260 SUM(cost) as total_cost,
261 AVG(cost) as avg_cost
262FROM sessions
263GROUP BY date(created_at, 'unixepoch', 'weekday 0', '-6 days')
264ORDER BY week_start DESC
265`
266
267type GetSessionStatsByWeekRow struct {
268 WeekStart interface{} `json:"week_start"`
269 SessionCount int64 `json:"session_count"`
270 MessageCount sql.NullFloat64 `json:"message_count"`
271 PromptTokens sql.NullFloat64 `json:"prompt_tokens"`
272 CompletionTokens sql.NullFloat64 `json:"completion_tokens"`
273 TotalCost sql.NullFloat64 `json:"total_cost"`
274 AvgCost sql.NullFloat64 `json:"avg_cost"`
275}
276
277func (q *Queries) GetSessionStatsByWeek(ctx context.Context) ([]GetSessionStatsByWeekRow, error) {
278 rows, err := q.query(ctx, q.getSessionStatsByWeekStmt, getSessionStatsByWeek)
279 if err != nil {
280 return nil, err
281 }
282 defer rows.Close()
283 items := []GetSessionStatsByWeekRow{}
284 for rows.Next() {
285 var i GetSessionStatsByWeekRow
286 if err := rows.Scan(
287 &i.WeekStart,
288 &i.SessionCount,
289 &i.MessageCount,
290 &i.PromptTokens,
291 &i.CompletionTokens,
292 &i.TotalCost,
293 &i.AvgCost,
294 ); err != nil {
295 return nil, err
296 }
297 items = append(items, i)
298 }
299 if err := rows.Close(); err != nil {
300 return nil, err
301 }
302 if err := rows.Err(); err != nil {
303 return nil, err
304 }
305 return items, nil
306}
307
308const listAllSessions = `-- name: ListAllSessions :many
309SELECT id, parent_session_id, title, message_count, prompt_tokens, completion_tokens, cost, updated_at, created_at, summary_message_id
310FROM sessions
311ORDER BY created_at DESC
312`
313
314func (q *Queries) ListAllSessions(ctx context.Context) ([]Session, error) {
315 rows, err := q.query(ctx, q.listAllSessionsStmt, listAllSessions)
316 if err != nil {
317 return nil, err
318 }
319 defer rows.Close()
320 items := []Session{}
321 for rows.Next() {
322 var i Session
323 if err := rows.Scan(
324 &i.ID,
325 &i.ParentSessionID,
326 &i.Title,
327 &i.MessageCount,
328 &i.PromptTokens,
329 &i.CompletionTokens,
330 &i.Cost,
331 &i.UpdatedAt,
332 &i.CreatedAt,
333 &i.SummaryMessageID,
334 ); err != nil {
335 return nil, err
336 }
337 items = append(items, i)
338 }
339 if err := rows.Close(); err != nil {
340 return nil, err
341 }
342 if err := rows.Err(); err != nil {
343 return nil, err
344 }
345 return items, nil
346}
347
348const listChildSessions = `-- name: ListChildSessions :many
349SELECT id, parent_session_id, title, message_count, prompt_tokens, completion_tokens, cost, updated_at, created_at, summary_message_id
350FROM sessions
351WHERE parent_session_id = ?
352ORDER BY created_at ASC
353`
354
355func (q *Queries) ListChildSessions(ctx context.Context, parentSessionID sql.NullString) ([]Session, error) {
356 rows, err := q.query(ctx, q.listChildSessionsStmt, listChildSessions, parentSessionID)
357 if err != nil {
358 return nil, err
359 }
360 defer rows.Close()
361 items := []Session{}
362 for rows.Next() {
363 var i Session
364 if err := rows.Scan(
365 &i.ID,
366 &i.ParentSessionID,
367 &i.Title,
368 &i.MessageCount,
369 &i.PromptTokens,
370 &i.CompletionTokens,
371 &i.Cost,
372 &i.UpdatedAt,
373 &i.CreatedAt,
374 &i.SummaryMessageID,
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 listSessions = `-- name: ListSessions :many
390SELECT id, parent_session_id, title, message_count, prompt_tokens, completion_tokens, cost, updated_at, created_at, summary_message_id
391FROM sessions
392WHERE parent_session_id is NULL
393ORDER BY created_at DESC
394`
395
396func (q *Queries) ListSessions(ctx context.Context) ([]Session, error) {
397 rows, err := q.query(ctx, q.listSessionsStmt, listSessions)
398 if err != nil {
399 return nil, err
400 }
401 defer rows.Close()
402 items := []Session{}
403 for rows.Next() {
404 var i Session
405 if err := rows.Scan(
406 &i.ID,
407 &i.ParentSessionID,
408 &i.Title,
409 &i.MessageCount,
410 &i.PromptTokens,
411 &i.CompletionTokens,
412 &i.Cost,
413 &i.UpdatedAt,
414 &i.CreatedAt,
415 &i.SummaryMessageID,
416 ); err != nil {
417 return nil, err
418 }
419 items = append(items, i)
420 }
421 if err := rows.Close(); err != nil {
422 return nil, err
423 }
424 if err := rows.Err(); err != nil {
425 return nil, err
426 }
427 return items, nil
428}
429
430const searchSessionsByText = `-- name: SearchSessionsByText :many
431SELECT DISTINCT s.id, s.parent_session_id, s.title, s.message_count, s.prompt_tokens, s.completion_tokens, s.cost, s.updated_at, s.created_at, s.summary_message_id
432FROM sessions s
433JOIN messages m ON s.id = m.session_id
434WHERE m.parts LIKE ?
435ORDER BY s.created_at DESC
436`
437
438func (q *Queries) SearchSessionsByText(ctx context.Context, parts string) ([]Session, error) {
439 rows, err := q.query(ctx, q.searchSessionsByTextStmt, searchSessionsByText, parts)
440 if err != nil {
441 return nil, err
442 }
443 defer rows.Close()
444 items := []Session{}
445 for rows.Next() {
446 var i Session
447 if err := rows.Scan(
448 &i.ID,
449 &i.ParentSessionID,
450 &i.Title,
451 &i.MessageCount,
452 &i.PromptTokens,
453 &i.CompletionTokens,
454 &i.Cost,
455 &i.UpdatedAt,
456 &i.CreatedAt,
457 &i.SummaryMessageID,
458 ); err != nil {
459 return nil, err
460 }
461 items = append(items, i)
462 }
463 if err := rows.Close(); err != nil {
464 return nil, err
465 }
466 if err := rows.Err(); err != nil {
467 return nil, err
468 }
469 return items, nil
470}
471
472const searchSessionsByTitle = `-- name: SearchSessionsByTitle :many
473SELECT id, parent_session_id, title, message_count, prompt_tokens, completion_tokens, cost, updated_at, created_at, summary_message_id
474FROM sessions
475WHERE title LIKE ?
476ORDER BY created_at DESC
477`
478
479func (q *Queries) SearchSessionsByTitle(ctx context.Context, title string) ([]Session, error) {
480 rows, err := q.query(ctx, q.searchSessionsByTitleStmt, searchSessionsByTitle, title)
481 if err != nil {
482 return nil, err
483 }
484 defer rows.Close()
485 items := []Session{}
486 for rows.Next() {
487 var i Session
488 if err := rows.Scan(
489 &i.ID,
490 &i.ParentSessionID,
491 &i.Title,
492 &i.MessageCount,
493 &i.PromptTokens,
494 &i.CompletionTokens,
495 &i.Cost,
496 &i.UpdatedAt,
497 &i.CreatedAt,
498 &i.SummaryMessageID,
499 ); err != nil {
500 return nil, err
501 }
502 items = append(items, i)
503 }
504 if err := rows.Close(); err != nil {
505 return nil, err
506 }
507 if err := rows.Err(); err != nil {
508 return nil, err
509 }
510 return items, nil
511}
512
513const searchSessionsByTitleAndText = `-- name: SearchSessionsByTitleAndText :many
514SELECT DISTINCT s.id, s.parent_session_id, s.title, s.message_count, s.prompt_tokens, s.completion_tokens, s.cost, s.updated_at, s.created_at, s.summary_message_id
515FROM sessions s
516JOIN messages m ON s.id = m.session_id
517WHERE s.title LIKE ? AND m.parts LIKE ?
518ORDER BY s.created_at DESC
519`
520
521type SearchSessionsByTitleAndTextParams struct {
522 Title string `json:"title"`
523 Parts string `json:"parts"`
524}
525
526func (q *Queries) SearchSessionsByTitleAndText(ctx context.Context, arg SearchSessionsByTitleAndTextParams) ([]Session, error) {
527 rows, err := q.query(ctx, q.searchSessionsByTitleAndTextStmt, searchSessionsByTitleAndText, arg.Title, arg.Parts)
528 if err != nil {
529 return nil, err
530 }
531 defer rows.Close()
532 items := []Session{}
533 for rows.Next() {
534 var i Session
535 if err := rows.Scan(
536 &i.ID,
537 &i.ParentSessionID,
538 &i.Title,
539 &i.MessageCount,
540 &i.PromptTokens,
541 &i.CompletionTokens,
542 &i.Cost,
543 &i.UpdatedAt,
544 &i.CreatedAt,
545 &i.SummaryMessageID,
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 updateSession = `-- name: UpdateSession :one
561UPDATE sessions
562SET
563 title = ?,
564 prompt_tokens = ?,
565 completion_tokens = ?,
566 summary_message_id = ?,
567 cost = ?
568WHERE id = ?
569RETURNING id, parent_session_id, title, message_count, prompt_tokens, completion_tokens, cost, updated_at, created_at, summary_message_id
570`
571
572type UpdateSessionParams struct {
573 Title string `json:"title"`
574 PromptTokens int64 `json:"prompt_tokens"`
575 CompletionTokens int64 `json:"completion_tokens"`
576 SummaryMessageID sql.NullString `json:"summary_message_id"`
577 Cost float64 `json:"cost"`
578 ID string `json:"id"`
579}
580
581func (q *Queries) UpdateSession(ctx context.Context, arg UpdateSessionParams) (Session, error) {
582 row := q.queryRow(ctx, q.updateSessionStmt, updateSession,
583 arg.Title,
584 arg.PromptTokens,
585 arg.CompletionTokens,
586 arg.SummaryMessageID,
587 arg.Cost,
588 arg.ID,
589 )
590 var i Session
591 err := row.Scan(
592 &i.ID,
593 &i.ParentSessionID,
594 &i.Title,
595 &i.MessageCount,
596 &i.PromptTokens,
597 &i.CompletionTokens,
598 &i.Cost,
599 &i.UpdatedAt,
600 &i.CreatedAt,
601 &i.SummaryMessageID,
602 )
603 return i, err
604}