Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

create DB constraint for Reference attributes #475

Closed
claeis opened this issue Jul 6, 2022 · 5 comments
Closed

create DB constraint for Reference attributes #475

claeis opened this issue Jul 6, 2022 · 5 comments
Milestone

Comments

@claeis
Copy link
Owner

claeis commented Jul 6, 2022

Wenn man das "Referenz"-Attribut als MANDATORY definiert hat, wird je nach Vererebungs-Hierarchie und Abbildungsstrategie dieses ili-Attribut als ein oder mehrere NULLable DB Spalten implementiert.

Die User haben so während der Erfassung keine Hinweise auf die Pflichtfelder und sehen erst in der Validierung, dass sie einen Katalog-Wert auswählen müssen.

CLASS Haus =
  Name: TEXT;
  Material : MANDATORY Gebaeude.Katalog.MaterialItemRef;
  Scope : Gebaeude.Katalog.ScopeItemRef;
END Haus;

Für das ili-Attrbut "Material" soll ili2db ein DB Constraint erstellen, das prüft, ob es bei "Haus" und Sub-Typen von "Haus" einen FK in einer der DB-Spalten (die ili:Material implementieren) gibt.

Für das ili-Attribut "Scope" würde kein solches DB Constraint erstellt, da nicht MANDATORY.

@claeis
Copy link
Owner Author

claeis commented Aug 19, 2022

new cmdline option

--createMandatoryChecks

@signedav
Copy link

Ich konnte dies nicht erfolgreich testen. Ich habe folgendes Modell:

INTERLIS 2.3;

MODEL Gebaeude (de)
AT "https://signedav.github.io/usabilitydave/"
VERSION "2021-12-21"  =
  IMPORTS CatalogueObjects_V1;

  TOPIC Katalog =

    CLASS MaterialItem
    EXTENDS CatalogueObjects_V1.Catalogues.Item =
      Code : MANDATORY TEXT;
      Bezeichnung : TEXT;
    END MaterialItem;

    STRUCTURE MaterialItemRef
    EXTENDS CatalogueObjects_V1.Catalogues.MandatoryCatalogueReference =
      Reference (EXTENDED) : REFERENCE TO (EXTERNAL) MaterialItem;
    END MaterialItemRef;

  END Katalog;

  TOPIC Gebaeude =
    DEPENDS ON Gebaeude.Katalog;

    CLASS Haus =
      Name: TEXT;
      Material : MANDATORY Gebaeude.Katalog.MaterialItemRef;
    END Haus;

  END Gebaeude;

END Gebaeude.

Und übergebe ili2pg-4.9.0.jar den Parameter --createMandatoryChecks:

java -jar /home/cheapdave/dev/opengisch/QgisModelBaker/QgisModelBaker/libs/modelbaker/iliwrapper/bin/ili2pg-4.9.0/ili2pg-4.9.0.jar --schemaimport --dbhost localhost --dbusr postgres --dbpwd ****** --dbdatabase sobakery --dbschema mand_cat03 --coalesceCatalogueRef --createEnumTabs --createNumChecks --createUnique --createFk --createFkIdx --coalesceMultiSurface --coalesceMultiLine --coalesceMultiPoint --coalesceArray --beautifyEnumDispName --createGeomIdx --createMetaInfo --expandMultilingual --createTypeConstraint --createEnumTabsWithId --createTidCol --importTid --smart2Inheritance --strokeArcs --createBasketCol --defaultSrsCode 2056 --createMandatoryChecks --models Gebaeude /home/cheapdave/dev/gh_signedav/usabilitydave/models/gebaeude_mandatorycat.ili

Und in der Tabelle t_ili2db_settings seh ich ch.ehi.ili2db.mandatoryCheckConstraints = create.

Aber material in der Tabelle haus ist noch immer NULLable:

CREATE TABLE IF NOT EXISTS mand_cat03.haus
(
    t_id bigint NOT NULL DEFAULT nextval('mand_cat03.t_ili2db_seq'::regclass),
    t_basket bigint NOT NULL,
    t_ili_tid character varying(200) COLLATE pg_catalog."default",
    aname text COLLATE pg_catalog."default",
    material bigint,
    CONSTRAINT haus_pkey PRIMARY KEY (t_id),
    CONSTRAINT haus_material_fkey FOREIGN KEY (material)
        REFERENCES mand_cat03.materialitem (t_id) MATCH SIMPLE<
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
        DEFERRABLE INITIALLY DEFERRED,
    CONSTRAINT haus_t_basket_fkey FOREIGN KEY (t_basket)
        REFERENCES mand_cat03.t_ili2db_basket (t_id) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
        DEFERRABLE INITIALLY DEFERRED
)

Was mach ich falsch? Oder habe ich diesen Issue falsch verstanden, dass ich erwartete, dass auf der DB-Spalte ein NOT NULL Constraint sein sollte?

@claeis
Copy link
Owner Author

claeis commented Aug 29, 2022

ja, das sind gleich zwei andere Probleme:

@signedav
Copy link

Okay. Also sind die verlinkten Issues Voraussetzungen für diesen Issue? Oder kann man --createMandatoryChecks in einem anderen Use Case bereits nutzen?

@signedav
Copy link

signedav commented Feb 8, 2023

Ich hab das nun auch mit 4.10.0 getestet. Irgendwie führt es aber nicht zum erwarteten Resultat. Verstehe ich irgendetwas falsch, oder müsste material in der Tabelle haus nicht NOT NULL sein?

Oder fehlt etwas in folgendem Command:

java -jar /home/dave/dev/opengisch/QgisModelBakerLibrary/modelbaker/iliwrapper/bin/ili2pg-4.10.0/ili2pg-4.10.0.jar --schemaimport --dbhost localhost --dbusr postgres --dbpwd ****** --dbdatabase fancy_db --dbschema mandatorycaatest --coalesceCatalogueRef --createMandatoryChecks --createEnumTabs --createNumChecks --createUnique --createFk --createFkIdx --coalesceMultiSurface --coalesceMultiLine --coalesceMultiPoint --coalesceArray --beautifyEnumDispName --createGeomIdx --createMetaInfo --expandMultilingual --createTypeConstraint --createEnumTabsWithId --createTidCol --importTid --smart2Inheritance --strokeArcs --createBasketCol=False --defaultSrsAuth EPSG --defaultSrsCode 2056 --preScript NULL --postScript NULL --models Gebaeude --iliMetaAttrs NULL /home/dave/qgis_projects/mandatorycats/gebaeude.ili

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants