@@ -1110,6 +1110,7 @@ pub enum EnumSource {
11101110 Enum ( Arc < Enum > ) ,
11111111 FilterIs ,
11121112 TableColumns ( Arc < Table > ) ,
1113+ OnConflictTarget ( Arc < Table > ) ,
11131114}
11141115
11151116#[ derive( Clone , Debug , Eq , PartialEq , Hash ) ]
@@ -1435,40 +1436,43 @@ impl ___Type for MutationType {
14351436 let table_base_type_name = self . schema . graphql_table_base_type_name ( table) ;
14361437
14371438 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+
14381469 f. push ( __Field {
14391470 name_ : format ! ( "insertInto{}Collection" , table_base_type_name) ,
14401471 type_ : __Type:: InsertResponse ( InsertResponseType {
14411472 table : Arc :: clone ( table) ,
14421473 schema : Arc :: clone ( & self . schema ) ,
14431474 } ) ,
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,
14721476 description : Some ( format ! (
14731477 "Adds one or more `{}` records to the collection" ,
14741478 table_base_type_name
@@ -1660,6 +1664,10 @@ impl ___Type for EnumType {
16601664 "{}Field" ,
16611665 self . schema. graphql_table_base_type_name( & table)
16621666 ) ) ,
1667+ EnumSource :: OnConflictTarget ( table) => Some ( format ! (
1668+ "{}OnConflictConstraint" ,
1669+ self . schema. graphql_table_base_type_name( & table)
1670+ ) ) ,
16631671 }
16641672 }
16651673
@@ -1709,6 +1717,18 @@ impl ___Type for EnumType {
17091717 deprecation_reason : None ,
17101718 } )
17111719 . 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+ }
17121732 } )
17131733 }
17141734}
@@ -3166,13 +3186,9 @@ impl ___Type for InsertOnConflictType {
31663186 // If triggers are involved, we can't detect if a field is non-null. Default
31673187 // all fields to non-null and let postgres errors handle it.
31683188 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) ,
31763192 } ) ) ,
31773193 } ) ,
31783194 description: Some (
@@ -4275,15 +4291,22 @@ impl __Schema {
42754291 table : Arc :: clone ( table) ,
42764292 schema : Arc :: clone ( & schema_rc) ,
42774293 } ) ) ;
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+ }
42874310 }
42884311
42894312 if self . graphql_table_update_types_are_valid ( table) {
0 commit comments