# DECIMAL(p, s): CREATE OR REPLACE FUNCTION d2w(p) AS ( if( p <= 4, 16, if( p <= 9, 32, if( p <= 18, 64, 128) )) ); CREATE OR REPLACE FUNCTION nominal_size_in_bits(val) AS ( CASE typeof(val) WHEN 'TINYINT' THEN 8 WHEN 'SMALLINT' THEN 16 WHEN 'INTEGER' THEN 32 WHEN 'BIGINT' THEN 64 WHEN 'HUGEINT' THEN 128 WHEN 'UTINYINT' THEN 8 WHEN 'USMALLINT' THEN 16 WHEN 'UINTEGER' THEN 32 WHEN 'UBIGINT' THEN 64 WHEN 'UHUGEINT' THEN 128 WHEN 'BOOLEAN' THEN 8 WHEN 'UUID' THEN 128 WHEN 'FLOAT' THEN 32 WHEN 'DOUBLE' THEN 64 ELSE CASE WHEN typeof(val) LIKE 'DECIMAL%' THEN d2w( regexp_extract(typeof(val), '[0-9]+')::INTEGER ) ELSE NULL END END );