MCPcopy Create free account
hub / github.com/apache/datafusion / scalar_to_sql

Method scalar_to_sql

datafusion/sql/src/unparser/expr.rs:1273–1521  ·  view source on GitHub ↗

DataFusion ScalarValues sometimes require a ast::Expr to construct. For example ScalarValue::Date32(d) corresponds to the ast::Expr CAST('datestr' as DATE)

(&self, v: &ScalarValue)

Source from the content-addressed store, hash-verified

1271 /// DataFusion ScalarValues sometimes require a ast::Expr to construct.
1272 /// For example ScalarValue::Date32(d) corresponds to the ast::Expr CAST('datestr' as DATE)
1273 fn scalar_to_sql(&self, v: &ScalarValue) -> Result<ast::Expr> {
1274 match v {
1275 ScalarValue::Null => Ok(ast::Expr::value(ast::Value::Null)),
1276 ScalarValue::Boolean(Some(b)) => {
1277 Ok(ast::Expr::value(ast::Value::Boolean(b.to_owned())))
1278 }
1279 ScalarValue::Boolean(None) => Ok(ast::Expr::value(ast::Value::Null)),
1280 ScalarValue::Float16(Some(f)) => {
1281 Ok(ast::Expr::value(ast::Value::Number(f.to_string(), false)))
1282 }
1283 ScalarValue::Float16(None) => Ok(ast::Expr::value(ast::Value::Null)),
1284 ScalarValue::Float32(Some(f)) => {
1285 let f_val = match f.fract() {
1286 0.0 => format!("{f:.1}"),
1287 _ => format!("{f}"),
1288 };
1289 Ok(ast::Expr::value(ast::Value::Number(f_val, false)))
1290 }
1291 ScalarValue::Float32(None) => Ok(ast::Expr::value(ast::Value::Null)),
1292 ScalarValue::Float64(Some(f)) => {
1293 let f_val = match f.fract() {
1294 0.0 => format!("{f:.1}"),
1295 _ => format!("{f}"),
1296 };
1297 Ok(ast::Expr::value(ast::Value::Number(f_val, false)))
1298 }
1299 ScalarValue::Float64(None) => Ok(ast::Expr::value(ast::Value::Null)),
1300 ScalarValue::Decimal32(Some(value), precision, scale) => {
1301 Ok(ast::Expr::value(ast::Value::Number(
1302 Decimal32Type::format_decimal(*value, *precision, *scale),
1303 false,
1304 )))
1305 }
1306 ScalarValue::Decimal32(None, ..) => Ok(ast::Expr::value(ast::Value::Null)),
1307 ScalarValue::Decimal64(Some(value), precision, scale) => {
1308 Ok(ast::Expr::value(ast::Value::Number(
1309 Decimal64Type::format_decimal(*value, *precision, *scale),
1310 false,
1311 )))
1312 }
1313 ScalarValue::Decimal64(None, ..) => Ok(ast::Expr::value(ast::Value::Null)),
1314 ScalarValue::Decimal128(Some(value), precision, scale) => {
1315 Ok(ast::Expr::value(ast::Value::Number(
1316 Decimal128Type::format_decimal(*value, *precision, *scale),
1317 false,
1318 )))
1319 }
1320 ScalarValue::Decimal128(None, ..) => Ok(ast::Expr::value(ast::Value::Null)),
1321 ScalarValue::Decimal256(Some(value), precision, scale) => {
1322 Ok(ast::Expr::value(ast::Value::Number(
1323 Decimal256Type::format_decimal(*value, *precision, *scale),
1324 false,
1325 )))
1326 }
1327 ScalarValue::Decimal256(None, ..) => Ok(ast::Expr::value(ast::Value::Null)),
1328 ScalarValue::Int8(Some(i)) => {
1329 Ok(ast::Expr::value(ast::Value::Number(i.to_string(), false)))
1330 }

Callers 3

expr_to_sql_innerMethod · 0.80
convert_boundMethod · 0.80

Calls 10

valueFunction · 0.85
newFunction · 0.85
to_stringMethod · 0.45
string_literal_to_sqlMethod · 0.45
valuesMethod · 0.45
as_anyMethod · 0.45
to_arrayMethod · 0.45

Tested by

no test coverage detected