Skip to content

Commit 8787df0

Browse files
committed
<table>Column typess - towards onConflict clause
1 parent d11f9a0 commit 8787df0

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
@@ -1097,6 +1097,7 @@ impl ConnectionType {
10971097
pub enum EnumSource {
10981098
Enum(Arc<Enum>),
10991099
FilterIs,
1100+
TableColumns(Arc<Table>),
11001101
}
11011102

11021103
#[derive(Clone, Debug, Eq, PartialEq, Hash)]
@@ -1410,22 +1411,40 @@ impl ___Type for MutationType {
14101411
table: Arc::clone(table),
14111412
schema: Arc::clone(&self.schema),
14121413
}),
1413-
args: vec![__InputValue {
1414-
name_: "objects".to_string(),
1415-
type_: __Type::NonNull(NonNullType {
1416-
type_: Box::new(__Type::List(ListType {
1417-
type_: Box::new(__Type::NonNull(NonNullType {
1418-
type_: Box::new(__Type::InsertInput(InsertInputType {
1419-
table: Arc::clone(table),
1420-
schema: Arc::clone(&self.schema),
1414+
args: vec![
1415+
__InputValue {
1416+
name_: "objects".to_string(),
1417+
type_: __Type::NonNull(NonNullType {
1418+
type_: Box::new(__Type::List(ListType {
1419+
type_: Box::new(__Type::NonNull(NonNullType {
1420+
type_: Box::new(__Type::InsertInput(InsertInputType {
1421+
table: Arc::clone(table),
1422+
schema: Arc::clone(&self.schema),
1423+
})),
14211424
})),
14221425
})),
1423-
})),
1424-
}),
1425-
description: None,
1426-
default_value: None,
1427-
sql_type: None,
1428-
}],
1426+
}),
1427+
description: None,
1428+
default_value: None,
1429+
sql_type: None,
1430+
},
1431+
__InputValue {
1432+
name_: "update".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+
})),
1440+
})),
1441+
})),
1442+
}),
1443+
description: None,
1444+
default_value: None,
1445+
sql_type: None,
1446+
},
1447+
],
14291448
description: Some(format!(
14301449
"Adds one or more `{}` records to the collection",
14311450
table_base_type_name
@@ -1613,6 +1632,10 @@ impl ___Type for EnumType {
16131632
)
16141633
}
16151634
EnumSource::FilterIs => Some("FilterIs".to_string()),
1635+
EnumSource::TableColumns(table) => Some(format!(
1636+
"{}Field",
1637+
self.schema.graphql_table_base_type_name(&table)
1638+
)),
16161639
}
16171640
}
16181641

@@ -1651,6 +1674,15 @@ impl ___Type for EnumType {
16511674
},
16521675
]
16531676
}
1677+
EnumSource::TableColumns(table) => table
1678+
.columns
1679+
.iter()
1680+
.map(|col| __EnumValue {
1681+
name: self.schema.graphql_column_field_name(col),
1682+
description: None,
1683+
deprecation_reason: None,
1684+
})
1685+
.collect(),
16541686
})
16551687
}
16561688
}
@@ -4016,6 +4048,11 @@ impl __Schema {
40164048
table: Arc::clone(table),
40174049
schema: Arc::clone(&schema_rc),
40184050
}));
4051+
// Used by on conflict
4052+
types_.push(__Type::Enum(EnumType {
4053+
enum_: EnumSource::TableColumns(Arc::clone(table)),
4054+
schema: Arc::clone(&schema_rc),
4055+
}));
40194056
}
40204057

40214058
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)