mirror of
https://github.com/openai/codex.git
synced 2026-09-10 20:26:47 +00:00
## What changed - Add `SqliteConfig` as the shared entry point for read-write and read-only SQLite pools. - Apply consistent WAL, synchronization, auto-vacuum, busy-timeout, logging, and pool-size settings to writable Codex databases. - Route state runtime, audit, CLI, and test database connections through the shared configuration. ## Testing - Run migration tests against temporary on-disk databases opened through `SqliteConfig`, including the concurrent-writer repair case. GitOrigin-RevId: e3946b98bde04c47574532ac8b1a7bb2b03edd97
48 lines
1.5 KiB
Rust
48 lines
1.5 KiB
Rust
//! Read-only state database queries for diagnostics.
|
|
|
|
use anyhow::Result;
|
|
use codex_utils_absolute_path::AbsolutePathBuf;
|
|
use sqlx::Row;
|
|
use std::path::Path;
|
|
use std::path::PathBuf;
|
|
|
|
/// Minimal thread metadata used by read-only state database audits.
|
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
|
pub struct ThreadStateAuditRow {
|
|
pub id: String,
|
|
pub rollout_path: PathBuf,
|
|
pub archived: bool,
|
|
pub source: String,
|
|
pub model_provider: String,
|
|
}
|
|
|
|
/// Read persisted thread rows from a state DB without creating, migrating, or repairing it.
|
|
pub async fn read_thread_state_audit_rows(path: &Path) -> Result<Vec<ThreadStateAuditRow>> {
|
|
let sqlite = crate::SqliteConfig::from_sqlite_home(AbsolutePathBuf::try_from(
|
|
path.parent().unwrap_or(path),
|
|
)?);
|
|
let pool = sqlite.open_read_only_pool(path).await?;
|
|
let rows = sqlx::query(
|
|
r#"
|
|
SELECT id, rollout_path, archived, source, model_provider
|
|
FROM threads
|
|
"#,
|
|
)
|
|
.fetch_all(&pool)
|
|
.await?;
|
|
pool.close().await;
|
|
|
|
rows.into_iter()
|
|
.map(|row| {
|
|
let archived: i64 = row.try_get("archived")?;
|
|
Ok(ThreadStateAuditRow {
|
|
id: row.try_get("id")?,
|
|
rollout_path: PathBuf::from(row.try_get::<String, _>("rollout_path")?),
|
|
archived: archived != 0,
|
|
source: row.try_get("source")?,
|
|
model_provider: row.try_get("model_provider")?,
|
|
})
|
|
})
|
|
.collect()
|
|
}
|