data-api-builder icon indicating copy to clipboard operation
data-api-builder copied to clipboard

[Bug]: Fragments not supported with any of Connection fields such as items or pagination

Open vadeveka opened this issue 3 months ago • 0 comments

What happened?

Using fragments for the cursor fields results in error.

{
    books (first: 2) {
        items {
            id
            publisher_id
        }
        ...cursorFields
    }
}

fragment cursorFields on BooksConnection {
    hasNextPage
    endCursor
}

Error thrown

{
  "errors": [
    {
      "message": "Unable to cast object of type 'HotChocolate.Language.FragmentSpreadNode' to type 'HotChocolate.Language.FieldNode'.",
      "locations": [
        {
          "line": 2,
          "column": 5
        }
      ],
      "path": [
        "books"
      ],
      "extensions": {
        "exception": {
          "message": "Unable to cast object of type 'HotChocolate.Language.FragmentSpreadNode' to type 'HotChocolate.Language.FieldNode'.",
          "stackTrace": "   at Azure.DataApiBuilder.Core.Resolvers.SqlQueryStructure.ProcessPaginationFields(IReadOnlyList`1 paginationSelections) in Q:\\Repos\\data-api-builder\\src\\Core\\Resolvers\\Sql Query Structures\\SqlQueryStructure.cs:line 703\r\n   at Azure.DataApiBuilder.Core.Resolvers.SqlQueryStructure..ctor(IMiddlewareContext ctx, IDictionary`2 queryParams, ISqlMetadataProvider sqlMetadataProvider, IAuthorizationResolver authorizationResolver, ObjectField schemaField, FieldNode queryField, IncrementingInteger counter, RuntimeConfigProvider runtimeConfigProvider, GQLFilterParser gQLFilterParser, String entityName) in Q:\\Repos\\data-api-builder\\src\\Core\\Resolvers\\Sql Query Structures\\SqlQueryStructure.cs:line 420\r\n   at Azure.DataApiBuilder.Core.Resolvers.SqlQueryStructure..ctor(IMiddlewareContext ctx, IDictionary`2 queryParams, ISqlMetadataProvider sqlMetadataProvider, IAuthorizationResolver authorizationResolver, RuntimeConfigProvider runtimeConfigProvider, GQLFilterParser gQLFilterParser) in Q:\\Repos\\data-api-builder\\src\\Core\\Resolvers\\Sql Query Structures\\SqlQueryStructure.cs:line 124\r\n   at Azure.DataApiBuilder.Core.Resolvers.SqlQueryEngine.ExecuteAsync(IMiddlewareContext context, IDictionary`2 parameters, String dataSourceName) in Q:\\Repos\\data-api-builder\\src\\Core\\Resolvers\\SqlQueryEngine.cs:line 74\r\n   at Azure.DataApiBuilder.Service.Services.ExecutionHelper.ExecuteQueryAsync(IMiddlewareContext context) in Q:\\Repos\\data-api-builder\\src\\Core\\Services\\ExecutionHelper.cs:line 89\r\n   at ResolverTypeInterceptor.<>c__DisplayClass8_1.<<-ctor>b__2>d.MoveNext() in Q:\\Repos\\data-api-builder\\src\\Core\\Services\\ResolverTypeInterceptor.cs:line 28\r\n--- End of stack trace from previous location ---\r\n   at HotChocolate.Authorization.AuthorizeMiddleware.InvokeAsync(IMiddlewareContext context)\r\n   at HotChocolate.Authorization.AuthorizeDirectiveType.<>c__DisplayClass3_0.<<CreateMiddleware>b__1>d.MoveNext()\r\n--- End of stack trace from previous location ---\r\n   at HotChocolate.Execution.Processing.Tasks.ResolverTask.ExecuteResolverPipelineAsync(CancellationToken cancellationToken)\r\n   at HotChocolate.Execution.Processing.Tasks.ResolverTask.TryExecuteAsync(CancellationToken cancellationToken)"
        }
      }
    }
  ],
  "data": null
}

It also doesnt work with sample query like below

{
    books (first: 2) {
        ...cursorFields
    }
}

fragment cursorFields on BooksConnection {
    items {
        id
        publisher_id
    }
}

Version

1.5.56

What database are you using?

Azure SQL

What hosting model are you using?

No response

Which API approach are you accessing DAB through?

No response

Relevant log output


Code of Conduct

  • [x] I agree to follow this project's Code of Conduct

vadeveka avatar Oct 08 '25 22:10 vadeveka