예제 #1
0
 /// <summary>
 /// Convierte un <see cref="IFromListItemTarget"/> a string, devuelve true si el elemento requiered de un alias
 /// </summary>
 static StatementToStrResult FromListTargetToStr(IFromListItemTarget item, ParamMode paramMode, SqlParamDic paramDic)
 {
     if (item is ISqlQuery query)
     {
         return(QueryToStr(query, paramMode, paramDic));
     }
     else if (item is SqlTable table)
     {
         return(new TableToStrResult(TableToString(table)));
     }
     else if (item is ISqlTableRefRaw raw)
     {
         return(new TableToStrResult(raw.Raw));
     }
     throw new ArgumentException("El from item target debe de ser una tabla o un select");
 }
예제 #2
0
        public void SelectSoloFrom()
        {
            IFromListItemTarget r = Sql
                                    .From(new SqlTable <Cliente>())
            ;


            var actual   = r.ToSql().Sql;
            var expected = @"
SELECT 
    ""x"".*
FROM ""Cliente"" ""x""
";

            AssertSql.AreEqual(expected, actual);
        }
예제 #3
0
        public void SelectSoloFromWhere()
        {
            IFromListItemTarget r = Sql
                                    .From(new SqlTable <Cliente>())
                                    .Where(x => x.IdRegistro == 10)
            ;


            var actual   = r.ToSql().Sql;
            var expected = @"
SELECT 
    ""x"".*
FROM ""Cliente"" ""x""
WHERE (""x"".""IdRegistro"" = 10)
";

            AssertSql.AreEqual(expected, actual);
        }
예제 #4
0
 public SqlFrom(IFromListItemTarget <T> target)
 {
     Target = target;
 }
예제 #5
0
 public ISqlSelect <Cliente> QueryClientes(IFromListItemTarget <Cliente> clientes)
 {
     return(Sql.From(clientes).Select(x => x));
 }
예제 #6
0
        internal static JoinItems <TL, TR> InternalJoin <TL, TR>(this IBaseLeftJoinAble <TL> left, IFromListItemTarget <TR> right)
        {
            var dummyP0 = Expression.Parameter(typeof(TL));
            var r       = Expression.Lambda <Func <TL, IFromListItemTarget <TR> > >(Expression.Constant(right), dummyP0);

            return(new JoinItems <TL, TR>(left.Type, false, left.Left, r));
        }
예제 #7
0
 /// <summary>
 /// Aplica un JOIN que no es LATERAL
 /// </summary>
 public static INextJoinOnAble <TL, TR> Join <TL, TR>(this INextJoinLateralAble <TL> left, IFromListItemTarget <TR> right) =>
 left.InternalJoin(right);
예제 #8
0
 /// <summary>
 /// Inicia un query con un FROM dado el destino del from
 /// </summary>
 /// <param name="from">Destino del FROM, puede ser un <see cref="SqlTable"/> o un subquery  </param>
 public static ISqlFirstJoinAble <T1, T1, object> From <T1>(IFromListItemTarget <T1> from) =>
 new SqlSelectBuilder <T1, T1, object>(SelectClause.InitFromItem <T1>(new SqlFrom <T1>(from)));