@@ -30,17 +30,18 @@ type Postgres struct {
3030// New postgres adapter using existing connection.
3131func New (database * db.DB ) rel.Adapter {
3232 var (
33- bufferFactory = builder.BufferFactory {ArgumentPlaceholder : "$" , ArgumentOrdinal : true , BoolTrueValue : "true" , BoolFalseValue : "false" , Quoter : Quote {}, ValueConverter : ValueConvert {}}
34- filterBuilder = builder.Filter {}
35- queryBuilder = builder.Query {BufferFactory : bufferFactory , Filter : filterBuilder }
36- InsertBuilder = builder.Insert {BufferFactory : bufferFactory , ReturningPrimaryValue : true , InsertDefaultValues : true }
37- insertAllBuilder = builder.InsertAll {BufferFactory : bufferFactory , ReturningPrimaryValue : true }
38- updateBuilder = builder.Update {BufferFactory : bufferFactory , Query : queryBuilder , Filter : filterBuilder }
39- deleteBuilder = builder.Delete {BufferFactory : bufferFactory , Query : queryBuilder , Filter : filterBuilder }
40- ddlBufferFactory = builder.BufferFactory {InlineValues : true , BoolTrueValue : "true" , BoolFalseValue : "false" , Quoter : Quote {}, ValueConverter : ValueConvert {}}
41- ddlQueryBuilder = builder.Query {BufferFactory : ddlBufferFactory , Filter : filterBuilder }
42- tableBuilder = builder.Table {BufferFactory : ddlBufferFactory , ColumnMapper : columnMapper }
43- indexBuilder = builder.Index {BufferFactory : ddlBufferFactory , Query : ddlQueryBuilder , Filter : filterBuilder , SupportFilter : true }
33+ bufferFactory = builder.BufferFactory {ArgumentPlaceholder : "$" , ArgumentOrdinal : true , BoolTrueValue : "true" , BoolFalseValue : "false" , Quoter : Quote {}, ValueConverter : ValueConvert {}}
34+ filterBuilder = builder.Filter {}
35+ queryBuilder = builder.Query {BufferFactory : bufferFactory , Filter : filterBuilder }
36+ OnConflictBuilder = builder.OnConflict {Statement : "ON CONFLICT" , IgnoreStatement : "DO NOTHING" , UpdateStatement : "DO UPDATE SET" , TableQualifier : "excluded" , SupportKey : true }
37+ InsertBuilder = builder.Insert {BufferFactory : bufferFactory , ReturningPrimaryValue : true , InsertDefaultValues : true , OnConflict : OnConflictBuilder }
38+ insertAllBuilder = builder.InsertAll {BufferFactory : bufferFactory , ReturningPrimaryValue : true , OnConflict : OnConflictBuilder }
39+ updateBuilder = builder.Update {BufferFactory : bufferFactory , Query : queryBuilder , Filter : filterBuilder }
40+ deleteBuilder = builder.Delete {BufferFactory : bufferFactory , Query : queryBuilder , Filter : filterBuilder }
41+ ddlBufferFactory = builder.BufferFactory {InlineValues : true , BoolTrueValue : "true" , BoolFalseValue : "false" , Quoter : Quote {}, ValueConverter : ValueConvert {}}
42+ ddlQueryBuilder = builder.Query {BufferFactory : ddlBufferFactory , Filter : filterBuilder }
43+ tableBuilder = builder.Table {BufferFactory : ddlBufferFactory , ColumnMapper : columnMapper }
44+ indexBuilder = builder.Index {BufferFactory : ddlBufferFactory , Query : ddlQueryBuilder , Filter : filterBuilder , SupportFilter : true }
4445 )
4546
4647 return & Postgres {
@@ -72,10 +73,10 @@ func MustOpen(dsn string) rel.Adapter {
7273}
7374
7475// Insert inserts a record to database and returns its id.
75- func (p Postgres ) Insert (ctx context.Context , query rel.Query , primaryField string , mutates map [string ]rel.Mutate ) (interface {}, error ) {
76+ func (p Postgres ) Insert (ctx context.Context , query rel.Query , primaryField string , mutates map [string ]rel.Mutate , onConflict rel. OnConflict ) (interface {}, error ) {
7677 var (
7778 id int64
78- statement , args = p .InsertBuilder .Build (query .Table , primaryField , mutates )
79+ statement , args = p .InsertBuilder .Build (query .Table , primaryField , mutates , onConflict )
7980 rows , err = p .DoQuery (ctx , statement , args )
8081 )
8182
@@ -88,10 +89,10 @@ func (p Postgres) Insert(ctx context.Context, query rel.Query, primaryField stri
8889}
8990
9091// InsertAll inserts multiple records to database and returns its ids.
91- func (p Postgres ) InsertAll (ctx context.Context , query rel.Query , primaryField string , fields []string , bulkMutates []map [string ]rel.Mutate ) ([]interface {}, error ) {
92+ func (p Postgres ) InsertAll (ctx context.Context , query rel.Query , primaryField string , fields []string , bulkMutates []map [string ]rel.Mutate , onConflict rel. OnConflict ) ([]interface {}, error ) {
9293 var (
9394 ids []interface {}
94- statement , args = p .InsertAllBuilder .Build (query .Table , primaryField , fields , bulkMutates )
95+ statement , args = p .InsertAllBuilder .Build (query .Table , primaryField , fields , bulkMutates , onConflict )
9596 rows , err = p .DoQuery (ctx , statement , args )
9697 )
9798
0 commit comments