Skip to content

[Bug]: GraphQL query execution fails after dab update #2266

@evacotelin

Description

@evacotelin

What happened?

We have the following GraphQL schema file:

type AppReport @model {
  id: ID
  description: String
  reportType: String
  reportSubType: String
  status: String
  latitude: Float
  longitude: Float
  created: DateTime
  createdBy: String
  createdById: String
  approved: Boolean
  approvedBy: String
  approvedDate: DateTime
  attachments: [ReportAttachment]
  deleted: Boolean
  emailSent: Boolean
  caseResolutionText: String
}

type ReportAttachment {
  id: ID
  type: String
  url: String
  latitude: Float
  longitude: Float
}

type UserAction @model {
  id: ID
  reportId: String
  type: String
  created: DateTime
  createdBy: String
  createdById: String
  confirmed: Boolean
  confirmedBy: String
  confirmedDate: DateTime
  content: String
  deleted: Boolean
  caseResolutionText: String
}

type UserSubscription @model {
  id: ID
  _ts: String
  userId: String
  subscriptionType: String
  registrationType: String
  registrationId: String
  areaId: String
}

And the following config file:

{
  "$schema": "https://github.com/Azure/data-api-builder/releases/download/v1.1.7/dab.draft.schema.json",
  "data-source": {
    "database-type": "cosmosdb_nosql",
    "connection-string": "@env('DB_CONNECTION_STRING')",
    "options": {
      "database": "ecovocegql",
      "schema": "staticwebapp.database.schema.gql"
    }
  },
  "runtime": {
    "graphql": {
      "enabled": true,
      "path": "/graphql"
    },
    "host": {
      "cors": {
        "origins": ["*"],
        "allow-credentials": false
      },
      "authentication": {
        "provider": "StaticWebApps"
      },
      "mode": "production"
    }
  },
  "entities": {
    "AppReport": {
      "source": "reports",
      "graphql": true,
      "permissions": [
        {
          "role": "anonymous",
          "actions": ["*"]
        }
      ]
    },
    "UserAction": {
      "graphql": true,
      "source": "actions",
      "permissions": [
        {
          "role": "anonymous",
          "actions": ["*"]
        }
      ]
    },
    "UserSubscription": {
      "graphql": true,
      "source": "subscriptions",
      "permissions": [
        {
          "role": "anonymous",
          "actions": ["*"]
        }
      ]
    }
  }
}

After the dab update, when executing a getReports query, we get this error: "The given key 'ReportAttachment' was not present in the dictionary."
This used to work before the update, now there is some sort of validation that requires the nested 'ReportAttachment' field to be not empty, which is not always the case.

Version

1.1.7+74ea6c5f37f8629fd7f8b13fc56027bf0bf0a93a

What database are you using?

CosmosDB NoSQL

What hosting model are you using?

Static Web Apps (SWA)

Which API approach are you accessing DAB through?

GraphQL

Relevant log output

fail: Azure.DataApiBuilder.Service.Startup[0]
      A GraphQL request execution error occurred.
      System.Collections.Generic.KeyNotFoundException: The given key 'ReportAttachment' was not present in the dictionary.
         at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
         at Azure.DataApiBuilder.Core.Authorization.AuthorizationResolver.GetDBPolicyForRequest(String entityName, String roleName, EntityActionOperation operation) in /_/src/Core/Authorization/AuthorizationResolver.cs:line 201
         at Azure.DataApiBuilder.Core.Authorization.AuthorizationResolver.ProcessDBPolicy(String entityName, String roleName, EntityActionOperation operation, HttpContext httpContext) in /_/src/Core/Authorization/AuthorizationResolver.cs:line 188
         at Azure.DataApiBuilder.Core.Resolvers.AuthorizationPolicyHelpers.ProcessFilter(HttpContext context, IAuthorizationResolver authorizationResolver, ISqlMetadataProvider sqlMetadataProvider, String clientRoleHeader, List`1 elementalOperations, String entityName, DatabaseObject entityDBObject, Action`2 postProcessCallback) in /_/src/Core/Resolvers/AuthorizationPolicyHelpers.cs:line 161
         at Azure.DataApiBuilder.Core.Resolvers.AuthorizationPolicyHelpers.ProcessAuthorizationPolicies(EntityActionOperation operationType, BaseQueryStructure queryStructure, HttpContext context, IAuthorizationResolver authorizationResolver, ISqlMetadataProvider sqlMetadataProvider) in /_/src/Core/Resolvers/AuthorizationPolicyHelpers.cs:line 77
         at Azure.DataApiBuilder.Core.Resolvers.CosmosQueryStructure.Init(IDictionary`2 queryParams) in /_/src/Core/Resolvers/CosmosQueryStructure.cs:line 152
         at Azure.DataApiBuilder.Core.Resolvers.CosmosQueryEngine.ExecuteAsync(IMiddlewareContext context, IDictionary`2 parameters, String dataSourceName) in /_/src/Core/Resolvers/CosmosQueryEngine.cs:line 72
         at Azure.DataApiBuilder.Service.Services.ExecutionHelper.ExecuteQueryAsync(IMiddlewareContext context) in /_/src/Core/Services/ExecutionHelper.cs:line 79
         at ResolverTypeInterceptor.<>c__DisplayClass5_1.<<-ctor>b__5>d.MoveNext() in /_/src/Core/Services/ResolverTypeInterceptor.cs:line 23
      --- End of stack trace from previous location ---
         at HotChocolate.Execution.Processing.Tasks.ResolverTask.ExecuteResolverPipelineAsync(CancellationToken cancellationToken)
         at HotChocolate.Execution.Processing.Tasks.ResolverTask.TryExecuteAsync(CancellationToken cancellationToken)

Code of Conduct

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

Metadata

Metadata

Labels

bugSomething isn't workingtriageissues to be triaged

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions