[PATCH] Datacage config: Oracle has no boolean data type and thus can not handle such CASE-statement in WHERE-clause

Wald Commits scm-commit at wald.intevation.org
Tue Dec 2 12:59:55 CET 2014


# HG changeset patch
# User Tom Gottfried <tom at intevation.de>
# Date 1417521592 -3600
# Node ID 3e5d69e143e969828d5774595b091f5727b6b77a
# Parent  d0719e98a9dacc29e62a993af03d7fc83970e0dc
Datacage config: Oracle has no boolean data type and thus can not handle such CASE-statement in WHERE-clause.

diff -r d0719e98a9da -r 3e5d69e143e9 artifacts/doc/conf/meta-data.xml
--- a/artifacts/doc/conf/meta-data.xml	Tue Dec 02 12:03:50 2014 +0100
+++ b/artifacts/doc/conf/meta-data.xml	Tue Dec 02 12:59:52 2014 +0100
@@ -1042,10 +1042,7 @@
       <dc:variable name="stop" type="number"
                    expr="dc:date-format('yyyyMMdd',
                            number(substring-after($year_range, ';')))"/>
-      <dc:variable name="refgauge" type="number"
-                   expr="dc:get('reference_gauge')"/>
-      <dc:context>
-        <dc:call-macro name="discharge_curves"/>
+      <dc:call-macro name="discharge_curve_choose_context">
         <dc:filter expr="$kind = 1 and
                          number(dc:date-format('yyyyMMdd', $start_time))
                            < $stop and
@@ -1053,14 +1050,11 @@
                            > $start">
           <dc:call-macro name="hist_discharge_factory"/>
         </dc:filter>
-      </dc:context>
+      </dc:call-macro>
     </dc:macro>
 
     <dc:macro name="discharge_table_gauge">
-      <dc:variable name="refgauge" type="number"
-                   expr="dc:get('reference_gauge')"/>
-      <dc:context>
-        <dc:call-macro name="discharge_curves"/>
+      <dc:call-macro name="discharge_curve_choose_context">
         <dc:filter expr="$kind = 0">
           <dc:group expr="$gauge_name">
             <gauge name="{dc:group-key()}">
@@ -1071,14 +1065,11 @@
             </gauge>
           </dc:group>
         </dc:filter>
-      </dc:context>
+      </dc:call-macro>
     </dc:macro>
 
     <dc:macro name="historical_discharge_curve">
-      <dc:variable name="refgauge" type="number"
-                   expr="dc:get('reference_gauge')"/>
-      <dc:context>
-        <dc:call-macro name="discharge_curves"/>
+      <dc:call-macro name="discharge_curve_choose_context">
         <dc:filter expr="$kind = 1">
           <historical_discharge_curves>
             <dc:group expr="$gauge_name">
@@ -1088,10 +1079,29 @@
             </dc:group>
           </historical_discharge_curves>
         </dc:filter>
-      </dc:context>
+      </dc:call-macro>
     </dc:macro>
 
-    <dc:macro name="discharge_curves">
+    <dc:macro name="discharge_curve_choose_context">
+      <dc:choose>
+        <dc:when test="$fromkm > -99999 and $tokm < 99999">
+          <dc:context>
+            <dc:call-macro name="discharge_curves_km"/>
+            <dc:macro-body/>
+          </dc:context>
+        </dc:when>
+        <dc:otherwise>
+          <dc:variable name="refgauge" type="number"
+                       expr="dc:get('reference_gauge')"/>
+          <dc:context>
+            <dc:call-macro name="discharge_curves_refgauge"/>
+            <dc:macro-body/>
+          </dc:context>
+        </dc:otherwise>
+      </dc:choose>
+    </dc:macro>
+
+    <dc:macro name="discharge_curves_km">
       <dc:statement>
           SELECT g.name AS gauge_name,
                  dt.id  AS dt_id,
@@ -1103,13 +1113,29 @@
           JOIN discharge_tables dt ON g.id = dt.gauge_id
           LEFT JOIN time_intervals t ON dt.time_interval_id = t.id
           WHERE g.river_id = ${river_id}
-            AND CASE WHEN ${fromkm} > -99999 AND ${tokm} < 99999
-              THEN g.station BETWEEN ${fromkm} AND ${tokm}
-              ELSE g.official_number = ${refgauge} END
+            AND g.station BETWEEN ${fromkm} AND ${tokm}
           ORDER BY start_time
       </dc:statement>
     </dc:macro>
 
+    <dc:macro name="discharge_curves_refgauge">
+      <dc:statement>
+          SELECT g.name AS gauge_name,
+                 dt.id  AS dt_id,
+                 t.start_time AS start_time,
+                 t.stop_time AS stop_time,
+                 dt.bfg_id AS bfg_id,
+                 dt.kind AS kind
+          FROM gauges g
+          JOIN discharge_tables dt ON g.id = dt.gauge_id
+          LEFT JOIN time_intervals t ON dt.time_interval_id = t.id
+          WHERE g.river_id = ${river_id}
+            AND g.official_number = ${refgauge}
+          ORDER BY start_time
+      </dc:statement>
+    </dc:macro>
+
+    <!-- Cross sections -->
     <dc:macro name="cross_sections">
       <cross_sections id="flood-protections-{$river_id}">
         <dc:context connection="system">


More information about the Dive4Elements-commits mailing list