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)); } }