Skip to content

Fix dictionary value nullability for generated KeyValuePair types#9201

Merged
michaelstaib merged 5 commits intomainfrom
mst/issue-5470
Feb 25, 2026
Merged

Fix dictionary value nullability for generated KeyValuePair types#9201
michaelstaib merged 5 commits intomainfrom
mst/issue-5470

Conversation

@michaelstaib
Copy link
Copy Markdown
Member

@michaelstaib michaelstaib commented Feb 24, 2026

Summary

  • preserve dictionary key/value nullability when rewriting collection element types to KeyValuePair<TKey, TValue>
  • fix ExtendedType.ChangeNullability position tracking on cache hits so generic nullability flags are applied to the correct type arguments
  • infer dedicated KeyValuePair input/output types with field types bound to the inferred key/value IExtendedType
  • add regression tests for Dictionary<string, string?> input and output schema generation

Fixes #5470

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Feb 25, 2026

Fusion Gateway Performance Results

Simple Composite Query

Req/s Err%
Constant (50 VUs) 6929.64 0.00%
Ramping (0-500-0 VUs) 7316.20 0.00%
Response Times & Query
Min Med Avg P90 P95 Max
Constant 0.57ms 5.92ms 7.07ms 10.99ms 15.80ms 177.31ms
Ramping 0.63ms 24.82ms 30.15ms 63.18ms 75.14ms 193.26ms
query TestQuery {
  topProducts(first: 5) {
    inStock
    name
    price
    shippingEstimate
    upc
    weight
    reviews {
      id
      body
      author {
        id
        username
        name
      }
    }
  }
}

Deep Recursion Query

Req/s Err%
Constant (50 VUs) 1295.96 0.00%
Ramping (0-500-0 VUs) 1357.17 0.00%
Response Times & Query
Min Med Avg P90 P95 Max
Constant 4.55ms 34.03ms 37.47ms 51.44ms 60.49ms 352.59ms
Ramping 1.81ms 129.29ms 156.90ms 344.10ms 392.99ms 723.82ms
query TestQuery {
  users {
    id
    username
    name
    reviews {
      id
      body
      product {
        inStock
        name
        price
        shippingEstimate
        upc
        weight
        reviews {
          id
          body
          author {
            id
            username
            name
            reviews {
              id
              body
              product {
                inStock
                name
                price
                shippingEstimate
                upc
                weight
              }
            }
          }
        }
      }
    }
  }
  topProducts(first: 5) {
    inStock
    name
    price
    shippingEstimate
    upc
    weight
    reviews {
      id
      body
      author {
        id
        username
        name
        reviews {
          id
          body
          product {
            inStock
            name
            price
            shippingEstimate
            upc
            weight
          }
        }
      }
    }
  }
}

Variable Batching Throughput

Req/s Err%
Constant (50 VUs) 23532.00 0.00%
Ramping (0-500-0 VUs) 18406.36 0.00%
Response Times & Query
Min Med Avg P90 P95 Max
Constant 0.08ms 1.73ms 2.08ms 3.99ms 4.83ms 38.22ms
Ramping 0.08ms 9.44ms 11.47ms 23.66ms 28.50ms 127.42ms
query TestQuery($upc: ID!, $price: Long!, $weight: Long!) {
  productByUpc(upc: $upc) {
    inStock
    shippingEstimate(weight: $weight, price: $price)
  }
}

Variables (5 sets batched per request)

[
  { "upc": "1", "price": 899, "weight": 100 },
  { "upc": "2", "price": 1299, "weight": 1000 },
  { "upc": "3", "price": 15, "weight": 20 },
  { "upc": "4", "price": 499, "weight": 100 },
  { "upc": "5", "price": 1299, "weight": 1000 }
]

Run 22394727810 • Commit 1baf19c • Wed, 25 Feb 2026 13:18:41 GMT

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Nullability of reference type dictionary values is not correctly translated to schema

1 participant