File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change @@ -2,3 +2,4 @@ pub mod install;
22pub mod login;
33pub mod publish;
44pub mod uninstall;
5+ pub mod list;
Original file line number Diff line number Diff 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}
You can’t perform that action at this time.
0 commit comments