Exemple #1
0
        public override JoinExpression GetJoinExpression()
        {
            var rightIdentifier = AliasIdentifierExpression;
            var leftIdentifier  = Left.AliasIdentifierExpression;

            var onCondition = default(QueryExpression);

            foreach (var columnPair in _joinColumnPairs)
            {
                var newCondition = QueryExpression.Compare(
                    QueryExpression.Column(columnPair.LeftColumnName, leftIdentifier),
                    ComparisonOperator.AreEqual,
                    QueryExpression.Column(columnPair.RightColumnName, rightIdentifier)
                    );
                onCondition = QueryExpression.CombineConditions(onCondition, ConditionType.AndAlso, newCondition);
            }

            return(QueryExpression.Join(
                       QueryExpression.Alias(
                           Right.AliasIdentifierExpression, rightIdentifier.Identifier
                           ),
                       onCondition,
                       JoinDirection.Left
                       ));
        }
        public ExpressionResult Convert(MethodInfo methodInfo, MethodCallExpression node,
                                        ExpressionConverter expressionConverter)
        {
            var expression = expressionConverter.Convert(node.Arguments[0]);
            var alias      = expressionConverter.Convert(node.Arguments[1]).QueryExpression as ValueExpression;

            return(new ExpressionResult(
                       QueryExpression.Alias(expression.QueryExpression, (string)alias.Value),
                       expression.RequiredJoins
                       ));
        }
        private DeferableInsert <T> Insert <TView>(IEntityView <TView> transcriber, TView entity)
            where TView : class
        {
            var mapBackInsertId    = _serverGeneratedPrimaryKey != null;
            var generatePrimaryKey = _clientGeneratedPrimaryKey != null;
            var insertBuilder      = QueryBuilder.Insert(entity);

            if (generatePrimaryKey)
            {
                var newId = Guid.NewGuid();
                insertBuilder.Assignments.Set(_clientGeneratedPrimaryKey, newId);
                AttemptWriteToObject(entity, newId, _clientGeneratedPrimaryKey, transcriber);
            }

            if (!mapBackInsertId)
            {
                return(new DeferableInsert <T>(
                           insertBuilder, _dataProvider
                           ));
            }

            var primaryKeyIntersectedFields = transcriber.EntityToClassIntersection.IntersectedFields
                                              .FirstOrDefault(q => q.LeftField == _serverGeneratedPrimaryKey);

            if (primaryKeyIntersectedFields == null)
            {
                return(new DeferableInsert <T>(
                           insertBuilder, _dataProvider
                           ));
            }

            return(new DeferableInsert <T>(
                       insertBuilder, _dataProvider,
                       QueryExpression.Select(
                           QueryExpression.Alias(QueryExpression.LastInsertIdFunction(), _serverGeneratedPrimaryKey.ProjectionAlias),
                           from: QueryExpression.Table(_entityModel.Table.TableName)
                           ),
                       new MapLastIdResultProcessor <TView>(
                           entity, primaryKeyIntersectedFields
                           )
                       ));
        }
 public virtual async Task Select_AliasValues()
 {
     using (var queryResult = await DataProvider.ExecuteReaderAsync(
                QueryExpression.Select(
                    new[] {
         QueryExpression.Alias(QueryExpression.Value(1), "int"),
         QueryExpression.Alias(QueryExpression.Value("Hello World"), "str")
     }
                    )))
     {
         Assert.IsTrue(queryResult.HasRows);
         Assert.AreEqual("int", queryResult.GetName(0));
         Assert.AreEqual("str", queryResult.GetName(1));
         Assert.AreEqual(0, queryResult.GetOrdinal("int"));
         Assert.AreEqual(1, queryResult.GetOrdinal("str"));
         Assert.IsTrue(await queryResult.ReadAsync());
         Assert.AreEqual(1, queryResult.GetInt32(0));
         Assert.AreEqual("Hello World", queryResult.GetString(1));
     }
 }
        public virtual async Task Select_FromSubSelect()
        {
            //  some database engines require the subquery to be aliased
            var subQueryAlias = QueryExpression.Alias(
                QueryExpression.Select(
                    new[] { QueryExpression.Alias(QueryExpression.Value(1), "value") }
                    ),
                "subQuery"
                );

            using (var queryResult = await DataProvider.ExecuteReaderAsync(
                       QueryExpression.Select(
                           new[] { QueryExpression.All() },
                           from: subQueryAlias
                           )))
            {
                Assert.IsTrue(queryResult.HasRows);
                Assert.IsTrue(await queryResult.ReadAsync());
                Assert.AreEqual(1, queryResult.GetInt32(0));
            }
        }