示例#1
0
        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));
        }
示例#2
0
        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.!");
            }
        }
示例#3
0
        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);
        }
示例#4
0
 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;
 }
示例#5
0
 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;
 }
示例#6
0
 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;
 }
示例#7
0
 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;
 }
示例#8
0
		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);
		}
示例#9
0
 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);
 }
示例#10
0
        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);
        }
示例#11
0
        /// <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));
            }
        }
示例#12
0
 public KeyValueClause(string key, object value, CompareOpration co, ColumnFunction function)
     : this(new KeyValue(key, value), co)
 {
     this.function = function;
 }
示例#13
0
 public KeyKeyClause(CK k1, CK k2, CompareOpration co)
     : this(k1.ColumnName, Equals(k2, null) ? null : k2.ColumnName, co)
 {
 }
示例#14
0
 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);
 }
示例#15
0
 public JoinOnAttribute(int index, Type modelType1, string key1, Type modelType2, string key2, CompareOpration comp)
     : this(index, modelType1, key1, modelType2, key2, comp, JoinMode.Inner)
 {
 }
示例#16
0
		public KeyKeyClause(string key1, string key2, CompareOpration co)
            : base(new KeyValue(key1, key2), co)
		{
        }
示例#17
0
 public JoinOnAttribute(int index, Type modelType1, string key1, Type modelType2, string key2, CompareOpration comp)
     : this(index, modelType1, key1, modelType2, key2, comp, JoinMode.Inner)
 {
 }
示例#18
0
 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);
 }
示例#19
0
        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);
            }
        }
示例#20
0
 public KeyKeyClause(CK k1, CK k2, CompareOpration co)
     : this(k1.ColumnName, Equals(k2, null) ? null : k2.ColumnName, co)
 {
 }
示例#21
0
 public KeyKeyClause(string key1, string key2, CompareOpration co)
     : base(new KeyValue(key1, key2), co)
 {
 }
示例#22
0
        public KeyValueClause(string key, object value, CompareOpration co, ColumnFunction function)
			: this(new KeyValue(key, value), co)
		{
            this.function = function;
		}