public void GetTableForFromExpression_SqlMemberExpression_ReturnsSqlTableWithJoinedTable() { // from r in Restaurant => sqlTable // from c in r.Cooks => MemberExpression (QSRExpression (r), "Cooks") => Join: sqlTable.Cooks var memberInfo = typeof(Restaurant).GetProperty("Cooks"); var memberExpression = Expression.MakeMemberAccess(Expression.Constant(new Restaurant()), memberInfo); var result = SqlPreparationFromExpressionVisitor.AnalyzeFromExpression( memberExpression, _stageMock, _generator, _methodCallTransformerProvider, _context, _tableGenerator, _someOrderingExtractionPolicy); Assert.That(result.SqlTable.TableInfo, Is.TypeOf(typeof(SqlJoinedTable))); Assert.That(((SqlJoinedTable)result.SqlTable.TableInfo).JoinSemantics, Is.EqualTo(JoinSemantics.Inner)); var joinInfo = ((SqlJoinedTable)result.SqlTable.TableInfo).JoinInfo; Assert.That(joinInfo, Is.TypeOf(typeof(UnresolvedCollectionJoinInfo))); Assert.That(((UnresolvedCollectionJoinInfo)joinInfo).MemberInfo, Is.EqualTo(memberInfo)); Assert.That(joinInfo.ItemType, Is.SameAs(typeof(Cook))); }
public void VisitSqlEntityConstantExpression() { var expression = new SqlEntityConstantExpression(typeof(Cook), "test", new SqlLiteralExpression(12)); SqlPreparationFromExpressionVisitor.AnalyzeFromExpression( expression, _stageMock, _generator, _methodCallTransformerProvider, _context, _tableGenerator, _someOrderingExtractionPolicy); }
public void VisitSqlTableReferenceExpression_Grouping() { var sqlTable = new SqlTable(new ResolvedSimpleTableInfo(typeof(IGrouping <string, int>), "test", "t0"), JoinSemantics.Inner); var expression = new SqlTableReferenceExpression(sqlTable); var result = SqlPreparationFromExpressionVisitor.AnalyzeFromExpression( expression, _stageMock, _generator, _methodCallTransformerProvider, _context, _tableGenerator, _someOrderingExtractionPolicy); Assert.That(result.SqlTable, Is.Not.SameAs(sqlTable)); Assert.That(result.WhereCondition, Is.Null); Assert.That(result.ExtractedOrderings, Is.Empty); var expectedItemSelector = new SqlTableReferenceExpression(result.SqlTable); SqlExpressionTreeComparer.CheckAreEqualTrees(expectedItemSelector, result.ItemSelector); var tableInfo = result.SqlTable.TableInfo; Assert.That(tableInfo, Is.TypeOf(typeof(UnresolvedGroupReferenceTableInfo))); var castTableInfo = (UnresolvedGroupReferenceTableInfo)tableInfo; Assert.That(castTableInfo.ItemType, Is.SameAs(typeof(int))); Assert.That(castTableInfo.ReferencedGroupSource, Is.SameAs(sqlTable)); Assert.That(result.SqlTable.JoinSemantics, Is.EqualTo(JoinSemantics.Inner)); }
public void VisitMemberExpression() { var memberExpression = Expression.MakeMemberAccess(Expression.Constant(new Cook()), typeof(Cook).GetProperty("IllnessDays")); var result = SqlPreparationFromExpressionVisitor.AnalyzeFromExpression( memberExpression, _stageMock, _generator, _methodCallTransformerProvider, _context, _tableGenerator, _someOrderingExtractionPolicy); Assert.That(result.SqlTable, Is.TypeOf(typeof(SqlTable))); Assert.That(result.SqlTable.TableInfo, Is.TypeOf(typeof(SqlJoinedTable))); Assert.That(((SqlJoinedTable)result.SqlTable.TableInfo).JoinInfo, Is.TypeOf(typeof(UnresolvedCollectionJoinInfo))); Assert.That( ((UnresolvedCollectionJoinInfo)((SqlJoinedTable)result.SqlTable.TableInfo).JoinInfo).SourceExpression, Is.EqualTo(memberExpression.Expression)); Assert.That( ((UnresolvedCollectionJoinInfo)((SqlJoinedTable)result.SqlTable.TableInfo).JoinInfo).MemberInfo, Is.EqualTo(memberExpression.Member)); var expectedWherecondition = new JoinConditionExpression(((SqlJoinedTable)result.SqlTable.TableInfo)); SqlExpressionTreeComparer.CheckAreEqualTrees(expectedWherecondition, result.WhereCondition); }
public void VisitMemberExpression_InnerExpressionIsPrepared() { var fakeQuerySource = MockRepository.GenerateStub <IQuerySource>(); fakeQuerySource.Stub(stub => stub.ItemType).Return(typeof(Cook)); var replacement = Expression.Constant(null, typeof(Cook)); _context.AddExpressionMapping(new QuerySourceReferenceExpression(fakeQuerySource), replacement); var memberExpression = Expression.MakeMemberAccess( new QuerySourceReferenceExpression(fakeQuerySource), typeof(Cook).GetProperty("IllnessDays")); var result = SqlPreparationFromExpressionVisitor.AnalyzeFromExpression( memberExpression, _stageMock, _generator, _methodCallTransformerProvider, _context, _tableGenerator, _someOrderingExtractionPolicy); var sqlTable = result.SqlTable; var joinedTable = (SqlJoinedTable)sqlTable.TableInfo; Assert.That(((UnresolvedCollectionJoinInfo)joinedTable.JoinInfo).SourceExpression, Is.SameAs(replacement)); }
public void GetTableForFromExpression_UnsupportedExpression_Throws() { var customExpression = new CustomExpression(typeof(Cook[])); SqlPreparationFromExpressionVisitor.AnalyzeFromExpression( customExpression, _stageMock, _generator, _methodCallTransformerProvider, _context, _tableGenerator, _someOrderingExtractionPolicy); }
public void VisitSqlSubStatementExpression_WithOrderingsAndNoTopExpression() { var builder = new SqlStatementBuilder(SqlStatementModelObjectMother.CreateSqlStatementWithCook()) { SelectProjection = new NamedExpression("test", Expression.Constant("test")), Orderings = { new Ordering(Expression.Constant("order1"), OrderingDirection.Asc) } }; var statement = builder.GetSqlStatement(); var sqlSubStatementExpression = new SqlSubStatementExpression(statement); var stage = new DefaultSqlPreparationStage(_methodCallTransformerProvider, new ResultOperatorHandlerRegistry(), _generator); var result = SqlPreparationFromExpressionVisitor.AnalyzeFromExpression( sqlSubStatementExpression, stage, _generator, _methodCallTransformerProvider, _context, info => new SqlTable(info, JoinSemantics.Inner)); var sqlTable = (SqlTable)result.SqlTable; Assert.That(sqlTable.TableInfo, Is.TypeOf(typeof(ResolvedSubStatementTableInfo))); Assert.That(((ResolvedSubStatementTableInfo)sqlTable.TableInfo).SqlStatement.Orderings.Count, Is.EqualTo(0)); }
public void VisitSqlEntityRefMemberExpression() { var memberInfo = typeof(Restaurant).GetProperty("Cooks"); var entityExpression = SqlStatementModelObjectMother.CreateSqlEntityDefinitionExpression(typeof(Restaurant)); var expression = new SqlEntityRefMemberExpression(entityExpression, memberInfo); SqlPreparationFromExpressionVisitor.AnalyzeFromExpression( expression, _stageMock, _generator, _methodCallTransformerProvider, _context, _tableGenerator, _someOrderingExtractionPolicy); }
public void VisitEntityRefMemberExpression_ThrowsNotSupportException() { var memberInfo = typeof(Restaurant).GetProperty("Cooks"); var entityExpression = SqlStatementModelObjectMother.CreateSqlEntityDefinitionExpression(typeof(Restaurant)); var expression = new SqlEntityRefMemberExpression(entityExpression, memberInfo); SqlPreparationFromExpressionVisitor.AnalyzeFromExpression( expression, _stageMock, _generator, _methodCallTransformerProvider, _context, null); }
public void GetTableForFromExpression_ConstantExpression_ReturnsUnresolvedTable() { var expression = Expression.Constant(new Cook[0]); var result = SqlPreparationFromExpressionVisitor.AnalyzeFromExpression( expression, _stageMock, _generator, _methodCallTransformerProvider, _context, info => new SqlTable(info, JoinSemantics.Inner)); Assert.That(result.SqlTable, Is.TypeOf(typeof(SqlTable))); var tableInfo = ((SqlTable)result.SqlTable).TableInfo; Assert.That(tableInfo, Is.TypeOf(typeof(UnresolvedTableInfo))); Assert.That(tableInfo.ItemType, Is.SameAs(typeof(Cook))); }
public void VisitSqlSubStatementExpression() { var sqlStatement = new SqlStatementBuilder(SqlStatementModelObjectMother.CreateSqlStatementWithCook()) { SelectProjection = new NamedExpression("test", Expression.Constant("test")) }.GetSqlStatement(); var sqlSubStatementExpression = new SqlSubStatementExpression(sqlStatement); var stage = new DefaultSqlPreparationStage(_methodCallTransformerProvider, new ResultOperatorHandlerRegistry(), _generator); var result = SqlPreparationFromExpressionVisitor.AnalyzeFromExpression( sqlSubStatementExpression, stage, _generator, _methodCallTransformerProvider, _context, info => new SqlTable(info, JoinSemantics.Inner)); Assert.That(((SqlTable)result.SqlTable).TableInfo, Is.InstanceOf(typeof(ResolvedSubStatementTableInfo))); }
public void GetTableForFromExpression_ConstantExpression_ReturnsUnresolvedTable() { var expression = Expression.Constant(new Cook[0]); var result = SqlPreparationFromExpressionVisitor.AnalyzeFromExpression( expression, _stageMock, _generator, _methodCallTransformerProvider, _context, _tableGenerator, _someOrderingExtractionPolicy); Assert.That(result.SqlTable, Is.TypeOf(typeof(SqlTable))); var tableInfo = result.SqlTable.TableInfo; Assert.That(tableInfo, Is.TypeOf(typeof(UnresolvedTableInfo))); Assert.That(tableInfo.ItemType, Is.SameAs(typeof(Cook))); }
public void VisitSqlSubStatementExpression_WithNonBooleanSqlGroupingSelectExpression() { var sqlStatement = new SqlStatementBuilder(SqlStatementModelObjectMother.CreateSqlStatementWithCook()) { SelectProjection = new NamedExpression( "test", new SqlGroupingSelectExpression(Expression.Constant("key"), Expression.Constant("element"))) }.GetSqlStatement(); var sqlSubStatementExpression = new SqlSubStatementExpression(sqlStatement); var stage = new DefaultSqlPreparationStage(_methodCallTransformerProvider, new ResultOperatorHandlerRegistry(), _generator); var result = SqlPreparationFromExpressionVisitor.AnalyzeFromExpression( sqlSubStatementExpression, stage, _generator, _methodCallTransformerProvider, _context, _tableGenerator, _someOrderingExtractionPolicy); Assert.That(result.SqlTable.TableInfo, Is.InstanceOf(typeof(ResolvedSubStatementTableInfo))); }
public void VisitSqlSubStatementExpression_WithDoNotExtractOrderingsPolicy() { var sqlStatement = new SqlStatementBuilder(SqlStatementModelObjectMother.CreateSqlStatementWithCook()) { SelectProjection = new NamedExpression("test", Expression.Constant("test")), Orderings = { SqlStatementModelObjectMother.CreateOrdering() } }.GetSqlStatement(); var sqlSubStatementExpression = new SqlSubStatementExpression(sqlStatement); var stage = new DefaultSqlPreparationStage(_methodCallTransformerProvider, new ResultOperatorHandlerRegistry(), _generator); var result = SqlPreparationFromExpressionVisitor.AnalyzeFromExpression( sqlSubStatementExpression, stage, _generator, _methodCallTransformerProvider, _context, _tableGenerator, OrderingExtractionPolicy.DoNotExtractOrderings); Assert.That(result.SqlTable.TableInfo, Is.InstanceOf(typeof(ResolvedSubStatementTableInfo))); Assert.That(((ResolvedSubStatementTableInfo)result.SqlTable.TableInfo).SqlStatement.Orderings.Count, Is.EqualTo(0)); Assert.That(result.ExtractedOrderings, Is.Empty); }