@@ -7,6 +7,102 @@ namespace QueryTree.Engine.Tests
77{ 
88    public  class  AppendTests 
99    { 
10+         private  List < ITableInfo >  DatabaseInfo 
11+ 		{ 
12+ 			get 
13+ 			{ 
14+ 				return  new  List < ITableInfo > ( ) 
15+ 				{ 
16+ 					new  MockTableInfo ( ) 
17+ 					{ 
18+ 						DisplayName  =  "employees" , 
19+ 						Columns  =  new  List < IColumnInfo > ( ) 
20+ 						{ 
21+ 							new  MockColumnInfo ( )  {  DataType  =  "int" ,  Name  =  "ID"  } , 
22+ 							new  MockColumnInfo ( )  {  DataType  =  "varchar" ,  Name  =  "Name"  } , 
23+ 							new  MockColumnInfo ( )  {  DataType  =  "int" ,  Name  =  "department_id"  } 
24+ 						} 
25+ 					} , 
26+                     new  MockTableInfo ( ) 
27+ 					{ 
28+ 						DisplayName  =  "departments" , 
29+ 						Columns  =  new  List < IColumnInfo > ( ) 
30+ 						{ 
31+ 							new  MockColumnInfo ( )  {  DataType  =  "int" ,  Name  =  "ID"  } , 
32+ 							new  MockColumnInfo ( )  {  DataType  =  "varchar" ,  Name  =  "Name"  } 
33+ 						} 
34+ 					} 
35+ 				} ; 
36+ 			} 
37+ 		} 
1038
39+         private  string  NodesJsonWithComplexAppend 
40+ 		{ 
41+ 			get 
42+ 			{ 
43+ 				return  @"[ 
44+                     { 
45+                         ""Id"": ""1"", 
46+                         ""Type"": ""Data Table"", 
47+                         ""Table"": ""employees"" 
48+                     }, 
49+                     { 
50+                         ""Id"": ""2"", 
51+                         ""Type"": ""Data Table"", 
52+                         ""Table"": ""departments"" 
53+                     }, 
54+                     { 
55+                         ""Id"": ""3"", 
56+                         ""Inputs"": [""1"",""2""], 
57+                         ""Type"": ""Join"", 
58+                         ""JoinType"": ""Inner"", 
59+                         ""Table1Column"": ""department_id"", 
60+                         ""Table2Column"": ""ID"" 
61+                     }, 
62+                     { 
63+                         ""Id"": ""4"", 
64+                         ""Inputs"": [""3""], 
65+                         ""Type"": ""Filter"", 
66+                         ""FilterColumnIndex"": 0, 
67+                         ""Operator"": ""EqualTo"", 
68+                         ""FilterValue1"": ""1"" 
69+                     }, 
70+                     { 
71+                         ""Id"": ""5"", 
72+                         ""Inputs"": [""3""], 
73+                         ""Type"": ""Filter"", 
74+                         ""FilterColumnIndex"": 0, 
75+                         ""Operator"": ""EqualTo"", 
76+                         ""FilterValue1"": ""2"" 
77+                     }, 
78+                     { 
79+                         ""Id"": ""6"", 
80+                         ""Inputs"": [""4"",""5""], 
81+                         ""Type"": ""Append"", 
82+                         ""IncludeUniqueColumns"": true 
83+                     } 
84+                 ]" ; 
85+ 			} 
86+ 		} 
87+ 
88+         [ Fact ] 
89+ 		public  void  TestMultipleRoutesToDataTablesDoesntDefineThemTwice ( ) 
90+ 		{ 
91+ 			var  query  =  new  Query ( 
92+ 				DatabaseType . PostgreSQL , 
93+ 				NodesJsonWithComplexAppend , 
94+ 				DatabaseInfo ) ; 
95+ 
96+ 			var  sql  =  query . GetSql ( "6" ) ; 
97+ 
98+             // count how many times "node_1" is defined 
99+             int  c  =  0 ; 
100+             int  i  =  - 1 ; 
101+             while  ( ( i  =  sql . IndexOf ( "node_1 AS" ,  i + 1 ) )  >=  0 ) 
102+                 c ++ ; 
103+             
104+             // The "node_1" datatable should only be defined once in the query 
105+ 			Assert . Equal ( 1 ,  c ) ; 
106+ 		} 
11107    } 
12108} 
0 commit comments