Current section

Files

Jump to
pi_bridge lib pi mirror quack_db schema.ex
Raw

lib/pi/mirror/quack_db/schema.ex

defmodule Pi.Mirror.QuackDB.Schema do
@moduledoc false
@events_table "pi_events"
@files_table "pi_session_files"
@event_columns [
id: :varchar,
event_type: :varchar,
cwd: :varchar,
session_file: :varchar,
session_name: :varchar,
leaf_id: :varchar,
turn_index: :bigint,
tool_name: :varchar,
tool_call_id: :varchar,
is_error: :boolean,
occurred_at: :timestamp,
payload_json: :varchar
]
@file_columns [
{:session_file, :varchar, primary_key: true},
file_size: :bigint,
mtime_seconds: :bigint,
synced_entries: :bigint,
synced_at: :timestamp
]
def ensure(conn) do
QuackDB.query!(
conn,
QuackDB.DDL.create_table(@events_table, @event_columns, if_not_exists: true)
)
QuackDB.query!(
conn,
QuackDB.DDL.create_table(@files_table, @file_columns, if_not_exists: true)
)
QuackDB.query!(conn, session_file_index())
:ok
rescue
exception in [QuackDB.Error, DBConnection.ConnectionError, RuntimeError, ArgumentError] ->
{:error, exception}
end
defp session_file_index do
[
"CREATE INDEX IF NOT EXISTS ",
QuackDB.Type.quote_identifier("pi_events_session_entry_file_idx"),
" ON ",
QuackDB.Type.quote_identifier(@events_table),
"(",
QuackDB.Type.quote_identifier(:event_type),
", ",
QuackDB.Type.quote_identifier(:session_file),
")"
]
end
end