Skip to content

Commit 6266940

Browse files
committed
add array support to PostgreSQLDataType + add RETURNING * support
1 parent 106addc commit 6266940

5 files changed

+436
-288
lines changed

Sources/PostgreSQL/Column/PostgreSQLColumnType.swift

-111
This file was deleted.

Sources/PostgreSQL/SQL/PostgreSQLDataTypeStaticRepresentable.swift

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ extension UUID: PostgreSQLDataTypeStaticRepresentable {
1717

1818
extension Date: PostgreSQLDataTypeStaticRepresentable {
1919
/// See `PostgreSQLDataTypeStaticRepresentable`.
20-
public static var postgreSQLDataType: PostgreSQLDataType { return .timestamp(nil) }
20+
public static var postgreSQLDataType: PostgreSQLDataType { return .timestamp }
2121
}
2222

2323
extension Int: PostgreSQLDataTypeStaticRepresentable {
@@ -27,7 +27,7 @@ extension Int: PostgreSQLDataTypeStaticRepresentable {
2727

2828
extension Int8: PostgreSQLDataTypeStaticRepresentable {
2929
/// See `PostgreSQLDataTypeStaticRepresentable`.
30-
public static var postgreSQLDataType: PostgreSQLDataType { return .char(nil) }
30+
public static var postgreSQLDataType: PostgreSQLDataType { return .char }
3131
}
3232

3333
extension Int16: PostgreSQLDataTypeStaticRepresentable {
@@ -52,7 +52,7 @@ extension UInt: PostgreSQLDataTypeStaticRepresentable {
5252

5353
extension UInt8: PostgreSQLDataTypeStaticRepresentable {
5454
/// See `PostgreSQLDataTypeStaticRepresentable`.
55-
public static var postgreSQLDataType: PostgreSQLDataType { return .char(nil) }
55+
public static var postgreSQLDataType: PostgreSQLDataType { return .char }
5656
}
5757

5858
extension UInt16: PostgreSQLDataTypeStaticRepresentable {

Sources/PostgreSQL/SQL/PostgreSQLGeneric.swift

-5
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,6 @@ public typealias PostgreSQLGroupBy = GenericSQLGroupBy<PostgreSQLExpression>
5959
/// See `SQLQuery`.
6060
public typealias PostgreSQLIdentifier = GenericSQLIdentifier
6161

62-
/// See `SQLQuery`.
63-
public typealias PostgreSQLInsert = GenericSQLInsert<
64-
PostgreSQLTableIdentifier, PostgreSQLColumnIdentifier, PostgreSQLExpression
65-
>
66-
6762
/// See `SQLQuery`.
6863
public typealias PostgreSQLJoin = GenericSQLJoin<
6964
PostgreSQLJoinMethod, PostgreSQLTableIdentifier, PostgreSQLExpression
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
public struct PostgreSQLInsert: SQLInsert {
2+
/// See `SQLInsert`.
3+
public static func insert(_ table: PostgreSQLTableIdentifier) -> PostgreSQLInsert {
4+
return .init(insert: .insert(table), returning: [])
5+
}
6+
7+
/// See `SQLInsert`.
8+
public typealias TableIdentifier = PostgreSQLTableIdentifier
9+
10+
/// See `SQLInsert`.
11+
public typealias ColumnIdentifier = PostgreSQLColumnIdentifier
12+
13+
/// See `SQLInsert`.
14+
public typealias Expression = PostgreSQLExpression
15+
16+
/// Root insert statement.
17+
private var insert: GenericSQLInsert<TableIdentifier, ColumnIdentifier, Expression>
18+
19+
/// `RETURNING *`
20+
public var returning: [PostgreSQLSelectExpression]
21+
22+
/// See `SQLInsert`.
23+
public var columns: [PostgreSQLColumnIdentifier] {
24+
get { return insert.columns }
25+
set { insert.columns = newValue }
26+
}
27+
28+
/// See `SQLInsert`.
29+
public var values: [[PostgreSQLExpression]] {
30+
get { return insert.values }
31+
set { insert.values = newValue}
32+
}
33+
34+
/// See `SQLSerializable`.
35+
public func serialize(_ binds: inout [Encodable]) -> String {
36+
if returning.isEmpty {
37+
return insert.serialize(&binds)
38+
} else {
39+
return insert.serialize(&binds) + " RETURNING (" + returning.serialize(&binds) + ")"
40+
}
41+
}
42+
}
43+
44+
extension SQLInsertBuilder where Connection.Query.Insert == PostgreSQLInsert {
45+
public func returning(_ exprs: PostgreSQLSelectExpression...) -> Self {
46+
insert.returning += exprs
47+
return self
48+
}
49+
}

0 commit comments

Comments
 (0)