@@ -426,7 +426,6 @@ FieldsInSetCanMerge(set):
426
426
427
427
SameResponseShape(fieldA, fieldB):
428
428
429
- <<<<<<< HEAD
430
429
- Let {typeA} be the return type of {fieldA}.
431
430
- Let {typeB} be the return type of {fieldB}.
432
431
- If {typeA} or {typeB} is Non-Null.
@@ -449,34 +448,6 @@ SameResponseShape(fieldA, fieldB):
449
448
- Given each pair of members {subfieldA} and {subfieldB} in {fieldsForName}:
450
449
- If {SameResponseShape(subfieldA, subfieldB)} is false, return false.
451
450
- Return true.
452
- =======
453
- * Let {typeA} be the return type of {fieldA}.
454
- * Let {typeB} be the return type of {fieldB}.
455
- * Let {fieldARequiredStatus} be the required status of {fieldA}
456
- * Let {fieldBRequiredStatus} be the required status of {fieldB}
457
- * Let {typeA} be the result of {ModifiedOutputType(typeA, fieldARequiredStatus)}
458
- * Let {typeB} be the result of {ModifiedOutputType(typeB, fieldBRequiredStatus)}
459
- * If {typeA} or {typeB} is Non-Null.
460
- * If {typeA} or {typeB} is nullable, return false.
461
- * Let {typeA} be the nullable type of {typeA}
462
- * Let {typeB} be the nullable type of {typeB}
463
- * If {typeA} or {typeB} is List.
464
- * If {typeA} or {typeB} is not List, return false.
465
- * Let {typeA} be the item type of {typeA}
466
- * Let {typeB} be the item type of {typeB}
467
- * Repeat from step 3.
468
- * If {typeA} or {typeB} is Scalar or Enum.
469
- * If {typeA} and {typeB} are the same type return true, otherwise return
470
- false.
471
- * Assert: {typeA} and {typeB} are both composite types.
472
- * Let {mergedSet} be the result of adding the selection set of {fieldA} and
473
- the selection set of {fieldB}.
474
- * Let {fieldsForName} be the set of selections with a given response name in
475
- {mergedSet} including visiting fragments and inline fragments.
476
- * Given each pair of members {subfieldA} and {subfieldB} in {fieldsForName}:
477
- * If {SameResponseShape(subfieldA, subfieldB)} is false, return false.
478
- * Return true.
479
- >>>>>>> 9906241 (errors and validation formal definitions)
480
451
481
452
** Explanatory Text**
482
453
@@ -608,6 +579,27 @@ fragment conflictingDifferingResponses on Pet {
608
579
}
609
580
```
610
581
582
+ ### Client Controlled Nullability Designator List Dimensions
583
+
584
+ ** Formal Specification**
585
+
586
+ * For each {field} in the document
587
+ * Let {fieldDef} be the definition of {field}
588
+ * Let {fieldType} be the type of {fieldDef}
589
+ * Let {requiredStatus} be the required status of {field}
590
+ * Let {designatorDepth} be the number of square bracket pairs in {requiredStatus}
591
+ * Let {typeDepth} be the number of list dimensions in {fieldType}
592
+ * If {typeDepth} equals {designatorDepth} return true
593
+ * Otherwise return false
594
+
595
+ ** Explanatory Text**
596
+
597
+ List fields can be marked with nullability designators that look like ` [?]! ` to indicate the
598
+ nullability of the list's elements and the nullability of the list itself. For multi-dimensional
599
+ lists, the designator would look something like ` [[[!]?]]! ` . The number of dimensions of the
600
+ designator are required to match the number of dimensions of the field's type. If the two do not
601
+ match then a validation error is thrown.
602
+
611
603
### Leaf Field Selections
612
604
613
605
** Formal Specification**
0 commit comments