Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion examples/vector_extension/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ version.workspace = true
[dependencies]
anyhow = { workspace = true }
indoc = { workspace = true }
postgresql_extensions = { path = "../../postgresql_extensions" }
postgresql_embedded = { path = "../../postgresql_embedded" }
postgresql_extensions = { path = "../../postgresql_extensions" }
sqlx = { workspace = true, features = ["runtime-tokio"] }
tracing = { workspace = true }
tracing-subscriber = { workspace = true }
Expand Down
5 changes: 4 additions & 1 deletion postgresql_extensions/src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,13 @@ pub type Result<T, E = Error> = core::result::Result<T, E>;
pub enum Error {
/// Archive error
#[error(transparent)]
ArchiveFound(#[from] postgresql_archive::Error),
ArchiveError(#[from] postgresql_archive::Error),
/// Error when a command fails
#[error(transparent)]
CommandError(#[from] postgresql_commands::Error),
/// Extension not found
#[error("extension not found '{0}'")]
ExtensionNotFound(String),
/// Error when an IO operation fails
#[error(transparent)]
IoError(#[from] std::io::Error),
Expand Down
25 changes: 23 additions & 2 deletions postgresql_extensions/src/repository/steampipe/repository.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use crate::model::AvailableExtension;
use crate::repository::steampipe::URL;
use crate::repository::{steampipe, Repository};
use crate::Error::ExtensionNotFound;
use crate::Result;
use async_trait::async_trait;
use flate2::bufread::GzDecoder;
Expand Down Expand Up @@ -67,7 +68,14 @@ impl Repository for Steampipe {
name: &str,
version: &VersionReq,
) -> Result<(Version, Vec<u8>)> {
let url = format!("{URL}/steampipe-plugin-{name}?postgresql_version={postgresql_version}");
let Some(extension) = steampipe::extensions::get()
.iter()
.find(|extension| extension.name == name)
else {
let extension = format!("{}:{}:{}", self.name(), name, version);
return Err(ExtensionNotFound(extension));
};
let url = format!("{}?postgresql_version={postgresql_version}", extension.url);
let archive = get_archive(url.as_str(), version).await?;
Ok(archive)
}
Expand Down Expand Up @@ -120,7 +128,7 @@ mod tests {
}

#[tokio::test]
async fn test_get_extensions() -> Result<()> {
async fn test_get_available_extensions() -> Result<()> {
let repository = Steampipe;
let extensions = repository.get_available_extensions().await?;
let extension = &extensions[0];
Expand All @@ -133,4 +141,17 @@ mod tests {
assert_eq!(143, extensions.len());
Ok(())
}

#[tokio::test]
async fn test_get_archive_error() -> anyhow::Result<()> {
let repository = Steampipe;
let postgresql_version = "15.7";
let name = "does-not-exist";
let version = VersionReq::parse("=0.12.0")?;
let result = repository
.get_archive(postgresql_version, name, &version)
.await;
assert!(result.is_err());
Ok(())
}
}