Azure / Azure/data-api-builder
[Bug]: GraphQL filtering by relation property causes `Incorrect database name ''`
- Dominant language
- C#
- Stars
- 1.5k
- Forks
- 370
- Avg merge
- 3d 17h
- Merged PRs (30d)
- 8
Description
### What happened?
Running the following query
```gql
query FilterByRelation {
translations(filter: { layer: { parent_id: { isNull: true } } }) {
items {
key
value
}
}
}
```
where config is like this:
```json
"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:
```json
{
"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
```Text
[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.<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
Contributor guide
Assessment
This issue has not been assessed yet.