private static Condition GetClause(BinaryExpression e, CompareOpration co) { ColumnFunction function; MemberExpression left; var key = GetMemberName(e.Left, out function, out left); string pn = left.Expression.ToString(); if (e.Right.NodeType == ExpressionType.MemberAccess) { var right = (MemberExpression)e.Right; if (right.Expression != null && right.Expression.ToString() == pn) { string key2 = GetColumnName(right.Member.Name); return(new KeyKeyClause(key, key2, co)); } } object value = GetRightValue(e.Right); if (value == null) { if (co == CompareOpration.Equal) { return(new KeyValueClause(key, null, CompareOpration.Is, ColumnFunction.None)); } if (co == CompareOpration.NotEqual) { return(new KeyValueClause(key, null, CompareOpration.IsNot, ColumnFunction.None)); } throw new LinqException("NULL value only supported Equal and NotEqual!"); } return(new KeyValueClause(key, value, co, function)); }
private void parseLikeCall(MethodCallExpression e, CompareOpration co, IDbTranslator dbTranslator, StringBuilder sBuilder, DataParameterCollection dpc) { ColumnFunction function; MemberExpression member; if (e.Arguments.Count == 1) { IPropertyMapper propertyMapper = this.getPropertyMapper(e.Object, out function, out member); object value = this.getValue(e.Arguments[0]); if (value != null && value is string) { this.buildSqlAndDataParameter(propertyMapper, function, co, value, dbTranslator, sBuilder, dpc); } else { throw new MapleException("'Like' clause only supported one Parameter and the Parameter should be string and not allow NULL.!"); } } //else if (e.Arguments.Count == 2) //{ // throw new MapleException("'Like' clause only supported one Parameter and the Parameter should be string and not allow NULL.!"); //} else { throw new MapleException("'Like' clause only supported one Parameter and the Parameter should be string and not allow NULL.!"); } }
private void parseNull(MethodCallExpression e, bool isNull, IDbTranslator dbTranslator, StringBuilder sBuilder, DataParameterCollection dpc) { IPropertyMapper propertyMapper = this.getPropertyMapper(e.Arguments[0], out _, out _); CompareOpration co = isNull ? CompareOpration.Equal : CompareOpration.NotEqual; this.buildSqlAndDataParameter(propertyMapper, ColumnFunction.None, co, null, dbTranslator, sBuilder, dpc); }
public JoinClause(string table1, string key1, string table2, string key2, CompareOpration comp, JoinMode mode) { this.Table1 = table1; this.Table2 = table2; this.Key1 = key1; this.Key2 = key2; this.Comp = comp; this.Mode = mode; }
public JoinClause(Type type1, string key1, Type type2, string key2, CompareOpration comp, JoinMode mode) { this.Type1 = type1; this.Type2 = type2; this.Table1 = ModelContext.GetInstance(type1).Info.From.MainTableName; this.Table2 = ModelContext.GetInstance(type2).Info.From.MainTableName; this.Key1 = key1; this.Key2 = key2; this.Comp = comp; this.Mode = mode; }
public KeyValueClause(KeyValue kv, CompareOpration co) { this.KV = kv; if (kv.Value == null) { if (co == CompareOpration.Equal) co = CompareOpration.Is; else if (co == CompareOpration.NotEqual) co = CompareOpration.IsNot; } Comp = StringHelper.EnumToString(co); }
public KeyValueClause(KeyValue kv, CompareOpration co) { this.KV = kv; if (kv.Value == null) { if (co == CompareOpration.Equal) { co = CompareOpration.Is; } else if (co == CompareOpration.NotEqual) { co = CompareOpration.IsNot; } } Comp = StringHelper.EnumToString(co); }
private void parseClause(BinaryExpression e, CompareOpration co, IDbTranslator dbTranslator, StringBuilder sBuilder, DataParameterCollection dpc) { ColumnFunction function; MemberExpression left; //获得左侧的属性字段信息 IPropertyMapper propertyMapper = this.getPropertyMapper(e.Left, out function, out left); //if (e.Right.NodeType == ExpressionType.MemberAccess) //{ // var right = (MemberExpression)e.Right; // if (right.Expression != null && right.Expression.ToString() == left.Expression.ToString()) // throw new MapleException("该操作不支持!Right.NodeType == ExpressionType.MemberAccess"); //} //获取右侧的值 object value = this.getValue(e.Right); //生成SQL片段和参数 this.buildSqlAndDataParameter(propertyMapper, function, co, value, dbTranslator, sBuilder, dpc); }
/// <summary> /// 生成SQL片段和参数 /// </summary> /// <param name="propertyMapper"></param> /// <param name="function"></param> /// <param name="co"></param> /// <param name="value"></param> /// <param name="dbTranslator"></param> /// <param name="sBuilder"></param> /// <param name="dpc"></param> private void buildSqlAndDataParameter(IPropertyMapper propertyMapper, ColumnFunction function, CompareOpration co, object value, IDbTranslator dbTranslator, StringBuilder sBuilder, DataParameterCollection dpc) { //获取参数名称 string strKey = dbTranslator.Quote(string.Format("{0}_{1}", propertyMapper.ColumnName, dpc.Count)); //拼接SQL 1 switch (function) { //处理函数 case ColumnFunction.ToLower: sBuilder.Append(string.Format("LOWER({0})", propertyMapper.ColumnName)); break; case ColumnFunction.ToUpper: sBuilder.Append(string.Format("UPPER({0})", propertyMapper.ColumnName)); break; default: sBuilder.Append(propertyMapper.ColumnName); break; } //拼接SQL 2 if (value == null) { if (co == CompareOpration.Equal) { sBuilder.Append(" IS NULL "); } else if (co == CompareOpration.NotEqual) { sBuilder.Append(" IS NOT NULL "); } else { throw new MapleException("该操作不支持!NULL value only supported Equal and NotEqual!"); } } else { switch (co) { case CompareOpration.Equal: sBuilder.Append(" = "); sBuilder.Append(dbTranslator.QuoteParameter(strKey)); break; case CompareOpration.GreatOrEqual: sBuilder.Append(" >= "); sBuilder.Append(dbTranslator.QuoteParameter(strKey)); break; case CompareOpration.GreatThan: sBuilder.Append(" > "); sBuilder.Append(dbTranslator.QuoteParameter(strKey)); break; case CompareOpration.LessOrEqual: sBuilder.Append(" <= "); sBuilder.Append(dbTranslator.QuoteParameter(strKey)); break; case CompareOpration.LessThan: sBuilder.Append(" < "); sBuilder.Append(dbTranslator.QuoteParameter(strKey)); break; case CompareOpration.Like: sBuilder.Append(" LIKE "); sBuilder.Append(dbTranslator.QuoteParameter(strKey)); value = string.Format("%{0}%", value); break; case CompareOpration.StartsWith: sBuilder.Append(" LIKE "); sBuilder.Append(dbTranslator.QuoteParameter(strKey)); value = string.Format("{0}%", value); break; case CompareOpration.EndsWith: sBuilder.Append(" LIKE "); sBuilder.Append(dbTranslator.QuoteParameter(strKey)); value = string.Format("%{0}", value); break; case CompareOpration.NotEqual: sBuilder.Append(" <> "); sBuilder.Append(dbTranslator.QuoteParameter(strKey)); break; default: throw new MapleException("该操作不支持!CompareOpration = " + co); } //添加查询参数 dpc.Add(new DataParameter(strKey, value, propertyMapper.DbType, propertyMapper.Size, ParameterDirection.Input)); } }
public KeyValueClause(string key, object value, CompareOpration co, ColumnFunction function) : this(new KeyValue(key, value), co) { this.function = function; }
public KeyKeyClause(CK k1, CK k2, CompareOpration co) : this(k1.ColumnName, Equals(k2, null) ? null : k2.ColumnName, co) { }
public JoinOnAttribute(int index, string table1, string key1, string table2, string key2, CompareOpration comp, JoinMode mode) { this.Index = index; Joinner = new JoinClause(table1, key1, table2, key2, comp, mode); }
public JoinOnAttribute(int index, Type modelType1, string key1, Type modelType2, string key2, CompareOpration comp) : this(index, modelType1, key1, modelType2, key2, comp, JoinMode.Inner) { }
public KeyKeyClause(string key1, string key2, CompareOpration co) : base(new KeyValue(key1, key2), co) { }
private void parseInCall(Expression eProperty, Expression eList, bool notIn, IDbTranslator dbTranslator, StringBuilder sBuilder, DataParameterCollection dpc) { ColumnFunction function; MemberExpression member; IPropertyMapper propertyMapper = this.getPropertyMapper(eProperty, out function, out member); var list = this.getValue(eList); if (list is IEnumerable) { sBuilder.Append(propertyMapper.ColumnName); if (notIn) { sBuilder.Append(" NOT"); } sBuilder.Append(" IN ("); IEnumerable items = (IEnumerable)list; string prefix = ""; bool? isVarChar = null; bool? isEumn = null; foreach (var obj in (IEnumerable)items) { if (prefix.Length == 0) { prefix = ","; } else { sBuilder.Append(prefix); } if (!isVarChar.HasValue || !isEumn.HasValue) { Type type = obj.GetType(); isEumn = type.IsEnum; isVarChar = !isEumn.Value && !type.IsNumeric(); } if (isVarChar.Value) { sBuilder.Append("'"); } if (isEumn.Value) { sBuilder.Append((int)obj); } else { sBuilder.Append(obj); } if (isVarChar.Value) { sBuilder.Append("'"); } } sBuilder.Append(")"); } else { CompareOpration co = notIn ? CompareOpration.NotEqual : CompareOpration.Equal; this.buildSqlAndDataParameter(propertyMapper, ColumnFunction.None, co, list, dbTranslator, sBuilder, dpc); } }