Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: GraphQL filtering by relation property causes Incorrect database name '' #2152

Open
FelixZY opened this issue Apr 3, 2024 · 2 comments
Labels
bug Something isn't working triage issues to be triaged

Comments

@FelixZY
Copy link

FelixZY commented Apr 3, 2024

What happened?

Running the following query

query FilterByRelation {
  translations(filter: { layer: { parent_id: { isNull: true } } }) {
    items {
      key
      value
    }
  }
}

where config is like this:

    "Translation": {
      "source": "translations",
      "relationships": {
        "layer": {
          "cardinality": "one",
          "target.entity": "Layer"
        },

and layer.parent_id is a nullable reference to layer.id

causes the following error to be returned:

{
  "errors": [
    {
      "message": "Incorrect database name ''",
      "extensions": {
        "code": "DatabaseOperationFailed"
      }
    }
  ]
}

Version

Not sure. Whatever's bundled with SWA cli 1.1.7 (I'm not using the dab cli directly)

What database are you using?

MySQL

What hosting model are you using?

Local (including CLI)

Which API approach are you accessing DAB through?

GraphQL

Relevant log output

[1] [swa] OPTIONS http://0.0.0.0:5000/graphql/ (proxy)
[1] [dataApi] info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
[1] [dataApi]       Request starting HTTP/1.1 OPTIONS http://localhost:4280/graphql/ - 0
[1] [dataApi] info: Microsoft.AspNetCore.Cors.Infrastructure.CorsService[4]
[1] [dataApi]       CORS policy execution successful.
[1] [dataApi] info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
[1] [dataApi]       Request finished HTTP/1.1 OPTIONS http://localhost:4280/graphql/ - 0 - 204 - - 30.7541ms
[1] [swa] OPTIONS http://localhost:4280/graphql/ - 204
[1] [swa] POST http://0.0.0.0:5000/graphql/ (proxy)
[1] [dataApi] info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
[1] [dataApi]       Request starting HTTP/1.1 POST http://localhost:4280/graphql/ application/json 414
[1] [dataApi] info: Microsoft.AspNetCore.Cors.Infrastructure.CorsService[4]
[1] [dataApi]       CORS policy execution successful.
[1] [dataApi] dbug: Azure.DataApiBuilder.Core.AuthenticationHelpers.ClientRoleHeaderAuthenticationMiddleware[0]
[1] [dataApi]       7abc4781-f531-42e6-9727-7953d39456aa Request authentication state: Anonymous.
[1] [dataApi] dbug: Azure.DataApiBuilder.Core.AuthenticationHelpers.ClientRoleHeaderAuthenticationMiddleware[0]
[1] [dataApi]       7abc4781-f531-42e6-9727-7953d39456aa The request will be executed in the context of the role: Anonymous
[1] [dataApi] info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
[1] [dataApi]       Executing endpoint 'Hot Chocolate GraphQL Pipeline'
[1] [dataApi] dbug: Azure.DataApiBuilder.Core.Resolvers.IQueryExecutor[0]
[1] [dataApi]       7abc4781-f531-42e6-9727-7953d39456aa Executing query: SELECT COALESCE(JSON_ARRAYAGG(JSON_OBJECT(@param2, `subq4`.`key`, @param3, `subq4`.`value`)), JSON_ARRAY()) AS `data` FROM ( SELECT `table0`.`key` AS `key`, `table0`.`value` AS `value` FROM `translations` AS `table0` WHERE EXISTS (SELECT 1 FROM ``.`layers` AS `table1` WHERE `table1`.`parent_id` IS NULL AND `table0`.`layer_id` = `table1`.`id`) ORDER BY `table0`.`key` ASC, `table0`.`layer_id` ASC, `table0`.`language_id` ASC LIMIT 100 ) AS `subq4`
[1] [dataApi] fail: Azure.DataApiBuilder.Core.Resolvers.IQueryExecutor[0]
[1] [dataApi]       7abc4781-f531-42e6-9727-7953d39456aa Query execution error due to:
[1] [dataApi]       Incorrect database name ''
[1] [dataApi]       MySqlConnector.MySqlException (0x80004005): Incorrect database name ''
[1] [dataApi]          at MySqlConnector.Core.ServerSession.ReceiveReplyAsyncAwaited(ValueTask`1 task) in /_/src/MySqlConnector/Core/ServerSession.cs:line 954
[1] [dataApi]          at MySqlConnector.Core.ResultSet.ReadResultSetHeaderAsync(IOBehavior ioBehavior) in /_/src/MySqlConnector/Core/ResultSet.cs:line 43
[1] [dataApi]          at MySqlConnector.MySqlDataReader.ActivateResultSet(CancellationToken cancellationToken) in /_/src/MySqlConnector/MySqlDataReader.cs:line 127
[1] [dataApi]          at MySqlConnector.MySqlDataReader.CreateAsync(CommandListPosition commandListPosition, ICommandPayloadCreator payloadCreator, IDictionary`2 cachedProcedures, IMySqlCommand command, CommandBehavior behavior, Activity activity, IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySqlDataReader.cs:line 456
[1] [dataApi]          at MySqlConnector.Core.CommandExecutor.ExecuteReaderAsync(IReadOnlyList`1 commands, ICommandPayloadCreator payloadCreator, CommandBehavior behavior, Activity activity, IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/Core/CommandExecutor.cs:line 56
[1] [dataApi]          at MySqlConnector.MySqlCommand.ExecuteReaderAsync(CommandBehavior behavior, IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySqlCommand.cs:line 330
[1] [dataApi]          at MySqlConnector.MySqlCommand.ExecuteDbDataReaderAsync(CommandBehavior behavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySqlCommand.cs:line 323
[1] [dataApi]          at Azure.DataApiBuilder.Core.Resolvers.QueryExecutor`1.ExecuteQueryAgainstDbAsync[TResult](TConnection conn, String sqltext, IDictionary`2 parameters, Func`3 dataReaderHandler, HttpContext httpContext, List`1 args) in /_/src/Core/Resolvers/QueryExecutor.cs:line 177
[1] [dataApi] fail: Azure.DataApiBuilder.Service.Startup[0]
[1] [dataApi]       A GraphQL request execution error occurred.
[1] [dataApi]       Azure.DataApiBuilder.Service.Exceptions.DataApiBuilderException: Incorrect database name ''
[1] [dataApi]        ---> MySqlConnector.MySqlException (0x80004005): Incorrect database name ''
[1] [dataApi]          at MySqlConnector.Core.ServerSession.ReceiveReplyAsyncAwaited(ValueTask`1 task) in /_/src/MySqlConnector/Core/ServerSession.cs:line 954
[1] [dataApi]          at MySqlConnector.Core.ResultSet.ReadResultSetHeaderAsync(IOBehavior ioBehavior) in /_/src/MySqlConnector/Core/ResultSet.cs:line 43
[1] [dataApi]          at MySqlConnector.MySqlDataReader.ActivateResultSet(CancellationToken cancellationToken) in /_/src/MySqlConnector/MySqlDataReader.cs:line 127
[1] [dataApi]          at MySqlConnector.MySqlDataReader.CreateAsync(CommandListPosition commandListPosition, ICommandPayloadCreator payloadCreator, IDictionary`2 cachedProcedures, IMySqlCommand command, CommandBehavior behavior, Activity activity, IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySqlDataReader.cs:line 456
[1] [dataApi]          at MySqlConnector.Core.CommandExecutor.ExecuteReaderAsync(IReadOnlyList`1 commands, ICommandPayloadCreator payloadCreator, CommandBehavior behavior, Activity activity, IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/Core/CommandExecutor.cs:line 56
[1] [dataApi]          at MySqlConnector.MySqlCommand.ExecuteReaderAsync(CommandBehavior behavior, IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySqlCommand.cs:line 330
[1] [dataApi]          at MySqlConnector.MySqlCommand.ExecuteDbDataReaderAsync(CommandBehavior behavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySqlCommand.cs:line 323
[1] [dataApi]          at Azure.DataApiBuilder.Core.Resolvers.QueryExecutor`1.ExecuteQueryAgainstDbAsync[TResult](TConnection conn, String sqltext, IDictionary`2 parameters, Func`3 dataReaderHandler, HttpContext httpContext, List`1 args) in /_/src/Core/Resolvers/QueryExecutor.cs:line 177
[1] [dataApi]          --- End of inner exception stack trace ---
[1] [dataApi]          at Azure.DataApiBuilder.Core.Resolvers.QueryExecutor`1.ExecuteQueryAgainstDbAsync[TResult](TConnection conn, String sqltext, IDictionary`2 parameters, Func`3 dataReaderHandler, HttpContext httpContext, List`1 args) in /_/src/Core/Resolvers/QueryExecutor.cs:line 195
[1] [dataApi]          at Azure.DataApiBuilder.Core.Resolvers.QueryExecutor`1.<>c__DisplayClass19_0`1.<<ExecuteQueryAsync>b__0>d.MoveNext() in /_/src/Core/Resolvers/QueryExecutor.cs:line 102
[1] [dataApi]       --- End of stack trace from previous location ---
[1]          at Polly.Retry.AsyncRetryEngine.ImplementationAsync[TResult](Func`3 action, Context context, CancellationToken cancellationToken, ExceptionPredicates shouldRetryExceptionPredicates, ResultPredicates`1 shouldRetryResultPredicates, Func`5 onRetryAsync, Int32 permittedRetryCount, IEnumerable`1 sleepDurationsEnumerable, Func`4 sleepDurationProvider, Boolean continueOnCapturedContext)
[1] [dataApi]          at Polly.AsyncPolicy.ExecuteAsync[TResult](Func`3 action, Context context, CancellationToken cancellationToken, Boolean continueOnCapturedContext)
[1] [dataApi]          at Azure.DataApiBuilder.Core.Resolvers.QueryExecutor`1.ExecuteQueryAsync[TResult](String sqltext, IDictionary`2 parameters, Func`3 dataReaderHandler, HttpContext httpContext, List`1 args, String dataSourceName) in /_/src/Core/Resolvers/QueryExecutor.cs:line 90
[1] [dataApi]          at Azure.DataApiBuilder.Core.Resolvers.SqlQueryEngine.ExecuteAsync(SqlQueryStructure structure, String dataSourceName) in /_/src/Core/Resolvers/SqlQueryEngine.cs:line 207
[1] [dataApi]          at Azure.DataApiBuilder.Core.Resolvers.SqlQueryEngine.ExecuteAsync(IMiddlewareContext context, IDictionary`2 parameters, String dataSourceName) in /_/src/Core/Resolvers/SqlQueryEngine.cs:line 75
[1] [dataApi]          at Azure.DataApiBuilder.Core.Services.ResolverMiddleware.InvokeAsync(IMiddlewareContext context) in /_/src/Core/Services/ResolverMiddleware.cs:line 94
[1] [dataApi]          at HotChocolate.Utilities.MiddlewareCompiler`1.ExpressionHelper.AwaitTaskHelper(Task task)
[1] [dataApi]          at HotChocolate.Execution.Processing.Tasks.ResolverTask.ExecuteResolverPipelineAsync(CancellationToken cancellationToken)
[1] [dataApi]          at HotChocolate.Execution.Processing.Tasks.ResolverTask.TryExecuteAsync(CancellationToken cancellationToken)
[1] [swa] POST http://localhost:4280/graphql/ - 500
[1] [dataApi] info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
[1] [dataApi]       Executed endpoint 'Hot Chocolate GraphQL Pipeline'
[1] [dataApi] info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
[1] [dataApi]       Request finished HTTP/1.1 POST http://localhost:4280/graphql/ application/json 414 - 500 - application/json;+charset=utf-8 626.6180ms


### Code of Conduct

- [X] I agree to follow this project's Code of Conduct
@FelixZY FelixZY added bug Something isn't working triage issues to be triaged labels Apr 3, 2024
@FelixZY
Copy link
Author

FelixZY commented Apr 3, 2024

Potential relation to #1940

@FelixZY
Copy link
Author

FelixZY commented Apr 3, 2024

Note that the following query works fine (but does not fulfill my requirements):

query Works {
  translations(filter: { layer_id: { eq: 1} } ) {
    items {
      key
      value
    }
  }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working triage issues to be triaged
Projects
None yet
Development

No branches or pull requests

1 participant