예제 #1
0
 protected void Join(SqlQueryStatement statement, SqlSelect select)
 {
     if (select.HasLimit)
     {
         JoinWhenQueryHasLimitation(statement, select);
     }
     else
     {
         JoinWhenQueryHasNoLimitation(statement, select);
     }
 }
예제 #2
0
        public static SetStatement Create(SqlQueryStatement statement)
        {
            SetStatement result;

            if (statement is SqlUpdate)
            {
                result = new Update();
            }
            else if (statement is SqlInsert)
            {
                result = new Insert();
            }
            else
            {
                throw new InvalidOperationException("Statement must be SqlUpdate or SqlInsert");
            }
            result.statement = statement;
            return(result);
        }
예제 #3
0
        private static SqlJoinHint TryFindJoinHint(SqlCompilerContext context, SqlJoinExpression node)
        {
            SqlQueryStatement statement = null;

            for (int i = 0, count = context.GetTraversalPath().Length; i < count; i++)
            {
                if (context.GetTraversalPath()[i] is SqlQueryStatement)
                {
                    statement = context.GetTraversalPath()[i] as SqlQueryStatement;
                }
            }
            if (statement == null || statement.Hints.Count == 0)
            {
                return(null);
            }
            var candidate = statement.Hints
                            .OfType <SqlJoinHint>()
                            .FirstOrDefault(hint => hint.Table == node.Right);

            return(candidate);
        }