@@ -1110,6 +1110,7 @@ pub enum EnumSource {
1110
1110
Enum ( Arc < Enum > ) ,
1111
1111
FilterIs ,
1112
1112
TableColumns ( Arc < Table > ) ,
1113
+ OnConflictTarget ( Arc < Table > ) ,
1113
1114
}
1114
1115
1115
1116
#[ derive( Clone , Debug , Eq , PartialEq , Hash ) ]
@@ -1435,40 +1436,43 @@ impl ___Type for MutationType {
1435
1436
let table_base_type_name = self . schema . graphql_table_base_type_name ( table) ;
1436
1437
1437
1438
if self . schema . graphql_table_insert_types_are_valid ( table) {
1439
+ let mut args = vec ! [ __InputValue {
1440
+ name_: "objects" . to_string( ) ,
1441
+ type_: __Type:: NonNull ( NonNullType {
1442
+ type_: Box :: new( __Type:: List ( ListType {
1443
+ type_: Box :: new( __Type:: NonNull ( NonNullType {
1444
+ type_: Box :: new( __Type:: InsertInput ( InsertInputType {
1445
+ table: Arc :: clone( table) ,
1446
+ schema: Arc :: clone( & self . schema) ,
1447
+ } ) ) ,
1448
+ } ) ) ,
1449
+ } ) ) ,
1450
+ } ) ,
1451
+ description: None ,
1452
+ default_value: None ,
1453
+ sql_type: None ,
1454
+ } ] ;
1455
+
1456
+ if table. has_upsert_support ( ) {
1457
+ args. push ( __InputValue {
1458
+ name_ : "onConflict" . to_string ( ) ,
1459
+ type_ : __Type:: InsertOnConflictInput ( InsertOnConflictType {
1460
+ table : Arc :: clone ( table) ,
1461
+ schema : Arc :: clone ( & self . schema ) ,
1462
+ } ) ,
1463
+ description : None ,
1464
+ default_value : None ,
1465
+ sql_type : None ,
1466
+ } ) ;
1467
+ }
1468
+
1438
1469
f. push ( __Field {
1439
1470
name_ : format ! ( "insertInto{}Collection" , table_base_type_name) ,
1440
1471
type_ : __Type:: InsertResponse ( InsertResponseType {
1441
1472
table : Arc :: clone ( table) ,
1442
1473
schema : Arc :: clone ( & self . schema ) ,
1443
1474
} ) ,
1444
- args : vec ! [
1445
- __InputValue {
1446
- name_: "objects" . to_string( ) ,
1447
- type_: __Type:: NonNull ( NonNullType {
1448
- type_: Box :: new( __Type:: List ( ListType {
1449
- type_: Box :: new( __Type:: NonNull ( NonNullType {
1450
- type_: Box :: new( __Type:: InsertInput ( InsertInputType {
1451
- table: Arc :: clone( table) ,
1452
- schema: Arc :: clone( & self . schema) ,
1453
- } ) ) ,
1454
- } ) ) ,
1455
- } ) ) ,
1456
- } ) ,
1457
- description: None ,
1458
- default_value: None ,
1459
- sql_type: None ,
1460
- } ,
1461
- __InputValue {
1462
- name_: "onConflict" . to_string( ) ,
1463
- type_: __Type:: InsertOnConflictInput ( InsertOnConflictType {
1464
- table: Arc :: clone( table) ,
1465
- schema: Arc :: clone( & self . schema) ,
1466
- } ) ,
1467
- description: None ,
1468
- default_value: None ,
1469
- sql_type: None ,
1470
- } ,
1471
- ] ,
1475
+ args,
1472
1476
description : Some ( format ! (
1473
1477
"Adds one or more `{}` records to the collection" ,
1474
1478
table_base_type_name
@@ -1660,6 +1664,10 @@ impl ___Type for EnumType {
1660
1664
"{}Field" ,
1661
1665
self . schema. graphql_table_base_type_name( & table)
1662
1666
) ) ,
1667
+ EnumSource :: OnConflictTarget ( table) => Some ( format ! (
1668
+ "{}OnConflictConstraint" ,
1669
+ self . schema. graphql_table_base_type_name( & table)
1670
+ ) ) ,
1663
1671
}
1664
1672
}
1665
1673
@@ -1709,6 +1717,18 @@ impl ___Type for EnumType {
1709
1717
deprecation_reason : None ,
1710
1718
} )
1711
1719
. collect ( ) ,
1720
+ EnumSource :: OnConflictTarget ( table) => {
1721
+ table
1722
+ . on_conflict_indexes ( )
1723
+ . iter ( )
1724
+ . map ( |ix| __EnumValue {
1725
+ // TODO, apply name restrictions
1726
+ name : ix. name . clone ( ) ,
1727
+ description : None ,
1728
+ deprecation_reason : None ,
1729
+ } )
1730
+ . collect ( )
1731
+ }
1712
1732
} )
1713
1733
}
1714
1734
}
@@ -3166,13 +3186,9 @@ impl ___Type for InsertOnConflictType {
3166
3186
// If triggers are involved, we can't detect if a field is non-null. Default
3167
3187
// all fields to non-null and let postgres errors handle it.
3168
3188
type_: __Type:: NonNull ( NonNullType {
3169
- type_: Box :: new( __Type:: List ( ListType {
3170
- type_: Box :: new( __Type:: NonNull ( NonNullType {
3171
- type_: Box :: new( __Type:: Enum ( EnumType {
3172
- enum_: EnumSource :: TableColumns ( Arc :: clone( & self . table) ) ,
3173
- schema: Arc :: clone( & self . schema) ,
3174
- } ) ) ,
3175
- } ) ) ,
3189
+ type_: Box :: new( __Type:: Enum ( EnumType {
3190
+ enum_: EnumSource :: OnConflictTarget ( Arc :: clone( & self . table) ) ,
3191
+ schema: Arc :: clone( & self . schema) ,
3176
3192
} ) ) ,
3177
3193
} ) ,
3178
3194
description: Some (
@@ -4275,15 +4291,22 @@ impl __Schema {
4275
4291
table : Arc :: clone ( table) ,
4276
4292
schema : Arc :: clone ( & schema_rc) ,
4277
4293
} ) ) ;
4278
- // Used by on conflict
4279
- types_. push ( __Type:: Enum ( EnumType {
4280
- enum_ : EnumSource :: TableColumns ( Arc :: clone ( table) ) ,
4281
- schema : Arc :: clone ( & schema_rc) ,
4282
- } ) ) ;
4283
- types_. push ( __Type:: InsertOnConflictInput ( InsertOnConflictType {
4284
- table : Arc :: clone ( table) ,
4285
- schema : Arc :: clone ( & schema_rc) ,
4286
- } ) ) ;
4294
+
4295
+ // Used exclusively by onConflict
4296
+ if table. has_upsert_support ( ) {
4297
+ types_. push ( __Type:: InsertOnConflictInput ( InsertOnConflictType {
4298
+ table : Arc :: clone ( table) ,
4299
+ schema : Arc :: clone ( & schema_rc) ,
4300
+ } ) ) ;
4301
+ types_. push ( __Type:: Enum ( EnumType {
4302
+ enum_ : EnumSource :: TableColumns ( Arc :: clone ( table) ) ,
4303
+ schema : Arc :: clone ( & schema_rc) ,
4304
+ } ) ) ;
4305
+ types_. push ( __Type:: Enum ( EnumType {
4306
+ enum_ : EnumSource :: OnConflictTarget ( Arc :: clone ( table) ) ,
4307
+ schema : Arc :: clone ( & schema_rc) ,
4308
+ } ) ) ;
4309
+ }
4287
4310
}
4288
4311
4289
4312
if self . graphql_table_update_types_are_valid ( table) {
0 commit comments