Azure / Azure/data-api-builder

[Known Issue] Detect JSON columns in Azure SQL

Abierto
#444 12 comentarios 0 reacciones 0 asignados Ver en GitHub
2.1 improvement known-issue
Lenguaje dominante
C#
Estrellas
1.5k
Forks
370
Merge medio
3 d 22 h
PR fusionados (30 d)
9

Descripción

We should be able to automatically detect if a column contains JSON data and avoid escaping it in the output. Right now if I have the following table:

```
create table s003b.todos
(
id int not null constraint pk__s003b_todos primary key default (next value for s003b.globalId),
category_id varchar(3) collate Latin1_General_BIN2 not null constraint fk__s003b_todos__s003b_categories references s003b.categories(id),
title nvarchar(100) not null,
[description] nvarchar(1000) null,
tags nvarchar(max) null check ( isjson(tags)= 1 ),
completed bit not null default(0)
)
```

and I store JSON data in the "tags" column, I get the following output:

```
{ data": {
"todos": {
"items": [
{
"id": 10000,
"title": "item-001",
"completed": false,
"tags": "[{\"tag\":\"red\"}]",
"category": {
"id": "f",
"category": "Family"
}
}
```

where `tags` contains encoded JSON...even if the content is valid JSON itself. Right now Azure SQL DB doesn't have a native JSON data type, but we can check if a column contains JSON data by checking the check constraint that *should* have been created to allow only JSON data to be inserted (see table definition above). This query can return which columns should be treated as JSON:

```sql
select
s.[name] as [schema_name],
t.[name] as [table_name],
c.[name] as [columne_name],
ck.[definition],
case when (ck.[definition] like '%isjson(/[' + trim(c.[name]) + '/])=(1)%' escape '/') then 1 else 0 end as [isjson]
from
sys.check_constraints ck
inner join
sys.tables t on ck.[parent_object_id] = t.[object_id]
inner join
sys.columns c on t.[object_id] = c.[object_id] and ck.parent_column_id = c.[column_id]
inner join
sys.schemas s on t.[schema_id] = s.[schema_id]
```

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Comienza rastreando la introspección del esquema de Azure SQL y la ruta de serialización de la salida en el repositorio data-api-builder, usando la consulta de check-constraint del issue como fuente de metadatos esperada. Confirma cómo se identifican las columnas JSON y cómo se emiten sus valores; se considera terminado cuando el contenido válido de las columnas JSON no se escapa, mientras que el texto ordinario permanece sin cambios.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
azure, sql
Área
api, databases
Tipo de issue
Nueva funcionalidad
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.