hasura / hasura/graphql-engine

Better error handling for unsupported SQL server versions

Open
#8,970 0 comments 0 reactions 0 assignees View on GitHub
k/bug t/native-dbs
Dominant language
TypeScript
Stars
32.1k
Forks
3k
PR merge metrics
PR metrics pending

Description

### Version Information

Server Version: `v2.11.2`
### Environment

Database: `MS SQL Server`

### What is the current behaviour?

When you connect an unsupported SQL server version, you get an error like the following (*this is with SQL Server version 2012*):

```json
[
{
"definition": "MSSQL",
"message": {
"exception": {
"message": "[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]'JSON_QUERY' is not a recognized built-in function name.",
"type": "unsuccessful_return_code"
},
"query": "-- SCHEMA_NAME(..)\nSELECT ISNULL(\n (SELECT object.name, object.schema_id, object.object_id, object.type_desc,\n JSON_QUERY([schema].json) AS [joined_sys_schema],\n JSON_QUERY([column].json) AS [joined_sys_column],\n JSON_QUERY([primary_key].json) AS [joined_sys_primary_key]\n FROM sys.objects object\n CROSS APPLY (SELECT [column].name, [column].column_id, [column].is_nullable, [column].is_identity, [column].is_computed, [column].user_type_id,\n JSON_QUERY([types].json) AS [joined_sys_type],\n JSON_QUERY(ISNULL([relationships].json,'[]')) AS [joined_foreign_key_columns]\n FROM sys.columns [column]\n CROSS APPLY (SELECT name, schema_id, user_type_id FROM sys.types [type]\n WHERE [type].user_type_id = [column].user_type_id\n FOR JSON PATH, WITHOUT_ARRAY_WRAPPER)\n AS [types](json)\n CROSS APPLY (SELECT fk.*,\n referenced_table.name AS joined_referenced_table_name,\n referenced_column.name AS joined_referenced_column_name,\n JSON_QUERY([schema].json) AS [joined_referenced_sys_schema]\n FROM sys.foreign_key_columns [fk],\n sys.objects AS referenced_table,\n sys.columns AS referenced_column\n CROSS APPLY (SELECT [schema].name, [schema].schema_id\n FROM sys.schemas [schema]\n WHERE [schema].schema_id = object.schema_id\n FOR JSON PATH, WITHOUT_ARRAY_WRAPPER)\n AS [schema](json)\n WHERE [object].object_id = fk.parent_object_id\n AND [referenced_table].object_id = fk.referenced_object_id\n AND [referenced_column].object_id = [referenced_table].object_id\n AND [referenced_column].column_id = fk.referenced_column_id\n AND [column].column_id = fk.parent_column_id\n FOR JSON PATH)\n AS [relationships](json)\n WHERE [column].object_id = object.object_id\n FOR JSON PATH)\n AS [column](json)\n CROSS APPLY (SELECT [schema].name, [schema].schema_id\n FROM sys.schemas [schema]\n WHERE [schema].schema_id = object.schema_id\n FOR JSON PATH, WITHOUT_ARRAY_WRAPPER)\n AS [schema](json)\n CROSS APPLY (SELECT pk.name, pk.index_id, JSON_QUERY([cols].json) AS columns\n FROM sys.indexes pk\n CROSS APPLY (SELECT col.name\n FROM sys.index_columns ic\n INNER JOIN sys.columns col\n ON col.column_id = ic.column_id\n AND col.object_id = ic.object_id\n WHERE ic.object_id = pk.object_id\n AND ic.index_id = pk.index_id\n FOR JSON PATH)\n AS [cols](json)\n WHERE pk.object_id = object.object_id\n AND pk.is_primary_key = 1\n FOR JSON PATH, WITHOUT_ARRAY_WRAPPER)\n AS [primary_key](json)\n WHERE object.type_desc IN ('USER_TABLE', 'VIEW')\n FOR JSON PATH)\n , '[]')\n"
},
"name": "source MSSQL",
"reason": "Inconsistent object: database query error",
"type": "source"
}
]
```

### What is the expected behaviour?

A clear indication that Hasura doesn't support this version and information on where to find which version is supported.

### How to reproduce the issue?
See [this](https://hasurahelp.zendesk.com/agent/tickets/5853) or connect a sub-2016 version SQL Server instance to Hasura.
### Keywords

SQL server, MS SQL Server, supported, unsupported, version

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.