예제 #1
0
 public SqlQueryView(IQueryView query, IQueueView queryQueue, string tableName)
 {
     Query     = query;
     Queue     = queryQueue;
     TableName = tableName;
     Visit     = new ExpressionVisit <TEntity>(query, queryQueue, new ExpressionNew <TEntity>(query, queryQueue), new ExpressionBool <TEntity>(query, queryQueue));
 }
        private static SqlCaluse SelectCount(MethodCallExpression exp, SqlCaluse sqlCaluse)
        {
            var a = exp.Arguments[0];

            ExpressionVisit.SelectMethod(a, sqlCaluse);
            AddColumn(sqlCaluse, "\n COUNT(CASE WHEN{0} THEN 1 ELSE null END) ");
            return(sqlCaluse);
        }
 private static SqlCaluse InMethod(MethodCallExpression exp, SqlCaluse sqlCaluse)
 {
     ExpressionVisit.Join(exp.Arguments[0], sqlCaluse);
     sqlCaluse += " In (";
     ExpressionVisit.In(exp.Arguments[1], sqlCaluse);
     sqlCaluse += ")";
     return(sqlCaluse);
 }
 private static SqlCaluse NotLikeMethod(MethodCallExpression exp, SqlCaluse sqlCaluse)
 {
     ExpressionVisit.Where(exp.Arguments[0], sqlCaluse);
     sqlCaluse         += " Not Like ";
     sqlCaluse.LikeMode = 1;
     ExpressionVisit.Where(exp.Arguments[1], sqlCaluse);
     return(sqlCaluse);
 }
예제 #5
0
 protected override SqlCaluse GroupBy(NewExpression exp, SqlCaluse sqlCaluse)
 {
     for (int i = 0; i < exp.Arguments.Count; i++)
     {
         var argExp = exp.Arguments[i];
         ExpressionVisit.GroupBy(argExp, sqlCaluse);
     }
     return(sqlCaluse);
 }
        protected override SqlCaluse Join(BinaryExpression exp, SqlCaluse sqlCaluse)
        {
            sqlCaluse += " ON ";
            ExpressionVisit.Join(exp.Left, sqlCaluse);
            var insertIndex = sqlCaluse.Length;

            ExpressionVisit.Join(exp.Right, sqlCaluse);
            OperatorParser(exp.NodeType, insertIndex, sqlCaluse.Sql, false);

            return(sqlCaluse);
        }
예제 #7
0
 protected override SqlCaluse Insert(NewExpression exp, SqlCaluse sqlCaluse)
 {
     for (int i = 0; i < exp.Members.Count; i++)
     {
         var member = exp.Members[i];
         var name   = member.GetAttribute <ColumnNameAttribute>()?.Name ?? member.Name;
         sqlCaluse.SelectFields.Add(name);
         ExpressionVisit.Insert(exp.Arguments[i], sqlCaluse);
     }
     return(sqlCaluse);
 }
        protected override SqlCaluse Where(BinaryExpression exp, SqlCaluse sqlCaluse)
        {
            ExpressionVisit.Where(exp.Left, sqlCaluse);
            var insertIndex = sqlCaluse.Length;

            ExpressionVisit.Where(exp.Right, sqlCaluse);
            var endIndex = sqlCaluse.Length;
            var b        = endIndex - insertIndex == 5 && sqlCaluse.EndWith("null");

            OperatorParser(exp.NodeType, insertIndex, sqlCaluse.Sql, b);
            return(sqlCaluse);
        }
        protected override SqlCaluse SelectMethod(BinaryExpression exp, SqlCaluse sqlCaluse)
        {
            ExpressionVisit.SelectMethod(exp.Left, sqlCaluse);
            var insertIndex = sqlCaluse.SelectMethod.Length;

            ExpressionVisit.SelectMethod(exp.Right, sqlCaluse);
            var endIndex = sqlCaluse.SelectMethod.Length;
            var b        = endIndex - insertIndex == 5 && sqlCaluse.SelectMethod.ToString().EndsWith("null");

            OperatorParser(exp.NodeType, insertIndex, sqlCaluse.SelectMethod, b, false);
            return(sqlCaluse);
        }
        //protected override SqlCaluse Where(NewArrayExpression exp, SqlCaluse sqlCaluse) {
        //    sqlCaluse += "(";
        //    foreach (var item in exp.Expressions) {
        //        ExpressionVisit.In(item, sqlCaluse);
        //        sqlCaluse += ",";
        //    }
        //    sqlCaluse -= ",";
        //    sqlCaluse += ")";
        //    return sqlCaluse;
        //}

        protected override SqlCaluse In(NewArrayExpression exp, SqlCaluse sqlCaluse)
        {
            //sqlCaluse += "(";
            foreach (var item in exp.Expressions)
            {
                ExpressionVisit.In(item, sqlCaluse);
                sqlCaluse += ",";
            }
            sqlCaluse -= ",";
            //sqlCaluse += ")";
            return(sqlCaluse);
        }
 private static SqlCaluse SelectGroupConcat(MethodCallExpression exp, SqlCaluse sqlCaluse)
 {
     if (sqlCaluse.DbType == 2)
     {
         var a = exp.Arguments[0];
         ExpressionVisit.SelectMethod(a, sqlCaluse);
         AddColumn(sqlCaluse, "\n GROUP_CONCAT({0}) ");
     }
     else
     {
         throw new Exception("GroupConcat 只支持 MySql");
     }
     return(sqlCaluse);
 }
예제 #12
0
 protected override SqlCaluse Select(NewExpression exp, SqlCaluse sqlCaluse)
 {
     for (int i = 0; i < exp.Arguments.Count; i++)
     {
         var argExp = exp.Arguments[i];
         if (sqlCaluse.GetMemberName == null)
         {
             sqlCaluse.GetMemberName = () => {
                 return(exp.Members[i].Name);
             }
         }
         ;
         ExpressionVisit.Select(argExp, sqlCaluse);
     }
     return(sqlCaluse);
 }
예제 #13
0
 protected override SqlCaluse Where(UnaryExpression exp, SqlCaluse sqlCaluse)
 {
     ExpressionVisit.Where(exp.Operand, sqlCaluse);
     return(sqlCaluse);
 }
예제 #14
0
 protected override SqlCaluse PrimaryKey(UnaryExpression exp, SqlCaluse sqlCaluse)
 {
     ExpressionVisit.PrimaryKey(exp.Operand, sqlCaluse);
     return(sqlCaluse);
 }
예제 #15
0
 protected override SqlCaluse Insert(UnaryExpression exp, SqlCaluse sqlCaluse)
 {
     ExpressionVisit.Insert(exp.Operand, sqlCaluse);
     return(sqlCaluse);
 }
예제 #16
0
 /// <summary>
 /// 查询支持的SQL方法
 /// </summary>
 /// <param name="queueManger">队列管理模块</param>
 /// <param name="queue">包含数据库SQL操作的队列</param>
 public SqlBuilder(BaseQueueManger queueManger, Queue queue)
 {
     QueueManger = queueManger;
     Queue       = queue;
     Visit       = new ExpressionVisit(queueManger, Queue);
 }
예제 #17
0
 protected override SqlCaluse SelectMethod(LambdaExpression exp, SqlCaluse sqlCaluse)
 {
     ExpressionVisit.SelectMethod(exp.Body, sqlCaluse);
     return(sqlCaluse);
 }
예제 #18
0
 protected override SqlCaluse SelectMethod(UnaryExpression exp, SqlCaluse sqlCaluse)
 {
     ExpressionVisit.SelectMethod(exp.Operand, sqlCaluse);
     return(sqlCaluse);
 }
예제 #19
0
 /// <summary>
 /// 查询支持的SQL方法
 /// </summary>
 /// <param name="queueManger">队列管理模块</param>
 /// <param name="queueSql">包含数据库SQL操作的队列</param>
 public SqlOper(IQueueManger queueManger, IQueueSql queueSql)
 {
     QueueManger = queueManger;
     QueueSql    = queueSql;
     Visit       = new ExpressionVisit <TEntity>(queueManger, QueueSql);
 }
예제 #20
0
 protected override SqlCaluse GroupBy(UnaryExpression exp, SqlCaluse sqlCaluse)
 {
     ExpressionVisit.GroupBy(exp.Operand, sqlCaluse);
     return(sqlCaluse);
 }