1-- name: CreateSession :one
2INSERT INTO sessions (
3 id,
4 parent_session_id,
5 title,
6 message_count,
7 prompt_tokens,
8 completion_tokens,
9 cost,
10 summary_message_id,
11 updated_at,
12 created_at
13) VALUES (
14 ?,
15 ?,
16 ?,
17 ?,
18 ?,
19 ?,
20 ?,
21 null,
22 strftime('%s', 'now'),
23 strftime('%s', 'now')
24) RETURNING *;
25
26-- name: GetSessionByID :one
27SELECT *
28FROM sessions
29WHERE id = ? LIMIT 1;
30
31-- name: ListSessions :many
32SELECT *
33FROM sessions
34WHERE parent_session_id is NULL
35ORDER BY created_at DESC;
36
37-- name: UpdateSession :one
38UPDATE sessions
39SET
40 title = ?,
41 prompt_tokens = ?,
42 completion_tokens = ?,
43 summary_message_id = ?,
44 cost = ?
45WHERE id = ?
46RETURNING *;
47
48
49-- name: DeleteSession :exec
50DELETE FROM sessions
51WHERE id = ?;
52
53-- name: ListChildSessions :many
54SELECT *
55FROM sessions
56WHERE parent_session_id = ?
57ORDER BY created_at ASC;
58
59-- name: ListAllSessions :many
60SELECT *
61FROM sessions
62ORDER BY created_at DESC;
63
64-- name: SearchSessionsByTitle :many
65SELECT *
66FROM sessions
67WHERE title LIKE ?
68ORDER BY created_at DESC;
69
70-- name: SearchSessionsByTitleAndText :many
71SELECT DISTINCT s.*
72FROM sessions s
73JOIN messages m ON s.id = m.session_id
74WHERE s.title LIKE ? AND m.parts LIKE ?
75ORDER BY s.created_at DESC;
76
77-- name: SearchSessionsByText :many
78SELECT DISTINCT s.*
79FROM sessions s
80JOIN messages m ON s.id = m.session_id
81WHERE m.parts LIKE ?
82ORDER BY s.created_at DESC;
83
84-- name: GetSessionStats :one
85SELECT
86 COUNT(*) as total_sessions,
87 SUM(message_count) as total_messages,
88 SUM(prompt_tokens) as total_prompt_tokens,
89 SUM(completion_tokens) as total_completion_tokens,
90 SUM(cost) as total_cost,
91 AVG(cost) as avg_cost_per_session
92FROM sessions;
93
94-- name: GetSessionStatsByDay :many
95SELECT
96 date(created_at, 'unixepoch') as day,
97 COUNT(*) as session_count,
98 SUM(message_count) as message_count,
99 SUM(prompt_tokens) as prompt_tokens,
100 SUM(completion_tokens) as completion_tokens,
101 SUM(cost) as total_cost,
102 AVG(cost) as avg_cost
103FROM sessions
104GROUP BY date(created_at, 'unixepoch')
105ORDER BY day DESC;
106
107-- name: GetSessionStatsByWeek :many
108SELECT
109 date(created_at, 'unixepoch', 'weekday 0', '-6 days') as week_start,
110 COUNT(*) as session_count,
111 SUM(message_count) as message_count,
112 SUM(prompt_tokens) as prompt_tokens,
113 SUM(completion_tokens) as completion_tokens,
114 SUM(cost) as total_cost,
115 AVG(cost) as avg_cost
116FROM sessions
117GROUP BY date(created_at, 'unixepoch', 'weekday 0', '-6 days')
118ORDER BY week_start DESC;
119
120-- name: GetSessionStatsByMonth :many
121SELECT
122 strftime('%Y-%m', datetime(created_at, 'unixepoch')) as month,
123 COUNT(*) as session_count,
124 SUM(message_count) as message_count,
125 SUM(prompt_tokens) as prompt_tokens,
126 SUM(completion_tokens) as completion_tokens,
127 SUM(cost) as total_cost,
128 AVG(cost) as avg_cost
129FROM sessions
130GROUP BY strftime('%Y-%m', datetime(created_at, 'unixepoch'))
131ORDER BY month DESC;