@@ -49,13 +49,26 @@ extension ConnectionPool: Database where Source.Connection: Database {
4949
5050extension PostgresError : DatabaseError { }
5151
52+ struct PostgresConverterDelegate : SQLConverterDelegate {
53+ func customDataType( _ dataType: DatabaseSchema . DataType ) -> SQLExpression ? {
54+ switch dataType {
55+ case . uuid: return SQLRaw ( " UUID " )
56+ default : return nil
57+ }
58+ }
59+ 60+ func nestedFieldExpression( _ column: String , _ path: [ String ] ) -> SQLExpression {
61+ return SQLRaw ( " \( column) ->>' \( path [ 0 ] ) ' " )
62+ }
63+ }
64+ 5265extension PostgresConnection : Database {
5366 public func transaction< T> ( _ closure: @escaping ( Database ) -> EventLoopFuture < T > ) -> EventLoopFuture < T > {
5467 return closure ( self )
5568 }
5669
5770 public func execute( _ query: DatabaseQuery , _ onOutput: @escaping ( DatabaseOutput ) throws -> ( ) ) -> EventLoopFuture < Void > {
58- var sql = SQLQueryConverter ( ) . convert ( query)
71+ var sql = SQLQueryConverter ( delegate : PostgresConverterDelegate ( ) ) . convert ( query)
5972 switch query. action {
6073 case . create:
6174 sql = PostgresReturning ( sql)
@@ -67,7 +80,7 @@ extension PostgresConnection: Database {
6780 }
6881
6982 public func execute( _ schema: DatabaseSchema ) -> EventLoopFuture < Void > {
70- return self . sqlQuery ( SQLSchemaConverter ( ) . convert ( schema) ) { row in
83+ return self . sqlQuery ( SQLSchemaConverter ( delegate : PostgresConverterDelegate ( ) ) . convert ( schema) ) { row in
7184 fatalError ( " unexpected output " )
7285 }
7386 }
@@ -86,6 +99,6 @@ private struct PostgresReturning: SQLExpression {
8699
87100 func serialize( to serializer: inout SQLSerializer ) {
88101 self . base. serialize ( to: & serializer)
89- serializer. write ( " RETURNING * " )
102+ serializer. write ( # " RETURNING id as "fluentID""# )
90103 }
91104}
0 commit comments