@@ -1112,6 +1112,7 @@ pub enum EnumSource {
1112
1112
Enum ( Arc < Enum > ) ,
1113
1113
FilterIs ,
1114
1114
TableColumns ( Arc < Table > ) ,
1115
+ OnConflictTarget ( Arc < Table > ) ,
1115
1116
}
1116
1117
1117
1118
#[ derive( Clone , Debug , Eq , PartialEq , Hash ) ]
@@ -1429,40 +1430,43 @@ impl ___Type for MutationType {
1429
1430
let table_base_type_name = self . schema . graphql_table_base_type_name ( table) ;
1430
1431
1431
1432
if self . schema . graphql_table_insert_types_are_valid ( table) {
1433
+ let mut args = vec ! [ __InputValue {
1434
+ name_: "objects" . to_string( ) ,
1435
+ type_: __Type:: NonNull ( NonNullType {
1436
+ type_: Box :: new( __Type:: List ( ListType {
1437
+ type_: Box :: new( __Type:: NonNull ( NonNullType {
1438
+ type_: Box :: new( __Type:: InsertInput ( InsertInputType {
1439
+ table: Arc :: clone( table) ,
1440
+ schema: Arc :: clone( & self . schema) ,
1441
+ } ) ) ,
1442
+ } ) ) ,
1443
+ } ) ) ,
1444
+ } ) ,
1445
+ description: None ,
1446
+ default_value: None ,
1447
+ sql_type: None ,
1448
+ } ] ;
1449
+
1450
+ if table. has_upsert_support ( ) {
1451
+ args. push ( __InputValue {
1452
+ name_ : "onConflict" . to_string ( ) ,
1453
+ type_ : __Type:: InsertOnConflictInput ( InsertOnConflictType {
1454
+ table : Arc :: clone ( table) ,
1455
+ schema : Arc :: clone ( & self . schema ) ,
1456
+ } ) ,
1457
+ description : None ,
1458
+ default_value : None ,
1459
+ sql_type : None ,
1460
+ } ) ;
1461
+ }
1462
+
1432
1463
f. push ( __Field {
1433
1464
name_ : format ! ( "insertInto{}Collection" , table_base_type_name) ,
1434
1465
type_ : __Type:: InsertResponse ( InsertResponseType {
1435
1466
table : Arc :: clone ( table) ,
1436
1467
schema : Arc :: clone ( & self . schema ) ,
1437
1468
} ) ,
1438
- args : vec ! [
1439
- __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
- __InputValue {
1456
- name_: "onConflict" . to_string( ) ,
1457
- type_: __Type:: InsertOnConflictInput ( InsertOnConflictType {
1458
- table: Arc :: clone( table) ,
1459
- schema: Arc :: clone( & self . schema) ,
1460
- } ) ,
1461
- description: None ,
1462
- default_value: None ,
1463
- sql_type: None ,
1464
- } ,
1465
- ] ,
1469
+ args,
1466
1470
description : Some ( format ! (
1467
1471
"Adds one or more `{}` records to the collection" ,
1468
1472
table_base_type_name
@@ -1654,6 +1658,10 @@ impl ___Type for EnumType {
1654
1658
"{}Field" ,
1655
1659
self . schema. graphql_table_base_type_name( & table)
1656
1660
) ) ,
1661
+ EnumSource :: OnConflictTarget ( table) => Some ( format ! (
1662
+ "{}OnConflictConstraint" ,
1663
+ self . schema. graphql_table_base_type_name( & table)
1664
+ ) ) ,
1657
1665
}
1658
1666
}
1659
1667
@@ -1703,6 +1711,18 @@ impl ___Type for EnumType {
1703
1711
deprecation_reason : None ,
1704
1712
} )
1705
1713
. collect ( ) ,
1714
+ EnumSource :: OnConflictTarget ( table) => {
1715
+ table
1716
+ . on_conflict_indexes ( )
1717
+ . iter ( )
1718
+ . map ( |ix| __EnumValue {
1719
+ // TODO, apply name restrictions
1720
+ name : ix. name . clone ( ) ,
1721
+ description : None ,
1722
+ deprecation_reason : None ,
1723
+ } )
1724
+ . collect ( )
1725
+ }
1706
1726
} )
1707
1727
}
1708
1728
}
@@ -3159,13 +3179,9 @@ impl ___Type for InsertOnConflictType {
3159
3179
// If triggers are involved, we can't detect if a field is non-null. Default
3160
3180
// all fields to non-null and let postgres errors handle it.
3161
3181
type_: __Type:: NonNull ( NonNullType {
3162
- type_: Box :: new( __Type:: List ( ListType {
3163
- type_: Box :: new( __Type:: NonNull ( NonNullType {
3164
- type_: Box :: new( __Type:: Enum ( EnumType {
3165
- enum_: EnumSource :: TableColumns ( Arc :: clone( & self . table) ) ,
3166
- schema: Arc :: clone( & self . schema) ,
3167
- } ) ) ,
3168
- } ) ) ,
3182
+ type_: Box :: new( __Type:: Enum ( EnumType {
3183
+ enum_: EnumSource :: OnConflictTarget ( Arc :: clone( & self . table) ) ,
3184
+ schema: Arc :: clone( & self . schema) ,
3169
3185
} ) ) ,
3170
3186
} ) ,
3171
3187
description: Some (
@@ -4141,15 +4157,22 @@ impl __Schema {
4141
4157
table : Arc :: clone ( table) ,
4142
4158
schema : Arc :: clone ( & schema_rc) ,
4143
4159
} ) ) ;
4144
- // Used by on conflict
4145
- types_. push ( __Type:: Enum ( EnumType {
4146
- enum_ : EnumSource :: TableColumns ( Arc :: clone ( table) ) ,
4147
- schema : Arc :: clone ( & schema_rc) ,
4148
- } ) ) ;
4149
- types_. push ( __Type:: InsertOnConflictInput ( InsertOnConflictType {
4150
- table : Arc :: clone ( table) ,
4151
- schema : Arc :: clone ( & schema_rc) ,
4152
- } ) ) ;
4160
+
4161
+ // Used exclusively by onConflict
4162
+ if table. has_upsert_support ( ) {
4163
+ types_. push ( __Type:: InsertOnConflictInput ( InsertOnConflictType {
4164
+ table : Arc :: clone ( table) ,
4165
+ schema : Arc :: clone ( & schema_rc) ,
4166
+ } ) ) ;
4167
+ types_. push ( __Type:: Enum ( EnumType {
4168
+ enum_ : EnumSource :: TableColumns ( Arc :: clone ( table) ) ,
4169
+ schema : Arc :: clone ( & schema_rc) ,
4170
+ } ) ) ;
4171
+ types_. push ( __Type:: Enum ( EnumType {
4172
+ enum_ : EnumSource :: OnConflictTarget ( Arc :: clone ( table) ) ,
4173
+ schema : Arc :: clone ( & schema_rc) ,
4174
+ } ) ) ;
4175
+ }
4153
4176
}
4154
4177
4155
4178
if self . graphql_table_update_types_are_valid ( table) {
0 commit comments