Color scheme: Light
You are here: start » sl » Dokumentacija » Integracija podatkov in dostop do podatkov » Gonilnik WKL OData ODBC » Koncepti gonilnika OData ODBC » Kako iz storitve OData nastane relacijski model ODBC

Kako iz storitve OData nastane relacijski model ODBC

graph TD
    M["$metadata (CSDL)"] -->|"ob prvi uporabi povezave"| R["Model gonilnika: množice, stolpci, ključi, anotacije"]
    R --> K["Katalog za aplikacijo: SQLTables, SQLColumns, SQLStatistics"]
    R --> P["Prevod stavka v zahtevo OData"]
    P -->|"HTTP"| A["Odgovor JSON"]
    A --> E{"Razvrstitev odgovora"}
    E -->|"zbirka value"| Z["Vrstice: lastnost dodeljena stolpcu po imenu"]
    E -->|"@odata.nextLink"| F["naslednja stran"]
    E -->|"error"| D["Diagnostični zapisi"]
    E -->|"druge anotacije"| I["preskočeno"]

Slika: Gonilnik pomen vsakega elementa izpelje iz dokumenta metapodatkov in vrste zahteve, ne iz oblike JSON. Razvrščanje odgovorov opisuje stran Kako gonilnik razvršča in javlja odgovore.

OData podatke opisuje kot entitete s tipi, ključi, gnezdenimi vrednostmi in razmerji; ODBC pozna samo tabele iz vrstic in stolpcev s tipom SQL. Gonilnik zato preslika samo tisti del modela OData, ki ga je mogoče brez izgube pomena prikazati kot tabelo, preostanek pa izpusti tako, da je to razvidno. Ta stran za vsako vrsto elementa navaja, kaj gonilnik iz njega naredi. Ta stran je podlaga za vse, kar opisuje stran Podprti SQL: rezultatu lahko zaupate šele, ko je jasno, kateri stolpec ustreza kateri lastnosti.

Ključne funkcije

  • Množica entitet je tabela, lastnost s preprostim tipom je stolpec, ključ tipa entitete je primarni ključ.
  • Tip pride iz $metadata, ne iz JSON: število, ki prispe kot besedilo, ostane število; vrednost, ki se ne ujema z deklariranim tipom, je napaka, ne tiha pretvorba.
  • Kar ni mogoče prikazati kot stolpec, vidno manjka: kompleksne vrednosti, zbirke in razmerja se ne pojavijo, namesto da bi bili sploščeni ali ponujeni kot besedilo.
  • Krmilni podatki niso podatki: @odata.nextLink krmili listanje, druge anotacije odgovora nikoli ne postanejo stolpci.

Osnovni pojmi

Kaj nastane iz dokumenta metapodatkov

Gonilnik prebere $metadata enkrat za vsako povezavo, ob njeni prvi uporabi. Osnova je format CSDL XML iz OData 4.0/4.01 (glejte Standardi in specifikacije).

Element v $metadataV modelu ODBCUtemeljitev
EntitySettabela, vrsta tabele TABLEnaslovljiva množica istovrstnih zapisov, nad katero je mogoče poizvedovati
EntitySet s tipom, ki ga dokument ne opisujemanjkabrez tipa ni stolpcev
Property s tipom Edm.…, ki ga gonilnik preslikastolpec; tip, dolžina in natančnost po Podatkovni tipi; Nullable="false" kot SQL_NO_NULLSena preprosta vrednost na zapis
Property z drugim tipom Edm.… (Edm.Geography…, Edm.Geometry…, Edm.Duration, Edm.Stream)manjkani tipa SQL, v katerega bi ga bilo mogoče preslikati brez izgube
Property kompleksnega tipa (ComplexType)manjkagnezdena vrednost nima stolpca; sploščenje (Adresse_Ort) bi ustvarilo izmišljene stolpce, ki jih storitev ne more ne filtrirati ne zapisovati
Property tipa Collection(…)manjkaveč vrednosti na zapis ni mogoče prikazati v eni celici, ne da bi se izgubil pomen
Property naštevnega tipa (EnumType) ali TypeDefinitionmanjkagonilnik bere samo lastnosti, katerih tip je neposredno Edm.…
Key s PropertyRefprimarni ključ in enolični indeks (SQLStatistics); Access ga prevzame kot primarni indeksbrez njega množice ni mogoče urejati
Key, ki navaja manjkajočo lastnostni ključa; tabela je samo za branjenepopoln ključ bi zadel več zapisov
NavigationPropertymanjka; SQLForeignKeys vrne prazen rezultatbralna pot ne sledi nobenemu razmerju; spoji so mogoči samo prek prepustne poti
BaseType (dedovanje med tipi entitet)se ne upošteva: izpeljani množici manjkajo lastnosti in ključ osnovnega tipadedovanje ni podprto
OpenType: lastnosti, ki so samo v zapisumanjkajov $metadata niso opisane
Singletonmanjkani zapis v množici in nima vrstic
FunctionImport, Function, ActionImportmanjkajo; SQLProcedures vrne prazen rezultatklici so mogoči samo prek prepustne poti
vezana Action UpdateByOriginal/DeleteByOriginalspreminjanje in brisanje tabele brez ključarazširitev, glejte Zahteve
druga Actionpreskočeno–
anotacija Core.Computedstolpec samo za branje (SQL_DESC_UPDATABLE)–
anotacija Core.OptimisticConcurrencystolpec velja za različico vrsticekonflikt pri pisanju prek If-Match
anotaciji Aggregation.ApplySupported, Aggregation.CustomAggregationMethodszdruževanje v skupine prek $apply–
anotacije besednjaka Wkl.Store.V1ime izdelka, shema, imena tipov, indeksi, statistika, prepustna pot, transakcijerazširitev tega izdelka
vsaka druga anotacijapreskočeno–

Imena. Gonilnik množice in stolpce javi pod imeni iz $metadata. Ime, ki ga je storitev kodirala z _xHHHH_, dekodira, kolikor lahko Access rezultat obdela; glejte Ime polja je prikazano kodirano ali povezovanje ne uspe.

Pogledi. OData pogleda ne razlikuje od tabele; vsaka množica se pojavi kot TABLE.

Kaj nastane iz odgovora s podatki

Bralna zahteva vrne zbirko: objekt JSON s poljem value. Gonilnik njegove dele razvrsti takole:

Del odgovoraPomenV modelu ODBC
value (polje)zapisi straniza vsak element ena vrstica. Če value manjka ali ni polje, je odgovor napaka (glejte Razvrščanje odgovorov)
lastnost zapisa, ki opisuje stolpecvrednostvrednost stolpca, pretvorjena po tipu iz $metadata
lastnost, ki jo opisuje $metadata, a v zapisu manjkavrednost ni posredovanaNULL
nullni vrednostiNULL
lastnost zapisa, ki ne opisuje stolpca (kompleksna vrednost, zbirka, dinamična lastnost, navigacija)–preskočeno
@odata.nextLinknadaljevanjegonilnik pridobi naslednjo stran, ko aplikacija bere naprej; nikoli stolpec
@odata.context, @odata.count, @odata.etag in vsaka druga anotacijakrmilni podatekpreskočeno, nikoli stolpec

Pretvorba po deklariranem tipu. Vrednost se bere po svojem tipu v $metadata, ne po obliki JSON: "12.50" je za stolpec Edm.Decimal število 12,50, "NaN" za Edm.Double posebna vrednost. Če se vrednost ne ujema s tipom, se branje prekine s sporočilom “Vrednost stolpca … se ne ujema z napovedanim tipom …”; gonilnik ne ugiba drugega tipa.

Štetje. COUNT(*) se pošlje na …/$count; odgovor je število kot besedilo, ne zbirka.

Kaj gonilnik predpostavlja pri pisanju

Pri spreminjanju in brisanju gonilnik vrednost za If-Match tvori sam iz stolpca, ki ga navaja Core.OptimisticConcurrency in ga Access pošlje kot pogoj: binarna vrednost postane W/"<Base64>", besedilo, ki se začne z W/, ostane takšno, kot je, vsako drugo besedilo pa postane W/"<besedilo>". Storitev mora torej sprejeti ETag te oblike; @odata.etag iz odgovora gonilnik ne bere. Podatkovni prehod Wkl.Data.Gateway to obliko sprejme; pri drugi storitvi to preverite pred uporabo.

Kaj ni preslikano

Ni preslikano pomeni: gonilnik elementa ne prikaže in deluje naprej brez njega. Pri tem ne javi ne napake ne opozorila. Aplikacija manjkajoče dele prepozna samo po tem, da stolpca ali tabele ni v katalogu. Kjer je tak del potreben, na primer spoj prek razmerja ali klic funkcije, je na voljo prepustna pot, če jo storitev podpira.

Sorodne teme

sl/wiki/data-conectivity/odata-odbc/concepts/odata-model-and-odbc-mapping.txt · Last modified: by Wolfgang van der Stille