Add SQLite schema metadata for DB resources
This commit is contained in:
parent
1a0f1e7671
commit
527090fd4c
8 changed files with 119 additions and 14 deletions
|
|
@ -40,6 +40,8 @@ pub enum NodeError {
|
|||
Store(#[from] geth_store::StoreError),
|
||||
#[error("cas error: {0}")]
|
||||
Cas(#[from] geth_cas::CasError),
|
||||
#[error("db error: {0}")]
|
||||
Db(#[from] geth_db::DbError),
|
||||
#[error("control error: {0}")]
|
||||
Control(#[from] geth_control::ControlError),
|
||||
#[error("json error: {0}")]
|
||||
|
|
@ -570,6 +572,7 @@ pub fn handle_request(
|
|||
return Err(NodeError::InvalidDbPath(path.display().to_string()));
|
||||
}
|
||||
let path = std::fs::canonicalize(path)?;
|
||||
let schema_metadata = geth_db::schema_metadata(&path)?;
|
||||
let resource_id = format!("resource:db:{name}");
|
||||
let db_id = format!("db:{name}");
|
||||
let resource = StoredResource {
|
||||
|
|
@ -587,7 +590,7 @@ pub fn handle_request(
|
|||
};
|
||||
store.insert_db_resource(&stored)?;
|
||||
Ok(ControlResponse::DbAdded {
|
||||
db: db_resource_from_stored(&stored)?,
|
||||
db: db_resource_from_stored_with_schema(&stored, schema_metadata),
|
||||
})
|
||||
}
|
||||
ControlRequest::DbStatus { name } => {
|
||||
|
|
@ -669,16 +672,30 @@ fn stored_resource_to_descriptor(stored: StoredResource) -> Result<ResourceDescr
|
|||
fn db_resource_from_stored(stored: &StoredDbResource) -> Result<DbResource, NodeError> {
|
||||
let path = Path::new(&stored.path);
|
||||
let metadata = path.metadata().ok();
|
||||
Ok(DbResource {
|
||||
let schema_metadata = if metadata.as_ref().is_some_and(std::fs::Metadata::is_file) {
|
||||
geth_db::schema_metadata(path).unwrap_or_else(|error| format!("unavailable:{error}"))
|
||||
} else {
|
||||
"unavailable:path-missing".to_owned()
|
||||
};
|
||||
Ok(db_resource_from_stored_with_schema(stored, schema_metadata))
|
||||
}
|
||||
|
||||
fn db_resource_from_stored_with_schema(
|
||||
stored: &StoredDbResource,
|
||||
schema_metadata: String,
|
||||
) -> DbResource {
|
||||
let path = Path::new(&stored.path);
|
||||
let metadata = path.metadata().ok();
|
||||
DbResource {
|
||||
id: stored.db_id.clone().into(),
|
||||
resource: stored.resource_id.clone().into(),
|
||||
name: stored.name.clone(),
|
||||
path: stored.path.clone(),
|
||||
path_exists: metadata.as_ref().is_some_and(std::fs::Metadata::is_file),
|
||||
size_bytes: metadata.map(|metadata| metadata.len()),
|
||||
schema_metadata: "not-inspected-until-crsqlite-integration".to_owned(),
|
||||
schema_metadata,
|
||||
sync_status: "local-only".to_owned(),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
fn kv_resource_from_stored(stored: &StoredKvStore) -> KvResource {
|
||||
|
|
|
|||
Loading…
Reference in a new issue