@@ -99,6 +99,103 @@ public void test_model_with_array_and_json()
99
99
}
100
100
}
101
101
}
102
+
103
+ [ Alias ( "my_table" ) ]
104
+ public class MyModel
105
+ {
106
+ public int MyModelId { get ; set ; }
107
+ public string Name { get ; set ; }
108
+ public string Type { get ; set ; }
109
+ public string NewField { get ; set ; }
110
+ }
111
+
112
+ public class MyNewModel
113
+ {
114
+ public int MyModelId { get ; set ; }
115
+ public string Name { get ; set ; }
116
+ public string Type { get ; set ; }
117
+ public string NewField { get ; set ; }
118
+ public int RenamedId { get ; set ; }
119
+ }
120
+
121
+ [ Test ]
122
+ public void test_model_with_simple_array_and_duplicate_fields ( )
123
+ {
124
+ using ( var db = OpenDbConnection ( ) )
125
+ {
126
+
127
+ db . DropAndCreateTable < MyModel > ( ) ;
128
+
129
+ db . Insert ( new MyModel { MyModelId = 100 , Name = "Test Name" , NewField = "New Field" , Type = "My Type" } ) ;
130
+ db . Insert ( new MyModel { MyModelId = 200 , Name = "Tester Name 2" , NewField = "New Field 2" , Type = "My Type 2" } ) ;
131
+
132
+ const string sql = @"
133
+ SELECT *, t2.my_model_id AS renamed_id
134
+ FROM (
135
+ SELECT *
136
+ FROM my_table
137
+ CROSS JOIN (SELECT ARRAY[1,2,3,4] AS int_array) AS c
138
+ ) AS t1
139
+ INNER JOIN my_table AS t2 ON t1.my_model_id = t2.my_model_id;" ;
140
+
141
+ var results = db . Select < MyNewModel > ( sql ) ;
142
+
143
+ Assert . That ( results . Count , Is . GreaterThan ( 1 ) ) ;
144
+
145
+ foreach ( var result in results )
146
+ {
147
+ Console . WriteLine ( "{0} - {1} - {2}" . Fmt ( result . MyModelId , result . Name , result . RenamedId ) ) ;
148
+ Assert . That ( result . MyModelId , Is . Not . EqualTo ( 0 ) ) ;
149
+ Assert . That ( result . RenamedId , Is . Not . EqualTo ( 0 ) ) ;
150
+ Assert . That ( result . Name , Is . Not . Empty ) ;
151
+ }
152
+
153
+ }
154
+ }
155
+
156
+ [ Test ]
157
+ public void test_model_with_complex_array_and_duplicate_fields ( )
158
+ {
159
+ using ( var db = OpenDbConnection ( ) )
160
+ {
161
+ db . DropAndCreateTable < ColorModel > ( ) ;
162
+
163
+ db . Insert ( new ColorModel { Color = "red" , Value = "#f00" } ) ;
164
+ db . Insert ( new ColorModel { Color = "green" , Value = "#0f0" } ) ;
165
+ db . Insert ( new ColorModel { Color = "blue" , Value = "#00f" } ) ;
166
+ db . Insert ( new ColorModel { Color = "cyan" , Value = "#0ff" } ) ;
167
+ db . Insert ( new ColorModel { Color = "magenta" , Value = "#f0f" } ) ;
168
+ db . Insert ( new ColorModel { Color = "yellow" , Value = "#ff0" } ) ;
169
+ db . Insert ( new ColorModel { Color = "black" , Value = "#000" } ) ;
170
+
171
+ db . DropAndCreateTable < MyModel > ( ) ;
172
+
173
+ db . Insert ( new MyModel { MyModelId = 100 , Name = "Test Name" , NewField = "New Field" , Type = "My Type" } ) ;
174
+ db . Insert ( new MyModel { MyModelId = 200 , Name = "Tester Name 2" , NewField = "New Field 2" , Type = "My Type 2" } ) ;
175
+
176
+ const string sql = @"
177
+ SELECT *, t2.my_model_id AS renamed_id
178
+ FROM (
179
+ SELECT *
180
+ FROM my_table
181
+ CROSS JOIN (SELECT array_agg(color.*) AS color_array FROM color) AS c
182
+ ) AS t1
183
+ INNER JOIN my_table AS t2 ON t1.my_model_id = t2.my_model_id;" ;
184
+
185
+ var results = db . Select < MyNewModel > ( sql ) ;
186
+
187
+ Assert . That ( results . Count , Is . GreaterThan ( 1 ) ) ;
188
+
189
+ foreach ( var result in results )
190
+ {
191
+ Console . WriteLine ( "{0} - {1} - {2}" . Fmt ( result . MyModelId , result . Name , result . RenamedId ) ) ;
192
+ Assert . That ( result . MyModelId , Is . Not . EqualTo ( 0 ) ) ;
193
+ Assert . That ( result . RenamedId , Is . Not . EqualTo ( 0 ) ) ;
194
+ Assert . That ( result . Name , Is . Not . Empty ) ;
195
+ }
196
+ }
197
+ }
198
+
102
199
}
103
200
104
201
}
0 commit comments