Skip to content

Commit 4b046c8

Browse files
committed
<table>Column typess - towards onConflict clause
1 parent 814057f commit 4b046c8

File tree

2 files changed

+53
-14
lines changed

2 files changed

+53
-14
lines changed

src/graphql.rs

Lines changed: 51 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1095,6 +1095,7 @@ impl ConnectionType {
10951095
pub enum EnumSource {
10961096
Enum(Arc<Enum>),
10971097
FilterIs,
1098+
TableColumns(Arc<Table>),
10981099
}
10991100

11001101
#[derive(Clone, Debug, Eq, PartialEq, Hash)]
@@ -1426,22 +1427,40 @@ impl ___Type for MutationType {
14261427
table: Arc::clone(table),
14271428
schema: Arc::clone(&self.schema),
14281429
}),
1429-
args: vec![__InputValue {
1430-
name_: "objects".to_string(),
1431-
type_: __Type::NonNull(NonNullType {
1432-
type_: Box::new(__Type::List(ListType {
1433-
type_: Box::new(__Type::NonNull(NonNullType {
1434-
type_: Box::new(__Type::InsertInput(InsertInputType {
1435-
table: Arc::clone(table),
1436-
schema: Arc::clone(&self.schema),
1430+
args: vec![
1431+
__InputValue {
1432+
name_: "objects".to_string(),
1433+
type_: __Type::NonNull(NonNullType {
1434+
type_: Box::new(__Type::List(ListType {
1435+
type_: Box::new(__Type::NonNull(NonNullType {
1436+
type_: Box::new(__Type::InsertInput(InsertInputType {
1437+
table: Arc::clone(table),
1438+
schema: Arc::clone(&self.schema),
1439+
})),
14371440
})),
14381441
})),
1439-
})),
1440-
}),
1441-
description: None,
1442-
default_value: None,
1443-
sql_type: None,
1444-
}],
1442+
}),
1443+
description: None,
1444+
default_value: None,
1445+
sql_type: None,
1446+
},
1447+
__InputValue {
1448+
name_: "update".to_string(),
1449+
type_: __Type::NonNull(NonNullType {
1450+
type_: Box::new(__Type::List(ListType {
1451+
type_: Box::new(__Type::NonNull(NonNullType {
1452+
type_: Box::new(__Type::InsertInput(InsertInputType {
1453+
table: Arc::clone(table),
1454+
schema: Arc::clone(&self.schema),
1455+
})),
1456+
})),
1457+
})),
1458+
}),
1459+
description: None,
1460+
default_value: None,
1461+
sql_type: None,
1462+
},
1463+
],
14451464
description: Some(format!(
14461465
"Adds one or more `{}` records to the collection",
14471466
table_base_type_name
@@ -1629,6 +1648,10 @@ impl ___Type for EnumType {
16291648
)
16301649
}
16311650
EnumSource::FilterIs => Some("FilterIs".to_string()),
1651+
EnumSource::TableColumns(table) => Some(format!(
1652+
"{}Field",
1653+
self.schema.graphql_table_base_type_name(&table)
1654+
)),
16321655
}
16331656
}
16341657

@@ -1667,6 +1690,15 @@ impl ___Type for EnumType {
16671690
},
16681691
]
16691692
}
1693+
EnumSource::TableColumns(table) => table
1694+
.columns
1695+
.iter()
1696+
.map(|col| __EnumValue {
1697+
name: self.schema.graphql_column_field_name(col),
1698+
description: None,
1699+
deprecation_reason: None,
1700+
})
1701+
.collect(),
16701702
})
16711703
}
16721704
}
@@ -4160,6 +4192,11 @@ impl __Schema {
41604192
table: Arc::clone(table),
41614193
schema: Arc::clone(&schema_rc),
41624194
}));
4195+
// Used by on conflict
4196+
types_.push(__Type::Enum(EnumType {
4197+
enum_: EnumSource::TableColumns(Arc::clone(table)),
4198+
schema: Arc::clone(&schema_rc),
4199+
}));
41634200
}
41644201

41654202
if self.graphql_table_update_types_are_valid(table) {

src/parser_util.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,8 @@ pub fn validate_arg_from_type(type_: &__Type, value: &gson::Value) -> Result<gso
412412
.map(|val| GsonValue::String(val.clone()))
413413
.unwrap_or_else(|| value.clone()),
414414
EnumSource::FilterIs => value.clone(),
415+
// TODO(or): Do I need to check directives here?
416+
EnumSource::TableColumns(_e) => value.clone(),
415417
}
416418
}
417419
None => return Err(format!("Invalid input for {} type", enum_name)),

0 commit comments

Comments
 (0)