///|
/// SQL-only decomposition works in persistent triggers on external connections.
/// Eleven scaling stages cover the finite binary64 exponent range. All factors
/// are built from 2.0 by exact squaring, avoiding decimal REAL constants too.
fn sqlite_real_wire(expression : String) -> String {
let scale = "CASE WHEN abs(m)>=4503599627370496.0*f THEN m/f" +
" WHEN m<>0 AND abs(m)<9007199254740992.0/f THEN m*f ELSE m END"
let step = "CASE WHEN abs(m)>=4503599627370496.0*f THEN k" +
" WHEN m<>0 AND abs(m)<9007199254740992.0/f THEN -k ELSE 0 END"
"(WITH RECURSIVE mooncdc_powers(k,f) AS (VALUES(1,2.0)" +
" UNION ALL SELECT k*2,f*f FROM mooncdc_powers WHERE k<512)," +
" mooncdc_stages(i,k) AS (VALUES(0,512),(1,512),(2,256),(3,128),(4,64),(5,32),(6,16),(7,8),(8,4),(9,2),(10,1))," +
" mooncdc_real(i,m,e) AS (SELECT 0," +
expression +
",0 UNION ALL SELECT i+1," +
scale +
",e+(" +
step +
") FROM mooncdc_real JOIN mooncdc_stages USING(i) JOIN mooncdc_powers USING(k))" +
" SELECT CASE WHEN abs(m)>1.7976931348623157e308 THEN json_array('real','nonfinite')" +
" WHEN m=0 THEN json_array('real','0','0')" +
" ELSE json_array('real',CAST(CAST(m AS INTEGER) AS TEXT),CAST(e AS TEXT)) END" +
" FROM mooncdc_real WHERE i=11)"
}