@@ -3510,7 +3510,77 @@ mod mssql {
3510
3510
}
3511
3511
3512
3512
async fn table ( & self , name : String ) -> color_eyre:: Result < responses:: Table > {
3513
- todo ! ( )
3513
+ let mut client = self . client . lock ( ) . await ;
3514
+
3515
+ let row_count: i32 = client
3516
+ . query ( format ! ( "SELECT count(*) AS count FROM {name}" ) , & [ ] )
3517
+ . await ?
3518
+ . into_row ( )
3519
+ . await ?
3520
+ . and_then ( |row| row. get ( "count" ) )
3521
+ . ok_or_eyre ( "couldn't count rows" ) ?;
3522
+
3523
+ let table_size: i64 = client
3524
+ . query (
3525
+ r#"
3526
+ SELECT SUM(a.total_pages) * 8 AS size_kb
3527
+ FROM sys.partitions p
3528
+ JOIN sys.allocation_units a ON p.partition_id = a.container_id
3529
+ JOIN sys.tables t ON p.object_id = t.object_id
3530
+ JOIN sys.schemas s ON t.schema_id = s.schema_id
3531
+ WHERE s.name = SCHEMA_NAME() AND t.name = @P1;
3532
+ "# ,
3533
+ & [ & name] ,
3534
+ )
3535
+ . await ?
3536
+ . into_row ( )
3537
+ . await ?
3538
+ . and_then ( |row| row. get ( "size_kb" ) )
3539
+ . ok_or_eyre ( "couldn't count rows" ) ?;
3540
+ let table_size = helpers:: format_size ( table_size as f64 ) ;
3541
+
3542
+ let index_count: i32 = client
3543
+ . query (
3544
+ r#"
3545
+ SELECT COUNT(*) AS count
3546
+ FROM sys.stats s
3547
+ JOIN sys.tables t ON s.object_id = t.object_id
3548
+ JOIN sys.schemas sc ON t.schema_id = sc.schema_id
3549
+ WHERE sc.name = SCHEMA_NAME() AND t.name = @P1;
3550
+ "# ,
3551
+ & [ & name] ,
3552
+ )
3553
+ . await ?
3554
+ . into_row ( )
3555
+ . await ?
3556
+ . and_then ( |row| row. get ( "count" ) )
3557
+ . ok_or_eyre ( "couldn't count indexes" ) ?;
3558
+
3559
+ let column_count: i32 = client
3560
+ . query (
3561
+ r#"
3562
+ SELECT COUNT(*) AS count
3563
+ FROM sys.columns c
3564
+ JOIN sys.tables t ON c.object_id = t.object_id
3565
+ JOIN sys.schemas s ON t.schema_id = s.schema_id
3566
+ WHERE s.name = SCHEMA_NAME() AND t.name = @P1;
3567
+ "# ,
3568
+ & [ & name] ,
3569
+ )
3570
+ . await ?
3571
+ . into_row ( )
3572
+ . await ?
3573
+ . and_then ( |row| row. get ( "count" ) )
3574
+ . ok_or_eyre ( "couldn't count columns" ) ?;
3575
+
3576
+ Ok ( responses:: Table {
3577
+ name,
3578
+ sql : None ,
3579
+ row_count,
3580
+ table_size,
3581
+ index_count,
3582
+ column_count,
3583
+ } )
3514
3584
}
3515
3585
3516
3586
async fn table_data (
0 commit comments