Die Optimierung des Anwendungsschemas in der Datenbank erfordert i.d.R. das Verschieben von Instanzen bestimmter Typen in eine andere (neue) Tabelle, welche mehr Attribute und Referenzen in Spalten aufnehmen kann, um die generische Speicherung von Attributwerten zu reduzieren.
Eine solche Verschiebung von Instanzen mit einer gleichzeitigen Verschiebung ihrer Attributwerte in Spalten der Zieltabelle kann über den folgenden Migrationsschritt erfolgen:
#!xml <migration config:interface="com.top_logic.knowledge.service.migration.MigrationConfig" xmlns:config="http://www.top-logic.com/ns/config/6.0" > ... <migration> <steps> <step name="Move instances"> <model-index> <indexed-types> <type name="test.app.rewrite:MyType"/> </indexed-types> <move-to-table target-table="MyTable" > <types> <type name="test.app.rewrite:MyType"/> </types> </move-to-table> </model-index> </step> </steps> </migration> ... </migration>
Ein optionaler value-rewriter kann dabei die Events von verschobenen Objekten bei der Verschiebung weiter anpassen.
Bei der Verschiebung werden primitive Attribute automatisch in Spalten der Zieltabelle verschoben. Wenn generische Assoziationslinks in Referenzspalten eingebettet werden sollen, kann ein association-inline Rewriter vorangestellt werden:
#!xml <association-inline types="hasWrapperAttValue" target-object="source" reference-value="dest" reference-name="myRefColumn" > <filters> <reference-has-type reference="source"> <types> <type name="test.app.rewrite:MyType"/> </types> </reference-has-type> <references-model-element reference="metaAttribute"> <model-elements> <model-element name="test.app.rewrite:MyType#myRef"/> </model-elements> </references-model-element> </filters> </association-inline>
Hier werden Assoziationslinks aus der generischen Link-Tabelle hasWrapperAttValue in die Referenzspalte myRefColumn verschoben, wenn die links von einem Objekt vom Typ test.app.rewrite:MyType ausgehen und mit dem Modellelement test.app.rewrite:MyType#myRef annotiert sind.
Hierbei ist zu beachten, dass beide Rewriter nur im Kontext von model-index funktionieren, weil sie Modell-Referenzen auflösen müssen. Insbesondere muss der Model-Index die verschobenen Typen test.app.rewrite:MyType indizieren, damit der reference-has-type Filter den Typ von Quell-Objekten der einzubettenden Assoziationslinks auflösen kann.
Test
- test-app-rewrite aus #26798