MCPcopy Create free account
hub / github.com/erans/pgsqlite / format_size_pretty

Function format_size_pretty

src/functions/system_functions.rs:473–516  ·  view source on GitHub ↗

Format size in bytes as human-readable string using PostgreSQL's algorithm Uses binary prefixes: 1 kB = 1024 bytes, 1 MB = 1024² bytes, etc. Based on PostgreSQL source code in src/backend/utils/adt/dbsize.c

(mut size: i64)

Source from the content-addressed store, hash-verified

471/// Uses binary prefixes: 1 kB = 1024 bytes, 1 MB = 1024² bytes, etc.
472/// Based on PostgreSQL source code in src/backend/utils/adt/dbsize.c
473fn format_size_pretty(mut size: i64) -> String {
474 let abs_size = size.unsigned_abs();
475
476 // PostgreSQL unit definitions
477 const BYTES_LIMIT: u64 = 10 * 1024; // 10240 bytes
478 const UNIT_LIMIT: u64 = 10 * 1024; // 10240 (for kB, MB, GB, TB, PB)
479
480 // Check if we should display as bytes
481 if abs_size < BYTES_LIMIT {
482 return format!("{} bytes", size);
483 }
484
485 // Convert to kB and check limit
486 size = (size + 512) / 1024; // Half-rounded division
487 let abs_size_kb = size.unsigned_abs();
488 if abs_size_kb < UNIT_LIMIT {
489 return format!("{} kB", size);
490 }
491
492 // Convert to MB and check limit
493 size = (size + 512) / 1024; // Half-rounded division
494 let abs_size_mb = size.unsigned_abs();
495 if abs_size_mb < UNIT_LIMIT {
496 return format!("{} MB", size);
497 }
498
499 // Convert to GB and check limit
500 size = (size + 512) / 1024; // Half-rounded division
501 let abs_size_gb = size.unsigned_abs();
502 if abs_size_gb < UNIT_LIMIT {
503 return format!("{} GB", size);
504 }
505
506 // Convert to TB and check limit
507 size = (size + 512) / 1024; // Half-rounded division
508 let abs_size_tb = size.unsigned_abs();
509 if abs_size_tb < UNIT_LIMIT {
510 return format!("{} TB", size);
511 }
512
513 // Convert to PB (final unit)
514 size = (size + 512) / 1024; // Half-rounded division
515 format!("{} PB", size)
516}
517
518#[cfg(test)]
519mod tests {

Callers 2

pg_size_prettyMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected