Azure / Azure/data-api-builder

[Known Issue] Detect JSON columns in Azure SQL

Aperta
#444 12 commenti 0 reazioni 0 assegnatari Vedi su GitHub
2.1 improvement known-issue
Lingua principale
C#
Stelle
1.5k
Fork
370
Merge medio
3g 22h
PR unite (30g)
9

Descrizione

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]
```

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Inizia tracciando l’introspezione dello schema Azure SQL e il percorso di serializzazione dell’output nel repository data-api-builder, usando la query di check-constraint dell’issue come fonte di metadati prevista. Conferma come vengono identificate le colonne JSON e come vengono emessi i loro valori; il lavoro è completato quando i contenuti JSON validi delle colonne JSON non vengono sottoposti a escaping, mentre il testo ordinario rimane invariato.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
azure, sql
Ambito
api, databases
Tipo di issue
Funzionalità
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.