@@ -436,6 +436,8 @@ pub fn create(
436436 }
437437 } ;
438438
439+ let _ = crate :: config:: save_current_database ( "default" , & result. id ) ;
440+
439441 match format {
440442 "json" => println ! ( "{}" , serde_json:: to_string_pretty( & result) . unwrap( ) ) ,
441443 "yaml" => print ! ( "{}" , serde_yaml:: to_string( & result) . unwrap( ) ) ,
@@ -450,6 +452,34 @@ pub fn create(
450452 }
451453}
452454
455+ pub fn set ( id_or_description : & str , workspace_id : & str ) {
456+ use crossterm:: style:: Stylize ;
457+ let api = ApiClient :: new ( Some ( workspace_id) ) ;
458+ let db = resolve_database ( & api, id_or_description) ;
459+ if let Err ( e) = crate :: config:: save_current_database ( "default" , & db. id ) {
460+ eprintln ! ( "{}" , format!( "error saving current database: {e}" ) . red( ) ) ;
461+ std:: process:: exit ( 1 ) ;
462+ }
463+ println ! ( "{}" , format!( "Current database set to {}" , db. id) . green( ) ) ;
464+ }
465+
466+ fn resolve_current_database ( provided : Option < & str > , _workspace_id : & str ) -> String {
467+ if let Some ( id) = provided {
468+ return id. to_string ( ) ;
469+ }
470+ match crate :: config:: load_current_database ( "default" ) {
471+ Some ( id) => id,
472+ None => {
473+ use crossterm:: style:: Stylize ;
474+ eprintln ! (
475+ "{}" ,
476+ "error: no current database set. Use 'hotdata databases set <id>' or pass a database id." . red( )
477+ ) ;
478+ std:: process:: exit ( 1 ) ;
479+ }
480+ }
481+ }
482+
453483pub fn delete ( workspace_id : & str , id_or_description : & str ) {
454484 use crossterm:: style:: Stylize ;
455485
@@ -465,9 +495,10 @@ pub fn delete(workspace_id: &str, id_or_description: &str) {
465495 println ! ( "{}" , "Database deleted." . green( ) ) ;
466496}
467497
468- pub fn tables_list ( workspace_id : & str , database : & str , schema : Option < & str > , format : & str ) {
498+ pub fn tables_list ( workspace_id : & str , database : Option < & str > , schema : Option < & str > , format : & str ) {
499+ let database = resolve_current_database ( database, workspace_id) ;
469500 let api = ApiClient :: new ( Some ( workspace_id) ) ;
470- let db = resolve_database ( & api, database) ;
501+ let db = resolve_database ( & api, & database) ;
471502 let tables = collect_tables ( & api, & db. default_connection_id , schema) ;
472503
473504 let rows = table_rows ( tables) ;
@@ -502,7 +533,7 @@ pub fn tables_list(workspace_id: &str, database: &str, schema: Option<&str>, for
502533
503534pub fn tables_load (
504535 workspace_id : & str ,
505- database : & str ,
536+ database : Option < & str > ,
506537 table : & str ,
507538 schema : Option < & str > ,
508539 file : Option < & str > ,
@@ -511,8 +542,9 @@ pub fn tables_load(
511542) {
512543 use crossterm:: style:: Stylize ;
513544
545+ let database = resolve_current_database ( database, workspace_id) ;
514546 let api = ApiClient :: new ( Some ( workspace_id) ) ;
515- let db = resolve_database ( & api, database) ;
547+ let db = resolve_database ( & api, & database) ;
516548 let schema = schema_name ( schema) ;
517549
518550 // clap enforces mutual exclusion; only one of these is ever Some.
@@ -564,11 +596,12 @@ pub fn tables_load(
564596 println ! ( "rows: {}" , result. row_count) ;
565597}
566598
567- pub fn tables_delete ( workspace_id : & str , database : & str , table : & str , schema : Option < & str > ) {
599+ pub fn tables_delete ( workspace_id : & str , database : Option < & str > , table : & str , schema : Option < & str > ) {
568600 use crossterm:: style:: Stylize ;
569601
602+ let database = resolve_current_database ( database, workspace_id) ;
570603 let api = ApiClient :: new ( Some ( workspace_id) ) ;
571- let db = resolve_database ( & api, database) ;
604+ let db = resolve_database ( & api, & database) ;
572605 let schema = schema_name ( schema) ;
573606
574607 let path = managed_table_delete_path ( & db. default_connection_id , schema, table) ;
0 commit comments