Fixed parameter type search for In method

This commit is contained in:
grzegorz.russek
2014-09-30 13:07:00 +00:00
parent 53f27f636e
commit c1dadc777d
2 changed files with 24 additions and 24 deletions

View File

@@ -6347,7 +6347,7 @@ namespace DynamORM
else if (node is DynamicParser.Node.SetMember) return ParseSetMember((DynamicParser.Node.SetMember)node, ref columnSchema, pars, decorate, isMultiPart); else if (node is DynamicParser.Node.SetMember) return ParseSetMember((DynamicParser.Node.SetMember)node, ref columnSchema, pars, decorate, isMultiPart);
else if (node is DynamicParser.Node.Unary) return ParseUnary((DynamicParser.Node.Unary)node, pars); else if (node is DynamicParser.Node.Unary) return ParseUnary((DynamicParser.Node.Unary)node, pars);
else if (node is DynamicParser.Node.Binary) return ParseBinary((DynamicParser.Node.Binary)node, pars); else if (node is DynamicParser.Node.Binary) return ParseBinary((DynamicParser.Node.Binary)node, pars);
else if (node is DynamicParser.Node.Method) return ParseMethod((DynamicParser.Node.Method)node, pars); else if (node is DynamicParser.Node.Method) return ParseMethod((DynamicParser.Node.Method)node, ref columnSchema, pars);
else if (node is DynamicParser.Node.Invoke) return ParseInvoke((DynamicParser.Node.Invoke)node, ref columnSchema, pars); else if (node is DynamicParser.Node.Invoke) return ParseInvoke((DynamicParser.Node.Invoke)node, ref columnSchema, pars);
else if (node is DynamicParser.Node.Convert) return ParseConvert((DynamicParser.Node.Convert)node, pars); else if (node is DynamicParser.Node.Convert) return ParseConvert((DynamicParser.Node.Convert)node, pars);
} }
@@ -6500,10 +6500,10 @@ namespace DynamORM
return string.Format("({0} {1} {2})", left, op, right); return string.Format("({0} {1} {2})", left, op, right);
} }
protected virtual string ParseMethod(DynamicParser.Node.Method node, IDictionary<string, IParameter> pars = null) protected virtual string ParseMethod(DynamicParser.Node.Method node, ref DynamicSchemaColumn? columnSchema, IDictionary<string, IParameter> pars = null)
{ {
string method = node.Name.ToUpper(); string method = node.Name.ToUpper();
string parent = node.Host == null ? null : Parse(node.Host, pars: pars); string parent = node.Host == null ? null : Parse(node.Host, ref columnSchema, pars: pars);
string item = null; string item = null;
// Root-level methods... // Root-level methods...
@@ -6513,7 +6513,7 @@ namespace DynamORM
{ {
case "NOT": case "NOT":
if (node.Arguments == null || node.Arguments.Length != 1) throw new ArgumentNullException("NOT method expects one argument: " + node.Arguments.Sketch()); if (node.Arguments == null || node.Arguments.Length != 1) throw new ArgumentNullException("NOT method expects one argument: " + node.Arguments.Sketch());
item = Parse(node.Arguments[0], pars: pars); item = Parse(node.Arguments[0], ref columnSchema, pars: pars);
return string.Format("(NOT {0})", item); return string.Format("(NOT {0})", item);
} }
} }
@@ -6546,7 +6546,7 @@ namespace DynamORM
throw new ArgumentException("BETWEEN method expects single argument to be enumerable of exactly two elements: " + node.Arguments.Sketch()); throw new ArgumentException("BETWEEN method expects single argument to be enumerable of exactly two elements: " + node.Arguments.Sketch());
} }
return string.Format("{0} BETWEEN {1} AND {2}", parent, Parse(arguments[0], pars: pars), Parse(arguments[1], pars: pars)); return string.Format("{0} BETWEEN {1} AND {2}", parent, Parse(arguments[0], ref columnSchema, pars: pars), Parse(arguments[1], ref columnSchema, pars: pars));
} }
case "IN": case "IN":
@@ -6576,13 +6576,13 @@ namespace DynamORM
else else
firstParam = false; firstParam = false;
sbin.Append(Parse(val, pars: pars)); sbin.Append(Parse(val, ref columnSchema, pars: pars));
} }
else else
sbin.Append(Parse(arg, pars: pars)); sbin.Append(Parse(arg, ref columnSchema, pars: pars));
} }
else else
sbin.Append(Parse(arg, pars: pars)); sbin.Append(Parse(arg, ref columnSchema, pars: pars));
firstParam = false; firstParam = false;
} }
@@ -6594,13 +6594,13 @@ namespace DynamORM
if (node.Arguments == null || node.Arguments.Length != 1) if (node.Arguments == null || node.Arguments.Length != 1)
throw new ArgumentException("LIKE method expects one argument: " + node.Arguments.Sketch()); throw new ArgumentException("LIKE method expects one argument: " + node.Arguments.Sketch());
return string.Format("{0} LIKE {1}", parent, Parse(node.Arguments[0], pars: pars)); return string.Format("{0} LIKE {1}", parent, Parse(node.Arguments[0], ref columnSchema, pars: pars));
case "NOTLIKE": case "NOTLIKE":
if (node.Arguments == null || node.Arguments.Length != 1) if (node.Arguments == null || node.Arguments.Length != 1)
throw new ArgumentException("NOT LIKE method expects one argument: " + node.Arguments.Sketch()); throw new ArgumentException("NOT LIKE method expects one argument: " + node.Arguments.Sketch());
return string.Format("{0} NOT LIKE {1}", parent, Parse(node.Arguments[0], pars: pars)); return string.Format("{0} NOT LIKE {1}", parent, Parse(node.Arguments[0], ref columnSchema, pars: pars));
case "AS": case "AS":
if (node.Arguments == null || node.Arguments.Length != 1) if (node.Arguments == null || node.Arguments.Length != 1)
@@ -6617,7 +6617,7 @@ namespace DynamORM
if (node.Arguments == null || node.Arguments.Length == 0) if (node.Arguments == null || node.Arguments.Length == 0)
return "COUNT(*)"; return "COUNT(*)";
return string.Format("COUNT({0})", Parse(node.Arguments[0], pars: Parameters, nulls: true)); return string.Format("COUNT({0})", Parse(node.Arguments[0], ref columnSchema, pars: Parameters, nulls: true));
} }
} }
@@ -6637,7 +6637,7 @@ namespace DynamORM
else else
first = false; first = false;
sb.Append(Parse(argument, pars, nulls: true)); // We don't accept raw strings here!!! sb.Append(Parse(argument, ref columnSchema, pars, nulls: true)); // We don't accept raw strings here!!!
} }
} }

View File

@@ -347,7 +347,7 @@ namespace DynamORM.Builders.Implementation
else if (node is DynamicParser.Node.SetMember) return ParseSetMember((DynamicParser.Node.SetMember)node, ref columnSchema, pars, decorate, isMultiPart); else if (node is DynamicParser.Node.SetMember) return ParseSetMember((DynamicParser.Node.SetMember)node, ref columnSchema, pars, decorate, isMultiPart);
else if (node is DynamicParser.Node.Unary) return ParseUnary((DynamicParser.Node.Unary)node, pars); else if (node is DynamicParser.Node.Unary) return ParseUnary((DynamicParser.Node.Unary)node, pars);
else if (node is DynamicParser.Node.Binary) return ParseBinary((DynamicParser.Node.Binary)node, pars); else if (node is DynamicParser.Node.Binary) return ParseBinary((DynamicParser.Node.Binary)node, pars);
else if (node is DynamicParser.Node.Method) return ParseMethod((DynamicParser.Node.Method)node, pars); else if (node is DynamicParser.Node.Method) return ParseMethod((DynamicParser.Node.Method)node, ref columnSchema, pars);
else if (node is DynamicParser.Node.Invoke) return ParseInvoke((DynamicParser.Node.Invoke)node, ref columnSchema, pars); else if (node is DynamicParser.Node.Invoke) return ParseInvoke((DynamicParser.Node.Invoke)node, ref columnSchema, pars);
else if (node is DynamicParser.Node.Convert) return ParseConvert((DynamicParser.Node.Convert)node, pars); else if (node is DynamicParser.Node.Convert) return ParseConvert((DynamicParser.Node.Convert)node, pars);
} }
@@ -500,10 +500,10 @@ namespace DynamORM.Builders.Implementation
return string.Format("({0} {1} {2})", left, op, right); return string.Format("({0} {1} {2})", left, op, right);
} }
protected virtual string ParseMethod(DynamicParser.Node.Method node, IDictionary<string, IParameter> pars = null) protected virtual string ParseMethod(DynamicParser.Node.Method node, ref DynamicSchemaColumn? columnSchema, IDictionary<string, IParameter> pars = null)
{ {
string method = node.Name.ToUpper(); string method = node.Name.ToUpper();
string parent = node.Host == null ? null : Parse(node.Host, pars: pars); string parent = node.Host == null ? null : Parse(node.Host, ref columnSchema, pars: pars);
string item = null; string item = null;
// Root-level methods... // Root-level methods...
@@ -513,7 +513,7 @@ namespace DynamORM.Builders.Implementation
{ {
case "NOT": case "NOT":
if (node.Arguments == null || node.Arguments.Length != 1) throw new ArgumentNullException("NOT method expects one argument: " + node.Arguments.Sketch()); if (node.Arguments == null || node.Arguments.Length != 1) throw new ArgumentNullException("NOT method expects one argument: " + node.Arguments.Sketch());
item = Parse(node.Arguments[0], pars: pars); item = Parse(node.Arguments[0], ref columnSchema, pars: pars);
return string.Format("(NOT {0})", item); return string.Format("(NOT {0})", item);
} }
} }
@@ -546,7 +546,7 @@ namespace DynamORM.Builders.Implementation
throw new ArgumentException("BETWEEN method expects single argument to be enumerable of exactly two elements: " + node.Arguments.Sketch()); throw new ArgumentException("BETWEEN method expects single argument to be enumerable of exactly two elements: " + node.Arguments.Sketch());
} }
return string.Format("{0} BETWEEN {1} AND {2}", parent, Parse(arguments[0], pars: pars), Parse(arguments[1], pars: pars)); return string.Format("{0} BETWEEN {1} AND {2}", parent, Parse(arguments[0], ref columnSchema, pars: pars), Parse(arguments[1], ref columnSchema, pars: pars));
} }
case "IN": case "IN":
@@ -576,13 +576,13 @@ namespace DynamORM.Builders.Implementation
else else
firstParam = false; firstParam = false;
sbin.Append(Parse(val, pars: pars)); sbin.Append(Parse(val, ref columnSchema, pars: pars));
} }
else else
sbin.Append(Parse(arg, pars: pars)); sbin.Append(Parse(arg, ref columnSchema, pars: pars));
} }
else else
sbin.Append(Parse(arg, pars: pars)); sbin.Append(Parse(arg, ref columnSchema, pars: pars));
firstParam = false; firstParam = false;
} }
@@ -594,13 +594,13 @@ namespace DynamORM.Builders.Implementation
if (node.Arguments == null || node.Arguments.Length != 1) if (node.Arguments == null || node.Arguments.Length != 1)
throw new ArgumentException("LIKE method expects one argument: " + node.Arguments.Sketch()); throw new ArgumentException("LIKE method expects one argument: " + node.Arguments.Sketch());
return string.Format("{0} LIKE {1}", parent, Parse(node.Arguments[0], pars: pars)); return string.Format("{0} LIKE {1}", parent, Parse(node.Arguments[0], ref columnSchema, pars: pars));
case "NOTLIKE": case "NOTLIKE":
if (node.Arguments == null || node.Arguments.Length != 1) if (node.Arguments == null || node.Arguments.Length != 1)
throw new ArgumentException("NOT LIKE method expects one argument: " + node.Arguments.Sketch()); throw new ArgumentException("NOT LIKE method expects one argument: " + node.Arguments.Sketch());
return string.Format("{0} NOT LIKE {1}", parent, Parse(node.Arguments[0], pars: pars)); return string.Format("{0} NOT LIKE {1}", parent, Parse(node.Arguments[0], ref columnSchema, pars: pars));
case "AS": case "AS":
if (node.Arguments == null || node.Arguments.Length != 1) if (node.Arguments == null || node.Arguments.Length != 1)
@@ -617,7 +617,7 @@ namespace DynamORM.Builders.Implementation
if (node.Arguments == null || node.Arguments.Length == 0) if (node.Arguments == null || node.Arguments.Length == 0)
return "COUNT(*)"; return "COUNT(*)";
return string.Format("COUNT({0})", Parse(node.Arguments[0], pars: Parameters, nulls: true)); return string.Format("COUNT({0})", Parse(node.Arguments[0], ref columnSchema, pars: Parameters, nulls: true));
} }
} }
@@ -637,7 +637,7 @@ namespace DynamORM.Builders.Implementation
else else
first = false; first = false;
sb.Append(Parse(argument, pars, nulls: true)); // We don't accept raw strings here!!! sb.Append(Parse(argument, ref columnSchema, pars, nulls: true)); // We don't accept raw strings here!!!
} }
} }