From f588870b11edc4766b9c77f2cd67bfd492a7f206 Mon Sep 17 00:00:00 2001 From: Fabian Fett Date: Fri, 18 Feb 2022 11:30:13 +0100 Subject: [PATCH] Add PSQLRow multi decode (#222) --- .../New/PSQLRow-multi-decode.swift | 1068 +++++++++++++++++ dev/generate-psqlrow-multi-decode.sh | 104 ++ 2 files changed, 1172 insertions(+) create mode 100644 Sources/PostgresNIO/New/PSQLRow-multi-decode.swift create mode 100755 dev/generate-psqlrow-multi-decode.sh diff --git a/Sources/PostgresNIO/New/PSQLRow-multi-decode.swift b/Sources/PostgresNIO/New/PSQLRow-multi-decode.swift new file mode 100644 index 00000000..3be5b0c8 --- /dev/null +++ b/Sources/PostgresNIO/New/PSQLRow-multi-decode.swift @@ -0,0 +1,1068 @@ +/// NOTE: THIS FILE IS AUTO-GENERATED BY dev/generate-psqlrow-multi-decode.sh + +extension PSQLRow { + @inlinable + func decode(_: (T0).Type, context: PostgresDecodingContext, file: String = #file, line: Int = #line) throws -> (T0) { + precondition(self.columns.count >= 1) + let columnIndex = 0 + var cellIterator = self.data.makeIterator() + var cellData = cellIterator.next().unsafelyUnwrapped + var columnIterator = self.columns.makeIterator() + let column = columnIterator.next().unsafelyUnwrapped + let swiftTargetType: Any.Type = T0.self + + do { + let r0 = try T0.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + return (r0) + } catch let code as PostgresCastingError.Code { + throw PostgresCastingError( + code: code, + columnName: column.name, + columnIndex: columnIndex, + targetType: swiftTargetType, + postgresType: column.dataType, + postgresFormat: column.format, + postgresData: cellData, + file: file, + line: line + ) + } + } + + @inlinable + func decode(_: (T0, T1).Type, context: PostgresDecodingContext, file: String = #file, line: Int = #line) throws -> (T0, T1) { + precondition(self.columns.count >= 2) + var columnIndex = 0 + var cellIterator = self.data.makeIterator() + var cellData = cellIterator.next().unsafelyUnwrapped + var columnIterator = self.columns.makeIterator() + var column = columnIterator.next().unsafelyUnwrapped + var swiftTargetType: Any.Type = T0.self + + do { + let r0 = try T0.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 1 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T1.self + let r1 = try T1.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + return (r0, r1) + } catch let code as PostgresCastingError.Code { + throw PostgresCastingError( + code: code, + columnName: column.name, + columnIndex: columnIndex, + targetType: swiftTargetType, + postgresType: column.dataType, + postgresFormat: column.format, + postgresData: cellData, + file: file, + line: line + ) + } + } + + @inlinable + func decode(_: (T0, T1, T2).Type, context: PostgresDecodingContext, file: String = #file, line: Int = #line) throws -> (T0, T1, T2) { + precondition(self.columns.count >= 3) + var columnIndex = 0 + var cellIterator = self.data.makeIterator() + var cellData = cellIterator.next().unsafelyUnwrapped + var columnIterator = self.columns.makeIterator() + var column = columnIterator.next().unsafelyUnwrapped + var swiftTargetType: Any.Type = T0.self + + do { + let r0 = try T0.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 1 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T1.self + let r1 = try T1.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 2 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T2.self + let r2 = try T2.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + return (r0, r1, r2) + } catch let code as PostgresCastingError.Code { + throw PostgresCastingError( + code: code, + columnName: column.name, + columnIndex: columnIndex, + targetType: swiftTargetType, + postgresType: column.dataType, + postgresFormat: column.format, + postgresData: cellData, + file: file, + line: line + ) + } + } + + @inlinable + func decode(_: (T0, T1, T2, T3).Type, context: PostgresDecodingContext, file: String = #file, line: Int = #line) throws -> (T0, T1, T2, T3) { + precondition(self.columns.count >= 4) + var columnIndex = 0 + var cellIterator = self.data.makeIterator() + var cellData = cellIterator.next().unsafelyUnwrapped + var columnIterator = self.columns.makeIterator() + var column = columnIterator.next().unsafelyUnwrapped + var swiftTargetType: Any.Type = T0.self + + do { + let r0 = try T0.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 1 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T1.self + let r1 = try T1.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 2 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T2.self + let r2 = try T2.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 3 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T3.self + let r3 = try T3.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + return (r0, r1, r2, r3) + } catch let code as PostgresCastingError.Code { + throw PostgresCastingError( + code: code, + columnName: column.name, + columnIndex: columnIndex, + targetType: swiftTargetType, + postgresType: column.dataType, + postgresFormat: column.format, + postgresData: cellData, + file: file, + line: line + ) + } + } + + @inlinable + func decode(_: (T0, T1, T2, T3, T4).Type, context: PostgresDecodingContext, file: String = #file, line: Int = #line) throws -> (T0, T1, T2, T3, T4) { + precondition(self.columns.count >= 5) + var columnIndex = 0 + var cellIterator = self.data.makeIterator() + var cellData = cellIterator.next().unsafelyUnwrapped + var columnIterator = self.columns.makeIterator() + var column = columnIterator.next().unsafelyUnwrapped + var swiftTargetType: Any.Type = T0.self + + do { + let r0 = try T0.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 1 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T1.self + let r1 = try T1.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 2 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T2.self + let r2 = try T2.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 3 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T3.self + let r3 = try T3.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 4 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T4.self + let r4 = try T4.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + return (r0, r1, r2, r3, r4) + } catch let code as PostgresCastingError.Code { + throw PostgresCastingError( + code: code, + columnName: column.name, + columnIndex: columnIndex, + targetType: swiftTargetType, + postgresType: column.dataType, + postgresFormat: column.format, + postgresData: cellData, + file: file, + line: line + ) + } + } + + @inlinable + func decode(_: (T0, T1, T2, T3, T4, T5).Type, context: PostgresDecodingContext, file: String = #file, line: Int = #line) throws -> (T0, T1, T2, T3, T4, T5) { + precondition(self.columns.count >= 6) + var columnIndex = 0 + var cellIterator = self.data.makeIterator() + var cellData = cellIterator.next().unsafelyUnwrapped + var columnIterator = self.columns.makeIterator() + var column = columnIterator.next().unsafelyUnwrapped + var swiftTargetType: Any.Type = T0.self + + do { + let r0 = try T0.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 1 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T1.self + let r1 = try T1.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 2 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T2.self + let r2 = try T2.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 3 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T3.self + let r3 = try T3.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 4 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T4.self + let r4 = try T4.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 5 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T5.self + let r5 = try T5.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + return (r0, r1, r2, r3, r4, r5) + } catch let code as PostgresCastingError.Code { + throw PostgresCastingError( + code: code, + columnName: column.name, + columnIndex: columnIndex, + targetType: swiftTargetType, + postgresType: column.dataType, + postgresFormat: column.format, + postgresData: cellData, + file: file, + line: line + ) + } + } + + @inlinable + func decode(_: (T0, T1, T2, T3, T4, T5, T6).Type, context: PostgresDecodingContext, file: String = #file, line: Int = #line) throws -> (T0, T1, T2, T3, T4, T5, T6) { + precondition(self.columns.count >= 7) + var columnIndex = 0 + var cellIterator = self.data.makeIterator() + var cellData = cellIterator.next().unsafelyUnwrapped + var columnIterator = self.columns.makeIterator() + var column = columnIterator.next().unsafelyUnwrapped + var swiftTargetType: Any.Type = T0.self + + do { + let r0 = try T0.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 1 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T1.self + let r1 = try T1.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 2 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T2.self + let r2 = try T2.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 3 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T3.self + let r3 = try T3.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 4 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T4.self + let r4 = try T4.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 5 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T5.self + let r5 = try T5.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 6 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T6.self + let r6 = try T6.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + return (r0, r1, r2, r3, r4, r5, r6) + } catch let code as PostgresCastingError.Code { + throw PostgresCastingError( + code: code, + columnName: column.name, + columnIndex: columnIndex, + targetType: swiftTargetType, + postgresType: column.dataType, + postgresFormat: column.format, + postgresData: cellData, + file: file, + line: line + ) + } + } + + @inlinable + func decode(_: (T0, T1, T2, T3, T4, T5, T6, T7).Type, context: PostgresDecodingContext, file: String = #file, line: Int = #line) throws -> (T0, T1, T2, T3, T4, T5, T6, T7) { + precondition(self.columns.count >= 8) + var columnIndex = 0 + var cellIterator = self.data.makeIterator() + var cellData = cellIterator.next().unsafelyUnwrapped + var columnIterator = self.columns.makeIterator() + var column = columnIterator.next().unsafelyUnwrapped + var swiftTargetType: Any.Type = T0.self + + do { + let r0 = try T0.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 1 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T1.self + let r1 = try T1.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 2 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T2.self + let r2 = try T2.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 3 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T3.self + let r3 = try T3.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 4 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T4.self + let r4 = try T4.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 5 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T5.self + let r5 = try T5.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 6 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T6.self + let r6 = try T6.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 7 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T7.self + let r7 = try T7.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + return (r0, r1, r2, r3, r4, r5, r6, r7) + } catch let code as PostgresCastingError.Code { + throw PostgresCastingError( + code: code, + columnName: column.name, + columnIndex: columnIndex, + targetType: swiftTargetType, + postgresType: column.dataType, + postgresFormat: column.format, + postgresData: cellData, + file: file, + line: line + ) + } + } + + @inlinable + func decode(_: (T0, T1, T2, T3, T4, T5, T6, T7, T8).Type, context: PostgresDecodingContext, file: String = #file, line: Int = #line) throws -> (T0, T1, T2, T3, T4, T5, T6, T7, T8) { + precondition(self.columns.count >= 9) + var columnIndex = 0 + var cellIterator = self.data.makeIterator() + var cellData = cellIterator.next().unsafelyUnwrapped + var columnIterator = self.columns.makeIterator() + var column = columnIterator.next().unsafelyUnwrapped + var swiftTargetType: Any.Type = T0.self + + do { + let r0 = try T0.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 1 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T1.self + let r1 = try T1.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 2 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T2.self + let r2 = try T2.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 3 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T3.self + let r3 = try T3.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 4 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T4.self + let r4 = try T4.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 5 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T5.self + let r5 = try T5.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 6 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T6.self + let r6 = try T6.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 7 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T7.self + let r7 = try T7.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 8 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T8.self + let r8 = try T8.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + return (r0, r1, r2, r3, r4, r5, r6, r7, r8) + } catch let code as PostgresCastingError.Code { + throw PostgresCastingError( + code: code, + columnName: column.name, + columnIndex: columnIndex, + targetType: swiftTargetType, + postgresType: column.dataType, + postgresFormat: column.format, + postgresData: cellData, + file: file, + line: line + ) + } + } + + @inlinable + func decode(_: (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9).Type, context: PostgresDecodingContext, file: String = #file, line: Int = #line) throws -> (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9) { + precondition(self.columns.count >= 10) + var columnIndex = 0 + var cellIterator = self.data.makeIterator() + var cellData = cellIterator.next().unsafelyUnwrapped + var columnIterator = self.columns.makeIterator() + var column = columnIterator.next().unsafelyUnwrapped + var swiftTargetType: Any.Type = T0.self + + do { + let r0 = try T0.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 1 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T1.self + let r1 = try T1.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 2 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T2.self + let r2 = try T2.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 3 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T3.self + let r3 = try T3.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 4 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T4.self + let r4 = try T4.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 5 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T5.self + let r5 = try T5.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 6 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T6.self + let r6 = try T6.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 7 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T7.self + let r7 = try T7.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 8 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T8.self + let r8 = try T8.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 9 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T9.self + let r9 = try T9.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + return (r0, r1, r2, r3, r4, r5, r6, r7, r8, r9) + } catch let code as PostgresCastingError.Code { + throw PostgresCastingError( + code: code, + columnName: column.name, + columnIndex: columnIndex, + targetType: swiftTargetType, + postgresType: column.dataType, + postgresFormat: column.format, + postgresData: cellData, + file: file, + line: line + ) + } + } + + @inlinable + func decode(_: (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10).Type, context: PostgresDecodingContext, file: String = #file, line: Int = #line) throws -> (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) { + precondition(self.columns.count >= 11) + var columnIndex = 0 + var cellIterator = self.data.makeIterator() + var cellData = cellIterator.next().unsafelyUnwrapped + var columnIterator = self.columns.makeIterator() + var column = columnIterator.next().unsafelyUnwrapped + var swiftTargetType: Any.Type = T0.self + + do { + let r0 = try T0.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 1 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T1.self + let r1 = try T1.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 2 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T2.self + let r2 = try T2.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 3 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T3.self + let r3 = try T3.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 4 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T4.self + let r4 = try T4.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 5 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T5.self + let r5 = try T5.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 6 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T6.self + let r6 = try T6.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 7 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T7.self + let r7 = try T7.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 8 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T8.self + let r8 = try T8.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 9 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T9.self + let r9 = try T9.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 10 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T10.self + let r10 = try T10.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + return (r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10) + } catch let code as PostgresCastingError.Code { + throw PostgresCastingError( + code: code, + columnName: column.name, + columnIndex: columnIndex, + targetType: swiftTargetType, + postgresType: column.dataType, + postgresFormat: column.format, + postgresData: cellData, + file: file, + line: line + ) + } + } + + @inlinable + func decode(_: (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11).Type, context: PostgresDecodingContext, file: String = #file, line: Int = #line) throws -> (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) { + precondition(self.columns.count >= 12) + var columnIndex = 0 + var cellIterator = self.data.makeIterator() + var cellData = cellIterator.next().unsafelyUnwrapped + var columnIterator = self.columns.makeIterator() + var column = columnIterator.next().unsafelyUnwrapped + var swiftTargetType: Any.Type = T0.self + + do { + let r0 = try T0.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 1 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T1.self + let r1 = try T1.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 2 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T2.self + let r2 = try T2.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 3 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T3.self + let r3 = try T3.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 4 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T4.self + let r4 = try T4.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 5 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T5.self + let r5 = try T5.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 6 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T6.self + let r6 = try T6.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 7 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T7.self + let r7 = try T7.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 8 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T8.self + let r8 = try T8.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 9 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T9.self + let r9 = try T9.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 10 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T10.self + let r10 = try T10.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 11 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T11.self + let r11 = try T11.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + return (r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11) + } catch let code as PostgresCastingError.Code { + throw PostgresCastingError( + code: code, + columnName: column.name, + columnIndex: columnIndex, + targetType: swiftTargetType, + postgresType: column.dataType, + postgresFormat: column.format, + postgresData: cellData, + file: file, + line: line + ) + } + } + + @inlinable + func decode(_: (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12).Type, context: PostgresDecodingContext, file: String = #file, line: Int = #line) throws -> (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) { + precondition(self.columns.count >= 13) + var columnIndex = 0 + var cellIterator = self.data.makeIterator() + var cellData = cellIterator.next().unsafelyUnwrapped + var columnIterator = self.columns.makeIterator() + var column = columnIterator.next().unsafelyUnwrapped + var swiftTargetType: Any.Type = T0.self + + do { + let r0 = try T0.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 1 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T1.self + let r1 = try T1.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 2 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T2.self + let r2 = try T2.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 3 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T3.self + let r3 = try T3.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 4 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T4.self + let r4 = try T4.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 5 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T5.self + let r5 = try T5.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 6 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T6.self + let r6 = try T6.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 7 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T7.self + let r7 = try T7.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 8 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T8.self + let r8 = try T8.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 9 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T9.self + let r9 = try T9.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 10 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T10.self + let r10 = try T10.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 11 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T11.self + let r11 = try T11.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 12 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T12.self + let r12 = try T12.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + return (r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12) + } catch let code as PostgresCastingError.Code { + throw PostgresCastingError( + code: code, + columnName: column.name, + columnIndex: columnIndex, + targetType: swiftTargetType, + postgresType: column.dataType, + postgresFormat: column.format, + postgresData: cellData, + file: file, + line: line + ) + } + } + + @inlinable + func decode(_: (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13).Type, context: PostgresDecodingContext, file: String = #file, line: Int = #line) throws -> (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) { + precondition(self.columns.count >= 14) + var columnIndex = 0 + var cellIterator = self.data.makeIterator() + var cellData = cellIterator.next().unsafelyUnwrapped + var columnIterator = self.columns.makeIterator() + var column = columnIterator.next().unsafelyUnwrapped + var swiftTargetType: Any.Type = T0.self + + do { + let r0 = try T0.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 1 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T1.self + let r1 = try T1.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 2 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T2.self + let r2 = try T2.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 3 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T3.self + let r3 = try T3.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 4 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T4.self + let r4 = try T4.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 5 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T5.self + let r5 = try T5.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 6 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T6.self + let r6 = try T6.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 7 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T7.self + let r7 = try T7.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 8 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T8.self + let r8 = try T8.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 9 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T9.self + let r9 = try T9.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 10 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T10.self + let r10 = try T10.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 11 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T11.self + let r11 = try T11.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 12 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T12.self + let r12 = try T12.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 13 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T13.self + let r13 = try T13.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + return (r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13) + } catch let code as PostgresCastingError.Code { + throw PostgresCastingError( + code: code, + columnName: column.name, + columnIndex: columnIndex, + targetType: swiftTargetType, + postgresType: column.dataType, + postgresFormat: column.format, + postgresData: cellData, + file: file, + line: line + ) + } + } + + @inlinable + func decode(_: (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14).Type, context: PostgresDecodingContext, file: String = #file, line: Int = #line) throws -> (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) { + precondition(self.columns.count >= 15) + var columnIndex = 0 + var cellIterator = self.data.makeIterator() + var cellData = cellIterator.next().unsafelyUnwrapped + var columnIterator = self.columns.makeIterator() + var column = columnIterator.next().unsafelyUnwrapped + var swiftTargetType: Any.Type = T0.self + + do { + let r0 = try T0.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 1 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T1.self + let r1 = try T1.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 2 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T2.self + let r2 = try T2.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 3 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T3.self + let r3 = try T3.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 4 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T4.self + let r4 = try T4.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 5 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T5.self + let r5 = try T5.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 6 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T6.self + let r6 = try T6.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 7 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T7.self + let r7 = try T7.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 8 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T8.self + let r8 = try T8.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 9 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T9.self + let r9 = try T9.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 10 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T10.self + let r10 = try T10.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 11 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T11.self + let r11 = try T11.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 12 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T12.self + let r12 = try T12.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 13 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T13.self + let r13 = try T13.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + columnIndex = 14 + cellData = cellIterator.next().unsafelyUnwrapped + column = columnIterator.next().unsafelyUnwrapped + swiftTargetType = T14.self + let r14 = try T14.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context) + + return (r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14) + } catch let code as PostgresCastingError.Code { + throw PostgresCastingError( + code: code, + columnName: column.name, + columnIndex: columnIndex, + targetType: swiftTargetType, + postgresType: column.dataType, + postgresFormat: column.format, + postgresData: cellData, + file: file, + line: line + ) + } + } +} diff --git a/dev/generate-psqlrow-multi-decode.sh b/dev/generate-psqlrow-multi-decode.sh new file mode 100755 index 00000000..e58b17b2 --- /dev/null +++ b/dev/generate-psqlrow-multi-decode.sh @@ -0,0 +1,104 @@ +#!/bin/bash + +set -eu + +here="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +function gen() { + how_many=$1 + + if [[ $how_many -ne 1 ]] ; then + echo "" + fi + + echo " @inlinable" + #echo " @_alwaysEmitIntoClient" + echo -n " func decode(_: (T0" + for ((n = 1; n<$how_many; n +=1)); do + echo -n ", T$(($n))" + done + echo -n ").Type, context: PostgresDecodingContext, file: String = #file, line: Int = #line) throws" + + echo -n " -> (T0" + for ((n = 1; n<$how_many; n +=1)); do + echo -n ", T$(($n))" + done + echo ") {" + echo " precondition(self.columns.count >= $how_many)" + #echo " var columnIndex = 0" + if [[ $how_many -eq 1 ]] ; then + echo " let columnIndex = 0" + echo " var cellIterator = self.data.makeIterator()" + echo " var cellData = cellIterator.next().unsafelyUnwrapped" + echo " var columnIterator = self.columns.makeIterator()" + echo " let column = columnIterator.next().unsafelyUnwrapped" + echo " let swiftTargetType: Any.Type = T0.self" + else + echo " var columnIndex = 0" + echo " var cellIterator = self.data.makeIterator()" + echo " var cellData = cellIterator.next().unsafelyUnwrapped" + echo " var columnIterator = self.columns.makeIterator()" + echo " var column = columnIterator.next().unsafelyUnwrapped" + echo " var swiftTargetType: Any.Type = T0.self" + fi + + echo + echo " do {" + echo " let r0 = try T0.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context)" + echo + for ((n = 1; n<$how_many; n +=1)); do + echo " columnIndex = $n" + echo " cellData = cellIterator.next().unsafelyUnwrapped" + echo " column = columnIterator.next().unsafelyUnwrapped" + echo " swiftTargetType = T$n.self" + echo " let r$n = try T$n.decodeRaw(from: &cellData, type: column.dataType, format: column.format, context: context)" + echo + done + + echo -n " return (r0" + for ((n = 1; n<$how_many; n +=1)); do + echo -n ", r$(($n))" + done + echo ")" + echo " } catch let code as PostgresCastingError.Code {" + echo " throw PostgresCastingError(" + echo " code: code," + echo " columnName: column.name," + echo " columnIndex: columnIndex," + echo " targetType: swiftTargetType," + echo " postgresType: column.dataType," + echo " postgresFormat: column.format," + echo " postgresData: cellData," + echo " file: file," + echo " line: line" + echo " )" + echo " }" + echo " }" +} + +grep -q "ByteBuffer" "${BASH_SOURCE[0]}" || { + echo >&2 "ERROR: ${BASH_SOURCE[0]}: file or directory not found (this should be this script)" + exit 1 +} + +{ +cat <<"EOF" +/// NOTE: THIS FILE IS AUTO-GENERATED BY dev/generate-psqlrow-multi-decode.sh +EOF +echo + +echo "extension PSQLRow {" + +# note: +# - widening the inverval below (eg. going from {1..15} to {1..25}) is Semver minor +# - narrowing the interval below is SemVer _MAJOR_! +for n in {1..15}; do + gen "$n" +done +echo "}" +} > "$here/../Sources/PostgresNIO/New/PSQLRow-multi-decode.swift"