sessions.sql.go

  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}