Bug 412269 - XML dataset: BIRT selects wrong data (using xpath) [OLD BUG]
Bug 412269 - bump version of org.eclipse.datatools.enablement.oda.xml and org.eclipse.datatools.enablement.oda.feature to 1.4.102.qualifier
Signed-off-by: nickboldt <nboldt@redhat.com>
diff --git a/features/org.eclipse.datatools.enablement.oda.feature/feature.xml b/features/org.eclipse.datatools.enablement.oda.feature/feature.xml
index 0387a27..a44e5f4 100644
--- a/features/org.eclipse.datatools.enablement.oda.feature/feature.xml
+++ b/features/org.eclipse.datatools.enablement.oda.feature/feature.xml
@@ -2,7 +2,7 @@
<feature
id="org.eclipse.datatools.enablement.oda.feature"
label="%featureName"
- version="1.14.101.qualifier"
+ version="1.14.102.qualifier"
provider-name="%providerName"
plugin="org.eclipse.datatools.enablement.oda.xml"
image="eclipse_update_120.jpg">
diff --git a/features/org.eclipse.datatools.enablement.oda.feature/pom.xml b/features/org.eclipse.datatools.enablement.oda.feature/pom.xml
index 5ba5afe..35856f4 100644
--- a/features/org.eclipse.datatools.enablement.oda.feature/pom.xml
+++ b/features/org.eclipse.datatools.enablement.oda.feature/pom.xml
@@ -7,6 +7,7 @@
<artifactId>features</artifactId>
<version>1.14.101-SNAPSHOT</version>
</parent>
+ <version>1.14.102-SNAPSHOT</version>
<groupId>org.eclipse.datatools.features</groupId>
<artifactId>org.eclipse.datatools.enablement.oda.feature</artifactId>
<packaging>eclipse-feature</packaging>
diff --git a/plugins/enablement/org.eclipse.datatools.enablement.oda.xml/META-INF/MANIFEST.MF b/plugins/enablement/org.eclipse.datatools.enablement.oda.xml/META-INF/MANIFEST.MF
index 2a14cde..23003ab 100644
--- a/plugins/enablement/org.eclipse.datatools.enablement.oda.xml/META-INF/MANIFEST.MF
+++ b/plugins/enablement/org.eclipse.datatools.enablement.oda.xml/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %plugin.name
Bundle-SymbolicName: org.eclipse.datatools.enablement.oda.xml;singleton:=true
-Bundle-Version: 1.4.101.qualifier
+Bundle-Version: 1.4.102.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ClassPath: .
Bundle-Vendor: Eclipse Data Tools Platform
diff --git a/plugins/enablement/org.eclipse.datatools.enablement.oda.xml/pom.xml b/plugins/enablement/org.eclipse.datatools.enablement.oda.xml/pom.xml
index b292912..e99991f 100644
--- a/plugins/enablement/org.eclipse.datatools.enablement.oda.xml/pom.xml
+++ b/plugins/enablement/org.eclipse.datatools.enablement.oda.xml/pom.xml
@@ -9,6 +9,6 @@
</parent>
<groupId>org.eclipse.datatools.plugins</groupId>
<artifactId>org.eclipse.datatools.enablement.oda.xml</artifactId>
- <version>1.4.101-SNAPSHOT</version>
+ <version>1.4.102-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>
</project>
diff --git a/plugins/enablement/org.eclipse.datatools.enablement.oda.xml/src/org/eclipse/datatools/enablement/oda/xml/util/SaxParser.java b/plugins/enablement/org.eclipse.datatools.enablement.oda.xml/src/org/eclipse/datatools/enablement/oda/xml/util/SaxParser.java
index cbc4779..962598a 100644
--- a/plugins/enablement/org.eclipse.datatools.enablement.oda.xml/src/org/eclipse/datatools/enablement/oda/xml/util/SaxParser.java
+++ b/plugins/enablement/org.eclipse.datatools.enablement.oda.xml/src/org/eclipse/datatools/enablement/oda/xml/util/SaxParser.java
@@ -315,6 +315,38 @@
spConsumer.manipulateData( pathHolder.getCurrentAttrPath( atts.getQName( i ) ),
atts.getValue( i ) );
}
+
+ /*
+ * Workaround patch for https://bugs.eclipse.org/bugs/show_bug.cgi?id=412269
+ *
+ * SaxParserConsumer.manipulateData() calls SaxParserConsumer.fillNotNestColumn() which is the cause of the bug.
+ *
+ * This ODA SaxParser uses temporary XML columns as helper columns for xpath expressions which contain a filter.
+ * In case the filter "matches" this xml sub-tree, the corresponding helper column will be set to the filter value.
+ * This "marks" this temporary column that the filter matched.
+ * As soon as the real column will be processed, it is checked whether the filter matched previously.
+ * If so, the value will be assigned to the row.
+ *
+ * The problem is: If the real column value will be processed before the filter column,
+ * the value is not written to the row, hence the value is discarded.
+ * Even more, the value from the next matching xml-subtree is used instead (=> wrong value used!)
+ *
+ * This workaround just invokes the faulty method twice. After the first run,
+ * all filter columns are set correctly set so the next pass will cause the mapping to be right.
+ *
+ * This workaround should be replaced by a real fix which fixes the root cause of the problem (most probably
+ * refactoring the filter architecture of ODA datatools) as this workaround may degrade performance.
+ *
+ *
+ */
+ if(spConsumer instanceof SaxParserConsumer)
+ {
+ for ( int i = 0; i < atts.getLength( ); i++ )
+ {
+ spConsumer.manipulateData( pathHolder.getCurrentAttrPath( atts.getQName( i ) ),
+ atts.getValue( i ) );
+ }
+ }
}