@@ -156,4 +156,46 @@ final class PostgresRowTests: XCTestCase {
156
156
XCTAssertEqual ( result? . 0 , . some( . none) )
157
157
XCTAssertEqual ( result? . 1 , " Hello world! " )
158
158
}
159
+
160
+ func testDecodingTypeMismatch( ) {
161
+ let rowDescription = [
162
+ RowDescription . Column (
163
+ name: " id " ,
164
+ tableOID: 1 ,
165
+ columnAttributeNumber: 1 ,
166
+ dataType: . uuid,
167
+ dataTypeSize: 0 ,
168
+ dataTypeModifier: 0 ,
169
+ format: . binary
170
+ ) ,
171
+ RowDescription . Column (
172
+ name: " name " ,
173
+ tableOID: 1 ,
174
+ columnAttributeNumber: 1 ,
175
+ dataType: . int8,
176
+ dataTypeSize: 0 ,
177
+ dataTypeModifier: 0 ,
178
+ format: . binary
179
+ )
180
+ ]
181
+
182
+ let row = PostgresRow (
183
+ data: . makeTestDataRow( nil , ByteBuffer ( integer: 123 ) ) ,
184
+ lookupTable: [ " id " : 0 , " name " : 1 ] ,
185
+ columns: rowDescription
186
+ )
187
+
188
+ XCTAssertThrowsError ( try row. decode ( ( UUID? , String) . self) ) { error in
189
+ guard let psqlError = error as? PostgresDecodingError else { return XCTFail ( " Unexpected error type " ) }
190
+
191
+ XCTAssertEqual ( psqlError. columnName, " name " )
192
+ XCTAssertEqual ( psqlError. columnIndex, 1 )
193
+ XCTAssertEqual ( psqlError. line, #line - 5 )
194
+ XCTAssertEqual ( psqlError. file, #file)
195
+ XCTAssertEqual ( psqlError. postgresData, ByteBuffer ( integer: 123 ) )
196
+ XCTAssertEqual ( psqlError. postgresFormat, . binary)
197
+ XCTAssertEqual ( psqlError. postgresType, . int8)
198
+ XCTAssert ( psqlError. targetType == String . self)
199
+ }
200
+ }
159
201
}
0 commit comments