in MySQL.Data/src/X/Protocol/X/ExpUnparser.cs [182:235]
static string OperatorToString(Operator e)
{
string name = e.Name;
List<string> parameters = new List<string>();
foreach (Expr p in e.Param)
{
parameters.Add(ExprToString(p));
}
if ("between".Equals(name) || "not_between".Equals(name))
{
name = name.Replace("not_between", "not between");
return string.Format("({0} {1} {2} AND {3})", parameters[0], name, parameters[1], parameters[2]);
}
else if ("in".Equals(name) || "not_in".Equals(name))
{
name = name.Replace("not_in", "not in");
return string.Format("{0} {1}{2}", parameters[0], name, ParamListToString(parameters.GetRange(1, parameters.Count - 1)));
}
else if ("like".Equals(name) || "not_like".Equals(name))
{
name = name.Replace("not_like", "not like");
string s = string.Format("{0} {1} {2}", parameters[0], name, parameters[1]);
if (parameters.Count == 3)
{
s += " ESCAPE " + parameters[2];
}
return s;
}
else if ("regexp".Equals(name) || "not_regexp".Equals("name"))
{
name = name.Replace("not_regexp", "not regexp");
return string.Format("({0} {1} {2})", parameters[0], name, parameters[1]);
}
else if ("cast".Equals(name))
{
return string.Format("cast({0} AS {1})", parameters[0], parameters[1].Replace("\"", ""));
}
else if ((name.Length < 3 || infixOperators.Contains(name)) && parameters.Count == 2)
{
return string.Format("({0} {1} {2})", parameters[0], name, parameters[1]);
}
else if (parameters.Count == 1)
{
return string.Format("{0}{1}", name, parameters[0]);
}
else if (parameters.Count == 0)
{
return name;
}
else
{
return name + ParamListToString(parameters);
}
}