Lade...
 

AutoLayer

AutoLayer

Damit man viele, im Aufbau weitgehend identische Datenbank-Layer einfach beschreiben kann (indem man sich immer wieder auf ein bereits vollständig beschriebenes Layer bezieht), gibt es die Anweisung AutoLayer:

AutoLayer(k, database1, database2, ..., databasen)
  • k ist eine ganze Zahl,
  • ab Layer k werden n weitere Storages/Layer (k, k+1, ..., k+n-1) automatisch erzeugt. Die erste generierte Storage verweist dabei auf database1. Die Angabe der Datenbanken erfolgt wie auch bei den Storages über die Syntax DB(k).

Mit den angegeben Datenbanken werden – im Normalfall – weitere Storages erzeugt, mit denen die Metafile-Einträge erweitert werden:

// Layer 0 1
File(name, stg0, stg1)
Storage(stg0, database0, segm1, EP(coll1), CSeg(segmc), Garbage(collg, segmg))
Storage(stg1, database0, segm2, EP(coll2), CSeg(segmc), Garbage(collg, segmg))
AutoLayer(2, database1, database2)

ist die Kurzform für:

// Layer 0 1 2 3
File(name, stg0, stg1, stg2, stg3)
Storage(stg0, database0, segm1, EP(coll1), CSeg(segmc), Garbage(collg, segmg))
Storage(stg1, database0, segm2, EP(coll2), CSeg(segmc), Garbage(collg, segmg))
Storage(stg2, database1, segm2, EP(coll2), CSeg(segmc), Garbage(collg, segmg))
Storage(stg3,
database2, segm2, EP(coll2), CSeg(segmc), Garbage(collg, segmg))

Die automatisch generierten Storages sind also Abbilder der letzten explizit definierten Storage in einer anderen physischen Datenbank. Darüber hinaus ist es möglich

  • Storages unverändert in die generierten Layer zu übernehmen (mit der Ellipse '...')
  • Storages im generierten Layer nicht mehr vorkommen zu lassen (mit dem Keyword 'STOP')

Die Wiederholung des letzten Storages im Metafile – ohne Modifikation der Datenbank – wird gefordert, indem in der File-Anweisung auf die Liste der Storages die Ellipse

, ...

folgt.

Mit

, STOP

am Ende der Storage-Angaben wird bestimmt, dass für diese Metafile keine weiteren Storages generiert werden.

Aus

// Layer 0 1
File(fName1, stg0, stg1)
File(fName2, stga, stga, ...)
File(fName3, stgx, stgy, STOP)
Storage(stg0, database0, segm1, EP(coll1), CSeg(segmc), Garbage(collg, segmg))
Storage(stg1, database0, segm2, EP(coll2), CSeg(segmc), Garbage(collg, segmg))
Storage(stga, database0, segma, EP(colla), CSeg(segmc), Garbage(collg, segmg))
Storage(stgx, database0, segmx, EP(collx), CSeg(segmc), Garbage(collg, segmg))
Storage(stgy, database0, segmy, EP(colly), CSeg(segmc), Garbage(collg, segmg))
AutoLayer(2, database1, database2)

wird folgendes

 

// Layer 0 1 2 3
File(fName1, stg0, stg1, stg2, stg3) // Generierte Layer haben unterschiedliche Datenbanken
File(fName2, stga, stga, stga, stga) // Gleiche Storages mit gleicher Datenbank für alle Layer
File(fName3, stgx, stgy)
Storage(stg0, database0, segm1, EP(coll1), CSeg(segmc), Garbage(collg, segmg))
Storage(stg1, database0, segm2, EP(coll2), CSeg(segmc), Garbage(collg, segmg))
Storage(stga, database0, segma, EP(colla), CSeg(segmc), Garbage(collg, segmg))
Storage(stgx, database0, segmx, EP(collx), CSeg(segmc), Garbage(collg, segmg))
Storage(stgy, database0, segmy, EP(colly), CSeg(segmc), Garbage(collg, segmg))
Storage(stg2, database1, segm1, EP(coll2), CSeg(segmc), Garbage(collg, segmg))
Storage(stg3,
database2, segm2, EP(coll2), CSeg(segmc), Garbage(collg, segmg))

erzeugt.

In beiden Beispielen sind die generierten Anteile rot gekennzeichnet.

Hinweis: Die Ellipse (...) hat Vorrang gegenüber AutoLayer.

File-Anweisungen mit Ellipse '...' können auch ohne Anweisung AutoLayer benutzt werden. Die Bedeutung ist ähnlich: Die letzte Storage-Definition der File-Anweisung wird so oft wiederholt, wie dies die File-Anweisung mit den meisten Storages vorgibt.

Aus

File(fName1, stg0, stg1, stg2, stg3)
File(fName
2, stga, ...)

wird

File(fName1, stg0, stg1, stg2, stg3)
File(fName2, stga, stga, stga, stga)