public static Expr ArgObjectToExpr(System.Object value, Boolean allowRelationalColumns) { if (value == null) { return(BuildLiteralNullScalar()); } if (value is Dictionary <string, object> ) { value = new XDevAPI.DbDoc(value).ToString(); } if (value is bool) { return(BuildLiteralScalar(Convert.ToBoolean(value))); } else if (value is byte || value is short || value is int || value is long) { return(BuildLiteralScalar(Convert.ToInt64(value))); } else if (value is float || value is double) { return(BuildLiteralScalar(Convert.ToDouble(value))); } else if (value is string) { try { // try to parse expressions Expr expr = new ExprParser((string)value).Parse(); if (expr.Identifier != null) { return(BuildLiteralScalar((string)value)); } return(expr); } catch { // if can't parse, returns as literal return(BuildLiteralScalar((string)value)); } } else if (value is XDevAPI.DbDoc) { // TODO: value.ToString() returns boolean properties as "True"/"False". X Protocol requires them in lower case. return(BuildLiteralScalar(value.ToString())); } throw new NotSupportedException("Value of type " + value.GetType() + " is not currently supported."); }
public static Expr ArgObjectToExpr(System.Object value, Boolean allowRelationalColumns, Boolean evaluateStringExpresssion = true) { if (value == null) { return(BuildLiteralNullScalar()); } if (value is Dictionary <string, object> ) { value = new XDevAPI.DbDoc(value).ToString(); } if (value is XDevAPI.MySqlExpression) { value = (value as XDevAPI.MySqlExpression).value; } if (value is bool) { return(BuildLiteralScalar(Convert.ToBoolean(value))); } else if (value is byte || value is short || value is int || value is long) { return(BuildLiteralScalar(Convert.ToInt64(value))); } else if (value is ushort || value is uint || value is ulong) { return(BuildLiteralScalar(Convert.ToUInt64(value))); } else if (value is float || value is double) { return(BuildLiteralScalar(Convert.ToDouble(value))); } else if (value is string) { try { // try to parse expressions var stringValue = (string)value; if (!evaluateStringExpresssion) { return(BuildLiteralScalar((string)value)); } Expr expr = new ExprParser(stringValue).Parse(); if (expr.Identifier != null) { return(BuildLiteralScalar(stringValue)); } return(expr); } catch { // if can't parse, returns as literal return(BuildLiteralScalar((string)value)); } } else if (value is XDevAPI.DbDoc) { return(BuildLiteralScalar(value.ToString())); } throw new NotSupportedException("Value of type " + value.GetType() + " is not currently supported."); }