first implementation of TaxonNodeAgentRelation #3583
authorAndreas M��ller <a.mueller@bgbm.org>
Fri, 29 May 2015 12:50:48 +0000 (12:50 +0000)
committerAndreas M��ller <a.mueller@bgbm.org>
Fri, 29 May 2015 12:50:48 +0000 (12:50 +0000)
.gitattributes
cdmlib-ext/src/test/resources/dbscripts/001-cdm.h2.sql
cdmlib-io/src/test/resources/dbscripts/001-cdm.h2.sql
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/taxon/TaxonNode.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/taxon/TaxonNodeAgentRelation.java [new file with mode: 0644]
cdmlib-persistence/src/main/resources/eu/etaxonomy/cdm/hibernate.cfg.xml
cdmlib-persistence/src/test/resources/dbscripts/001-cdm.h2.sql
cdmlib-services/src/test/resources/dbscripts/001-cdm.h2.sql

index 6c26b29b1785296f100b306ac5726b9c26794d97..c982d850108ffc33e2be4617118f09665be6fe20 100644 (file)
@@ -973,6 +973,7 @@ cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/taxon/TaxonComparator.java -te
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/taxon/TaxonComparatorSearch.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/taxon/TaxonNaturalComparator.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/taxon/TaxonNode.java -text
+cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/taxon/TaxonNodeAgentRelation.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/taxon/TaxonNodeByNameComparator.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/taxon/TaxonRelationship.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/taxon/TaxonRelationshipType.java -text
index 8efa945d23e82203cc35c2e344a453dc56e4fcf7..7ee83f2f294a7f840d516a062f599b1131801de9 100644 (file)
@@ -4569,6 +4569,56 @@ CREATE CACHED TABLE PUBLIC.TAXONNODE(
     TAXON_ID INTEGER
 );
 -- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODE;
+CREATE CACHED TABLE PUBLIC.TAXONNODEAGENTRELATION(
+       ID INTEGER NOT NULL,
+    CREATED TIMESTAMP,
+    UUID VARCHAR(36),
+    UPDATED TIMESTAMP,
+       CREATEDBY_ID INTEGER,
+    UPDATEDBY_ID INTEGER,
+    AGENT_ID INTEGER,
+       TAXONNODE_ID INTEGER,
+       TYPE_ID INTEGER
+);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODEAGENTRELATION;
+CREATE CACHED TABLE PUBLIC.TAXONNODEAGENTRELATION_AUD(
+       ID INTEGER NOT NULL,
+       REV INTEGER NOT NULL,
+    REVTYPE TINYINT,
+    CREATED TIMESTAMP,
+    UUID VARCHAR(36),
+    UPDATED TIMESTAMP,
+       CREATEDBY_ID INTEGER,
+    UPDATEDBY_ID INTEGER,
+    AGENT_ID INTEGER,
+       TAXONNODE_ID INTEGER,
+       TYPE_ID INTEGER
+);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODEAGENTRELATION_AUD;
+CREATE CACHED TABLE PUBLIC.TAXONNODEAGENTRELATION_ANNOTATION(
+    TAXONNODEAGENTRELATION_ID INTEGER NOT NULL,
+    ANNOTATIONS_ID INTEGER NOT NULL
+);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODEAGENTRELATION_ANNOTATION;
+CREATE CACHED TABLE PUBLIC.TAXONNODEAGENTRELATION_ANNOTATION_AUD(
+    REV INTEGER NOT NULL,
+    TAXONNODEAGENTRELATION_ID INTEGER NOT NULL,
+    ANNOTATIONS_ID INTEGER NOT NULL,
+    REVTYPE TINYINT
+);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODEAGENTRELATION_ANNOTATION_AUD;
+CREATE CACHED TABLE PUBLIC.TAXONNODEAGENTRELATION_MARKER(
+    TAXONNODEAGENTRELATION_ID INTEGER NOT NULL,
+    MARKERS_ID INTEGER NOT NULL
+);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODEAGENTRELATION_MARKER;
+CREATE CACHED TABLE PUBLIC.TAXONNODEAGENTRELATION_MARKER_AUD(
+    REV INTEGER NOT NULL,
+    TAXONNODEAGENTRELATION_ID INTEGER NOT NULL,
+    MARKERS_ID INTEGER NOT NULL,
+    REVTYPE TINYINT
+);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODEAGENTRELATION_MARKER_AUD;
 CREATE CACHED TABLE PUBLIC.TAXONNODE_AUD(
     ID INTEGER NOT NULL,
     REV INTEGER NOT NULL,
index 8efa945d23e82203cc35c2e344a453dc56e4fcf7..7ee83f2f294a7f840d516a062f599b1131801de9 100644 (file)
@@ -4569,6 +4569,56 @@ CREATE CACHED TABLE PUBLIC.TAXONNODE(
     TAXON_ID INTEGER
 );
 -- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODE;
+CREATE CACHED TABLE PUBLIC.TAXONNODEAGENTRELATION(
+       ID INTEGER NOT NULL,
+    CREATED TIMESTAMP,
+    UUID VARCHAR(36),
+    UPDATED TIMESTAMP,
+       CREATEDBY_ID INTEGER,
+    UPDATEDBY_ID INTEGER,
+    AGENT_ID INTEGER,
+       TAXONNODE_ID INTEGER,
+       TYPE_ID INTEGER
+);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODEAGENTRELATION;
+CREATE CACHED TABLE PUBLIC.TAXONNODEAGENTRELATION_AUD(
+       ID INTEGER NOT NULL,
+       REV INTEGER NOT NULL,
+    REVTYPE TINYINT,
+    CREATED TIMESTAMP,
+    UUID VARCHAR(36),
+    UPDATED TIMESTAMP,
+       CREATEDBY_ID INTEGER,
+    UPDATEDBY_ID INTEGER,
+    AGENT_ID INTEGER,
+       TAXONNODE_ID INTEGER,
+       TYPE_ID INTEGER
+);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODEAGENTRELATION_AUD;
+CREATE CACHED TABLE PUBLIC.TAXONNODEAGENTRELATION_ANNOTATION(
+    TAXONNODEAGENTRELATION_ID INTEGER NOT NULL,
+    ANNOTATIONS_ID INTEGER NOT NULL
+);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODEAGENTRELATION_ANNOTATION;
+CREATE CACHED TABLE PUBLIC.TAXONNODEAGENTRELATION_ANNOTATION_AUD(
+    REV INTEGER NOT NULL,
+    TAXONNODEAGENTRELATION_ID INTEGER NOT NULL,
+    ANNOTATIONS_ID INTEGER NOT NULL,
+    REVTYPE TINYINT
+);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODEAGENTRELATION_ANNOTATION_AUD;
+CREATE CACHED TABLE PUBLIC.TAXONNODEAGENTRELATION_MARKER(
+    TAXONNODEAGENTRELATION_ID INTEGER NOT NULL,
+    MARKERS_ID INTEGER NOT NULL
+);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODEAGENTRELATION_MARKER;
+CREATE CACHED TABLE PUBLIC.TAXONNODEAGENTRELATION_MARKER_AUD(
+    REV INTEGER NOT NULL,
+    TAXONNODEAGENTRELATION_ID INTEGER NOT NULL,
+    MARKERS_ID INTEGER NOT NULL,
+    REVTYPE TINYINT
+);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODEAGENTRELATION_MARKER_AUD;
 CREATE CACHED TABLE PUBLIC.TAXONNODE_AUD(
     ID INTEGER NOT NULL,
     REV INTEGER NOT NULL,
index 41c6c8f6d496a315812f050f353139417357782a..1c23a73080770644848fb13234c39467ab38ab26 100644 (file)
@@ -149,7 +149,7 @@ public class TaxonNode extends AnnotatableEntity implements ITaxonTreeNode, ITre
     @XmlSchemaType(name = "IDREF")\r
     @OneToMany(mappedBy="taxonNode", fetch=FetchType.LAZY)\r
     @Cascade({CascadeType.SAVE_UPDATE, CascadeType.MERGE, CascadeType.DELETE})\r
-    private final Set<TaxonNodeAgentRelation> nodeAgents = new HashSet<TaxonNodeAgentRelation>();\r
+    private Set<TaxonNodeAgentRelation> nodeAgents = new HashSet<TaxonNodeAgentRelation>();\r
 \r
 \r
 //     private Taxon originalConcept;\r
@@ -803,6 +803,14 @@ public class TaxonNode extends AnnotatableEntity implements ITaxonTreeNode, ITre
         return hasTaxon() ? getTaxon().getNullSafeRank() : null;\r
     }\r
 \r
+    /**\r
+     * @param clone\r
+     */\r
+    private void addNodeAgent(TaxonNodeAgentRelation nodeAgentRelation) {\r
+        nodeAgentRelation.setTaxonNode(this);\r
+\r
+    }\r
+\r
 //*********************** CLONE ********************************************************/\r
     /**\r
      * Clones <i>this</i> taxon node. This is a shortcut that enables to create\r
@@ -816,14 +824,18 @@ public class TaxonNode extends AnnotatableEntity implements ITaxonTreeNode, ITre
      */\r
     @Override\r
     public Object clone()  {\r
-        TaxonNode result;\r
         try{\r
-        result = (TaxonNode)super.clone();\r
-        result.getTaxon().addTaxonNode(result);\r
-        result.childNodes = new ArrayList<TaxonNode>();\r
-        result.countChildren = 0;\r
+            TaxonNode result = (TaxonNode)super.clone();\r
+            result.getTaxon().addTaxonNode(result);\r
+            result.childNodes = new ArrayList<TaxonNode>();\r
+            result.countChildren = 0;\r
+\r
+            result.nodeAgents = new HashSet<TaxonNodeAgentRelation>();\r
+            for (TaxonNodeAgentRelation rel : this.nodeAgents){\r
+                result.addNodeAgent((TaxonNodeAgentRelation)rel.clone());\r
+            }\r
 \r
-        return result;\r
+            return result;\r
         }catch (CloneNotSupportedException e) {\r
             logger.warn("Object does not implement cloneable");\r
             e.printStackTrace();\r
diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/taxon/TaxonNodeAgentRelation.java b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/taxon/TaxonNodeAgentRelation.java
new file mode 100644 (file)
index 0000000..59645f3
--- /dev/null
@@ -0,0 +1,125 @@
+// $Id$\r
+/**\r
+* Copyright (C) 2015 EDIT\r
+* European Distributed Institute of Taxonomy\r
+* http://www.e-taxonomy.eu\r
+*\r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+package eu.etaxonomy.cdm.model.taxon;\r
+\r
+import javax.persistence.Entity;\r
+import javax.persistence.FetchType;\r
+import javax.persistence.ManyToOne;\r
+import javax.xml.bind.annotation.XmlAccessType;\r
+import javax.xml.bind.annotation.XmlAccessorType;\r
+import javax.xml.bind.annotation.XmlElement;\r
+import javax.xml.bind.annotation.XmlIDREF;\r
+import javax.xml.bind.annotation.XmlRootElement;\r
+import javax.xml.bind.annotation.XmlSchemaType;\r
+import javax.xml.bind.annotation.XmlType;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.hibernate.annotations.Cascade;\r
+import org.hibernate.annotations.CascadeType;\r
+import org.hibernate.envers.Audited;\r
+import org.springframework.security.core.GrantedAuthority;\r
+\r
+import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;\r
+import eu.etaxonomy.cdm.model.common.AnnotatableEntity;\r
+import eu.etaxonomy.cdm.model.common.DefinedTerm;\r
+\r
+/**\r
+ * This class relates a TaxonNode (Taxon within it's given publication context)\r
+ * to an agent (person or team) and defining a type for this relationship.\r
+ * This is to indicate that an agent plays a certain role for this taxon\r
+ * (e.g. author of the according subtree, last scrutiny, ...).\r
+ * It is not meant to define rights and roles which are only handled via the\r
+ * {@link GrantedAuthority granted authorities}.\r
+ * @author a.mueller\r
+ * @date 29.05.2015\r
+ */\r
+@XmlAccessorType(XmlAccessType.FIELD)\r
+@XmlType(name = "TaxonNodeAgentRelation", propOrder = {\r
+        "taxonNode",\r
+        "agent",\r
+        "type",\r
+    })\r
+@XmlRootElement(name = "TaxonNodeAgentRelation")\r
+@Entity\r
+@Audited\r
+public class TaxonNodeAgentRelation extends AnnotatableEntity {\r
+    private static final long serialVersionUID = -1476342569350403356L;\r
+    private static final Logger logger = Logger.getLogger(TaxonNodeAgentRelation.class);\r
+\r
+    @XmlElement(name = "TaxonNode")\r
+    @XmlIDREF\r
+    @XmlSchemaType(name = "IDREF")\r
+    @ManyToOne(fetch = FetchType.LAZY)\r
+//    @Cascade({CascadeType.SAVE_UPDATE, CascadeType.MERGE})  //the\r
+    private TaxonNode taxonNode;\r
+\r
+    @XmlElement(name = "Agent")\r
+    @XmlIDREF\r
+    @XmlSchemaType(name = "IDREF")\r
+    @ManyToOne(fetch = FetchType.LAZY)\r
+    @Cascade({CascadeType.SAVE_UPDATE, CascadeType.MERGE})\r
+    private TeamOrPersonBase<?> agent;\r
+\r
+    @XmlElement(name = "Type")\r
+    @XmlIDREF\r
+    @XmlSchemaType(name = "IDREF")\r
+    @ManyToOne(fetch = FetchType.EAGER)\r
+    private DefinedTerm type;\r
+\r
+    private TaxonNodeAgentRelation(){};\r
+\r
+//********************* GETTER / SETTER **********************/\r
+\r
+    public TaxonNode getTaxonNode() {\r
+        return taxonNode;\r
+    }\r
+    public void setTaxonNode(TaxonNode taxonNode) {\r
+        this.taxonNode = taxonNode;\r
+    }\r
+\r
+    public TeamOrPersonBase<?> getAgent() {\r
+        return agent;\r
+    }\r
+    public void setAgent(TeamOrPersonBase<?> agent) {\r
+        this.agent = agent;\r
+    }\r
+\r
+    public DefinedTerm getType() {\r
+        return type;\r
+    }\r
+    public void setType(DefinedTerm type) {\r
+        this.type = type;\r
+    }\r
+\r
+\r
+//************************** clone *******************************************/\r
+\r
+    /**\r
+     * Clones <i>this</i> taxon node agent relation. This is a shortcut that enables to create\r
+     * a new instance that differs only slightly from <i>this</i> relation.\r
+     *\r
+     * @see eu.etaxonomy.cdm.model.media.IdentifiableEntity#clone()\r
+     * @see java.lang.Object#clone()\r
+     */\r
+    @Override\r
+    public Object clone()  {\r
+        try{\r
+            TaxonNodeAgentRelation result = (TaxonNodeAgentRelation)super.clone();\r
+\r
+            //no change to taxonNode, agent, type\r
+            return result;\r
+        }catch (CloneNotSupportedException e) {\r
+            logger.warn("Object does not implement cloneable");\r
+            e.printStackTrace();\r
+            return null;\r
+        }\r
+    }\r
+\r
+}\r
index 9dbb3c690e58fa9142536d5573cd35dbf7fffd0f..e48ff8a305f33ce2b4a1c86c13b85be1ecf14929 100644 (file)
       <mapping class="eu.etaxonomy.cdm.model.taxon.Taxon"/>\r
       <mapping class="eu.etaxonomy.cdm.model.taxon.TaxonBase"/>\r
       <mapping class="eu.etaxonomy.cdm.model.taxon.TaxonNode"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.taxon.TaxonNodeAgentRelation"/>\r
       <mapping class="eu.etaxonomy.cdm.model.taxon.Classification"/>\r
       <mapping class="eu.etaxonomy.cdm.model.taxon.TaxonRelationship"/>\r
       <mapping class="eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType"/>\r
index 8efa945d23e82203cc35c2e344a453dc56e4fcf7..7ee83f2f294a7f840d516a062f599b1131801de9 100644 (file)
@@ -4569,6 +4569,56 @@ CREATE CACHED TABLE PUBLIC.TAXONNODE(
     TAXON_ID INTEGER
 );
 -- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODE;
+CREATE CACHED TABLE PUBLIC.TAXONNODEAGENTRELATION(
+       ID INTEGER NOT NULL,
+    CREATED TIMESTAMP,
+    UUID VARCHAR(36),
+    UPDATED TIMESTAMP,
+       CREATEDBY_ID INTEGER,
+    UPDATEDBY_ID INTEGER,
+    AGENT_ID INTEGER,
+       TAXONNODE_ID INTEGER,
+       TYPE_ID INTEGER
+);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODEAGENTRELATION;
+CREATE CACHED TABLE PUBLIC.TAXONNODEAGENTRELATION_AUD(
+       ID INTEGER NOT NULL,
+       REV INTEGER NOT NULL,
+    REVTYPE TINYINT,
+    CREATED TIMESTAMP,
+    UUID VARCHAR(36),
+    UPDATED TIMESTAMP,
+       CREATEDBY_ID INTEGER,
+    UPDATEDBY_ID INTEGER,
+    AGENT_ID INTEGER,
+       TAXONNODE_ID INTEGER,
+       TYPE_ID INTEGER
+);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODEAGENTRELATION_AUD;
+CREATE CACHED TABLE PUBLIC.TAXONNODEAGENTRELATION_ANNOTATION(
+    TAXONNODEAGENTRELATION_ID INTEGER NOT NULL,
+    ANNOTATIONS_ID INTEGER NOT NULL
+);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODEAGENTRELATION_ANNOTATION;
+CREATE CACHED TABLE PUBLIC.TAXONNODEAGENTRELATION_ANNOTATION_AUD(
+    REV INTEGER NOT NULL,
+    TAXONNODEAGENTRELATION_ID INTEGER NOT NULL,
+    ANNOTATIONS_ID INTEGER NOT NULL,
+    REVTYPE TINYINT
+);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODEAGENTRELATION_ANNOTATION_AUD;
+CREATE CACHED TABLE PUBLIC.TAXONNODEAGENTRELATION_MARKER(
+    TAXONNODEAGENTRELATION_ID INTEGER NOT NULL,
+    MARKERS_ID INTEGER NOT NULL
+);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODEAGENTRELATION_MARKER;
+CREATE CACHED TABLE PUBLIC.TAXONNODEAGENTRELATION_MARKER_AUD(
+    REV INTEGER NOT NULL,
+    TAXONNODEAGENTRELATION_ID INTEGER NOT NULL,
+    MARKERS_ID INTEGER NOT NULL,
+    REVTYPE TINYINT
+);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODEAGENTRELATION_MARKER_AUD;
 CREATE CACHED TABLE PUBLIC.TAXONNODE_AUD(
     ID INTEGER NOT NULL,
     REV INTEGER NOT NULL,
index 8efa945d23e82203cc35c2e344a453dc56e4fcf7..7ee83f2f294a7f840d516a062f599b1131801de9 100644 (file)
@@ -4569,6 +4569,56 @@ CREATE CACHED TABLE PUBLIC.TAXONNODE(
     TAXON_ID INTEGER
 );
 -- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODE;
+CREATE CACHED TABLE PUBLIC.TAXONNODEAGENTRELATION(
+       ID INTEGER NOT NULL,
+    CREATED TIMESTAMP,
+    UUID VARCHAR(36),
+    UPDATED TIMESTAMP,
+       CREATEDBY_ID INTEGER,
+    UPDATEDBY_ID INTEGER,
+    AGENT_ID INTEGER,
+       TAXONNODE_ID INTEGER,
+       TYPE_ID INTEGER
+);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODEAGENTRELATION;
+CREATE CACHED TABLE PUBLIC.TAXONNODEAGENTRELATION_AUD(
+       ID INTEGER NOT NULL,
+       REV INTEGER NOT NULL,
+    REVTYPE TINYINT,
+    CREATED TIMESTAMP,
+    UUID VARCHAR(36),
+    UPDATED TIMESTAMP,
+       CREATEDBY_ID INTEGER,
+    UPDATEDBY_ID INTEGER,
+    AGENT_ID INTEGER,
+       TAXONNODE_ID INTEGER,
+       TYPE_ID INTEGER
+);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODEAGENTRELATION_AUD;
+CREATE CACHED TABLE PUBLIC.TAXONNODEAGENTRELATION_ANNOTATION(
+    TAXONNODEAGENTRELATION_ID INTEGER NOT NULL,
+    ANNOTATIONS_ID INTEGER NOT NULL
+);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODEAGENTRELATION_ANNOTATION;
+CREATE CACHED TABLE PUBLIC.TAXONNODEAGENTRELATION_ANNOTATION_AUD(
+    REV INTEGER NOT NULL,
+    TAXONNODEAGENTRELATION_ID INTEGER NOT NULL,
+    ANNOTATIONS_ID INTEGER NOT NULL,
+    REVTYPE TINYINT
+);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODEAGENTRELATION_ANNOTATION_AUD;
+CREATE CACHED TABLE PUBLIC.TAXONNODEAGENTRELATION_MARKER(
+    TAXONNODEAGENTRELATION_ID INTEGER NOT NULL,
+    MARKERS_ID INTEGER NOT NULL
+);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODEAGENTRELATION_MARKER;
+CREATE CACHED TABLE PUBLIC.TAXONNODEAGENTRELATION_MARKER_AUD(
+    REV INTEGER NOT NULL,
+    TAXONNODEAGENTRELATION_ID INTEGER NOT NULL,
+    MARKERS_ID INTEGER NOT NULL,
+    REVTYPE TINYINT
+);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.TAXONNODEAGENTRELATION_MARKER_AUD;
 CREATE CACHED TABLE PUBLIC.TAXONNODE_AUD(
     ID INTEGER NOT NULL,
     REV INTEGER NOT NULL,