Skip to content

Commit 2fb9f68

Browse files
committed
add list command
1 parent 338af3e commit 2fb9f68

3 files changed

Lines changed: 55 additions & 0 deletions

File tree

cli/src/commands/list.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
use std::collections::HashMap;
2+
3+
use futures::TryStreamExt;
4+
use sqlx::PgConnection;
5+
6+
pub(crate) async fn list(conn: &mut PgConnection) -> anyhow::Result<()> {
7+
let available_extensions = available_extensions(conn).await?;
8+
9+
for (extension, versions) in available_extensions {
10+
println!("{extension}");
11+
for version in versions {
12+
println!(" {version}");
13+
}
14+
}
15+
16+
Ok(())
17+
}
18+
19+
#[derive(sqlx::FromRow)]
20+
struct ExtensionRow {
21+
name: String,
22+
version: String,
23+
}
24+
25+
async fn available_extensions(
26+
conn: &mut PgConnection,
27+
) -> anyhow::Result<HashMap<String, Vec<String>>> {
28+
let mut rows = sqlx::query_as::<_, ExtensionRow>(
29+
"select name, version from pgtle.available_extension_versions()",
30+
)
31+
.fetch(conn);
32+
33+
let mut available_extensions = HashMap::new();
34+
while let Some(row) = rows.try_next().await? {
35+
let versions: &mut Vec<String> = available_extensions.entry(row.name).or_default();
36+
versions.push(row.version);
37+
}
38+
39+
Ok(available_extensions)
40+
}

cli/src/commands/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ pub mod install;
22
pub mod login;
33
pub mod publish;
44
pub mod uninstall;
5+
pub mod list;

cli/src/main.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,14 @@ enum Commands {
6262
#[arg(long)]
6363
registry_name: Option<String>,
6464
},
65+
66+
/// List available packages
67+
#[clap(alias = "ls")]
68+
List {
69+
/// PostgreSQL connection string
70+
#[arg(short, long)]
71+
connection: String,
72+
},
6573
}
6674

6775
#[derive(Debug, clap::Args)]
@@ -139,5 +147,11 @@ async fn main() -> anyhow::Result<()> {
139147
println!("Login successful");
140148
Ok(())
141149
}
150+
151+
Commands::List { connection } => {
152+
let mut conn = util::get_connection(connection).await?;
153+
commands::list::list(&mut conn).await?;
154+
Ok(())
155+
}
142156
}
143157
}

0 commit comments

Comments
 (0)