| |
const TABLES: &[&str] = &[
|
| |
"CREATE TABLE IF NOT EXISTS counter_test (counter INT)",
|
| |
"CREATE TABLE IF NOT EXISTS event_queue (id TEXT PRIMARY KEY, timestamp TEXT, event TEXT)",
|
| + |
"CREATE TABLE IF NOT EXISTS ci_event_queue (id TEXT PRIMARY KEY, timestamp TEXT, event TEXT)",
|
| |
"CREATE TABLE IF NOT EXISTS ci_runs (broker_run_id TEXT PRIMARY KEY, json TEXT)",
|
| |
];
|
| |
|
| |
Ok(ids)
|
| |
}
|
| |
|
| + |
/// Return list of identifiers for CI events currently in the queue.
|
| + |
pub fn queued_ci_events(&self) -> Result<Vec<QueueId>, DbError> {
|
| + |
let mut select = self.prepare("SELECT id FROM ci_event_queue")?;
|
| + |
|
| + |
let mut ids = vec![];
|
| + |
|
| + |
loop {
|
| + |
match select.stmt.next() {
|
| + |
Ok(State::Row) => {
|
| + |
let id: String = select
|
| + |
.stmt
|
| + |
.read("id")
|
| + |
.map_err(|e| DbError::list_events(&select.sql, e))?;
|
| + |
ids.push(QueueId::from(&id));
|
| + |
}
|
| + |
Ok(State::Done) => {
|
| + |
break;
|
| + |
}
|
| + |
Err(e) => {
|
| + |
return Err(DbError::list_events(&select.sql, e));
|
| + |
}
|
| + |
}
|
| + |
}
|
| + |
|
| + |
Ok(ids)
|
| + |
}
|
| + |
|
| |
/// Return a specific event, given is id, if one exists.
|
| - |
pub fn get_queued_event(&self, id: &QueueId) -> Result<Option<QueuedEvent>, DbError> {
|
| - |
let mut select = self.prepare("SELECT timestamp, event FROM event_queue WHERE id = :id")?;
|
| + |
pub fn get_queued_ci_event(&self, id: &QueueId) -> Result<Option<QueuedCiEvent>, DbError> {
|
| + |
let mut select =
|
| + |
self.prepare("SELECT timestamp, event FROM ci_event_queue WHERE id = :id")?;
|
| |
select
|
| |
.stmt
|
| |
.bind((":id", id.as_str()))
|
| |
.map_err(|e| DbError::bind(&select.sql, e))?;
|
| |
|
| |
let mut timestamp: Option<String> = None;
|
| - |
let mut event: Option<BrokerEvent> = None;
|
| + |
let mut event: Option<CiEvent> = None;
|
| |
|
| |
loop {
|
| |
match select.stmt.next() {
|
| |
}
|
| |
|
| |
/// Add a new event to the event queue, returning its id.
|
| - |
pub fn push_queued_event(&self, event: BrokerEvent) -> Result<QueueId, DbError> {
|
| + |
pub fn push_queued_ci_event(&self, event: CiEvent) -> Result<QueueId, DbError> {
|
| |
let json = serde_json::to_string(&event).map_err(DbError::event_to_json)?;
|
| |
|
| |
let id = QueueId::default();
|
| |
let ts = now().map_err(DbError::time_format)?;
|
| |
|
| - |
let mut insert =
|
| - |
self.prepare("INSERT INTO event_queue (id, timestamp, event) VALUES (:id, :ts, :e)")?;
|
| + |
let mut insert = self
|
| + |
.prepare("INSERT INTO ci_event_queue (id, timestamp, event) VALUES (:id, :ts, :e)")?;
|
| |
insert
|
| |
.stmt
|
| |
.bind((":id", id.as_str()))
|
| |
Ok(id)
|
| |
}
|
| |
|
| - |
/// Remove event from queue, given its id. It's OK if the event is
|
| + |
/// Remove CI event from queue, given its id. It's OK if the event is
|
| |
/// not in the queue, that is just silently ignored.
|
| - |
pub fn remove_queued_event(&self, id: &QueueId) -> Result<(), DbError> {
|
| - |
let mut remove = self.prepare("DELETE FROM event_queue WHERE id = :id")?;
|
| + |
pub fn remove_queued_ci_event(&self, id: &QueueId) -> Result<(), DbError> {
|
| + |
let mut remove = self.prepare("DELETE FROM ci_event_queue WHERE id = :id")?;
|
| |
remove
|
| |
.stmt
|
| |
.bind((":id", id.as_str()))
|
| |
}
|
| |
|
| |
impl QueuedEvent {
|
| - |
fn new(id: QueueId, ts: String, event: BrokerEvent) -> Self {
|
| + |
// fn new(id: QueueId, ts: String, event: BrokerEvent) -> Self {
|
| + |
// Self { id, ts, event }
|
| + |
// }
|
| + |
|
| + |
pub fn id(&self) -> &QueueId {
|
| + |
&self.id
|
| + |
}
|
| + |
|
| + |
pub fn timestamp(&self) -> &str {
|
| + |
&self.ts
|
| + |
}
|
| + |
|
| + |
pub fn event(&self) -> &BrokerEvent {
|
| + |
&self.event
|
| + |
}
|
| + |
}
|
| + |
|
| + |
#[derive(Clone, Debug, Serialize, Deserialize)]
|
| + |
pub struct QueuedCiEvent {
|
| + |
id: QueueId,
|
| + |
ts: String,
|
| + |
event: CiEvent,
|
| + |
}
|
| + |
|
| + |
impl QueuedCiEvent {
|
| + |
fn new(id: QueueId, ts: String, event: CiEvent) -> Self {
|
| |
Self { id, ts, event }
|
| |
}
|
| |
|