public void GenerateSql_ForJoinedTable_Recursive() { var originalTable = new SqlTable(new ResolvedSimpleTableInfo(typeof(Kitchen), "KitchenTable", "t1"), JoinSemantics.Inner); var memberInfo1 = typeof(Kitchen).GetProperty("Cook"); var memberInfo2 = typeof(Cook).GetProperty("Substitution"); var joinedTable1 = originalTable.GetOrAddLeftJoin(CreateResolvedJoinInfo(typeof(Cook), "t1", "ID", "CookTable", "t2", "FK"), memberInfo1); var joinedTable2 = joinedTable1.GetOrAddLeftJoin(CreateResolvedJoinInfo(typeof(Cook), "t2", "ID2", "CookTable2", "t3", "FK2"), memberInfo2); _stageMock .Expect(mock => mock.GenerateTextForJoinCondition(_commandBuilder, ((ResolvedJoinInfo)joinedTable1.JoinInfo).JoinCondition)) .WhenCalled(mi => ((SqlCommandBuilder)mi.Arguments[0]).Append("X")); _stageMock .Expect(mock => mock.GenerateTextForJoinCondition(_commandBuilder, ((ResolvedJoinInfo)joinedTable2.JoinInfo).JoinCondition)) .WhenCalled(mi => ((SqlCommandBuilder)mi.Arguments[0]).Append("Y")); _stageMock.Replay(); SqlTableAndJoinTextGenerator.GenerateSql(originalTable, _commandBuilder, _stageMock, true); _stageMock.VerifyAllExpectations(); Assert.That( _commandBuilder.GetCommandText(), Is.EqualTo( "[KitchenTable] AS [t1] LEFT OUTER JOIN " + "[CookTable] AS [t2] ON X LEFT OUTER JOIN " + "[CookTable2] AS [t3] ON Y")); }
public void GenerateSql_WithUnresolvedGroupReferenceTableInfo() { var tableInfo = SqlStatementModelObjectMother.CreateUnresolvedGroupReferenceTableInfo(); Assert.That( () => SqlTableAndJoinTextGenerator.GenerateSql(new SqlTable(tableInfo, JoinSemantics.Inner), _commandBuilder, _stageMock, false), Throws.TypeOf <InvalidOperationException>().With.Message.EqualTo("UnresolvedGroupReferenceTableInfo is not valid at this point.")); }
public void GenerateSql_WithUnresolvedTableInfo_RaisesException() { var sqlTable = SqlStatementModelObjectMother.CreateSqlTable_WithUnresolvedTableInfo(); Assert.That( () => SqlTableAndJoinTextGenerator.GenerateSql(sqlTable, _commandBuilder, _stageMock, false), Throws.TypeOf <InvalidOperationException>().With.Message.EqualTo("UnresolvedTableInfo is not valid at this point.")); }
public void GenerateSql_ForTable() { var sqlTable = SqlStatementModelObjectMother.CreateSqlTable_WithUnresolvedTableInfo(); sqlTable.TableInfo = new ResolvedSimpleTableInfo(typeof(int), "Table", "t"); SqlTableAndJoinTextGenerator.GenerateSql(sqlTable, _commandBuilder, _stageMock, true); Assert.That(_commandBuilder.GetCommandText(), Is.EqualTo("[Table] AS [t]")); }
public void GenerateSql_LeftJoinSemantics_NonFirstTable() { var tableInfo = new ResolvedSimpleTableInfo(typeof(int), "Table", "t"); var sqlTable = new SqlTable(tableInfo, JoinSemantics.Left); SqlTableAndJoinTextGenerator.GenerateSql(sqlTable, _commandBuilder, _stageMock, isFirstTable: false); Assert.That(_commandBuilder.GetCommandText(), Is.EqualTo(" OUTER APPLY [Table] AS [t]")); }
public void GenerateSql_JoinedTable_WithInnerJoinSemantics() { var condition = Expression.Constant(true); var joinInfo = new ResolvedJoinInfo(new ResolvedSimpleTableInfo(typeof(Cook), "CookTable", "c"), condition); var sqlTable = new SqlTable(new SqlJoinedTable(joinInfo, JoinSemantics.Inner), JoinSemantics.Inner); Assert.That( () => SqlTableAndJoinTextGenerator.GenerateSql(sqlTable, _commandBuilder, _stageMock, isFirstTable: true), Throws.TypeOf <InvalidOperationException>().With.Message.EqualTo("SqlJoinedTable as TableInfo is not valid at this point.")); }
public void GenerateSql_ForSeveralTables() { var sqlTable1 = SqlStatementModelObjectMother.CreateSqlTable_WithResolvedTableInfo("Table1", "t1"); var sqlTable2 = SqlStatementModelObjectMother.CreateSqlTable_WithResolvedTableInfo("Table2", "t2"); var sqlTable3 = SqlStatementModelObjectMother.CreateSqlTable_WithResolvedTableInfo("Table3", "t3"); SqlTableAndJoinTextGenerator.GenerateSql(sqlTable1, _commandBuilder, _stageMock, true); SqlTableAndJoinTextGenerator.GenerateSql(sqlTable2, _commandBuilder, _stageMock, false); SqlTableAndJoinTextGenerator.GenerateSql(sqlTable3, _commandBuilder, _stageMock, false); Assert.That(_commandBuilder.GetCommandText(), Is.EqualTo("[Table1] AS [t1] CROSS JOIN [Table2] AS [t2] CROSS JOIN [Table3] AS [t3]")); }
public void GenerateSql_WithUnresolvedCollectionJoinInfo() { var originalTable = new SqlTable(new ResolvedSimpleTableInfo(typeof(Cook), "CookTable", "c"), JoinSemantics.Inner); var memberInfo = typeof(Restaurant).GetProperty("Cooks"); var collectionJoinInfo = new UnresolvedCollectionJoinInfo(Expression.Constant(new Cook[] { }), memberInfo); originalTable.GetOrAddLeftJoin(collectionJoinInfo, memberInfo); Assert.That( () => SqlTableAndJoinTextGenerator.GenerateSql(originalTable, _commandBuilder, _stageMock, false), Throws.TypeOf <InvalidOperationException>().With.Message.EqualTo("UnresolvedCollectionJoinInfo is not valid at this point.")); }
public void GenerateSql_WithUnresolvedJoinInfo() { var originalTable = new SqlTable(new ResolvedSimpleTableInfo(typeof(Cook), "CookTable", "c"), JoinSemantics.Inner); var kitchenCookMember = typeof(Kitchen).GetProperty("Cook"); var entityExpression = SqlStatementModelObjectMother.CreateSqlEntityDefinitionExpression(typeof(Kitchen)); var unresolvedJoinInfo = new UnresolvedJoinInfo(entityExpression, kitchenCookMember, JoinCardinality.One); originalTable.GetOrAddLeftJoin(unresolvedJoinInfo, kitchenCookMember); Assert.That( () => SqlTableAndJoinTextGenerator.GenerateSql(originalTable, _commandBuilder, _stageMock, false), Throws.TypeOf <InvalidOperationException>().With.Message.EqualTo("UnresolvedJoinInfo is not valid at this point.")); }
public void GenerateSql_InnerJoinSemantics_NonFirstTable_SubstatementTableInfo() { var sqlStatement = SqlStatementModelObjectMother.CreateSqlStatement_Resolved(typeof(Cook)); var tableInfo = new ResolvedSubStatementTableInfo("q0", sqlStatement); var sqlTable = new SqlTable(tableInfo, JoinSemantics.Inner); _stageMock .Expect(mock => mock.GenerateTextForSqlStatement(_commandBuilder, sqlStatement)) .WhenCalled(mi => ((ISqlCommandBuilder)mi.Arguments[0]).Append("[Table] AS [t]")); _stageMock.Replay(); SqlTableAndJoinTextGenerator.GenerateSql(sqlTable, _commandBuilder, _stageMock, isFirstTable: false); _stageMock.VerifyAllExpectations(); Assert.That(_commandBuilder.GetCommandText(), Is.EqualTo(" CROSS APPLY ([Table] AS [t]) AS [q0]")); }
public void GenerateSql_JoinedTable_WithLeftJoinSemantics() { var condition = Expression.Constant(true); var joinInfo = new ResolvedJoinInfo(new ResolvedSimpleTableInfo(typeof(Cook), "CookTable", "c"), condition); var sqlTable = SqlStatementModelObjectMother.CreateSqlTable_WithResolvedTableInfo("KitchenTable", "k", JoinSemantics.Inner); sqlTable.GetOrAddLeftJoin(joinInfo, ExpressionHelper.GetMember <Kitchen> (k => k.Cook)); _stageMock .Expect(mock => mock.GenerateTextForJoinCondition(_commandBuilder, condition)) .WhenCalled(mi => ((SqlCommandBuilder)mi.Arguments[0]).Append("condition")); SqlTableAndJoinTextGenerator.GenerateSql(sqlTable, _commandBuilder, _stageMock, isFirstTable: true); Assert.That(_commandBuilder.GetCommandText(), Is.EqualTo("[KitchenTable] AS [k] LEFT OUTER JOIN [CookTable] AS [c] ON condition")); }
public void GenerateSql_ForJoinedTable() { var originalTable = new SqlTable(new ResolvedSimpleTableInfo(typeof(Kitchen), "KitchenTable", "t1"), JoinSemantics.Inner); var kitchenCookMember = typeof(Kitchen).GetProperty("Cook"); var joinedTable = originalTable.GetOrAddLeftJoin(CreateResolvedJoinInfo(typeof(Cook), "t1", "ID", "CookTable", "t2", "FK"), kitchenCookMember); joinedTable.JoinInfo = CreateResolvedJoinInfo(typeof(Cook), "t1", "ID", "CookTable", "t2", "FK"); _stageMock .Expect(mock => mock.GenerateTextForJoinCondition(_commandBuilder, ((ResolvedJoinInfo)joinedTable.JoinInfo).JoinCondition)) .WhenCalled(mi => ((SqlCommandBuilder)mi.Arguments[0]).Append("([t1].[ID] = [t2].[FK])")); _stageMock.Replay(); SqlTableAndJoinTextGenerator.GenerateSql(originalTable, _commandBuilder, _stageMock, true); _stageMock.VerifyAllExpectations(); Assert.That( _commandBuilder.GetCommandText(), Is.EqualTo("[KitchenTable] AS [t1] LEFT OUTER JOIN [CookTable] AS [t2] ON ([t1].[ID] = [t2].[FK])")); }