From 97b4e2f89246102a70f22d115183dafe3ec6641c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=BCrgen=20Walter?= <juergen.walter@uni-wuerzburg.de>
Date: Fri, 18 May 2018 13:04:24 +0200
Subject: [PATCH] updated language to generate SLAs

---
 .../model/generated/DescartesQL.ecore         |   18 +-
 .../model/generated/DescartesQL.genmodel      |   16 +
 lang/tools.descartes.dql.lang/plugin.xml_gen  |   34 +-
 .../descartes/dql/lang/DescartesQL.xtextbin   |  Bin 16218 -> 16647 bytes
 .../lang/descartesQL/DescartesQLFactory.java  |    9 +
 .../lang/descartesQL/DescartesQLPackage.java  |  477 +-
 .../lang/descartesQL/GenerateSLAConcern.java  |  210 +
 .../dql/lang/descartesQL/Penalty.java         |   27 -
 .../descartes/dql/lang/descartesQL/Slo.java   |   27 +
 .../dql/lang/descartesQL/Violation.java       |   27 +
 .../impl/DescartesQLFactoryImpl.java          |   12 +
 .../impl/DescartesQLPackageImpl.java          |  122 +-
 .../impl/GenerateSLAConcernImpl.java          |  577 ++
 .../lang/descartesQL/impl/PenaltyImpl.java    |   88 -
 .../dql/lang/descartesQL/impl/SloImpl.java    |   72 +
 .../lang/descartesQL/impl/ViolationImpl.java  |   56 +
 .../util/DescartesQLAdapterFactory.java       |   20 +
 .../descartesQL/util/DescartesQLSwitch.java   |   23 +
 .../antlr/internal/InternalDescartesQL.g      |  306 +-
 .../antlr/internal/InternalDescartesQL.tokens |  190 +-
 .../internal/InternalDescartesQLLexer.java    | 1176 ++--
 .../internal/InternalDescartesQLParser.java   | 5512 +++++++++--------
 .../DescartesQLSemanticSequencer.java         |   43 +-
 .../services/DescartesQLGrammarAccess.java    |  197 +-
 .../descartes/dql/lang/DescartesQL.xtext      |   12 +-
 .../generator/.DescartesQLGenerator.xtendbin  |  Bin 2196 -> 2196 bytes
 26 files changed, 5880 insertions(+), 3371 deletions(-)
 create mode 100644 lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/GenerateSLAConcern.java
 create mode 100644 lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/impl/GenerateSLAConcernImpl.java

diff --git a/lang/tools.descartes.dql.lang/model/generated/DescartesQL.ecore b/lang/tools.descartes.dql.lang/model/generated/DescartesQL.ecore
index f07c0138..30e35f94 100644
--- a/lang/tools.descartes.dql.lang/model/generated/DescartesQL.ecore
+++ b/lang/tools.descartes.dql.lang/model/generated/DescartesQL.ecore
@@ -21,6 +21,19 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="usingClause" eType="#//UsingClause"
         containment="true"/>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="GenerateSLAConcern">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="offset" eType="#//MultipleArithmeticClause"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="percentage" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="constraintClause" eType="#//ConstraintClause"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="dofClause" eType="#//DoFClause"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="forClause" eType="#//ForClause"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="usingClause" eType="#//UsingClause"
+        containment="true"/>
+  </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="SlaQuery">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="slas" upperBound="-1" eType="#//Sla"
@@ -47,6 +60,8 @@
         containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="pen" eType="#//Penalty"
         containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="violation" eType="#//Violation"
+        containment="true"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="WeightedSlo">
     <eStructuralFeatures xsi:type="ecore:EReference" name="slo" eType="#//Slo"/>
@@ -61,11 +76,10 @@
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="currency" eType="#//Currency"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="violation" eType="#//Violation"
-        containment="true"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Violation">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="amount" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="percentage" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EEnum" name="Comparator">
     <eLiterals name="less" literal="&lt;"/>
diff --git a/lang/tools.descartes.dql.lang/model/generated/DescartesQL.genmodel b/lang/tools.descartes.dql.lang/model/generated/DescartesQL.genmodel
index b2baa145..6c3713c4 100644
--- a/lang/tools.descartes.dql.lang/model/generated/DescartesQL.genmodel
+++ b/lang/tools.descartes.dql.lang/model/generated/DescartesQL.genmodel
@@ -80,6 +80,16 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute DescartesQL.ecore#//Goal/sloIdentifier"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EAttribute DescartesQL.ecore#//Goal/metricClauseType"/>
     </genClasses>
+    <genClasses ecoreClass="DescartesQL.ecore#//GenerateSLAConcern">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference DescartesQL.ecore#//GenerateSLAConcern/offset"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute DescartesQL.ecore#//GenerateSLAConcern/percentage"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference DescartesQL.ecore#//GenerateSLAConcern/constraintClause"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference DescartesQL.ecore#//GenerateSLAConcern/dofClause"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference DescartesQL.ecore#//GenerateSLAConcern/forClause"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference DescartesQL.ecore#//GenerateSLAConcern/usingClause"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference DescartesQL.ecore#//GenerateSLAConcern/slaQuery"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference DescartesQL.ecore#//GenerateSLAConcern/sloQuery"/>
+    </genClasses>
     <genClasses ecoreClass="DescartesQL.ecore#//SlaQuery">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute DescartesQL.ecore#//SlaQuery/type"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference DescartesQL.ecore#//SlaQuery/slas"/>
@@ -104,6 +114,7 @@
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference DescartesQL.ecore#//Slo/value"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference DescartesQL.ecore#//Slo/fuz"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference DescartesQL.ecore#//Slo/pen"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference DescartesQL.ecore#//Slo/violation"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute DescartesQL.ecore#//Slo/sloIdentifier"/>
     </genClasses>
     <genClasses ecoreClass="DescartesQL.ecore#//WeightedSlo">
@@ -122,6 +133,8 @@
     </genClasses>
     <genClasses ecoreClass="DescartesQL.ecore#//Violation">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute DescartesQL.ecore#//Violation/amount"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute DescartesQL.ecore#//Violation/percentage"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute DescartesQL.ecore#//Violation/interval"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute DescartesQL.ecore#//Violation/occurance"/>
     </genClasses>
     <genClasses ecoreClass="DescartesQL.ecore#//ModelStructureQuery"/>
@@ -404,6 +417,9 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute DescartesQL.ecore#//VariableValue/intValue"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute DescartesQL.ecore#//VariableValue/doubleValue"/>
     </genClasses>
+    <genClasses ecoreClass="DescartesQL.ecore#//OffsetClause">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute DescartesQL.ecore#//OffsetClause/value"/>
+    </genClasses>
     <genClasses ecoreClass="DescartesQL.ecore#//FilterigRule">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference DescartesQL.ecore#//FilterigRule/filteringValue"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute DescartesQL.ecore#//FilterigRule/modifier"/>
diff --git a/lang/tools.descartes.dql.lang/plugin.xml_gen b/lang/tools.descartes.dql.lang/plugin.xml_gen
index cfffecdc..1e56d20a 100644
--- a/lang/tools.descartes.dql.lang/plugin.xml_gen
+++ b/lang/tools.descartes.dql.lang/plugin.xml_gen
@@ -1,17 +1,17 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-
-<plugin>
-
-  <extension point="org.eclipse.emf.ecore.generated_package">
-    <package 
-       uri = "http://www.descartes.tools/dql/lang/DescartesQL" 
-       class = "tools.descartes.dql.lang.descartesQL.DescartesQLPackage"
-       genModel = "model/generated/DescartesQL.genmodel" /> 
-	
-  </extension>
-
-
-
-
-</plugin>
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<plugin>
+
+  <extension point="org.eclipse.emf.ecore.generated_package">
+    <package 
+       uri = "http://www.descartes.tools/dql/lang/DescartesQL" 
+       class = "tools.descartes.dql.lang.descartesQL.DescartesQLPackage"
+       genModel = "model/generated/DescartesQL.genmodel" /> 
+	
+  </extension>
+
+
+
+
+</plugin>
diff --git a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/DescartesQL.xtextbin b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/DescartesQL.xtextbin
index 5bd8ebfb03d81542a6ccedb78ffb78f83017ca00..b8ff42ed669d4cb9cf5b3353797dd0d3b1856a6f 100644
GIT binary patch
delta 2489
zcmZuyX>=1+6z<Dpk|ycCAQHifT6PB)khW<`xG(hdoY>YTEk}NM%qdgMIZ38wp|%Pm
zxS--bF1R9~f+B(<;Jz=YxGO3y;JzX5B5ru^%u8Cd`O#+XcklPzd%t-vI~Ofo!Zxmv
z*=fdFc{wZG6mT>s%x)~4=G9>VbI7h>S0L0Ghy)p9(8o$-S2`X&Ijg4n9kxa%oXJXM
z=x4<?S6GB47+{iZ<{SymvPlJ!M^SPJv%}fUDcfNo(#V<qUe%;ngesmub4M_EQm{1=
zMj4&(v>uP99nvHeIfq0Rqlg`;Bv>N&&n13`$&b|MA+;0Er_y9JVNqXzg=3I#DGdT`
zt&u=WYnZ`>_-Gr?;37;e>QiI$PtU0H!g0+~yO`9LvEq@oqB(<@1eXZeON|xNtM$uJ
zPJ+vk!JfuS+Qk*Dq7+hEI^Ci6s3|qsty)vUm7?;he8U=ZxH4)g5lcqnU|3x;xSBa_
zwkD*#h8mp6;98`2S`C^C*J0)~G=ec5r&><w6EXdIN}tT&hGFNq(V7PfZlb&iW<A`T
zE51b(ufSp%y%jsZm8uq-xmdXpK{Q^=8?VDEN?2_<Z^b3JO$>T_-gyf_d+souUqd2!
z=hvdNqq!{*BGd1*^fjS>7tyb?Jl7<+JGVllT8~t^3+|zUyww{ppRC?U<J2>_7t!*B
znn}gFAs)@9)kyAryALx1<(Rq&Q#{>TqBoj~X0(*K;rmH;Gb^)sAP-2eMW}DJ*$bp%
zMFGv9tHORBV6yCh2U)oc5831bse%%6xDr>>X$L$^ZTV325lVa1*gIo%*<%=!e2o}<
zoPtjn-a2p9la%Pk*i#gHn)pT;HFZ_SsdY~M8LIG8#j}JyM`-0iYU&x;XxstMQ(_|~
z(g(KTppFI6c-A@<FVKv&7=MwK(EDcZ$qtyqzeK=x+_`&pc3>cu#LgvnS<L>5P0|ab
zB1Oq#IQpyRDR_;X$h-PFYP)B5&Yj!R8Vr-OZy@ZRr!I&^Gche`D!nOMFxz`ew9%_t
z;M)Z5z%~loRXiV=ehJ<&o6seAm)<P5q6h?Ac+Y&Xb{^Ei``AKZd$2VSikyNCd~opm
zA0mHXKgK_@gk9a)6dhOVM%zW|yYUThfe1_Rv9*I5_=H{nywY+I>VJyvOYj-_@wsuJ
zenit3C~gmScA&tQ6#a@^sv4|OvT3fx<I$7@zNXa9FgI;7|G+m!dqcJUEj6)+oal;a
zadU4Hd?%dPOFKX#@(_0Mz1hVN<}Q9D*7jfrgP(A4XEdQ@lNodEKO-&PAMguic)D8J
zLV-w28{UWvel;t9!+2#l5Yb!0vjafblu)oM7-FywnLNE}s#{HFqVuiy==a<n_hT8Z
zy94n49x}=wxhv*R#OZ$ei%h~>L>%$IX~=b=0RFMeDDT#iX`|X#?mj^D>lxz(##CRG
zj!VMlE%<D+GTl8|$~xLK8<!BCH4b4rsuX3@vE=+AsEp{$eWn(7;CJrC<yJPUNfpn&
z8V&_O!}~gwlz5@FW$vOaS1XFh@eN60cJ9V~6><*_=4uYM20Q2nk{4NxIkldiv}$gg
z7n4?rvC==rRVs+fjBWn0dN~rvyn;64W4w}jPGsYmnCO{)_jnZ+gBM4t7MtWFtWEMm
zhRq)-@)<vr^6(bH4<ALvc*?mKgXAumTR+rYei+jI$6Y=e$>@~uF<3U}E<fCG`@9}r
zLom5>1i6#oW9gaPIdWKcjzZXU=jh?wsYO({gAC)S`37tqlH3XXuo@P_I#>qVVF&Di
z&9K|p;Oo=Jqk$E()J&hMCL^(gYAsIU6U3S)l7D#Y{+EL8O`_AnCsR)<<5TGWDq7Vs
z$mtnMrU<gBM1~jtAXb4i$C@<937X@Lt&QW@3C6C*v94*NZo1+2*Os1WdOd^2La*zL
pCjUrpJywB&nhiN`eS}YDypix4zrY!9qBwa83NHaK)S@dk_Ag1&A^89R

delta 2099
zcmZuyX>b%(5YC&oGn+kfY!WeXxr|ky(W?1H6)_3frDvg16_c3VK*=9#Dw*I`ZFb@w
z35miY9%wvq6!F%0fKe0$@xE_S@xlWSyf3^E6;V;UXWni$CG%%$`s@C_zTTU)YuN5p
zTQ<t<RBMyGfw{Mal_r&OYvsIPjxiWw<+3N8&`-`9sS!nLal<gHkYNQYlRQyj<}kvz
z6k5t*RN^Jvr>c2`x!?@umR)cr(#V;SLBpn4$rRZaUfdmtoD}JZMNwuI;V6?<`0=Qb
zBaPKL6mcOHhqDC#8sb-MexyDdsoii6g(md@hx%NMoQZ_zp@auIJ7VFsjwpk*_$eLB
z;CyuU4;%62r)7-3Xu@>lE+DxvRP!&LggE3b6tWkQY`Llyp(uYb%5%5`8C_{)qTXD}
zswyC5rqkU<zmYPMy@pdYTqc;-6$&t!;>j4Pfp}6+z~xTX3@qlBq*kQ80u#<j4GgYC
zez%jcEwLV5=P~DjtH`|p-8WEuCos7Bu=QQz)Q4@kmi&&hqv5)I@bx121`IA5!i~-p
z@>(|`iko0gZo<t(JML_PW9D#+DD>9CCO8Q8>o$86ZYPn#CTv7$WpQV?ot9veqi>2O
zxTBT$C!8fPIoz4=A#&Y?T&1v?0t%zQ8{KL2_fR<}GT372^Xqc=qBR^q^L^;->oo@k
z^^~45Q+6}AlEOAtDfyrPaJXLxZI@gnyi8RmF;sql$+7|uvVaT^NpcCVD#q1>kxnb{
zFlEq;nvXCS`aNnLnm?oRF*Ne#7PLN2!B1EXjlqg1$#VhPo+8`RR;+P$?iq4iK#tFn
z@i|hdo}yx$p4AfyJWq}-=tvK|fb}UudLru_gcqr_IcR^0mD5VO`m>{U%`X$M1H0;7
zlpP(7Coy9VuZWUgmAJLPF_3%B-tC>#-@>e3M>+4Jo@LA0IwDb;*Bc0X`;4Kuo{5`D
zoBU0oYG?G8P#!cK@NEKjp>k=Lfm@#$;qZ>oeV5k7tEvLXVWZ!}6l8dRN(#F%h0?A_
zN4Pz93MTNu)RI3${_sJxe}r~VZ#G3I(7CieCh0vmXb%W8hfjp|r!;1~wDJgQ`#-}e
zbNHP4|AiH3nwI+#m0gjZZe;(8tY6bqY9@o!Y+5rD2|cC2H{{wA)$Fk__}1xycPMTq
zCL8q~CA62Ouq1Ei@V&_B2kM4jRSOWyx!_0p`20lVU6F1EKVy+@eZb5nGj{9uAtPQ4
z@C$nQmb7)YhhuG>c=r`Qus?t1e?>34Fn*){;;9yA?srOSLWIBpC-p$DX$?15=l(!2
zycs19ijw-wen{xqw6k%461*MZzXaTGri$Rd5nebK;X^3t&!*$a<wfW}h=va2h5x1O
zn(zyfumZ+mHB7*m7k0od*bCcWkL7P2PL^QzsumiVVZ%tq;sb`m#<B1A&q$M~i#VeH
zxiFW;X}+3^QZkq((|a7{GzB?*#bj<lR%-2Qt*P+XVO|mDvuZ+fncr#-)mN4Yzj6|t
zrK(maG`$LiDrk$fN~))sX#s0zs5V%I@t~qwwU~xh<4i+4!p5fwoM}gr9j^xls#c4s
z)miIWYJFU*6KY3UV=eWAL0e<G(3nB(9mpm!anWA-qiQpWGl-hA@|v@S=Fx}suNVGI
OJEo9B5a!_VlGuMC_Rb>!

diff --git a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/DescartesQLFactory.java b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/DescartesQLFactory.java
index 38229ca0..57ba513d 100644
--- a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/DescartesQLFactory.java
+++ b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/DescartesQLFactory.java
@@ -64,6 +64,15 @@ public interface DescartesQLFactory extends EFactory
    */
   Goal createGoal();
 
+  /**
+   * Returns a new object of class '<em>Generate SLA Concern</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Generate SLA Concern</em>'.
+   * @generated
+   */
+  GenerateSLAConcern createGenerateSLAConcern();
+
   /**
    * Returns a new object of class '<em>Sla Query</em>'.
    * <!-- begin-user-doc -->
diff --git a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/DescartesQLPackage.java b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/DescartesQLPackage.java
index 8ecebb74..07d8ba52 100644
--- a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/DescartesQLPackage.java
+++ b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/DescartesQLPackage.java
@@ -191,6 +191,79 @@ public interface DescartesQLPackage extends EPackage
    */
   int GOAL_FEATURE_COUNT = 7;
 
+  /**
+   * The meta object id for the '{@link tools.descartes.dql.lang.descartesQL.impl.GenerateSLAConcernImpl <em>Generate SLA Concern</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see tools.descartes.dql.lang.descartesQL.impl.GenerateSLAConcernImpl
+   * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getGenerateSLAConcern()
+   * @generated
+   */
+  int GENERATE_SLA_CONCERN = 2;
+
+  /**
+   * The feature id for the '<em><b>Offset</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int GENERATE_SLA_CONCERN__OFFSET = 0;
+
+  /**
+   * The feature id for the '<em><b>Percentage</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int GENERATE_SLA_CONCERN__PERCENTAGE = 1;
+
+  /**
+   * The feature id for the '<em><b>Constraint Clause</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int GENERATE_SLA_CONCERN__CONSTRAINT_CLAUSE = 2;
+
+  /**
+   * The feature id for the '<em><b>Dof Clause</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int GENERATE_SLA_CONCERN__DOF_CLAUSE = 3;
+
+  /**
+   * The feature id for the '<em><b>For Clause</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int GENERATE_SLA_CONCERN__FOR_CLAUSE = 4;
+
+  /**
+   * The feature id for the '<em><b>Using Clause</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int GENERATE_SLA_CONCERN__USING_CLAUSE = 5;
+
+  /**
+   * The number of structural features of the '<em>Generate SLA Concern</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int GENERATE_SLA_CONCERN_FEATURE_COUNT = 6;
+
   /**
    * The meta object id for the '{@link tools.descartes.dql.lang.descartesQL.impl.SlaQueryImpl <em>Sla Query</em>}' class.
    * <!-- begin-user-doc -->
@@ -199,7 +272,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getSlaQuery()
    * @generated
    */
-  int SLA_QUERY = 2;
+  int SLA_QUERY = 3;
 
   /**
    * The feature id for the '<em><b>Type</b></em>' attribute.
@@ -236,7 +309,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getSloQuery()
    * @generated
    */
-  int SLO_QUERY = 3;
+  int SLO_QUERY = 4;
 
   /**
    * The feature id for the '<em><b>Type</b></em>' attribute.
@@ -273,7 +346,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getSla()
    * @generated
    */
-  int SLA = 4;
+  int SLA = 5;
 
   /**
    * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -310,7 +383,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getSlo()
    * @generated
    */
-  int SLO = 5;
+  int SLO = 6;
 
   /**
    * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -366,6 +439,15 @@ public interface DescartesQLPackage extends EPackage
    */
   int SLO__PEN = 5;
 
+  /**
+   * The feature id for the '<em><b>Violation</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int SLO__VIOLATION = 6;
+
   /**
    * The number of structural features of the '<em>Slo</em>' class.
    * <!-- begin-user-doc -->
@@ -373,7 +455,7 @@ public interface DescartesQLPackage extends EPackage
    * @generated
    * @ordered
    */
-  int SLO_FEATURE_COUNT = 6;
+  int SLO_FEATURE_COUNT = 7;
 
   /**
    * The meta object id for the '{@link tools.descartes.dql.lang.descartesQL.impl.WeightedSloImpl <em>Weighted Slo</em>}' class.
@@ -383,7 +465,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getWeightedSlo()
    * @generated
    */
-  int WEIGHTED_SLO = 6;
+  int WEIGHTED_SLO = 7;
 
   /**
    * The feature id for the '<em><b>Slo</b></em>' reference.
@@ -420,7 +502,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getFuzziness()
    * @generated
    */
-  int FUZZINESS = 7;
+  int FUZZINESS = 8;
 
   /**
    * The feature id for the '<em><b>Type</b></em>' attribute.
@@ -457,7 +539,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getPenalty()
    * @generated
    */
-  int PENALTY = 8;
+  int PENALTY = 9;
 
   /**
    * The feature id for the '<em><b>Type</b></em>' attribute.
@@ -486,15 +568,6 @@ public interface DescartesQLPackage extends EPackage
    */
   int PENALTY__CURRENCY = 2;
 
-  /**
-   * The feature id for the '<em><b>Violation</b></em>' containment reference.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   * @ordered
-   */
-  int PENALTY__VIOLATION = 3;
-
   /**
    * The number of structural features of the '<em>Penalty</em>' class.
    * <!-- begin-user-doc -->
@@ -502,7 +575,7 @@ public interface DescartesQLPackage extends EPackage
    * @generated
    * @ordered
    */
-  int PENALTY_FEATURE_COUNT = 4;
+  int PENALTY_FEATURE_COUNT = 3;
 
   /**
    * The meta object id for the '{@link tools.descartes.dql.lang.descartesQL.impl.ViolationImpl <em>Violation</em>}' class.
@@ -512,7 +585,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getViolation()
    * @generated
    */
-  int VIOLATION = 9;
+  int VIOLATION = 10;
 
   /**
    * The feature id for the '<em><b>Amount</b></em>' attribute.
@@ -523,6 +596,15 @@ public interface DescartesQLPackage extends EPackage
    */
   int VIOLATION__AMOUNT = 0;
 
+  /**
+   * The feature id for the '<em><b>Percentage</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int VIOLATION__PERCENTAGE = 1;
+
   /**
    * The number of structural features of the '<em>Violation</em>' class.
    * <!-- begin-user-doc -->
@@ -530,7 +612,7 @@ public interface DescartesQLPackage extends EPackage
    * @generated
    * @ordered
    */
-  int VIOLATION_FEATURE_COUNT = 1;
+  int VIOLATION_FEATURE_COUNT = 2;
 
   /**
    * The meta object id for the '{@link tools.descartes.dql.lang.descartesQL.impl.ModelStructureQueryImpl <em>Model Structure Query</em>}' class.
@@ -540,7 +622,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getModelStructureQuery()
    * @generated
    */
-  int MODEL_STRUCTURE_QUERY = 10;
+  int MODEL_STRUCTURE_QUERY = 11;
 
   /**
    * The number of structural features of the '<em>Model Structure Query</em>' class.
@@ -559,7 +641,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getPerformanceMetricsQuery()
    * @generated
    */
-  int PERFORMANCE_METRICS_QUERY = 11;
+  int PERFORMANCE_METRICS_QUERY = 12;
 
   /**
    * The number of structural features of the '<em>Performance Metrics Query</em>' class.
@@ -578,7 +660,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getPerformanceIssueQuery()
    * @generated
    */
-  int PERFORMANCE_ISSUE_QUERY = 12;
+  int PERFORMANCE_ISSUE_QUERY = 13;
 
   /**
    * The number of structural features of the '<em>Performance Issue Query</em>' class.
@@ -597,7 +679,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getConnectorCapabilityQuery()
    * @generated
    */
-  int CONNECTOR_CAPABILITY_QUERY = 13;
+  int CONNECTOR_CAPABILITY_QUERY = 14;
 
   /**
    * The number of structural features of the '<em>Connector Capability Query</em>' class.
@@ -616,7 +698,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getListQuery()
    * @generated
    */
-  int LIST_QUERY = 14;
+  int LIST_QUERY = 15;
 
   /**
    * The feature id for the '<em><b>Query Type</b></em>' containment reference.
@@ -662,7 +744,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getGetQuery()
    * @generated
    */
-  int GET_QUERY = 15;
+  int GET_QUERY = 16;
 
   /**
    * The feature id for the '<em><b>Query Tape</b></em>' containment reference.
@@ -699,7 +781,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getGetConstraintsQuery()
    * @generated
    */
-  int GET_CONSTRAINTS_QUERY = 16;
+  int GET_CONSTRAINTS_QUERY = 17;
 
   /**
    * The feature id for the '<em><b>Mode</b></em>' attribute.
@@ -727,7 +809,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getGetExplorationStrategiesQuery()
    * @generated
    */
-  int GET_EXPLORATION_STRATEGIES_QUERY = 17;
+  int GET_EXPLORATION_STRATEGIES_QUERY = 18;
 
   /**
    * The feature id for the '<em><b>Mode</b></em>' attribute.
@@ -755,7 +837,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getGetTimeUnitsQuery()
    * @generated
    */
-  int GET_TIME_UNITS_QUERY = 18;
+  int GET_TIME_UNITS_QUERY = 19;
 
   /**
    * The feature id for the '<em><b>Mode</b></em>' attribute.
@@ -783,7 +865,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getListDoFQuery()
    * @generated
    */
-  int LIST_DO_FQUERY = 19;
+  int LIST_DO_FQUERY = 20;
 
   /**
    * The feature id for the '<em><b>Mode</b></em>' attribute.
@@ -820,7 +902,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getListEntitiesQuery()
    * @generated
    */
-  int LIST_ENTITIES_QUERY = 20;
+  int LIST_ENTITIES_QUERY = 21;
 
   /**
    * The feature id for the '<em><b>Mode</b></em>' attribute.
@@ -848,7 +930,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getListMetricsQuery()
    * @generated
    */
-  int LIST_METRICS_QUERY = 21;
+  int LIST_METRICS_QUERY = 22;
 
   /**
    * The feature id for the '<em><b>Mode</b></em>' attribute.
@@ -885,7 +967,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getSelectQuery()
    * @generated
    */
-  int SELECT_QUERY = 22;
+  int SELECT_QUERY = 23;
 
   /**
    * The feature id for the '<em><b>Metric Reference Clauses</b></em>' containment reference.
@@ -958,7 +1040,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getMetricReferenceClauses()
    * @generated
    */
-  int METRIC_REFERENCE_CLAUSES = 23;
+  int METRIC_REFERENCE_CLAUSES = 24;
 
   /**
    * The feature id for the '<em><b>Metric Clause Types</b></em>' containment reference list.
@@ -986,7 +1068,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getMetricClauseType()
    * @generated
    */
-  int METRIC_CLAUSE_TYPE = 24;
+  int METRIC_CLAUSE_TYPE = 25;
 
   /**
    * The number of structural features of the '<em>Metric Clause Type</em>' class.
@@ -1005,7 +1087,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getDetectQuery()
    * @generated
    */
-  int DETECT_QUERY = 25;
+  int DETECT_QUERY = 26;
 
   /**
    * The feature id for the '<em><b>Query Type</b></em>' containment reference.
@@ -1033,7 +1115,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getDetectBottlenecksQuery()
    * @generated
    */
-  int DETECT_BOTTLENECKS_QUERY = 26;
+  int DETECT_BOTTLENECKS_QUERY = 27;
 
   /**
    * The feature id for the '<em><b>Dof Clause</b></em>' containment reference.
@@ -1070,7 +1152,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getConstraintClause()
    * @generated
    */
-  int CONSTRAINT_CLAUSE = 27;
+  int CONSTRAINT_CLAUSE = 28;
 
   /**
    * The feature id for the '<em><b>Type</b></em>' attribute.
@@ -1098,7 +1180,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getDoFClause()
    * @generated
    */
-  int DO_FCLAUSE = 28;
+  int DO_FCLAUSE = 29;
 
   /**
    * The feature id for the '<em><b>Mode</b></em>' attribute.
@@ -1162,7 +1244,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getExplorationStrategyClause()
    * @generated
    */
-  int EXPLORATION_STRATEGY_CLAUSE = 29;
+  int EXPLORATION_STRATEGY_CLAUSE = 30;
 
   /**
    * The feature id for the '<em><b>Mode</b></em>' attribute.
@@ -1208,7 +1290,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getConfigurationPropertiesClause()
    * @generated
    */
-  int CONFIGURATION_PROPERTIES_CLAUSE = 30;
+  int CONFIGURATION_PROPERTIES_CLAUSE = 31;
 
   /**
    * The feature id for the '<em><b>Mode1</b></em>' attribute.
@@ -1254,7 +1336,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getConfigurationPropertyClause()
    * @generated
    */
-  int CONFIGURATION_PROPERTY_CLAUSE = 31;
+  int CONFIGURATION_PROPERTY_CLAUSE = 32;
 
   /**
    * The feature id for the '<em><b>Key</b></em>' attribute list.
@@ -1291,7 +1373,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getDoFVariationClause()
    * @generated
    */
-  int DO_FVARIATION_CLAUSE = 32;
+  int DO_FVARIATION_CLAUSE = 33;
 
   /**
    * The feature id for the '<em><b>Mode1</b></em>' attribute.
@@ -1337,7 +1419,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getValueVariationClause()
    * @generated
    */
-  int VALUE_VARIATION_CLAUSE = 33;
+  int VALUE_VARIATION_CLAUSE = 34;
 
   /**
    * The feature id for the '<em><b>Value</b></em>' attribute list.
@@ -1365,7 +1447,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getDoubleValueVariationClause()
    * @generated
    */
-  int DOUBLE_VALUE_VARIATION_CLAUSE = 34;
+  int DOUBLE_VALUE_VARIATION_CLAUSE = 35;
 
   /**
    * The feature id for the '<em><b>Value</b></em>' attribute list.
@@ -1393,7 +1475,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getIntervalVariationClause()
    * @generated
    */
-  int INTERVAL_VARIATION_CLAUSE = 35;
+  int INTERVAL_VARIATION_CLAUSE = 36;
 
   /**
    * The feature id for the '<em><b>Start</b></em>' attribute.
@@ -1439,7 +1521,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getVaryingClause()
    * @generated
    */
-  int VARYING_CLAUSE = 36;
+  int VARYING_CLAUSE = 37;
 
   /**
    * The feature id for the '<em><b>Mode</b></em>' attribute.
@@ -1476,7 +1558,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getDoFReference()
    * @generated
    */
-  int DO_FREFERENCE = 37;
+  int DO_FREFERENCE = 38;
 
   /**
    * The feature id for the '<em><b>Do FIdentifier</b></em>' attribute.
@@ -1522,7 +1604,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getMetricClause()
    * @generated
    */
-  int METRIC_CLAUSE = 38;
+  int METRIC_CLAUSE = 39;
 
   /**
    * The feature id for the '<em><b>Metric Reference</b></em>' containment reference.
@@ -1550,7 +1632,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getAggregateMetricClause()
    * @generated
    */
-  int AGGREGATE_METRIC_CLAUSE = 39;
+  int AGGREGATE_METRIC_CLAUSE = 40;
 
   /**
    * The feature id for the '<em><b>Function</b></em>' attribute.
@@ -1596,7 +1678,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getMetricClauses()
    * @generated
    */
-  int METRIC_CLAUSES = 40;
+  int METRIC_CLAUSES = 41;
 
   /**
    * The feature id for the '<em><b>Metrics</b></em>' containment reference list.
@@ -1624,7 +1706,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getMetricStarClause()
    * @generated
    */
-  int METRIC_STAR_CLAUSE = 41;
+  int METRIC_STAR_CLAUSE = 42;
 
   /**
    * The feature id for the '<em><b>Metric Name</b></em>' attribute.
@@ -1652,7 +1734,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getMetricReference()
    * @generated
    */
-  int METRIC_REFERENCE = 42;
+  int METRIC_REFERENCE = 43;
 
   /**
    * The feature id for the '<em><b>Entity Reference</b></em>' attribute.
@@ -1734,7 +1816,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getNavigationClause()
    * @generated
    */
-  int NAVIGATION_CLAUSE = 43;
+  int NAVIGATION_CLAUSE = 44;
 
   /**
    * The number of structural features of the '<em>Navigation Clause</em>' class.
@@ -1753,7 +1835,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getChildrenClause()
    * @generated
    */
-  int CHILDREN_CLAUSE = 44;
+  int CHILDREN_CLAUSE = 45;
 
   /**
    * The feature id for the '<em><b>Content</b></em>' attribute.
@@ -1781,7 +1863,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getParentClause()
    * @generated
    */
-  int PARENT_CLAUSE = 45;
+  int PARENT_CLAUSE = 46;
 
   /**
    * The feature id for the '<em><b>Content</b></em>' attribute.
@@ -1809,7 +1891,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getFindClause()
    * @generated
    */
-  int FIND_CLAUSE = 46;
+  int FIND_CLAUSE = 47;
 
   /**
    * The feature id for the '<em><b>Start</b></em>' attribute.
@@ -1855,7 +1937,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getForClause()
    * @generated
    */
-  int FOR_CLAUSE = 47;
+  int FOR_CLAUSE = 48;
 
   /**
    * The feature id for the '<em><b>Mode</b></em>' attribute.
@@ -1892,7 +1974,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getEntityReferenceClause()
    * @generated
    */
-  int ENTITY_REFERENCE_CLAUSE = 48;
+  int ENTITY_REFERENCE_CLAUSE = 49;
 
   /**
    * The feature id for the '<em><b>Entity References</b></em>' containment reference list.
@@ -1920,7 +2002,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getEntityReference()
    * @generated
    */
-  int ENTITY_REFERENCE = 49;
+  int ENTITY_REFERENCE = 50;
 
   /**
    * The feature id for the '<em><b>Type</b></em>' attribute.
@@ -1966,7 +2048,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getAliasClause()
    * @generated
    */
-  int ALIAS_CLAUSE = 50;
+  int ALIAS_CLAUSE = 51;
 
   /**
    * The feature id for the '<em><b>Mode</b></em>' attribute.
@@ -2003,7 +2085,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getUsingClause()
    * @generated
    */
-  int USING_CLAUSE = 51;
+  int USING_CLAUSE = 52;
 
   /**
    * The feature id for the '<em><b>Mode</b></em>' attribute.
@@ -2040,7 +2122,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getWithClause()
    * @generated
    */
-  int WITH_CLAUSE = 52;
+  int WITH_CLAUSE = 53;
 
   /**
    * The feature id for the '<em><b>Mode</b></em>' attribute.
@@ -2077,7 +2159,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getModelReferenceClause()
    * @generated
    */
-  int MODEL_REFERENCE_CLAUSE = 53;
+  int MODEL_REFERENCE_CLAUSE = 54;
 
   /**
    * The feature id for the '<em><b>Family</b></em>' containment reference.
@@ -2114,7 +2196,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getModelFamily()
    * @generated
    */
-  int MODEL_FAMILY = 54;
+  int MODEL_FAMILY = 55;
 
   /**
    * The feature id for the '<em><b>Family</b></em>' attribute.
@@ -2142,7 +2224,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getModelLocation()
    * @generated
    */
-  int MODEL_LOCATION = 55;
+  int MODEL_LOCATION = 56;
 
   /**
    * The feature id for the '<em><b>Location</b></em>' attribute.
@@ -2170,7 +2252,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getFilterClause()
    * @generated
    */
-  int FILTER_CLAUSE = 56;
+  int FILTER_CLAUSE = 57;
 
   /**
    * The feature id for the '<em><b>Mode</b></em>' attribute.
@@ -2216,7 +2298,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getFilterConditionClause()
    * @generated
    */
-  int FILTER_CONDITION_CLAUSE = 57;
+  int FILTER_CONDITION_CLAUSE = 58;
 
   /**
    * The feature id for the '<em><b>Mode</b></em>' attribute.
@@ -2262,7 +2344,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getFilterConditionValue()
    * @generated
    */
-  int FILTER_CONDITION_VALUE = 58;
+  int FILTER_CONDITION_VALUE = 59;
 
   /**
    * The feature id for the '<em><b>Value</b></em>' attribute.
@@ -2290,7 +2372,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getObserveClause()
    * @generated
    */
-  int OBSERVE_CLAUSE = 59;
+  int OBSERVE_CLAUSE = 60;
 
   /**
    * The feature id for the '<em><b>Mode</b></em>' attribute.
@@ -2336,7 +2418,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getObservationClause()
    * @generated
    */
-  int OBSERVATION_CLAUSE = 60;
+  int OBSERVATION_CLAUSE = 61;
 
   /**
    * The number of structural features of the '<em>Observation Clause</em>' class.
@@ -2355,7 +2437,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getSampleClause()
    * @generated
    */
-  int SAMPLE_CLAUSE = 61;
+  int SAMPLE_CLAUSE = 62;
 
   /**
    * The feature id for the '<em><b>Mode</b></em>' attribute.
@@ -2392,7 +2474,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getConnectorTimeUnitClause()
    * @generated
    */
-  int CONNECTOR_TIME_UNIT_CLAUSE = 62;
+  int CONNECTOR_TIME_UNIT_CLAUSE = 63;
 
   /**
    * The feature id for the '<em><b>Count</b></em>' attribute.
@@ -2429,7 +2511,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getConnectorInstanceReferenceClause()
    * @generated
    */
-  int CONNECTOR_INSTANCE_REFERENCE_CLAUSE = 63;
+  int CONNECTOR_INSTANCE_REFERENCE_CLAUSE = 64;
 
   /**
    * The feature id for the '<em><b>Type</b></em>' attribute.
@@ -2466,7 +2548,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getObserveRelativeClause()
    * @generated
    */
-  int OBSERVE_RELATIVE_CLAUSE = 64;
+  int OBSERVE_RELATIVE_CLAUSE = 65;
 
   /**
    * The feature id for the '<em><b>Direction</b></em>' attribute.
@@ -2503,7 +2585,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getObserveBetweenClause()
    * @generated
    */
-  int OBSERVE_BETWEEN_CLAUSE = 65;
+  int OBSERVE_BETWEEN_CLAUSE = 66;
 
   /**
    * The feature id for the '<em><b>Mode1</b></em>' attribute.
@@ -2558,7 +2640,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getBetweenTimeClause()
    * @generated
    */
-  int BETWEEN_TIME_CLAUSE = 67;
+  int BETWEEN_TIME_CLAUSE = 68;
 
   /**
    * The number of structural features of the '<em>Between Time Clause</em>' class.
@@ -2577,7 +2659,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getRelativeTimeWithSignClause()
    * @generated
    */
-  int RELATIVE_TIME_WITH_SIGN_CLAUSE = 66;
+  int RELATIVE_TIME_WITH_SIGN_CLAUSE = 67;
 
   /**
    * The feature id for the '<em><b>Sign</b></em>' attribute.
@@ -2614,7 +2696,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getTimeClause()
    * @generated
    */
-  int TIME_CLAUSE = 68;
+  int TIME_CLAUSE = 69;
 
   /**
    * The number of structural features of the '<em>Time Clause</em>' class.
@@ -2633,7 +2715,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getAbsoluteTimeClause()
    * @generated
    */
-  int ABSOLUTE_TIME_CLAUSE = 69;
+  int ABSOLUTE_TIME_CLAUSE = 70;
 
   /**
    * The feature id for the '<em><b>Time Spec</b></em>' attribute.
@@ -2661,7 +2743,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getRelativeTimeClause()
    * @generated
    */
-  int RELATIVE_TIME_CLAUSE = 70;
+  int RELATIVE_TIME_CLAUSE = 71;
 
   /**
    * The feature id for the '<em><b>Duration Clause</b></em>' containment reference list.
@@ -2689,7 +2771,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getRelativeTimeDurationClause()
    * @generated
    */
-  int RELATIVE_TIME_DURATION_CLAUSE = 71;
+  int RELATIVE_TIME_DURATION_CLAUSE = 72;
 
   /**
    * The feature id for the '<em><b>Duration</b></em>' attribute.
@@ -2726,7 +2808,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getWhatIfQuery()
    * @generated
    */
-  int WHAT_IF_QUERY = 72;
+  int WHAT_IF_QUERY = 73;
 
   /**
    * The feature id for the '<em><b>What If Variation</b></em>' containment reference.
@@ -2799,7 +2881,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getWhatIfVariation()
    * @generated
    */
-  int WHAT_IF_VARIATION = 73;
+  int WHAT_IF_VARIATION = 74;
 
   /**
    * The feature id for the '<em><b>What If Variation Clause</b></em>' containment reference list.
@@ -2827,7 +2909,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getFilteringClause()
    * @generated
    */
-  int FILTERING_CLAUSE = 74;
+  int FILTERING_CLAUSE = 75;
 
   /**
    * The feature id for the '<em><b>Filtering Rule</b></em>' containment reference.
@@ -2864,7 +2946,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getFilteringStrategy()
    * @generated
    */
-  int FILTERING_STRATEGY = 75;
+  int FILTERING_STRATEGY = 76;
 
   /**
    * The feature id for the '<em><b>Filtering Strategy</b></em>' attribute.
@@ -2892,7 +2974,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getFilteringRule()
    * @generated
    */
-  int FILTERING_RULE = 76;
+  int FILTERING_RULE = 77;
 
   /**
    * The feature id for the '<em><b>Filtering Value</b></em>' containment reference.
@@ -2929,7 +3011,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getWhatIfVariationClause()
    * @generated
    */
-  int WHAT_IF_VARIATION_CLAUSE = 77;
+  int WHAT_IF_VARIATION_CLAUSE = 78;
 
   /**
    * The feature id for the '<em><b>Variation Point</b></em>' attribute.
@@ -2966,7 +3048,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getWhatIfValueVariationClause()
    * @generated
    */
-  int WHAT_IF_VALUE_VARIATION_CLAUSE = 78;
+  int WHAT_IF_VALUE_VARIATION_CLAUSE = 79;
 
   /**
    * The feature id for the '<em><b>Variation Clause</b></em>' containment reference list.
@@ -2994,7 +3076,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getMultipleVariationInstruction()
    * @generated
    */
-  int MULTIPLE_VARIATION_INSTRUCTION = 79;
+  int MULTIPLE_VARIATION_INSTRUCTION = 80;
 
   /**
    * The feature id for the '<em><b>Multi Variation</b></em>' containment reference list.
@@ -3022,7 +3104,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getVariationInstruction()
    * @generated
    */
-  int VARIATION_INSTRUCTION = 80;
+  int VARIATION_INSTRUCTION = 81;
 
   /**
    * The feature id for the '<em><b>Variation</b></em>' attribute.
@@ -3059,7 +3141,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getMultipleArithmeticClause()
    * @generated
    */
-  int MULTIPLE_ARITHMETIC_CLAUSE = 81;
+  int MULTIPLE_ARITHMETIC_CLAUSE = 82;
 
   /**
    * The feature id for the '<em><b>Multi Clause</b></em>' containment reference list.
@@ -3087,7 +3169,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getArithmeticClause()
    * @generated
    */
-  int ARITHMETIC_CLAUSE = 82;
+  int ARITHMETIC_CLAUSE = 83;
 
   /**
    * The feature id for the '<em><b>Mode</b></em>' attribute.
@@ -3124,7 +3206,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getVariableValue()
    * @generated
    */
-  int VARIABLE_VALUE = 83;
+  int VARIABLE_VALUE = 84;
 
   /**
    * The feature id for the '<em><b>Int Value</b></em>' attribute.
@@ -3161,7 +3243,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getComparator()
    * @generated
    */
-  int COMPARATOR = 84;
+  int COMPARATOR = 85;
 
   /**
    * The meta object id for the '{@link tools.descartes.dql.lang.descartesQL.Currency <em>Currency</em>}' enum.
@@ -3171,7 +3253,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getCurrency()
    * @generated
    */
-  int CURRENCY = 85;
+  int CURRENCY = 86;
 
   /**
    * The meta object id for the '{@link tools.descartes.dql.lang.descartesQL.FilterConjunction <em>Filter Conjunction</em>}' enum.
@@ -3181,7 +3263,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getFilterConjunction()
    * @generated
    */
-  int FILTER_CONJUNCTION = 86;
+  int FILTER_CONJUNCTION = 87;
 
   /**
    * The meta object id for the '{@link tools.descartes.dql.lang.descartesQL.FilterConditionType <em>Filter Condition Type</em>}' enum.
@@ -3191,7 +3273,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getFilterConditionType()
    * @generated
    */
-  int FILTER_CONDITION_TYPE = 87;
+  int FILTER_CONDITION_TYPE = 88;
 
   /**
    * The meta object id for the '{@link tools.descartes.dql.lang.descartesQL.ObserveRelativeDirectionType <em>Observe Relative Direction Type</em>}' enum.
@@ -3201,7 +3283,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getObserveRelativeDirectionType()
    * @generated
    */
-  int OBSERVE_RELATIVE_DIRECTION_TYPE = 88;
+  int OBSERVE_RELATIVE_DIRECTION_TYPE = 89;
 
   /**
    * The meta object id for the '{@link tools.descartes.dql.lang.descartesQL.RelativeTimeSignType <em>Relative Time Sign Type</em>}' enum.
@@ -3211,7 +3293,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getRelativeTimeSignType()
    * @generated
    */
-  int RELATIVE_TIME_SIGN_TYPE = 89;
+  int RELATIVE_TIME_SIGN_TYPE = 90;
 
   /**
    * The meta object id for the '{@link tools.descartes.dql.lang.descartesQL.TimeModifierType <em>Time Modifier Type</em>}' enum.
@@ -3221,7 +3303,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getTimeModifierType()
    * @generated
    */
-  int TIME_MODIFIER_TYPE = 90;
+  int TIME_MODIFIER_TYPE = 91;
 
   /**
    * The meta object id for the '{@link tools.descartes.dql.lang.descartesQL.StatisticalAggregateType <em>Statistical Aggregate Type</em>}' enum.
@@ -3231,7 +3313,7 @@ public interface DescartesQLPackage extends EPackage
    * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getStatisticalAggregateType()
    * @generated
    */
-  int STATISTICAL_AGGREGATE_TYPE = 91;
+  int STATISTICAL_AGGREGATE_TYPE = 92;
 
 
   /**
@@ -3342,6 +3424,82 @@ public interface DescartesQLPackage extends EPackage
    */
   EReference getGoal_UsingClause();
 
+  /**
+   * Returns the meta object for class '{@link tools.descartes.dql.lang.descartesQL.GenerateSLAConcern <em>Generate SLA Concern</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Generate SLA Concern</em>'.
+   * @see tools.descartes.dql.lang.descartesQL.GenerateSLAConcern
+   * @generated
+   */
+  EClass getGenerateSLAConcern();
+
+  /**
+   * Returns the meta object for the containment reference '{@link tools.descartes.dql.lang.descartesQL.GenerateSLAConcern#getOffset <em>Offset</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Offset</em>'.
+   * @see tools.descartes.dql.lang.descartesQL.GenerateSLAConcern#getOffset()
+   * @see #getGenerateSLAConcern()
+   * @generated
+   */
+  EReference getGenerateSLAConcern_Offset();
+
+  /**
+   * Returns the meta object for the attribute '{@link tools.descartes.dql.lang.descartesQL.GenerateSLAConcern#getPercentage <em>Percentage</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Percentage</em>'.
+   * @see tools.descartes.dql.lang.descartesQL.GenerateSLAConcern#getPercentage()
+   * @see #getGenerateSLAConcern()
+   * @generated
+   */
+  EAttribute getGenerateSLAConcern_Percentage();
+
+  /**
+   * Returns the meta object for the containment reference '{@link tools.descartes.dql.lang.descartesQL.GenerateSLAConcern#getConstraintClause <em>Constraint Clause</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Constraint Clause</em>'.
+   * @see tools.descartes.dql.lang.descartesQL.GenerateSLAConcern#getConstraintClause()
+   * @see #getGenerateSLAConcern()
+   * @generated
+   */
+  EReference getGenerateSLAConcern_ConstraintClause();
+
+  /**
+   * Returns the meta object for the containment reference '{@link tools.descartes.dql.lang.descartesQL.GenerateSLAConcern#getDofClause <em>Dof Clause</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Dof Clause</em>'.
+   * @see tools.descartes.dql.lang.descartesQL.GenerateSLAConcern#getDofClause()
+   * @see #getGenerateSLAConcern()
+   * @generated
+   */
+  EReference getGenerateSLAConcern_DofClause();
+
+  /**
+   * Returns the meta object for the containment reference '{@link tools.descartes.dql.lang.descartesQL.GenerateSLAConcern#getForClause <em>For Clause</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>For Clause</em>'.
+   * @see tools.descartes.dql.lang.descartesQL.GenerateSLAConcern#getForClause()
+   * @see #getGenerateSLAConcern()
+   * @generated
+   */
+  EReference getGenerateSLAConcern_ForClause();
+
+  /**
+   * Returns the meta object for the containment reference '{@link tools.descartes.dql.lang.descartesQL.GenerateSLAConcern#getUsingClause <em>Using Clause</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Using Clause</em>'.
+   * @see tools.descartes.dql.lang.descartesQL.GenerateSLAConcern#getUsingClause()
+   * @see #getGenerateSLAConcern()
+   * @generated
+   */
+  EReference getGenerateSLAConcern_UsingClause();
+
   /**
    * Returns the meta object for class '{@link tools.descartes.dql.lang.descartesQL.SlaQuery <em>Sla Query</em>}'.
    * <!-- begin-user-doc -->
@@ -3514,6 +3672,17 @@ public interface DescartesQLPackage extends EPackage
    */
   EReference getSlo_Pen();
 
+  /**
+   * Returns the meta object for the containment reference '{@link tools.descartes.dql.lang.descartesQL.Slo#getViolation <em>Violation</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Violation</em>'.
+   * @see tools.descartes.dql.lang.descartesQL.Slo#getViolation()
+   * @see #getSlo()
+   * @generated
+   */
+  EReference getSlo_Violation();
+
   /**
    * Returns the meta object for class '{@link tools.descartes.dql.lang.descartesQL.WeightedSlo <em>Weighted Slo</em>}'.
    * <!-- begin-user-doc -->
@@ -3621,17 +3790,6 @@ public interface DescartesQLPackage extends EPackage
    */
   EAttribute getPenalty_Currency();
 
-  /**
-   * Returns the meta object for the containment reference '{@link tools.descartes.dql.lang.descartesQL.Penalty#getViolation <em>Violation</em>}'.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @return the meta object for the containment reference '<em>Violation</em>'.
-   * @see tools.descartes.dql.lang.descartesQL.Penalty#getViolation()
-   * @see #getPenalty()
-   * @generated
-   */
-  EReference getPenalty_Violation();
-
   /**
    * Returns the meta object for class '{@link tools.descartes.dql.lang.descartesQL.Violation <em>Violation</em>}'.
    * <!-- begin-user-doc -->
@@ -3653,6 +3811,17 @@ public interface DescartesQLPackage extends EPackage
    */
   EAttribute getViolation_Amount();
 
+  /**
+   * Returns the meta object for the attribute '{@link tools.descartes.dql.lang.descartesQL.Violation#getPercentage <em>Percentage</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Percentage</em>'.
+   * @see tools.descartes.dql.lang.descartesQL.Violation#getPercentage()
+   * @see #getViolation()
+   * @generated
+   */
+  EAttribute getViolation_Percentage();
+
   /**
    * Returns the meta object for class '{@link tools.descartes.dql.lang.descartesQL.ModelStructureQuery <em>Model Structure Query</em>}'.
    * <!-- begin-user-doc -->
@@ -6065,6 +6234,64 @@ public interface DescartesQLPackage extends EPackage
      */
     EReference GOAL__USING_CLAUSE = eINSTANCE.getGoal_UsingClause();
 
+    /**
+     * The meta object literal for the '{@link tools.descartes.dql.lang.descartesQL.impl.GenerateSLAConcernImpl <em>Generate SLA Concern</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see tools.descartes.dql.lang.descartesQL.impl.GenerateSLAConcernImpl
+     * @see tools.descartes.dql.lang.descartesQL.impl.DescartesQLPackageImpl#getGenerateSLAConcern()
+     * @generated
+     */
+    EClass GENERATE_SLA_CONCERN = eINSTANCE.getGenerateSLAConcern();
+
+    /**
+     * The meta object literal for the '<em><b>Offset</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference GENERATE_SLA_CONCERN__OFFSET = eINSTANCE.getGenerateSLAConcern_Offset();
+
+    /**
+     * The meta object literal for the '<em><b>Percentage</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute GENERATE_SLA_CONCERN__PERCENTAGE = eINSTANCE.getGenerateSLAConcern_Percentage();
+
+    /**
+     * The meta object literal for the '<em><b>Constraint Clause</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference GENERATE_SLA_CONCERN__CONSTRAINT_CLAUSE = eINSTANCE.getGenerateSLAConcern_ConstraintClause();
+
+    /**
+     * The meta object literal for the '<em><b>Dof Clause</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference GENERATE_SLA_CONCERN__DOF_CLAUSE = eINSTANCE.getGenerateSLAConcern_DofClause();
+
+    /**
+     * The meta object literal for the '<em><b>For Clause</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference GENERATE_SLA_CONCERN__FOR_CLAUSE = eINSTANCE.getGenerateSLAConcern_ForClause();
+
+    /**
+     * The meta object literal for the '<em><b>Using Clause</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference GENERATE_SLA_CONCERN__USING_CLAUSE = eINSTANCE.getGenerateSLAConcern_UsingClause();
+
     /**
      * The meta object literal for the '{@link tools.descartes.dql.lang.descartesQL.impl.SlaQueryImpl <em>Sla Query</em>}' class.
      * <!-- begin-user-doc -->
@@ -6201,6 +6428,14 @@ public interface DescartesQLPackage extends EPackage
      */
     EReference SLO__PEN = eINSTANCE.getSlo_Pen();
 
+    /**
+     * The meta object literal for the '<em><b>Violation</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference SLO__VIOLATION = eINSTANCE.getSlo_Violation();
+
     /**
      * The meta object literal for the '{@link tools.descartes.dql.lang.descartesQL.impl.WeightedSloImpl <em>Weighted Slo</em>}' class.
      * <!-- begin-user-doc -->
@@ -6287,14 +6522,6 @@ public interface DescartesQLPackage extends EPackage
      */
     EAttribute PENALTY__CURRENCY = eINSTANCE.getPenalty_Currency();
 
-    /**
-     * The meta object literal for the '<em><b>Violation</b></em>' containment reference feature.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    EReference PENALTY__VIOLATION = eINSTANCE.getPenalty_Violation();
-
     /**
      * The meta object literal for the '{@link tools.descartes.dql.lang.descartesQL.impl.ViolationImpl <em>Violation</em>}' class.
      * <!-- begin-user-doc -->
@@ -6313,6 +6540,14 @@ public interface DescartesQLPackage extends EPackage
      */
     EAttribute VIOLATION__AMOUNT = eINSTANCE.getViolation_Amount();
 
+    /**
+     * The meta object literal for the '<em><b>Percentage</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute VIOLATION__PERCENTAGE = eINSTANCE.getViolation_Percentage();
+
     /**
      * The meta object literal for the '{@link tools.descartes.dql.lang.descartesQL.impl.ModelStructureQueryImpl <em>Model Structure Query</em>}' class.
      * <!-- begin-user-doc -->
diff --git a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/GenerateSLAConcern.java b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/GenerateSLAConcern.java
new file mode 100644
index 00000000..ca8f9914
--- /dev/null
+++ b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/GenerateSLAConcern.java
@@ -0,0 +1,210 @@
+/**
+ * ==============================================
+ *  DQL : Descartes Query Language
+ * ==============================================
+ * 
+ * (c) Copyright 2014-2016, by Juergen Walter, Fabian Gorsler, Fabian Brosig and other contributors.
+ * 
+ * Project Info:   http://descartes.tools/dql
+ * 
+ * All rights reserved. This software is made available under the terms of the 
+ * Eclipse Public License (EPL) v1.0 as published by the Eclipse Foundation
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * This software is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the Eclipse Public License (EPL)
+ * for more details.
+ * 
+ * You should have received a copy of the Eclipse Public License (EPL)
+ * along with this software; if not visit http://www.eclipse.org or write to
+ * Eclipse Foundation, Inc., 308 SW First Avenue, Suite 110, Portland, 97204 USA
+ * Email: license (at) eclipse.org 
+ * 
+ * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
+ * in the United States and other countries.]
+ */
+package tools.descartes.dql.lang.descartesQL;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Generate SLA Concern</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link tools.descartes.dql.lang.descartesQL.GenerateSLAConcern#getOffset <em>Offset</em>}</li>
+ *   <li>{@link tools.descartes.dql.lang.descartesQL.GenerateSLAConcern#getPercentage <em>Percentage</em>}</li>
+ *   <li>{@link tools.descartes.dql.lang.descartesQL.GenerateSLAConcern#getConstraintClause <em>Constraint Clause</em>}</li>
+ *   <li>{@link tools.descartes.dql.lang.descartesQL.GenerateSLAConcern#getDofClause <em>Dof Clause</em>}</li>
+ *   <li>{@link tools.descartes.dql.lang.descartesQL.GenerateSLAConcern#getForClause <em>For Clause</em>}</li>
+ *   <li>{@link tools.descartes.dql.lang.descartesQL.GenerateSLAConcern#getUsingClause <em>Using Clause</em>}</li>
+ * </ul>
+ *
+ * @see tools.descartes.dql.lang.descartesQL.DescartesQLPackage#getGenerateSLAConcern()
+ * @model
+ * @generated
+ */
+public interface GenerateSLAConcern extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Offset</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Offset</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Offset</em>' containment reference.
+   * @see #setOffset(MultipleArithmeticClause)
+   * @see tools.descartes.dql.lang.descartesQL.DescartesQLPackage#getGenerateSLAConcern_Offset()
+   * @model containment="true"
+   * @generated
+   */
+  MultipleArithmeticClause getOffset();
+
+  /**
+   * Sets the value of the '{@link tools.descartes.dql.lang.descartesQL.GenerateSLAConcern#getOffset <em>Offset</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Offset</em>' containment reference.
+   * @see #getOffset()
+   * @generated
+   */
+  void setOffset(MultipleArithmeticClause value);
+
+  /**
+   * Returns the value of the '<em><b>Percentage</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Percentage</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Percentage</em>' attribute.
+   * @see #setPercentage(double)
+   * @see tools.descartes.dql.lang.descartesQL.DescartesQLPackage#getGenerateSLAConcern_Percentage()
+   * @model
+   * @generated
+   */
+  double getPercentage();
+
+  /**
+   * Sets the value of the '{@link tools.descartes.dql.lang.descartesQL.GenerateSLAConcern#getPercentage <em>Percentage</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Percentage</em>' attribute.
+   * @see #getPercentage()
+   * @generated
+   */
+  void setPercentage(double value);
+
+  /**
+   * Returns the value of the '<em><b>Constraint Clause</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Constraint Clause</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Constraint Clause</em>' containment reference.
+   * @see #setConstraintClause(ConstraintClause)
+   * @see tools.descartes.dql.lang.descartesQL.DescartesQLPackage#getGenerateSLAConcern_ConstraintClause()
+   * @model containment="true"
+   * @generated
+   */
+  ConstraintClause getConstraintClause();
+
+  /**
+   * Sets the value of the '{@link tools.descartes.dql.lang.descartesQL.GenerateSLAConcern#getConstraintClause <em>Constraint Clause</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Constraint Clause</em>' containment reference.
+   * @see #getConstraintClause()
+   * @generated
+   */
+  void setConstraintClause(ConstraintClause value);
+
+  /**
+   * Returns the value of the '<em><b>Dof Clause</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Dof Clause</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Dof Clause</em>' containment reference.
+   * @see #setDofClause(DoFClause)
+   * @see tools.descartes.dql.lang.descartesQL.DescartesQLPackage#getGenerateSLAConcern_DofClause()
+   * @model containment="true"
+   * @generated
+   */
+  DoFClause getDofClause();
+
+  /**
+   * Sets the value of the '{@link tools.descartes.dql.lang.descartesQL.GenerateSLAConcern#getDofClause <em>Dof Clause</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Dof Clause</em>' containment reference.
+   * @see #getDofClause()
+   * @generated
+   */
+  void setDofClause(DoFClause value);
+
+  /**
+   * Returns the value of the '<em><b>For Clause</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>For Clause</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>For Clause</em>' containment reference.
+   * @see #setForClause(ForClause)
+   * @see tools.descartes.dql.lang.descartesQL.DescartesQLPackage#getGenerateSLAConcern_ForClause()
+   * @model containment="true"
+   * @generated
+   */
+  ForClause getForClause();
+
+  /**
+   * Sets the value of the '{@link tools.descartes.dql.lang.descartesQL.GenerateSLAConcern#getForClause <em>For Clause</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>For Clause</em>' containment reference.
+   * @see #getForClause()
+   * @generated
+   */
+  void setForClause(ForClause value);
+
+  /**
+   * Returns the value of the '<em><b>Using Clause</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Using Clause</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Using Clause</em>' containment reference.
+   * @see #setUsingClause(UsingClause)
+   * @see tools.descartes.dql.lang.descartesQL.DescartesQLPackage#getGenerateSLAConcern_UsingClause()
+   * @model containment="true"
+   * @generated
+   */
+  UsingClause getUsingClause();
+
+  /**
+   * Sets the value of the '{@link tools.descartes.dql.lang.descartesQL.GenerateSLAConcern#getUsingClause <em>Using Clause</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Using Clause</em>' containment reference.
+   * @see #getUsingClause()
+   * @generated
+   */
+  void setUsingClause(UsingClause value);
+
+} // GenerateSLAConcern
diff --git a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/Penalty.java b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/Penalty.java
index b0648b4e..a38c0695 100644
--- a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/Penalty.java
+++ b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/Penalty.java
@@ -40,7 +40,6 @@ import org.eclipse.emf.ecore.EObject;
  *   <li>{@link tools.descartes.dql.lang.descartesQL.Penalty#getType <em>Type</em>}</li>
  *   <li>{@link tools.descartes.dql.lang.descartesQL.Penalty#getValue <em>Value</em>}</li>
  *   <li>{@link tools.descartes.dql.lang.descartesQL.Penalty#getCurrency <em>Currency</em>}</li>
- *   <li>{@link tools.descartes.dql.lang.descartesQL.Penalty#getViolation <em>Violation</em>}</li>
  * </ul>
  *
  * @see tools.descartes.dql.lang.descartesQL.DescartesQLPackage#getPenalty()
@@ -130,30 +129,4 @@ public interface Penalty extends EObject
    */
   void setCurrency(Currency value);
 
-  /**
-   * Returns the value of the '<em><b>Violation</b></em>' containment reference.
-   * <!-- begin-user-doc -->
-   * <p>
-   * If the meaning of the '<em>Violation</em>' containment reference isn't clear,
-   * there really should be more of a description here...
-   * </p>
-   * <!-- end-user-doc -->
-   * @return the value of the '<em>Violation</em>' containment reference.
-   * @see #setViolation(Violation)
-   * @see tools.descartes.dql.lang.descartesQL.DescartesQLPackage#getPenalty_Violation()
-   * @model containment="true"
-   * @generated
-   */
-  Violation getViolation();
-
-  /**
-   * Sets the value of the '{@link tools.descartes.dql.lang.descartesQL.Penalty#getViolation <em>Violation</em>}' containment reference.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @param value the new value of the '<em>Violation</em>' containment reference.
-   * @see #getViolation()
-   * @generated
-   */
-  void setViolation(Violation value);
-
 } // Penalty
diff --git a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/Slo.java b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/Slo.java
index 740a41d4..b37a16d4 100644
--- a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/Slo.java
+++ b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/Slo.java
@@ -43,6 +43,7 @@ import org.eclipse.emf.ecore.EObject;
  *   <li>{@link tools.descartes.dql.lang.descartesQL.Slo#getValue <em>Value</em>}</li>
  *   <li>{@link tools.descartes.dql.lang.descartesQL.Slo#getFuz <em>Fuz</em>}</li>
  *   <li>{@link tools.descartes.dql.lang.descartesQL.Slo#getPen <em>Pen</em>}</li>
+ *   <li>{@link tools.descartes.dql.lang.descartesQL.Slo#getViolation <em>Violation</em>}</li>
  * </ul>
  *
  * @see tools.descartes.dql.lang.descartesQL.DescartesQLPackage#getSlo()
@@ -210,4 +211,30 @@ public interface Slo extends EObject
    */
   void setPen(Penalty value);
 
+  /**
+   * Returns the value of the '<em><b>Violation</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Violation</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Violation</em>' containment reference.
+   * @see #setViolation(Violation)
+   * @see tools.descartes.dql.lang.descartesQL.DescartesQLPackage#getSlo_Violation()
+   * @model containment="true"
+   * @generated
+   */
+  Violation getViolation();
+
+  /**
+   * Sets the value of the '{@link tools.descartes.dql.lang.descartesQL.Slo#getViolation <em>Violation</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Violation</em>' containment reference.
+   * @see #getViolation()
+   * @generated
+   */
+  void setViolation(Violation value);
+
 } // Slo
diff --git a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/Violation.java b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/Violation.java
index 8578bebb..0cd59dc7 100644
--- a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/Violation.java
+++ b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/Violation.java
@@ -38,6 +38,7 @@ import org.eclipse.emf.ecore.EObject;
  * </p>
  * <ul>
  *   <li>{@link tools.descartes.dql.lang.descartesQL.Violation#getAmount <em>Amount</em>}</li>
+ *   <li>{@link tools.descartes.dql.lang.descartesQL.Violation#getPercentage <em>Percentage</em>}</li>
  * </ul>
  *
  * @see tools.descartes.dql.lang.descartesQL.DescartesQLPackage#getViolation()
@@ -72,4 +73,30 @@ public interface Violation extends EObject
    */
   void setAmount(int value);
 
+  /**
+   * Returns the value of the '<em><b>Percentage</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Percentage</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Percentage</em>' attribute.
+   * @see #setPercentage(double)
+   * @see tools.descartes.dql.lang.descartesQL.DescartesQLPackage#getViolation_Percentage()
+   * @model
+   * @generated
+   */
+  double getPercentage();
+
+  /**
+   * Sets the value of the '{@link tools.descartes.dql.lang.descartesQL.Violation#getPercentage <em>Percentage</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Percentage</em>' attribute.
+   * @see #getPercentage()
+   * @generated
+   */
+  void setPercentage(double value);
+
 } // Violation
diff --git a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/impl/DescartesQLFactoryImpl.java b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/impl/DescartesQLFactoryImpl.java
index 743375b1..5381058c 100644
--- a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/impl/DescartesQLFactoryImpl.java
+++ b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/impl/DescartesQLFactoryImpl.java
@@ -91,6 +91,7 @@ public class DescartesQLFactoryImpl extends EFactoryImpl implements DescartesQLF
     {
       case DescartesQLPackage.DESCARTES_QL: return createDescartesQL();
       case DescartesQLPackage.GOAL: return createGoal();
+      case DescartesQLPackage.GENERATE_SLA_CONCERN: return createGenerateSLAConcern();
       case DescartesQLPackage.SLA_QUERY: return createSlaQuery();
       case DescartesQLPackage.SLO_QUERY: return createSloQuery();
       case DescartesQLPackage.SLA: return createSla();
@@ -262,6 +263,17 @@ public class DescartesQLFactoryImpl extends EFactoryImpl implements DescartesQLF
     return goal;
   }
 
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public GenerateSLAConcern createGenerateSLAConcern()
+  {
+    GenerateSLAConcernImpl generateSLAConcern = new GenerateSLAConcernImpl();
+    return generateSLAConcern;
+  }
+
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
diff --git a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/impl/DescartesQLPackageImpl.java b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/impl/DescartesQLPackageImpl.java
index 91ffc6f3..68f02d08 100644
--- a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/impl/DescartesQLPackageImpl.java
+++ b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/impl/DescartesQLPackageImpl.java
@@ -71,6 +71,7 @@ import tools.descartes.dql.lang.descartesQL.FilteringStrategy;
 import tools.descartes.dql.lang.descartesQL.FindClause;
 import tools.descartes.dql.lang.descartesQL.ForClause;
 import tools.descartes.dql.lang.descartesQL.Fuzziness;
+import tools.descartes.dql.lang.descartesQL.GenerateSLAConcern;
 import tools.descartes.dql.lang.descartesQL.GetConstraintsQuery;
 import tools.descartes.dql.lang.descartesQL.GetExplorationStrategiesQuery;
 import tools.descartes.dql.lang.descartesQL.GetQuery;
@@ -151,6 +152,13 @@ public class DescartesQLPackageImpl extends EPackageImpl implements DescartesQLP
    */
   private EClass goalEClass = null;
 
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass generateSLAConcernEClass = null;
+
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -944,6 +952,76 @@ public class DescartesQLPackageImpl extends EPackageImpl implements DescartesQLP
     return (EReference)goalEClass.getEStructuralFeatures().get(6);
   }
 
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getGenerateSLAConcern()
+  {
+    return generateSLAConcernEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getGenerateSLAConcern_Offset()
+  {
+    return (EReference)generateSLAConcernEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getGenerateSLAConcern_Percentage()
+  {
+    return (EAttribute)generateSLAConcernEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getGenerateSLAConcern_ConstraintClause()
+  {
+    return (EReference)generateSLAConcernEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getGenerateSLAConcern_DofClause()
+  {
+    return (EReference)generateSLAConcernEClass.getEStructuralFeatures().get(3);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getGenerateSLAConcern_ForClause()
+  {
+    return (EReference)generateSLAConcernEClass.getEStructuralFeatures().get(4);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getGenerateSLAConcern_UsingClause()
+  {
+    return (EReference)generateSLAConcernEClass.getEStructuralFeatures().get(5);
+  }
+
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -1104,6 +1182,16 @@ public class DescartesQLPackageImpl extends EPackageImpl implements DescartesQLP
     return (EReference)sloEClass.getEStructuralFeatures().get(5);
   }
 
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getSlo_Violation()
+  {
+    return (EReference)sloEClass.getEStructuralFeatures().get(6);
+  }
+
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -1209,9 +1297,9 @@ public class DescartesQLPackageImpl extends EPackageImpl implements DescartesQLP
    * <!-- end-user-doc -->
    * @generated
    */
-  public EReference getPenalty_Violation()
+  public EClass getViolation()
   {
-    return (EReference)penaltyEClass.getEStructuralFeatures().get(3);
+    return violationEClass;
   }
 
   /**
@@ -1219,9 +1307,9 @@ public class DescartesQLPackageImpl extends EPackageImpl implements DescartesQLP
    * <!-- end-user-doc -->
    * @generated
    */
-  public EClass getViolation()
+  public EAttribute getViolation_Amount()
   {
-    return violationEClass;
+    return (EAttribute)violationEClass.getEStructuralFeatures().get(0);
   }
 
   /**
@@ -1229,9 +1317,9 @@ public class DescartesQLPackageImpl extends EPackageImpl implements DescartesQLP
    * <!-- end-user-doc -->
    * @generated
    */
-  public EAttribute getViolation_Amount()
+  public EAttribute getViolation_Percentage()
   {
-    return (EAttribute)violationEClass.getEStructuralFeatures().get(0);
+    return (EAttribute)violationEClass.getEStructuralFeatures().get(1);
   }
 
   /**
@@ -3446,6 +3534,14 @@ public class DescartesQLPackageImpl extends EPackageImpl implements DescartesQLP
     createEReference(goalEClass, GOAL__FOR_CLAUSE);
     createEReference(goalEClass, GOAL__USING_CLAUSE);
 
+    generateSLAConcernEClass = createEClass(GENERATE_SLA_CONCERN);
+    createEReference(generateSLAConcernEClass, GENERATE_SLA_CONCERN__OFFSET);
+    createEAttribute(generateSLAConcernEClass, GENERATE_SLA_CONCERN__PERCENTAGE);
+    createEReference(generateSLAConcernEClass, GENERATE_SLA_CONCERN__CONSTRAINT_CLAUSE);
+    createEReference(generateSLAConcernEClass, GENERATE_SLA_CONCERN__DOF_CLAUSE);
+    createEReference(generateSLAConcernEClass, GENERATE_SLA_CONCERN__FOR_CLAUSE);
+    createEReference(generateSLAConcernEClass, GENERATE_SLA_CONCERN__USING_CLAUSE);
+
     slaQueryEClass = createEClass(SLA_QUERY);
     createEAttribute(slaQueryEClass, SLA_QUERY__TYPE);
     createEReference(slaQueryEClass, SLA_QUERY__SLAS);
@@ -3465,6 +3561,7 @@ public class DescartesQLPackageImpl extends EPackageImpl implements DescartesQLP
     createEReference(sloEClass, SLO__VALUE);
     createEReference(sloEClass, SLO__FUZ);
     createEReference(sloEClass, SLO__PEN);
+    createEReference(sloEClass, SLO__VIOLATION);
 
     weightedSloEClass = createEClass(WEIGHTED_SLO);
     createEReference(weightedSloEClass, WEIGHTED_SLO__SLO);
@@ -3478,10 +3575,10 @@ public class DescartesQLPackageImpl extends EPackageImpl implements DescartesQLP
     createEAttribute(penaltyEClass, PENALTY__TYPE);
     createEAttribute(penaltyEClass, PENALTY__VALUE);
     createEAttribute(penaltyEClass, PENALTY__CURRENCY);
-    createEReference(penaltyEClass, PENALTY__VIOLATION);
 
     violationEClass = createEClass(VIOLATION);
     createEAttribute(violationEClass, VIOLATION__AMOUNT);
+    createEAttribute(violationEClass, VIOLATION__PERCENTAGE);
 
     modelStructureQueryEClass = createEClass(MODEL_STRUCTURE_QUERY);
 
@@ -3837,6 +3934,14 @@ public class DescartesQLPackageImpl extends EPackageImpl implements DescartesQLP
     initEReference(getGoal_ForClause(), this.getForClause(), null, "forClause", null, 0, 1, Goal.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
     initEReference(getGoal_UsingClause(), this.getUsingClause(), null, "usingClause", null, 0, 1, Goal.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
+    initEClass(generateSLAConcernEClass, GenerateSLAConcern.class, "GenerateSLAConcern", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getGenerateSLAConcern_Offset(), this.getMultipleArithmeticClause(), null, "offset", null, 0, 1, GenerateSLAConcern.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getGenerateSLAConcern_Percentage(), ecorePackage.getEDouble(), "percentage", null, 0, 1, GenerateSLAConcern.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getGenerateSLAConcern_ConstraintClause(), this.getConstraintClause(), null, "constraintClause", null, 0, 1, GenerateSLAConcern.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getGenerateSLAConcern_DofClause(), this.getDoFClause(), null, "dofClause", null, 0, 1, GenerateSLAConcern.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getGenerateSLAConcern_ForClause(), this.getForClause(), null, "forClause", null, 0, 1, GenerateSLAConcern.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getGenerateSLAConcern_UsingClause(), this.getUsingClause(), null, "usingClause", null, 0, 1, GenerateSLAConcern.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
     initEClass(slaQueryEClass, SlaQuery.class, "SlaQuery", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
     initEAttribute(getSlaQuery_Type(), ecorePackage.getEString(), "type", null, 0, 1, SlaQuery.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
     initEReference(getSlaQuery_Slas(), this.getSla(), null, "slas", null, 0, -1, SlaQuery.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
@@ -3856,6 +3961,7 @@ public class DescartesQLPackageImpl extends EPackageImpl implements DescartesQLP
     initEReference(getSlo_Value(), this.getVariableValue(), null, "value", null, 0, 1, Slo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
     initEReference(getSlo_Fuz(), this.getFuzziness(), null, "fuz", null, 0, 1, Slo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
     initEReference(getSlo_Pen(), this.getPenalty(), null, "pen", null, 0, 1, Slo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getSlo_Violation(), this.getViolation(), null, "violation", null, 0, 1, Slo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
     initEClass(weightedSloEClass, WeightedSlo.class, "WeightedSlo", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
     initEReference(getWeightedSlo_Slo(), this.getSlo(), null, "slo", null, 0, 1, WeightedSlo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
@@ -3869,10 +3975,10 @@ public class DescartesQLPackageImpl extends EPackageImpl implements DescartesQLP
     initEAttribute(getPenalty_Type(), ecorePackage.getEString(), "type", null, 0, 1, Penalty.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
     initEAttribute(getPenalty_Value(), ecorePackage.getEDouble(), "value", null, 0, 1, Penalty.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
     initEAttribute(getPenalty_Currency(), this.getCurrency(), "currency", null, 0, 1, Penalty.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-    initEReference(getPenalty_Violation(), this.getViolation(), null, "violation", null, 0, 1, Penalty.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
     initEClass(violationEClass, Violation.class, "Violation", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
     initEAttribute(getViolation_Amount(), ecorePackage.getEInt(), "amount", null, 0, 1, Violation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getViolation_Percentage(), ecorePackage.getEDouble(), "percentage", null, 0, 1, Violation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
     initEClass(modelStructureQueryEClass, ModelStructureQuery.class, "ModelStructureQuery", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 
diff --git a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/impl/GenerateSLAConcernImpl.java b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/impl/GenerateSLAConcernImpl.java
new file mode 100644
index 00000000..e42be0b1
--- /dev/null
+++ b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/impl/GenerateSLAConcernImpl.java
@@ -0,0 +1,577 @@
+/**
+ * ==============================================
+ *  DQL : Descartes Query Language
+ * ==============================================
+ * 
+ * (c) Copyright 2014-2016, by Juergen Walter, Fabian Gorsler, Fabian Brosig and other contributors.
+ * 
+ * Project Info:   http://descartes.tools/dql
+ * 
+ * All rights reserved. This software is made available under the terms of the 
+ * Eclipse Public License (EPL) v1.0 as published by the Eclipse Foundation
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * This software is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the Eclipse Public License (EPL)
+ * for more details.
+ * 
+ * You should have received a copy of the Eclipse Public License (EPL)
+ * along with this software; if not visit http://www.eclipse.org or write to
+ * Eclipse Foundation, Inc., 308 SW First Avenue, Suite 110, Portland, 97204 USA
+ * Email: license (at) eclipse.org 
+ * 
+ * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
+ * in the United States and other countries.]
+ */
+package tools.descartes.dql.lang.descartesQL.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import tools.descartes.dql.lang.descartesQL.ConstraintClause;
+import tools.descartes.dql.lang.descartesQL.DescartesQLPackage;
+import tools.descartes.dql.lang.descartesQL.DoFClause;
+import tools.descartes.dql.lang.descartesQL.ForClause;
+import tools.descartes.dql.lang.descartesQL.GenerateSLAConcern;
+import tools.descartes.dql.lang.descartesQL.MultipleArithmeticClause;
+import tools.descartes.dql.lang.descartesQL.UsingClause;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Generate SLA Concern</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link tools.descartes.dql.lang.descartesQL.impl.GenerateSLAConcernImpl#getOffset <em>Offset</em>}</li>
+ *   <li>{@link tools.descartes.dql.lang.descartesQL.impl.GenerateSLAConcernImpl#getPercentage <em>Percentage</em>}</li>
+ *   <li>{@link tools.descartes.dql.lang.descartesQL.impl.GenerateSLAConcernImpl#getConstraintClause <em>Constraint Clause</em>}</li>
+ *   <li>{@link tools.descartes.dql.lang.descartesQL.impl.GenerateSLAConcernImpl#getDofClause <em>Dof Clause</em>}</li>
+ *   <li>{@link tools.descartes.dql.lang.descartesQL.impl.GenerateSLAConcernImpl#getForClause <em>For Clause</em>}</li>
+ *   <li>{@link tools.descartes.dql.lang.descartesQL.impl.GenerateSLAConcernImpl#getUsingClause <em>Using Clause</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class GenerateSLAConcernImpl extends MinimalEObjectImpl.Container implements GenerateSLAConcern
+{
+  /**
+   * The cached value of the '{@link #getOffset() <em>Offset</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getOffset()
+   * @generated
+   * @ordered
+   */
+  protected MultipleArithmeticClause offset;
+
+  /**
+   * The default value of the '{@link #getPercentage() <em>Percentage</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getPercentage()
+   * @generated
+   * @ordered
+   */
+  protected static final double PERCENTAGE_EDEFAULT = 0.0;
+
+  /**
+   * The cached value of the '{@link #getPercentage() <em>Percentage</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getPercentage()
+   * @generated
+   * @ordered
+   */
+  protected double percentage = PERCENTAGE_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getConstraintClause() <em>Constraint Clause</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getConstraintClause()
+   * @generated
+   * @ordered
+   */
+  protected ConstraintClause constraintClause;
+
+  /**
+   * The cached value of the '{@link #getDofClause() <em>Dof Clause</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getDofClause()
+   * @generated
+   * @ordered
+   */
+  protected DoFClause dofClause;
+
+  /**
+   * The cached value of the '{@link #getForClause() <em>For Clause</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getForClause()
+   * @generated
+   * @ordered
+   */
+  protected ForClause forClause;
+
+  /**
+   * The cached value of the '{@link #getUsingClause() <em>Using Clause</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getUsingClause()
+   * @generated
+   * @ordered
+   */
+  protected UsingClause usingClause;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected GenerateSLAConcernImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return DescartesQLPackage.Literals.GENERATE_SLA_CONCERN;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public MultipleArithmeticClause getOffset()
+  {
+    return offset;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetOffset(MultipleArithmeticClause newOffset, NotificationChain msgs)
+  {
+    MultipleArithmeticClause oldOffset = offset;
+    offset = newOffset;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DescartesQLPackage.GENERATE_SLA_CONCERN__OFFSET, oldOffset, newOffset);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setOffset(MultipleArithmeticClause newOffset)
+  {
+    if (newOffset != offset)
+    {
+      NotificationChain msgs = null;
+      if (offset != null)
+        msgs = ((InternalEObject)offset).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - DescartesQLPackage.GENERATE_SLA_CONCERN__OFFSET, null, msgs);
+      if (newOffset != null)
+        msgs = ((InternalEObject)newOffset).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - DescartesQLPackage.GENERATE_SLA_CONCERN__OFFSET, null, msgs);
+      msgs = basicSetOffset(newOffset, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, DescartesQLPackage.GENERATE_SLA_CONCERN__OFFSET, newOffset, newOffset));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public double getPercentage()
+  {
+    return percentage;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setPercentage(double newPercentage)
+  {
+    double oldPercentage = percentage;
+    percentage = newPercentage;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, DescartesQLPackage.GENERATE_SLA_CONCERN__PERCENTAGE, oldPercentage, percentage));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ConstraintClause getConstraintClause()
+  {
+    return constraintClause;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetConstraintClause(ConstraintClause newConstraintClause, NotificationChain msgs)
+  {
+    ConstraintClause oldConstraintClause = constraintClause;
+    constraintClause = newConstraintClause;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DescartesQLPackage.GENERATE_SLA_CONCERN__CONSTRAINT_CLAUSE, oldConstraintClause, newConstraintClause);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setConstraintClause(ConstraintClause newConstraintClause)
+  {
+    if (newConstraintClause != constraintClause)
+    {
+      NotificationChain msgs = null;
+      if (constraintClause != null)
+        msgs = ((InternalEObject)constraintClause).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - DescartesQLPackage.GENERATE_SLA_CONCERN__CONSTRAINT_CLAUSE, null, msgs);
+      if (newConstraintClause != null)
+        msgs = ((InternalEObject)newConstraintClause).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - DescartesQLPackage.GENERATE_SLA_CONCERN__CONSTRAINT_CLAUSE, null, msgs);
+      msgs = basicSetConstraintClause(newConstraintClause, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, DescartesQLPackage.GENERATE_SLA_CONCERN__CONSTRAINT_CLAUSE, newConstraintClause, newConstraintClause));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public DoFClause getDofClause()
+  {
+    return dofClause;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetDofClause(DoFClause newDofClause, NotificationChain msgs)
+  {
+    DoFClause oldDofClause = dofClause;
+    dofClause = newDofClause;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DescartesQLPackage.GENERATE_SLA_CONCERN__DOF_CLAUSE, oldDofClause, newDofClause);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setDofClause(DoFClause newDofClause)
+  {
+    if (newDofClause != dofClause)
+    {
+      NotificationChain msgs = null;
+      if (dofClause != null)
+        msgs = ((InternalEObject)dofClause).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - DescartesQLPackage.GENERATE_SLA_CONCERN__DOF_CLAUSE, null, msgs);
+      if (newDofClause != null)
+        msgs = ((InternalEObject)newDofClause).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - DescartesQLPackage.GENERATE_SLA_CONCERN__DOF_CLAUSE, null, msgs);
+      msgs = basicSetDofClause(newDofClause, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, DescartesQLPackage.GENERATE_SLA_CONCERN__DOF_CLAUSE, newDofClause, newDofClause));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ForClause getForClause()
+  {
+    return forClause;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetForClause(ForClause newForClause, NotificationChain msgs)
+  {
+    ForClause oldForClause = forClause;
+    forClause = newForClause;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DescartesQLPackage.GENERATE_SLA_CONCERN__FOR_CLAUSE, oldForClause, newForClause);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setForClause(ForClause newForClause)
+  {
+    if (newForClause != forClause)
+    {
+      NotificationChain msgs = null;
+      if (forClause != null)
+        msgs = ((InternalEObject)forClause).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - DescartesQLPackage.GENERATE_SLA_CONCERN__FOR_CLAUSE, null, msgs);
+      if (newForClause != null)
+        msgs = ((InternalEObject)newForClause).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - DescartesQLPackage.GENERATE_SLA_CONCERN__FOR_CLAUSE, null, msgs);
+      msgs = basicSetForClause(newForClause, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, DescartesQLPackage.GENERATE_SLA_CONCERN__FOR_CLAUSE, newForClause, newForClause));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public UsingClause getUsingClause()
+  {
+    return usingClause;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetUsingClause(UsingClause newUsingClause, NotificationChain msgs)
+  {
+    UsingClause oldUsingClause = usingClause;
+    usingClause = newUsingClause;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DescartesQLPackage.GENERATE_SLA_CONCERN__USING_CLAUSE, oldUsingClause, newUsingClause);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setUsingClause(UsingClause newUsingClause)
+  {
+    if (newUsingClause != usingClause)
+    {
+      NotificationChain msgs = null;
+      if (usingClause != null)
+        msgs = ((InternalEObject)usingClause).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - DescartesQLPackage.GENERATE_SLA_CONCERN__USING_CLAUSE, null, msgs);
+      if (newUsingClause != null)
+        msgs = ((InternalEObject)newUsingClause).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - DescartesQLPackage.GENERATE_SLA_CONCERN__USING_CLAUSE, null, msgs);
+      msgs = basicSetUsingClause(newUsingClause, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, DescartesQLPackage.GENERATE_SLA_CONCERN__USING_CLAUSE, newUsingClause, newUsingClause));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__OFFSET:
+        return basicSetOffset(null, msgs);
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__CONSTRAINT_CLAUSE:
+        return basicSetConstraintClause(null, msgs);
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__DOF_CLAUSE:
+        return basicSetDofClause(null, msgs);
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__FOR_CLAUSE:
+        return basicSetForClause(null, msgs);
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__USING_CLAUSE:
+        return basicSetUsingClause(null, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__OFFSET:
+        return getOffset();
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__PERCENTAGE:
+        return getPercentage();
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__CONSTRAINT_CLAUSE:
+        return getConstraintClause();
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__DOF_CLAUSE:
+        return getDofClause();
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__FOR_CLAUSE:
+        return getForClause();
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__USING_CLAUSE:
+        return getUsingClause();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__OFFSET:
+        setOffset((MultipleArithmeticClause)newValue);
+        return;
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__PERCENTAGE:
+        setPercentage((Double)newValue);
+        return;
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__CONSTRAINT_CLAUSE:
+        setConstraintClause((ConstraintClause)newValue);
+        return;
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__DOF_CLAUSE:
+        setDofClause((DoFClause)newValue);
+        return;
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__FOR_CLAUSE:
+        setForClause((ForClause)newValue);
+        return;
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__USING_CLAUSE:
+        setUsingClause((UsingClause)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__OFFSET:
+        setOffset((MultipleArithmeticClause)null);
+        return;
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__PERCENTAGE:
+        setPercentage(PERCENTAGE_EDEFAULT);
+        return;
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__CONSTRAINT_CLAUSE:
+        setConstraintClause((ConstraintClause)null);
+        return;
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__DOF_CLAUSE:
+        setDofClause((DoFClause)null);
+        return;
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__FOR_CLAUSE:
+        setForClause((ForClause)null);
+        return;
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__USING_CLAUSE:
+        setUsingClause((UsingClause)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__OFFSET:
+        return offset != null;
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__PERCENTAGE:
+        return percentage != PERCENTAGE_EDEFAULT;
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__CONSTRAINT_CLAUSE:
+        return constraintClause != null;
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__DOF_CLAUSE:
+        return dofClause != null;
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__FOR_CLAUSE:
+        return forClause != null;
+      case DescartesQLPackage.GENERATE_SLA_CONCERN__USING_CLAUSE:
+        return usingClause != null;
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy()) return super.toString();
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (percentage: ");
+    result.append(percentage);
+    result.append(')');
+    return result.toString();
+  }
+
+} //GenerateSLAConcernImpl
diff --git a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/impl/PenaltyImpl.java b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/impl/PenaltyImpl.java
index f6adb50c..26c519aa 100644
--- a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/impl/PenaltyImpl.java
+++ b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/impl/PenaltyImpl.java
@@ -27,10 +27,8 @@
 package tools.descartes.dql.lang.descartesQL.impl;
 
 import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.NotificationChain;
 
 import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
@@ -38,7 +36,6 @@ import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
 import tools.descartes.dql.lang.descartesQL.Currency;
 import tools.descartes.dql.lang.descartesQL.DescartesQLPackage;
 import tools.descartes.dql.lang.descartesQL.Penalty;
-import tools.descartes.dql.lang.descartesQL.Violation;
 
 /**
  * <!-- begin-user-doc -->
@@ -51,7 +48,6 @@ import tools.descartes.dql.lang.descartesQL.Violation;
  *   <li>{@link tools.descartes.dql.lang.descartesQL.impl.PenaltyImpl#getType <em>Type</em>}</li>
  *   <li>{@link tools.descartes.dql.lang.descartesQL.impl.PenaltyImpl#getValue <em>Value</em>}</li>
  *   <li>{@link tools.descartes.dql.lang.descartesQL.impl.PenaltyImpl#getCurrency <em>Currency</em>}</li>
- *   <li>{@link tools.descartes.dql.lang.descartesQL.impl.PenaltyImpl#getViolation <em>Violation</em>}</li>
  * </ul>
  *
  * @generated
@@ -118,16 +114,6 @@ public class PenaltyImpl extends MinimalEObjectImpl.Container implements Penalty
    */
   protected Currency currency = CURRENCY_EDEFAULT;
 
-  /**
-   * The cached value of the '{@link #getViolation() <em>Violation</em>}' containment reference.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @see #getViolation()
-   * @generated
-   * @ordered
-   */
-  protected Violation violation;
-
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -218,70 +204,6 @@ public class PenaltyImpl extends MinimalEObjectImpl.Container implements Penalty
       eNotify(new ENotificationImpl(this, Notification.SET, DescartesQLPackage.PENALTY__CURRENCY, oldCurrency, currency));
   }
 
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public Violation getViolation()
-  {
-    return violation;
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public NotificationChain basicSetViolation(Violation newViolation, NotificationChain msgs)
-  {
-    Violation oldViolation = violation;
-    violation = newViolation;
-    if (eNotificationRequired())
-    {
-      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DescartesQLPackage.PENALTY__VIOLATION, oldViolation, newViolation);
-      if (msgs == null) msgs = notification; else msgs.add(notification);
-    }
-    return msgs;
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public void setViolation(Violation newViolation)
-  {
-    if (newViolation != violation)
-    {
-      NotificationChain msgs = null;
-      if (violation != null)
-        msgs = ((InternalEObject)violation).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - DescartesQLPackage.PENALTY__VIOLATION, null, msgs);
-      if (newViolation != null)
-        msgs = ((InternalEObject)newViolation).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - DescartesQLPackage.PENALTY__VIOLATION, null, msgs);
-      msgs = basicSetViolation(newViolation, msgs);
-      if (msgs != null) msgs.dispatch();
-    }
-    else if (eNotificationRequired())
-      eNotify(new ENotificationImpl(this, Notification.SET, DescartesQLPackage.PENALTY__VIOLATION, newViolation, newViolation));
-  }
-
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  @Override
-  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
-  {
-    switch (featureID)
-    {
-      case DescartesQLPackage.PENALTY__VIOLATION:
-        return basicSetViolation(null, msgs);
-    }
-    return super.eInverseRemove(otherEnd, featureID, msgs);
-  }
-
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -298,8 +220,6 @@ public class PenaltyImpl extends MinimalEObjectImpl.Container implements Penalty
         return getValue();
       case DescartesQLPackage.PENALTY__CURRENCY:
         return getCurrency();
-      case DescartesQLPackage.PENALTY__VIOLATION:
-        return getViolation();
     }
     return super.eGet(featureID, resolve, coreType);
   }
@@ -323,9 +243,6 @@ public class PenaltyImpl extends MinimalEObjectImpl.Container implements Penalty
       case DescartesQLPackage.PENALTY__CURRENCY:
         setCurrency((Currency)newValue);
         return;
-      case DescartesQLPackage.PENALTY__VIOLATION:
-        setViolation((Violation)newValue);
-        return;
     }
     super.eSet(featureID, newValue);
   }
@@ -349,9 +266,6 @@ public class PenaltyImpl extends MinimalEObjectImpl.Container implements Penalty
       case DescartesQLPackage.PENALTY__CURRENCY:
         setCurrency(CURRENCY_EDEFAULT);
         return;
-      case DescartesQLPackage.PENALTY__VIOLATION:
-        setViolation((Violation)null);
-        return;
     }
     super.eUnset(featureID);
   }
@@ -372,8 +286,6 @@ public class PenaltyImpl extends MinimalEObjectImpl.Container implements Penalty
         return value != VALUE_EDEFAULT;
       case DescartesQLPackage.PENALTY__CURRENCY:
         return currency != CURRENCY_EDEFAULT;
-      case DescartesQLPackage.PENALTY__VIOLATION:
-        return violation != null;
     }
     return super.eIsSet(featureID);
   }
diff --git a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/impl/SloImpl.java b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/impl/SloImpl.java
index 874decb5..26be4ccc 100644
--- a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/impl/SloImpl.java
+++ b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/impl/SloImpl.java
@@ -42,6 +42,7 @@ import tools.descartes.dql.lang.descartesQL.MetricClauseType;
 import tools.descartes.dql.lang.descartesQL.Penalty;
 import tools.descartes.dql.lang.descartesQL.Slo;
 import tools.descartes.dql.lang.descartesQL.VariableValue;
+import tools.descartes.dql.lang.descartesQL.Violation;
 
 /**
  * <!-- begin-user-doc -->
@@ -57,6 +58,7 @@ import tools.descartes.dql.lang.descartesQL.VariableValue;
  *   <li>{@link tools.descartes.dql.lang.descartesQL.impl.SloImpl#getValue <em>Value</em>}</li>
  *   <li>{@link tools.descartes.dql.lang.descartesQL.impl.SloImpl#getFuz <em>Fuz</em>}</li>
  *   <li>{@link tools.descartes.dql.lang.descartesQL.impl.SloImpl#getPen <em>Pen</em>}</li>
+ *   <li>{@link tools.descartes.dql.lang.descartesQL.impl.SloImpl#getViolation <em>Violation</em>}</li>
  * </ul>
  *
  * @generated
@@ -143,6 +145,16 @@ public class SloImpl extends MinimalEObjectImpl.Container implements Slo
    */
   protected Penalty pen;
 
+  /**
+   * The cached value of the '{@link #getViolation() <em>Violation</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getViolation()
+   * @generated
+   * @ordered
+   */
+  protected Violation violation;
+
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -402,6 +414,54 @@ public class SloImpl extends MinimalEObjectImpl.Container implements Slo
       eNotify(new ENotificationImpl(this, Notification.SET, DescartesQLPackage.SLO__PEN, newPen, newPen));
   }
 
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Violation getViolation()
+  {
+    return violation;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetViolation(Violation newViolation, NotificationChain msgs)
+  {
+    Violation oldViolation = violation;
+    violation = newViolation;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DescartesQLPackage.SLO__VIOLATION, oldViolation, newViolation);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setViolation(Violation newViolation)
+  {
+    if (newViolation != violation)
+    {
+      NotificationChain msgs = null;
+      if (violation != null)
+        msgs = ((InternalEObject)violation).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - DescartesQLPackage.SLO__VIOLATION, null, msgs);
+      if (newViolation != null)
+        msgs = ((InternalEObject)newViolation).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - DescartesQLPackage.SLO__VIOLATION, null, msgs);
+      msgs = basicSetViolation(newViolation, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, DescartesQLPackage.SLO__VIOLATION, newViolation, newViolation));
+  }
+
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -420,6 +480,8 @@ public class SloImpl extends MinimalEObjectImpl.Container implements Slo
         return basicSetFuz(null, msgs);
       case DescartesQLPackage.SLO__PEN:
         return basicSetPen(null, msgs);
+      case DescartesQLPackage.SLO__VIOLATION:
+        return basicSetViolation(null, msgs);
     }
     return super.eInverseRemove(otherEnd, featureID, msgs);
   }
@@ -446,6 +508,8 @@ public class SloImpl extends MinimalEObjectImpl.Container implements Slo
         return getFuz();
       case DescartesQLPackage.SLO__PEN:
         return getPen();
+      case DescartesQLPackage.SLO__VIOLATION:
+        return getViolation();
     }
     return super.eGet(featureID, resolve, coreType);
   }
@@ -478,6 +542,9 @@ public class SloImpl extends MinimalEObjectImpl.Container implements Slo
       case DescartesQLPackage.SLO__PEN:
         setPen((Penalty)newValue);
         return;
+      case DescartesQLPackage.SLO__VIOLATION:
+        setViolation((Violation)newValue);
+        return;
     }
     super.eSet(featureID, newValue);
   }
@@ -510,6 +577,9 @@ public class SloImpl extends MinimalEObjectImpl.Container implements Slo
       case DescartesQLPackage.SLO__PEN:
         setPen((Penalty)null);
         return;
+      case DescartesQLPackage.SLO__VIOLATION:
+        setViolation((Violation)null);
+        return;
     }
     super.eUnset(featureID);
   }
@@ -536,6 +606,8 @@ public class SloImpl extends MinimalEObjectImpl.Container implements Slo
         return fuz != null;
       case DescartesQLPackage.SLO__PEN:
         return pen != null;
+      case DescartesQLPackage.SLO__VIOLATION:
+        return violation != null;
     }
     return super.eIsSet(featureID);
   }
diff --git a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/impl/ViolationImpl.java b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/impl/ViolationImpl.java
index b07c8d1f..378f79cf 100644
--- a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/impl/ViolationImpl.java
+++ b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/impl/ViolationImpl.java
@@ -45,6 +45,7 @@ import tools.descartes.dql.lang.descartesQL.Violation;
  * </p>
  * <ul>
  *   <li>{@link tools.descartes.dql.lang.descartesQL.impl.ViolationImpl#getAmount <em>Amount</em>}</li>
+ *   <li>{@link tools.descartes.dql.lang.descartesQL.impl.ViolationImpl#getPercentage <em>Percentage</em>}</li>
  * </ul>
  *
  * @generated
@@ -71,6 +72,26 @@ public class ViolationImpl extends MinimalEObjectImpl.Container implements Viola
    */
   protected int amount = AMOUNT_EDEFAULT;
 
+  /**
+   * The default value of the '{@link #getPercentage() <em>Percentage</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getPercentage()
+   * @generated
+   * @ordered
+   */
+  protected static final double PERCENTAGE_EDEFAULT = 0.0;
+
+  /**
+   * The cached value of the '{@link #getPercentage() <em>Percentage</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getPercentage()
+   * @generated
+   * @ordered
+   */
+  protected double percentage = PERCENTAGE_EDEFAULT;
+
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -115,6 +136,29 @@ public class ViolationImpl extends MinimalEObjectImpl.Container implements Viola
       eNotify(new ENotificationImpl(this, Notification.SET, DescartesQLPackage.VIOLATION__AMOUNT, oldAmount, amount));
   }
 
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public double getPercentage()
+  {
+    return percentage;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setPercentage(double newPercentage)
+  {
+    double oldPercentage = percentage;
+    percentage = newPercentage;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, DescartesQLPackage.VIOLATION__PERCENTAGE, oldPercentage, percentage));
+  }
+
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -127,6 +171,8 @@ public class ViolationImpl extends MinimalEObjectImpl.Container implements Viola
     {
       case DescartesQLPackage.VIOLATION__AMOUNT:
         return getAmount();
+      case DescartesQLPackage.VIOLATION__PERCENTAGE:
+        return getPercentage();
     }
     return super.eGet(featureID, resolve, coreType);
   }
@@ -144,6 +190,9 @@ public class ViolationImpl extends MinimalEObjectImpl.Container implements Viola
       case DescartesQLPackage.VIOLATION__AMOUNT:
         setAmount((Integer)newValue);
         return;
+      case DescartesQLPackage.VIOLATION__PERCENTAGE:
+        setPercentage((Double)newValue);
+        return;
     }
     super.eSet(featureID, newValue);
   }
@@ -161,6 +210,9 @@ public class ViolationImpl extends MinimalEObjectImpl.Container implements Viola
       case DescartesQLPackage.VIOLATION__AMOUNT:
         setAmount(AMOUNT_EDEFAULT);
         return;
+      case DescartesQLPackage.VIOLATION__PERCENTAGE:
+        setPercentage(PERCENTAGE_EDEFAULT);
+        return;
     }
     super.eUnset(featureID);
   }
@@ -177,6 +229,8 @@ public class ViolationImpl extends MinimalEObjectImpl.Container implements Viola
     {
       case DescartesQLPackage.VIOLATION__AMOUNT:
         return amount != AMOUNT_EDEFAULT;
+      case DescartesQLPackage.VIOLATION__PERCENTAGE:
+        return percentage != PERCENTAGE_EDEFAULT;
     }
     return super.eIsSet(featureID);
   }
@@ -194,6 +248,8 @@ public class ViolationImpl extends MinimalEObjectImpl.Container implements Viola
     StringBuffer result = new StringBuffer(super.toString());
     result.append(" (amount: ");
     result.append(amount);
+    result.append(", percentage: ");
+    result.append(percentage);
     result.append(')');
     return result.toString();
   }
diff --git a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/util/DescartesQLAdapterFactory.java b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/util/DescartesQLAdapterFactory.java
index 7198a96f..a0fbfb71 100644
--- a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/util/DescartesQLAdapterFactory.java
+++ b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/util/DescartesQLAdapterFactory.java
@@ -109,6 +109,11 @@ public class DescartesQLAdapterFactory extends AdapterFactoryImpl
         return createGoalAdapter();
       }
       @Override
+      public Adapter caseGenerateSLAConcern(GenerateSLAConcern object)
+      {
+        return createGenerateSLAConcernAdapter();
+      }
+      @Override
       public Adapter caseSlaQuery(SlaQuery object)
       {
         return createSlaQueryAdapter();
@@ -570,6 +575,21 @@ public class DescartesQLAdapterFactory extends AdapterFactoryImpl
     return null;
   }
 
+  /**
+   * Creates a new adapter for an object of class '{@link tools.descartes.dql.lang.descartesQL.GenerateSLAConcern <em>Generate SLA Concern</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see tools.descartes.dql.lang.descartesQL.GenerateSLAConcern
+   * @generated
+   */
+  public Adapter createGenerateSLAConcernAdapter()
+  {
+    return null;
+  }
+
   /**
    * Creates a new adapter for an object of class '{@link tools.descartes.dql.lang.descartesQL.SlaQuery <em>Sla Query</em>}'.
    * <!-- begin-user-doc -->
diff --git a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/util/DescartesQLSwitch.java b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/util/DescartesQLSwitch.java
index 35e9a91b..c63b9db7 100644
--- a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/util/DescartesQLSwitch.java
+++ b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/descartesQL/util/DescartesQLSwitch.java
@@ -110,6 +110,13 @@ public class DescartesQLSwitch<T> extends Switch<T>
         if (result == null) result = defaultCase(theEObject);
         return result;
       }
+      case DescartesQLPackage.GENERATE_SLA_CONCERN:
+      {
+        GenerateSLAConcern generateSLAConcern = (GenerateSLAConcern)theEObject;
+        T result = caseGenerateSLAConcern(generateSLAConcern);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
       case DescartesQLPackage.SLA_QUERY:
       {
         SlaQuery slaQuery = (SlaQuery)theEObject;
@@ -737,6 +744,22 @@ public class DescartesQLSwitch<T> extends Switch<T>
     return null;
   }
 
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Generate SLA Concern</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Generate SLA Concern</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseGenerateSLAConcern(GenerateSLAConcern object)
+  {
+    return null;
+  }
+
   /**
    * Returns the result of interpreting the object as an instance of '<em>Sla Query</em>'.
    * <!-- begin-user-doc -->
diff --git a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/parser/antlr/internal/InternalDescartesQL.g b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/parser/antlr/internal/InternalDescartesQL.g
index f4f6f55b..d85fb645 100644
--- a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/parser/antlr/internal/InternalDescartesQL.g
+++ b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/parser/antlr/internal/InternalDescartesQL.g
@@ -194,6 +194,21 @@ ruleDescartesQL returns [EObject current=null]
 	        afterParserOrEnumRuleCall();
 	    }
 
+    |		{ 
+	        newCompositeNode(grammarAccess.getDescartesQLAccess().getQueryGenerateSLAConcernParserRuleCall_0_0_6()); 
+	    }
+		lv_query_0_7=ruleGenerateSLAConcern		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getDescartesQLRule());
+	        }
+       		set(
+       			$current, 
+       			"query",
+        		lv_query_0_7, 
+        		"tools.descartes.dql.lang.DescartesQL.GenerateSLAConcern");
+	        afterParserOrEnumRuleCall();
+	    }
+
 )
 
 )
@@ -249,6 +264,18 @@ ruleGoal returns [EObject current=null]
        		setWithLastConsumed($current, "queryType", lv_queryType_0_2, null);
 	    }
 
+    |		lv_queryType_0_3=	'EVALUATE' 
+    {
+        newLeafNode(lv_queryType_0_3, grammarAccess.getGoalAccess().getQueryTypeEVALUATEKeyword_0_0_2());
+    }
+ 
+	    {
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getGoalRule());
+	        }
+       		setWithLastConsumed($current, "queryType", lv_queryType_0_3, null);
+	    }
+
 )
 
 )
@@ -367,6 +394,147 @@ ruleGoal returns [EObject current=null]
 
 
 
+// Entry rule entryRuleGenerateSLAConcern
+entryRuleGenerateSLAConcern returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getGenerateSLAConcernRule()); }
+	 iv_ruleGenerateSLAConcern=ruleGenerateSLAConcern 
+	 { $current=$iv_ruleGenerateSLAConcern.current; } 
+	 EOF 
+;
+
+// Rule GenerateSLAConcern
+ruleGenerateSLAConcern returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(	otherlv_0='GENERATE' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getGenerateSLAConcernAccess().getGENERATEKeyword_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getGenerateSLAConcernAccess().getOffsetMultipleArithmeticClauseParserRuleCall_1_0()); 
+	    }
+		lv_offset_1_0=ruleMultipleArithmeticClause		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getGenerateSLAConcernRule());
+	        }
+       		set(
+       			$current, 
+       			"offset",
+        		lv_offset_1_0, 
+        		"tools.descartes.dql.lang.DescartesQL.MultipleArithmeticClause");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)?(	otherlv_2='SATISFACTION-LEVEL' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getGenerateSLAConcernAccess().getSATISFACTIONLEVELKeyword_2_0());
+    }
+(
+(
+		lv_percentage_3_0=RULE_DOUBLE
+		{
+			newLeafNode(lv_percentage_3_0, grammarAccess.getGenerateSLAConcernAccess().getPercentageDOUBLETerminalRuleCall_2_1_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getGenerateSLAConcernRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"percentage",
+        		lv_percentage_3_0, 
+        		"tools.descartes.dql.lang.DescartesQL.DOUBLE");
+	    }
+
+)
+)	otherlv_4='PERCENT' 
+    {
+    	newLeafNode(otherlv_4, grammarAccess.getGenerateSLAConcernAccess().getPERCENTKeyword_2_2());
+    }
+)?(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getGenerateSLAConcernAccess().getConstraintClauseConstraintClauseParserRuleCall_3_0()); 
+	    }
+		lv_constraintClause_5_0=ruleConstraintClause		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getGenerateSLAConcernRule());
+	        }
+       		set(
+       			$current, 
+       			"constraintClause",
+        		lv_constraintClause_5_0, 
+        		"tools.descartes.dql.lang.DescartesQL.ConstraintClause");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)?(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getGenerateSLAConcernAccess().getDofClauseDoFClauseParserRuleCall_4_0()); 
+	    }
+		lv_dofClause_6_0=ruleDoFClause		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getGenerateSLAConcernRule());
+	        }
+       		set(
+       			$current, 
+       			"dofClause",
+        		lv_dofClause_6_0, 
+        		"tools.descartes.dql.lang.DescartesQL.DoFClause");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)?(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getGenerateSLAConcernAccess().getForClauseForClauseParserRuleCall_5_0()); 
+	    }
+		lv_forClause_7_0=ruleForClause		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getGenerateSLAConcernRule());
+	        }
+       		set(
+       			$current, 
+       			"forClause",
+        		lv_forClause_7_0, 
+        		"tools.descartes.dql.lang.DescartesQL.ForClause");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)?(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getGenerateSLAConcernAccess().getUsingClauseUsingClauseParserRuleCall_6_0()); 
+	    }
+		lv_usingClause_8_0=ruleUsingClause		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getGenerateSLAConcernRule());
+	        }
+       		set(
+       			$current, 
+       			"usingClause",
+        		lv_usingClause_8_0, 
+        		"tools.descartes.dql.lang.DescartesQL.UsingClause");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))
+;
+
+
+
+
+
 // Entry rule entryRuleSlaQuery
 entryRuleSlaQuery returns [EObject current=null] 
 	:
@@ -735,6 +903,24 @@ ruleSlo returns [EObject current=null]
 	        afterParserOrEnumRuleCall();
 	    }
 
+)
+)?(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getSloAccess().getViolationViolationParserRuleCall_7_0()); 
+	    }
+		lv_violation_7_0=ruleViolation		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getSloRule());
+	        }
+       		set(
+       			$current, 
+       			"violation",
+        		lv_violation_7_0, 
+        		"tools.descartes.dql.lang.DescartesQL.Violation");
+	        afterParserOrEnumRuleCall();
+	    }
+
 )
 )?)
 ;
@@ -917,24 +1103,6 @@ rulePenalty returns [EObject current=null]
 	        afterParserOrEnumRuleCall();
 	    }
 
-)
-)(
-(
-		{ 
-	        newCompositeNode(grammarAccess.getPenaltyAccess().getViolationViolationParserRuleCall_3_0()); 
-	    }
-		lv_violation_3_0=ruleViolation		{
-	        if ($current==null) {
-	            $current = createModelElementForParent(grammarAccess.getPenaltyRule());
-	        }
-       		set(
-       			$current, 
-       			"violation",
-        		lv_violation_3_0, 
-        		"tools.descartes.dql.lang.DescartesQL.Violation");
-	        afterParserOrEnumRuleCall();
-	    }
-
 )
 )?)
 ;
@@ -957,15 +1125,15 @@ ruleViolation returns [EObject current=null]
     @init { enterRule(); 
     }
     @after { leaveRule(); }:
-(	otherlv_0='PER' 
+((	otherlv_0='PER' 
     {
-    	newLeafNode(otherlv_0, grammarAccess.getViolationAccess().getPERKeyword_0());
+    	newLeafNode(otherlv_0, grammarAccess.getViolationAccess().getPERKeyword_0_0());
     }
 (
 (
 		lv_amount_1_0=RULE_INT
 		{
-			newLeafNode(lv_amount_1_0, grammarAccess.getViolationAccess().getAmountINTTerminalRuleCall_1_0()); 
+			newLeafNode(lv_amount_1_0, grammarAccess.getViolationAccess().getAmountINTTerminalRuleCall_0_1_0()); 
 		}
 		{
 	        if ($current==null) {
@@ -981,9 +1149,36 @@ ruleViolation returns [EObject current=null]
 )
 )	otherlv_2='VIOLATIONS' 
     {
-    	newLeafNode(otherlv_2, grammarAccess.getViolationAccess().getVIOLATIONSKeyword_2());
+    	newLeafNode(otherlv_2, grammarAccess.getViolationAccess().getVIOLATIONSKeyword_0_2());
     }
 )
+    |(	otherlv_3='SATISFACTION-LEVEL' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getViolationAccess().getSATISFACTIONLEVELKeyword_1_0());
+    }
+(
+(
+		lv_percentage_4_0=RULE_DOUBLE
+		{
+			newLeafNode(lv_percentage_4_0, grammarAccess.getViolationAccess().getPercentageDOUBLETerminalRuleCall_1_1_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getViolationRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"percentage",
+        		lv_percentage_4_0, 
+        		"tools.descartes.dql.lang.DescartesQL.DOUBLE");
+	    }
+
+)
+)	otherlv_5='PERCENT' 
+    {
+    	newLeafNode(otherlv_5, grammarAccess.getViolationAccess().getPERCENTKeyword_1_2());
+    }
+))
 ;
 
 
@@ -5463,6 +5658,73 @@ ruleVariationInstruction returns [EObject current=null]
 
 
 
+// Entry rule entryRuleMultipleArithmeticClause
+entryRuleMultipleArithmeticClause returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getMultipleArithmeticClauseRule()); }
+	 iv_ruleMultipleArithmeticClause=ruleMultipleArithmeticClause 
+	 { $current=$iv_ruleMultipleArithmeticClause.current; } 
+	 EOF 
+;
+
+// Rule MultipleArithmeticClause
+ruleMultipleArithmeticClause returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(	otherlv_0='<' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getMultipleArithmeticClauseAccess().getLessThanSignKeyword_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getMultipleArithmeticClauseAccess().getMultiClauseArithmeticClauseParserRuleCall_1_0()); 
+	    }
+		lv_multiClause_1_0=ruleArithmeticClause		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getMultipleArithmeticClauseRule());
+	        }
+       		add(
+       			$current, 
+       			"multiClause",
+        		lv_multiClause_1_0, 
+        		"tools.descartes.dql.lang.DescartesQL.ArithmeticClause");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_2=',' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getMultipleArithmeticClauseAccess().getCommaKeyword_2_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getMultipleArithmeticClauseAccess().getMultiClauseArithmeticClauseParserRuleCall_2_1_0()); 
+	    }
+		lv_multiClause_3_0=ruleArithmeticClause		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getMultipleArithmeticClauseRule());
+	        }
+       		add(
+       			$current, 
+       			"multiClause",
+        		lv_multiClause_3_0, 
+        		"tools.descartes.dql.lang.DescartesQL.ArithmeticClause");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*	otherlv_4='>' 
+    {
+    	newLeafNode(otherlv_4, grammarAccess.getMultipleArithmeticClauseAccess().getGreaterThanSignKeyword_3());
+    }
+)
+;
+
+
+
 
 
 // Entry rule entryRuleArithmeticClause
diff --git a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/parser/antlr/internal/InternalDescartesQL.tokens b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/parser/antlr/internal/InternalDescartesQL.tokens
index 97f92ed8..148600d6 100644
--- a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/parser/antlr/internal/InternalDescartesQL.tokens
+++ b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/parser/antlr/internal/InternalDescartesQL.tokens
@@ -1,98 +1,102 @@
-'%'=68
-'('=19
-')'=20
-'*'=22
-'*.'=50
-'+'=84
-','=16
-'-'=83
-'.'=43
-'..'=47
-':'=21
+'%'=72
+'('=23
+')'=24
+'*'=26
+'*.'=54
+'+'=88
+','=20
+'-'=87
+'.'=47
+'..'=51
+':'=25
 ';'=12
-'<'=45
-'<='=72
-'='=44
-'=='=74
-'>'=46
-'>='=73
-'@'=58
-'ADD'=69
-'AGREEMENTS'=15
-'AND'=64
-'AS'=55
-'BETWEEN'=63
-'BOTTLENECKS'=37
-'BY'=48
-'CLASSREGEX'=80
-'CONDITION'=60
-'CONSTRAINED AS'=38
-'CONSTRAINTS'=29
-'CONTAINS'=18
-'DELTA'=66
-'DETECT'=36
-'DOF'=32
+'<'=49
+'<='=76
+'='=48
+'=='=78
+'>'=50
+'>='=77
+'@'=62
+'ADD'=73
+'AGREEMENTS'=19
+'AND'=68
+'AS'=59
+'BETWEEN'=67
+'BOTTLENECKS'=41
+'BY'=52
+'CLASSREGEX'=84
+'CONDITION'=64
+'CONSTRAINED AS'=42
+'CONSTRAINTS'=33
+'CONTAINS'=22
+'DELTA'=70
+'DETECT'=40
+'DOF'=36
 'ENSURE'=13
-'ENTITIES'=33
-'EUR'=75
-'EVALUATE DOF'=39
-'EXPLORATION STRATEGIES'=30
-'FILTERED BY'=59
-'FILTERING'=67
-'FOR'=54
-'FUZZINESS'=23
-'GEOMEAN'=95
-'GET'=28
-'GOALS'=17
-'GUIDED BY'=40
-'INSTANCEOF'=79
-'LIST'=27
-'M'=90
-'MAX'=94
-'MEAN'=102
-'METRICS'=34
-'MIN'=93
+'ENTITIES'=37
+'EUR'=79
+'EVALUATE DOF'=43
+'EVALUATE'=15
+'EXPLORATION STRATEGIES'=34
+'FILTERED BY'=63
+'FILTERING'=71
+'FOR'=58
+'FUZZINESS'=27
+'GENERATE'=16
+'GEOMEAN'=99
+'GET'=32
+'GOALS'=21
+'GUIDED BY'=44
+'INSTANCEOF'=83
+'LIST'=31
+'M'=94
+'MAX'=98
+'MEAN'=106
+'METRICS'=38
+'MIN'=97
 'MONITOR'=14
-'MULTIPLY'=71
-'N'=96
-'NEXT'=82
-'OBSERVE'=61
-'OR'=78
-'PENALTY'=24
-'PER'=25
-'PERCENTILE'=101
-'S'=92
-'SAMPLED BY'=62
-'SELECT'=35
-'SINCE'=81
-'STDDEV'=99
-'SUB'=70
-'SUM'=97
-'SUMOFSQUARES'=98
-'TIME UNITS'=31
-'USD'=76
-'USING'=56
-'VAR'=100
-'VARYING'=49
-'VIOLATIONS'=26
-'WHAT IF'=65
-'WITH'=57
-'XOR'=77
-'['=41
-']'=42
-'children'=51
-'d'=88
-'find('=53
-'h'=89
-'m'=86
-'parent'=52
-'s'=91
-'w'=87
-'y'=85
+'MULTIPLY'=75
+'N'=100
+'NEXT'=86
+'OBSERVE'=65
+'OR'=82
+'PENALTY'=28
+'PER'=29
+'PERCENT'=18
+'PERCENTILE'=105
+'S'=96
+'SAMPLED BY'=66
+'SATISFACTION-LEVEL'=17
+'SELECT'=39
+'SINCE'=85
+'STDDEV'=103
+'SUB'=74
+'SUM'=101
+'SUMOFSQUARES'=102
+'TIME UNITS'=35
+'USD'=80
+'USING'=60
+'VAR'=104
+'VARYING'=53
+'VIOLATIONS'=30
+'WHAT IF'=69
+'WITH'=61
+'XOR'=81
+'['=45
+']'=46
+'children'=55
+'d'=92
+'find('=57
+'h'=93
+'m'=90
+'parent'=56
+'s'=95
+'w'=91
+'y'=89
 RULE_ANY_OTHER=11
-RULE_DOUBLE=6
-RULE_ID=4
-RULE_INT=5
+RULE_DOUBLE=4
+RULE_ID=5
+RULE_INT=6
 RULE_ML_COMMENT=8
 RULE_SL_COMMENT=9
 RULE_STRING=7
@@ -100,6 +104,10 @@ RULE_WS=10
 T__100=100
 T__101=101
 T__102=102
+T__103=103
+T__104=104
+T__105=105
+T__106=106
 T__12=12
 T__13=13
 T__14=14
diff --git a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/parser/antlr/internal/InternalDescartesQLLexer.java b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/parser/antlr/internal/InternalDescartesQLLexer.java
index 6482a4fe..664b1011 100644
--- a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/parser/antlr/internal/InternalDescartesQLLexer.java
+++ b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/parser/antlr/internal/InternalDescartesQLLexer.java
@@ -24,8 +24,8 @@ public class InternalDescartesQLLexer extends Lexer {
     public static final int T__54=54;
     public static final int T__60=60;
     public static final int T__61=61;
-    public static final int RULE_ID=4;
-    public static final int RULE_INT=5;
+    public static final int RULE_ID=5;
+    public static final int RULE_INT=6;
     public static final int T__66=66;
     public static final int RULE_ML_COMMENT=8;
     public static final int T__67=67;
@@ -91,7 +91,7 @@ public class InternalDescartesQLLexer extends Lexer {
     public static final int T__72=72;
     public static final int RULE_STRING=7;
     public static final int RULE_SL_COMMENT=9;
-    public static final int RULE_DOUBLE=6;
+    public static final int RULE_DOUBLE=4;
     public static final int T__77=77;
     public static final int T__78=78;
     public static final int T__79=79;
@@ -109,9 +109,13 @@ public class InternalDescartesQLLexer extends Lexer {
     public static final int T__88=88;
     public static final int T__89=89;
     public static final int T__84=84;
+    public static final int T__104=104;
     public static final int T__85=85;
+    public static final int T__103=103;
     public static final int T__86=86;
+    public static final int T__106=106;
     public static final int T__87=87;
+    public static final int T__105=105;
 
     // delegates
     // delegators
@@ -193,10 +197,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__15;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:14:7: ( 'AGREEMENTS' )
-            // InternalDescartesQL.g:14:9: 'AGREEMENTS'
+            // InternalDescartesQL.g:14:7: ( 'EVALUATE' )
+            // InternalDescartesQL.g:14:9: 'EVALUATE'
             {
-            match("AGREEMENTS"); 
+            match("EVALUATE"); 
 
 
             }
@@ -214,10 +218,11 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__16;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:15:7: ( ',' )
-            // InternalDescartesQL.g:15:9: ','
+            // InternalDescartesQL.g:15:7: ( 'GENERATE' )
+            // InternalDescartesQL.g:15:9: 'GENERATE'
             {
-            match(','); 
+            match("GENERATE"); 
+
 
             }
 
@@ -234,10 +239,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__17;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:16:7: ( 'GOALS' )
-            // InternalDescartesQL.g:16:9: 'GOALS'
+            // InternalDescartesQL.g:16:7: ( 'SATISFACTION-LEVEL' )
+            // InternalDescartesQL.g:16:9: 'SATISFACTION-LEVEL'
             {
-            match("GOALS"); 
+            match("SATISFACTION-LEVEL"); 
 
 
             }
@@ -255,10 +260,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__18;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:17:7: ( 'CONTAINS' )
-            // InternalDescartesQL.g:17:9: 'CONTAINS'
+            // InternalDescartesQL.g:17:7: ( 'PERCENT' )
+            // InternalDescartesQL.g:17:9: 'PERCENT'
             {
-            match("CONTAINS"); 
+            match("PERCENT"); 
 
 
             }
@@ -276,10 +281,11 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__19;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:18:7: ( '(' )
-            // InternalDescartesQL.g:18:9: '('
+            // InternalDescartesQL.g:18:7: ( 'AGREEMENTS' )
+            // InternalDescartesQL.g:18:9: 'AGREEMENTS'
             {
-            match('('); 
+            match("AGREEMENTS"); 
+
 
             }
 
@@ -296,10 +302,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__20;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:19:7: ( ')' )
-            // InternalDescartesQL.g:19:9: ')'
+            // InternalDescartesQL.g:19:7: ( ',' )
+            // InternalDescartesQL.g:19:9: ','
             {
-            match(')'); 
+            match(','); 
 
             }
 
@@ -316,10 +322,11 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__21;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:20:7: ( ':' )
-            // InternalDescartesQL.g:20:9: ':'
+            // InternalDescartesQL.g:20:7: ( 'GOALS' )
+            // InternalDescartesQL.g:20:9: 'GOALS'
             {
-            match(':'); 
+            match("GOALS"); 
+
 
             }
 
@@ -336,10 +343,11 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__22;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:21:7: ( '*' )
-            // InternalDescartesQL.g:21:9: '*'
+            // InternalDescartesQL.g:21:7: ( 'CONTAINS' )
+            // InternalDescartesQL.g:21:9: 'CONTAINS'
             {
-            match('*'); 
+            match("CONTAINS"); 
+
 
             }
 
@@ -356,11 +364,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__23;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:22:7: ( 'FUZZINESS' )
-            // InternalDescartesQL.g:22:9: 'FUZZINESS'
+            // InternalDescartesQL.g:22:7: ( '(' )
+            // InternalDescartesQL.g:22:9: '('
             {
-            match("FUZZINESS"); 
-
+            match('('); 
 
             }
 
@@ -377,11 +384,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__24;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:23:7: ( 'PENALTY' )
-            // InternalDescartesQL.g:23:9: 'PENALTY'
+            // InternalDescartesQL.g:23:7: ( ')' )
+            // InternalDescartesQL.g:23:9: ')'
             {
-            match("PENALTY"); 
-
+            match(')'); 
 
             }
 
@@ -398,11 +404,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__25;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:24:7: ( 'PER' )
-            // InternalDescartesQL.g:24:9: 'PER'
+            // InternalDescartesQL.g:24:7: ( ':' )
+            // InternalDescartesQL.g:24:9: ':'
             {
-            match("PER"); 
-
+            match(':'); 
 
             }
 
@@ -419,11 +424,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__26;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:25:7: ( 'VIOLATIONS' )
-            // InternalDescartesQL.g:25:9: 'VIOLATIONS'
+            // InternalDescartesQL.g:25:7: ( '*' )
+            // InternalDescartesQL.g:25:9: '*'
             {
-            match("VIOLATIONS"); 
-
+            match('*'); 
 
             }
 
@@ -440,10 +444,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__27;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:26:7: ( 'LIST' )
-            // InternalDescartesQL.g:26:9: 'LIST'
+            // InternalDescartesQL.g:26:7: ( 'FUZZINESS' )
+            // InternalDescartesQL.g:26:9: 'FUZZINESS'
             {
-            match("LIST"); 
+            match("FUZZINESS"); 
 
 
             }
@@ -461,10 +465,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__28;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:27:7: ( 'GET' )
-            // InternalDescartesQL.g:27:9: 'GET'
+            // InternalDescartesQL.g:27:7: ( 'PENALTY' )
+            // InternalDescartesQL.g:27:9: 'PENALTY'
             {
-            match("GET"); 
+            match("PENALTY"); 
 
 
             }
@@ -482,10 +486,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__29;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:28:7: ( 'CONSTRAINTS' )
-            // InternalDescartesQL.g:28:9: 'CONSTRAINTS'
+            // InternalDescartesQL.g:28:7: ( 'PER' )
+            // InternalDescartesQL.g:28:9: 'PER'
             {
-            match("CONSTRAINTS"); 
+            match("PER"); 
 
 
             }
@@ -503,10 +507,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__30;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:29:7: ( 'EXPLORATION STRATEGIES' )
-            // InternalDescartesQL.g:29:9: 'EXPLORATION STRATEGIES'
+            // InternalDescartesQL.g:29:7: ( 'VIOLATIONS' )
+            // InternalDescartesQL.g:29:9: 'VIOLATIONS'
             {
-            match("EXPLORATION STRATEGIES"); 
+            match("VIOLATIONS"); 
 
 
             }
@@ -524,10 +528,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__31;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:30:7: ( 'TIME UNITS' )
-            // InternalDescartesQL.g:30:9: 'TIME UNITS'
+            // InternalDescartesQL.g:30:7: ( 'LIST' )
+            // InternalDescartesQL.g:30:9: 'LIST'
             {
-            match("TIME UNITS"); 
+            match("LIST"); 
 
 
             }
@@ -545,10 +549,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__32;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:31:7: ( 'DOF' )
-            // InternalDescartesQL.g:31:9: 'DOF'
+            // InternalDescartesQL.g:31:7: ( 'GET' )
+            // InternalDescartesQL.g:31:9: 'GET'
             {
-            match("DOF"); 
+            match("GET"); 
 
 
             }
@@ -566,10 +570,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__33;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:32:7: ( 'ENTITIES' )
-            // InternalDescartesQL.g:32:9: 'ENTITIES'
+            // InternalDescartesQL.g:32:7: ( 'CONSTRAINTS' )
+            // InternalDescartesQL.g:32:9: 'CONSTRAINTS'
             {
-            match("ENTITIES"); 
+            match("CONSTRAINTS"); 
 
 
             }
@@ -587,10 +591,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__34;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:33:7: ( 'METRICS' )
-            // InternalDescartesQL.g:33:9: 'METRICS'
+            // InternalDescartesQL.g:33:7: ( 'EXPLORATION STRATEGIES' )
+            // InternalDescartesQL.g:33:9: 'EXPLORATION STRATEGIES'
             {
-            match("METRICS"); 
+            match("EXPLORATION STRATEGIES"); 
 
 
             }
@@ -608,10 +612,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__35;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:34:7: ( 'SELECT' )
-            // InternalDescartesQL.g:34:9: 'SELECT'
+            // InternalDescartesQL.g:34:7: ( 'TIME UNITS' )
+            // InternalDescartesQL.g:34:9: 'TIME UNITS'
             {
-            match("SELECT"); 
+            match("TIME UNITS"); 
 
 
             }
@@ -629,10 +633,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__36;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:35:7: ( 'DETECT' )
-            // InternalDescartesQL.g:35:9: 'DETECT'
+            // InternalDescartesQL.g:35:7: ( 'DOF' )
+            // InternalDescartesQL.g:35:9: 'DOF'
             {
-            match("DETECT"); 
+            match("DOF"); 
 
 
             }
@@ -650,10 +654,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__37;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:36:7: ( 'BOTTLENECKS' )
-            // InternalDescartesQL.g:36:9: 'BOTTLENECKS'
+            // InternalDescartesQL.g:36:7: ( 'ENTITIES' )
+            // InternalDescartesQL.g:36:9: 'ENTITIES'
             {
-            match("BOTTLENECKS"); 
+            match("ENTITIES"); 
 
 
             }
@@ -671,10 +675,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__38;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:37:7: ( 'CONSTRAINED AS' )
-            // InternalDescartesQL.g:37:9: 'CONSTRAINED AS'
+            // InternalDescartesQL.g:37:7: ( 'METRICS' )
+            // InternalDescartesQL.g:37:9: 'METRICS'
             {
-            match("CONSTRAINED AS"); 
+            match("METRICS"); 
 
 
             }
@@ -692,10 +696,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__39;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:38:7: ( 'EVALUATE DOF' )
-            // InternalDescartesQL.g:38:9: 'EVALUATE DOF'
+            // InternalDescartesQL.g:38:7: ( 'SELECT' )
+            // InternalDescartesQL.g:38:9: 'SELECT'
             {
-            match("EVALUATE DOF"); 
+            match("SELECT"); 
 
 
             }
@@ -713,10 +717,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__40;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:39:7: ( 'GUIDED BY' )
-            // InternalDescartesQL.g:39:9: 'GUIDED BY'
+            // InternalDescartesQL.g:39:7: ( 'DETECT' )
+            // InternalDescartesQL.g:39:9: 'DETECT'
             {
-            match("GUIDED BY"); 
+            match("DETECT"); 
 
 
             }
@@ -734,10 +738,11 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__41;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:40:7: ( '[' )
-            // InternalDescartesQL.g:40:9: '['
+            // InternalDescartesQL.g:40:7: ( 'BOTTLENECKS' )
+            // InternalDescartesQL.g:40:9: 'BOTTLENECKS'
             {
-            match('['); 
+            match("BOTTLENECKS"); 
+
 
             }
 
@@ -754,10 +759,11 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__42;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:41:7: ( ']' )
-            // InternalDescartesQL.g:41:9: ']'
+            // InternalDescartesQL.g:41:7: ( 'CONSTRAINED AS' )
+            // InternalDescartesQL.g:41:9: 'CONSTRAINED AS'
             {
-            match(']'); 
+            match("CONSTRAINED AS"); 
+
 
             }
 
@@ -774,10 +780,11 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__43;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:42:7: ( '.' )
-            // InternalDescartesQL.g:42:9: '.'
+            // InternalDescartesQL.g:42:7: ( 'EVALUATE DOF' )
+            // InternalDescartesQL.g:42:9: 'EVALUATE DOF'
             {
-            match('.'); 
+            match("EVALUATE DOF"); 
+
 
             }
 
@@ -794,10 +801,11 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__44;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:43:7: ( '=' )
-            // InternalDescartesQL.g:43:9: '='
+            // InternalDescartesQL.g:43:7: ( 'GUIDED BY' )
+            // InternalDescartesQL.g:43:9: 'GUIDED BY'
             {
-            match('='); 
+            match("GUIDED BY"); 
+
 
             }
 
@@ -814,10 +822,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__45;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:44:7: ( '<' )
-            // InternalDescartesQL.g:44:9: '<'
+            // InternalDescartesQL.g:44:7: ( '[' )
+            // InternalDescartesQL.g:44:9: '['
             {
-            match('<'); 
+            match('['); 
 
             }
 
@@ -834,10 +842,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__46;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:45:7: ( '>' )
-            // InternalDescartesQL.g:45:9: '>'
+            // InternalDescartesQL.g:45:7: ( ']' )
+            // InternalDescartesQL.g:45:9: ']'
             {
-            match('>'); 
+            match(']'); 
 
             }
 
@@ -854,11 +862,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__47;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:46:7: ( '..' )
-            // InternalDescartesQL.g:46:9: '..'
+            // InternalDescartesQL.g:46:7: ( '.' )
+            // InternalDescartesQL.g:46:9: '.'
             {
-            match(".."); 
-
+            match('.'); 
 
             }
 
@@ -875,11 +882,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__48;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:47:7: ( 'BY' )
-            // InternalDescartesQL.g:47:9: 'BY'
+            // InternalDescartesQL.g:47:7: ( '=' )
+            // InternalDescartesQL.g:47:9: '='
             {
-            match("BY"); 
-
+            match('='); 
 
             }
 
@@ -896,11 +902,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__49;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:48:7: ( 'VARYING' )
-            // InternalDescartesQL.g:48:9: 'VARYING'
+            // InternalDescartesQL.g:48:7: ( '<' )
+            // InternalDescartesQL.g:48:9: '<'
             {
-            match("VARYING"); 
-
+            match('<'); 
 
             }
 
@@ -917,11 +922,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__50;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:49:7: ( '*.' )
-            // InternalDescartesQL.g:49:9: '*.'
+            // InternalDescartesQL.g:49:7: ( '>' )
+            // InternalDescartesQL.g:49:9: '>'
             {
-            match("*."); 
-
+            match('>'); 
 
             }
 
@@ -938,10 +942,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__51;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:50:7: ( 'children' )
-            // InternalDescartesQL.g:50:9: 'children'
+            // InternalDescartesQL.g:50:7: ( '..' )
+            // InternalDescartesQL.g:50:9: '..'
             {
-            match("children"); 
+            match(".."); 
 
 
             }
@@ -959,10 +963,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__52;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:51:7: ( 'parent' )
-            // InternalDescartesQL.g:51:9: 'parent'
+            // InternalDescartesQL.g:51:7: ( 'BY' )
+            // InternalDescartesQL.g:51:9: 'BY'
             {
-            match("parent"); 
+            match("BY"); 
 
 
             }
@@ -980,10 +984,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__53;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:52:7: ( 'find(' )
-            // InternalDescartesQL.g:52:9: 'find('
+            // InternalDescartesQL.g:52:7: ( 'VARYING' )
+            // InternalDescartesQL.g:52:9: 'VARYING'
             {
-            match("find("); 
+            match("VARYING"); 
 
 
             }
@@ -1001,10 +1005,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__54;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:53:7: ( 'FOR' )
-            // InternalDescartesQL.g:53:9: 'FOR'
+            // InternalDescartesQL.g:53:7: ( '*.' )
+            // InternalDescartesQL.g:53:9: '*.'
             {
-            match("FOR"); 
+            match("*."); 
 
 
             }
@@ -1022,10 +1026,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__55;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:54:7: ( 'AS' )
-            // InternalDescartesQL.g:54:9: 'AS'
+            // InternalDescartesQL.g:54:7: ( 'children' )
+            // InternalDescartesQL.g:54:9: 'children'
             {
-            match("AS"); 
+            match("children"); 
 
 
             }
@@ -1043,10 +1047,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__56;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:55:7: ( 'USING' )
-            // InternalDescartesQL.g:55:9: 'USING'
+            // InternalDescartesQL.g:55:7: ( 'parent' )
+            // InternalDescartesQL.g:55:9: 'parent'
             {
-            match("USING"); 
+            match("parent"); 
 
 
             }
@@ -1064,10 +1068,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__57;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:56:7: ( 'WITH' )
-            // InternalDescartesQL.g:56:9: 'WITH'
+            // InternalDescartesQL.g:56:7: ( 'find(' )
+            // InternalDescartesQL.g:56:9: 'find('
             {
-            match("WITH"); 
+            match("find("); 
 
 
             }
@@ -1085,10 +1089,11 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__58;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:57:7: ( '@' )
-            // InternalDescartesQL.g:57:9: '@'
+            // InternalDescartesQL.g:57:7: ( 'FOR' )
+            // InternalDescartesQL.g:57:9: 'FOR'
             {
-            match('@'); 
+            match("FOR"); 
+
 
             }
 
@@ -1105,10 +1110,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__59;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:58:7: ( 'FILTERED BY' )
-            // InternalDescartesQL.g:58:9: 'FILTERED BY'
+            // InternalDescartesQL.g:58:7: ( 'AS' )
+            // InternalDescartesQL.g:58:9: 'AS'
             {
-            match("FILTERED BY"); 
+            match("AS"); 
 
 
             }
@@ -1126,10 +1131,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__60;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:59:7: ( 'CONDITION' )
-            // InternalDescartesQL.g:59:9: 'CONDITION'
+            // InternalDescartesQL.g:59:7: ( 'USING' )
+            // InternalDescartesQL.g:59:9: 'USING'
             {
-            match("CONDITION"); 
+            match("USING"); 
 
 
             }
@@ -1147,10 +1152,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__61;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:60:7: ( 'OBSERVE' )
-            // InternalDescartesQL.g:60:9: 'OBSERVE'
+            // InternalDescartesQL.g:60:7: ( 'WITH' )
+            // InternalDescartesQL.g:60:9: 'WITH'
             {
-            match("OBSERVE"); 
+            match("WITH"); 
 
 
             }
@@ -1168,11 +1173,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__62;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:61:7: ( 'SAMPLED BY' )
-            // InternalDescartesQL.g:61:9: 'SAMPLED BY'
+            // InternalDescartesQL.g:61:7: ( '@' )
+            // InternalDescartesQL.g:61:9: '@'
             {
-            match("SAMPLED BY"); 
-
+            match('@'); 
 
             }
 
@@ -1189,10 +1193,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__63;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:62:7: ( 'BETWEEN' )
-            // InternalDescartesQL.g:62:9: 'BETWEEN'
+            // InternalDescartesQL.g:62:7: ( 'FILTERED BY' )
+            // InternalDescartesQL.g:62:9: 'FILTERED BY'
             {
-            match("BETWEEN"); 
+            match("FILTERED BY"); 
 
 
             }
@@ -1210,10 +1214,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__64;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:63:7: ( 'AND' )
-            // InternalDescartesQL.g:63:9: 'AND'
+            // InternalDescartesQL.g:63:7: ( 'CONDITION' )
+            // InternalDescartesQL.g:63:9: 'CONDITION'
             {
-            match("AND"); 
+            match("CONDITION"); 
 
 
             }
@@ -1231,10 +1235,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__65;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:64:7: ( 'WHAT IF' )
-            // InternalDescartesQL.g:64:9: 'WHAT IF'
+            // InternalDescartesQL.g:64:7: ( 'OBSERVE' )
+            // InternalDescartesQL.g:64:9: 'OBSERVE'
             {
-            match("WHAT IF"); 
+            match("OBSERVE"); 
 
 
             }
@@ -1252,10 +1256,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__66;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:65:7: ( 'DELTA' )
-            // InternalDescartesQL.g:65:9: 'DELTA'
+            // InternalDescartesQL.g:65:7: ( 'SAMPLED BY' )
+            // InternalDescartesQL.g:65:9: 'SAMPLED BY'
             {
-            match("DELTA"); 
+            match("SAMPLED BY"); 
 
 
             }
@@ -1273,10 +1277,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__67;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:66:7: ( 'FILTERING' )
-            // InternalDescartesQL.g:66:9: 'FILTERING'
+            // InternalDescartesQL.g:66:7: ( 'BETWEEN' )
+            // InternalDescartesQL.g:66:9: 'BETWEEN'
             {
-            match("FILTERING"); 
+            match("BETWEEN"); 
 
 
             }
@@ -1294,10 +1298,11 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__68;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:67:7: ( '%' )
-            // InternalDescartesQL.g:67:9: '%'
+            // InternalDescartesQL.g:67:7: ( 'AND' )
+            // InternalDescartesQL.g:67:9: 'AND'
             {
-            match('%'); 
+            match("AND"); 
+
 
             }
 
@@ -1314,10 +1319,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__69;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:68:7: ( 'ADD' )
-            // InternalDescartesQL.g:68:9: 'ADD'
+            // InternalDescartesQL.g:68:7: ( 'WHAT IF' )
+            // InternalDescartesQL.g:68:9: 'WHAT IF'
             {
-            match("ADD"); 
+            match("WHAT IF"); 
 
 
             }
@@ -1335,10 +1340,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__70;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:69:7: ( 'SUB' )
-            // InternalDescartesQL.g:69:9: 'SUB'
+            // InternalDescartesQL.g:69:7: ( 'DELTA' )
+            // InternalDescartesQL.g:69:9: 'DELTA'
             {
-            match("SUB"); 
+            match("DELTA"); 
 
 
             }
@@ -1356,10 +1361,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__71;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:70:7: ( 'MULTIPLY' )
-            // InternalDescartesQL.g:70:9: 'MULTIPLY'
+            // InternalDescartesQL.g:70:7: ( 'FILTERING' )
+            // InternalDescartesQL.g:70:9: 'FILTERING'
             {
-            match("MULTIPLY"); 
+            match("FILTERING"); 
 
 
             }
@@ -1377,11 +1382,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__72;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:71:7: ( '<=' )
-            // InternalDescartesQL.g:71:9: '<='
+            // InternalDescartesQL.g:71:7: ( '%' )
+            // InternalDescartesQL.g:71:9: '%'
             {
-            match("<="); 
-
+            match('%'); 
 
             }
 
@@ -1398,10 +1402,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__73;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:72:7: ( '>=' )
-            // InternalDescartesQL.g:72:9: '>='
+            // InternalDescartesQL.g:72:7: ( 'ADD' )
+            // InternalDescartesQL.g:72:9: 'ADD'
             {
-            match(">="); 
+            match("ADD"); 
 
 
             }
@@ -1419,10 +1423,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__74;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:73:7: ( '==' )
-            // InternalDescartesQL.g:73:9: '=='
+            // InternalDescartesQL.g:73:7: ( 'SUB' )
+            // InternalDescartesQL.g:73:9: 'SUB'
             {
-            match("=="); 
+            match("SUB"); 
 
 
             }
@@ -1440,10 +1444,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__75;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:74:7: ( 'EUR' )
-            // InternalDescartesQL.g:74:9: 'EUR'
+            // InternalDescartesQL.g:74:7: ( 'MULTIPLY' )
+            // InternalDescartesQL.g:74:9: 'MULTIPLY'
             {
-            match("EUR"); 
+            match("MULTIPLY"); 
 
 
             }
@@ -1461,10 +1465,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__76;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:75:7: ( 'USD' )
-            // InternalDescartesQL.g:75:9: 'USD'
+            // InternalDescartesQL.g:75:7: ( '<=' )
+            // InternalDescartesQL.g:75:9: '<='
             {
-            match("USD"); 
+            match("<="); 
 
 
             }
@@ -1482,10 +1486,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__77;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:76:7: ( 'XOR' )
-            // InternalDescartesQL.g:76:9: 'XOR'
+            // InternalDescartesQL.g:76:7: ( '>=' )
+            // InternalDescartesQL.g:76:9: '>='
             {
-            match("XOR"); 
+            match(">="); 
 
 
             }
@@ -1503,10 +1507,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__78;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:77:7: ( 'OR' )
-            // InternalDescartesQL.g:77:9: 'OR'
+            // InternalDescartesQL.g:77:7: ( '==' )
+            // InternalDescartesQL.g:77:9: '=='
             {
-            match("OR"); 
+            match("=="); 
 
 
             }
@@ -1524,10 +1528,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__79;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:78:7: ( 'INSTANCEOF' )
-            // InternalDescartesQL.g:78:9: 'INSTANCEOF'
+            // InternalDescartesQL.g:78:7: ( 'EUR' )
+            // InternalDescartesQL.g:78:9: 'EUR'
             {
-            match("INSTANCEOF"); 
+            match("EUR"); 
 
 
             }
@@ -1545,10 +1549,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__80;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:79:7: ( 'CLASSREGEX' )
-            // InternalDescartesQL.g:79:9: 'CLASSREGEX'
+            // InternalDescartesQL.g:79:7: ( 'USD' )
+            // InternalDescartesQL.g:79:9: 'USD'
             {
-            match("CLASSREGEX"); 
+            match("USD"); 
 
 
             }
@@ -1566,10 +1570,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__81;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:80:7: ( 'SINCE' )
-            // InternalDescartesQL.g:80:9: 'SINCE'
+            // InternalDescartesQL.g:80:7: ( 'XOR' )
+            // InternalDescartesQL.g:80:9: 'XOR'
             {
-            match("SINCE"); 
+            match("XOR"); 
 
 
             }
@@ -1587,10 +1591,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__82;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:81:7: ( 'NEXT' )
-            // InternalDescartesQL.g:81:9: 'NEXT'
+            // InternalDescartesQL.g:81:7: ( 'OR' )
+            // InternalDescartesQL.g:81:9: 'OR'
             {
-            match("NEXT"); 
+            match("OR"); 
 
 
             }
@@ -1608,10 +1612,11 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__83;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:82:7: ( '-' )
-            // InternalDescartesQL.g:82:9: '-'
+            // InternalDescartesQL.g:82:7: ( 'INSTANCEOF' )
+            // InternalDescartesQL.g:82:9: 'INSTANCEOF'
             {
-            match('-'); 
+            match("INSTANCEOF"); 
+
 
             }
 
@@ -1628,10 +1633,11 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__84;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:83:7: ( '+' )
-            // InternalDescartesQL.g:83:9: '+'
+            // InternalDescartesQL.g:83:7: ( 'CLASSREGEX' )
+            // InternalDescartesQL.g:83:9: 'CLASSREGEX'
             {
-            match('+'); 
+            match("CLASSREGEX"); 
+
 
             }
 
@@ -1648,10 +1654,11 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__85;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:84:7: ( 'y' )
-            // InternalDescartesQL.g:84:9: 'y'
+            // InternalDescartesQL.g:84:7: ( 'SINCE' )
+            // InternalDescartesQL.g:84:9: 'SINCE'
             {
-            match('y'); 
+            match("SINCE"); 
+
 
             }
 
@@ -1668,10 +1675,11 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__86;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:85:7: ( 'm' )
-            // InternalDescartesQL.g:85:9: 'm'
+            // InternalDescartesQL.g:85:7: ( 'NEXT' )
+            // InternalDescartesQL.g:85:9: 'NEXT'
             {
-            match('m'); 
+            match("NEXT"); 
+
 
             }
 
@@ -1688,10 +1696,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__87;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:86:7: ( 'w' )
-            // InternalDescartesQL.g:86:9: 'w'
+            // InternalDescartesQL.g:86:7: ( '-' )
+            // InternalDescartesQL.g:86:9: '-'
             {
-            match('w'); 
+            match('-'); 
 
             }
 
@@ -1708,10 +1716,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__88;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:87:7: ( 'd' )
-            // InternalDescartesQL.g:87:9: 'd'
+            // InternalDescartesQL.g:87:7: ( '+' )
+            // InternalDescartesQL.g:87:9: '+'
             {
-            match('d'); 
+            match('+'); 
 
             }
 
@@ -1728,10 +1736,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__89;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:88:7: ( 'h' )
-            // InternalDescartesQL.g:88:9: 'h'
+            // InternalDescartesQL.g:88:7: ( 'y' )
+            // InternalDescartesQL.g:88:9: 'y'
             {
-            match('h'); 
+            match('y'); 
 
             }
 
@@ -1748,10 +1756,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__90;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:89:7: ( 'M' )
-            // InternalDescartesQL.g:89:9: 'M'
+            // InternalDescartesQL.g:89:7: ( 'm' )
+            // InternalDescartesQL.g:89:9: 'm'
             {
-            match('M'); 
+            match('m'); 
 
             }
 
@@ -1768,10 +1776,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__91;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:90:7: ( 's' )
-            // InternalDescartesQL.g:90:9: 's'
+            // InternalDescartesQL.g:90:7: ( 'w' )
+            // InternalDescartesQL.g:90:9: 'w'
             {
-            match('s'); 
+            match('w'); 
 
             }
 
@@ -1788,10 +1796,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__92;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:91:7: ( 'S' )
-            // InternalDescartesQL.g:91:9: 'S'
+            // InternalDescartesQL.g:91:7: ( 'd' )
+            // InternalDescartesQL.g:91:9: 'd'
             {
-            match('S'); 
+            match('d'); 
 
             }
 
@@ -1808,11 +1816,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__93;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:92:7: ( 'MIN' )
-            // InternalDescartesQL.g:92:9: 'MIN'
+            // InternalDescartesQL.g:92:7: ( 'h' )
+            // InternalDescartesQL.g:92:9: 'h'
             {
-            match("MIN"); 
-
+            match('h'); 
 
             }
 
@@ -1829,11 +1836,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__94;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:93:7: ( 'MAX' )
-            // InternalDescartesQL.g:93:9: 'MAX'
+            // InternalDescartesQL.g:93:7: ( 'M' )
+            // InternalDescartesQL.g:93:9: 'M'
             {
-            match("MAX"); 
-
+            match('M'); 
 
             }
 
@@ -1850,11 +1856,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__95;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:94:7: ( 'GEOMEAN' )
-            // InternalDescartesQL.g:94:9: 'GEOMEAN'
+            // InternalDescartesQL.g:94:7: ( 's' )
+            // InternalDescartesQL.g:94:9: 's'
             {
-            match("GEOMEAN"); 
-
+            match('s'); 
 
             }
 
@@ -1871,10 +1876,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__96;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:95:7: ( 'N' )
-            // InternalDescartesQL.g:95:9: 'N'
+            // InternalDescartesQL.g:95:7: ( 'S' )
+            // InternalDescartesQL.g:95:9: 'S'
             {
-            match('N'); 
+            match('S'); 
 
             }
 
@@ -1891,10 +1896,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__97;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:96:7: ( 'SUM' )
-            // InternalDescartesQL.g:96:9: 'SUM'
+            // InternalDescartesQL.g:96:7: ( 'MIN' )
+            // InternalDescartesQL.g:96:9: 'MIN'
             {
-            match("SUM"); 
+            match("MIN"); 
 
 
             }
@@ -1912,10 +1917,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__98;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:97:7: ( 'SUMOFSQUARES' )
-            // InternalDescartesQL.g:97:9: 'SUMOFSQUARES'
+            // InternalDescartesQL.g:97:7: ( 'MAX' )
+            // InternalDescartesQL.g:97:9: 'MAX'
             {
-            match("SUMOFSQUARES"); 
+            match("MAX"); 
 
 
             }
@@ -1933,10 +1938,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__99;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:98:7: ( 'STDDEV' )
-            // InternalDescartesQL.g:98:9: 'STDDEV'
+            // InternalDescartesQL.g:98:7: ( 'GEOMEAN' )
+            // InternalDescartesQL.g:98:9: 'GEOMEAN'
             {
-            match("STDDEV"); 
+            match("GEOMEAN"); 
 
 
             }
@@ -1954,11 +1959,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__100;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:99:8: ( 'VAR' )
-            // InternalDescartesQL.g:99:10: 'VAR'
+            // InternalDescartesQL.g:99:8: ( 'N' )
+            // InternalDescartesQL.g:99:10: 'N'
             {
-            match("VAR"); 
-
+            match('N'); 
 
             }
 
@@ -1975,10 +1979,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__101;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:100:8: ( 'PERCENTILE' )
-            // InternalDescartesQL.g:100:10: 'PERCENTILE'
+            // InternalDescartesQL.g:100:8: ( 'SUM' )
+            // InternalDescartesQL.g:100:10: 'SUM'
             {
-            match("PERCENTILE"); 
+            match("SUM"); 
 
 
             }
@@ -1996,10 +2000,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = T__102;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:101:8: ( 'MEAN' )
-            // InternalDescartesQL.g:101:10: 'MEAN'
+            // InternalDescartesQL.g:101:8: ( 'SUMOFSQUARES' )
+            // InternalDescartesQL.g:101:10: 'SUMOFSQUARES'
             {
-            match("MEAN"); 
+            match("SUMOFSQUARES"); 
 
 
             }
@@ -2012,15 +2016,99 @@ public class InternalDescartesQLLexer extends Lexer {
     }
     // $ANTLR end "T__102"
 
+    // $ANTLR start "T__103"
+    public final void mT__103() throws RecognitionException {
+        try {
+            int _type = T__103;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalDescartesQL.g:102:8: ( 'STDDEV' )
+            // InternalDescartesQL.g:102:10: 'STDDEV'
+            {
+            match("STDDEV"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__103"
+
+    // $ANTLR start "T__104"
+    public final void mT__104() throws RecognitionException {
+        try {
+            int _type = T__104;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalDescartesQL.g:103:8: ( 'VAR' )
+            // InternalDescartesQL.g:103:10: 'VAR'
+            {
+            match("VAR"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__104"
+
+    // $ANTLR start "T__105"
+    public final void mT__105() throws RecognitionException {
+        try {
+            int _type = T__105;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalDescartesQL.g:104:8: ( 'PERCENTILE' )
+            // InternalDescartesQL.g:104:10: 'PERCENTILE'
+            {
+            match("PERCENTILE"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__105"
+
+    // $ANTLR start "T__106"
+    public final void mT__106() throws RecognitionException {
+        try {
+            int _type = T__106;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalDescartesQL.g:105:8: ( 'MEAN' )
+            // InternalDescartesQL.g:105:10: 'MEAN'
+            {
+            match("MEAN"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__106"
+
     // $ANTLR start "RULE_DOUBLE"
     public final void mRULE_DOUBLE() throws RecognitionException {
         try {
             int _type = RULE_DOUBLE;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:5867:13: ( ( '0' | '1' .. '9' ( '0' .. '9' )* ) '.' ( '0' .. '9' )+ )
-            // InternalDescartesQL.g:5867:15: ( '0' | '1' .. '9' ( '0' .. '9' )* ) '.' ( '0' .. '9' )+
+            // InternalDescartesQL.g:6129:13: ( ( '0' | '1' .. '9' ( '0' .. '9' )* ) '.' ( '0' .. '9' )+ )
+            // InternalDescartesQL.g:6129:15: ( '0' | '1' .. '9' ( '0' .. '9' )* ) '.' ( '0' .. '9' )+
             {
-            // InternalDescartesQL.g:5867:15: ( '0' | '1' .. '9' ( '0' .. '9' )* )
+            // InternalDescartesQL.g:6129:15: ( '0' | '1' .. '9' ( '0' .. '9' )* )
             int alt2=2;
             int LA2_0 = input.LA(1);
 
@@ -2038,17 +2126,17 @@ public class InternalDescartesQLLexer extends Lexer {
             }
             switch (alt2) {
                 case 1 :
-                    // InternalDescartesQL.g:5867:16: '0'
+                    // InternalDescartesQL.g:6129:16: '0'
                     {
                     match('0'); 
 
                     }
                     break;
                 case 2 :
-                    // InternalDescartesQL.g:5867:20: '1' .. '9' ( '0' .. '9' )*
+                    // InternalDescartesQL.g:6129:20: '1' .. '9' ( '0' .. '9' )*
                     {
                     matchRange('1','9'); 
-                    // InternalDescartesQL.g:5867:29: ( '0' .. '9' )*
+                    // InternalDescartesQL.g:6129:29: ( '0' .. '9' )*
                     loop1:
                     do {
                         int alt1=2;
@@ -2061,7 +2149,7 @@ public class InternalDescartesQLLexer extends Lexer {
 
                         switch (alt1) {
                     	case 1 :
-                    	    // InternalDescartesQL.g:5867:30: '0' .. '9'
+                    	    // InternalDescartesQL.g:6129:30: '0' .. '9'
                     	    {
                     	    matchRange('0','9'); 
 
@@ -2080,7 +2168,7 @@ public class InternalDescartesQLLexer extends Lexer {
             }
 
             match('.'); 
-            // InternalDescartesQL.g:5867:46: ( '0' .. '9' )+
+            // InternalDescartesQL.g:6129:46: ( '0' .. '9' )+
             int cnt3=0;
             loop3:
             do {
@@ -2094,7 +2182,7 @@ public class InternalDescartesQLLexer extends Lexer {
 
                 switch (alt3) {
             	case 1 :
-            	    // InternalDescartesQL.g:5867:47: '0' .. '9'
+            	    // InternalDescartesQL.g:6129:47: '0' .. '9'
             	    {
             	    matchRange('0','9'); 
 
@@ -2126,10 +2214,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = RULE_ID;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:5869:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
-            // InternalDescartesQL.g:5869:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            // InternalDescartesQL.g:6131:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
+            // InternalDescartesQL.g:6131:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
             {
-            // InternalDescartesQL.g:5869:11: ( '^' )?
+            // InternalDescartesQL.g:6131:11: ( '^' )?
             int alt4=2;
             int LA4_0 = input.LA(1);
 
@@ -2138,7 +2226,7 @@ public class InternalDescartesQLLexer extends Lexer {
             }
             switch (alt4) {
                 case 1 :
-                    // InternalDescartesQL.g:5869:11: '^'
+                    // InternalDescartesQL.g:6131:11: '^'
                     {
                     match('^'); 
 
@@ -2156,7 +2244,7 @@ public class InternalDescartesQLLexer extends Lexer {
                 recover(mse);
                 throw mse;}
 
-            // InternalDescartesQL.g:5869:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            // InternalDescartesQL.g:6131:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
             loop5:
             do {
                 int alt5=2;
@@ -2205,10 +2293,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = RULE_INT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:5871:10: ( ( '0' .. '9' )+ )
-            // InternalDescartesQL.g:5871:12: ( '0' .. '9' )+
+            // InternalDescartesQL.g:6133:10: ( ( '0' .. '9' )+ )
+            // InternalDescartesQL.g:6133:12: ( '0' .. '9' )+
             {
-            // InternalDescartesQL.g:5871:12: ( '0' .. '9' )+
+            // InternalDescartesQL.g:6133:12: ( '0' .. '9' )+
             int cnt6=0;
             loop6:
             do {
@@ -2222,7 +2310,7 @@ public class InternalDescartesQLLexer extends Lexer {
 
                 switch (alt6) {
             	case 1 :
-            	    // InternalDescartesQL.g:5871:13: '0' .. '9'
+            	    // InternalDescartesQL.g:6133:13: '0' .. '9'
             	    {
             	    matchRange('0','9'); 
 
@@ -2254,10 +2342,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = RULE_STRING;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:5873:13: ( ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
-            // InternalDescartesQL.g:5873:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            // InternalDescartesQL.g:6135:13: ( ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
+            // InternalDescartesQL.g:6135:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
             {
-            // InternalDescartesQL.g:5873:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            // InternalDescartesQL.g:6135:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
             int alt9=2;
             int LA9_0 = input.LA(1);
 
@@ -2275,10 +2363,10 @@ public class InternalDescartesQLLexer extends Lexer {
             }
             switch (alt9) {
                 case 1 :
-                    // InternalDescartesQL.g:5873:16: '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
+                    // InternalDescartesQL.g:6135:16: '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
                     {
                     match('\"'); 
-                    // InternalDescartesQL.g:5873:20: ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )*
+                    // InternalDescartesQL.g:6135:20: ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )*
                     loop7:
                     do {
                         int alt7=3;
@@ -2294,7 +2382,7 @@ public class InternalDescartesQLLexer extends Lexer {
 
                         switch (alt7) {
                     	case 1 :
-                    	    // InternalDescartesQL.g:5873:21: '\\\\' .
+                    	    // InternalDescartesQL.g:6135:21: '\\\\' .
                     	    {
                     	    match('\\'); 
                     	    matchAny(); 
@@ -2302,7 +2390,7 @@ public class InternalDescartesQLLexer extends Lexer {
                     	    }
                     	    break;
                     	case 2 :
-                    	    // InternalDescartesQL.g:5873:28: ~ ( ( '\\\\' | '\"' ) )
+                    	    // InternalDescartesQL.g:6135:28: ~ ( ( '\\\\' | '\"' ) )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
                     	        input.consume();
@@ -2327,10 +2415,10 @@ public class InternalDescartesQLLexer extends Lexer {
                     }
                     break;
                 case 2 :
-                    // InternalDescartesQL.g:5873:48: '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
+                    // InternalDescartesQL.g:6135:48: '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
                     {
                     match('\''); 
-                    // InternalDescartesQL.g:5873:53: ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )*
+                    // InternalDescartesQL.g:6135:53: ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )*
                     loop8:
                     do {
                         int alt8=3;
@@ -2346,7 +2434,7 @@ public class InternalDescartesQLLexer extends Lexer {
 
                         switch (alt8) {
                     	case 1 :
-                    	    // InternalDescartesQL.g:5873:54: '\\\\' .
+                    	    // InternalDescartesQL.g:6135:54: '\\\\' .
                     	    {
                     	    match('\\'); 
                     	    matchAny(); 
@@ -2354,7 +2442,7 @@ public class InternalDescartesQLLexer extends Lexer {
                     	    }
                     	    break;
                     	case 2 :
-                    	    // InternalDescartesQL.g:5873:61: ~ ( ( '\\\\' | '\\'' ) )
+                    	    // InternalDescartesQL.g:6135:61: ~ ( ( '\\\\' | '\\'' ) )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
                     	        input.consume();
@@ -2397,12 +2485,12 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = RULE_ML_COMMENT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:5875:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // InternalDescartesQL.g:5875:19: '/*' ( options {greedy=false; } : . )* '*/'
+            // InternalDescartesQL.g:6137:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // InternalDescartesQL.g:6137:19: '/*' ( options {greedy=false; } : . )* '*/'
             {
             match("/*"); 
 
-            // InternalDescartesQL.g:5875:24: ( options {greedy=false; } : . )*
+            // InternalDescartesQL.g:6137:24: ( options {greedy=false; } : . )*
             loop10:
             do {
                 int alt10=2;
@@ -2427,7 +2515,7 @@ public class InternalDescartesQLLexer extends Lexer {
 
                 switch (alt10) {
             	case 1 :
-            	    // InternalDescartesQL.g:5875:52: .
+            	    // InternalDescartesQL.g:6137:52: .
             	    {
             	    matchAny(); 
 
@@ -2457,12 +2545,12 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = RULE_SL_COMMENT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:5877:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
-            // InternalDescartesQL.g:5877:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            // InternalDescartesQL.g:6139:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // InternalDescartesQL.g:6139:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
             {
             match("//"); 
 
-            // InternalDescartesQL.g:5877:24: (~ ( ( '\\n' | '\\r' ) ) )*
+            // InternalDescartesQL.g:6139:24: (~ ( ( '\\n' | '\\r' ) ) )*
             loop11:
             do {
                 int alt11=2;
@@ -2475,7 +2563,7 @@ public class InternalDescartesQLLexer extends Lexer {
 
                 switch (alt11) {
             	case 1 :
-            	    // InternalDescartesQL.g:5877:24: ~ ( ( '\\n' | '\\r' ) )
+            	    // InternalDescartesQL.g:6139:24: ~ ( ( '\\n' | '\\r' ) )
             	    {
             	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFF') ) {
             	        input.consume();
@@ -2495,7 +2583,7 @@ public class InternalDescartesQLLexer extends Lexer {
                 }
             } while (true);
 
-            // InternalDescartesQL.g:5877:40: ( ( '\\r' )? '\\n' )?
+            // InternalDescartesQL.g:6139:40: ( ( '\\r' )? '\\n' )?
             int alt13=2;
             int LA13_0 = input.LA(1);
 
@@ -2504,9 +2592,9 @@ public class InternalDescartesQLLexer extends Lexer {
             }
             switch (alt13) {
                 case 1 :
-                    // InternalDescartesQL.g:5877:41: ( '\\r' )? '\\n'
+                    // InternalDescartesQL.g:6139:41: ( '\\r' )? '\\n'
                     {
-                    // InternalDescartesQL.g:5877:41: ( '\\r' )?
+                    // InternalDescartesQL.g:6139:41: ( '\\r' )?
                     int alt12=2;
                     int LA12_0 = input.LA(1);
 
@@ -2515,7 +2603,7 @@ public class InternalDescartesQLLexer extends Lexer {
                     }
                     switch (alt12) {
                         case 1 :
-                            // InternalDescartesQL.g:5877:41: '\\r'
+                            // InternalDescartesQL.g:6139:41: '\\r'
                             {
                             match('\r'); 
 
@@ -2547,10 +2635,10 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = RULE_WS;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:5879:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
-            // InternalDescartesQL.g:5879:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            // InternalDescartesQL.g:6141:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
+            // InternalDescartesQL.g:6141:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
             {
-            // InternalDescartesQL.g:5879:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            // InternalDescartesQL.g:6141:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
             int cnt14=0;
             loop14:
             do {
@@ -2604,8 +2692,8 @@ public class InternalDescartesQLLexer extends Lexer {
         try {
             int _type = RULE_ANY_OTHER;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalDescartesQL.g:5881:16: ( . )
-            // InternalDescartesQL.g:5881:18: .
+            // InternalDescartesQL.g:6143:16: ( . )
+            // InternalDescartesQL.g:6143:18: .
             {
             matchAny(); 
 
@@ -2620,8 +2708,8 @@ public class InternalDescartesQLLexer extends Lexer {
     // $ANTLR end "RULE_ANY_OTHER"
 
     public void mTokens() throws RecognitionException {
-        // InternalDescartesQL.g:1:8: ( T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | T__35 | T__36 | T__37 | T__38 | T__39 | T__40 | T__41 | T__42 | T__43 | T__44 | T__45 | T__46 | T__47 | T__48 | T__49 | T__50 | T__51 | T__52 | T__53 | T__54 | T__55 | T__56 | T__57 | T__58 | T__59 | T__60 | T__61 | T__62 | T__63 | T__64 | T__65 | T__66 | T__67 | T__68 | T__69 | T__70 | T__71 | T__72 | T__73 | T__74 | T__75 | T__76 | T__77 | T__78 | T__79 | T__80 | T__81 | T__82 | T__83 | T__84 | T__85 | T__86 | T__87 | T__88 | T__89 | T__90 | T__91 | T__92 | T__93 | T__94 | T__95 | T__96 | T__97 | T__98 | T__99 | T__100 | T__101 | T__102 | RULE_DOUBLE | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
-        int alt15=99;
+        // InternalDescartesQL.g:1:8: ( T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | T__35 | T__36 | T__37 | T__38 | T__39 | T__40 | T__41 | T__42 | T__43 | T__44 | T__45 | T__46 | T__47 | T__48 | T__49 | T__50 | T__51 | T__52 | T__53 | T__54 | T__55 | T__56 | T__57 | T__58 | T__59 | T__60 | T__61 | T__62 | T__63 | T__64 | T__65 | T__66 | T__67 | T__68 | T__69 | T__70 | T__71 | T__72 | T__73 | T__74 | T__75 | T__76 | T__77 | T__78 | T__79 | T__80 | T__81 | T__82 | T__83 | T__84 | T__85 | T__86 | T__87 | T__88 | T__89 | T__90 | T__91 | T__92 | T__93 | T__94 | T__95 | T__96 | T__97 | T__98 | T__99 | T__100 | T__101 | T__102 | T__103 | T__104 | T__105 | T__106 | RULE_DOUBLE | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
+        int alt15=103;
         alt15 = dfa15.predict(input);
         switch (alt15) {
             case 1 :
@@ -3262,56 +3350,84 @@ public class InternalDescartesQLLexer extends Lexer {
                 }
                 break;
             case 92 :
-                // InternalDescartesQL.g:1:559: RULE_DOUBLE
+                // InternalDescartesQL.g:1:559: T__103
                 {
-                mRULE_DOUBLE(); 
+                mT__103(); 
 
                 }
                 break;
             case 93 :
-                // InternalDescartesQL.g:1:571: RULE_ID
+                // InternalDescartesQL.g:1:566: T__104
                 {
-                mRULE_ID(); 
+                mT__104(); 
 
                 }
                 break;
             case 94 :
-                // InternalDescartesQL.g:1:579: RULE_INT
+                // InternalDescartesQL.g:1:573: T__105
                 {
-                mRULE_INT(); 
+                mT__105(); 
 
                 }
                 break;
             case 95 :
-                // InternalDescartesQL.g:1:588: RULE_STRING
+                // InternalDescartesQL.g:1:580: T__106
                 {
-                mRULE_STRING(); 
+                mT__106(); 
 
                 }
                 break;
             case 96 :
-                // InternalDescartesQL.g:1:600: RULE_ML_COMMENT
+                // InternalDescartesQL.g:1:587: RULE_DOUBLE
                 {
-                mRULE_ML_COMMENT(); 
+                mRULE_DOUBLE(); 
 
                 }
                 break;
             case 97 :
-                // InternalDescartesQL.g:1:616: RULE_SL_COMMENT
+                // InternalDescartesQL.g:1:599: RULE_ID
                 {
-                mRULE_SL_COMMENT(); 
+                mRULE_ID(); 
 
                 }
                 break;
             case 98 :
-                // InternalDescartesQL.g:1:632: RULE_WS
+                // InternalDescartesQL.g:1:607: RULE_INT
                 {
-                mRULE_WS(); 
+                mRULE_INT(); 
 
                 }
                 break;
             case 99 :
-                // InternalDescartesQL.g:1:640: RULE_ANY_OTHER
+                // InternalDescartesQL.g:1:616: RULE_STRING
+                {
+                mRULE_STRING(); 
+
+                }
+                break;
+            case 100 :
+                // InternalDescartesQL.g:1:628: RULE_ML_COMMENT
+                {
+                mRULE_ML_COMMENT(); 
+
+                }
+                break;
+            case 101 :
+                // InternalDescartesQL.g:1:644: RULE_SL_COMMENT
+                {
+                mRULE_SL_COMMENT(); 
+
+                }
+                break;
+            case 102 :
+                // InternalDescartesQL.g:1:660: RULE_WS
+                {
+                mRULE_WS(); 
+
+                }
+                break;
+            case 103 :
+                // InternalDescartesQL.g:1:668: RULE_ANY_OTHER
                 {
                 mRULE_ANY_OTHER(); 
 
@@ -3325,37 +3441,37 @@ public class InternalDescartesQLLexer extends Lexer {
 
     protected DFA15 dfa15 = new DFA15(this);
     static final String DFA15_eotS =
-        "\2\uffff\1\73\1\101\1\73\1\uffff\2\73\3\uffff\1\120\6\73\1\140\1\73\2\uffff\1\147\1\151\1\153\1\155\5\73\1\uffff\1\73\1\uffff\2\73\1\173\2\uffff\1\176\1\177\1\u0080\1\u0081\1\u0082\1\u0083\2\u0085\1\65\1\uffff\3\65\3\uffff\4\73\1\uffff\5\73\1\uffff\1\73\1\u0097\2\73\1\uffff\5\73\5\uffff\17\73\1\uffff\1\73\1\u00b3\1\73\12\uffff\6\73\1\uffff\1\73\1\u00bd\1\uffff\3\73\13\uffff\1\u0085\4\uffff\4\73\1\u00c5\4\73\1\u00ca\1\u00cb\1\73\1\uffff\1\u00cd\1\u00ce\1\73\1\u00d0\5\73\1\u00d8\2\73\1\u00dc\1\73\1\u00df\2\73\1\u00e2\4\73\1\u00e7\1\u00e9\3\73\1\uffff\5\73\1\u00f2\3\73\1\uffff\1\u00f6\6\73\1\uffff\2\73\1\u00ff\1\73\2\uffff\1\73\2\uffff\1\73\1\uffff\7\73\1\uffff\3\73\1\uffff\2\73\1\uffff\1\u010f\1\73\1\uffff\4\73\1\uffff\1\73\1\uffff\10\73\1\uffff\1\u011e\2\73\1\uffff\1\73\1\u0122\6\73\1\uffff\2\73\1\u012b\14\73\2\uffff\1\73\1\u0139\3\73\1\u013d\5\73\1\uffff\1\u0143\2\uffff\2\73\1\uffff\1\u0146\7\73\1\uffff\14\73\1\u015b\1\uffff\1\u015c\2\73\1\uffff\1\u015f\3\73\1\u0163\1\uffff\2\73\1\uffff\3\73\1\u0169\1\u016a\2\73\1\u016d\1\uffff\7\73\1\u0175\2\73\1\u0178\2\uffff\2\73\1\uffff\1\73\1\u017c\1\73\1\uffff\1\u017e\1\73\1\u0180\2\73\2\uffff\1\u0183\1\73\1\uffff\1\u0185\6\73\1\uffff\2\73\2\uffff\2\73\1\uffff\1\u0190\1\uffff\1\73\1\uffff\1\73\2\uffff\1\73\1\uffff\1\73\1\u0196\1\73\1\u0198\1\uffff\1\u0199\4\73\1\uffff\2\73\1\u01a0\2\73\1\uffff\1\u01a3\2\uffff\1\u01a4\1\u01a5\2\73\1\u01a8\1\73\1\uffff\1\u01aa\1\73\3\uffff\1\73\1\u01ad\4\uffff\1\u01ae\2\uffff";
+        "\2\uffff\1\73\1\101\1\73\1\112\2\73\1\uffff\1\73\3\uffff\1\127\6\73\2\uffff\1\147\1\151\1\153\1\155\5\73\1\uffff\1\73\1\uffff\2\73\1\173\2\uffff\1\176\1\177\1\u0080\1\u0081\1\u0082\1\u0083\2\u0085\1\65\1\uffff\3\65\3\uffff\4\73\1\uffff\5\73\1\uffff\10\73\1\uffff\2\73\1\u00a5\2\73\1\uffff\2\73\5\uffff\12\73\1\u00b5\1\73\12\uffff\6\73\1\uffff\1\73\1\u00bf\1\uffff\3\73\13\uffff\1\u0085\4\uffff\4\73\1\u00c7\4\73\1\u00cc\1\u00cd\1\73\1\u00cf\6\73\1\u00d6\1\u00d8\2\73\1\u00dc\2\73\1\uffff\1\u00df\1\u00e0\3\73\1\u00e6\2\73\1\u00ea\2\73\1\u00ed\3\73\1\uffff\5\73\1\u00f6\3\73\1\uffff\1\u00fa\6\73\1\uffff\2\73\1\u0103\1\73\2\uffff\1\73\1\uffff\6\73\1\uffff\1\73\1\uffff\3\73\1\uffff\2\73\2\uffff\5\73\1\uffff\3\73\1\uffff\1\u011a\1\73\1\uffff\10\73\1\uffff\1\u0124\2\73\1\uffff\1\73\1\u0128\6\73\1\uffff\3\73\1\u0132\5\73\1\u0138\14\73\2\uffff\1\73\1\u0146\4\73\1\uffff\1\u014b\2\uffff\2\73\1\uffff\1\u014e\10\73\1\uffff\3\73\1\u015a\1\73\1\uffff\1\u015c\13\73\1\u0169\1\uffff\3\73\1\u016d\1\uffff\2\73\1\uffff\3\73\1\u0173\1\u0174\2\73\1\u0177\1\uffff\2\73\1\uffff\1\73\1\uffff\1\u017c\1\u017d\11\73\1\u0187\1\uffff\1\73\1\u0189\1\73\1\uffff\1\u018b\1\73\1\u018d\1\u018f\1\73\2\uffff\1\u0191\1\u0192\1\uffff\1\73\1\uffff\2\73\2\uffff\1\73\1\u0197\7\73\1\uffff\1\73\1\uffff\1\u01a0\1\uffff\1\73\3\uffff\1\73\2\uffff\4\73\1\uffff\1\73\1\u01a9\1\73\1\u01ab\1\uffff\1\u01ac\2\73\1\uffff\4\73\1\u01b3\1\u01b4\2\73\1\uffff\1\u01b7\2\uffff\1\u01b8\1\73\1\u01ba\3\73\2\uffff\1\u01be\1\73\2\uffff\1\u01c0\2\uffff\1\73\1\u01c2\5\uffff";
     static final String DFA15_eofS =
-        "\u01af\uffff";
+        "\u01c3\uffff";
     static final String DFA15_minS =
-        "\1\0\1\uffff\1\116\1\60\1\104\1\uffff\1\105\1\114\3\uffff\1\56\1\111\1\105\1\101\2\111\1\105\1\60\1\105\2\uffff\1\56\3\75\1\150\1\141\1\151\1\123\1\110\1\uffff\1\102\1\uffff\1\117\1\116\1\60\2\uffff\6\60\2\56\1\101\1\uffff\2\0\1\52\3\uffff\1\123\1\120\1\101\1\122\1\uffff\1\116\1\101\1\114\1\116\1\130\1\uffff\1\122\1\60\2\104\1\uffff\1\101\1\117\1\111\1\116\1\101\5\uffff\1\132\1\122\1\114\1\116\1\117\1\122\1\123\1\115\1\106\2\114\1\115\1\102\1\116\1\104\1\uffff\1\124\1\60\1\124\12\uffff\1\151\1\162\1\156\1\104\1\124\1\101\1\uffff\1\123\1\60\1\uffff\1\122\1\123\1\130\13\uffff\1\56\4\uffff\1\125\1\111\2\114\1\60\1\111\1\122\1\116\1\124\2\60\1\105\1\uffff\2\60\1\114\1\60\1\115\2\104\1\123\1\132\1\60\1\124\1\101\1\60\1\114\1\60\1\124\1\105\1\60\1\105\1\124\1\105\1\120\2\60\1\103\1\104\1\124\1\uffff\1\127\1\154\1\145\1\144\1\116\1\60\1\110\1\124\1\105\1\uffff\1\60\2\124\1\122\1\124\1\117\1\125\1\uffff\1\124\1\111\1\60\1\111\2\uffff\1\105\2\uffff\1\123\1\uffff\2\105\1\101\1\124\1\111\1\123\1\111\1\uffff\1\105\1\114\1\105\1\uffff\1\101\1\111\1\uffff\1\60\1\40\1\uffff\1\103\1\101\1\103\1\114\1\uffff\1\106\1\uffff\2\105\1\114\1\105\1\144\1\156\1\50\1\107\1\uffff\1\60\1\40\1\122\1\uffff\1\101\1\60\1\105\1\111\1\122\1\101\1\117\1\103\1\uffff\1\120\1\115\1\60\1\101\1\104\1\111\1\122\1\124\1\122\1\116\1\122\1\124\1\116\1\124\1\116\2\uffff\1\124\1\60\1\124\1\105\1\123\1\60\1\126\2\105\1\162\1\164\1\uffff\1\60\2\uffff\1\126\1\116\1\uffff\1\60\1\105\1\101\1\124\1\122\1\123\1\114\1\105\1\uffff\1\116\1\40\1\116\1\101\1\111\3\105\1\131\1\124\1\111\1\107\1\60\1\uffff\1\60\1\104\1\121\1\uffff\1\60\2\116\1\145\1\60\1\uffff\1\105\1\103\1\uffff\1\123\1\124\1\105\2\60\1\131\1\116\1\60\1\uffff\1\123\1\111\1\117\1\107\1\123\1\104\1\116\1\60\1\111\1\117\1\60\2\uffff\1\40\1\125\1\uffff\1\105\1\60\1\156\1\uffff\1\60\1\105\1\60\1\111\1\40\2\uffff\1\60\1\124\1\uffff\1\60\2\116\1\105\1\123\1\40\1\107\1\uffff\1\114\1\116\2\uffff\1\101\1\103\1\uffff\1\60\1\uffff\1\117\1\uffff\1\117\2\uffff\1\123\1\uffff\1\105\1\60\1\130\1\60\1\uffff\1\60\1\105\1\123\1\122\1\113\1\uffff\1\106\1\116\1\60\1\123\1\104\1\uffff\1\60\2\uffff\2\60\1\105\1\123\1\60\1\40\1\uffff\1\60\1\40\3\uffff\1\123\1\60\4\uffff\1\60\2\uffff";
+        "\1\0\1\uffff\1\116\1\60\1\105\1\60\1\105\1\104\1\uffff\1\114\3\uffff\1\56\1\111\1\101\2\111\2\105\2\uffff\1\56\3\75\1\150\1\141\1\151\1\123\1\110\1\uffff\1\102\1\uffff\1\117\1\116\1\60\2\uffff\6\60\2\56\1\101\1\uffff\2\0\1\52\3\uffff\1\123\1\101\1\120\1\122\1\uffff\1\116\1\101\1\114\1\116\1\130\1\uffff\1\116\1\101\1\111\1\115\1\114\1\102\1\116\1\104\1\uffff\1\116\1\122\1\60\2\104\1\uffff\1\116\1\101\5\uffff\1\132\1\122\1\114\1\117\1\122\1\123\1\115\1\106\1\114\1\124\1\60\1\124\12\uffff\1\151\1\162\1\156\1\104\1\124\1\101\1\uffff\1\123\1\60\1\uffff\1\122\1\123\1\130\13\uffff\1\56\4\uffff\1\125\1\111\2\114\1\60\1\111\1\122\1\116\1\124\2\60\1\105\1\60\1\115\1\114\1\104\1\111\1\120\1\105\2\60\1\103\1\104\1\60\1\101\1\105\1\uffff\2\60\1\104\1\123\1\132\1\60\1\124\1\114\1\60\1\124\1\105\1\60\1\105\2\124\1\uffff\1\127\1\154\1\145\1\144\1\116\1\60\1\110\1\124\1\105\1\uffff\1\60\2\124\1\122\1\124\1\125\1\117\1\uffff\1\124\1\111\1\60\1\111\2\uffff\1\122\1\uffff\1\105\1\123\1\105\1\123\1\114\1\103\1\uffff\1\106\1\uffff\3\105\1\uffff\1\114\1\105\2\uffff\1\101\1\124\1\111\1\123\1\111\1\uffff\1\105\1\101\1\111\1\uffff\1\60\1\40\1\uffff\1\103\1\101\1\114\1\105\1\144\1\156\1\50\1\107\1\uffff\1\60\1\40\1\122\1\uffff\1\101\1\60\1\105\1\111\1\101\1\122\1\117\1\103\1\uffff\1\120\2\101\1\60\1\104\1\106\1\105\1\124\1\123\1\60\1\126\1\116\1\124\1\115\1\111\1\122\1\124\1\122\1\116\1\122\1\124\1\116\2\uffff\1\124\1\60\2\105\1\162\1\164\1\uffff\1\60\2\uffff\1\126\1\116\1\uffff\1\60\1\105\1\124\1\101\1\122\1\123\1\114\1\124\1\116\1\uffff\1\40\1\101\1\104\1\60\1\121\1\uffff\1\60\1\124\1\131\1\105\1\116\1\101\1\111\3\105\1\111\1\107\1\60\1\uffff\2\116\1\145\1\60\1\uffff\1\105\1\103\1\uffff\1\123\1\105\1\124\2\60\1\131\1\105\1\60\1\uffff\1\103\1\40\1\uffff\1\125\1\uffff\2\60\1\116\1\123\1\111\1\117\1\107\1\123\1\104\1\116\1\117\1\60\1\uffff\1\105\1\60\1\156\1\uffff\1\60\1\105\1\60\1\40\1\111\2\uffff\2\60\1\uffff\1\124\1\uffff\1\101\1\114\2\uffff\1\124\1\60\2\116\1\105\1\123\1\40\1\107\1\116\1\uffff\1\103\1\uffff\1\60\1\uffff\1\117\3\uffff\1\117\2\uffff\1\111\1\122\1\105\1\123\1\uffff\1\105\1\60\1\130\1\60\1\uffff\1\60\1\123\1\113\1\uffff\1\106\1\116\1\117\1\105\2\60\1\123\1\104\1\uffff\1\60\2\uffff\1\60\1\123\1\60\1\40\1\116\1\123\2\uffff\1\60\1\40\2\uffff\1\60\2\uffff\1\55\1\60\5\uffff";
     static final String DFA15_maxS =
-        "\1\uffff\1\uffff\1\130\1\172\1\123\1\uffff\1\125\1\117\3\uffff\1\56\1\125\1\105\3\111\1\117\1\172\1\131\2\uffff\1\56\3\75\1\150\1\141\1\151\1\123\1\111\1\uffff\1\122\1\uffff\1\117\1\116\1\172\2\uffff\6\172\1\56\1\71\1\172\1\uffff\2\uffff\1\57\3\uffff\1\124\1\120\1\101\1\122\1\uffff\1\116\1\124\1\114\1\116\1\130\1\uffff\1\122\1\172\2\104\1\uffff\1\101\1\124\1\111\1\116\1\101\5\uffff\1\132\1\122\1\114\1\122\1\117\1\122\1\123\1\115\1\106\1\124\1\114\2\115\1\116\1\104\1\uffff\1\124\1\172\1\124\12\uffff\1\151\1\162\1\156\1\111\1\124\1\101\1\uffff\1\123\1\172\1\uffff\1\122\1\123\1\130\13\uffff\1\71\4\uffff\1\125\1\111\2\114\1\172\1\111\1\122\1\116\1\124\2\172\1\105\1\uffff\2\172\1\114\1\172\1\115\1\104\1\124\1\123\1\132\1\172\1\124\1\101\1\172\1\114\1\172\1\124\1\105\1\172\1\105\1\124\1\105\1\120\2\172\1\103\1\104\1\124\1\uffff\1\127\1\154\1\145\1\144\1\116\1\172\1\110\1\124\1\105\1\uffff\1\172\2\124\1\122\1\124\1\117\1\125\1\uffff\1\124\1\111\1\172\1\111\2\uffff\1\105\2\uffff\1\123\1\uffff\2\105\1\101\1\124\1\111\1\123\1\111\1\uffff\1\105\1\114\1\105\1\uffff\1\101\1\111\1\uffff\1\172\1\40\1\uffff\1\103\1\101\1\103\1\114\1\uffff\1\106\1\uffff\2\105\1\114\1\105\1\144\1\156\1\50\1\107\1\uffff\1\172\1\40\1\122\1\uffff\1\101\1\172\1\105\1\111\1\122\1\101\1\117\1\103\1\uffff\1\120\1\115\1\172\1\101\1\104\1\111\1\122\1\124\1\122\1\116\1\122\1\124\1\116\1\124\1\116\2\uffff\1\124\1\172\1\124\1\105\1\123\1\172\1\126\2\105\1\162\1\164\1\uffff\1\172\2\uffff\1\126\1\116\1\uffff\1\172\1\105\1\101\1\124\1\122\1\123\1\114\1\105\1\uffff\1\116\1\40\1\116\1\101\1\111\2\105\1\111\1\131\1\124\1\111\1\107\1\172\1\uffff\1\172\1\104\1\121\1\uffff\1\172\2\116\1\145\1\172\1\uffff\1\105\1\103\1\uffff\1\123\1\124\1\105\2\172\1\131\1\116\1\172\1\uffff\1\123\1\111\1\117\1\107\1\123\1\104\1\116\1\172\1\111\1\117\1\172\2\uffff\1\40\1\125\1\uffff\1\105\1\172\1\156\1\uffff\1\172\1\105\1\172\1\111\1\40\2\uffff\1\172\1\124\1\uffff\1\172\2\116\1\105\1\123\1\40\1\107\1\uffff\1\114\1\116\2\uffff\1\101\1\103\1\uffff\1\172\1\uffff\1\117\1\uffff\1\117\2\uffff\1\123\1\uffff\1\124\1\172\1\130\1\172\1\uffff\1\172\1\105\1\123\1\122\1\113\1\uffff\1\106\1\116\1\172\1\123\1\104\1\uffff\1\172\2\uffff\2\172\1\105\1\123\1\172\1\40\1\uffff\1\172\1\40\3\uffff\1\123\1\172\4\uffff\1\172\2\uffff";
+        "\1\uffff\1\uffff\1\130\1\172\1\125\1\172\1\105\1\123\1\uffff\1\117\3\uffff\1\56\1\125\3\111\1\117\1\131\2\uffff\1\56\3\75\1\150\1\141\1\151\1\123\1\111\1\uffff\1\122\1\uffff\1\117\1\116\1\172\2\uffff\6\172\1\56\1\71\1\172\1\uffff\2\uffff\1\57\3\uffff\1\124\1\101\1\120\1\122\1\uffff\1\116\1\124\1\114\1\116\1\130\1\uffff\1\124\1\101\1\111\1\124\1\114\1\115\1\116\1\104\1\uffff\2\122\1\172\2\104\1\uffff\1\116\1\101\5\uffff\1\132\1\122\1\114\1\117\1\122\1\123\1\115\1\106\2\124\1\172\1\124\12\uffff\1\151\1\162\1\156\1\111\1\124\1\101\1\uffff\1\123\1\172\1\uffff\1\122\1\123\1\130\13\uffff\1\71\4\uffff\1\125\1\111\2\114\1\172\1\111\1\122\1\116\1\124\2\172\1\105\1\172\1\115\1\114\1\104\1\111\1\120\1\105\2\172\1\103\1\104\1\172\1\101\1\105\1\uffff\2\172\1\124\1\123\1\132\1\172\1\124\1\114\1\172\1\124\1\105\1\172\1\105\2\124\1\uffff\1\127\1\154\1\145\1\144\1\116\1\172\1\110\1\124\1\105\1\uffff\1\172\2\124\1\122\1\124\1\125\1\117\1\uffff\1\124\1\111\1\172\1\111\2\uffff\1\122\1\uffff\1\105\1\123\1\105\1\123\1\114\1\103\1\uffff\1\106\1\uffff\3\105\1\uffff\1\114\1\105\2\uffff\1\101\1\124\1\111\1\123\1\111\1\uffff\1\105\1\101\1\111\1\uffff\1\172\1\40\1\uffff\1\103\1\101\1\114\1\105\1\144\1\156\1\50\1\107\1\uffff\1\172\1\40\1\122\1\uffff\1\101\1\172\1\105\1\111\1\101\1\122\1\117\1\103\1\uffff\1\120\2\101\1\172\1\104\1\106\1\105\1\124\1\123\1\172\1\126\1\116\1\124\1\115\1\111\1\122\1\124\1\122\1\116\1\122\1\124\1\116\2\uffff\1\124\1\172\2\105\1\162\1\164\1\uffff\1\172\2\uffff\1\126\1\116\1\uffff\1\172\1\105\1\124\1\101\1\122\1\123\1\114\1\124\1\116\1\uffff\1\40\1\101\1\104\1\172\1\121\1\uffff\1\172\1\124\1\131\1\105\1\116\1\101\1\111\2\105\2\111\1\107\1\172\1\uffff\2\116\1\145\1\172\1\uffff\1\105\1\103\1\uffff\1\123\1\105\1\124\2\172\1\131\1\105\1\172\1\uffff\1\103\1\40\1\uffff\1\125\1\uffff\2\172\1\116\1\123\1\111\1\117\1\107\1\123\1\104\1\116\1\117\1\172\1\uffff\1\105\1\172\1\156\1\uffff\1\172\1\105\2\172\1\111\2\uffff\2\172\1\uffff\1\124\1\uffff\1\101\1\114\2\uffff\1\124\1\172\2\116\1\105\1\123\1\40\1\107\1\116\1\uffff\1\103\1\uffff\1\172\1\uffff\1\117\3\uffff\1\117\2\uffff\1\111\1\122\1\105\1\123\1\uffff\1\124\1\172\1\130\1\172\1\uffff\1\172\1\123\1\113\1\uffff\1\106\1\116\1\117\1\105\2\172\1\123\1\104\1\uffff\1\172\2\uffff\1\172\1\123\1\172\1\40\1\116\1\123\2\uffff\1\172\1\40\2\uffff\1\172\2\uffff\1\55\1\172\5\uffff";
     static final String DFA15_acceptS =
-        "\1\uffff\1\1\3\uffff\1\5\2\uffff\1\10\1\11\1\12\11\uffff\1\36\1\37\11\uffff\1\57\1\uffff\1\71\3\uffff\1\110\1\111\11\uffff\1\135\3\uffff\1\142\1\143\1\1\4\uffff\1\135\5\uffff\1\117\4\uffff\1\5\5\uffff\1\10\1\11\1\12\1\47\1\13\17\uffff\1\121\3\uffff\1\36\1\37\1\44\1\40\1\77\1\41\1\75\1\42\1\76\1\43\6\uffff\1\57\2\uffff\1\71\3\uffff\1\125\1\110\1\111\1\112\1\113\1\114\1\115\1\116\1\120\1\134\1\136\1\uffff\1\137\1\140\1\141\1\142\14\uffff\1\54\33\uffff\1\45\11\uffff\1\103\7\uffff\1\100\4\uffff\1\122\1\123\1\uffff\1\65\1\72\1\uffff\1\21\7\uffff\1\53\3\uffff\1\16\2\uffff\1\131\2\uffff\1\25\4\uffff\1\73\1\uffff\1\126\10\uffff\1\101\3\uffff\1\102\10\uffff\1\133\17\uffff\1\20\1\24\13\uffff\1\52\1\uffff\1\56\1\66\2\uffff\1\107\10\uffff\1\6\15\uffff\1\67\3\uffff\1\106\5\uffff\1\55\2\uffff\1\2\10\uffff\1\35\13\uffff\1\31\1\30\2\uffff\1\130\3\uffff\1\51\5\uffff\1\3\1\27\2\uffff\1\124\7\uffff\1\15\2\uffff\1\46\1\63\2\uffff\1\64\1\uffff\1\62\1\uffff\1\26\1\uffff\1\34\1\74\1\uffff\1\7\4\uffff\1\60\5\uffff\1\50\5\uffff\1\61\1\uffff\1\14\1\70\6\uffff\1\4\2\uffff\1\105\1\132\1\17\2\uffff\1\104\1\23\1\22\1\33\1\uffff\1\32\1\127";
+        "\1\uffff\1\1\6\uffff\1\11\1\uffff\1\14\1\15\1\16\7\uffff\1\42\1\43\11\uffff\1\63\1\uffff\1\75\3\uffff\1\114\1\115\11\uffff\1\141\3\uffff\1\146\1\147\1\1\4\uffff\1\141\5\uffff\1\123\10\uffff\1\125\5\uffff\1\11\2\uffff\1\14\1\15\1\16\1\53\1\17\14\uffff\1\42\1\43\1\50\1\44\1\103\1\45\1\101\1\46\1\102\1\47\6\uffff\1\63\2\uffff\1\75\3\uffff\1\131\1\114\1\115\1\116\1\117\1\120\1\121\1\122\1\124\1\140\1\142\1\uffff\1\143\1\144\1\145\1\146\32\uffff\1\60\17\uffff\1\51\11\uffff\1\107\7\uffff\1\104\4\uffff\1\126\1\127\1\uffff\1\25\6\uffff\1\77\1\uffff\1\132\3\uffff\1\22\2\uffff\1\71\1\76\5\uffff\1\57\3\uffff\1\135\2\uffff\1\31\10\uffff\1\105\3\uffff\1\106\10\uffff\1\137\26\uffff\1\24\1\30\6\uffff\1\56\1\uffff\1\62\1\72\2\uffff\1\113\11\uffff\1\12\5\uffff\1\112\15\uffff\1\73\4\uffff\1\61\2\uffff\1\2\10\uffff\1\41\2\uffff\1\34\1\uffff\1\134\14\uffff\1\35\3\uffff\1\55\5\uffff\1\3\1\33\2\uffff\1\130\1\uffff\1\67\2\uffff\1\7\1\21\11\uffff\1\52\1\uffff\1\70\1\uffff\1\66\1\uffff\1\32\1\40\1\4\1\uffff\1\100\1\5\4\uffff\1\13\4\uffff\1\64\3\uffff\1\54\10\uffff\1\65\1\uffff\1\20\1\74\6\uffff\1\136\1\10\2\uffff\1\111\1\23\1\uffff\1\110\1\27\2\uffff\1\26\1\37\1\36\1\6\1\133";
     static final String DFA15_specialS =
-        "\1\0\60\uffff\1\1\1\2\u017c\uffff}>";
+        "\1\1\60\uffff\1\0\1\2\u0190\uffff}>";
     static final String[] DFA15_transitionS = {
-            "\11\65\2\64\2\65\1\64\22\65\1\64\1\65\1\61\2\65\1\41\1\65\1\62\1\10\1\11\1\13\1\46\1\5\1\45\1\26\1\63\1\55\11\56\1\12\1\1\1\30\1\27\1\31\1\65\1\37\1\4\1\23\1\7\1\21\1\2\1\14\1\6\1\60\1\43\2\60\1\17\1\3\1\44\1\40\1\15\2\60\1\22\1\20\1\35\1\16\1\36\1\42\2\60\1\24\1\65\1\25\1\57\1\60\1\65\2\60\1\32\1\52\1\60\1\34\1\60\1\53\4\60\1\50\2\60\1\33\2\60\1\54\3\60\1\51\1\60\1\47\1\60\uff85\65",
+            "\11\65\2\64\2\65\1\64\22\65\1\64\1\65\1\61\2\65\1\41\1\65\1\62\1\12\1\13\1\15\1\46\1\10\1\45\1\26\1\63\1\55\11\56\1\14\1\1\1\30\1\27\1\31\1\65\1\37\1\7\1\23\1\11\1\22\1\2\1\16\1\4\1\60\1\43\2\60\1\20\1\3\1\44\1\40\1\6\2\60\1\5\1\21\1\35\1\17\1\36\1\42\2\60\1\24\1\65\1\25\1\57\1\60\1\65\2\60\1\32\1\52\1\60\1\34\1\60\1\53\4\60\1\50\2\60\1\33\2\60\1\54\3\60\1\51\1\60\1\47\1\60\uff85\65",
             "",
-            "\1\67\6\uffff\1\72\1\71\1\uffff\1\70",
+            "\1\67\6\uffff\1\72\1\70\1\uffff\1\71",
             "\12\73\7\uffff\1\100\3\73\1\75\3\73\1\77\5\73\1\74\5\73\1\76\5\73\4\uffff\1\73\1\uffff\32\73",
-            "\1\105\2\uffff\1\102\6\uffff\1\104\4\uffff\1\103",
+            "\1\102\11\uffff\1\103\5\uffff\1\104",
+            "\12\73\7\uffff\1\105\3\73\1\106\3\73\1\110\12\73\1\111\1\107\5\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\113",
+            "\1\117\2\uffff\1\114\6\uffff\1\116\4\uffff\1\115",
             "",
-            "\1\110\11\uffff\1\107\5\uffff\1\111",
-            "\1\113\2\uffff\1\112",
+            "\1\122\2\uffff\1\121",
             "",
             "",
             "",
-            "\1\117",
-            "\1\123\5\uffff\1\122\5\uffff\1\121",
-            "\1\124",
-            "\1\126\7\uffff\1\125",
-            "\1\127",
-            "\1\130",
-            "\1\132\11\uffff\1\131",
-            "\12\73\7\uffff\1\134\3\73\1\133\3\73\1\136\12\73\1\137\1\135\5\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\126",
+            "\1\132\5\uffff\1\131\5\uffff\1\130",
+            "\1\134\7\uffff\1\133",
+            "\1\135",
+            "\1\136",
+            "\1\140\11\uffff\1\137",
             "\1\143\11\uffff\1\141\11\uffff\1\142",
             "",
             "",
@@ -3403,40 +3519,40 @@ public class InternalDescartesQLLexer extends Lexer {
             "\1\u0094",
             "\1\u0095",
             "",
-            "\1\u0096",
-            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
-            "\1\u0098",
+            "\1\u0096\1\u0098\4\uffff\1\u0097",
             "\1\u0099",
-            "",
             "\1\u009a",
-            "\1\u009c\4\uffff\1\u009b",
+            "\1\u009c\6\uffff\1\u009b",
             "\1\u009d",
-            "\1\u009e",
-            "\1\u009f",
-            "",
-            "",
-            "",
-            "",
-            "",
+            "\1\u009e\12\uffff\1\u009f",
             "\1\u00a0",
             "\1\u00a1",
-            "\1\u00a2",
-            "\1\u00a3\3\uffff\1\u00a4",
-            "\1\u00a5",
+            "",
+            "\1\u00a3\3\uffff\1\u00a2",
+            "\1\u00a4",
+            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
             "\1\u00a6",
             "\1\u00a7",
+            "",
             "\1\u00a8",
             "\1\u00a9",
-            "\1\u00ab\7\uffff\1\u00aa",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\u00aa",
+            "\1\u00ab",
             "\1\u00ac",
             "\1\u00ad",
-            "\1\u00ae\12\uffff\1\u00af",
+            "\1\u00ae",
+            "\1\u00af",
             "\1\u00b0",
             "\1\u00b1",
-            "",
-            "\1\u00b2",
-            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u00b3\7\uffff\1\u00b2",
             "\1\u00b4",
+            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u00b6",
             "",
             "",
             "",
@@ -3447,19 +3563,19 @@ public class InternalDescartesQLLexer extends Lexer {
             "",
             "",
             "",
-            "\1\u00b5",
-            "\1\u00b6",
             "\1\u00b7",
-            "\1\u00b9\4\uffff\1\u00b8",
-            "\1\u00ba",
-            "\1\u00bb",
-            "",
+            "\1\u00b8",
+            "\1\u00b9",
+            "\1\u00bb\4\uffff\1\u00ba",
             "\1\u00bc",
-            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u00bd",
             "",
             "\1\u00be",
-            "\1\u00bf",
+            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "",
             "\1\u00c0",
+            "\1\u00c1",
+            "\1\u00c2",
             "",
             "",
             "",
@@ -3476,297 +3592,317 @@ public class InternalDescartesQLLexer extends Lexer {
             "",
             "",
             "",
-            "\1\u00c1",
-            "\1\u00c2",
             "\1\u00c3",
             "\1\u00c4",
-            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u00c5",
             "\1\u00c6",
-            "\1\u00c7",
+            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
             "\1\u00c8",
             "\1\u00c9",
+            "\1\u00ca",
+            "\1\u00cb",
             "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
             "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
-            "\1\u00cc",
-            "",
-            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
-            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
-            "\1\u00cf",
+            "\1\u00ce",
             "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u00d0",
             "\1\u00d1",
             "\1\u00d2",
-            "\1\u00d5\16\uffff\1\u00d4\1\u00d3",
-            "\1\u00d6",
-            "\1\u00d7",
+            "\1\u00d3",
+            "\1\u00d4",
+            "\1\u00d5",
             "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\12\73\7\uffff\16\73\1\u00d7\13\73\4\uffff\1\73\1\uffff\32\73",
             "\1\u00d9",
             "\1\u00da",
             "\12\73\7\uffff\2\73\1\u00db\27\73\4\uffff\1\73\1\uffff\32\73",
             "\1\u00dd",
-            "\12\73\7\uffff\30\73\1\u00de\1\73\4\uffff\1\73\1\uffff\32\73",
-            "\1\u00e0",
-            "\1\u00e1",
+            "\1\u00de",
+            "",
+            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
             "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
-            "\1\u00e3",
+            "\1\u00e3\16\uffff\1\u00e2\1\u00e1",
             "\1\u00e4",
             "\1\u00e5",
-            "\1\u00e6",
             "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
-            "\12\73\7\uffff\16\73\1\u00e8\13\73\4\uffff\1\73\1\uffff\32\73",
-            "\1\u00ea",
+            "\1\u00e7",
+            "\1\u00e8",
+            "\12\73\7\uffff\30\73\1\u00e9\1\73\4\uffff\1\73\1\uffff\32\73",
             "\1\u00eb",
             "\1\u00ec",
-            "",
-            "\1\u00ed",
+            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
             "\1\u00ee",
             "\1\u00ef",
             "\1\u00f0",
+            "",
             "\1\u00f1",
-            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u00f2",
             "\1\u00f3",
             "\1\u00f4",
             "\1\u00f5",
-            "",
             "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
             "\1\u00f7",
             "\1\u00f8",
             "\1\u00f9",
-            "\1\u00fa",
+            "",
+            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
             "\1\u00fb",
             "\1\u00fc",
-            "",
             "\1\u00fd",
             "\1\u00fe",
-            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u00ff",
             "\1\u0100",
             "",
-            "",
             "\1\u0101",
-            "",
-            "",
             "\1\u0102",
-            "",
-            "\1\u0103",
+            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
             "\1\u0104",
+            "",
+            "",
             "\1\u0105",
+            "",
             "\1\u0106",
             "\1\u0107",
             "\1\u0108",
             "\1\u0109",
-            "",
             "\1\u010a",
             "\1\u010b",
+            "",
             "\1\u010c",
             "",
             "\1\u010d",
             "\1\u010e",
+            "\1\u010f",
             "",
-            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
             "\1\u0110",
-            "",
             "\1\u0111",
+            "",
+            "",
             "\1\u0112",
             "\1\u0113",
             "\1\u0114",
-            "",
             "\1\u0115",
-            "",
             "\1\u0116",
+            "",
             "\1\u0117",
             "\1\u0118",
             "\1\u0119",
-            "\1\u011a",
+            "",
+            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
             "\1\u011b",
+            "",
             "\1\u011c",
             "\1\u011d",
-            "",
-            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u011e",
             "\1\u011f",
             "\1\u0120",
-            "",
             "\1\u0121",
-            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u0122",
             "\1\u0123",
-            "\1\u0124",
+            "",
+            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
             "\1\u0125",
             "\1\u0126",
-            "\1\u0127",
-            "\1\u0128",
             "",
+            "\1\u0127",
+            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
             "\1\u0129",
             "\1\u012a",
-            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u012b",
             "\1\u012c",
             "\1\u012d",
             "\1\u012e",
+            "",
             "\1\u012f",
             "\1\u0130",
             "\1\u0131",
-            "\1\u0132",
+            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
             "\1\u0133",
             "\1\u0134",
             "\1\u0135",
             "\1\u0136",
             "\1\u0137",
-            "",
-            "",
-            "\1\u0138",
             "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u0139",
             "\1\u013a",
             "\1\u013b",
             "\1\u013c",
-            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u013d",
             "\1\u013e",
             "\1\u013f",
             "\1\u0140",
             "\1\u0141",
             "\1\u0142",
-            "",
-            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u0143",
+            "\1\u0144",
             "",
             "",
-            "\1\u0144",
             "\1\u0145",
-            "",
             "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
             "\1\u0147",
             "\1\u0148",
             "\1\u0149",
             "\1\u014a",
-            "\1\u014b",
+            "",
+            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "",
+            "",
             "\1\u014c",
             "\1\u014d",
             "",
-            "\1\u014e",
+            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
             "\1\u014f",
             "\1\u0150",
             "\1\u0151",
             "\1\u0152",
             "\1\u0153",
             "\1\u0154",
-            "\1\u0155\3\uffff\1\u0156",
+            "\1\u0155",
+            "\1\u0156",
+            "",
             "\1\u0157",
             "\1\u0158",
             "\1\u0159",
-            "\1\u015a",
             "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u015b",
             "",
             "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
             "\1\u015d",
             "\1\u015e",
-            "",
-            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u015f",
             "\1\u0160",
             "\1\u0161",
             "\1\u0162",
-            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
-            "",
+            "\1\u0163",
             "\1\u0164",
-            "\1\u0165",
-            "",
-            "\1\u0166",
+            "\1\u0165\3\uffff\1\u0166",
             "\1\u0167",
             "\1\u0168",
             "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
-            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "",
+            "\1\u016a",
             "\1\u016b",
             "\1\u016c",
             "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
             "",
             "\1\u016e",
             "\1\u016f",
+            "",
             "\1\u0170",
             "\1\u0171",
             "\1\u0172",
-            "\1\u0173",
-            "\1\u0174",
             "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u0175",
             "\1\u0176",
-            "\1\u0177",
             "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
             "",
-            "",
+            "\1\u0178",
             "\1\u0179",
-            "\1\u017a",
             "",
-            "\1\u017b",
-            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
-            "\1\u017d",
+            "\1\u017a",
             "",
+            "\12\73\7\uffff\10\73\1\u017b\21\73\4\uffff\1\73\1\uffff\32\73",
             "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u017e",
             "\1\u017f",
-            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u0180",
             "\1\u0181",
             "\1\u0182",
-            "",
-            "",
-            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u0183",
             "\1\u0184",
-            "",
-            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u0185",
             "\1\u0186",
-            "\1\u0187",
+            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "",
             "\1\u0188",
-            "\1\u0189",
+            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
             "\1\u018a",
-            "\1\u018b",
             "",
+            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
             "\1\u018c",
-            "\1\u018d",
-            "",
-            "",
-            "\1\u018e",
-            "\1\u018f",
-            "",
             "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u018e\17\uffff\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u0190",
             "",
-            "\1\u0191",
-            "",
-            "\1\u0192",
             "",
+            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
             "",
             "\1\u0193",
             "",
-            "\1\u0195\16\uffff\1\u0194",
-            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
-            "\1\u0197",
-            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u0194",
+            "\1\u0195",
             "",
+            "",
+            "\1\u0196",
             "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u0198",
+            "\1\u0199",
             "\1\u019a",
             "\1\u019b",
             "\1\u019c",
             "\1\u019d",
-            "",
             "\1\u019e",
+            "",
             "\1\u019f",
+            "",
             "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "",
             "\1\u01a1",
+            "",
+            "",
+            "",
             "\1\u01a2",
             "",
-            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
             "",
+            "\1\u01a3",
+            "\1\u01a4",
+            "\1\u01a5",
+            "\1\u01a6",
             "",
+            "\1\u01a8\16\uffff\1\u01a7",
             "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u01aa",
             "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
-            "\1\u01a6",
-            "\1\u01a7",
+            "",
+            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u01ad",
+            "\1\u01ae",
+            "",
+            "\1\u01af",
+            "\1\u01b0",
+            "\1\u01b1",
+            "\1\u01b2",
             "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
-            "\1\u01a9",
+            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u01b5",
+            "\1\u01b6",
             "",
             "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
-            "\1\u01ab",
             "",
             "",
+            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u01b9",
+            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u01bb",
+            "\1\u01bc",
+            "\1\u01bd",
+            "",
             "",
-            "\1\u01ac",
             "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
+            "\1\u01bf",
             "",
             "",
+            "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
             "",
             "",
+            "\1\u01c1",
             "\12\73\7\uffff\32\73\4\uffff\1\73\1\uffff\32\73",
             "",
+            "",
+            "",
+            "",
             ""
     };
 
@@ -3800,13 +3936,23 @@ public class InternalDescartesQLLexer extends Lexer {
             this.transition = DFA15_transition;
         }
         public String getDescription() {
-            return "1:1: Tokens : ( T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | T__35 | T__36 | T__37 | T__38 | T__39 | T__40 | T__41 | T__42 | T__43 | T__44 | T__45 | T__46 | T__47 | T__48 | T__49 | T__50 | T__51 | T__52 | T__53 | T__54 | T__55 | T__56 | T__57 | T__58 | T__59 | T__60 | T__61 | T__62 | T__63 | T__64 | T__65 | T__66 | T__67 | T__68 | T__69 | T__70 | T__71 | T__72 | T__73 | T__74 | T__75 | T__76 | T__77 | T__78 | T__79 | T__80 | T__81 | T__82 | T__83 | T__84 | T__85 | T__86 | T__87 | T__88 | T__89 | T__90 | T__91 | T__92 | T__93 | T__94 | T__95 | T__96 | T__97 | T__98 | T__99 | T__100 | T__101 | T__102 | RULE_DOUBLE | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );";
+            return "1:1: Tokens : ( T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | T__35 | T__36 | T__37 | T__38 | T__39 | T__40 | T__41 | T__42 | T__43 | T__44 | T__45 | T__46 | T__47 | T__48 | T__49 | T__50 | T__51 | T__52 | T__53 | T__54 | T__55 | T__56 | T__57 | T__58 | T__59 | T__60 | T__61 | T__62 | T__63 | T__64 | T__65 | T__66 | T__67 | T__68 | T__69 | T__70 | T__71 | T__72 | T__73 | T__74 | T__75 | T__76 | T__77 | T__78 | T__79 | T__80 | T__81 | T__82 | T__83 | T__84 | T__85 | T__86 | T__87 | T__88 | T__89 | T__90 | T__91 | T__92 | T__93 | T__94 | T__95 | T__96 | T__97 | T__98 | T__99 | T__100 | T__101 | T__102 | T__103 | T__104 | T__105 | T__106 | RULE_DOUBLE | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );";
         }
         public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
             IntStream input = _input;
         	int _s = s;
             switch ( s ) {
                     case 0 : 
+                        int LA15_49 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA15_49>='\u0000' && LA15_49<='\uFFFF')) ) {s = 135;}
+
+                        else s = 53;
+
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
                         int LA15_0 = input.LA(1);
 
                         s = -1;
@@ -3816,35 +3962,35 @@ public class InternalDescartesQLLexer extends Lexer {
 
                         else if ( (LA15_0=='M') ) {s = 3;}
 
-                        else if ( (LA15_0=='A') ) {s = 4;}
+                        else if ( (LA15_0=='G') ) {s = 4;}
 
-                        else if ( (LA15_0==',') ) {s = 5;}
+                        else if ( (LA15_0=='S') ) {s = 5;}
 
-                        else if ( (LA15_0=='G') ) {s = 6;}
+                        else if ( (LA15_0=='P') ) {s = 6;}
 
-                        else if ( (LA15_0=='C') ) {s = 7;}
+                        else if ( (LA15_0=='A') ) {s = 7;}
 
-                        else if ( (LA15_0=='(') ) {s = 8;}
+                        else if ( (LA15_0==',') ) {s = 8;}
 
-                        else if ( (LA15_0==')') ) {s = 9;}
+                        else if ( (LA15_0=='C') ) {s = 9;}
 
-                        else if ( (LA15_0==':') ) {s = 10;}
+                        else if ( (LA15_0=='(') ) {s = 10;}
 
-                        else if ( (LA15_0=='*') ) {s = 11;}
+                        else if ( (LA15_0==')') ) {s = 11;}
 
-                        else if ( (LA15_0=='F') ) {s = 12;}
+                        else if ( (LA15_0==':') ) {s = 12;}
 
-                        else if ( (LA15_0=='P') ) {s = 13;}
+                        else if ( (LA15_0=='*') ) {s = 13;}
 
-                        else if ( (LA15_0=='V') ) {s = 14;}
+                        else if ( (LA15_0=='F') ) {s = 14;}
 
-                        else if ( (LA15_0=='L') ) {s = 15;}
+                        else if ( (LA15_0=='V') ) {s = 15;}
 
-                        else if ( (LA15_0=='T') ) {s = 16;}
+                        else if ( (LA15_0=='L') ) {s = 16;}
 
-                        else if ( (LA15_0=='D') ) {s = 17;}
+                        else if ( (LA15_0=='T') ) {s = 17;}
 
-                        else if ( (LA15_0=='S') ) {s = 18;}
+                        else if ( (LA15_0=='D') ) {s = 18;}
 
                         else if ( (LA15_0=='B') ) {s = 19;}
 
@@ -3916,16 +4062,6 @@ public class InternalDescartesQLLexer extends Lexer {
 
                         else if ( ((LA15_0>='\u0000' && LA15_0<='\b')||(LA15_0>='\u000B' && LA15_0<='\f')||(LA15_0>='\u000E' && LA15_0<='\u001F')||LA15_0=='!'||(LA15_0>='#' && LA15_0<='$')||LA15_0=='&'||LA15_0=='?'||LA15_0=='\\'||LA15_0=='`'||(LA15_0>='{' && LA15_0<='\uFFFF')) ) {s = 53;}
 
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA15_49 = input.LA(1);
-
-                        s = -1;
-                        if ( ((LA15_49>='\u0000' && LA15_49<='\uFFFF')) ) {s = 135;}
-
-                        else s = 53;
-
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
diff --git a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/parser/antlr/internal/InternalDescartesQLParser.java b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/parser/antlr/internal/InternalDescartesQLParser.java
index 5dbb5c87..44043dde 100644
--- a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/parser/antlr/internal/InternalDescartesQLParser.java
+++ b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/parser/antlr/internal/InternalDescartesQLParser.java
@@ -48,7 +48,7 @@ import java.util.ArrayList;
 @SuppressWarnings("all")
 public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
     public static final String[] tokenNames = new String[] {
-        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_INT", "RULE_DOUBLE", "RULE_STRING", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "';'", "'ENSURE'", "'MONITOR'", "'AGREEMENTS'", "','", "'GOALS'", "'CONTAINS'", "'('", "')'", "':'", "'*'", "'FUZZINESS'", "'PENALTY'", "'PER'", "'VIOLATIONS'", "'LIST'", "'GET'", "'CONSTRAINTS'", "'EXPLORATION STRATEGIES'", "'TIME UNITS'", "'DOF'", "'ENTITIES'", "'METRICS'", "'SELECT'", "'DETECT'", "'BOTTLENECKS'", "'CONSTRAINED AS'", "'EVALUATE DOF'", "'GUIDED BY'", "'['", "']'", "'.'", "'='", "'<'", "'>'", "'..'", "'BY'", "'VARYING'", "'*.'", "'children'", "'parent'", "'find('", "'FOR'", "'AS'", "'USING'", "'WITH'", "'@'", "'FILTERED BY'", "'CONDITION'", "'OBSERVE'", "'SAMPLED BY'", "'BETWEEN'", "'AND'", "'WHAT IF'", "'DELTA'", "'FILTERING'", "'%'", "'ADD'", "'SUB'", "'MULTIPLY'", "'<='", "'>='", "'=='", "'EUR'", "'USD'", "'XOR'", "'OR'", "'INSTANCEOF'", "'CLASSREGEX'", "'SINCE'", "'NEXT'", "'-'", "'+'", "'y'", "'m'", "'w'", "'d'", "'h'", "'M'", "'s'", "'S'", "'MIN'", "'MAX'", "'GEOMEAN'", "'N'", "'SUM'", "'SUMOFSQUARES'", "'STDDEV'", "'VAR'", "'PERCENTILE'", "'MEAN'"
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_DOUBLE", "RULE_ID", "RULE_INT", "RULE_STRING", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "';'", "'ENSURE'", "'MONITOR'", "'EVALUATE'", "'GENERATE'", "'SATISFACTION-LEVEL'", "'PERCENT'", "'AGREEMENTS'", "','", "'GOALS'", "'CONTAINS'", "'('", "')'", "':'", "'*'", "'FUZZINESS'", "'PENALTY'", "'PER'", "'VIOLATIONS'", "'LIST'", "'GET'", "'CONSTRAINTS'", "'EXPLORATION STRATEGIES'", "'TIME UNITS'", "'DOF'", "'ENTITIES'", "'METRICS'", "'SELECT'", "'DETECT'", "'BOTTLENECKS'", "'CONSTRAINED AS'", "'EVALUATE DOF'", "'GUIDED BY'", "'['", "']'", "'.'", "'='", "'<'", "'>'", "'..'", "'BY'", "'VARYING'", "'*.'", "'children'", "'parent'", "'find('", "'FOR'", "'AS'", "'USING'", "'WITH'", "'@'", "'FILTERED BY'", "'CONDITION'", "'OBSERVE'", "'SAMPLED BY'", "'BETWEEN'", "'AND'", "'WHAT IF'", "'DELTA'", "'FILTERING'", "'%'", "'ADD'", "'SUB'", "'MULTIPLY'", "'<='", "'>='", "'=='", "'EUR'", "'USD'", "'XOR'", "'OR'", "'INSTANCEOF'", "'CLASSREGEX'", "'SINCE'", "'NEXT'", "'-'", "'+'", "'y'", "'m'", "'w'", "'d'", "'h'", "'M'", "'s'", "'S'", "'MIN'", "'MAX'", "'GEOMEAN'", "'N'", "'SUM'", "'SUMOFSQUARES'", "'STDDEV'", "'VAR'", "'PERCENTILE'", "'MEAN'"
     };
     public static final int T__50=50;
     public static final int T__59=59;
@@ -62,8 +62,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
     public static final int T__54=54;
     public static final int T__60=60;
     public static final int T__61=61;
-    public static final int RULE_ID=4;
-    public static final int RULE_INT=5;
+    public static final int RULE_ID=5;
+    public static final int RULE_INT=6;
     public static final int T__66=66;
     public static final int RULE_ML_COMMENT=8;
     public static final int T__67=67;
@@ -129,7 +129,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
     public static final int T__72=72;
     public static final int RULE_STRING=7;
     public static final int RULE_SL_COMMENT=9;
-    public static final int RULE_DOUBLE=6;
+    public static final int RULE_DOUBLE=4;
     public static final int T__77=77;
     public static final int T__78=78;
     public static final int T__79=79;
@@ -147,9 +147,13 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
     public static final int T__88=88;
     public static final int T__89=89;
     public static final int T__84=84;
+    public static final int T__104=104;
     public static final int T__85=85;
+    public static final int T__103=103;
     public static final int T__86=86;
+    public static final int T__106=106;
     public static final int T__87=87;
+    public static final int T__105=105;
 
     // delegates
     // delegators
@@ -226,7 +230,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleDescartesQL"
-    // InternalDescartesQL.g:100:1: ruleDescartesQL returns [EObject current=null] : ( ( ( (lv_query_0_1= ruleModelStructureQuery | lv_query_0_2= rulePerformanceMetricsQuery | lv_query_0_3= rulePerformanceIssueQuery | lv_query_0_4= ruleConnectorCapabilityQuery | lv_query_0_5= ruleWhatIfQuery | lv_query_0_6= ruleGoal ) ) ) otherlv_1= ';' ) ;
+    // InternalDescartesQL.g:100:1: ruleDescartesQL returns [EObject current=null] : ( ( ( (lv_query_0_1= ruleModelStructureQuery | lv_query_0_2= rulePerformanceMetricsQuery | lv_query_0_3= rulePerformanceIssueQuery | lv_query_0_4= ruleConnectorCapabilityQuery | lv_query_0_5= ruleWhatIfQuery | lv_query_0_6= ruleGoal | lv_query_0_7= ruleGenerateSLAConcern ) ) ) otherlv_1= ';' ) ;
     public final EObject ruleDescartesQL() throws RecognitionException {
         EObject current = null;
 
@@ -243,56 +247,64 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
         EObject lv_query_0_6 = null;
 
+        EObject lv_query_0_7 = null;
+
 
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:103:28: ( ( ( ( (lv_query_0_1= ruleModelStructureQuery | lv_query_0_2= rulePerformanceMetricsQuery | lv_query_0_3= rulePerformanceIssueQuery | lv_query_0_4= ruleConnectorCapabilityQuery | lv_query_0_5= ruleWhatIfQuery | lv_query_0_6= ruleGoal ) ) ) otherlv_1= ';' ) )
-            // InternalDescartesQL.g:104:1: ( ( ( (lv_query_0_1= ruleModelStructureQuery | lv_query_0_2= rulePerformanceMetricsQuery | lv_query_0_3= rulePerformanceIssueQuery | lv_query_0_4= ruleConnectorCapabilityQuery | lv_query_0_5= ruleWhatIfQuery | lv_query_0_6= ruleGoal ) ) ) otherlv_1= ';' )
+            // InternalDescartesQL.g:103:28: ( ( ( ( (lv_query_0_1= ruleModelStructureQuery | lv_query_0_2= rulePerformanceMetricsQuery | lv_query_0_3= rulePerformanceIssueQuery | lv_query_0_4= ruleConnectorCapabilityQuery | lv_query_0_5= ruleWhatIfQuery | lv_query_0_6= ruleGoal | lv_query_0_7= ruleGenerateSLAConcern ) ) ) otherlv_1= ';' ) )
+            // InternalDescartesQL.g:104:1: ( ( ( (lv_query_0_1= ruleModelStructureQuery | lv_query_0_2= rulePerformanceMetricsQuery | lv_query_0_3= rulePerformanceIssueQuery | lv_query_0_4= ruleConnectorCapabilityQuery | lv_query_0_5= ruleWhatIfQuery | lv_query_0_6= ruleGoal | lv_query_0_7= ruleGenerateSLAConcern ) ) ) otherlv_1= ';' )
             {
-            // InternalDescartesQL.g:104:1: ( ( ( (lv_query_0_1= ruleModelStructureQuery | lv_query_0_2= rulePerformanceMetricsQuery | lv_query_0_3= rulePerformanceIssueQuery | lv_query_0_4= ruleConnectorCapabilityQuery | lv_query_0_5= ruleWhatIfQuery | lv_query_0_6= ruleGoal ) ) ) otherlv_1= ';' )
-            // InternalDescartesQL.g:104:2: ( ( (lv_query_0_1= ruleModelStructureQuery | lv_query_0_2= rulePerformanceMetricsQuery | lv_query_0_3= rulePerformanceIssueQuery | lv_query_0_4= ruleConnectorCapabilityQuery | lv_query_0_5= ruleWhatIfQuery | lv_query_0_6= ruleGoal ) ) ) otherlv_1= ';'
+            // InternalDescartesQL.g:104:1: ( ( ( (lv_query_0_1= ruleModelStructureQuery | lv_query_0_2= rulePerformanceMetricsQuery | lv_query_0_3= rulePerformanceIssueQuery | lv_query_0_4= ruleConnectorCapabilityQuery | lv_query_0_5= ruleWhatIfQuery | lv_query_0_6= ruleGoal | lv_query_0_7= ruleGenerateSLAConcern ) ) ) otherlv_1= ';' )
+            // InternalDescartesQL.g:104:2: ( ( (lv_query_0_1= ruleModelStructureQuery | lv_query_0_2= rulePerformanceMetricsQuery | lv_query_0_3= rulePerformanceIssueQuery | lv_query_0_4= ruleConnectorCapabilityQuery | lv_query_0_5= ruleWhatIfQuery | lv_query_0_6= ruleGoal | lv_query_0_7= ruleGenerateSLAConcern ) ) ) otherlv_1= ';'
             {
-            // InternalDescartesQL.g:104:2: ( ( (lv_query_0_1= ruleModelStructureQuery | lv_query_0_2= rulePerformanceMetricsQuery | lv_query_0_3= rulePerformanceIssueQuery | lv_query_0_4= ruleConnectorCapabilityQuery | lv_query_0_5= ruleWhatIfQuery | lv_query_0_6= ruleGoal ) ) )
-            // InternalDescartesQL.g:105:1: ( (lv_query_0_1= ruleModelStructureQuery | lv_query_0_2= rulePerformanceMetricsQuery | lv_query_0_3= rulePerformanceIssueQuery | lv_query_0_4= ruleConnectorCapabilityQuery | lv_query_0_5= ruleWhatIfQuery | lv_query_0_6= ruleGoal ) )
+            // InternalDescartesQL.g:104:2: ( ( (lv_query_0_1= ruleModelStructureQuery | lv_query_0_2= rulePerformanceMetricsQuery | lv_query_0_3= rulePerformanceIssueQuery | lv_query_0_4= ruleConnectorCapabilityQuery | lv_query_0_5= ruleWhatIfQuery | lv_query_0_6= ruleGoal | lv_query_0_7= ruleGenerateSLAConcern ) ) )
+            // InternalDescartesQL.g:105:1: ( (lv_query_0_1= ruleModelStructureQuery | lv_query_0_2= rulePerformanceMetricsQuery | lv_query_0_3= rulePerformanceIssueQuery | lv_query_0_4= ruleConnectorCapabilityQuery | lv_query_0_5= ruleWhatIfQuery | lv_query_0_6= ruleGoal | lv_query_0_7= ruleGenerateSLAConcern ) )
             {
-            // InternalDescartesQL.g:105:1: ( (lv_query_0_1= ruleModelStructureQuery | lv_query_0_2= rulePerformanceMetricsQuery | lv_query_0_3= rulePerformanceIssueQuery | lv_query_0_4= ruleConnectorCapabilityQuery | lv_query_0_5= ruleWhatIfQuery | lv_query_0_6= ruleGoal ) )
-            // InternalDescartesQL.g:106:1: (lv_query_0_1= ruleModelStructureQuery | lv_query_0_2= rulePerformanceMetricsQuery | lv_query_0_3= rulePerformanceIssueQuery | lv_query_0_4= ruleConnectorCapabilityQuery | lv_query_0_5= ruleWhatIfQuery | lv_query_0_6= ruleGoal )
+            // InternalDescartesQL.g:105:1: ( (lv_query_0_1= ruleModelStructureQuery | lv_query_0_2= rulePerformanceMetricsQuery | lv_query_0_3= rulePerformanceIssueQuery | lv_query_0_4= ruleConnectorCapabilityQuery | lv_query_0_5= ruleWhatIfQuery | lv_query_0_6= ruleGoal | lv_query_0_7= ruleGenerateSLAConcern ) )
+            // InternalDescartesQL.g:106:1: (lv_query_0_1= ruleModelStructureQuery | lv_query_0_2= rulePerformanceMetricsQuery | lv_query_0_3= rulePerformanceIssueQuery | lv_query_0_4= ruleConnectorCapabilityQuery | lv_query_0_5= ruleWhatIfQuery | lv_query_0_6= ruleGoal | lv_query_0_7= ruleGenerateSLAConcern )
             {
-            // InternalDescartesQL.g:106:1: (lv_query_0_1= ruleModelStructureQuery | lv_query_0_2= rulePerformanceMetricsQuery | lv_query_0_3= rulePerformanceIssueQuery | lv_query_0_4= ruleConnectorCapabilityQuery | lv_query_0_5= ruleWhatIfQuery | lv_query_0_6= ruleGoal )
-            int alt1=6;
+            // InternalDescartesQL.g:106:1: (lv_query_0_1= ruleModelStructureQuery | lv_query_0_2= rulePerformanceMetricsQuery | lv_query_0_3= rulePerformanceIssueQuery | lv_query_0_4= ruleConnectorCapabilityQuery | lv_query_0_5= ruleWhatIfQuery | lv_query_0_6= ruleGoal | lv_query_0_7= ruleGenerateSLAConcern )
+            int alt1=7;
             switch ( input.LA(1) ) {
-            case 27:
+            case 31:
                 {
                 alt1=1;
                 }
                 break;
-            case 35:
+            case 39:
                 {
                 alt1=2;
                 }
                 break;
-            case 36:
+            case 40:
                 {
                 alt1=3;
                 }
                 break;
-            case 28:
+            case 32:
                 {
                 alt1=4;
                 }
                 break;
-            case 65:
+            case 69:
                 {
                 alt1=5;
                 }
                 break;
             case 13:
             case 14:
+            case 15:
                 {
                 alt1=6;
                 }
                 break;
+            case 16:
+                {
+                alt1=7;
+                }
+                break;
             default:
                 NoViableAltException nvae =
                     new NoViableAltException("", 1, 0, input);
@@ -449,6 +461,31 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     	        afterParserOrEnumRuleCall();
                     	    
 
+                    }
+                    break;
+                case 7 :
+                    // InternalDescartesQL.g:197:8: lv_query_0_7= ruleGenerateSLAConcern
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getDescartesQLAccess().getQueryGenerateSLAConcernParserRuleCall_0_0_6()); 
+                    	    
+                    pushFollow(FOLLOW_3);
+                    lv_query_0_7=ruleGenerateSLAConcern();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getDescartesQLRule());
+                    	        }
+                           		set(
+                           			current, 
+                           			"query",
+                            		lv_query_0_7, 
+                            		"tools.descartes.dql.lang.DescartesQL.GenerateSLAConcern");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
                     }
                     break;
 
@@ -485,7 +522,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleGoal"
-    // InternalDescartesQL.g:212:1: entryRuleGoal returns [EObject current=null] : iv_ruleGoal= ruleGoal EOF ;
+    // InternalDescartesQL.g:227:1: entryRuleGoal returns [EObject current=null] : iv_ruleGoal= ruleGoal EOF ;
     public final EObject entryRuleGoal() throws RecognitionException {
         EObject current = null;
 
@@ -493,8 +530,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:213:2: (iv_ruleGoal= ruleGoal EOF )
-            // InternalDescartesQL.g:214:2: iv_ruleGoal= ruleGoal EOF
+            // InternalDescartesQL.g:228:2: (iv_ruleGoal= ruleGoal EOF )
+            // InternalDescartesQL.g:229:2: iv_ruleGoal= ruleGoal EOF
             {
              newCompositeNode(grammarAccess.getGoalRule()); 
             pushFollow(FOLLOW_1);
@@ -521,12 +558,13 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleGoal"
-    // InternalDescartesQL.g:221:1: ruleGoal returns [EObject current=null] : ( ( ( (lv_queryType_0_1= 'ENSURE' | lv_queryType_0_2= 'MONITOR' ) ) ) ( (lv_slaQuery_1_0= ruleSlaQuery ) ) ( (lv_sloQuery_2_0= ruleSloQuery ) ) ( (lv_constraintClause_3_0= ruleConstraintClause ) )? ( (lv_dofClause_4_0= ruleDoFClause ) )? ( (lv_forClause_5_0= ruleForClause ) )? ( (lv_usingClause_6_0= ruleUsingClause ) ) ) ;
+    // InternalDescartesQL.g:236:1: ruleGoal returns [EObject current=null] : ( ( ( (lv_queryType_0_1= 'ENSURE' | lv_queryType_0_2= 'MONITOR' | lv_queryType_0_3= 'EVALUATE' ) ) ) ( (lv_slaQuery_1_0= ruleSlaQuery ) ) ( (lv_sloQuery_2_0= ruleSloQuery ) ) ( (lv_constraintClause_3_0= ruleConstraintClause ) )? ( (lv_dofClause_4_0= ruleDoFClause ) )? ( (lv_forClause_5_0= ruleForClause ) )? ( (lv_usingClause_6_0= ruleUsingClause ) ) ) ;
     public final EObject ruleGoal() throws RecognitionException {
         EObject current = null;
 
         Token lv_queryType_0_1=null;
         Token lv_queryType_0_2=null;
+        Token lv_queryType_0_3=null;
         EObject lv_slaQuery_1_0 = null;
 
         EObject lv_sloQuery_2_0 = null;
@@ -543,37 +581,46 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:224:28: ( ( ( ( (lv_queryType_0_1= 'ENSURE' | lv_queryType_0_2= 'MONITOR' ) ) ) ( (lv_slaQuery_1_0= ruleSlaQuery ) ) ( (lv_sloQuery_2_0= ruleSloQuery ) ) ( (lv_constraintClause_3_0= ruleConstraintClause ) )? ( (lv_dofClause_4_0= ruleDoFClause ) )? ( (lv_forClause_5_0= ruleForClause ) )? ( (lv_usingClause_6_0= ruleUsingClause ) ) ) )
-            // InternalDescartesQL.g:225:1: ( ( ( (lv_queryType_0_1= 'ENSURE' | lv_queryType_0_2= 'MONITOR' ) ) ) ( (lv_slaQuery_1_0= ruleSlaQuery ) ) ( (lv_sloQuery_2_0= ruleSloQuery ) ) ( (lv_constraintClause_3_0= ruleConstraintClause ) )? ( (lv_dofClause_4_0= ruleDoFClause ) )? ( (lv_forClause_5_0= ruleForClause ) )? ( (lv_usingClause_6_0= ruleUsingClause ) ) )
+            // InternalDescartesQL.g:239:28: ( ( ( ( (lv_queryType_0_1= 'ENSURE' | lv_queryType_0_2= 'MONITOR' | lv_queryType_0_3= 'EVALUATE' ) ) ) ( (lv_slaQuery_1_0= ruleSlaQuery ) ) ( (lv_sloQuery_2_0= ruleSloQuery ) ) ( (lv_constraintClause_3_0= ruleConstraintClause ) )? ( (lv_dofClause_4_0= ruleDoFClause ) )? ( (lv_forClause_5_0= ruleForClause ) )? ( (lv_usingClause_6_0= ruleUsingClause ) ) ) )
+            // InternalDescartesQL.g:240:1: ( ( ( (lv_queryType_0_1= 'ENSURE' | lv_queryType_0_2= 'MONITOR' | lv_queryType_0_3= 'EVALUATE' ) ) ) ( (lv_slaQuery_1_0= ruleSlaQuery ) ) ( (lv_sloQuery_2_0= ruleSloQuery ) ) ( (lv_constraintClause_3_0= ruleConstraintClause ) )? ( (lv_dofClause_4_0= ruleDoFClause ) )? ( (lv_forClause_5_0= ruleForClause ) )? ( (lv_usingClause_6_0= ruleUsingClause ) ) )
             {
-            // InternalDescartesQL.g:225:1: ( ( ( (lv_queryType_0_1= 'ENSURE' | lv_queryType_0_2= 'MONITOR' ) ) ) ( (lv_slaQuery_1_0= ruleSlaQuery ) ) ( (lv_sloQuery_2_0= ruleSloQuery ) ) ( (lv_constraintClause_3_0= ruleConstraintClause ) )? ( (lv_dofClause_4_0= ruleDoFClause ) )? ( (lv_forClause_5_0= ruleForClause ) )? ( (lv_usingClause_6_0= ruleUsingClause ) ) )
-            // InternalDescartesQL.g:225:2: ( ( (lv_queryType_0_1= 'ENSURE' | lv_queryType_0_2= 'MONITOR' ) ) ) ( (lv_slaQuery_1_0= ruleSlaQuery ) ) ( (lv_sloQuery_2_0= ruleSloQuery ) ) ( (lv_constraintClause_3_0= ruleConstraintClause ) )? ( (lv_dofClause_4_0= ruleDoFClause ) )? ( (lv_forClause_5_0= ruleForClause ) )? ( (lv_usingClause_6_0= ruleUsingClause ) )
+            // InternalDescartesQL.g:240:1: ( ( ( (lv_queryType_0_1= 'ENSURE' | lv_queryType_0_2= 'MONITOR' | lv_queryType_0_3= 'EVALUATE' ) ) ) ( (lv_slaQuery_1_0= ruleSlaQuery ) ) ( (lv_sloQuery_2_0= ruleSloQuery ) ) ( (lv_constraintClause_3_0= ruleConstraintClause ) )? ( (lv_dofClause_4_0= ruleDoFClause ) )? ( (lv_forClause_5_0= ruleForClause ) )? ( (lv_usingClause_6_0= ruleUsingClause ) ) )
+            // InternalDescartesQL.g:240:2: ( ( (lv_queryType_0_1= 'ENSURE' | lv_queryType_0_2= 'MONITOR' | lv_queryType_0_3= 'EVALUATE' ) ) ) ( (lv_slaQuery_1_0= ruleSlaQuery ) ) ( (lv_sloQuery_2_0= ruleSloQuery ) ) ( (lv_constraintClause_3_0= ruleConstraintClause ) )? ( (lv_dofClause_4_0= ruleDoFClause ) )? ( (lv_forClause_5_0= ruleForClause ) )? ( (lv_usingClause_6_0= ruleUsingClause ) )
             {
-            // InternalDescartesQL.g:225:2: ( ( (lv_queryType_0_1= 'ENSURE' | lv_queryType_0_2= 'MONITOR' ) ) )
-            // InternalDescartesQL.g:226:1: ( (lv_queryType_0_1= 'ENSURE' | lv_queryType_0_2= 'MONITOR' ) )
+            // InternalDescartesQL.g:240:2: ( ( (lv_queryType_0_1= 'ENSURE' | lv_queryType_0_2= 'MONITOR' | lv_queryType_0_3= 'EVALUATE' ) ) )
+            // InternalDescartesQL.g:241:1: ( (lv_queryType_0_1= 'ENSURE' | lv_queryType_0_2= 'MONITOR' | lv_queryType_0_3= 'EVALUATE' ) )
             {
-            // InternalDescartesQL.g:226:1: ( (lv_queryType_0_1= 'ENSURE' | lv_queryType_0_2= 'MONITOR' ) )
-            // InternalDescartesQL.g:227:1: (lv_queryType_0_1= 'ENSURE' | lv_queryType_0_2= 'MONITOR' )
+            // InternalDescartesQL.g:241:1: ( (lv_queryType_0_1= 'ENSURE' | lv_queryType_0_2= 'MONITOR' | lv_queryType_0_3= 'EVALUATE' ) )
+            // InternalDescartesQL.g:242:1: (lv_queryType_0_1= 'ENSURE' | lv_queryType_0_2= 'MONITOR' | lv_queryType_0_3= 'EVALUATE' )
             {
-            // InternalDescartesQL.g:227:1: (lv_queryType_0_1= 'ENSURE' | lv_queryType_0_2= 'MONITOR' )
-            int alt2=2;
-            int LA2_0 = input.LA(1);
-
-            if ( (LA2_0==13) ) {
+            // InternalDescartesQL.g:242:1: (lv_queryType_0_1= 'ENSURE' | lv_queryType_0_2= 'MONITOR' | lv_queryType_0_3= 'EVALUATE' )
+            int alt2=3;
+            switch ( input.LA(1) ) {
+            case 13:
+                {
                 alt2=1;
-            }
-            else if ( (LA2_0==14) ) {
+                }
+                break;
+            case 14:
+                {
                 alt2=2;
-            }
-            else {
+                }
+                break;
+            case 15:
+                {
+                alt2=3;
+                }
+                break;
+            default:
                 NoViableAltException nvae =
                     new NoViableAltException("", 2, 0, input);
 
                 throw nvae;
             }
+
             switch (alt2) {
                 case 1 :
-                    // InternalDescartesQL.g:228:3: lv_queryType_0_1= 'ENSURE'
+                    // InternalDescartesQL.g:243:3: lv_queryType_0_1= 'ENSURE'
                     {
                     lv_queryType_0_1=(Token)match(input,13,FOLLOW_4); 
 
@@ -589,7 +636,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 2 :
-                    // InternalDescartesQL.g:240:8: lv_queryType_0_2= 'MONITOR'
+                    // InternalDescartesQL.g:255:8: lv_queryType_0_2= 'MONITOR'
                     {
                     lv_queryType_0_2=(Token)match(input,14,FOLLOW_4); 
 
@@ -602,6 +649,22 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                            		setWithLastConsumed(current, "queryType", lv_queryType_0_2, null);
                     	    
 
+                    }
+                    break;
+                case 3 :
+                    // InternalDescartesQL.g:267:8: lv_queryType_0_3= 'EVALUATE'
+                    {
+                    lv_queryType_0_3=(Token)match(input,15,FOLLOW_4); 
+
+                            newLeafNode(lv_queryType_0_3, grammarAccess.getGoalAccess().getQueryTypeEVALUATEKeyword_0_0_2());
+                        
+
+                    	        if (current==null) {
+                    	            current = createModelElement(grammarAccess.getGoalRule());
+                    	        }
+                           		setWithLastConsumed(current, "queryType", lv_queryType_0_3, null);
+                    	    
+
                     }
                     break;
 
@@ -613,11 +676,11 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:255:2: ( (lv_slaQuery_1_0= ruleSlaQuery ) )
-            // InternalDescartesQL.g:256:1: (lv_slaQuery_1_0= ruleSlaQuery )
+            // InternalDescartesQL.g:282:2: ( (lv_slaQuery_1_0= ruleSlaQuery ) )
+            // InternalDescartesQL.g:283:1: (lv_slaQuery_1_0= ruleSlaQuery )
             {
-            // InternalDescartesQL.g:256:1: (lv_slaQuery_1_0= ruleSlaQuery )
-            // InternalDescartesQL.g:257:3: lv_slaQuery_1_0= ruleSlaQuery
+            // InternalDescartesQL.g:283:1: (lv_slaQuery_1_0= ruleSlaQuery )
+            // InternalDescartesQL.g:284:3: lv_slaQuery_1_0= ruleSlaQuery
             {
              
             	        newCompositeNode(grammarAccess.getGoalAccess().getSlaQuerySlaQueryParserRuleCall_1_0()); 
@@ -644,11 +707,11 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:273:2: ( (lv_sloQuery_2_0= ruleSloQuery ) )
-            // InternalDescartesQL.g:274:1: (lv_sloQuery_2_0= ruleSloQuery )
+            // InternalDescartesQL.g:300:2: ( (lv_sloQuery_2_0= ruleSloQuery ) )
+            // InternalDescartesQL.g:301:1: (lv_sloQuery_2_0= ruleSloQuery )
             {
-            // InternalDescartesQL.g:274:1: (lv_sloQuery_2_0= ruleSloQuery )
-            // InternalDescartesQL.g:275:3: lv_sloQuery_2_0= ruleSloQuery
+            // InternalDescartesQL.g:301:1: (lv_sloQuery_2_0= ruleSloQuery )
+            // InternalDescartesQL.g:302:3: lv_sloQuery_2_0= ruleSloQuery
             {
              
             	        newCompositeNode(grammarAccess.getGoalAccess().getSloQuerySloQueryParserRuleCall_2_0()); 
@@ -675,19 +738,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:291:2: ( (lv_constraintClause_3_0= ruleConstraintClause ) )?
+            // InternalDescartesQL.g:318:2: ( (lv_constraintClause_3_0= ruleConstraintClause ) )?
             int alt3=2;
             int LA3_0 = input.LA(1);
 
-            if ( (LA3_0==38) ) {
+            if ( (LA3_0==42) ) {
                 alt3=1;
             }
             switch (alt3) {
                 case 1 :
-                    // InternalDescartesQL.g:292:1: (lv_constraintClause_3_0= ruleConstraintClause )
+                    // InternalDescartesQL.g:319:1: (lv_constraintClause_3_0= ruleConstraintClause )
                     {
-                    // InternalDescartesQL.g:292:1: (lv_constraintClause_3_0= ruleConstraintClause )
-                    // InternalDescartesQL.g:293:3: lv_constraintClause_3_0= ruleConstraintClause
+                    // InternalDescartesQL.g:319:1: (lv_constraintClause_3_0= ruleConstraintClause )
+                    // InternalDescartesQL.g:320:3: lv_constraintClause_3_0= ruleConstraintClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getGoalAccess().getConstraintClauseConstraintClauseParserRuleCall_3_0()); 
@@ -717,19 +780,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:309:3: ( (lv_dofClause_4_0= ruleDoFClause ) )?
+            // InternalDescartesQL.g:336:3: ( (lv_dofClause_4_0= ruleDoFClause ) )?
             int alt4=2;
             int LA4_0 = input.LA(1);
 
-            if ( (LA4_0==39) ) {
+            if ( (LA4_0==43) ) {
                 alt4=1;
             }
             switch (alt4) {
                 case 1 :
-                    // InternalDescartesQL.g:310:1: (lv_dofClause_4_0= ruleDoFClause )
+                    // InternalDescartesQL.g:337:1: (lv_dofClause_4_0= ruleDoFClause )
                     {
-                    // InternalDescartesQL.g:310:1: (lv_dofClause_4_0= ruleDoFClause )
-                    // InternalDescartesQL.g:311:3: lv_dofClause_4_0= ruleDoFClause
+                    // InternalDescartesQL.g:337:1: (lv_dofClause_4_0= ruleDoFClause )
+                    // InternalDescartesQL.g:338:3: lv_dofClause_4_0= ruleDoFClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getGoalAccess().getDofClauseDoFClauseParserRuleCall_4_0()); 
@@ -759,19 +822,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:327:3: ( (lv_forClause_5_0= ruleForClause ) )?
+            // InternalDescartesQL.g:354:3: ( (lv_forClause_5_0= ruleForClause ) )?
             int alt5=2;
             int LA5_0 = input.LA(1);
 
-            if ( (LA5_0==54) ) {
+            if ( (LA5_0==58) ) {
                 alt5=1;
             }
             switch (alt5) {
                 case 1 :
-                    // InternalDescartesQL.g:328:1: (lv_forClause_5_0= ruleForClause )
+                    // InternalDescartesQL.g:355:1: (lv_forClause_5_0= ruleForClause )
                     {
-                    // InternalDescartesQL.g:328:1: (lv_forClause_5_0= ruleForClause )
-                    // InternalDescartesQL.g:329:3: lv_forClause_5_0= ruleForClause
+                    // InternalDescartesQL.g:355:1: (lv_forClause_5_0= ruleForClause )
+                    // InternalDescartesQL.g:356:3: lv_forClause_5_0= ruleForClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getGoalAccess().getForClauseForClauseParserRuleCall_5_0()); 
@@ -801,11 +864,11 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:345:3: ( (lv_usingClause_6_0= ruleUsingClause ) )
-            // InternalDescartesQL.g:346:1: (lv_usingClause_6_0= ruleUsingClause )
+            // InternalDescartesQL.g:372:3: ( (lv_usingClause_6_0= ruleUsingClause ) )
+            // InternalDescartesQL.g:373:1: (lv_usingClause_6_0= ruleUsingClause )
             {
-            // InternalDescartesQL.g:346:1: (lv_usingClause_6_0= ruleUsingClause )
-            // InternalDescartesQL.g:347:3: lv_usingClause_6_0= ruleUsingClause
+            // InternalDescartesQL.g:373:1: (lv_usingClause_6_0= ruleUsingClause )
+            // InternalDescartesQL.g:374:3: lv_usingClause_6_0= ruleUsingClause
             {
              
             	        newCompositeNode(grammarAccess.getGoalAccess().getUsingClauseUsingClauseParserRuleCall_6_0()); 
@@ -852,8 +915,347 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
     // $ANTLR end "ruleGoal"
 
 
+    // $ANTLR start "entryRuleGenerateSLAConcern"
+    // InternalDescartesQL.g:398:1: entryRuleGenerateSLAConcern returns [EObject current=null] : iv_ruleGenerateSLAConcern= ruleGenerateSLAConcern EOF ;
+    public final EObject entryRuleGenerateSLAConcern() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleGenerateSLAConcern = null;
+
+
+        try {
+            // InternalDescartesQL.g:399:2: (iv_ruleGenerateSLAConcern= ruleGenerateSLAConcern EOF )
+            // InternalDescartesQL.g:400:2: iv_ruleGenerateSLAConcern= ruleGenerateSLAConcern EOF
+            {
+             newCompositeNode(grammarAccess.getGenerateSLAConcernRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleGenerateSLAConcern=ruleGenerateSLAConcern();
+
+            state._fsp--;
+
+             current =iv_ruleGenerateSLAConcern; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleGenerateSLAConcern"
+
+
+    // $ANTLR start "ruleGenerateSLAConcern"
+    // InternalDescartesQL.g:407:1: ruleGenerateSLAConcern returns [EObject current=null] : (otherlv_0= 'GENERATE' ( (lv_offset_1_0= ruleMultipleArithmeticClause ) )? (otherlv_2= 'SATISFACTION-LEVEL' ( (lv_percentage_3_0= RULE_DOUBLE ) ) otherlv_4= 'PERCENT' )? ( (lv_constraintClause_5_0= ruleConstraintClause ) )? ( (lv_dofClause_6_0= ruleDoFClause ) )? ( (lv_forClause_7_0= ruleForClause ) )? ( (lv_usingClause_8_0= ruleUsingClause ) ) ) ;
+    public final EObject ruleGenerateSLAConcern() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_2=null;
+        Token lv_percentage_3_0=null;
+        Token otherlv_4=null;
+        EObject lv_offset_1_0 = null;
+
+        EObject lv_constraintClause_5_0 = null;
+
+        EObject lv_dofClause_6_0 = null;
+
+        EObject lv_forClause_7_0 = null;
+
+        EObject lv_usingClause_8_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // InternalDescartesQL.g:410:28: ( (otherlv_0= 'GENERATE' ( (lv_offset_1_0= ruleMultipleArithmeticClause ) )? (otherlv_2= 'SATISFACTION-LEVEL' ( (lv_percentage_3_0= RULE_DOUBLE ) ) otherlv_4= 'PERCENT' )? ( (lv_constraintClause_5_0= ruleConstraintClause ) )? ( (lv_dofClause_6_0= ruleDoFClause ) )? ( (lv_forClause_7_0= ruleForClause ) )? ( (lv_usingClause_8_0= ruleUsingClause ) ) ) )
+            // InternalDescartesQL.g:411:1: (otherlv_0= 'GENERATE' ( (lv_offset_1_0= ruleMultipleArithmeticClause ) )? (otherlv_2= 'SATISFACTION-LEVEL' ( (lv_percentage_3_0= RULE_DOUBLE ) ) otherlv_4= 'PERCENT' )? ( (lv_constraintClause_5_0= ruleConstraintClause ) )? ( (lv_dofClause_6_0= ruleDoFClause ) )? ( (lv_forClause_7_0= ruleForClause ) )? ( (lv_usingClause_8_0= ruleUsingClause ) ) )
+            {
+            // InternalDescartesQL.g:411:1: (otherlv_0= 'GENERATE' ( (lv_offset_1_0= ruleMultipleArithmeticClause ) )? (otherlv_2= 'SATISFACTION-LEVEL' ( (lv_percentage_3_0= RULE_DOUBLE ) ) otherlv_4= 'PERCENT' )? ( (lv_constraintClause_5_0= ruleConstraintClause ) )? ( (lv_dofClause_6_0= ruleDoFClause ) )? ( (lv_forClause_7_0= ruleForClause ) )? ( (lv_usingClause_8_0= ruleUsingClause ) ) )
+            // InternalDescartesQL.g:411:3: otherlv_0= 'GENERATE' ( (lv_offset_1_0= ruleMultipleArithmeticClause ) )? (otherlv_2= 'SATISFACTION-LEVEL' ( (lv_percentage_3_0= RULE_DOUBLE ) ) otherlv_4= 'PERCENT' )? ( (lv_constraintClause_5_0= ruleConstraintClause ) )? ( (lv_dofClause_6_0= ruleDoFClause ) )? ( (lv_forClause_7_0= ruleForClause ) )? ( (lv_usingClause_8_0= ruleUsingClause ) )
+            {
+            otherlv_0=(Token)match(input,16,FOLLOW_7); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getGenerateSLAConcernAccess().getGENERATEKeyword_0());
+                
+            // InternalDescartesQL.g:415:1: ( (lv_offset_1_0= ruleMultipleArithmeticClause ) )?
+            int alt6=2;
+            int LA6_0 = input.LA(1);
+
+            if ( (LA6_0==49) ) {
+                alt6=1;
+            }
+            switch (alt6) {
+                case 1 :
+                    // InternalDescartesQL.g:416:1: (lv_offset_1_0= ruleMultipleArithmeticClause )
+                    {
+                    // InternalDescartesQL.g:416:1: (lv_offset_1_0= ruleMultipleArithmeticClause )
+                    // InternalDescartesQL.g:417:3: lv_offset_1_0= ruleMultipleArithmeticClause
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getGenerateSLAConcernAccess().getOffsetMultipleArithmeticClauseParserRuleCall_1_0()); 
+                    	    
+                    pushFollow(FOLLOW_8);
+                    lv_offset_1_0=ruleMultipleArithmeticClause();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getGenerateSLAConcernRule());
+                    	        }
+                           		set(
+                           			current, 
+                           			"offset",
+                            		lv_offset_1_0, 
+                            		"tools.descartes.dql.lang.DescartesQL.MultipleArithmeticClause");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            // InternalDescartesQL.g:433:3: (otherlv_2= 'SATISFACTION-LEVEL' ( (lv_percentage_3_0= RULE_DOUBLE ) ) otherlv_4= 'PERCENT' )?
+            int alt7=2;
+            int LA7_0 = input.LA(1);
+
+            if ( (LA7_0==17) ) {
+                alt7=1;
+            }
+            switch (alt7) {
+                case 1 :
+                    // InternalDescartesQL.g:433:5: otherlv_2= 'SATISFACTION-LEVEL' ( (lv_percentage_3_0= RULE_DOUBLE ) ) otherlv_4= 'PERCENT'
+                    {
+                    otherlv_2=(Token)match(input,17,FOLLOW_9); 
+
+                        	newLeafNode(otherlv_2, grammarAccess.getGenerateSLAConcernAccess().getSATISFACTIONLEVELKeyword_2_0());
+                        
+                    // InternalDescartesQL.g:437:1: ( (lv_percentage_3_0= RULE_DOUBLE ) )
+                    // InternalDescartesQL.g:438:1: (lv_percentage_3_0= RULE_DOUBLE )
+                    {
+                    // InternalDescartesQL.g:438:1: (lv_percentage_3_0= RULE_DOUBLE )
+                    // InternalDescartesQL.g:439:3: lv_percentage_3_0= RULE_DOUBLE
+                    {
+                    lv_percentage_3_0=(Token)match(input,RULE_DOUBLE,FOLLOW_10); 
+
+                    			newLeafNode(lv_percentage_3_0, grammarAccess.getGenerateSLAConcernAccess().getPercentageDOUBLETerminalRuleCall_2_1_0()); 
+                    		
+
+                    	        if (current==null) {
+                    	            current = createModelElement(grammarAccess.getGenerateSLAConcernRule());
+                    	        }
+                           		setWithLastConsumed(
+                           			current, 
+                           			"percentage",
+                            		lv_percentage_3_0, 
+                            		"tools.descartes.dql.lang.DescartesQL.DOUBLE");
+                    	    
+
+                    }
+
+
+                    }
+
+                    otherlv_4=(Token)match(input,18,FOLLOW_6); 
+
+                        	newLeafNode(otherlv_4, grammarAccess.getGenerateSLAConcernAccess().getPERCENTKeyword_2_2());
+                        
+
+                    }
+                    break;
+
+            }
+
+            // InternalDescartesQL.g:459:3: ( (lv_constraintClause_5_0= ruleConstraintClause ) )?
+            int alt8=2;
+            int LA8_0 = input.LA(1);
+
+            if ( (LA8_0==42) ) {
+                alt8=1;
+            }
+            switch (alt8) {
+                case 1 :
+                    // InternalDescartesQL.g:460:1: (lv_constraintClause_5_0= ruleConstraintClause )
+                    {
+                    // InternalDescartesQL.g:460:1: (lv_constraintClause_5_0= ruleConstraintClause )
+                    // InternalDescartesQL.g:461:3: lv_constraintClause_5_0= ruleConstraintClause
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getGenerateSLAConcernAccess().getConstraintClauseConstraintClauseParserRuleCall_3_0()); 
+                    	    
+                    pushFollow(FOLLOW_6);
+                    lv_constraintClause_5_0=ruleConstraintClause();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getGenerateSLAConcernRule());
+                    	        }
+                           		set(
+                           			current, 
+                           			"constraintClause",
+                            		lv_constraintClause_5_0, 
+                            		"tools.descartes.dql.lang.DescartesQL.ConstraintClause");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            // InternalDescartesQL.g:477:3: ( (lv_dofClause_6_0= ruleDoFClause ) )?
+            int alt9=2;
+            int LA9_0 = input.LA(1);
+
+            if ( (LA9_0==43) ) {
+                alt9=1;
+            }
+            switch (alt9) {
+                case 1 :
+                    // InternalDescartesQL.g:478:1: (lv_dofClause_6_0= ruleDoFClause )
+                    {
+                    // InternalDescartesQL.g:478:1: (lv_dofClause_6_0= ruleDoFClause )
+                    // InternalDescartesQL.g:479:3: lv_dofClause_6_0= ruleDoFClause
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getGenerateSLAConcernAccess().getDofClauseDoFClauseParserRuleCall_4_0()); 
+                    	    
+                    pushFollow(FOLLOW_6);
+                    lv_dofClause_6_0=ruleDoFClause();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getGenerateSLAConcernRule());
+                    	        }
+                           		set(
+                           			current, 
+                           			"dofClause",
+                            		lv_dofClause_6_0, 
+                            		"tools.descartes.dql.lang.DescartesQL.DoFClause");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            // InternalDescartesQL.g:495:3: ( (lv_forClause_7_0= ruleForClause ) )?
+            int alt10=2;
+            int LA10_0 = input.LA(1);
+
+            if ( (LA10_0==58) ) {
+                alt10=1;
+            }
+            switch (alt10) {
+                case 1 :
+                    // InternalDescartesQL.g:496:1: (lv_forClause_7_0= ruleForClause )
+                    {
+                    // InternalDescartesQL.g:496:1: (lv_forClause_7_0= ruleForClause )
+                    // InternalDescartesQL.g:497:3: lv_forClause_7_0= ruleForClause
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getGenerateSLAConcernAccess().getForClauseForClauseParserRuleCall_5_0()); 
+                    	    
+                    pushFollow(FOLLOW_6);
+                    lv_forClause_7_0=ruleForClause();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getGenerateSLAConcernRule());
+                    	        }
+                           		set(
+                           			current, 
+                           			"forClause",
+                            		lv_forClause_7_0, 
+                            		"tools.descartes.dql.lang.DescartesQL.ForClause");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            // InternalDescartesQL.g:513:3: ( (lv_usingClause_8_0= ruleUsingClause ) )
+            // InternalDescartesQL.g:514:1: (lv_usingClause_8_0= ruleUsingClause )
+            {
+            // InternalDescartesQL.g:514:1: (lv_usingClause_8_0= ruleUsingClause )
+            // InternalDescartesQL.g:515:3: lv_usingClause_8_0= ruleUsingClause
+            {
+             
+            	        newCompositeNode(grammarAccess.getGenerateSLAConcernAccess().getUsingClauseUsingClauseParserRuleCall_6_0()); 
+            	    
+            pushFollow(FOLLOW_2);
+            lv_usingClause_8_0=ruleUsingClause();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getGenerateSLAConcernRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"usingClause",
+                    		lv_usingClause_8_0, 
+                    		"tools.descartes.dql.lang.DescartesQL.UsingClause");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleGenerateSLAConcern"
+
+
     // $ANTLR start "entryRuleSlaQuery"
-    // InternalDescartesQL.g:371:1: entryRuleSlaQuery returns [EObject current=null] : iv_ruleSlaQuery= ruleSlaQuery EOF ;
+    // InternalDescartesQL.g:539:1: entryRuleSlaQuery returns [EObject current=null] : iv_ruleSlaQuery= ruleSlaQuery EOF ;
     public final EObject entryRuleSlaQuery() throws RecognitionException {
         EObject current = null;
 
@@ -861,8 +1263,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:372:2: (iv_ruleSlaQuery= ruleSlaQuery EOF )
-            // InternalDescartesQL.g:373:2: iv_ruleSlaQuery= ruleSlaQuery EOF
+            // InternalDescartesQL.g:540:2: (iv_ruleSlaQuery= ruleSlaQuery EOF )
+            // InternalDescartesQL.g:541:2: iv_ruleSlaQuery= ruleSlaQuery EOF
             {
              newCompositeNode(grammarAccess.getSlaQueryRule()); 
             pushFollow(FOLLOW_1);
@@ -889,7 +1291,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleSlaQuery"
-    // InternalDescartesQL.g:380:1: ruleSlaQuery returns [EObject current=null] : ( ( (lv_type_0_0= 'AGREEMENTS' ) ) ( (lv_slas_1_0= ruleSla ) ) (otherlv_2= ',' ( (lv_slas_3_0= ruleSla ) ) )* ) ;
+    // InternalDescartesQL.g:548:1: ruleSlaQuery returns [EObject current=null] : ( ( (lv_type_0_0= 'AGREEMENTS' ) ) ( (lv_slas_1_0= ruleSla ) ) (otherlv_2= ',' ( (lv_slas_3_0= ruleSla ) ) )* ) ;
     public final EObject ruleSlaQuery() throws RecognitionException {
         EObject current = null;
 
@@ -903,19 +1305,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:383:28: ( ( ( (lv_type_0_0= 'AGREEMENTS' ) ) ( (lv_slas_1_0= ruleSla ) ) (otherlv_2= ',' ( (lv_slas_3_0= ruleSla ) ) )* ) )
-            // InternalDescartesQL.g:384:1: ( ( (lv_type_0_0= 'AGREEMENTS' ) ) ( (lv_slas_1_0= ruleSla ) ) (otherlv_2= ',' ( (lv_slas_3_0= ruleSla ) ) )* )
+            // InternalDescartesQL.g:551:28: ( ( ( (lv_type_0_0= 'AGREEMENTS' ) ) ( (lv_slas_1_0= ruleSla ) ) (otherlv_2= ',' ( (lv_slas_3_0= ruleSla ) ) )* ) )
+            // InternalDescartesQL.g:552:1: ( ( (lv_type_0_0= 'AGREEMENTS' ) ) ( (lv_slas_1_0= ruleSla ) ) (otherlv_2= ',' ( (lv_slas_3_0= ruleSla ) ) )* )
             {
-            // InternalDescartesQL.g:384:1: ( ( (lv_type_0_0= 'AGREEMENTS' ) ) ( (lv_slas_1_0= ruleSla ) ) (otherlv_2= ',' ( (lv_slas_3_0= ruleSla ) ) )* )
-            // InternalDescartesQL.g:384:2: ( (lv_type_0_0= 'AGREEMENTS' ) ) ( (lv_slas_1_0= ruleSla ) ) (otherlv_2= ',' ( (lv_slas_3_0= ruleSla ) ) )*
+            // InternalDescartesQL.g:552:1: ( ( (lv_type_0_0= 'AGREEMENTS' ) ) ( (lv_slas_1_0= ruleSla ) ) (otherlv_2= ',' ( (lv_slas_3_0= ruleSla ) ) )* )
+            // InternalDescartesQL.g:552:2: ( (lv_type_0_0= 'AGREEMENTS' ) ) ( (lv_slas_1_0= ruleSla ) ) (otherlv_2= ',' ( (lv_slas_3_0= ruleSla ) ) )*
             {
-            // InternalDescartesQL.g:384:2: ( (lv_type_0_0= 'AGREEMENTS' ) )
-            // InternalDescartesQL.g:385:1: (lv_type_0_0= 'AGREEMENTS' )
+            // InternalDescartesQL.g:552:2: ( (lv_type_0_0= 'AGREEMENTS' ) )
+            // InternalDescartesQL.g:553:1: (lv_type_0_0= 'AGREEMENTS' )
             {
-            // InternalDescartesQL.g:385:1: (lv_type_0_0= 'AGREEMENTS' )
-            // InternalDescartesQL.g:386:3: lv_type_0_0= 'AGREEMENTS'
+            // InternalDescartesQL.g:553:1: (lv_type_0_0= 'AGREEMENTS' )
+            // InternalDescartesQL.g:554:3: lv_type_0_0= 'AGREEMENTS'
             {
-            lv_type_0_0=(Token)match(input,15,FOLLOW_7); 
+            lv_type_0_0=(Token)match(input,19,FOLLOW_11); 
 
                     newLeafNode(lv_type_0_0, grammarAccess.getSlaQueryAccess().getTypeAGREEMENTSKeyword_0_0());
                 
@@ -931,16 +1333,16 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:399:2: ( (lv_slas_1_0= ruleSla ) )
-            // InternalDescartesQL.g:400:1: (lv_slas_1_0= ruleSla )
+            // InternalDescartesQL.g:567:2: ( (lv_slas_1_0= ruleSla ) )
+            // InternalDescartesQL.g:568:1: (lv_slas_1_0= ruleSla )
             {
-            // InternalDescartesQL.g:400:1: (lv_slas_1_0= ruleSla )
-            // InternalDescartesQL.g:401:3: lv_slas_1_0= ruleSla
+            // InternalDescartesQL.g:568:1: (lv_slas_1_0= ruleSla )
+            // InternalDescartesQL.g:569:3: lv_slas_1_0= ruleSla
             {
              
             	        newCompositeNode(grammarAccess.getSlaQueryAccess().getSlasSlaParserRuleCall_1_0()); 
             	    
-            pushFollow(FOLLOW_8);
+            pushFollow(FOLLOW_12);
             lv_slas_1_0=ruleSla();
 
             state._fsp--;
@@ -962,35 +1364,35 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:417:2: (otherlv_2= ',' ( (lv_slas_3_0= ruleSla ) ) )*
-            loop6:
+            // InternalDescartesQL.g:585:2: (otherlv_2= ',' ( (lv_slas_3_0= ruleSla ) ) )*
+            loop11:
             do {
-                int alt6=2;
-                int LA6_0 = input.LA(1);
+                int alt11=2;
+                int LA11_0 = input.LA(1);
 
-                if ( (LA6_0==16) ) {
-                    alt6=1;
+                if ( (LA11_0==20) ) {
+                    alt11=1;
                 }
 
 
-                switch (alt6) {
+                switch (alt11) {
             	case 1 :
-            	    // InternalDescartesQL.g:417:4: otherlv_2= ',' ( (lv_slas_3_0= ruleSla ) )
+            	    // InternalDescartesQL.g:585:4: otherlv_2= ',' ( (lv_slas_3_0= ruleSla ) )
             	    {
-            	    otherlv_2=(Token)match(input,16,FOLLOW_7); 
+            	    otherlv_2=(Token)match(input,20,FOLLOW_11); 
 
             	        	newLeafNode(otherlv_2, grammarAccess.getSlaQueryAccess().getCommaKeyword_2_0());
             	        
-            	    // InternalDescartesQL.g:421:1: ( (lv_slas_3_0= ruleSla ) )
-            	    // InternalDescartesQL.g:422:1: (lv_slas_3_0= ruleSla )
+            	    // InternalDescartesQL.g:589:1: ( (lv_slas_3_0= ruleSla ) )
+            	    // InternalDescartesQL.g:590:1: (lv_slas_3_0= ruleSla )
             	    {
-            	    // InternalDescartesQL.g:422:1: (lv_slas_3_0= ruleSla )
-            	    // InternalDescartesQL.g:423:3: lv_slas_3_0= ruleSla
+            	    // InternalDescartesQL.g:590:1: (lv_slas_3_0= ruleSla )
+            	    // InternalDescartesQL.g:591:3: lv_slas_3_0= ruleSla
             	    {
             	     
             	    	        newCompositeNode(grammarAccess.getSlaQueryAccess().getSlasSlaParserRuleCall_2_1_0()); 
             	    	    
-            	    pushFollow(FOLLOW_8);
+            	    pushFollow(FOLLOW_12);
             	    lv_slas_3_0=ruleSla();
 
             	    state._fsp--;
@@ -1017,7 +1419,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
             	    break;
 
             	default :
-            	    break loop6;
+            	    break loop11;
                 }
             } while (true);
 
@@ -1042,7 +1444,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleSloQuery"
-    // InternalDescartesQL.g:447:1: entryRuleSloQuery returns [EObject current=null] : iv_ruleSloQuery= ruleSloQuery EOF ;
+    // InternalDescartesQL.g:615:1: entryRuleSloQuery returns [EObject current=null] : iv_ruleSloQuery= ruleSloQuery EOF ;
     public final EObject entryRuleSloQuery() throws RecognitionException {
         EObject current = null;
 
@@ -1050,8 +1452,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:448:2: (iv_ruleSloQuery= ruleSloQuery EOF )
-            // InternalDescartesQL.g:449:2: iv_ruleSloQuery= ruleSloQuery EOF
+            // InternalDescartesQL.g:616:2: (iv_ruleSloQuery= ruleSloQuery EOF )
+            // InternalDescartesQL.g:617:2: iv_ruleSloQuery= ruleSloQuery EOF
             {
              newCompositeNode(grammarAccess.getSloQueryRule()); 
             pushFollow(FOLLOW_1);
@@ -1078,7 +1480,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleSloQuery"
-    // InternalDescartesQL.g:456:1: ruleSloQuery returns [EObject current=null] : ( ( (lv_type_0_0= 'GOALS' ) ) ( (lv_slos_1_0= ruleSlo ) ) (otherlv_2= ',' ( (lv_slos_3_0= ruleSlo ) ) )* ) ;
+    // InternalDescartesQL.g:624:1: ruleSloQuery returns [EObject current=null] : ( ( (lv_type_0_0= 'GOALS' ) ) ( (lv_slos_1_0= ruleSlo ) ) (otherlv_2= ',' ( (lv_slos_3_0= ruleSlo ) ) )* ) ;
     public final EObject ruleSloQuery() throws RecognitionException {
         EObject current = null;
 
@@ -1092,19 +1494,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:459:28: ( ( ( (lv_type_0_0= 'GOALS' ) ) ( (lv_slos_1_0= ruleSlo ) ) (otherlv_2= ',' ( (lv_slos_3_0= ruleSlo ) ) )* ) )
-            // InternalDescartesQL.g:460:1: ( ( (lv_type_0_0= 'GOALS' ) ) ( (lv_slos_1_0= ruleSlo ) ) (otherlv_2= ',' ( (lv_slos_3_0= ruleSlo ) ) )* )
+            // InternalDescartesQL.g:627:28: ( ( ( (lv_type_0_0= 'GOALS' ) ) ( (lv_slos_1_0= ruleSlo ) ) (otherlv_2= ',' ( (lv_slos_3_0= ruleSlo ) ) )* ) )
+            // InternalDescartesQL.g:628:1: ( ( (lv_type_0_0= 'GOALS' ) ) ( (lv_slos_1_0= ruleSlo ) ) (otherlv_2= ',' ( (lv_slos_3_0= ruleSlo ) ) )* )
             {
-            // InternalDescartesQL.g:460:1: ( ( (lv_type_0_0= 'GOALS' ) ) ( (lv_slos_1_0= ruleSlo ) ) (otherlv_2= ',' ( (lv_slos_3_0= ruleSlo ) ) )* )
-            // InternalDescartesQL.g:460:2: ( (lv_type_0_0= 'GOALS' ) ) ( (lv_slos_1_0= ruleSlo ) ) (otherlv_2= ',' ( (lv_slos_3_0= ruleSlo ) ) )*
+            // InternalDescartesQL.g:628:1: ( ( (lv_type_0_0= 'GOALS' ) ) ( (lv_slos_1_0= ruleSlo ) ) (otherlv_2= ',' ( (lv_slos_3_0= ruleSlo ) ) )* )
+            // InternalDescartesQL.g:628:2: ( (lv_type_0_0= 'GOALS' ) ) ( (lv_slos_1_0= ruleSlo ) ) (otherlv_2= ',' ( (lv_slos_3_0= ruleSlo ) ) )*
             {
-            // InternalDescartesQL.g:460:2: ( (lv_type_0_0= 'GOALS' ) )
-            // InternalDescartesQL.g:461:1: (lv_type_0_0= 'GOALS' )
+            // InternalDescartesQL.g:628:2: ( (lv_type_0_0= 'GOALS' ) )
+            // InternalDescartesQL.g:629:1: (lv_type_0_0= 'GOALS' )
             {
-            // InternalDescartesQL.g:461:1: (lv_type_0_0= 'GOALS' )
-            // InternalDescartesQL.g:462:3: lv_type_0_0= 'GOALS'
+            // InternalDescartesQL.g:629:1: (lv_type_0_0= 'GOALS' )
+            // InternalDescartesQL.g:630:3: lv_type_0_0= 'GOALS'
             {
-            lv_type_0_0=(Token)match(input,17,FOLLOW_7); 
+            lv_type_0_0=(Token)match(input,21,FOLLOW_11); 
 
                     newLeafNode(lv_type_0_0, grammarAccess.getSloQueryAccess().getTypeGOALSKeyword_0_0());
                 
@@ -1120,16 +1522,16 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:475:2: ( (lv_slos_1_0= ruleSlo ) )
-            // InternalDescartesQL.g:476:1: (lv_slos_1_0= ruleSlo )
+            // InternalDescartesQL.g:643:2: ( (lv_slos_1_0= ruleSlo ) )
+            // InternalDescartesQL.g:644:1: (lv_slos_1_0= ruleSlo )
             {
-            // InternalDescartesQL.g:476:1: (lv_slos_1_0= ruleSlo )
-            // InternalDescartesQL.g:477:3: lv_slos_1_0= ruleSlo
+            // InternalDescartesQL.g:644:1: (lv_slos_1_0= ruleSlo )
+            // InternalDescartesQL.g:645:3: lv_slos_1_0= ruleSlo
             {
              
             	        newCompositeNode(grammarAccess.getSloQueryAccess().getSlosSloParserRuleCall_1_0()); 
             	    
-            pushFollow(FOLLOW_8);
+            pushFollow(FOLLOW_12);
             lv_slos_1_0=ruleSlo();
 
             state._fsp--;
@@ -1151,35 +1553,35 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:493:2: (otherlv_2= ',' ( (lv_slos_3_0= ruleSlo ) ) )*
-            loop7:
+            // InternalDescartesQL.g:661:2: (otherlv_2= ',' ( (lv_slos_3_0= ruleSlo ) ) )*
+            loop12:
             do {
-                int alt7=2;
-                int LA7_0 = input.LA(1);
+                int alt12=2;
+                int LA12_0 = input.LA(1);
 
-                if ( (LA7_0==16) ) {
-                    alt7=1;
+                if ( (LA12_0==20) ) {
+                    alt12=1;
                 }
 
 
-                switch (alt7) {
+                switch (alt12) {
             	case 1 :
-            	    // InternalDescartesQL.g:493:4: otherlv_2= ',' ( (lv_slos_3_0= ruleSlo ) )
+            	    // InternalDescartesQL.g:661:4: otherlv_2= ',' ( (lv_slos_3_0= ruleSlo ) )
             	    {
-            	    otherlv_2=(Token)match(input,16,FOLLOW_7); 
+            	    otherlv_2=(Token)match(input,20,FOLLOW_11); 
 
             	        	newLeafNode(otherlv_2, grammarAccess.getSloQueryAccess().getCommaKeyword_2_0());
             	        
-            	    // InternalDescartesQL.g:497:1: ( (lv_slos_3_0= ruleSlo ) )
-            	    // InternalDescartesQL.g:498:1: (lv_slos_3_0= ruleSlo )
+            	    // InternalDescartesQL.g:665:1: ( (lv_slos_3_0= ruleSlo ) )
+            	    // InternalDescartesQL.g:666:1: (lv_slos_3_0= ruleSlo )
             	    {
-            	    // InternalDescartesQL.g:498:1: (lv_slos_3_0= ruleSlo )
-            	    // InternalDescartesQL.g:499:3: lv_slos_3_0= ruleSlo
+            	    // InternalDescartesQL.g:666:1: (lv_slos_3_0= ruleSlo )
+            	    // InternalDescartesQL.g:667:3: lv_slos_3_0= ruleSlo
             	    {
             	     
             	    	        newCompositeNode(grammarAccess.getSloQueryAccess().getSlosSloParserRuleCall_2_1_0()); 
             	    	    
-            	    pushFollow(FOLLOW_8);
+            	    pushFollow(FOLLOW_12);
             	    lv_slos_3_0=ruleSlo();
 
             	    state._fsp--;
@@ -1206,7 +1608,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
             	    break;
 
             	default :
-            	    break loop7;
+            	    break loop12;
                 }
             } while (true);
 
@@ -1231,7 +1633,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleSla"
-    // InternalDescartesQL.g:523:1: entryRuleSla returns [EObject current=null] : iv_ruleSla= ruleSla EOF ;
+    // InternalDescartesQL.g:691:1: entryRuleSla returns [EObject current=null] : iv_ruleSla= ruleSla EOF ;
     public final EObject entryRuleSla() throws RecognitionException {
         EObject current = null;
 
@@ -1239,8 +1641,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:524:2: (iv_ruleSla= ruleSla EOF )
-            // InternalDescartesQL.g:525:2: iv_ruleSla= ruleSla EOF
+            // InternalDescartesQL.g:692:2: (iv_ruleSla= ruleSla EOF )
+            // InternalDescartesQL.g:693:2: iv_ruleSla= ruleSla EOF
             {
              newCompositeNode(grammarAccess.getSlaRule()); 
             pushFollow(FOLLOW_1);
@@ -1267,7 +1669,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleSla"
-    // InternalDescartesQL.g:532:1: ruleSla returns [EObject current=null] : ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= 'CONTAINS' otherlv_2= '(' ( (lv_weightedSlo_3_0= ruleWeightedSlo ) ) (otherlv_4= ',' ( (lv_weightedSlo_5_0= ruleWeightedSlo ) ) )* otherlv_6= ')' ) ;
+    // InternalDescartesQL.g:700:1: ruleSla returns [EObject current=null] : ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= 'CONTAINS' otherlv_2= '(' ( (lv_weightedSlo_3_0= ruleWeightedSlo ) ) (otherlv_4= ',' ( (lv_weightedSlo_5_0= ruleWeightedSlo ) ) )* otherlv_6= ')' ) ;
     public final EObject ruleSla() throws RecognitionException {
         EObject current = null;
 
@@ -1284,19 +1686,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:535:28: ( ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= 'CONTAINS' otherlv_2= '(' ( (lv_weightedSlo_3_0= ruleWeightedSlo ) ) (otherlv_4= ',' ( (lv_weightedSlo_5_0= ruleWeightedSlo ) ) )* otherlv_6= ')' ) )
-            // InternalDescartesQL.g:536:1: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= 'CONTAINS' otherlv_2= '(' ( (lv_weightedSlo_3_0= ruleWeightedSlo ) ) (otherlv_4= ',' ( (lv_weightedSlo_5_0= ruleWeightedSlo ) ) )* otherlv_6= ')' )
+            // InternalDescartesQL.g:703:28: ( ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= 'CONTAINS' otherlv_2= '(' ( (lv_weightedSlo_3_0= ruleWeightedSlo ) ) (otherlv_4= ',' ( (lv_weightedSlo_5_0= ruleWeightedSlo ) ) )* otherlv_6= ')' ) )
+            // InternalDescartesQL.g:704:1: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= 'CONTAINS' otherlv_2= '(' ( (lv_weightedSlo_3_0= ruleWeightedSlo ) ) (otherlv_4= ',' ( (lv_weightedSlo_5_0= ruleWeightedSlo ) ) )* otherlv_6= ')' )
             {
-            // InternalDescartesQL.g:536:1: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= 'CONTAINS' otherlv_2= '(' ( (lv_weightedSlo_3_0= ruleWeightedSlo ) ) (otherlv_4= ',' ( (lv_weightedSlo_5_0= ruleWeightedSlo ) ) )* otherlv_6= ')' )
-            // InternalDescartesQL.g:536:2: ( (lv_name_0_0= RULE_ID ) ) otherlv_1= 'CONTAINS' otherlv_2= '(' ( (lv_weightedSlo_3_0= ruleWeightedSlo ) ) (otherlv_4= ',' ( (lv_weightedSlo_5_0= ruleWeightedSlo ) ) )* otherlv_6= ')'
+            // InternalDescartesQL.g:704:1: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= 'CONTAINS' otherlv_2= '(' ( (lv_weightedSlo_3_0= ruleWeightedSlo ) ) (otherlv_4= ',' ( (lv_weightedSlo_5_0= ruleWeightedSlo ) ) )* otherlv_6= ')' )
+            // InternalDescartesQL.g:704:2: ( (lv_name_0_0= RULE_ID ) ) otherlv_1= 'CONTAINS' otherlv_2= '(' ( (lv_weightedSlo_3_0= ruleWeightedSlo ) ) (otherlv_4= ',' ( (lv_weightedSlo_5_0= ruleWeightedSlo ) ) )* otherlv_6= ')'
             {
-            // InternalDescartesQL.g:536:2: ( (lv_name_0_0= RULE_ID ) )
-            // InternalDescartesQL.g:537:1: (lv_name_0_0= RULE_ID )
+            // InternalDescartesQL.g:704:2: ( (lv_name_0_0= RULE_ID ) )
+            // InternalDescartesQL.g:705:1: (lv_name_0_0= RULE_ID )
             {
-            // InternalDescartesQL.g:537:1: (lv_name_0_0= RULE_ID )
-            // InternalDescartesQL.g:538:3: lv_name_0_0= RULE_ID
+            // InternalDescartesQL.g:705:1: (lv_name_0_0= RULE_ID )
+            // InternalDescartesQL.g:706:3: lv_name_0_0= RULE_ID
             {
-            lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_9); 
+            lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_13); 
 
             			newLeafNode(lv_name_0_0, grammarAccess.getSlaAccess().getNameIDTerminalRuleCall_0_0()); 
             		
@@ -1316,24 +1718,24 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            otherlv_1=(Token)match(input,18,FOLLOW_10); 
+            otherlv_1=(Token)match(input,22,FOLLOW_14); 
 
                 	newLeafNode(otherlv_1, grammarAccess.getSlaAccess().getCONTAINSKeyword_1());
                 
-            otherlv_2=(Token)match(input,19,FOLLOW_7); 
+            otherlv_2=(Token)match(input,23,FOLLOW_11); 
 
                 	newLeafNode(otherlv_2, grammarAccess.getSlaAccess().getLeftParenthesisKeyword_2());
                 
-            // InternalDescartesQL.g:562:1: ( (lv_weightedSlo_3_0= ruleWeightedSlo ) )
-            // InternalDescartesQL.g:563:1: (lv_weightedSlo_3_0= ruleWeightedSlo )
+            // InternalDescartesQL.g:730:1: ( (lv_weightedSlo_3_0= ruleWeightedSlo ) )
+            // InternalDescartesQL.g:731:1: (lv_weightedSlo_3_0= ruleWeightedSlo )
             {
-            // InternalDescartesQL.g:563:1: (lv_weightedSlo_3_0= ruleWeightedSlo )
-            // InternalDescartesQL.g:564:3: lv_weightedSlo_3_0= ruleWeightedSlo
+            // InternalDescartesQL.g:731:1: (lv_weightedSlo_3_0= ruleWeightedSlo )
+            // InternalDescartesQL.g:732:3: lv_weightedSlo_3_0= ruleWeightedSlo
             {
              
             	        newCompositeNode(grammarAccess.getSlaAccess().getWeightedSloWeightedSloParserRuleCall_3_0()); 
             	    
-            pushFollow(FOLLOW_11);
+            pushFollow(FOLLOW_15);
             lv_weightedSlo_3_0=ruleWeightedSlo();
 
             state._fsp--;
@@ -1355,35 +1757,35 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:580:2: (otherlv_4= ',' ( (lv_weightedSlo_5_0= ruleWeightedSlo ) ) )*
-            loop8:
+            // InternalDescartesQL.g:748:2: (otherlv_4= ',' ( (lv_weightedSlo_5_0= ruleWeightedSlo ) ) )*
+            loop13:
             do {
-                int alt8=2;
-                int LA8_0 = input.LA(1);
+                int alt13=2;
+                int LA13_0 = input.LA(1);
 
-                if ( (LA8_0==16) ) {
-                    alt8=1;
+                if ( (LA13_0==20) ) {
+                    alt13=1;
                 }
 
 
-                switch (alt8) {
+                switch (alt13) {
             	case 1 :
-            	    // InternalDescartesQL.g:580:4: otherlv_4= ',' ( (lv_weightedSlo_5_0= ruleWeightedSlo ) )
+            	    // InternalDescartesQL.g:748:4: otherlv_4= ',' ( (lv_weightedSlo_5_0= ruleWeightedSlo ) )
             	    {
-            	    otherlv_4=(Token)match(input,16,FOLLOW_7); 
+            	    otherlv_4=(Token)match(input,20,FOLLOW_11); 
 
             	        	newLeafNode(otherlv_4, grammarAccess.getSlaAccess().getCommaKeyword_4_0());
             	        
-            	    // InternalDescartesQL.g:584:1: ( (lv_weightedSlo_5_0= ruleWeightedSlo ) )
-            	    // InternalDescartesQL.g:585:1: (lv_weightedSlo_5_0= ruleWeightedSlo )
+            	    // InternalDescartesQL.g:752:1: ( (lv_weightedSlo_5_0= ruleWeightedSlo ) )
+            	    // InternalDescartesQL.g:753:1: (lv_weightedSlo_5_0= ruleWeightedSlo )
             	    {
-            	    // InternalDescartesQL.g:585:1: (lv_weightedSlo_5_0= ruleWeightedSlo )
-            	    // InternalDescartesQL.g:586:3: lv_weightedSlo_5_0= ruleWeightedSlo
+            	    // InternalDescartesQL.g:753:1: (lv_weightedSlo_5_0= ruleWeightedSlo )
+            	    // InternalDescartesQL.g:754:3: lv_weightedSlo_5_0= ruleWeightedSlo
             	    {
             	     
             	    	        newCompositeNode(grammarAccess.getSlaAccess().getWeightedSloWeightedSloParserRuleCall_4_1_0()); 
             	    	    
-            	    pushFollow(FOLLOW_11);
+            	    pushFollow(FOLLOW_15);
             	    lv_weightedSlo_5_0=ruleWeightedSlo();
 
             	    state._fsp--;
@@ -1410,11 +1812,11 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
             	    break;
 
             	default :
-            	    break loop8;
+            	    break loop13;
                 }
             } while (true);
 
-            otherlv_6=(Token)match(input,20,FOLLOW_2); 
+            otherlv_6=(Token)match(input,24,FOLLOW_2); 
 
                 	newLeafNode(otherlv_6, grammarAccess.getSlaAccess().getRightParenthesisKeyword_5());
                 
@@ -1439,7 +1841,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleSlo"
-    // InternalDescartesQL.g:614:1: entryRuleSlo returns [EObject current=null] : iv_ruleSlo= ruleSlo EOF ;
+    // InternalDescartesQL.g:782:1: entryRuleSlo returns [EObject current=null] : iv_ruleSlo= ruleSlo EOF ;
     public final EObject entryRuleSlo() throws RecognitionException {
         EObject current = null;
 
@@ -1447,8 +1849,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:615:2: (iv_ruleSlo= ruleSlo EOF )
-            // InternalDescartesQL.g:616:2: iv_ruleSlo= ruleSlo EOF
+            // InternalDescartesQL.g:783:2: (iv_ruleSlo= ruleSlo EOF )
+            // InternalDescartesQL.g:784:2: iv_ruleSlo= ruleSlo EOF
             {
              newCompositeNode(grammarAccess.getSloRule()); 
             pushFollow(FOLLOW_1);
@@ -1475,7 +1877,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleSlo"
-    // InternalDescartesQL.g:623:1: ruleSlo returns [EObject current=null] : ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= ':' ( (lv_metricClauseType_2_0= ruleMetricClauseType ) ) ( (lv_comparator_3_0= ruleComparator ) ) ( (lv_value_4_0= ruleVariableValue ) ) ( (lv_fuz_5_0= ruleFuzziness ) )? ( (lv_pen_6_0= rulePenalty ) )? ) ;
+    // InternalDescartesQL.g:791:1: ruleSlo returns [EObject current=null] : ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= ':' ( (lv_metricClauseType_2_0= ruleMetricClauseType ) ) ( (lv_comparator_3_0= ruleComparator ) ) ( (lv_value_4_0= ruleVariableValue ) ) ( (lv_fuz_5_0= ruleFuzziness ) )? ( (lv_pen_6_0= rulePenalty ) )? ( (lv_violation_7_0= ruleViolation ) )? ) ;
     public final EObject ruleSlo() throws RecognitionException {
         EObject current = null;
 
@@ -1491,23 +1893,25 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
         EObject lv_pen_6_0 = null;
 
+        EObject lv_violation_7_0 = null;
+
 
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:626:28: ( ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= ':' ( (lv_metricClauseType_2_0= ruleMetricClauseType ) ) ( (lv_comparator_3_0= ruleComparator ) ) ( (lv_value_4_0= ruleVariableValue ) ) ( (lv_fuz_5_0= ruleFuzziness ) )? ( (lv_pen_6_0= rulePenalty ) )? ) )
-            // InternalDescartesQL.g:627:1: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= ':' ( (lv_metricClauseType_2_0= ruleMetricClauseType ) ) ( (lv_comparator_3_0= ruleComparator ) ) ( (lv_value_4_0= ruleVariableValue ) ) ( (lv_fuz_5_0= ruleFuzziness ) )? ( (lv_pen_6_0= rulePenalty ) )? )
+            // InternalDescartesQL.g:794:28: ( ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= ':' ( (lv_metricClauseType_2_0= ruleMetricClauseType ) ) ( (lv_comparator_3_0= ruleComparator ) ) ( (lv_value_4_0= ruleVariableValue ) ) ( (lv_fuz_5_0= ruleFuzziness ) )? ( (lv_pen_6_0= rulePenalty ) )? ( (lv_violation_7_0= ruleViolation ) )? ) )
+            // InternalDescartesQL.g:795:1: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= ':' ( (lv_metricClauseType_2_0= ruleMetricClauseType ) ) ( (lv_comparator_3_0= ruleComparator ) ) ( (lv_value_4_0= ruleVariableValue ) ) ( (lv_fuz_5_0= ruleFuzziness ) )? ( (lv_pen_6_0= rulePenalty ) )? ( (lv_violation_7_0= ruleViolation ) )? )
             {
-            // InternalDescartesQL.g:627:1: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= ':' ( (lv_metricClauseType_2_0= ruleMetricClauseType ) ) ( (lv_comparator_3_0= ruleComparator ) ) ( (lv_value_4_0= ruleVariableValue ) ) ( (lv_fuz_5_0= ruleFuzziness ) )? ( (lv_pen_6_0= rulePenalty ) )? )
-            // InternalDescartesQL.g:627:2: ( (lv_name_0_0= RULE_ID ) ) otherlv_1= ':' ( (lv_metricClauseType_2_0= ruleMetricClauseType ) ) ( (lv_comparator_3_0= ruleComparator ) ) ( (lv_value_4_0= ruleVariableValue ) ) ( (lv_fuz_5_0= ruleFuzziness ) )? ( (lv_pen_6_0= rulePenalty ) )?
+            // InternalDescartesQL.g:795:1: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= ':' ( (lv_metricClauseType_2_0= ruleMetricClauseType ) ) ( (lv_comparator_3_0= ruleComparator ) ) ( (lv_value_4_0= ruleVariableValue ) ) ( (lv_fuz_5_0= ruleFuzziness ) )? ( (lv_pen_6_0= rulePenalty ) )? ( (lv_violation_7_0= ruleViolation ) )? )
+            // InternalDescartesQL.g:795:2: ( (lv_name_0_0= RULE_ID ) ) otherlv_1= ':' ( (lv_metricClauseType_2_0= ruleMetricClauseType ) ) ( (lv_comparator_3_0= ruleComparator ) ) ( (lv_value_4_0= ruleVariableValue ) ) ( (lv_fuz_5_0= ruleFuzziness ) )? ( (lv_pen_6_0= rulePenalty ) )? ( (lv_violation_7_0= ruleViolation ) )?
             {
-            // InternalDescartesQL.g:627:2: ( (lv_name_0_0= RULE_ID ) )
-            // InternalDescartesQL.g:628:1: (lv_name_0_0= RULE_ID )
+            // InternalDescartesQL.g:795:2: ( (lv_name_0_0= RULE_ID ) )
+            // InternalDescartesQL.g:796:1: (lv_name_0_0= RULE_ID )
             {
-            // InternalDescartesQL.g:628:1: (lv_name_0_0= RULE_ID )
-            // InternalDescartesQL.g:629:3: lv_name_0_0= RULE_ID
+            // InternalDescartesQL.g:796:1: (lv_name_0_0= RULE_ID )
+            // InternalDescartesQL.g:797:3: lv_name_0_0= RULE_ID
             {
-            lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_12); 
+            lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_16); 
 
             			newLeafNode(lv_name_0_0, grammarAccess.getSloAccess().getNameIDTerminalRuleCall_0_0()); 
             		
@@ -1527,20 +1931,20 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            otherlv_1=(Token)match(input,21,FOLLOW_13); 
+            otherlv_1=(Token)match(input,25,FOLLOW_17); 
 
                 	newLeafNode(otherlv_1, grammarAccess.getSloAccess().getColonKeyword_1());
                 
-            // InternalDescartesQL.g:649:1: ( (lv_metricClauseType_2_0= ruleMetricClauseType ) )
-            // InternalDescartesQL.g:650:1: (lv_metricClauseType_2_0= ruleMetricClauseType )
+            // InternalDescartesQL.g:817:1: ( (lv_metricClauseType_2_0= ruleMetricClauseType ) )
+            // InternalDescartesQL.g:818:1: (lv_metricClauseType_2_0= ruleMetricClauseType )
             {
-            // InternalDescartesQL.g:650:1: (lv_metricClauseType_2_0= ruleMetricClauseType )
-            // InternalDescartesQL.g:651:3: lv_metricClauseType_2_0= ruleMetricClauseType
+            // InternalDescartesQL.g:818:1: (lv_metricClauseType_2_0= ruleMetricClauseType )
+            // InternalDescartesQL.g:819:3: lv_metricClauseType_2_0= ruleMetricClauseType
             {
              
             	        newCompositeNode(grammarAccess.getSloAccess().getMetricClauseTypeMetricClauseTypeParserRuleCall_2_0()); 
             	    
-            pushFollow(FOLLOW_14);
+            pushFollow(FOLLOW_18);
             lv_metricClauseType_2_0=ruleMetricClauseType();
 
             state._fsp--;
@@ -1562,16 +1966,16 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:667:2: ( (lv_comparator_3_0= ruleComparator ) )
-            // InternalDescartesQL.g:668:1: (lv_comparator_3_0= ruleComparator )
+            // InternalDescartesQL.g:835:2: ( (lv_comparator_3_0= ruleComparator ) )
+            // InternalDescartesQL.g:836:1: (lv_comparator_3_0= ruleComparator )
             {
-            // InternalDescartesQL.g:668:1: (lv_comparator_3_0= ruleComparator )
-            // InternalDescartesQL.g:669:3: lv_comparator_3_0= ruleComparator
+            // InternalDescartesQL.g:836:1: (lv_comparator_3_0= ruleComparator )
+            // InternalDescartesQL.g:837:3: lv_comparator_3_0= ruleComparator
             {
              
             	        newCompositeNode(grammarAccess.getSloAccess().getComparatorComparatorEnumRuleCall_3_0()); 
             	    
-            pushFollow(FOLLOW_15);
+            pushFollow(FOLLOW_19);
             lv_comparator_3_0=ruleComparator();
 
             state._fsp--;
@@ -1593,16 +1997,16 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:685:2: ( (lv_value_4_0= ruleVariableValue ) )
-            // InternalDescartesQL.g:686:1: (lv_value_4_0= ruleVariableValue )
+            // InternalDescartesQL.g:853:2: ( (lv_value_4_0= ruleVariableValue ) )
+            // InternalDescartesQL.g:854:1: (lv_value_4_0= ruleVariableValue )
             {
-            // InternalDescartesQL.g:686:1: (lv_value_4_0= ruleVariableValue )
-            // InternalDescartesQL.g:687:3: lv_value_4_0= ruleVariableValue
+            // InternalDescartesQL.g:854:1: (lv_value_4_0= ruleVariableValue )
+            // InternalDescartesQL.g:855:3: lv_value_4_0= ruleVariableValue
             {
              
             	        newCompositeNode(grammarAccess.getSloAccess().getValueVariableValueParserRuleCall_4_0()); 
             	    
-            pushFollow(FOLLOW_16);
+            pushFollow(FOLLOW_20);
             lv_value_4_0=ruleVariableValue();
 
             state._fsp--;
@@ -1624,24 +2028,24 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:703:2: ( (lv_fuz_5_0= ruleFuzziness ) )?
-            int alt9=2;
-            int LA9_0 = input.LA(1);
+            // InternalDescartesQL.g:871:2: ( (lv_fuz_5_0= ruleFuzziness ) )?
+            int alt14=2;
+            int LA14_0 = input.LA(1);
 
-            if ( (LA9_0==23) ) {
-                alt9=1;
+            if ( (LA14_0==27) ) {
+                alt14=1;
             }
-            switch (alt9) {
+            switch (alt14) {
                 case 1 :
-                    // InternalDescartesQL.g:704:1: (lv_fuz_5_0= ruleFuzziness )
+                    // InternalDescartesQL.g:872:1: (lv_fuz_5_0= ruleFuzziness )
                     {
-                    // InternalDescartesQL.g:704:1: (lv_fuz_5_0= ruleFuzziness )
-                    // InternalDescartesQL.g:705:3: lv_fuz_5_0= ruleFuzziness
+                    // InternalDescartesQL.g:872:1: (lv_fuz_5_0= ruleFuzziness )
+                    // InternalDescartesQL.g:873:3: lv_fuz_5_0= ruleFuzziness
                     {
                      
                     	        newCompositeNode(grammarAccess.getSloAccess().getFuzFuzzinessParserRuleCall_5_0()); 
                     	    
-                    pushFollow(FOLLOW_17);
+                    pushFollow(FOLLOW_21);
                     lv_fuz_5_0=ruleFuzziness();
 
                     state._fsp--;
@@ -1666,24 +2070,24 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:721:3: ( (lv_pen_6_0= rulePenalty ) )?
-            int alt10=2;
-            int LA10_0 = input.LA(1);
+            // InternalDescartesQL.g:889:3: ( (lv_pen_6_0= rulePenalty ) )?
+            int alt15=2;
+            int LA15_0 = input.LA(1);
 
-            if ( (LA10_0==24) ) {
-                alt10=1;
+            if ( (LA15_0==28) ) {
+                alt15=1;
             }
-            switch (alt10) {
+            switch (alt15) {
                 case 1 :
-                    // InternalDescartesQL.g:722:1: (lv_pen_6_0= rulePenalty )
+                    // InternalDescartesQL.g:890:1: (lv_pen_6_0= rulePenalty )
                     {
-                    // InternalDescartesQL.g:722:1: (lv_pen_6_0= rulePenalty )
-                    // InternalDescartesQL.g:723:3: lv_pen_6_0= rulePenalty
+                    // InternalDescartesQL.g:890:1: (lv_pen_6_0= rulePenalty )
+                    // InternalDescartesQL.g:891:3: lv_pen_6_0= rulePenalty
                     {
                      
                     	        newCompositeNode(grammarAccess.getSloAccess().getPenPenaltyParserRuleCall_6_0()); 
                     	    
-                    pushFollow(FOLLOW_2);
+                    pushFollow(FOLLOW_22);
                     lv_pen_6_0=rulePenalty();
 
                     state._fsp--;
@@ -1708,6 +2112,48 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
+            // InternalDescartesQL.g:907:3: ( (lv_violation_7_0= ruleViolation ) )?
+            int alt16=2;
+            int LA16_0 = input.LA(1);
+
+            if ( (LA16_0==17||LA16_0==29) ) {
+                alt16=1;
+            }
+            switch (alt16) {
+                case 1 :
+                    // InternalDescartesQL.g:908:1: (lv_violation_7_0= ruleViolation )
+                    {
+                    // InternalDescartesQL.g:908:1: (lv_violation_7_0= ruleViolation )
+                    // InternalDescartesQL.g:909:3: lv_violation_7_0= ruleViolation
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getSloAccess().getViolationViolationParserRuleCall_7_0()); 
+                    	    
+                    pushFollow(FOLLOW_2);
+                    lv_violation_7_0=ruleViolation();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getSloRule());
+                    	        }
+                           		set(
+                           			current, 
+                           			"violation",
+                            		lv_violation_7_0, 
+                            		"tools.descartes.dql.lang.DescartesQL.Violation");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
 
             }
 
@@ -1729,7 +2175,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleWeightedSlo"
-    // InternalDescartesQL.g:747:1: entryRuleWeightedSlo returns [EObject current=null] : iv_ruleWeightedSlo= ruleWeightedSlo EOF ;
+    // InternalDescartesQL.g:933:1: entryRuleWeightedSlo returns [EObject current=null] : iv_ruleWeightedSlo= ruleWeightedSlo EOF ;
     public final EObject entryRuleWeightedSlo() throws RecognitionException {
         EObject current = null;
 
@@ -1737,8 +2183,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:748:2: (iv_ruleWeightedSlo= ruleWeightedSlo EOF )
-            // InternalDescartesQL.g:749:2: iv_ruleWeightedSlo= ruleWeightedSlo EOF
+            // InternalDescartesQL.g:934:2: (iv_ruleWeightedSlo= ruleWeightedSlo EOF )
+            // InternalDescartesQL.g:935:2: iv_ruleWeightedSlo= ruleWeightedSlo EOF
             {
              newCompositeNode(grammarAccess.getWeightedSloRule()); 
             pushFollow(FOLLOW_1);
@@ -1765,7 +2211,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleWeightedSlo"
-    // InternalDescartesQL.g:756:1: ruleWeightedSlo returns [EObject current=null] : ( ( (otherlv_0= RULE_ID ) ) (otherlv_1= '*' ( (lv_weight_2_0= RULE_INT ) ) )? ) ;
+    // InternalDescartesQL.g:942:1: ruleWeightedSlo returns [EObject current=null] : ( ( (otherlv_0= RULE_ID ) ) (otherlv_1= '*' ( (lv_weight_2_0= RULE_INT ) ) )? ) ;
     public final EObject ruleWeightedSlo() throws RecognitionException {
         EObject current = null;
 
@@ -1776,24 +2222,24 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:759:28: ( ( ( (otherlv_0= RULE_ID ) ) (otherlv_1= '*' ( (lv_weight_2_0= RULE_INT ) ) )? ) )
-            // InternalDescartesQL.g:760:1: ( ( (otherlv_0= RULE_ID ) ) (otherlv_1= '*' ( (lv_weight_2_0= RULE_INT ) ) )? )
+            // InternalDescartesQL.g:945:28: ( ( ( (otherlv_0= RULE_ID ) ) (otherlv_1= '*' ( (lv_weight_2_0= RULE_INT ) ) )? ) )
+            // InternalDescartesQL.g:946:1: ( ( (otherlv_0= RULE_ID ) ) (otherlv_1= '*' ( (lv_weight_2_0= RULE_INT ) ) )? )
             {
-            // InternalDescartesQL.g:760:1: ( ( (otherlv_0= RULE_ID ) ) (otherlv_1= '*' ( (lv_weight_2_0= RULE_INT ) ) )? )
-            // InternalDescartesQL.g:760:2: ( (otherlv_0= RULE_ID ) ) (otherlv_1= '*' ( (lv_weight_2_0= RULE_INT ) ) )?
+            // InternalDescartesQL.g:946:1: ( ( (otherlv_0= RULE_ID ) ) (otherlv_1= '*' ( (lv_weight_2_0= RULE_INT ) ) )? )
+            // InternalDescartesQL.g:946:2: ( (otherlv_0= RULE_ID ) ) (otherlv_1= '*' ( (lv_weight_2_0= RULE_INT ) ) )?
             {
-            // InternalDescartesQL.g:760:2: ( (otherlv_0= RULE_ID ) )
-            // InternalDescartesQL.g:761:1: (otherlv_0= RULE_ID )
+            // InternalDescartesQL.g:946:2: ( (otherlv_0= RULE_ID ) )
+            // InternalDescartesQL.g:947:1: (otherlv_0= RULE_ID )
             {
-            // InternalDescartesQL.g:761:1: (otherlv_0= RULE_ID )
-            // InternalDescartesQL.g:762:3: otherlv_0= RULE_ID
+            // InternalDescartesQL.g:947:1: (otherlv_0= RULE_ID )
+            // InternalDescartesQL.g:948:3: otherlv_0= RULE_ID
             {
 
             			if (current==null) {
             	            current = createModelElement(grammarAccess.getWeightedSloRule());
             	        }
                     
-            otherlv_0=(Token)match(input,RULE_ID,FOLLOW_18); 
+            otherlv_0=(Token)match(input,RULE_ID,FOLLOW_23); 
 
             		newLeafNode(otherlv_0, grammarAccess.getWeightedSloAccess().getSloSloCrossReference_0_0()); 
             	
@@ -1803,26 +2249,26 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:773:2: (otherlv_1= '*' ( (lv_weight_2_0= RULE_INT ) ) )?
-            int alt11=2;
-            int LA11_0 = input.LA(1);
+            // InternalDescartesQL.g:959:2: (otherlv_1= '*' ( (lv_weight_2_0= RULE_INT ) ) )?
+            int alt17=2;
+            int LA17_0 = input.LA(1);
 
-            if ( (LA11_0==22) ) {
-                alt11=1;
+            if ( (LA17_0==26) ) {
+                alt17=1;
             }
-            switch (alt11) {
+            switch (alt17) {
                 case 1 :
-                    // InternalDescartesQL.g:773:4: otherlv_1= '*' ( (lv_weight_2_0= RULE_INT ) )
+                    // InternalDescartesQL.g:959:4: otherlv_1= '*' ( (lv_weight_2_0= RULE_INT ) )
                     {
-                    otherlv_1=(Token)match(input,22,FOLLOW_19); 
+                    otherlv_1=(Token)match(input,26,FOLLOW_24); 
 
                         	newLeafNode(otherlv_1, grammarAccess.getWeightedSloAccess().getAsteriskKeyword_1_0());
                         
-                    // InternalDescartesQL.g:777:1: ( (lv_weight_2_0= RULE_INT ) )
-                    // InternalDescartesQL.g:778:1: (lv_weight_2_0= RULE_INT )
+                    // InternalDescartesQL.g:963:1: ( (lv_weight_2_0= RULE_INT ) )
+                    // InternalDescartesQL.g:964:1: (lv_weight_2_0= RULE_INT )
                     {
-                    // InternalDescartesQL.g:778:1: (lv_weight_2_0= RULE_INT )
-                    // InternalDescartesQL.g:779:3: lv_weight_2_0= RULE_INT
+                    // InternalDescartesQL.g:964:1: (lv_weight_2_0= RULE_INT )
+                    // InternalDescartesQL.g:965:3: lv_weight_2_0= RULE_INT
                     {
                     lv_weight_2_0=(Token)match(input,RULE_INT,FOLLOW_2); 
 
@@ -1871,7 +2317,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleFuzziness"
-    // InternalDescartesQL.g:803:1: entryRuleFuzziness returns [EObject current=null] : iv_ruleFuzziness= ruleFuzziness EOF ;
+    // InternalDescartesQL.g:989:1: entryRuleFuzziness returns [EObject current=null] : iv_ruleFuzziness= ruleFuzziness EOF ;
     public final EObject entryRuleFuzziness() throws RecognitionException {
         EObject current = null;
 
@@ -1879,8 +2325,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:804:2: (iv_ruleFuzziness= ruleFuzziness EOF )
-            // InternalDescartesQL.g:805:2: iv_ruleFuzziness= ruleFuzziness EOF
+            // InternalDescartesQL.g:990:2: (iv_ruleFuzziness= ruleFuzziness EOF )
+            // InternalDescartesQL.g:991:2: iv_ruleFuzziness= ruleFuzziness EOF
             {
              newCompositeNode(grammarAccess.getFuzzinessRule()); 
             pushFollow(FOLLOW_1);
@@ -1907,7 +2353,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleFuzziness"
-    // InternalDescartesQL.g:812:1: ruleFuzziness returns [EObject current=null] : ( ( (lv_type_0_0= 'FUZZINESS' ) ) ( (lv_deviation_1_0= ruleVariableValue ) ) ) ;
+    // InternalDescartesQL.g:998:1: ruleFuzziness returns [EObject current=null] : ( ( (lv_type_0_0= 'FUZZINESS' ) ) ( (lv_deviation_1_0= ruleVariableValue ) ) ) ;
     public final EObject ruleFuzziness() throws RecognitionException {
         EObject current = null;
 
@@ -1918,19 +2364,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:815:28: ( ( ( (lv_type_0_0= 'FUZZINESS' ) ) ( (lv_deviation_1_0= ruleVariableValue ) ) ) )
-            // InternalDescartesQL.g:816:1: ( ( (lv_type_0_0= 'FUZZINESS' ) ) ( (lv_deviation_1_0= ruleVariableValue ) ) )
+            // InternalDescartesQL.g:1001:28: ( ( ( (lv_type_0_0= 'FUZZINESS' ) ) ( (lv_deviation_1_0= ruleVariableValue ) ) ) )
+            // InternalDescartesQL.g:1002:1: ( ( (lv_type_0_0= 'FUZZINESS' ) ) ( (lv_deviation_1_0= ruleVariableValue ) ) )
             {
-            // InternalDescartesQL.g:816:1: ( ( (lv_type_0_0= 'FUZZINESS' ) ) ( (lv_deviation_1_0= ruleVariableValue ) ) )
-            // InternalDescartesQL.g:816:2: ( (lv_type_0_0= 'FUZZINESS' ) ) ( (lv_deviation_1_0= ruleVariableValue ) )
+            // InternalDescartesQL.g:1002:1: ( ( (lv_type_0_0= 'FUZZINESS' ) ) ( (lv_deviation_1_0= ruleVariableValue ) ) )
+            // InternalDescartesQL.g:1002:2: ( (lv_type_0_0= 'FUZZINESS' ) ) ( (lv_deviation_1_0= ruleVariableValue ) )
             {
-            // InternalDescartesQL.g:816:2: ( (lv_type_0_0= 'FUZZINESS' ) )
-            // InternalDescartesQL.g:817:1: (lv_type_0_0= 'FUZZINESS' )
+            // InternalDescartesQL.g:1002:2: ( (lv_type_0_0= 'FUZZINESS' ) )
+            // InternalDescartesQL.g:1003:1: (lv_type_0_0= 'FUZZINESS' )
             {
-            // InternalDescartesQL.g:817:1: (lv_type_0_0= 'FUZZINESS' )
-            // InternalDescartesQL.g:818:3: lv_type_0_0= 'FUZZINESS'
+            // InternalDescartesQL.g:1003:1: (lv_type_0_0= 'FUZZINESS' )
+            // InternalDescartesQL.g:1004:3: lv_type_0_0= 'FUZZINESS'
             {
-            lv_type_0_0=(Token)match(input,23,FOLLOW_15); 
+            lv_type_0_0=(Token)match(input,27,FOLLOW_19); 
 
                     newLeafNode(lv_type_0_0, grammarAccess.getFuzzinessAccess().getTypeFUZZINESSKeyword_0_0());
                 
@@ -1946,11 +2392,11 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:831:2: ( (lv_deviation_1_0= ruleVariableValue ) )
-            // InternalDescartesQL.g:832:1: (lv_deviation_1_0= ruleVariableValue )
+            // InternalDescartesQL.g:1017:2: ( (lv_deviation_1_0= ruleVariableValue ) )
+            // InternalDescartesQL.g:1018:1: (lv_deviation_1_0= ruleVariableValue )
             {
-            // InternalDescartesQL.g:832:1: (lv_deviation_1_0= ruleVariableValue )
-            // InternalDescartesQL.g:833:3: lv_deviation_1_0= ruleVariableValue
+            // InternalDescartesQL.g:1018:1: (lv_deviation_1_0= ruleVariableValue )
+            // InternalDescartesQL.g:1019:3: lv_deviation_1_0= ruleVariableValue
             {
              
             	        newCompositeNode(grammarAccess.getFuzzinessAccess().getDeviationVariableValueParserRuleCall_1_0()); 
@@ -1998,7 +2444,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRulePenalty"
-    // InternalDescartesQL.g:857:1: entryRulePenalty returns [EObject current=null] : iv_rulePenalty= rulePenalty EOF ;
+    // InternalDescartesQL.g:1043:1: entryRulePenalty returns [EObject current=null] : iv_rulePenalty= rulePenalty EOF ;
     public final EObject entryRulePenalty() throws RecognitionException {
         EObject current = null;
 
@@ -2006,8 +2452,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:858:2: (iv_rulePenalty= rulePenalty EOF )
-            // InternalDescartesQL.g:859:2: iv_rulePenalty= rulePenalty EOF
+            // InternalDescartesQL.g:1044:2: (iv_rulePenalty= rulePenalty EOF )
+            // InternalDescartesQL.g:1045:2: iv_rulePenalty= rulePenalty EOF
             {
              newCompositeNode(grammarAccess.getPenaltyRule()); 
             pushFollow(FOLLOW_1);
@@ -2034,7 +2480,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "rulePenalty"
-    // InternalDescartesQL.g:866:1: rulePenalty returns [EObject current=null] : ( ( (lv_type_0_0= 'PENALTY' ) ) ( (lv_value_1_0= RULE_DOUBLE ) ) ( (lv_currency_2_0= ruleCurrency ) ) ( (lv_violation_3_0= ruleViolation ) )? ) ;
+    // InternalDescartesQL.g:1052:1: rulePenalty returns [EObject current=null] : ( ( (lv_type_0_0= 'PENALTY' ) ) ( (lv_value_1_0= RULE_DOUBLE ) ) ( (lv_currency_2_0= ruleCurrency ) )? ) ;
     public final EObject rulePenalty() throws RecognitionException {
         EObject current = null;
 
@@ -2042,25 +2488,23 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
         Token lv_value_1_0=null;
         Enumerator lv_currency_2_0 = null;
 
-        EObject lv_violation_3_0 = null;
-
 
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:869:28: ( ( ( (lv_type_0_0= 'PENALTY' ) ) ( (lv_value_1_0= RULE_DOUBLE ) ) ( (lv_currency_2_0= ruleCurrency ) ) ( (lv_violation_3_0= ruleViolation ) )? ) )
-            // InternalDescartesQL.g:870:1: ( ( (lv_type_0_0= 'PENALTY' ) ) ( (lv_value_1_0= RULE_DOUBLE ) ) ( (lv_currency_2_0= ruleCurrency ) ) ( (lv_violation_3_0= ruleViolation ) )? )
+            // InternalDescartesQL.g:1055:28: ( ( ( (lv_type_0_0= 'PENALTY' ) ) ( (lv_value_1_0= RULE_DOUBLE ) ) ( (lv_currency_2_0= ruleCurrency ) )? ) )
+            // InternalDescartesQL.g:1056:1: ( ( (lv_type_0_0= 'PENALTY' ) ) ( (lv_value_1_0= RULE_DOUBLE ) ) ( (lv_currency_2_0= ruleCurrency ) )? )
             {
-            // InternalDescartesQL.g:870:1: ( ( (lv_type_0_0= 'PENALTY' ) ) ( (lv_value_1_0= RULE_DOUBLE ) ) ( (lv_currency_2_0= ruleCurrency ) ) ( (lv_violation_3_0= ruleViolation ) )? )
-            // InternalDescartesQL.g:870:2: ( (lv_type_0_0= 'PENALTY' ) ) ( (lv_value_1_0= RULE_DOUBLE ) ) ( (lv_currency_2_0= ruleCurrency ) ) ( (lv_violation_3_0= ruleViolation ) )?
+            // InternalDescartesQL.g:1056:1: ( ( (lv_type_0_0= 'PENALTY' ) ) ( (lv_value_1_0= RULE_DOUBLE ) ) ( (lv_currency_2_0= ruleCurrency ) )? )
+            // InternalDescartesQL.g:1056:2: ( (lv_type_0_0= 'PENALTY' ) ) ( (lv_value_1_0= RULE_DOUBLE ) ) ( (lv_currency_2_0= ruleCurrency ) )?
             {
-            // InternalDescartesQL.g:870:2: ( (lv_type_0_0= 'PENALTY' ) )
-            // InternalDescartesQL.g:871:1: (lv_type_0_0= 'PENALTY' )
+            // InternalDescartesQL.g:1056:2: ( (lv_type_0_0= 'PENALTY' ) )
+            // InternalDescartesQL.g:1057:1: (lv_type_0_0= 'PENALTY' )
             {
-            // InternalDescartesQL.g:871:1: (lv_type_0_0= 'PENALTY' )
-            // InternalDescartesQL.g:872:3: lv_type_0_0= 'PENALTY'
+            // InternalDescartesQL.g:1057:1: (lv_type_0_0= 'PENALTY' )
+            // InternalDescartesQL.g:1058:3: lv_type_0_0= 'PENALTY'
             {
-            lv_type_0_0=(Token)match(input,24,FOLLOW_20); 
+            lv_type_0_0=(Token)match(input,28,FOLLOW_9); 
 
                     newLeafNode(lv_type_0_0, grammarAccess.getPenaltyAccess().getTypePENALTYKeyword_0_0());
                 
@@ -2076,13 +2520,13 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:885:2: ( (lv_value_1_0= RULE_DOUBLE ) )
-            // InternalDescartesQL.g:886:1: (lv_value_1_0= RULE_DOUBLE )
+            // InternalDescartesQL.g:1071:2: ( (lv_value_1_0= RULE_DOUBLE ) )
+            // InternalDescartesQL.g:1072:1: (lv_value_1_0= RULE_DOUBLE )
             {
-            // InternalDescartesQL.g:886:1: (lv_value_1_0= RULE_DOUBLE )
-            // InternalDescartesQL.g:887:3: lv_value_1_0= RULE_DOUBLE
+            // InternalDescartesQL.g:1072:1: (lv_value_1_0= RULE_DOUBLE )
+            // InternalDescartesQL.g:1073:3: lv_value_1_0= RULE_DOUBLE
             {
-            lv_value_1_0=(Token)match(input,RULE_DOUBLE,FOLLOW_21); 
+            lv_value_1_0=(Token)match(input,RULE_DOUBLE,FOLLOW_25); 
 
             			newLeafNode(lv_value_1_0, grammarAccess.getPenaltyAccess().getValueDOUBLETerminalRuleCall_1_0()); 
             		
@@ -2102,56 +2546,25 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:903:2: ( (lv_currency_2_0= ruleCurrency ) )
-            // InternalDescartesQL.g:904:1: (lv_currency_2_0= ruleCurrency )
-            {
-            // InternalDescartesQL.g:904:1: (lv_currency_2_0= ruleCurrency )
-            // InternalDescartesQL.g:905:3: lv_currency_2_0= ruleCurrency
-            {
-             
-            	        newCompositeNode(grammarAccess.getPenaltyAccess().getCurrencyCurrencyEnumRuleCall_2_0()); 
-            	    
-            pushFollow(FOLLOW_22);
-            lv_currency_2_0=ruleCurrency();
-
-            state._fsp--;
-
-
-            	        if (current==null) {
-            	            current = createModelElementForParent(grammarAccess.getPenaltyRule());
-            	        }
-                   		set(
-                   			current, 
-                   			"currency",
-                    		lv_currency_2_0, 
-                    		"tools.descartes.dql.lang.DescartesQL.Currency");
-            	        afterParserOrEnumRuleCall();
-            	    
-
-            }
-
-
-            }
-
-            // InternalDescartesQL.g:921:2: ( (lv_violation_3_0= ruleViolation ) )?
-            int alt12=2;
-            int LA12_0 = input.LA(1);
+            // InternalDescartesQL.g:1089:2: ( (lv_currency_2_0= ruleCurrency ) )?
+            int alt18=2;
+            int LA18_0 = input.LA(1);
 
-            if ( (LA12_0==25) ) {
-                alt12=1;
+            if ( ((LA18_0>=79 && LA18_0<=80)) ) {
+                alt18=1;
             }
-            switch (alt12) {
+            switch (alt18) {
                 case 1 :
-                    // InternalDescartesQL.g:922:1: (lv_violation_3_0= ruleViolation )
+                    // InternalDescartesQL.g:1090:1: (lv_currency_2_0= ruleCurrency )
                     {
-                    // InternalDescartesQL.g:922:1: (lv_violation_3_0= ruleViolation )
-                    // InternalDescartesQL.g:923:3: lv_violation_3_0= ruleViolation
+                    // InternalDescartesQL.g:1090:1: (lv_currency_2_0= ruleCurrency )
+                    // InternalDescartesQL.g:1091:3: lv_currency_2_0= ruleCurrency
                     {
                      
-                    	        newCompositeNode(grammarAccess.getPenaltyAccess().getViolationViolationParserRuleCall_3_0()); 
+                    	        newCompositeNode(grammarAccess.getPenaltyAccess().getCurrencyCurrencyEnumRuleCall_2_0()); 
                     	    
                     pushFollow(FOLLOW_2);
-                    lv_violation_3_0=ruleViolation();
+                    lv_currency_2_0=ruleCurrency();
 
                     state._fsp--;
 
@@ -2161,9 +2574,9 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     	        }
                            		set(
                            			current, 
-                           			"violation",
-                            		lv_violation_3_0, 
-                            		"tools.descartes.dql.lang.DescartesQL.Violation");
+                           			"currency",
+                            		lv_currency_2_0, 
+                            		"tools.descartes.dql.lang.DescartesQL.Currency");
                     	        afterParserOrEnumRuleCall();
                     	    
 
@@ -2196,7 +2609,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleViolation"
-    // InternalDescartesQL.g:947:1: entryRuleViolation returns [EObject current=null] : iv_ruleViolation= ruleViolation EOF ;
+    // InternalDescartesQL.g:1115:1: entryRuleViolation returns [EObject current=null] : iv_ruleViolation= ruleViolation EOF ;
     public final EObject entryRuleViolation() throws RecognitionException {
         EObject current = null;
 
@@ -2204,8 +2617,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:948:2: (iv_ruleViolation= ruleViolation EOF )
-            // InternalDescartesQL.g:949:2: iv_ruleViolation= ruleViolation EOF
+            // InternalDescartesQL.g:1116:2: (iv_ruleViolation= ruleViolation EOF )
+            // InternalDescartesQL.g:1117:2: iv_ruleViolation= ruleViolation EOF
             {
              newCompositeNode(grammarAccess.getViolationRule()); 
             pushFollow(FOLLOW_1);
@@ -2231,58 +2644,133 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
     // $ANTLR end "entryRuleViolation"
 
 
-    // $ANTLR start "ruleViolation"
-    // InternalDescartesQL.g:956:1: ruleViolation returns [EObject current=null] : (otherlv_0= 'PER' ( (lv_amount_1_0= RULE_INT ) ) otherlv_2= 'VIOLATIONS' ) ;
-    public final EObject ruleViolation() throws RecognitionException {
-        EObject current = null;
+    // $ANTLR start "ruleViolation"
+    // InternalDescartesQL.g:1124:1: ruleViolation returns [EObject current=null] : ( (otherlv_0= 'PER' ( (lv_amount_1_0= RULE_INT ) ) otherlv_2= 'VIOLATIONS' ) | (otherlv_3= 'SATISFACTION-LEVEL' ( (lv_percentage_4_0= RULE_DOUBLE ) ) otherlv_5= 'PERCENT' ) ) ;
+    public final EObject ruleViolation() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token lv_amount_1_0=null;
+        Token otherlv_2=null;
+        Token otherlv_3=null;
+        Token lv_percentage_4_0=null;
+        Token otherlv_5=null;
+
+         enterRule(); 
+            
+        try {
+            // InternalDescartesQL.g:1127:28: ( ( (otherlv_0= 'PER' ( (lv_amount_1_0= RULE_INT ) ) otherlv_2= 'VIOLATIONS' ) | (otherlv_3= 'SATISFACTION-LEVEL' ( (lv_percentage_4_0= RULE_DOUBLE ) ) otherlv_5= 'PERCENT' ) ) )
+            // InternalDescartesQL.g:1128:1: ( (otherlv_0= 'PER' ( (lv_amount_1_0= RULE_INT ) ) otherlv_2= 'VIOLATIONS' ) | (otherlv_3= 'SATISFACTION-LEVEL' ( (lv_percentage_4_0= RULE_DOUBLE ) ) otherlv_5= 'PERCENT' ) )
+            {
+            // InternalDescartesQL.g:1128:1: ( (otherlv_0= 'PER' ( (lv_amount_1_0= RULE_INT ) ) otherlv_2= 'VIOLATIONS' ) | (otherlv_3= 'SATISFACTION-LEVEL' ( (lv_percentage_4_0= RULE_DOUBLE ) ) otherlv_5= 'PERCENT' ) )
+            int alt19=2;
+            int LA19_0 = input.LA(1);
+
+            if ( (LA19_0==29) ) {
+                alt19=1;
+            }
+            else if ( (LA19_0==17) ) {
+                alt19=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 19, 0, input);
+
+                throw nvae;
+            }
+            switch (alt19) {
+                case 1 :
+                    // InternalDescartesQL.g:1128:2: (otherlv_0= 'PER' ( (lv_amount_1_0= RULE_INT ) ) otherlv_2= 'VIOLATIONS' )
+                    {
+                    // InternalDescartesQL.g:1128:2: (otherlv_0= 'PER' ( (lv_amount_1_0= RULE_INT ) ) otherlv_2= 'VIOLATIONS' )
+                    // InternalDescartesQL.g:1128:4: otherlv_0= 'PER' ( (lv_amount_1_0= RULE_INT ) ) otherlv_2= 'VIOLATIONS'
+                    {
+                    otherlv_0=(Token)match(input,29,FOLLOW_24); 
+
+                        	newLeafNode(otherlv_0, grammarAccess.getViolationAccess().getPERKeyword_0_0());
+                        
+                    // InternalDescartesQL.g:1132:1: ( (lv_amount_1_0= RULE_INT ) )
+                    // InternalDescartesQL.g:1133:1: (lv_amount_1_0= RULE_INT )
+                    {
+                    // InternalDescartesQL.g:1133:1: (lv_amount_1_0= RULE_INT )
+                    // InternalDescartesQL.g:1134:3: lv_amount_1_0= RULE_INT
+                    {
+                    lv_amount_1_0=(Token)match(input,RULE_INT,FOLLOW_26); 
+
+                    			newLeafNode(lv_amount_1_0, grammarAccess.getViolationAccess().getAmountINTTerminalRuleCall_0_1_0()); 
+                    		
+
+                    	        if (current==null) {
+                    	            current = createModelElement(grammarAccess.getViolationRule());
+                    	        }
+                           		setWithLastConsumed(
+                           			current, 
+                           			"amount",
+                            		lv_amount_1_0, 
+                            		"org.eclipse.xtext.common.Terminals.INT");
+                    	    
+
+                    }
+
+
+                    }
+
+                    otherlv_2=(Token)match(input,30,FOLLOW_2); 
+
+                        	newLeafNode(otherlv_2, grammarAccess.getViolationAccess().getVIOLATIONSKeyword_0_2());
+                        
 
-        Token otherlv_0=null;
-        Token lv_amount_1_0=null;
-        Token otherlv_2=null;
+                    }
 
-         enterRule(); 
-            
-        try {
-            // InternalDescartesQL.g:959:28: ( (otherlv_0= 'PER' ( (lv_amount_1_0= RULE_INT ) ) otherlv_2= 'VIOLATIONS' ) )
-            // InternalDescartesQL.g:960:1: (otherlv_0= 'PER' ( (lv_amount_1_0= RULE_INT ) ) otherlv_2= 'VIOLATIONS' )
-            {
-            // InternalDescartesQL.g:960:1: (otherlv_0= 'PER' ( (lv_amount_1_0= RULE_INT ) ) otherlv_2= 'VIOLATIONS' )
-            // InternalDescartesQL.g:960:3: otherlv_0= 'PER' ( (lv_amount_1_0= RULE_INT ) ) otherlv_2= 'VIOLATIONS'
-            {
-            otherlv_0=(Token)match(input,25,FOLLOW_19); 
 
-                	newLeafNode(otherlv_0, grammarAccess.getViolationAccess().getPERKeyword_0());
-                
-            // InternalDescartesQL.g:964:1: ( (lv_amount_1_0= RULE_INT ) )
-            // InternalDescartesQL.g:965:1: (lv_amount_1_0= RULE_INT )
-            {
-            // InternalDescartesQL.g:965:1: (lv_amount_1_0= RULE_INT )
-            // InternalDescartesQL.g:966:3: lv_amount_1_0= RULE_INT
-            {
-            lv_amount_1_0=(Token)match(input,RULE_INT,FOLLOW_23); 
+                    }
+                    break;
+                case 2 :
+                    // InternalDescartesQL.g:1155:6: (otherlv_3= 'SATISFACTION-LEVEL' ( (lv_percentage_4_0= RULE_DOUBLE ) ) otherlv_5= 'PERCENT' )
+                    {
+                    // InternalDescartesQL.g:1155:6: (otherlv_3= 'SATISFACTION-LEVEL' ( (lv_percentage_4_0= RULE_DOUBLE ) ) otherlv_5= 'PERCENT' )
+                    // InternalDescartesQL.g:1155:8: otherlv_3= 'SATISFACTION-LEVEL' ( (lv_percentage_4_0= RULE_DOUBLE ) ) otherlv_5= 'PERCENT'
+                    {
+                    otherlv_3=(Token)match(input,17,FOLLOW_9); 
 
-            			newLeafNode(lv_amount_1_0, grammarAccess.getViolationAccess().getAmountINTTerminalRuleCall_1_0()); 
-            		
+                        	newLeafNode(otherlv_3, grammarAccess.getViolationAccess().getSATISFACTIONLEVELKeyword_1_0());
+                        
+                    // InternalDescartesQL.g:1159:1: ( (lv_percentage_4_0= RULE_DOUBLE ) )
+                    // InternalDescartesQL.g:1160:1: (lv_percentage_4_0= RULE_DOUBLE )
+                    {
+                    // InternalDescartesQL.g:1160:1: (lv_percentage_4_0= RULE_DOUBLE )
+                    // InternalDescartesQL.g:1161:3: lv_percentage_4_0= RULE_DOUBLE
+                    {
+                    lv_percentage_4_0=(Token)match(input,RULE_DOUBLE,FOLLOW_10); 
 
-            	        if (current==null) {
-            	            current = createModelElement(grammarAccess.getViolationRule());
-            	        }
-                   		setWithLastConsumed(
-                   			current, 
-                   			"amount",
-                    		lv_amount_1_0, 
-                    		"org.eclipse.xtext.common.Terminals.INT");
-            	    
+                    			newLeafNode(lv_percentage_4_0, grammarAccess.getViolationAccess().getPercentageDOUBLETerminalRuleCall_1_1_0()); 
+                    		
 
-            }
+                    	        if (current==null) {
+                    	            current = createModelElement(grammarAccess.getViolationRule());
+                    	        }
+                           		setWithLastConsumed(
+                           			current, 
+                           			"percentage",
+                            		lv_percentage_4_0, 
+                            		"tools.descartes.dql.lang.DescartesQL.DOUBLE");
+                    	    
 
+                    }
 
-            }
 
-            otherlv_2=(Token)match(input,26,FOLLOW_2); 
+                    }
 
-                	newLeafNode(otherlv_2, grammarAccess.getViolationAccess().getVIOLATIONSKeyword_2());
-                
+                    otherlv_5=(Token)match(input,18,FOLLOW_2); 
+
+                        	newLeafNode(otherlv_5, grammarAccess.getViolationAccess().getPERCENTKeyword_1_2());
+                        
+
+                    }
+
+
+                    }
+                    break;
 
             }
 
@@ -2304,7 +2792,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleModelStructureQuery"
-    // InternalDescartesQL.g:994:1: entryRuleModelStructureQuery returns [EObject current=null] : iv_ruleModelStructureQuery= ruleModelStructureQuery EOF ;
+    // InternalDescartesQL.g:1189:1: entryRuleModelStructureQuery returns [EObject current=null] : iv_ruleModelStructureQuery= ruleModelStructureQuery EOF ;
     public final EObject entryRuleModelStructureQuery() throws RecognitionException {
         EObject current = null;
 
@@ -2312,8 +2800,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:995:2: (iv_ruleModelStructureQuery= ruleModelStructureQuery EOF )
-            // InternalDescartesQL.g:996:2: iv_ruleModelStructureQuery= ruleModelStructureQuery EOF
+            // InternalDescartesQL.g:1190:2: (iv_ruleModelStructureQuery= ruleModelStructureQuery EOF )
+            // InternalDescartesQL.g:1191:2: iv_ruleModelStructureQuery= ruleModelStructureQuery EOF
             {
              newCompositeNode(grammarAccess.getModelStructureQueryRule()); 
             pushFollow(FOLLOW_1);
@@ -2340,7 +2828,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleModelStructureQuery"
-    // InternalDescartesQL.g:1003:1: ruleModelStructureQuery returns [EObject current=null] : this_ListQuery_0= ruleListQuery ;
+    // InternalDescartesQL.g:1198:1: ruleModelStructureQuery returns [EObject current=null] : this_ListQuery_0= ruleListQuery ;
     public final EObject ruleModelStructureQuery() throws RecognitionException {
         EObject current = null;
 
@@ -2350,8 +2838,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:1006:28: (this_ListQuery_0= ruleListQuery )
-            // InternalDescartesQL.g:1008:5: this_ListQuery_0= ruleListQuery
+            // InternalDescartesQL.g:1201:28: (this_ListQuery_0= ruleListQuery )
+            // InternalDescartesQL.g:1203:5: this_ListQuery_0= ruleListQuery
             {
              
                     newCompositeNode(grammarAccess.getModelStructureQueryAccess().getListQueryParserRuleCall()); 
@@ -2383,7 +2871,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRulePerformanceMetricsQuery"
-    // InternalDescartesQL.g:1024:1: entryRulePerformanceMetricsQuery returns [EObject current=null] : iv_rulePerformanceMetricsQuery= rulePerformanceMetricsQuery EOF ;
+    // InternalDescartesQL.g:1219:1: entryRulePerformanceMetricsQuery returns [EObject current=null] : iv_rulePerformanceMetricsQuery= rulePerformanceMetricsQuery EOF ;
     public final EObject entryRulePerformanceMetricsQuery() throws RecognitionException {
         EObject current = null;
 
@@ -2391,8 +2879,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:1025:2: (iv_rulePerformanceMetricsQuery= rulePerformanceMetricsQuery EOF )
-            // InternalDescartesQL.g:1026:2: iv_rulePerformanceMetricsQuery= rulePerformanceMetricsQuery EOF
+            // InternalDescartesQL.g:1220:2: (iv_rulePerformanceMetricsQuery= rulePerformanceMetricsQuery EOF )
+            // InternalDescartesQL.g:1221:2: iv_rulePerformanceMetricsQuery= rulePerformanceMetricsQuery EOF
             {
              newCompositeNode(grammarAccess.getPerformanceMetricsQueryRule()); 
             pushFollow(FOLLOW_1);
@@ -2419,7 +2907,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "rulePerformanceMetricsQuery"
-    // InternalDescartesQL.g:1033:1: rulePerformanceMetricsQuery returns [EObject current=null] : this_SelectQuery_0= ruleSelectQuery ;
+    // InternalDescartesQL.g:1228:1: rulePerformanceMetricsQuery returns [EObject current=null] : this_SelectQuery_0= ruleSelectQuery ;
     public final EObject rulePerformanceMetricsQuery() throws RecognitionException {
         EObject current = null;
 
@@ -2429,8 +2917,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:1036:28: (this_SelectQuery_0= ruleSelectQuery )
-            // InternalDescartesQL.g:1038:5: this_SelectQuery_0= ruleSelectQuery
+            // InternalDescartesQL.g:1231:28: (this_SelectQuery_0= ruleSelectQuery )
+            // InternalDescartesQL.g:1233:5: this_SelectQuery_0= ruleSelectQuery
             {
              
                     newCompositeNode(grammarAccess.getPerformanceMetricsQueryAccess().getSelectQueryParserRuleCall()); 
@@ -2462,7 +2950,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRulePerformanceIssueQuery"
-    // InternalDescartesQL.g:1054:1: entryRulePerformanceIssueQuery returns [EObject current=null] : iv_rulePerformanceIssueQuery= rulePerformanceIssueQuery EOF ;
+    // InternalDescartesQL.g:1249:1: entryRulePerformanceIssueQuery returns [EObject current=null] : iv_rulePerformanceIssueQuery= rulePerformanceIssueQuery EOF ;
     public final EObject entryRulePerformanceIssueQuery() throws RecognitionException {
         EObject current = null;
 
@@ -2470,8 +2958,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:1055:2: (iv_rulePerformanceIssueQuery= rulePerformanceIssueQuery EOF )
-            // InternalDescartesQL.g:1056:2: iv_rulePerformanceIssueQuery= rulePerformanceIssueQuery EOF
+            // InternalDescartesQL.g:1250:2: (iv_rulePerformanceIssueQuery= rulePerformanceIssueQuery EOF )
+            // InternalDescartesQL.g:1251:2: iv_rulePerformanceIssueQuery= rulePerformanceIssueQuery EOF
             {
              newCompositeNode(grammarAccess.getPerformanceIssueQueryRule()); 
             pushFollow(FOLLOW_1);
@@ -2498,7 +2986,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "rulePerformanceIssueQuery"
-    // InternalDescartesQL.g:1063:1: rulePerformanceIssueQuery returns [EObject current=null] : this_DetectQuery_0= ruleDetectQuery ;
+    // InternalDescartesQL.g:1258:1: rulePerformanceIssueQuery returns [EObject current=null] : this_DetectQuery_0= ruleDetectQuery ;
     public final EObject rulePerformanceIssueQuery() throws RecognitionException {
         EObject current = null;
 
@@ -2508,8 +2996,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:1066:28: (this_DetectQuery_0= ruleDetectQuery )
-            // InternalDescartesQL.g:1068:5: this_DetectQuery_0= ruleDetectQuery
+            // InternalDescartesQL.g:1261:28: (this_DetectQuery_0= ruleDetectQuery )
+            // InternalDescartesQL.g:1263:5: this_DetectQuery_0= ruleDetectQuery
             {
              
                     newCompositeNode(grammarAccess.getPerformanceIssueQueryAccess().getDetectQueryParserRuleCall()); 
@@ -2541,7 +3029,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleConnectorCapabilityQuery"
-    // InternalDescartesQL.g:1084:1: entryRuleConnectorCapabilityQuery returns [EObject current=null] : iv_ruleConnectorCapabilityQuery= ruleConnectorCapabilityQuery EOF ;
+    // InternalDescartesQL.g:1279:1: entryRuleConnectorCapabilityQuery returns [EObject current=null] : iv_ruleConnectorCapabilityQuery= ruleConnectorCapabilityQuery EOF ;
     public final EObject entryRuleConnectorCapabilityQuery() throws RecognitionException {
         EObject current = null;
 
@@ -2549,8 +3037,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:1085:2: (iv_ruleConnectorCapabilityQuery= ruleConnectorCapabilityQuery EOF )
-            // InternalDescartesQL.g:1086:2: iv_ruleConnectorCapabilityQuery= ruleConnectorCapabilityQuery EOF
+            // InternalDescartesQL.g:1280:2: (iv_ruleConnectorCapabilityQuery= ruleConnectorCapabilityQuery EOF )
+            // InternalDescartesQL.g:1281:2: iv_ruleConnectorCapabilityQuery= ruleConnectorCapabilityQuery EOF
             {
              newCompositeNode(grammarAccess.getConnectorCapabilityQueryRule()); 
             pushFollow(FOLLOW_1);
@@ -2577,7 +3065,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleConnectorCapabilityQuery"
-    // InternalDescartesQL.g:1093:1: ruleConnectorCapabilityQuery returns [EObject current=null] : this_GetQuery_0= ruleGetQuery ;
+    // InternalDescartesQL.g:1288:1: ruleConnectorCapabilityQuery returns [EObject current=null] : this_GetQuery_0= ruleGetQuery ;
     public final EObject ruleConnectorCapabilityQuery() throws RecognitionException {
         EObject current = null;
 
@@ -2587,8 +3075,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:1096:28: (this_GetQuery_0= ruleGetQuery )
-            // InternalDescartesQL.g:1098:5: this_GetQuery_0= ruleGetQuery
+            // InternalDescartesQL.g:1291:28: (this_GetQuery_0= ruleGetQuery )
+            // InternalDescartesQL.g:1293:5: this_GetQuery_0= ruleGetQuery
             {
              
                     newCompositeNode(grammarAccess.getConnectorCapabilityQueryAccess().getGetQueryParserRuleCall()); 
@@ -2620,7 +3108,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleListQuery"
-    // InternalDescartesQL.g:1114:1: entryRuleListQuery returns [EObject current=null] : iv_ruleListQuery= ruleListQuery EOF ;
+    // InternalDescartesQL.g:1309:1: entryRuleListQuery returns [EObject current=null] : iv_ruleListQuery= ruleListQuery EOF ;
     public final EObject entryRuleListQuery() throws RecognitionException {
         EObject current = null;
 
@@ -2628,8 +3116,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:1115:2: (iv_ruleListQuery= ruleListQuery EOF )
-            // InternalDescartesQL.g:1116:2: iv_ruleListQuery= ruleListQuery EOF
+            // InternalDescartesQL.g:1310:2: (iv_ruleListQuery= ruleListQuery EOF )
+            // InternalDescartesQL.g:1311:2: iv_ruleListQuery= ruleListQuery EOF
             {
              newCompositeNode(grammarAccess.getListQueryRule()); 
             pushFollow(FOLLOW_1);
@@ -2656,7 +3144,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleListQuery"
-    // InternalDescartesQL.g:1123:1: ruleListQuery returns [EObject current=null] : (otherlv_0= 'LIST' ( ( (lv_queryType_1_1= ruleListEntitiesQuery | lv_queryType_1_2= ruleListMetricsQuery | lv_queryType_1_3= ruleListDoFQuery ) ) ) ( (lv_filterClause_2_0= ruleFilterClause ) )? ( (lv_usingClause_3_0= ruleUsingClause ) ) ) ;
+    // InternalDescartesQL.g:1318:1: ruleListQuery returns [EObject current=null] : (otherlv_0= 'LIST' ( ( (lv_queryType_1_1= ruleListEntitiesQuery | lv_queryType_1_2= ruleListMetricsQuery | lv_queryType_1_3= ruleListDoFQuery ) ) ) ( (lv_filterClause_2_0= ruleFilterClause ) )? ( (lv_usingClause_3_0= ruleUsingClause ) ) ) ;
     public final EObject ruleListQuery() throws RecognitionException {
         EObject current = null;
 
@@ -2675,55 +3163,55 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:1126:28: ( (otherlv_0= 'LIST' ( ( (lv_queryType_1_1= ruleListEntitiesQuery | lv_queryType_1_2= ruleListMetricsQuery | lv_queryType_1_3= ruleListDoFQuery ) ) ) ( (lv_filterClause_2_0= ruleFilterClause ) )? ( (lv_usingClause_3_0= ruleUsingClause ) ) ) )
-            // InternalDescartesQL.g:1127:1: (otherlv_0= 'LIST' ( ( (lv_queryType_1_1= ruleListEntitiesQuery | lv_queryType_1_2= ruleListMetricsQuery | lv_queryType_1_3= ruleListDoFQuery ) ) ) ( (lv_filterClause_2_0= ruleFilterClause ) )? ( (lv_usingClause_3_0= ruleUsingClause ) ) )
+            // InternalDescartesQL.g:1321:28: ( (otherlv_0= 'LIST' ( ( (lv_queryType_1_1= ruleListEntitiesQuery | lv_queryType_1_2= ruleListMetricsQuery | lv_queryType_1_3= ruleListDoFQuery ) ) ) ( (lv_filterClause_2_0= ruleFilterClause ) )? ( (lv_usingClause_3_0= ruleUsingClause ) ) ) )
+            // InternalDescartesQL.g:1322:1: (otherlv_0= 'LIST' ( ( (lv_queryType_1_1= ruleListEntitiesQuery | lv_queryType_1_2= ruleListMetricsQuery | lv_queryType_1_3= ruleListDoFQuery ) ) ) ( (lv_filterClause_2_0= ruleFilterClause ) )? ( (lv_usingClause_3_0= ruleUsingClause ) ) )
             {
-            // InternalDescartesQL.g:1127:1: (otherlv_0= 'LIST' ( ( (lv_queryType_1_1= ruleListEntitiesQuery | lv_queryType_1_2= ruleListMetricsQuery | lv_queryType_1_3= ruleListDoFQuery ) ) ) ( (lv_filterClause_2_0= ruleFilterClause ) )? ( (lv_usingClause_3_0= ruleUsingClause ) ) )
-            // InternalDescartesQL.g:1127:3: otherlv_0= 'LIST' ( ( (lv_queryType_1_1= ruleListEntitiesQuery | lv_queryType_1_2= ruleListMetricsQuery | lv_queryType_1_3= ruleListDoFQuery ) ) ) ( (lv_filterClause_2_0= ruleFilterClause ) )? ( (lv_usingClause_3_0= ruleUsingClause ) )
+            // InternalDescartesQL.g:1322:1: (otherlv_0= 'LIST' ( ( (lv_queryType_1_1= ruleListEntitiesQuery | lv_queryType_1_2= ruleListMetricsQuery | lv_queryType_1_3= ruleListDoFQuery ) ) ) ( (lv_filterClause_2_0= ruleFilterClause ) )? ( (lv_usingClause_3_0= ruleUsingClause ) ) )
+            // InternalDescartesQL.g:1322:3: otherlv_0= 'LIST' ( ( (lv_queryType_1_1= ruleListEntitiesQuery | lv_queryType_1_2= ruleListMetricsQuery | lv_queryType_1_3= ruleListDoFQuery ) ) ) ( (lv_filterClause_2_0= ruleFilterClause ) )? ( (lv_usingClause_3_0= ruleUsingClause ) )
             {
-            otherlv_0=(Token)match(input,27,FOLLOW_24); 
+            otherlv_0=(Token)match(input,31,FOLLOW_27); 
 
                 	newLeafNode(otherlv_0, grammarAccess.getListQueryAccess().getLISTKeyword_0());
                 
-            // InternalDescartesQL.g:1131:1: ( ( (lv_queryType_1_1= ruleListEntitiesQuery | lv_queryType_1_2= ruleListMetricsQuery | lv_queryType_1_3= ruleListDoFQuery ) ) )
-            // InternalDescartesQL.g:1132:1: ( (lv_queryType_1_1= ruleListEntitiesQuery | lv_queryType_1_2= ruleListMetricsQuery | lv_queryType_1_3= ruleListDoFQuery ) )
+            // InternalDescartesQL.g:1326:1: ( ( (lv_queryType_1_1= ruleListEntitiesQuery | lv_queryType_1_2= ruleListMetricsQuery | lv_queryType_1_3= ruleListDoFQuery ) ) )
+            // InternalDescartesQL.g:1327:1: ( (lv_queryType_1_1= ruleListEntitiesQuery | lv_queryType_1_2= ruleListMetricsQuery | lv_queryType_1_3= ruleListDoFQuery ) )
             {
-            // InternalDescartesQL.g:1132:1: ( (lv_queryType_1_1= ruleListEntitiesQuery | lv_queryType_1_2= ruleListMetricsQuery | lv_queryType_1_3= ruleListDoFQuery ) )
-            // InternalDescartesQL.g:1133:1: (lv_queryType_1_1= ruleListEntitiesQuery | lv_queryType_1_2= ruleListMetricsQuery | lv_queryType_1_3= ruleListDoFQuery )
+            // InternalDescartesQL.g:1327:1: ( (lv_queryType_1_1= ruleListEntitiesQuery | lv_queryType_1_2= ruleListMetricsQuery | lv_queryType_1_3= ruleListDoFQuery ) )
+            // InternalDescartesQL.g:1328:1: (lv_queryType_1_1= ruleListEntitiesQuery | lv_queryType_1_2= ruleListMetricsQuery | lv_queryType_1_3= ruleListDoFQuery )
             {
-            // InternalDescartesQL.g:1133:1: (lv_queryType_1_1= ruleListEntitiesQuery | lv_queryType_1_2= ruleListMetricsQuery | lv_queryType_1_3= ruleListDoFQuery )
-            int alt13=3;
+            // InternalDescartesQL.g:1328:1: (lv_queryType_1_1= ruleListEntitiesQuery | lv_queryType_1_2= ruleListMetricsQuery | lv_queryType_1_3= ruleListDoFQuery )
+            int alt20=3;
             switch ( input.LA(1) ) {
-            case 33:
+            case 37:
                 {
-                alt13=1;
+                alt20=1;
                 }
                 break;
-            case 34:
+            case 38:
                 {
-                alt13=2;
+                alt20=2;
                 }
                 break;
-            case 32:
+            case 36:
                 {
-                alt13=3;
+                alt20=3;
                 }
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("", 13, 0, input);
+                    new NoViableAltException("", 20, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt13) {
+            switch (alt20) {
                 case 1 :
-                    // InternalDescartesQL.g:1134:3: lv_queryType_1_1= ruleListEntitiesQuery
+                    // InternalDescartesQL.g:1329:3: lv_queryType_1_1= ruleListEntitiesQuery
                     {
                      
                     	        newCompositeNode(grammarAccess.getListQueryAccess().getQueryTypeListEntitiesQueryParserRuleCall_1_0_0()); 
                     	    
-                    pushFollow(FOLLOW_25);
+                    pushFollow(FOLLOW_28);
                     lv_queryType_1_1=ruleListEntitiesQuery();
 
                     state._fsp--;
@@ -2743,12 +3231,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 2 :
-                    // InternalDescartesQL.g:1149:8: lv_queryType_1_2= ruleListMetricsQuery
+                    // InternalDescartesQL.g:1344:8: lv_queryType_1_2= ruleListMetricsQuery
                     {
                      
                     	        newCompositeNode(grammarAccess.getListQueryAccess().getQueryTypeListMetricsQueryParserRuleCall_1_0_1()); 
                     	    
-                    pushFollow(FOLLOW_25);
+                    pushFollow(FOLLOW_28);
                     lv_queryType_1_2=ruleListMetricsQuery();
 
                     state._fsp--;
@@ -2768,12 +3256,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 3 :
-                    // InternalDescartesQL.g:1164:8: lv_queryType_1_3= ruleListDoFQuery
+                    // InternalDescartesQL.g:1359:8: lv_queryType_1_3= ruleListDoFQuery
                     {
                      
                     	        newCompositeNode(grammarAccess.getListQueryAccess().getQueryTypeListDoFQueryParserRuleCall_1_0_2()); 
                     	    
-                    pushFollow(FOLLOW_25);
+                    pushFollow(FOLLOW_28);
                     lv_queryType_1_3=ruleListDoFQuery();
 
                     state._fsp--;
@@ -2801,19 +3289,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:1182:2: ( (lv_filterClause_2_0= ruleFilterClause ) )?
-            int alt14=2;
-            int LA14_0 = input.LA(1);
+            // InternalDescartesQL.g:1377:2: ( (lv_filterClause_2_0= ruleFilterClause ) )?
+            int alt21=2;
+            int LA21_0 = input.LA(1);
 
-            if ( (LA14_0==59) ) {
-                alt14=1;
+            if ( (LA21_0==63) ) {
+                alt21=1;
             }
-            switch (alt14) {
+            switch (alt21) {
                 case 1 :
-                    // InternalDescartesQL.g:1183:1: (lv_filterClause_2_0= ruleFilterClause )
+                    // InternalDescartesQL.g:1378:1: (lv_filterClause_2_0= ruleFilterClause )
                     {
-                    // InternalDescartesQL.g:1183:1: (lv_filterClause_2_0= ruleFilterClause )
-                    // InternalDescartesQL.g:1184:3: lv_filterClause_2_0= ruleFilterClause
+                    // InternalDescartesQL.g:1378:1: (lv_filterClause_2_0= ruleFilterClause )
+                    // InternalDescartesQL.g:1379:3: lv_filterClause_2_0= ruleFilterClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getListQueryAccess().getFilterClauseFilterClauseParserRuleCall_2_0()); 
@@ -2843,11 +3331,11 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:1200:3: ( (lv_usingClause_3_0= ruleUsingClause ) )
-            // InternalDescartesQL.g:1201:1: (lv_usingClause_3_0= ruleUsingClause )
+            // InternalDescartesQL.g:1395:3: ( (lv_usingClause_3_0= ruleUsingClause ) )
+            // InternalDescartesQL.g:1396:1: (lv_usingClause_3_0= ruleUsingClause )
             {
-            // InternalDescartesQL.g:1201:1: (lv_usingClause_3_0= ruleUsingClause )
-            // InternalDescartesQL.g:1202:3: lv_usingClause_3_0= ruleUsingClause
+            // InternalDescartesQL.g:1396:1: (lv_usingClause_3_0= ruleUsingClause )
+            // InternalDescartesQL.g:1397:3: lv_usingClause_3_0= ruleUsingClause
             {
              
             	        newCompositeNode(grammarAccess.getListQueryAccess().getUsingClauseUsingClauseParserRuleCall_3_0()); 
@@ -2895,7 +3383,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleGetQuery"
-    // InternalDescartesQL.g:1226:1: entryRuleGetQuery returns [EObject current=null] : iv_ruleGetQuery= ruleGetQuery EOF ;
+    // InternalDescartesQL.g:1421:1: entryRuleGetQuery returns [EObject current=null] : iv_ruleGetQuery= ruleGetQuery EOF ;
     public final EObject entryRuleGetQuery() throws RecognitionException {
         EObject current = null;
 
@@ -2903,8 +3391,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:1227:2: (iv_ruleGetQuery= ruleGetQuery EOF )
-            // InternalDescartesQL.g:1228:2: iv_ruleGetQuery= ruleGetQuery EOF
+            // InternalDescartesQL.g:1422:2: (iv_ruleGetQuery= ruleGetQuery EOF )
+            // InternalDescartesQL.g:1423:2: iv_ruleGetQuery= ruleGetQuery EOF
             {
              newCompositeNode(grammarAccess.getGetQueryRule()); 
             pushFollow(FOLLOW_1);
@@ -2931,7 +3419,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleGetQuery"
-    // InternalDescartesQL.g:1235:1: ruleGetQuery returns [EObject current=null] : (otherlv_0= 'GET' ( ( (lv_queryTape_1_1= ruleGetExplorationStrategiesQuery | lv_queryTape_1_2= ruleGetTimeUnitsQuery | lv_queryTape_1_3= ruleGetConstraintsQuery ) ) ) ( (lv_usingClause_2_0= ruleUsingClause ) ) ) ;
+    // InternalDescartesQL.g:1430:1: ruleGetQuery returns [EObject current=null] : (otherlv_0= 'GET' ( ( (lv_queryTape_1_1= ruleGetExplorationStrategiesQuery | lv_queryTape_1_2= ruleGetTimeUnitsQuery | lv_queryTape_1_3= ruleGetConstraintsQuery ) ) ) ( (lv_usingClause_2_0= ruleUsingClause ) ) ) ;
     public final EObject ruleGetQuery() throws RecognitionException {
         EObject current = null;
 
@@ -2948,50 +3436,50 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:1238:28: ( (otherlv_0= 'GET' ( ( (lv_queryTape_1_1= ruleGetExplorationStrategiesQuery | lv_queryTape_1_2= ruleGetTimeUnitsQuery | lv_queryTape_1_3= ruleGetConstraintsQuery ) ) ) ( (lv_usingClause_2_0= ruleUsingClause ) ) ) )
-            // InternalDescartesQL.g:1239:1: (otherlv_0= 'GET' ( ( (lv_queryTape_1_1= ruleGetExplorationStrategiesQuery | lv_queryTape_1_2= ruleGetTimeUnitsQuery | lv_queryTape_1_3= ruleGetConstraintsQuery ) ) ) ( (lv_usingClause_2_0= ruleUsingClause ) ) )
+            // InternalDescartesQL.g:1433:28: ( (otherlv_0= 'GET' ( ( (lv_queryTape_1_1= ruleGetExplorationStrategiesQuery | lv_queryTape_1_2= ruleGetTimeUnitsQuery | lv_queryTape_1_3= ruleGetConstraintsQuery ) ) ) ( (lv_usingClause_2_0= ruleUsingClause ) ) ) )
+            // InternalDescartesQL.g:1434:1: (otherlv_0= 'GET' ( ( (lv_queryTape_1_1= ruleGetExplorationStrategiesQuery | lv_queryTape_1_2= ruleGetTimeUnitsQuery | lv_queryTape_1_3= ruleGetConstraintsQuery ) ) ) ( (lv_usingClause_2_0= ruleUsingClause ) ) )
             {
-            // InternalDescartesQL.g:1239:1: (otherlv_0= 'GET' ( ( (lv_queryTape_1_1= ruleGetExplorationStrategiesQuery | lv_queryTape_1_2= ruleGetTimeUnitsQuery | lv_queryTape_1_3= ruleGetConstraintsQuery ) ) ) ( (lv_usingClause_2_0= ruleUsingClause ) ) )
-            // InternalDescartesQL.g:1239:3: otherlv_0= 'GET' ( ( (lv_queryTape_1_1= ruleGetExplorationStrategiesQuery | lv_queryTape_1_2= ruleGetTimeUnitsQuery | lv_queryTape_1_3= ruleGetConstraintsQuery ) ) ) ( (lv_usingClause_2_0= ruleUsingClause ) )
+            // InternalDescartesQL.g:1434:1: (otherlv_0= 'GET' ( ( (lv_queryTape_1_1= ruleGetExplorationStrategiesQuery | lv_queryTape_1_2= ruleGetTimeUnitsQuery | lv_queryTape_1_3= ruleGetConstraintsQuery ) ) ) ( (lv_usingClause_2_0= ruleUsingClause ) ) )
+            // InternalDescartesQL.g:1434:3: otherlv_0= 'GET' ( ( (lv_queryTape_1_1= ruleGetExplorationStrategiesQuery | lv_queryTape_1_2= ruleGetTimeUnitsQuery | lv_queryTape_1_3= ruleGetConstraintsQuery ) ) ) ( (lv_usingClause_2_0= ruleUsingClause ) )
             {
-            otherlv_0=(Token)match(input,28,FOLLOW_26); 
+            otherlv_0=(Token)match(input,32,FOLLOW_29); 
 
                 	newLeafNode(otherlv_0, grammarAccess.getGetQueryAccess().getGETKeyword_0());
                 
-            // InternalDescartesQL.g:1243:1: ( ( (lv_queryTape_1_1= ruleGetExplorationStrategiesQuery | lv_queryTape_1_2= ruleGetTimeUnitsQuery | lv_queryTape_1_3= ruleGetConstraintsQuery ) ) )
-            // InternalDescartesQL.g:1244:1: ( (lv_queryTape_1_1= ruleGetExplorationStrategiesQuery | lv_queryTape_1_2= ruleGetTimeUnitsQuery | lv_queryTape_1_3= ruleGetConstraintsQuery ) )
+            // InternalDescartesQL.g:1438:1: ( ( (lv_queryTape_1_1= ruleGetExplorationStrategiesQuery | lv_queryTape_1_2= ruleGetTimeUnitsQuery | lv_queryTape_1_3= ruleGetConstraintsQuery ) ) )
+            // InternalDescartesQL.g:1439:1: ( (lv_queryTape_1_1= ruleGetExplorationStrategiesQuery | lv_queryTape_1_2= ruleGetTimeUnitsQuery | lv_queryTape_1_3= ruleGetConstraintsQuery ) )
             {
-            // InternalDescartesQL.g:1244:1: ( (lv_queryTape_1_1= ruleGetExplorationStrategiesQuery | lv_queryTape_1_2= ruleGetTimeUnitsQuery | lv_queryTape_1_3= ruleGetConstraintsQuery ) )
-            // InternalDescartesQL.g:1245:1: (lv_queryTape_1_1= ruleGetExplorationStrategiesQuery | lv_queryTape_1_2= ruleGetTimeUnitsQuery | lv_queryTape_1_3= ruleGetConstraintsQuery )
+            // InternalDescartesQL.g:1439:1: ( (lv_queryTape_1_1= ruleGetExplorationStrategiesQuery | lv_queryTape_1_2= ruleGetTimeUnitsQuery | lv_queryTape_1_3= ruleGetConstraintsQuery ) )
+            // InternalDescartesQL.g:1440:1: (lv_queryTape_1_1= ruleGetExplorationStrategiesQuery | lv_queryTape_1_2= ruleGetTimeUnitsQuery | lv_queryTape_1_3= ruleGetConstraintsQuery )
             {
-            // InternalDescartesQL.g:1245:1: (lv_queryTape_1_1= ruleGetExplorationStrategiesQuery | lv_queryTape_1_2= ruleGetTimeUnitsQuery | lv_queryTape_1_3= ruleGetConstraintsQuery )
-            int alt15=3;
+            // InternalDescartesQL.g:1440:1: (lv_queryTape_1_1= ruleGetExplorationStrategiesQuery | lv_queryTape_1_2= ruleGetTimeUnitsQuery | lv_queryTape_1_3= ruleGetConstraintsQuery )
+            int alt22=3;
             switch ( input.LA(1) ) {
-            case 30:
+            case 34:
                 {
-                alt15=1;
+                alt22=1;
                 }
                 break;
-            case 31:
+            case 35:
                 {
-                alt15=2;
+                alt22=2;
                 }
                 break;
-            case 29:
+            case 33:
                 {
-                alt15=3;
+                alt22=3;
                 }
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("", 15, 0, input);
+                    new NoViableAltException("", 22, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt15) {
+            switch (alt22) {
                 case 1 :
-                    // InternalDescartesQL.g:1246:3: lv_queryTape_1_1= ruleGetExplorationStrategiesQuery
+                    // InternalDescartesQL.g:1441:3: lv_queryTape_1_1= ruleGetExplorationStrategiesQuery
                     {
                      
                     	        newCompositeNode(grammarAccess.getGetQueryAccess().getQueryTapeGetExplorationStrategiesQueryParserRuleCall_1_0_0()); 
@@ -3016,7 +3504,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 2 :
-                    // InternalDescartesQL.g:1261:8: lv_queryTape_1_2= ruleGetTimeUnitsQuery
+                    // InternalDescartesQL.g:1456:8: lv_queryTape_1_2= ruleGetTimeUnitsQuery
                     {
                      
                     	        newCompositeNode(grammarAccess.getGetQueryAccess().getQueryTapeGetTimeUnitsQueryParserRuleCall_1_0_1()); 
@@ -3041,7 +3529,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 3 :
-                    // InternalDescartesQL.g:1276:8: lv_queryTape_1_3= ruleGetConstraintsQuery
+                    // InternalDescartesQL.g:1471:8: lv_queryTape_1_3= ruleGetConstraintsQuery
                     {
                      
                     	        newCompositeNode(grammarAccess.getGetQueryAccess().getQueryTapeGetConstraintsQueryParserRuleCall_1_0_2()); 
@@ -3074,11 +3562,11 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:1294:2: ( (lv_usingClause_2_0= ruleUsingClause ) )
-            // InternalDescartesQL.g:1295:1: (lv_usingClause_2_0= ruleUsingClause )
+            // InternalDescartesQL.g:1489:2: ( (lv_usingClause_2_0= ruleUsingClause ) )
+            // InternalDescartesQL.g:1490:1: (lv_usingClause_2_0= ruleUsingClause )
             {
-            // InternalDescartesQL.g:1295:1: (lv_usingClause_2_0= ruleUsingClause )
-            // InternalDescartesQL.g:1296:3: lv_usingClause_2_0= ruleUsingClause
+            // InternalDescartesQL.g:1490:1: (lv_usingClause_2_0= ruleUsingClause )
+            // InternalDescartesQL.g:1491:3: lv_usingClause_2_0= ruleUsingClause
             {
              
             	        newCompositeNode(grammarAccess.getGetQueryAccess().getUsingClauseUsingClauseParserRuleCall_2_0()); 
@@ -3126,7 +3614,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleGetConstraintsQuery"
-    // InternalDescartesQL.g:1320:1: entryRuleGetConstraintsQuery returns [EObject current=null] : iv_ruleGetConstraintsQuery= ruleGetConstraintsQuery EOF ;
+    // InternalDescartesQL.g:1515:1: entryRuleGetConstraintsQuery returns [EObject current=null] : iv_ruleGetConstraintsQuery= ruleGetConstraintsQuery EOF ;
     public final EObject entryRuleGetConstraintsQuery() throws RecognitionException {
         EObject current = null;
 
@@ -3134,8 +3622,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:1321:2: (iv_ruleGetConstraintsQuery= ruleGetConstraintsQuery EOF )
-            // InternalDescartesQL.g:1322:2: iv_ruleGetConstraintsQuery= ruleGetConstraintsQuery EOF
+            // InternalDescartesQL.g:1516:2: (iv_ruleGetConstraintsQuery= ruleGetConstraintsQuery EOF )
+            // InternalDescartesQL.g:1517:2: iv_ruleGetConstraintsQuery= ruleGetConstraintsQuery EOF
             {
              newCompositeNode(grammarAccess.getGetConstraintsQueryRule()); 
             pushFollow(FOLLOW_1);
@@ -3162,7 +3650,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleGetConstraintsQuery"
-    // InternalDescartesQL.g:1329:1: ruleGetConstraintsQuery returns [EObject current=null] : ( (lv_mode_0_0= 'CONSTRAINTS' ) ) ;
+    // InternalDescartesQL.g:1524:1: ruleGetConstraintsQuery returns [EObject current=null] : ( (lv_mode_0_0= 'CONSTRAINTS' ) ) ;
     public final EObject ruleGetConstraintsQuery() throws RecognitionException {
         EObject current = null;
 
@@ -3171,16 +3659,16 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:1332:28: ( ( (lv_mode_0_0= 'CONSTRAINTS' ) ) )
-            // InternalDescartesQL.g:1333:1: ( (lv_mode_0_0= 'CONSTRAINTS' ) )
+            // InternalDescartesQL.g:1527:28: ( ( (lv_mode_0_0= 'CONSTRAINTS' ) ) )
+            // InternalDescartesQL.g:1528:1: ( (lv_mode_0_0= 'CONSTRAINTS' ) )
             {
-            // InternalDescartesQL.g:1333:1: ( (lv_mode_0_0= 'CONSTRAINTS' ) )
-            // InternalDescartesQL.g:1334:1: (lv_mode_0_0= 'CONSTRAINTS' )
+            // InternalDescartesQL.g:1528:1: ( (lv_mode_0_0= 'CONSTRAINTS' ) )
+            // InternalDescartesQL.g:1529:1: (lv_mode_0_0= 'CONSTRAINTS' )
             {
-            // InternalDescartesQL.g:1334:1: (lv_mode_0_0= 'CONSTRAINTS' )
-            // InternalDescartesQL.g:1335:3: lv_mode_0_0= 'CONSTRAINTS'
+            // InternalDescartesQL.g:1529:1: (lv_mode_0_0= 'CONSTRAINTS' )
+            // InternalDescartesQL.g:1530:3: lv_mode_0_0= 'CONSTRAINTS'
             {
-            lv_mode_0_0=(Token)match(input,29,FOLLOW_2); 
+            lv_mode_0_0=(Token)match(input,33,FOLLOW_2); 
 
                     newLeafNode(lv_mode_0_0, grammarAccess.getGetConstraintsQueryAccess().getModeCONSTRAINTSKeyword_0());
                 
@@ -3214,7 +3702,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleGetExplorationStrategiesQuery"
-    // InternalDescartesQL.g:1356:1: entryRuleGetExplorationStrategiesQuery returns [EObject current=null] : iv_ruleGetExplorationStrategiesQuery= ruleGetExplorationStrategiesQuery EOF ;
+    // InternalDescartesQL.g:1551:1: entryRuleGetExplorationStrategiesQuery returns [EObject current=null] : iv_ruleGetExplorationStrategiesQuery= ruleGetExplorationStrategiesQuery EOF ;
     public final EObject entryRuleGetExplorationStrategiesQuery() throws RecognitionException {
         EObject current = null;
 
@@ -3222,8 +3710,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:1357:2: (iv_ruleGetExplorationStrategiesQuery= ruleGetExplorationStrategiesQuery EOF )
-            // InternalDescartesQL.g:1358:2: iv_ruleGetExplorationStrategiesQuery= ruleGetExplorationStrategiesQuery EOF
+            // InternalDescartesQL.g:1552:2: (iv_ruleGetExplorationStrategiesQuery= ruleGetExplorationStrategiesQuery EOF )
+            // InternalDescartesQL.g:1553:2: iv_ruleGetExplorationStrategiesQuery= ruleGetExplorationStrategiesQuery EOF
             {
              newCompositeNode(grammarAccess.getGetExplorationStrategiesQueryRule()); 
             pushFollow(FOLLOW_1);
@@ -3250,7 +3738,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleGetExplorationStrategiesQuery"
-    // InternalDescartesQL.g:1365:1: ruleGetExplorationStrategiesQuery returns [EObject current=null] : ( (lv_mode_0_0= 'EXPLORATION STRATEGIES' ) ) ;
+    // InternalDescartesQL.g:1560:1: ruleGetExplorationStrategiesQuery returns [EObject current=null] : ( (lv_mode_0_0= 'EXPLORATION STRATEGIES' ) ) ;
     public final EObject ruleGetExplorationStrategiesQuery() throws RecognitionException {
         EObject current = null;
 
@@ -3259,16 +3747,16 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:1368:28: ( ( (lv_mode_0_0= 'EXPLORATION STRATEGIES' ) ) )
-            // InternalDescartesQL.g:1369:1: ( (lv_mode_0_0= 'EXPLORATION STRATEGIES' ) )
+            // InternalDescartesQL.g:1563:28: ( ( (lv_mode_0_0= 'EXPLORATION STRATEGIES' ) ) )
+            // InternalDescartesQL.g:1564:1: ( (lv_mode_0_0= 'EXPLORATION STRATEGIES' ) )
             {
-            // InternalDescartesQL.g:1369:1: ( (lv_mode_0_0= 'EXPLORATION STRATEGIES' ) )
-            // InternalDescartesQL.g:1370:1: (lv_mode_0_0= 'EXPLORATION STRATEGIES' )
+            // InternalDescartesQL.g:1564:1: ( (lv_mode_0_0= 'EXPLORATION STRATEGIES' ) )
+            // InternalDescartesQL.g:1565:1: (lv_mode_0_0= 'EXPLORATION STRATEGIES' )
             {
-            // InternalDescartesQL.g:1370:1: (lv_mode_0_0= 'EXPLORATION STRATEGIES' )
-            // InternalDescartesQL.g:1371:3: lv_mode_0_0= 'EXPLORATION STRATEGIES'
+            // InternalDescartesQL.g:1565:1: (lv_mode_0_0= 'EXPLORATION STRATEGIES' )
+            // InternalDescartesQL.g:1566:3: lv_mode_0_0= 'EXPLORATION STRATEGIES'
             {
-            lv_mode_0_0=(Token)match(input,30,FOLLOW_2); 
+            lv_mode_0_0=(Token)match(input,34,FOLLOW_2); 
 
                     newLeafNode(lv_mode_0_0, grammarAccess.getGetExplorationStrategiesQueryAccess().getModeEXPLORATIONSTRATEGIESKeyword_0());
                 
@@ -3302,7 +3790,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleGetTimeUnitsQuery"
-    // InternalDescartesQL.g:1392:1: entryRuleGetTimeUnitsQuery returns [EObject current=null] : iv_ruleGetTimeUnitsQuery= ruleGetTimeUnitsQuery EOF ;
+    // InternalDescartesQL.g:1587:1: entryRuleGetTimeUnitsQuery returns [EObject current=null] : iv_ruleGetTimeUnitsQuery= ruleGetTimeUnitsQuery EOF ;
     public final EObject entryRuleGetTimeUnitsQuery() throws RecognitionException {
         EObject current = null;
 
@@ -3310,8 +3798,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:1393:2: (iv_ruleGetTimeUnitsQuery= ruleGetTimeUnitsQuery EOF )
-            // InternalDescartesQL.g:1394:2: iv_ruleGetTimeUnitsQuery= ruleGetTimeUnitsQuery EOF
+            // InternalDescartesQL.g:1588:2: (iv_ruleGetTimeUnitsQuery= ruleGetTimeUnitsQuery EOF )
+            // InternalDescartesQL.g:1589:2: iv_ruleGetTimeUnitsQuery= ruleGetTimeUnitsQuery EOF
             {
              newCompositeNode(grammarAccess.getGetTimeUnitsQueryRule()); 
             pushFollow(FOLLOW_1);
@@ -3338,7 +3826,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleGetTimeUnitsQuery"
-    // InternalDescartesQL.g:1401:1: ruleGetTimeUnitsQuery returns [EObject current=null] : ( (lv_mode_0_0= 'TIME UNITS' ) ) ;
+    // InternalDescartesQL.g:1596:1: ruleGetTimeUnitsQuery returns [EObject current=null] : ( (lv_mode_0_0= 'TIME UNITS' ) ) ;
     public final EObject ruleGetTimeUnitsQuery() throws RecognitionException {
         EObject current = null;
 
@@ -3347,16 +3835,16 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:1404:28: ( ( (lv_mode_0_0= 'TIME UNITS' ) ) )
-            // InternalDescartesQL.g:1405:1: ( (lv_mode_0_0= 'TIME UNITS' ) )
+            // InternalDescartesQL.g:1599:28: ( ( (lv_mode_0_0= 'TIME UNITS' ) ) )
+            // InternalDescartesQL.g:1600:1: ( (lv_mode_0_0= 'TIME UNITS' ) )
             {
-            // InternalDescartesQL.g:1405:1: ( (lv_mode_0_0= 'TIME UNITS' ) )
-            // InternalDescartesQL.g:1406:1: (lv_mode_0_0= 'TIME UNITS' )
+            // InternalDescartesQL.g:1600:1: ( (lv_mode_0_0= 'TIME UNITS' ) )
+            // InternalDescartesQL.g:1601:1: (lv_mode_0_0= 'TIME UNITS' )
             {
-            // InternalDescartesQL.g:1406:1: (lv_mode_0_0= 'TIME UNITS' )
-            // InternalDescartesQL.g:1407:3: lv_mode_0_0= 'TIME UNITS'
+            // InternalDescartesQL.g:1601:1: (lv_mode_0_0= 'TIME UNITS' )
+            // InternalDescartesQL.g:1602:3: lv_mode_0_0= 'TIME UNITS'
             {
-            lv_mode_0_0=(Token)match(input,31,FOLLOW_2); 
+            lv_mode_0_0=(Token)match(input,35,FOLLOW_2); 
 
                     newLeafNode(lv_mode_0_0, grammarAccess.getGetTimeUnitsQueryAccess().getModeTIMEUNITSKeyword_0());
                 
@@ -3390,7 +3878,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleListDoFQuery"
-    // InternalDescartesQL.g:1428:1: entryRuleListDoFQuery returns [EObject current=null] : iv_ruleListDoFQuery= ruleListDoFQuery EOF ;
+    // InternalDescartesQL.g:1623:1: entryRuleListDoFQuery returns [EObject current=null] : iv_ruleListDoFQuery= ruleListDoFQuery EOF ;
     public final EObject entryRuleListDoFQuery() throws RecognitionException {
         EObject current = null;
 
@@ -3398,8 +3886,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:1429:2: (iv_ruleListDoFQuery= ruleListDoFQuery EOF )
-            // InternalDescartesQL.g:1430:2: iv_ruleListDoFQuery= ruleListDoFQuery EOF
+            // InternalDescartesQL.g:1624:2: (iv_ruleListDoFQuery= ruleListDoFQuery EOF )
+            // InternalDescartesQL.g:1625:2: iv_ruleListDoFQuery= ruleListDoFQuery EOF
             {
              newCompositeNode(grammarAccess.getListDoFQueryRule()); 
             pushFollow(FOLLOW_1);
@@ -3426,7 +3914,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleListDoFQuery"
-    // InternalDescartesQL.g:1437:1: ruleListDoFQuery returns [EObject current=null] : ( ( (lv_mode_0_0= 'DOF' ) ) ( (lv_withClause_1_0= ruleWithClause ) )? ) ;
+    // InternalDescartesQL.g:1632:1: ruleListDoFQuery returns [EObject current=null] : ( ( (lv_mode_0_0= 'DOF' ) ) ( (lv_withClause_1_0= ruleWithClause ) )? ) ;
     public final EObject ruleListDoFQuery() throws RecognitionException {
         EObject current = null;
 
@@ -3437,19 +3925,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:1440:28: ( ( ( (lv_mode_0_0= 'DOF' ) ) ( (lv_withClause_1_0= ruleWithClause ) )? ) )
-            // InternalDescartesQL.g:1441:1: ( ( (lv_mode_0_0= 'DOF' ) ) ( (lv_withClause_1_0= ruleWithClause ) )? )
+            // InternalDescartesQL.g:1635:28: ( ( ( (lv_mode_0_0= 'DOF' ) ) ( (lv_withClause_1_0= ruleWithClause ) )? ) )
+            // InternalDescartesQL.g:1636:1: ( ( (lv_mode_0_0= 'DOF' ) ) ( (lv_withClause_1_0= ruleWithClause ) )? )
             {
-            // InternalDescartesQL.g:1441:1: ( ( (lv_mode_0_0= 'DOF' ) ) ( (lv_withClause_1_0= ruleWithClause ) )? )
-            // InternalDescartesQL.g:1441:2: ( (lv_mode_0_0= 'DOF' ) ) ( (lv_withClause_1_0= ruleWithClause ) )?
+            // InternalDescartesQL.g:1636:1: ( ( (lv_mode_0_0= 'DOF' ) ) ( (lv_withClause_1_0= ruleWithClause ) )? )
+            // InternalDescartesQL.g:1636:2: ( (lv_mode_0_0= 'DOF' ) ) ( (lv_withClause_1_0= ruleWithClause ) )?
             {
-            // InternalDescartesQL.g:1441:2: ( (lv_mode_0_0= 'DOF' ) )
-            // InternalDescartesQL.g:1442:1: (lv_mode_0_0= 'DOF' )
+            // InternalDescartesQL.g:1636:2: ( (lv_mode_0_0= 'DOF' ) )
+            // InternalDescartesQL.g:1637:1: (lv_mode_0_0= 'DOF' )
             {
-            // InternalDescartesQL.g:1442:1: (lv_mode_0_0= 'DOF' )
-            // InternalDescartesQL.g:1443:3: lv_mode_0_0= 'DOF'
+            // InternalDescartesQL.g:1637:1: (lv_mode_0_0= 'DOF' )
+            // InternalDescartesQL.g:1638:3: lv_mode_0_0= 'DOF'
             {
-            lv_mode_0_0=(Token)match(input,32,FOLLOW_27); 
+            lv_mode_0_0=(Token)match(input,36,FOLLOW_30); 
 
                     newLeafNode(lv_mode_0_0, grammarAccess.getListDoFQueryAccess().getModeDOFKeyword_0_0());
                 
@@ -3465,19 +3953,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:1456:2: ( (lv_withClause_1_0= ruleWithClause ) )?
-            int alt16=2;
-            int LA16_0 = input.LA(1);
+            // InternalDescartesQL.g:1651:2: ( (lv_withClause_1_0= ruleWithClause ) )?
+            int alt23=2;
+            int LA23_0 = input.LA(1);
 
-            if ( (LA16_0==57) ) {
-                alt16=1;
+            if ( (LA23_0==61) ) {
+                alt23=1;
             }
-            switch (alt16) {
+            switch (alt23) {
                 case 1 :
-                    // InternalDescartesQL.g:1457:1: (lv_withClause_1_0= ruleWithClause )
+                    // InternalDescartesQL.g:1652:1: (lv_withClause_1_0= ruleWithClause )
                     {
-                    // InternalDescartesQL.g:1457:1: (lv_withClause_1_0= ruleWithClause )
-                    // InternalDescartesQL.g:1458:3: lv_withClause_1_0= ruleWithClause
+                    // InternalDescartesQL.g:1652:1: (lv_withClause_1_0= ruleWithClause )
+                    // InternalDescartesQL.g:1653:3: lv_withClause_1_0= ruleWithClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getListDoFQueryAccess().getWithClauseWithClauseParserRuleCall_1_0()); 
@@ -3528,7 +4016,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleListEntitiesQuery"
-    // InternalDescartesQL.g:1482:1: entryRuleListEntitiesQuery returns [EObject current=null] : iv_ruleListEntitiesQuery= ruleListEntitiesQuery EOF ;
+    // InternalDescartesQL.g:1677:1: entryRuleListEntitiesQuery returns [EObject current=null] : iv_ruleListEntitiesQuery= ruleListEntitiesQuery EOF ;
     public final EObject entryRuleListEntitiesQuery() throws RecognitionException {
         EObject current = null;
 
@@ -3536,8 +4024,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:1483:2: (iv_ruleListEntitiesQuery= ruleListEntitiesQuery EOF )
-            // InternalDescartesQL.g:1484:2: iv_ruleListEntitiesQuery= ruleListEntitiesQuery EOF
+            // InternalDescartesQL.g:1678:2: (iv_ruleListEntitiesQuery= ruleListEntitiesQuery EOF )
+            // InternalDescartesQL.g:1679:2: iv_ruleListEntitiesQuery= ruleListEntitiesQuery EOF
             {
              newCompositeNode(grammarAccess.getListEntitiesQueryRule()); 
             pushFollow(FOLLOW_1);
@@ -3564,7 +4052,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleListEntitiesQuery"
-    // InternalDescartesQL.g:1491:1: ruleListEntitiesQuery returns [EObject current=null] : ( (lv_mode_0_0= 'ENTITIES' ) ) ;
+    // InternalDescartesQL.g:1686:1: ruleListEntitiesQuery returns [EObject current=null] : ( (lv_mode_0_0= 'ENTITIES' ) ) ;
     public final EObject ruleListEntitiesQuery() throws RecognitionException {
         EObject current = null;
 
@@ -3573,16 +4061,16 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:1494:28: ( ( (lv_mode_0_0= 'ENTITIES' ) ) )
-            // InternalDescartesQL.g:1495:1: ( (lv_mode_0_0= 'ENTITIES' ) )
+            // InternalDescartesQL.g:1689:28: ( ( (lv_mode_0_0= 'ENTITIES' ) ) )
+            // InternalDescartesQL.g:1690:1: ( (lv_mode_0_0= 'ENTITIES' ) )
             {
-            // InternalDescartesQL.g:1495:1: ( (lv_mode_0_0= 'ENTITIES' ) )
-            // InternalDescartesQL.g:1496:1: (lv_mode_0_0= 'ENTITIES' )
+            // InternalDescartesQL.g:1690:1: ( (lv_mode_0_0= 'ENTITIES' ) )
+            // InternalDescartesQL.g:1691:1: (lv_mode_0_0= 'ENTITIES' )
             {
-            // InternalDescartesQL.g:1496:1: (lv_mode_0_0= 'ENTITIES' )
-            // InternalDescartesQL.g:1497:3: lv_mode_0_0= 'ENTITIES'
+            // InternalDescartesQL.g:1691:1: (lv_mode_0_0= 'ENTITIES' )
+            // InternalDescartesQL.g:1692:3: lv_mode_0_0= 'ENTITIES'
             {
-            lv_mode_0_0=(Token)match(input,33,FOLLOW_2); 
+            lv_mode_0_0=(Token)match(input,37,FOLLOW_2); 
 
                     newLeafNode(lv_mode_0_0, grammarAccess.getListEntitiesQueryAccess().getModeENTITIESKeyword_0());
                 
@@ -3616,7 +4104,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleListMetricsQuery"
-    // InternalDescartesQL.g:1518:1: entryRuleListMetricsQuery returns [EObject current=null] : iv_ruleListMetricsQuery= ruleListMetricsQuery EOF ;
+    // InternalDescartesQL.g:1713:1: entryRuleListMetricsQuery returns [EObject current=null] : iv_ruleListMetricsQuery= ruleListMetricsQuery EOF ;
     public final EObject entryRuleListMetricsQuery() throws RecognitionException {
         EObject current = null;
 
@@ -3624,8 +4112,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:1519:2: (iv_ruleListMetricsQuery= ruleListMetricsQuery EOF )
-            // InternalDescartesQL.g:1520:2: iv_ruleListMetricsQuery= ruleListMetricsQuery EOF
+            // InternalDescartesQL.g:1714:2: (iv_ruleListMetricsQuery= ruleListMetricsQuery EOF )
+            // InternalDescartesQL.g:1715:2: iv_ruleListMetricsQuery= ruleListMetricsQuery EOF
             {
              newCompositeNode(grammarAccess.getListMetricsQueryRule()); 
             pushFollow(FOLLOW_1);
@@ -3652,7 +4140,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleListMetricsQuery"
-    // InternalDescartesQL.g:1527:1: ruleListMetricsQuery returns [EObject current=null] : ( ( (lv_mode_0_0= 'METRICS' ) ) otherlv_1= '(' ( (lv_entityReferenceClause_2_0= ruleEntityReferenceClause ) ) otherlv_3= ')' ) ;
+    // InternalDescartesQL.g:1722:1: ruleListMetricsQuery returns [EObject current=null] : ( ( (lv_mode_0_0= 'METRICS' ) ) otherlv_1= '(' ( (lv_entityReferenceClause_2_0= ruleEntityReferenceClause ) ) otherlv_3= ')' ) ;
     public final EObject ruleListMetricsQuery() throws RecognitionException {
         EObject current = null;
 
@@ -3665,19 +4153,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:1530:28: ( ( ( (lv_mode_0_0= 'METRICS' ) ) otherlv_1= '(' ( (lv_entityReferenceClause_2_0= ruleEntityReferenceClause ) ) otherlv_3= ')' ) )
-            // InternalDescartesQL.g:1531:1: ( ( (lv_mode_0_0= 'METRICS' ) ) otherlv_1= '(' ( (lv_entityReferenceClause_2_0= ruleEntityReferenceClause ) ) otherlv_3= ')' )
+            // InternalDescartesQL.g:1725:28: ( ( ( (lv_mode_0_0= 'METRICS' ) ) otherlv_1= '(' ( (lv_entityReferenceClause_2_0= ruleEntityReferenceClause ) ) otherlv_3= ')' ) )
+            // InternalDescartesQL.g:1726:1: ( ( (lv_mode_0_0= 'METRICS' ) ) otherlv_1= '(' ( (lv_entityReferenceClause_2_0= ruleEntityReferenceClause ) ) otherlv_3= ')' )
             {
-            // InternalDescartesQL.g:1531:1: ( ( (lv_mode_0_0= 'METRICS' ) ) otherlv_1= '(' ( (lv_entityReferenceClause_2_0= ruleEntityReferenceClause ) ) otherlv_3= ')' )
-            // InternalDescartesQL.g:1531:2: ( (lv_mode_0_0= 'METRICS' ) ) otherlv_1= '(' ( (lv_entityReferenceClause_2_0= ruleEntityReferenceClause ) ) otherlv_3= ')'
+            // InternalDescartesQL.g:1726:1: ( ( (lv_mode_0_0= 'METRICS' ) ) otherlv_1= '(' ( (lv_entityReferenceClause_2_0= ruleEntityReferenceClause ) ) otherlv_3= ')' )
+            // InternalDescartesQL.g:1726:2: ( (lv_mode_0_0= 'METRICS' ) ) otherlv_1= '(' ( (lv_entityReferenceClause_2_0= ruleEntityReferenceClause ) ) otherlv_3= ')'
             {
-            // InternalDescartesQL.g:1531:2: ( (lv_mode_0_0= 'METRICS' ) )
-            // InternalDescartesQL.g:1532:1: (lv_mode_0_0= 'METRICS' )
+            // InternalDescartesQL.g:1726:2: ( (lv_mode_0_0= 'METRICS' ) )
+            // InternalDescartesQL.g:1727:1: (lv_mode_0_0= 'METRICS' )
             {
-            // InternalDescartesQL.g:1532:1: (lv_mode_0_0= 'METRICS' )
-            // InternalDescartesQL.g:1533:3: lv_mode_0_0= 'METRICS'
+            // InternalDescartesQL.g:1727:1: (lv_mode_0_0= 'METRICS' )
+            // InternalDescartesQL.g:1728:3: lv_mode_0_0= 'METRICS'
             {
-            lv_mode_0_0=(Token)match(input,34,FOLLOW_10); 
+            lv_mode_0_0=(Token)match(input,38,FOLLOW_14); 
 
                     newLeafNode(lv_mode_0_0, grammarAccess.getListMetricsQueryAccess().getModeMETRICSKeyword_0_0());
                 
@@ -3693,20 +4181,20 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            otherlv_1=(Token)match(input,19,FOLLOW_28); 
+            otherlv_1=(Token)match(input,23,FOLLOW_31); 
 
                 	newLeafNode(otherlv_1, grammarAccess.getListMetricsQueryAccess().getLeftParenthesisKeyword_1());
                 
-            // InternalDescartesQL.g:1550:1: ( (lv_entityReferenceClause_2_0= ruleEntityReferenceClause ) )
-            // InternalDescartesQL.g:1551:1: (lv_entityReferenceClause_2_0= ruleEntityReferenceClause )
+            // InternalDescartesQL.g:1745:1: ( (lv_entityReferenceClause_2_0= ruleEntityReferenceClause ) )
+            // InternalDescartesQL.g:1746:1: (lv_entityReferenceClause_2_0= ruleEntityReferenceClause )
             {
-            // InternalDescartesQL.g:1551:1: (lv_entityReferenceClause_2_0= ruleEntityReferenceClause )
-            // InternalDescartesQL.g:1552:3: lv_entityReferenceClause_2_0= ruleEntityReferenceClause
+            // InternalDescartesQL.g:1746:1: (lv_entityReferenceClause_2_0= ruleEntityReferenceClause )
+            // InternalDescartesQL.g:1747:3: lv_entityReferenceClause_2_0= ruleEntityReferenceClause
             {
              
             	        newCompositeNode(grammarAccess.getListMetricsQueryAccess().getEntityReferenceClauseEntityReferenceClauseParserRuleCall_2_0()); 
             	    
-            pushFollow(FOLLOW_29);
+            pushFollow(FOLLOW_32);
             lv_entityReferenceClause_2_0=ruleEntityReferenceClause();
 
             state._fsp--;
@@ -3728,7 +4216,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            otherlv_3=(Token)match(input,20,FOLLOW_2); 
+            otherlv_3=(Token)match(input,24,FOLLOW_2); 
 
                 	newLeafNode(otherlv_3, grammarAccess.getListMetricsQueryAccess().getRightParenthesisKeyword_3());
                 
@@ -3753,7 +4241,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleSelectQuery"
-    // InternalDescartesQL.g:1580:1: entryRuleSelectQuery returns [EObject current=null] : iv_ruleSelectQuery= ruleSelectQuery EOF ;
+    // InternalDescartesQL.g:1775:1: entryRuleSelectQuery returns [EObject current=null] : iv_ruleSelectQuery= ruleSelectQuery EOF ;
     public final EObject entryRuleSelectQuery() throws RecognitionException {
         EObject current = null;
 
@@ -3761,8 +4249,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:1581:2: (iv_ruleSelectQuery= ruleSelectQuery EOF )
-            // InternalDescartesQL.g:1582:2: iv_ruleSelectQuery= ruleSelectQuery EOF
+            // InternalDescartesQL.g:1776:2: (iv_ruleSelectQuery= ruleSelectQuery EOF )
+            // InternalDescartesQL.g:1777:2: iv_ruleSelectQuery= ruleSelectQuery EOF
             {
              newCompositeNode(grammarAccess.getSelectQueryRule()); 
             pushFollow(FOLLOW_1);
@@ -3789,7 +4277,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleSelectQuery"
-    // InternalDescartesQL.g:1589:1: ruleSelectQuery returns [EObject current=null] : (otherlv_0= 'SELECT' ( (lv_metricReferenceClauses_1_0= ruleMetricReferenceClauses ) ) ( (lv_constraintClause_2_0= ruleConstraintClause ) )? ( (lv_dofClause_3_0= ruleDoFClause ) )? ( (lv_forClause_4_0= ruleForClause ) ) ( (lv_usingClause_5_0= ruleUsingClause ) ) ( (lv_observeClause_6_0= ruleObserveClause ) )? ) ;
+    // InternalDescartesQL.g:1784:1: ruleSelectQuery returns [EObject current=null] : (otherlv_0= 'SELECT' ( (lv_metricReferenceClauses_1_0= ruleMetricReferenceClauses ) ) ( (lv_constraintClause_2_0= ruleConstraintClause ) )? ( (lv_dofClause_3_0= ruleDoFClause ) )? ( (lv_forClause_4_0= ruleForClause ) ) ( (lv_usingClause_5_0= ruleUsingClause ) ) ( (lv_observeClause_6_0= ruleObserveClause ) )? ) ;
     public final EObject ruleSelectQuery() throws RecognitionException {
         EObject current = null;
 
@@ -3810,26 +4298,26 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:1592:28: ( (otherlv_0= 'SELECT' ( (lv_metricReferenceClauses_1_0= ruleMetricReferenceClauses ) ) ( (lv_constraintClause_2_0= ruleConstraintClause ) )? ( (lv_dofClause_3_0= ruleDoFClause ) )? ( (lv_forClause_4_0= ruleForClause ) ) ( (lv_usingClause_5_0= ruleUsingClause ) ) ( (lv_observeClause_6_0= ruleObserveClause ) )? ) )
-            // InternalDescartesQL.g:1593:1: (otherlv_0= 'SELECT' ( (lv_metricReferenceClauses_1_0= ruleMetricReferenceClauses ) ) ( (lv_constraintClause_2_0= ruleConstraintClause ) )? ( (lv_dofClause_3_0= ruleDoFClause ) )? ( (lv_forClause_4_0= ruleForClause ) ) ( (lv_usingClause_5_0= ruleUsingClause ) ) ( (lv_observeClause_6_0= ruleObserveClause ) )? )
+            // InternalDescartesQL.g:1787:28: ( (otherlv_0= 'SELECT' ( (lv_metricReferenceClauses_1_0= ruleMetricReferenceClauses ) ) ( (lv_constraintClause_2_0= ruleConstraintClause ) )? ( (lv_dofClause_3_0= ruleDoFClause ) )? ( (lv_forClause_4_0= ruleForClause ) ) ( (lv_usingClause_5_0= ruleUsingClause ) ) ( (lv_observeClause_6_0= ruleObserveClause ) )? ) )
+            // InternalDescartesQL.g:1788:1: (otherlv_0= 'SELECT' ( (lv_metricReferenceClauses_1_0= ruleMetricReferenceClauses ) ) ( (lv_constraintClause_2_0= ruleConstraintClause ) )? ( (lv_dofClause_3_0= ruleDoFClause ) )? ( (lv_forClause_4_0= ruleForClause ) ) ( (lv_usingClause_5_0= ruleUsingClause ) ) ( (lv_observeClause_6_0= ruleObserveClause ) )? )
             {
-            // InternalDescartesQL.g:1593:1: (otherlv_0= 'SELECT' ( (lv_metricReferenceClauses_1_0= ruleMetricReferenceClauses ) ) ( (lv_constraintClause_2_0= ruleConstraintClause ) )? ( (lv_dofClause_3_0= ruleDoFClause ) )? ( (lv_forClause_4_0= ruleForClause ) ) ( (lv_usingClause_5_0= ruleUsingClause ) ) ( (lv_observeClause_6_0= ruleObserveClause ) )? )
-            // InternalDescartesQL.g:1593:3: otherlv_0= 'SELECT' ( (lv_metricReferenceClauses_1_0= ruleMetricReferenceClauses ) ) ( (lv_constraintClause_2_0= ruleConstraintClause ) )? ( (lv_dofClause_3_0= ruleDoFClause ) )? ( (lv_forClause_4_0= ruleForClause ) ) ( (lv_usingClause_5_0= ruleUsingClause ) ) ( (lv_observeClause_6_0= ruleObserveClause ) )?
+            // InternalDescartesQL.g:1788:1: (otherlv_0= 'SELECT' ( (lv_metricReferenceClauses_1_0= ruleMetricReferenceClauses ) ) ( (lv_constraintClause_2_0= ruleConstraintClause ) )? ( (lv_dofClause_3_0= ruleDoFClause ) )? ( (lv_forClause_4_0= ruleForClause ) ) ( (lv_usingClause_5_0= ruleUsingClause ) ) ( (lv_observeClause_6_0= ruleObserveClause ) )? )
+            // InternalDescartesQL.g:1788:3: otherlv_0= 'SELECT' ( (lv_metricReferenceClauses_1_0= ruleMetricReferenceClauses ) ) ( (lv_constraintClause_2_0= ruleConstraintClause ) )? ( (lv_dofClause_3_0= ruleDoFClause ) )? ( (lv_forClause_4_0= ruleForClause ) ) ( (lv_usingClause_5_0= ruleUsingClause ) ) ( (lv_observeClause_6_0= ruleObserveClause ) )?
             {
-            otherlv_0=(Token)match(input,35,FOLLOW_13); 
+            otherlv_0=(Token)match(input,39,FOLLOW_17); 
 
                 	newLeafNode(otherlv_0, grammarAccess.getSelectQueryAccess().getSELECTKeyword_0());
                 
-            // InternalDescartesQL.g:1597:1: ( (lv_metricReferenceClauses_1_0= ruleMetricReferenceClauses ) )
-            // InternalDescartesQL.g:1598:1: (lv_metricReferenceClauses_1_0= ruleMetricReferenceClauses )
+            // InternalDescartesQL.g:1792:1: ( (lv_metricReferenceClauses_1_0= ruleMetricReferenceClauses ) )
+            // InternalDescartesQL.g:1793:1: (lv_metricReferenceClauses_1_0= ruleMetricReferenceClauses )
             {
-            // InternalDescartesQL.g:1598:1: (lv_metricReferenceClauses_1_0= ruleMetricReferenceClauses )
-            // InternalDescartesQL.g:1599:3: lv_metricReferenceClauses_1_0= ruleMetricReferenceClauses
+            // InternalDescartesQL.g:1793:1: (lv_metricReferenceClauses_1_0= ruleMetricReferenceClauses )
+            // InternalDescartesQL.g:1794:3: lv_metricReferenceClauses_1_0= ruleMetricReferenceClauses
             {
              
             	        newCompositeNode(grammarAccess.getSelectQueryAccess().getMetricReferenceClausesMetricReferenceClausesParserRuleCall_1_0()); 
             	    
-            pushFollow(FOLLOW_30);
+            pushFollow(FOLLOW_33);
             lv_metricReferenceClauses_1_0=ruleMetricReferenceClauses();
 
             state._fsp--;
@@ -3851,24 +4339,24 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:1615:2: ( (lv_constraintClause_2_0= ruleConstraintClause ) )?
-            int alt17=2;
-            int LA17_0 = input.LA(1);
+            // InternalDescartesQL.g:1810:2: ( (lv_constraintClause_2_0= ruleConstraintClause ) )?
+            int alt24=2;
+            int LA24_0 = input.LA(1);
 
-            if ( (LA17_0==38) ) {
-                alt17=1;
+            if ( (LA24_0==42) ) {
+                alt24=1;
             }
-            switch (alt17) {
+            switch (alt24) {
                 case 1 :
-                    // InternalDescartesQL.g:1616:1: (lv_constraintClause_2_0= ruleConstraintClause )
+                    // InternalDescartesQL.g:1811:1: (lv_constraintClause_2_0= ruleConstraintClause )
                     {
-                    // InternalDescartesQL.g:1616:1: (lv_constraintClause_2_0= ruleConstraintClause )
-                    // InternalDescartesQL.g:1617:3: lv_constraintClause_2_0= ruleConstraintClause
+                    // InternalDescartesQL.g:1811:1: (lv_constraintClause_2_0= ruleConstraintClause )
+                    // InternalDescartesQL.g:1812:3: lv_constraintClause_2_0= ruleConstraintClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getSelectQueryAccess().getConstraintClauseConstraintClauseParserRuleCall_2_0()); 
                     	    
-                    pushFollow(FOLLOW_31);
+                    pushFollow(FOLLOW_34);
                     lv_constraintClause_2_0=ruleConstraintClause();
 
                     state._fsp--;
@@ -3893,24 +4381,24 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:1633:3: ( (lv_dofClause_3_0= ruleDoFClause ) )?
-            int alt18=2;
-            int LA18_0 = input.LA(1);
+            // InternalDescartesQL.g:1828:3: ( (lv_dofClause_3_0= ruleDoFClause ) )?
+            int alt25=2;
+            int LA25_0 = input.LA(1);
 
-            if ( (LA18_0==39) ) {
-                alt18=1;
+            if ( (LA25_0==43) ) {
+                alt25=1;
             }
-            switch (alt18) {
+            switch (alt25) {
                 case 1 :
-                    // InternalDescartesQL.g:1634:1: (lv_dofClause_3_0= ruleDoFClause )
+                    // InternalDescartesQL.g:1829:1: (lv_dofClause_3_0= ruleDoFClause )
                     {
-                    // InternalDescartesQL.g:1634:1: (lv_dofClause_3_0= ruleDoFClause )
-                    // InternalDescartesQL.g:1635:3: lv_dofClause_3_0= ruleDoFClause
+                    // InternalDescartesQL.g:1829:1: (lv_dofClause_3_0= ruleDoFClause )
+                    // InternalDescartesQL.g:1830:3: lv_dofClause_3_0= ruleDoFClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getSelectQueryAccess().getDofClauseDoFClauseParserRuleCall_3_0()); 
                     	    
-                    pushFollow(FOLLOW_32);
+                    pushFollow(FOLLOW_35);
                     lv_dofClause_3_0=ruleDoFClause();
 
                     state._fsp--;
@@ -3935,11 +4423,11 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:1651:3: ( (lv_forClause_4_0= ruleForClause ) )
-            // InternalDescartesQL.g:1652:1: (lv_forClause_4_0= ruleForClause )
+            // InternalDescartesQL.g:1846:3: ( (lv_forClause_4_0= ruleForClause ) )
+            // InternalDescartesQL.g:1847:1: (lv_forClause_4_0= ruleForClause )
             {
-            // InternalDescartesQL.g:1652:1: (lv_forClause_4_0= ruleForClause )
-            // InternalDescartesQL.g:1653:3: lv_forClause_4_0= ruleForClause
+            // InternalDescartesQL.g:1847:1: (lv_forClause_4_0= ruleForClause )
+            // InternalDescartesQL.g:1848:3: lv_forClause_4_0= ruleForClause
             {
              
             	        newCompositeNode(grammarAccess.getSelectQueryAccess().getForClauseForClauseParserRuleCall_4_0()); 
@@ -3966,16 +4454,16 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:1669:2: ( (lv_usingClause_5_0= ruleUsingClause ) )
-            // InternalDescartesQL.g:1670:1: (lv_usingClause_5_0= ruleUsingClause )
+            // InternalDescartesQL.g:1864:2: ( (lv_usingClause_5_0= ruleUsingClause ) )
+            // InternalDescartesQL.g:1865:1: (lv_usingClause_5_0= ruleUsingClause )
             {
-            // InternalDescartesQL.g:1670:1: (lv_usingClause_5_0= ruleUsingClause )
-            // InternalDescartesQL.g:1671:3: lv_usingClause_5_0= ruleUsingClause
+            // InternalDescartesQL.g:1865:1: (lv_usingClause_5_0= ruleUsingClause )
+            // InternalDescartesQL.g:1866:3: lv_usingClause_5_0= ruleUsingClause
             {
              
             	        newCompositeNode(grammarAccess.getSelectQueryAccess().getUsingClauseUsingClauseParserRuleCall_5_0()); 
             	    
-            pushFollow(FOLLOW_33);
+            pushFollow(FOLLOW_36);
             lv_usingClause_5_0=ruleUsingClause();
 
             state._fsp--;
@@ -3997,19 +4485,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:1687:2: ( (lv_observeClause_6_0= ruleObserveClause ) )?
-            int alt19=2;
-            int LA19_0 = input.LA(1);
+            // InternalDescartesQL.g:1882:2: ( (lv_observeClause_6_0= ruleObserveClause ) )?
+            int alt26=2;
+            int LA26_0 = input.LA(1);
 
-            if ( (LA19_0==61) ) {
-                alt19=1;
+            if ( (LA26_0==65) ) {
+                alt26=1;
             }
-            switch (alt19) {
+            switch (alt26) {
                 case 1 :
-                    // InternalDescartesQL.g:1688:1: (lv_observeClause_6_0= ruleObserveClause )
+                    // InternalDescartesQL.g:1883:1: (lv_observeClause_6_0= ruleObserveClause )
                     {
-                    // InternalDescartesQL.g:1688:1: (lv_observeClause_6_0= ruleObserveClause )
-                    // InternalDescartesQL.g:1689:3: lv_observeClause_6_0= ruleObserveClause
+                    // InternalDescartesQL.g:1883:1: (lv_observeClause_6_0= ruleObserveClause )
+                    // InternalDescartesQL.g:1884:3: lv_observeClause_6_0= ruleObserveClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getSelectQueryAccess().getObserveClauseObserveClauseParserRuleCall_6_0()); 
@@ -4060,7 +4548,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleMetricReferenceClauses"
-    // InternalDescartesQL.g:1713:1: entryRuleMetricReferenceClauses returns [EObject current=null] : iv_ruleMetricReferenceClauses= ruleMetricReferenceClauses EOF ;
+    // InternalDescartesQL.g:1908:1: entryRuleMetricReferenceClauses returns [EObject current=null] : iv_ruleMetricReferenceClauses= ruleMetricReferenceClauses EOF ;
     public final EObject entryRuleMetricReferenceClauses() throws RecognitionException {
         EObject current = null;
 
@@ -4068,8 +4556,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:1714:2: (iv_ruleMetricReferenceClauses= ruleMetricReferenceClauses EOF )
-            // InternalDescartesQL.g:1715:2: iv_ruleMetricReferenceClauses= ruleMetricReferenceClauses EOF
+            // InternalDescartesQL.g:1909:2: (iv_ruleMetricReferenceClauses= ruleMetricReferenceClauses EOF )
+            // InternalDescartesQL.g:1910:2: iv_ruleMetricReferenceClauses= ruleMetricReferenceClauses EOF
             {
              newCompositeNode(grammarAccess.getMetricReferenceClausesRule()); 
             pushFollow(FOLLOW_1);
@@ -4096,7 +4584,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleMetricReferenceClauses"
-    // InternalDescartesQL.g:1722:1: ruleMetricReferenceClauses returns [EObject current=null] : ( ( (lv_metricClauseTypes_0_0= ruleMetricClauseType ) ) (otherlv_1= ',' ( (lv_metricClauseTypes_2_0= ruleMetricClauseType ) ) )* ) ;
+    // InternalDescartesQL.g:1917:1: ruleMetricReferenceClauses returns [EObject current=null] : ( ( (lv_metricClauseTypes_0_0= ruleMetricClauseType ) ) (otherlv_1= ',' ( (lv_metricClauseTypes_2_0= ruleMetricClauseType ) ) )* ) ;
     public final EObject ruleMetricReferenceClauses() throws RecognitionException {
         EObject current = null;
 
@@ -4109,22 +4597,22 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:1725:28: ( ( ( (lv_metricClauseTypes_0_0= ruleMetricClauseType ) ) (otherlv_1= ',' ( (lv_metricClauseTypes_2_0= ruleMetricClauseType ) ) )* ) )
-            // InternalDescartesQL.g:1726:1: ( ( (lv_metricClauseTypes_0_0= ruleMetricClauseType ) ) (otherlv_1= ',' ( (lv_metricClauseTypes_2_0= ruleMetricClauseType ) ) )* )
+            // InternalDescartesQL.g:1920:28: ( ( ( (lv_metricClauseTypes_0_0= ruleMetricClauseType ) ) (otherlv_1= ',' ( (lv_metricClauseTypes_2_0= ruleMetricClauseType ) ) )* ) )
+            // InternalDescartesQL.g:1921:1: ( ( (lv_metricClauseTypes_0_0= ruleMetricClauseType ) ) (otherlv_1= ',' ( (lv_metricClauseTypes_2_0= ruleMetricClauseType ) ) )* )
             {
-            // InternalDescartesQL.g:1726:1: ( ( (lv_metricClauseTypes_0_0= ruleMetricClauseType ) ) (otherlv_1= ',' ( (lv_metricClauseTypes_2_0= ruleMetricClauseType ) ) )* )
-            // InternalDescartesQL.g:1726:2: ( (lv_metricClauseTypes_0_0= ruleMetricClauseType ) ) (otherlv_1= ',' ( (lv_metricClauseTypes_2_0= ruleMetricClauseType ) ) )*
+            // InternalDescartesQL.g:1921:1: ( ( (lv_metricClauseTypes_0_0= ruleMetricClauseType ) ) (otherlv_1= ',' ( (lv_metricClauseTypes_2_0= ruleMetricClauseType ) ) )* )
+            // InternalDescartesQL.g:1921:2: ( (lv_metricClauseTypes_0_0= ruleMetricClauseType ) ) (otherlv_1= ',' ( (lv_metricClauseTypes_2_0= ruleMetricClauseType ) ) )*
             {
-            // InternalDescartesQL.g:1726:2: ( (lv_metricClauseTypes_0_0= ruleMetricClauseType ) )
-            // InternalDescartesQL.g:1727:1: (lv_metricClauseTypes_0_0= ruleMetricClauseType )
+            // InternalDescartesQL.g:1921:2: ( (lv_metricClauseTypes_0_0= ruleMetricClauseType ) )
+            // InternalDescartesQL.g:1922:1: (lv_metricClauseTypes_0_0= ruleMetricClauseType )
             {
-            // InternalDescartesQL.g:1727:1: (lv_metricClauseTypes_0_0= ruleMetricClauseType )
-            // InternalDescartesQL.g:1728:3: lv_metricClauseTypes_0_0= ruleMetricClauseType
+            // InternalDescartesQL.g:1922:1: (lv_metricClauseTypes_0_0= ruleMetricClauseType )
+            // InternalDescartesQL.g:1923:3: lv_metricClauseTypes_0_0= ruleMetricClauseType
             {
              
             	        newCompositeNode(grammarAccess.getMetricReferenceClausesAccess().getMetricClauseTypesMetricClauseTypeParserRuleCall_0_0()); 
             	    
-            pushFollow(FOLLOW_8);
+            pushFollow(FOLLOW_12);
             lv_metricClauseTypes_0_0=ruleMetricClauseType();
 
             state._fsp--;
@@ -4146,35 +4634,35 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:1744:2: (otherlv_1= ',' ( (lv_metricClauseTypes_2_0= ruleMetricClauseType ) ) )*
-            loop20:
+            // InternalDescartesQL.g:1939:2: (otherlv_1= ',' ( (lv_metricClauseTypes_2_0= ruleMetricClauseType ) ) )*
+            loop27:
             do {
-                int alt20=2;
-                int LA20_0 = input.LA(1);
+                int alt27=2;
+                int LA27_0 = input.LA(1);
 
-                if ( (LA20_0==16) ) {
-                    alt20=1;
+                if ( (LA27_0==20) ) {
+                    alt27=1;
                 }
 
 
-                switch (alt20) {
+                switch (alt27) {
             	case 1 :
-            	    // InternalDescartesQL.g:1744:4: otherlv_1= ',' ( (lv_metricClauseTypes_2_0= ruleMetricClauseType ) )
+            	    // InternalDescartesQL.g:1939:4: otherlv_1= ',' ( (lv_metricClauseTypes_2_0= ruleMetricClauseType ) )
             	    {
-            	    otherlv_1=(Token)match(input,16,FOLLOW_13); 
+            	    otherlv_1=(Token)match(input,20,FOLLOW_17); 
 
             	        	newLeafNode(otherlv_1, grammarAccess.getMetricReferenceClausesAccess().getCommaKeyword_1_0());
             	        
-            	    // InternalDescartesQL.g:1748:1: ( (lv_metricClauseTypes_2_0= ruleMetricClauseType ) )
-            	    // InternalDescartesQL.g:1749:1: (lv_metricClauseTypes_2_0= ruleMetricClauseType )
+            	    // InternalDescartesQL.g:1943:1: ( (lv_metricClauseTypes_2_0= ruleMetricClauseType ) )
+            	    // InternalDescartesQL.g:1944:1: (lv_metricClauseTypes_2_0= ruleMetricClauseType )
             	    {
-            	    // InternalDescartesQL.g:1749:1: (lv_metricClauseTypes_2_0= ruleMetricClauseType )
-            	    // InternalDescartesQL.g:1750:3: lv_metricClauseTypes_2_0= ruleMetricClauseType
+            	    // InternalDescartesQL.g:1944:1: (lv_metricClauseTypes_2_0= ruleMetricClauseType )
+            	    // InternalDescartesQL.g:1945:3: lv_metricClauseTypes_2_0= ruleMetricClauseType
             	    {
             	     
             	    	        newCompositeNode(grammarAccess.getMetricReferenceClausesAccess().getMetricClauseTypesMetricClauseTypeParserRuleCall_1_1_0()); 
             	    	    
-            	    pushFollow(FOLLOW_8);
+            	    pushFollow(FOLLOW_12);
             	    lv_metricClauseTypes_2_0=ruleMetricClauseType();
 
             	    state._fsp--;
@@ -4201,7 +4689,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
             	    break;
 
             	default :
-            	    break loop20;
+            	    break loop27;
                 }
             } while (true);
 
@@ -4226,7 +4714,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleMetricClauseType"
-    // InternalDescartesQL.g:1774:1: entryRuleMetricClauseType returns [EObject current=null] : iv_ruleMetricClauseType= ruleMetricClauseType EOF ;
+    // InternalDescartesQL.g:1969:1: entryRuleMetricClauseType returns [EObject current=null] : iv_ruleMetricClauseType= ruleMetricClauseType EOF ;
     public final EObject entryRuleMetricClauseType() throws RecognitionException {
         EObject current = null;
 
@@ -4234,8 +4722,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:1775:2: (iv_ruleMetricClauseType= ruleMetricClauseType EOF )
-            // InternalDescartesQL.g:1776:2: iv_ruleMetricClauseType= ruleMetricClauseType EOF
+            // InternalDescartesQL.g:1970:2: (iv_ruleMetricClauseType= ruleMetricClauseType EOF )
+            // InternalDescartesQL.g:1971:2: iv_ruleMetricClauseType= ruleMetricClauseType EOF
             {
              newCompositeNode(grammarAccess.getMetricClauseTypeRule()); 
             pushFollow(FOLLOW_1);
@@ -4262,7 +4750,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleMetricClauseType"
-    // InternalDescartesQL.g:1783:1: ruleMetricClauseType returns [EObject current=null] : (this_MetricClause_0= ruleMetricClause | this_AggregateMetricClause_1= ruleAggregateMetricClause ) ;
+    // InternalDescartesQL.g:1978:1: ruleMetricClauseType returns [EObject current=null] : (this_MetricClause_0= ruleMetricClause | this_AggregateMetricClause_1= ruleAggregateMetricClause ) ;
     public final EObject ruleMetricClauseType() throws RecognitionException {
         EObject current = null;
 
@@ -4274,28 +4762,28 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:1786:28: ( (this_MetricClause_0= ruleMetricClause | this_AggregateMetricClause_1= ruleAggregateMetricClause ) )
-            // InternalDescartesQL.g:1787:1: (this_MetricClause_0= ruleMetricClause | this_AggregateMetricClause_1= ruleAggregateMetricClause )
+            // InternalDescartesQL.g:1981:28: ( (this_MetricClause_0= ruleMetricClause | this_AggregateMetricClause_1= ruleAggregateMetricClause ) )
+            // InternalDescartesQL.g:1982:1: (this_MetricClause_0= ruleMetricClause | this_AggregateMetricClause_1= ruleAggregateMetricClause )
             {
-            // InternalDescartesQL.g:1787:1: (this_MetricClause_0= ruleMetricClause | this_AggregateMetricClause_1= ruleAggregateMetricClause )
-            int alt21=2;
-            int LA21_0 = input.LA(1);
+            // InternalDescartesQL.g:1982:1: (this_MetricClause_0= ruleMetricClause | this_AggregateMetricClause_1= ruleAggregateMetricClause )
+            int alt28=2;
+            int LA28_0 = input.LA(1);
 
-            if ( (LA21_0==RULE_ID) ) {
-                alt21=1;
+            if ( (LA28_0==RULE_ID) ) {
+                alt28=1;
             }
-            else if ( ((LA21_0>=93 && LA21_0<=102)) ) {
-                alt21=2;
+            else if ( ((LA28_0>=97 && LA28_0<=106)) ) {
+                alt28=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("", 21, 0, input);
+                    new NoViableAltException("", 28, 0, input);
 
                 throw nvae;
             }
-            switch (alt21) {
+            switch (alt28) {
                 case 1 :
-                    // InternalDescartesQL.g:1788:5: this_MetricClause_0= ruleMetricClause
+                    // InternalDescartesQL.g:1983:5: this_MetricClause_0= ruleMetricClause
                     {
                      
                             newCompositeNode(grammarAccess.getMetricClauseTypeAccess().getMetricClauseParserRuleCall_0()); 
@@ -4313,7 +4801,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 2 :
-                    // InternalDescartesQL.g:1798:5: this_AggregateMetricClause_1= ruleAggregateMetricClause
+                    // InternalDescartesQL.g:1993:5: this_AggregateMetricClause_1= ruleAggregateMetricClause
                     {
                      
                             newCompositeNode(grammarAccess.getMetricClauseTypeAccess().getAggregateMetricClauseParserRuleCall_1()); 
@@ -4351,7 +4839,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleDetectQuery"
-    // InternalDescartesQL.g:1814:1: entryRuleDetectQuery returns [EObject current=null] : iv_ruleDetectQuery= ruleDetectQuery EOF ;
+    // InternalDescartesQL.g:2009:1: entryRuleDetectQuery returns [EObject current=null] : iv_ruleDetectQuery= ruleDetectQuery EOF ;
     public final EObject entryRuleDetectQuery() throws RecognitionException {
         EObject current = null;
 
@@ -4359,8 +4847,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:1815:2: (iv_ruleDetectQuery= ruleDetectQuery EOF )
-            // InternalDescartesQL.g:1816:2: iv_ruleDetectQuery= ruleDetectQuery EOF
+            // InternalDescartesQL.g:2010:2: (iv_ruleDetectQuery= ruleDetectQuery EOF )
+            // InternalDescartesQL.g:2011:2: iv_ruleDetectQuery= ruleDetectQuery EOF
             {
              newCompositeNode(grammarAccess.getDetectQueryRule()); 
             pushFollow(FOLLOW_1);
@@ -4387,7 +4875,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleDetectQuery"
-    // InternalDescartesQL.g:1823:1: ruleDetectQuery returns [EObject current=null] : (otherlv_0= 'DETECT' ( (lv_queryType_1_0= ruleDetectBottlenecksQuery ) ) ) ;
+    // InternalDescartesQL.g:2018:1: ruleDetectQuery returns [EObject current=null] : (otherlv_0= 'DETECT' ( (lv_queryType_1_0= ruleDetectBottlenecksQuery ) ) ) ;
     public final EObject ruleDetectQuery() throws RecognitionException {
         EObject current = null;
 
@@ -4398,21 +4886,21 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:1826:28: ( (otherlv_0= 'DETECT' ( (lv_queryType_1_0= ruleDetectBottlenecksQuery ) ) ) )
-            // InternalDescartesQL.g:1827:1: (otherlv_0= 'DETECT' ( (lv_queryType_1_0= ruleDetectBottlenecksQuery ) ) )
+            // InternalDescartesQL.g:2021:28: ( (otherlv_0= 'DETECT' ( (lv_queryType_1_0= ruleDetectBottlenecksQuery ) ) ) )
+            // InternalDescartesQL.g:2022:1: (otherlv_0= 'DETECT' ( (lv_queryType_1_0= ruleDetectBottlenecksQuery ) ) )
             {
-            // InternalDescartesQL.g:1827:1: (otherlv_0= 'DETECT' ( (lv_queryType_1_0= ruleDetectBottlenecksQuery ) ) )
-            // InternalDescartesQL.g:1827:3: otherlv_0= 'DETECT' ( (lv_queryType_1_0= ruleDetectBottlenecksQuery ) )
+            // InternalDescartesQL.g:2022:1: (otherlv_0= 'DETECT' ( (lv_queryType_1_0= ruleDetectBottlenecksQuery ) ) )
+            // InternalDescartesQL.g:2022:3: otherlv_0= 'DETECT' ( (lv_queryType_1_0= ruleDetectBottlenecksQuery ) )
             {
-            otherlv_0=(Token)match(input,36,FOLLOW_34); 
+            otherlv_0=(Token)match(input,40,FOLLOW_37); 
 
                 	newLeafNode(otherlv_0, grammarAccess.getDetectQueryAccess().getDETECTKeyword_0());
                 
-            // InternalDescartesQL.g:1831:1: ( (lv_queryType_1_0= ruleDetectBottlenecksQuery ) )
-            // InternalDescartesQL.g:1832:1: (lv_queryType_1_0= ruleDetectBottlenecksQuery )
+            // InternalDescartesQL.g:2026:1: ( (lv_queryType_1_0= ruleDetectBottlenecksQuery ) )
+            // InternalDescartesQL.g:2027:1: (lv_queryType_1_0= ruleDetectBottlenecksQuery )
             {
-            // InternalDescartesQL.g:1832:1: (lv_queryType_1_0= ruleDetectBottlenecksQuery )
-            // InternalDescartesQL.g:1833:3: lv_queryType_1_0= ruleDetectBottlenecksQuery
+            // InternalDescartesQL.g:2027:1: (lv_queryType_1_0= ruleDetectBottlenecksQuery )
+            // InternalDescartesQL.g:2028:3: lv_queryType_1_0= ruleDetectBottlenecksQuery
             {
              
             	        newCompositeNode(grammarAccess.getDetectQueryAccess().getQueryTypeDetectBottlenecksQueryParserRuleCall_1_0()); 
@@ -4460,7 +4948,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleDetectBottlenecksQuery"
-    // InternalDescartesQL.g:1857:1: entryRuleDetectBottlenecksQuery returns [EObject current=null] : iv_ruleDetectBottlenecksQuery= ruleDetectBottlenecksQuery EOF ;
+    // InternalDescartesQL.g:2052:1: entryRuleDetectBottlenecksQuery returns [EObject current=null] : iv_ruleDetectBottlenecksQuery= ruleDetectBottlenecksQuery EOF ;
     public final EObject entryRuleDetectBottlenecksQuery() throws RecognitionException {
         EObject current = null;
 
@@ -4468,8 +4956,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:1858:2: (iv_ruleDetectBottlenecksQuery= ruleDetectBottlenecksQuery EOF )
-            // InternalDescartesQL.g:1859:2: iv_ruleDetectBottlenecksQuery= ruleDetectBottlenecksQuery EOF
+            // InternalDescartesQL.g:2053:2: (iv_ruleDetectBottlenecksQuery= ruleDetectBottlenecksQuery EOF )
+            // InternalDescartesQL.g:2054:2: iv_ruleDetectBottlenecksQuery= ruleDetectBottlenecksQuery EOF
             {
              newCompositeNode(grammarAccess.getDetectBottlenecksQueryRule()); 
             pushFollow(FOLLOW_1);
@@ -4496,7 +4984,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleDetectBottlenecksQuery"
-    // InternalDescartesQL.g:1866:1: ruleDetectBottlenecksQuery returns [EObject current=null] : (otherlv_0= 'BOTTLENECKS' ( (lv_dofClause_1_0= ruleDoFClause ) ) ( (lv_usingClause_2_0= ruleUsingClause ) ) ) ;
+    // InternalDescartesQL.g:2061:1: ruleDetectBottlenecksQuery returns [EObject current=null] : (otherlv_0= 'BOTTLENECKS' ( (lv_dofClause_1_0= ruleDoFClause ) ) ( (lv_usingClause_2_0= ruleUsingClause ) ) ) ;
     public final EObject ruleDetectBottlenecksQuery() throws RecognitionException {
         EObject current = null;
 
@@ -4509,21 +4997,21 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:1869:28: ( (otherlv_0= 'BOTTLENECKS' ( (lv_dofClause_1_0= ruleDoFClause ) ) ( (lv_usingClause_2_0= ruleUsingClause ) ) ) )
-            // InternalDescartesQL.g:1870:1: (otherlv_0= 'BOTTLENECKS' ( (lv_dofClause_1_0= ruleDoFClause ) ) ( (lv_usingClause_2_0= ruleUsingClause ) ) )
+            // InternalDescartesQL.g:2064:28: ( (otherlv_0= 'BOTTLENECKS' ( (lv_dofClause_1_0= ruleDoFClause ) ) ( (lv_usingClause_2_0= ruleUsingClause ) ) ) )
+            // InternalDescartesQL.g:2065:1: (otherlv_0= 'BOTTLENECKS' ( (lv_dofClause_1_0= ruleDoFClause ) ) ( (lv_usingClause_2_0= ruleUsingClause ) ) )
             {
-            // InternalDescartesQL.g:1870:1: (otherlv_0= 'BOTTLENECKS' ( (lv_dofClause_1_0= ruleDoFClause ) ) ( (lv_usingClause_2_0= ruleUsingClause ) ) )
-            // InternalDescartesQL.g:1870:3: otherlv_0= 'BOTTLENECKS' ( (lv_dofClause_1_0= ruleDoFClause ) ) ( (lv_usingClause_2_0= ruleUsingClause ) )
+            // InternalDescartesQL.g:2065:1: (otherlv_0= 'BOTTLENECKS' ( (lv_dofClause_1_0= ruleDoFClause ) ) ( (lv_usingClause_2_0= ruleUsingClause ) ) )
+            // InternalDescartesQL.g:2065:3: otherlv_0= 'BOTTLENECKS' ( (lv_dofClause_1_0= ruleDoFClause ) ) ( (lv_usingClause_2_0= ruleUsingClause ) )
             {
-            otherlv_0=(Token)match(input,37,FOLLOW_35); 
+            otherlv_0=(Token)match(input,41,FOLLOW_38); 
 
                 	newLeafNode(otherlv_0, grammarAccess.getDetectBottlenecksQueryAccess().getBOTTLENECKSKeyword_0());
                 
-            // InternalDescartesQL.g:1874:1: ( (lv_dofClause_1_0= ruleDoFClause ) )
-            // InternalDescartesQL.g:1875:1: (lv_dofClause_1_0= ruleDoFClause )
+            // InternalDescartesQL.g:2069:1: ( (lv_dofClause_1_0= ruleDoFClause ) )
+            // InternalDescartesQL.g:2070:1: (lv_dofClause_1_0= ruleDoFClause )
             {
-            // InternalDescartesQL.g:1875:1: (lv_dofClause_1_0= ruleDoFClause )
-            // InternalDescartesQL.g:1876:3: lv_dofClause_1_0= ruleDoFClause
+            // InternalDescartesQL.g:2070:1: (lv_dofClause_1_0= ruleDoFClause )
+            // InternalDescartesQL.g:2071:3: lv_dofClause_1_0= ruleDoFClause
             {
              
             	        newCompositeNode(grammarAccess.getDetectBottlenecksQueryAccess().getDofClauseDoFClauseParserRuleCall_1_0()); 
@@ -4550,11 +5038,11 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:1892:2: ( (lv_usingClause_2_0= ruleUsingClause ) )
-            // InternalDescartesQL.g:1893:1: (lv_usingClause_2_0= ruleUsingClause )
+            // InternalDescartesQL.g:2087:2: ( (lv_usingClause_2_0= ruleUsingClause ) )
+            // InternalDescartesQL.g:2088:1: (lv_usingClause_2_0= ruleUsingClause )
             {
-            // InternalDescartesQL.g:1893:1: (lv_usingClause_2_0= ruleUsingClause )
-            // InternalDescartesQL.g:1894:3: lv_usingClause_2_0= ruleUsingClause
+            // InternalDescartesQL.g:2088:1: (lv_usingClause_2_0= ruleUsingClause )
+            // InternalDescartesQL.g:2089:3: lv_usingClause_2_0= ruleUsingClause
             {
              
             	        newCompositeNode(grammarAccess.getDetectBottlenecksQueryAccess().getUsingClauseUsingClauseParserRuleCall_2_0()); 
@@ -4602,7 +5090,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleConstraintClause"
-    // InternalDescartesQL.g:1918:1: entryRuleConstraintClause returns [EObject current=null] : iv_ruleConstraintClause= ruleConstraintClause EOF ;
+    // InternalDescartesQL.g:2113:1: entryRuleConstraintClause returns [EObject current=null] : iv_ruleConstraintClause= ruleConstraintClause EOF ;
     public final EObject entryRuleConstraintClause() throws RecognitionException {
         EObject current = null;
 
@@ -4610,8 +5098,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:1919:2: (iv_ruleConstraintClause= ruleConstraintClause EOF )
-            // InternalDescartesQL.g:1920:2: iv_ruleConstraintClause= ruleConstraintClause EOF
+            // InternalDescartesQL.g:2114:2: (iv_ruleConstraintClause= ruleConstraintClause EOF )
+            // InternalDescartesQL.g:2115:2: iv_ruleConstraintClause= ruleConstraintClause EOF
             {
              newCompositeNode(grammarAccess.getConstraintClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -4638,7 +5126,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleConstraintClause"
-    // InternalDescartesQL.g:1927:1: ruleConstraintClause returns [EObject current=null] : (otherlv_0= 'CONSTRAINED AS' ( (lv_type_1_0= RULE_STRING ) ) ) ;
+    // InternalDescartesQL.g:2122:1: ruleConstraintClause returns [EObject current=null] : (otherlv_0= 'CONSTRAINED AS' ( (lv_type_1_0= RULE_STRING ) ) ) ;
     public final EObject ruleConstraintClause() throws RecognitionException {
         EObject current = null;
 
@@ -4648,21 +5136,21 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:1930:28: ( (otherlv_0= 'CONSTRAINED AS' ( (lv_type_1_0= RULE_STRING ) ) ) )
-            // InternalDescartesQL.g:1931:1: (otherlv_0= 'CONSTRAINED AS' ( (lv_type_1_0= RULE_STRING ) ) )
+            // InternalDescartesQL.g:2125:28: ( (otherlv_0= 'CONSTRAINED AS' ( (lv_type_1_0= RULE_STRING ) ) ) )
+            // InternalDescartesQL.g:2126:1: (otherlv_0= 'CONSTRAINED AS' ( (lv_type_1_0= RULE_STRING ) ) )
             {
-            // InternalDescartesQL.g:1931:1: (otherlv_0= 'CONSTRAINED AS' ( (lv_type_1_0= RULE_STRING ) ) )
-            // InternalDescartesQL.g:1931:3: otherlv_0= 'CONSTRAINED AS' ( (lv_type_1_0= RULE_STRING ) )
+            // InternalDescartesQL.g:2126:1: (otherlv_0= 'CONSTRAINED AS' ( (lv_type_1_0= RULE_STRING ) ) )
+            // InternalDescartesQL.g:2126:3: otherlv_0= 'CONSTRAINED AS' ( (lv_type_1_0= RULE_STRING ) )
             {
-            otherlv_0=(Token)match(input,38,FOLLOW_36); 
+            otherlv_0=(Token)match(input,42,FOLLOW_39); 
 
                 	newLeafNode(otherlv_0, grammarAccess.getConstraintClauseAccess().getCONSTRAINEDASKeyword_0());
                 
-            // InternalDescartesQL.g:1935:1: ( (lv_type_1_0= RULE_STRING ) )
-            // InternalDescartesQL.g:1936:1: (lv_type_1_0= RULE_STRING )
+            // InternalDescartesQL.g:2130:1: ( (lv_type_1_0= RULE_STRING ) )
+            // InternalDescartesQL.g:2131:1: (lv_type_1_0= RULE_STRING )
             {
-            // InternalDescartesQL.g:1936:1: (lv_type_1_0= RULE_STRING )
-            // InternalDescartesQL.g:1937:3: lv_type_1_0= RULE_STRING
+            // InternalDescartesQL.g:2131:1: (lv_type_1_0= RULE_STRING )
+            // InternalDescartesQL.g:2132:3: lv_type_1_0= RULE_STRING
             {
             lv_type_1_0=(Token)match(input,RULE_STRING,FOLLOW_2); 
 
@@ -4705,7 +5193,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleDoFClause"
-    // InternalDescartesQL.g:1961:1: entryRuleDoFClause returns [EObject current=null] : iv_ruleDoFClause= ruleDoFClause EOF ;
+    // InternalDescartesQL.g:2156:1: entryRuleDoFClause returns [EObject current=null] : iv_ruleDoFClause= ruleDoFClause EOF ;
     public final EObject entryRuleDoFClause() throws RecognitionException {
         EObject current = null;
 
@@ -4713,8 +5201,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:1962:2: (iv_ruleDoFClause= ruleDoFClause EOF )
-            // InternalDescartesQL.g:1963:2: iv_ruleDoFClause= ruleDoFClause EOF
+            // InternalDescartesQL.g:2157:2: (iv_ruleDoFClause= ruleDoFClause EOF )
+            // InternalDescartesQL.g:2158:2: iv_ruleDoFClause= ruleDoFClause EOF
             {
              newCompositeNode(grammarAccess.getDoFClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -4741,7 +5229,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleDoFClause"
-    // InternalDescartesQL.g:1970:1: ruleDoFClause returns [EObject current=null] : ( ( (lv_mode_0_0= 'EVALUATE DOF' ) ) ( (lv_varyingClause_1_0= ruleVaryingClause ) )? ( (lv_explorationStrategy_2_0= ruleExplorationStrategyClause ) )? ( (lv_constraintClause_3_0= ruleConstraintClause ) )? ( (lv_withClause_4_0= ruleWithClause ) )? ) ;
+    // InternalDescartesQL.g:2165:1: ruleDoFClause returns [EObject current=null] : ( ( (lv_mode_0_0= 'EVALUATE DOF' ) ) ( (lv_varyingClause_1_0= ruleVaryingClause ) )? ( (lv_explorationStrategy_2_0= ruleExplorationStrategyClause ) )? ( (lv_constraintClause_3_0= ruleConstraintClause ) )? ( (lv_withClause_4_0= ruleWithClause ) )? ) ;
     public final EObject ruleDoFClause() throws RecognitionException {
         EObject current = null;
 
@@ -4758,19 +5246,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:1973:28: ( ( ( (lv_mode_0_0= 'EVALUATE DOF' ) ) ( (lv_varyingClause_1_0= ruleVaryingClause ) )? ( (lv_explorationStrategy_2_0= ruleExplorationStrategyClause ) )? ( (lv_constraintClause_3_0= ruleConstraintClause ) )? ( (lv_withClause_4_0= ruleWithClause ) )? ) )
-            // InternalDescartesQL.g:1974:1: ( ( (lv_mode_0_0= 'EVALUATE DOF' ) ) ( (lv_varyingClause_1_0= ruleVaryingClause ) )? ( (lv_explorationStrategy_2_0= ruleExplorationStrategyClause ) )? ( (lv_constraintClause_3_0= ruleConstraintClause ) )? ( (lv_withClause_4_0= ruleWithClause ) )? )
+            // InternalDescartesQL.g:2168:28: ( ( ( (lv_mode_0_0= 'EVALUATE DOF' ) ) ( (lv_varyingClause_1_0= ruleVaryingClause ) )? ( (lv_explorationStrategy_2_0= ruleExplorationStrategyClause ) )? ( (lv_constraintClause_3_0= ruleConstraintClause ) )? ( (lv_withClause_4_0= ruleWithClause ) )? ) )
+            // InternalDescartesQL.g:2169:1: ( ( (lv_mode_0_0= 'EVALUATE DOF' ) ) ( (lv_varyingClause_1_0= ruleVaryingClause ) )? ( (lv_explorationStrategy_2_0= ruleExplorationStrategyClause ) )? ( (lv_constraintClause_3_0= ruleConstraintClause ) )? ( (lv_withClause_4_0= ruleWithClause ) )? )
             {
-            // InternalDescartesQL.g:1974:1: ( ( (lv_mode_0_0= 'EVALUATE DOF' ) ) ( (lv_varyingClause_1_0= ruleVaryingClause ) )? ( (lv_explorationStrategy_2_0= ruleExplorationStrategyClause ) )? ( (lv_constraintClause_3_0= ruleConstraintClause ) )? ( (lv_withClause_4_0= ruleWithClause ) )? )
-            // InternalDescartesQL.g:1974:2: ( (lv_mode_0_0= 'EVALUATE DOF' ) ) ( (lv_varyingClause_1_0= ruleVaryingClause ) )? ( (lv_explorationStrategy_2_0= ruleExplorationStrategyClause ) )? ( (lv_constraintClause_3_0= ruleConstraintClause ) )? ( (lv_withClause_4_0= ruleWithClause ) )?
+            // InternalDescartesQL.g:2169:1: ( ( (lv_mode_0_0= 'EVALUATE DOF' ) ) ( (lv_varyingClause_1_0= ruleVaryingClause ) )? ( (lv_explorationStrategy_2_0= ruleExplorationStrategyClause ) )? ( (lv_constraintClause_3_0= ruleConstraintClause ) )? ( (lv_withClause_4_0= ruleWithClause ) )? )
+            // InternalDescartesQL.g:2169:2: ( (lv_mode_0_0= 'EVALUATE DOF' ) ) ( (lv_varyingClause_1_0= ruleVaryingClause ) )? ( (lv_explorationStrategy_2_0= ruleExplorationStrategyClause ) )? ( (lv_constraintClause_3_0= ruleConstraintClause ) )? ( (lv_withClause_4_0= ruleWithClause ) )?
             {
-            // InternalDescartesQL.g:1974:2: ( (lv_mode_0_0= 'EVALUATE DOF' ) )
-            // InternalDescartesQL.g:1975:1: (lv_mode_0_0= 'EVALUATE DOF' )
+            // InternalDescartesQL.g:2169:2: ( (lv_mode_0_0= 'EVALUATE DOF' ) )
+            // InternalDescartesQL.g:2170:1: (lv_mode_0_0= 'EVALUATE DOF' )
             {
-            // InternalDescartesQL.g:1975:1: (lv_mode_0_0= 'EVALUATE DOF' )
-            // InternalDescartesQL.g:1976:3: lv_mode_0_0= 'EVALUATE DOF'
+            // InternalDescartesQL.g:2170:1: (lv_mode_0_0= 'EVALUATE DOF' )
+            // InternalDescartesQL.g:2171:3: lv_mode_0_0= 'EVALUATE DOF'
             {
-            lv_mode_0_0=(Token)match(input,39,FOLLOW_37); 
+            lv_mode_0_0=(Token)match(input,43,FOLLOW_40); 
 
                     newLeafNode(lv_mode_0_0, grammarAccess.getDoFClauseAccess().getModeEVALUATEDOFKeyword_0_0());
                 
@@ -4786,24 +5274,24 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:1989:2: ( (lv_varyingClause_1_0= ruleVaryingClause ) )?
-            int alt22=2;
-            int LA22_0 = input.LA(1);
+            // InternalDescartesQL.g:2184:2: ( (lv_varyingClause_1_0= ruleVaryingClause ) )?
+            int alt29=2;
+            int LA29_0 = input.LA(1);
 
-            if ( (LA22_0==49) ) {
-                alt22=1;
+            if ( (LA29_0==53) ) {
+                alt29=1;
             }
-            switch (alt22) {
+            switch (alt29) {
                 case 1 :
-                    // InternalDescartesQL.g:1990:1: (lv_varyingClause_1_0= ruleVaryingClause )
+                    // InternalDescartesQL.g:2185:1: (lv_varyingClause_1_0= ruleVaryingClause )
                     {
-                    // InternalDescartesQL.g:1990:1: (lv_varyingClause_1_0= ruleVaryingClause )
-                    // InternalDescartesQL.g:1991:3: lv_varyingClause_1_0= ruleVaryingClause
+                    // InternalDescartesQL.g:2185:1: (lv_varyingClause_1_0= ruleVaryingClause )
+                    // InternalDescartesQL.g:2186:3: lv_varyingClause_1_0= ruleVaryingClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getDoFClauseAccess().getVaryingClauseVaryingClauseParserRuleCall_1_0()); 
                     	    
-                    pushFollow(FOLLOW_38);
+                    pushFollow(FOLLOW_41);
                     lv_varyingClause_1_0=ruleVaryingClause();
 
                     state._fsp--;
@@ -4828,24 +5316,24 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:2007:3: ( (lv_explorationStrategy_2_0= ruleExplorationStrategyClause ) )?
-            int alt23=2;
-            int LA23_0 = input.LA(1);
+            // InternalDescartesQL.g:2202:3: ( (lv_explorationStrategy_2_0= ruleExplorationStrategyClause ) )?
+            int alt30=2;
+            int LA30_0 = input.LA(1);
 
-            if ( (LA23_0==40) ) {
-                alt23=1;
+            if ( (LA30_0==44) ) {
+                alt30=1;
             }
-            switch (alt23) {
+            switch (alt30) {
                 case 1 :
-                    // InternalDescartesQL.g:2008:1: (lv_explorationStrategy_2_0= ruleExplorationStrategyClause )
+                    // InternalDescartesQL.g:2203:1: (lv_explorationStrategy_2_0= ruleExplorationStrategyClause )
                     {
-                    // InternalDescartesQL.g:2008:1: (lv_explorationStrategy_2_0= ruleExplorationStrategyClause )
-                    // InternalDescartesQL.g:2009:3: lv_explorationStrategy_2_0= ruleExplorationStrategyClause
+                    // InternalDescartesQL.g:2203:1: (lv_explorationStrategy_2_0= ruleExplorationStrategyClause )
+                    // InternalDescartesQL.g:2204:3: lv_explorationStrategy_2_0= ruleExplorationStrategyClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getDoFClauseAccess().getExplorationStrategyExplorationStrategyClauseParserRuleCall_2_0()); 
                     	    
-                    pushFollow(FOLLOW_39);
+                    pushFollow(FOLLOW_42);
                     lv_explorationStrategy_2_0=ruleExplorationStrategyClause();
 
                     state._fsp--;
@@ -4870,24 +5358,24 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:2025:3: ( (lv_constraintClause_3_0= ruleConstraintClause ) )?
-            int alt24=2;
-            int LA24_0 = input.LA(1);
+            // InternalDescartesQL.g:2220:3: ( (lv_constraintClause_3_0= ruleConstraintClause ) )?
+            int alt31=2;
+            int LA31_0 = input.LA(1);
 
-            if ( (LA24_0==38) ) {
-                alt24=1;
+            if ( (LA31_0==42) ) {
+                alt31=1;
             }
-            switch (alt24) {
+            switch (alt31) {
                 case 1 :
-                    // InternalDescartesQL.g:2026:1: (lv_constraintClause_3_0= ruleConstraintClause )
+                    // InternalDescartesQL.g:2221:1: (lv_constraintClause_3_0= ruleConstraintClause )
                     {
-                    // InternalDescartesQL.g:2026:1: (lv_constraintClause_3_0= ruleConstraintClause )
-                    // InternalDescartesQL.g:2027:3: lv_constraintClause_3_0= ruleConstraintClause
+                    // InternalDescartesQL.g:2221:1: (lv_constraintClause_3_0= ruleConstraintClause )
+                    // InternalDescartesQL.g:2222:3: lv_constraintClause_3_0= ruleConstraintClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getDoFClauseAccess().getConstraintClauseConstraintClauseParserRuleCall_3_0()); 
                     	    
-                    pushFollow(FOLLOW_27);
+                    pushFollow(FOLLOW_30);
                     lv_constraintClause_3_0=ruleConstraintClause();
 
                     state._fsp--;
@@ -4912,19 +5400,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:2043:3: ( (lv_withClause_4_0= ruleWithClause ) )?
-            int alt25=2;
-            int LA25_0 = input.LA(1);
+            // InternalDescartesQL.g:2238:3: ( (lv_withClause_4_0= ruleWithClause ) )?
+            int alt32=2;
+            int LA32_0 = input.LA(1);
 
-            if ( (LA25_0==57) ) {
-                alt25=1;
+            if ( (LA32_0==61) ) {
+                alt32=1;
             }
-            switch (alt25) {
+            switch (alt32) {
                 case 1 :
-                    // InternalDescartesQL.g:2044:1: (lv_withClause_4_0= ruleWithClause )
+                    // InternalDescartesQL.g:2239:1: (lv_withClause_4_0= ruleWithClause )
                     {
-                    // InternalDescartesQL.g:2044:1: (lv_withClause_4_0= ruleWithClause )
-                    // InternalDescartesQL.g:2045:3: lv_withClause_4_0= ruleWithClause
+                    // InternalDescartesQL.g:2239:1: (lv_withClause_4_0= ruleWithClause )
+                    // InternalDescartesQL.g:2240:3: lv_withClause_4_0= ruleWithClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getDoFClauseAccess().getWithClauseWithClauseParserRuleCall_4_0()); 
@@ -4975,7 +5463,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleExplorationStrategyClause"
-    // InternalDescartesQL.g:2069:1: entryRuleExplorationStrategyClause returns [EObject current=null] : iv_ruleExplorationStrategyClause= ruleExplorationStrategyClause EOF ;
+    // InternalDescartesQL.g:2264:1: entryRuleExplorationStrategyClause returns [EObject current=null] : iv_ruleExplorationStrategyClause= ruleExplorationStrategyClause EOF ;
     public final EObject entryRuleExplorationStrategyClause() throws RecognitionException {
         EObject current = null;
 
@@ -4983,8 +5471,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:2070:2: (iv_ruleExplorationStrategyClause= ruleExplorationStrategyClause EOF )
-            // InternalDescartesQL.g:2071:2: iv_ruleExplorationStrategyClause= ruleExplorationStrategyClause EOF
+            // InternalDescartesQL.g:2265:2: (iv_ruleExplorationStrategyClause= ruleExplorationStrategyClause EOF )
+            // InternalDescartesQL.g:2266:2: iv_ruleExplorationStrategyClause= ruleExplorationStrategyClause EOF
             {
              newCompositeNode(grammarAccess.getExplorationStrategyClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -5011,7 +5499,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleExplorationStrategyClause"
-    // InternalDescartesQL.g:2078:1: ruleExplorationStrategyClause returns [EObject current=null] : ( ( (lv_mode_0_0= 'GUIDED BY' ) ) ( (lv_name_1_0= RULE_STRING ) ) ( (lv_parameterClause_2_0= ruleConfigurationPropertiesClause ) )? ) ;
+    // InternalDescartesQL.g:2273:1: ruleExplorationStrategyClause returns [EObject current=null] : ( ( (lv_mode_0_0= 'GUIDED BY' ) ) ( (lv_name_1_0= RULE_STRING ) ) ( (lv_parameterClause_2_0= ruleConfigurationPropertiesClause ) )? ) ;
     public final EObject ruleExplorationStrategyClause() throws RecognitionException {
         EObject current = null;
 
@@ -5023,19 +5511,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:2081:28: ( ( ( (lv_mode_0_0= 'GUIDED BY' ) ) ( (lv_name_1_0= RULE_STRING ) ) ( (lv_parameterClause_2_0= ruleConfigurationPropertiesClause ) )? ) )
-            // InternalDescartesQL.g:2082:1: ( ( (lv_mode_0_0= 'GUIDED BY' ) ) ( (lv_name_1_0= RULE_STRING ) ) ( (lv_parameterClause_2_0= ruleConfigurationPropertiesClause ) )? )
+            // InternalDescartesQL.g:2276:28: ( ( ( (lv_mode_0_0= 'GUIDED BY' ) ) ( (lv_name_1_0= RULE_STRING ) ) ( (lv_parameterClause_2_0= ruleConfigurationPropertiesClause ) )? ) )
+            // InternalDescartesQL.g:2277:1: ( ( (lv_mode_0_0= 'GUIDED BY' ) ) ( (lv_name_1_0= RULE_STRING ) ) ( (lv_parameterClause_2_0= ruleConfigurationPropertiesClause ) )? )
             {
-            // InternalDescartesQL.g:2082:1: ( ( (lv_mode_0_0= 'GUIDED BY' ) ) ( (lv_name_1_0= RULE_STRING ) ) ( (lv_parameterClause_2_0= ruleConfigurationPropertiesClause ) )? )
-            // InternalDescartesQL.g:2082:2: ( (lv_mode_0_0= 'GUIDED BY' ) ) ( (lv_name_1_0= RULE_STRING ) ) ( (lv_parameterClause_2_0= ruleConfigurationPropertiesClause ) )?
+            // InternalDescartesQL.g:2277:1: ( ( (lv_mode_0_0= 'GUIDED BY' ) ) ( (lv_name_1_0= RULE_STRING ) ) ( (lv_parameterClause_2_0= ruleConfigurationPropertiesClause ) )? )
+            // InternalDescartesQL.g:2277:2: ( (lv_mode_0_0= 'GUIDED BY' ) ) ( (lv_name_1_0= RULE_STRING ) ) ( (lv_parameterClause_2_0= ruleConfigurationPropertiesClause ) )?
             {
-            // InternalDescartesQL.g:2082:2: ( (lv_mode_0_0= 'GUIDED BY' ) )
-            // InternalDescartesQL.g:2083:1: (lv_mode_0_0= 'GUIDED BY' )
+            // InternalDescartesQL.g:2277:2: ( (lv_mode_0_0= 'GUIDED BY' ) )
+            // InternalDescartesQL.g:2278:1: (lv_mode_0_0= 'GUIDED BY' )
             {
-            // InternalDescartesQL.g:2083:1: (lv_mode_0_0= 'GUIDED BY' )
-            // InternalDescartesQL.g:2084:3: lv_mode_0_0= 'GUIDED BY'
+            // InternalDescartesQL.g:2278:1: (lv_mode_0_0= 'GUIDED BY' )
+            // InternalDescartesQL.g:2279:3: lv_mode_0_0= 'GUIDED BY'
             {
-            lv_mode_0_0=(Token)match(input,40,FOLLOW_36); 
+            lv_mode_0_0=(Token)match(input,44,FOLLOW_39); 
 
                     newLeafNode(lv_mode_0_0, grammarAccess.getExplorationStrategyClauseAccess().getModeGUIDEDBYKeyword_0_0());
                 
@@ -5051,13 +5539,13 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:2097:2: ( (lv_name_1_0= RULE_STRING ) )
-            // InternalDescartesQL.g:2098:1: (lv_name_1_0= RULE_STRING )
+            // InternalDescartesQL.g:2292:2: ( (lv_name_1_0= RULE_STRING ) )
+            // InternalDescartesQL.g:2293:1: (lv_name_1_0= RULE_STRING )
             {
-            // InternalDescartesQL.g:2098:1: (lv_name_1_0= RULE_STRING )
-            // InternalDescartesQL.g:2099:3: lv_name_1_0= RULE_STRING
+            // InternalDescartesQL.g:2293:1: (lv_name_1_0= RULE_STRING )
+            // InternalDescartesQL.g:2294:3: lv_name_1_0= RULE_STRING
             {
-            lv_name_1_0=(Token)match(input,RULE_STRING,FOLLOW_40); 
+            lv_name_1_0=(Token)match(input,RULE_STRING,FOLLOW_43); 
 
             			newLeafNode(lv_name_1_0, grammarAccess.getExplorationStrategyClauseAccess().getNameSTRINGTerminalRuleCall_1_0()); 
             		
@@ -5077,19 +5565,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:2115:2: ( (lv_parameterClause_2_0= ruleConfigurationPropertiesClause ) )?
-            int alt26=2;
-            int LA26_0 = input.LA(1);
+            // InternalDescartesQL.g:2310:2: ( (lv_parameterClause_2_0= ruleConfigurationPropertiesClause ) )?
+            int alt33=2;
+            int LA33_0 = input.LA(1);
 
-            if ( (LA26_0==41) ) {
-                alt26=1;
+            if ( (LA33_0==45) ) {
+                alt33=1;
             }
-            switch (alt26) {
+            switch (alt33) {
                 case 1 :
-                    // InternalDescartesQL.g:2116:1: (lv_parameterClause_2_0= ruleConfigurationPropertiesClause )
+                    // InternalDescartesQL.g:2311:1: (lv_parameterClause_2_0= ruleConfigurationPropertiesClause )
                     {
-                    // InternalDescartesQL.g:2116:1: (lv_parameterClause_2_0= ruleConfigurationPropertiesClause )
-                    // InternalDescartesQL.g:2117:3: lv_parameterClause_2_0= ruleConfigurationPropertiesClause
+                    // InternalDescartesQL.g:2311:1: (lv_parameterClause_2_0= ruleConfigurationPropertiesClause )
+                    // InternalDescartesQL.g:2312:3: lv_parameterClause_2_0= ruleConfigurationPropertiesClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getExplorationStrategyClauseAccess().getParameterClauseConfigurationPropertiesClauseParserRuleCall_2_0()); 
@@ -5140,7 +5628,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleConfigurationPropertiesClause"
-    // InternalDescartesQL.g:2141:1: entryRuleConfigurationPropertiesClause returns [EObject current=null] : iv_ruleConfigurationPropertiesClause= ruleConfigurationPropertiesClause EOF ;
+    // InternalDescartesQL.g:2336:1: entryRuleConfigurationPropertiesClause returns [EObject current=null] : iv_ruleConfigurationPropertiesClause= ruleConfigurationPropertiesClause EOF ;
     public final EObject entryRuleConfigurationPropertiesClause() throws RecognitionException {
         EObject current = null;
 
@@ -5148,8 +5636,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:2142:2: (iv_ruleConfigurationPropertiesClause= ruleConfigurationPropertiesClause EOF )
-            // InternalDescartesQL.g:2143:2: iv_ruleConfigurationPropertiesClause= ruleConfigurationPropertiesClause EOF
+            // InternalDescartesQL.g:2337:2: (iv_ruleConfigurationPropertiesClause= ruleConfigurationPropertiesClause EOF )
+            // InternalDescartesQL.g:2338:2: iv_ruleConfigurationPropertiesClause= ruleConfigurationPropertiesClause EOF
             {
              newCompositeNode(grammarAccess.getConfigurationPropertiesClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -5176,7 +5664,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleConfigurationPropertiesClause"
-    // InternalDescartesQL.g:2150:1: ruleConfigurationPropertiesClause returns [EObject current=null] : ( ( (lv_mode1_0_0= '[' ) ) ( (lv_properties_1_0= ruleConfigurationPropertyClause ) ) (otherlv_2= ',' ( (lv_properties_3_0= ruleConfigurationPropertyClause ) ) )* ( (lv_mode2_4_0= ']' ) ) ) ;
+    // InternalDescartesQL.g:2345:1: ruleConfigurationPropertiesClause returns [EObject current=null] : ( ( (lv_mode1_0_0= '[' ) ) ( (lv_properties_1_0= ruleConfigurationPropertyClause ) ) (otherlv_2= ',' ( (lv_properties_3_0= ruleConfigurationPropertyClause ) ) )* ( (lv_mode2_4_0= ']' ) ) ) ;
     public final EObject ruleConfigurationPropertiesClause() throws RecognitionException {
         EObject current = null;
 
@@ -5191,19 +5679,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:2153:28: ( ( ( (lv_mode1_0_0= '[' ) ) ( (lv_properties_1_0= ruleConfigurationPropertyClause ) ) (otherlv_2= ',' ( (lv_properties_3_0= ruleConfigurationPropertyClause ) ) )* ( (lv_mode2_4_0= ']' ) ) ) )
-            // InternalDescartesQL.g:2154:1: ( ( (lv_mode1_0_0= '[' ) ) ( (lv_properties_1_0= ruleConfigurationPropertyClause ) ) (otherlv_2= ',' ( (lv_properties_3_0= ruleConfigurationPropertyClause ) ) )* ( (lv_mode2_4_0= ']' ) ) )
+            // InternalDescartesQL.g:2348:28: ( ( ( (lv_mode1_0_0= '[' ) ) ( (lv_properties_1_0= ruleConfigurationPropertyClause ) ) (otherlv_2= ',' ( (lv_properties_3_0= ruleConfigurationPropertyClause ) ) )* ( (lv_mode2_4_0= ']' ) ) ) )
+            // InternalDescartesQL.g:2349:1: ( ( (lv_mode1_0_0= '[' ) ) ( (lv_properties_1_0= ruleConfigurationPropertyClause ) ) (otherlv_2= ',' ( (lv_properties_3_0= ruleConfigurationPropertyClause ) ) )* ( (lv_mode2_4_0= ']' ) ) )
             {
-            // InternalDescartesQL.g:2154:1: ( ( (lv_mode1_0_0= '[' ) ) ( (lv_properties_1_0= ruleConfigurationPropertyClause ) ) (otherlv_2= ',' ( (lv_properties_3_0= ruleConfigurationPropertyClause ) ) )* ( (lv_mode2_4_0= ']' ) ) )
-            // InternalDescartesQL.g:2154:2: ( (lv_mode1_0_0= '[' ) ) ( (lv_properties_1_0= ruleConfigurationPropertyClause ) ) (otherlv_2= ',' ( (lv_properties_3_0= ruleConfigurationPropertyClause ) ) )* ( (lv_mode2_4_0= ']' ) )
+            // InternalDescartesQL.g:2349:1: ( ( (lv_mode1_0_0= '[' ) ) ( (lv_properties_1_0= ruleConfigurationPropertyClause ) ) (otherlv_2= ',' ( (lv_properties_3_0= ruleConfigurationPropertyClause ) ) )* ( (lv_mode2_4_0= ']' ) ) )
+            // InternalDescartesQL.g:2349:2: ( (lv_mode1_0_0= '[' ) ) ( (lv_properties_1_0= ruleConfigurationPropertyClause ) ) (otherlv_2= ',' ( (lv_properties_3_0= ruleConfigurationPropertyClause ) ) )* ( (lv_mode2_4_0= ']' ) )
             {
-            // InternalDescartesQL.g:2154:2: ( (lv_mode1_0_0= '[' ) )
-            // InternalDescartesQL.g:2155:1: (lv_mode1_0_0= '[' )
+            // InternalDescartesQL.g:2349:2: ( (lv_mode1_0_0= '[' ) )
+            // InternalDescartesQL.g:2350:1: (lv_mode1_0_0= '[' )
             {
-            // InternalDescartesQL.g:2155:1: (lv_mode1_0_0= '[' )
-            // InternalDescartesQL.g:2156:3: lv_mode1_0_0= '['
+            // InternalDescartesQL.g:2350:1: (lv_mode1_0_0= '[' )
+            // InternalDescartesQL.g:2351:3: lv_mode1_0_0= '['
             {
-            lv_mode1_0_0=(Token)match(input,41,FOLLOW_7); 
+            lv_mode1_0_0=(Token)match(input,45,FOLLOW_11); 
 
                     newLeafNode(lv_mode1_0_0, grammarAccess.getConfigurationPropertiesClauseAccess().getMode1LeftSquareBracketKeyword_0_0());
                 
@@ -5219,16 +5707,16 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:2169:2: ( (lv_properties_1_0= ruleConfigurationPropertyClause ) )
-            // InternalDescartesQL.g:2170:1: (lv_properties_1_0= ruleConfigurationPropertyClause )
+            // InternalDescartesQL.g:2364:2: ( (lv_properties_1_0= ruleConfigurationPropertyClause ) )
+            // InternalDescartesQL.g:2365:1: (lv_properties_1_0= ruleConfigurationPropertyClause )
             {
-            // InternalDescartesQL.g:2170:1: (lv_properties_1_0= ruleConfigurationPropertyClause )
-            // InternalDescartesQL.g:2171:3: lv_properties_1_0= ruleConfigurationPropertyClause
+            // InternalDescartesQL.g:2365:1: (lv_properties_1_0= ruleConfigurationPropertyClause )
+            // InternalDescartesQL.g:2366:3: lv_properties_1_0= ruleConfigurationPropertyClause
             {
              
             	        newCompositeNode(grammarAccess.getConfigurationPropertiesClauseAccess().getPropertiesConfigurationPropertyClauseParserRuleCall_1_0()); 
             	    
-            pushFollow(FOLLOW_41);
+            pushFollow(FOLLOW_44);
             lv_properties_1_0=ruleConfigurationPropertyClause();
 
             state._fsp--;
@@ -5250,35 +5738,35 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:2187:2: (otherlv_2= ',' ( (lv_properties_3_0= ruleConfigurationPropertyClause ) ) )*
-            loop27:
+            // InternalDescartesQL.g:2382:2: (otherlv_2= ',' ( (lv_properties_3_0= ruleConfigurationPropertyClause ) ) )*
+            loop34:
             do {
-                int alt27=2;
-                int LA27_0 = input.LA(1);
+                int alt34=2;
+                int LA34_0 = input.LA(1);
 
-                if ( (LA27_0==16) ) {
-                    alt27=1;
+                if ( (LA34_0==20) ) {
+                    alt34=1;
                 }
 
 
-                switch (alt27) {
+                switch (alt34) {
             	case 1 :
-            	    // InternalDescartesQL.g:2187:4: otherlv_2= ',' ( (lv_properties_3_0= ruleConfigurationPropertyClause ) )
+            	    // InternalDescartesQL.g:2382:4: otherlv_2= ',' ( (lv_properties_3_0= ruleConfigurationPropertyClause ) )
             	    {
-            	    otherlv_2=(Token)match(input,16,FOLLOW_7); 
+            	    otherlv_2=(Token)match(input,20,FOLLOW_11); 
 
             	        	newLeafNode(otherlv_2, grammarAccess.getConfigurationPropertiesClauseAccess().getCommaKeyword_2_0());
             	        
-            	    // InternalDescartesQL.g:2191:1: ( (lv_properties_3_0= ruleConfigurationPropertyClause ) )
-            	    // InternalDescartesQL.g:2192:1: (lv_properties_3_0= ruleConfigurationPropertyClause )
+            	    // InternalDescartesQL.g:2386:1: ( (lv_properties_3_0= ruleConfigurationPropertyClause ) )
+            	    // InternalDescartesQL.g:2387:1: (lv_properties_3_0= ruleConfigurationPropertyClause )
             	    {
-            	    // InternalDescartesQL.g:2192:1: (lv_properties_3_0= ruleConfigurationPropertyClause )
-            	    // InternalDescartesQL.g:2193:3: lv_properties_3_0= ruleConfigurationPropertyClause
+            	    // InternalDescartesQL.g:2387:1: (lv_properties_3_0= ruleConfigurationPropertyClause )
+            	    // InternalDescartesQL.g:2388:3: lv_properties_3_0= ruleConfigurationPropertyClause
             	    {
             	     
             	    	        newCompositeNode(grammarAccess.getConfigurationPropertiesClauseAccess().getPropertiesConfigurationPropertyClauseParserRuleCall_2_1_0()); 
             	    	    
-            	    pushFollow(FOLLOW_41);
+            	    pushFollow(FOLLOW_44);
             	    lv_properties_3_0=ruleConfigurationPropertyClause();
 
             	    state._fsp--;
@@ -5305,17 +5793,17 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
             	    break;
 
             	default :
-            	    break loop27;
+            	    break loop34;
                 }
             } while (true);
 
-            // InternalDescartesQL.g:2209:4: ( (lv_mode2_4_0= ']' ) )
-            // InternalDescartesQL.g:2210:1: (lv_mode2_4_0= ']' )
+            // InternalDescartesQL.g:2404:4: ( (lv_mode2_4_0= ']' ) )
+            // InternalDescartesQL.g:2405:1: (lv_mode2_4_0= ']' )
             {
-            // InternalDescartesQL.g:2210:1: (lv_mode2_4_0= ']' )
-            // InternalDescartesQL.g:2211:3: lv_mode2_4_0= ']'
+            // InternalDescartesQL.g:2405:1: (lv_mode2_4_0= ']' )
+            // InternalDescartesQL.g:2406:3: lv_mode2_4_0= ']'
             {
-            lv_mode2_4_0=(Token)match(input,42,FOLLOW_2); 
+            lv_mode2_4_0=(Token)match(input,46,FOLLOW_2); 
 
                     newLeafNode(lv_mode2_4_0, grammarAccess.getConfigurationPropertiesClauseAccess().getMode2RightSquareBracketKeyword_3_0());
                 
@@ -5352,7 +5840,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleConfigurationPropertyClause"
-    // InternalDescartesQL.g:2232:1: entryRuleConfigurationPropertyClause returns [EObject current=null] : iv_ruleConfigurationPropertyClause= ruleConfigurationPropertyClause EOF ;
+    // InternalDescartesQL.g:2427:1: entryRuleConfigurationPropertyClause returns [EObject current=null] : iv_ruleConfigurationPropertyClause= ruleConfigurationPropertyClause EOF ;
     public final EObject entryRuleConfigurationPropertyClause() throws RecognitionException {
         EObject current = null;
 
@@ -5360,8 +5848,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:2233:2: (iv_ruleConfigurationPropertyClause= ruleConfigurationPropertyClause EOF )
-            // InternalDescartesQL.g:2234:2: iv_ruleConfigurationPropertyClause= ruleConfigurationPropertyClause EOF
+            // InternalDescartesQL.g:2428:2: (iv_ruleConfigurationPropertyClause= ruleConfigurationPropertyClause EOF )
+            // InternalDescartesQL.g:2429:2: iv_ruleConfigurationPropertyClause= ruleConfigurationPropertyClause EOF
             {
              newCompositeNode(grammarAccess.getConfigurationPropertyClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -5388,7 +5876,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleConfigurationPropertyClause"
-    // InternalDescartesQL.g:2241:1: ruleConfigurationPropertyClause returns [EObject current=null] : ( ( (lv_key_0_0= RULE_ID ) ) (otherlv_1= '.' ( (lv_key_2_0= RULE_ID ) ) )* otherlv_3= '=' ( (lv_value_4_0= RULE_STRING ) ) ) ;
+    // InternalDescartesQL.g:2436:1: ruleConfigurationPropertyClause returns [EObject current=null] : ( ( (lv_key_0_0= RULE_ID ) ) (otherlv_1= '.' ( (lv_key_2_0= RULE_ID ) ) )* otherlv_3= '=' ( (lv_value_4_0= RULE_STRING ) ) ) ;
     public final EObject ruleConfigurationPropertyClause() throws RecognitionException {
         EObject current = null;
 
@@ -5401,19 +5889,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:2244:28: ( ( ( (lv_key_0_0= RULE_ID ) ) (otherlv_1= '.' ( (lv_key_2_0= RULE_ID ) ) )* otherlv_3= '=' ( (lv_value_4_0= RULE_STRING ) ) ) )
-            // InternalDescartesQL.g:2245:1: ( ( (lv_key_0_0= RULE_ID ) ) (otherlv_1= '.' ( (lv_key_2_0= RULE_ID ) ) )* otherlv_3= '=' ( (lv_value_4_0= RULE_STRING ) ) )
+            // InternalDescartesQL.g:2439:28: ( ( ( (lv_key_0_0= RULE_ID ) ) (otherlv_1= '.' ( (lv_key_2_0= RULE_ID ) ) )* otherlv_3= '=' ( (lv_value_4_0= RULE_STRING ) ) ) )
+            // InternalDescartesQL.g:2440:1: ( ( (lv_key_0_0= RULE_ID ) ) (otherlv_1= '.' ( (lv_key_2_0= RULE_ID ) ) )* otherlv_3= '=' ( (lv_value_4_0= RULE_STRING ) ) )
             {
-            // InternalDescartesQL.g:2245:1: ( ( (lv_key_0_0= RULE_ID ) ) (otherlv_1= '.' ( (lv_key_2_0= RULE_ID ) ) )* otherlv_3= '=' ( (lv_value_4_0= RULE_STRING ) ) )
-            // InternalDescartesQL.g:2245:2: ( (lv_key_0_0= RULE_ID ) ) (otherlv_1= '.' ( (lv_key_2_0= RULE_ID ) ) )* otherlv_3= '=' ( (lv_value_4_0= RULE_STRING ) )
+            // InternalDescartesQL.g:2440:1: ( ( (lv_key_0_0= RULE_ID ) ) (otherlv_1= '.' ( (lv_key_2_0= RULE_ID ) ) )* otherlv_3= '=' ( (lv_value_4_0= RULE_STRING ) ) )
+            // InternalDescartesQL.g:2440:2: ( (lv_key_0_0= RULE_ID ) ) (otherlv_1= '.' ( (lv_key_2_0= RULE_ID ) ) )* otherlv_3= '=' ( (lv_value_4_0= RULE_STRING ) )
             {
-            // InternalDescartesQL.g:2245:2: ( (lv_key_0_0= RULE_ID ) )
-            // InternalDescartesQL.g:2246:1: (lv_key_0_0= RULE_ID )
+            // InternalDescartesQL.g:2440:2: ( (lv_key_0_0= RULE_ID ) )
+            // InternalDescartesQL.g:2441:1: (lv_key_0_0= RULE_ID )
             {
-            // InternalDescartesQL.g:2246:1: (lv_key_0_0= RULE_ID )
-            // InternalDescartesQL.g:2247:3: lv_key_0_0= RULE_ID
+            // InternalDescartesQL.g:2441:1: (lv_key_0_0= RULE_ID )
+            // InternalDescartesQL.g:2442:3: lv_key_0_0= RULE_ID
             {
-            lv_key_0_0=(Token)match(input,RULE_ID,FOLLOW_42); 
+            lv_key_0_0=(Token)match(input,RULE_ID,FOLLOW_45); 
 
             			newLeafNode(lv_key_0_0, grammarAccess.getConfigurationPropertyClauseAccess().getKeyIDTerminalRuleCall_0_0()); 
             		
@@ -5433,32 +5921,32 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:2263:2: (otherlv_1= '.' ( (lv_key_2_0= RULE_ID ) ) )*
-            loop28:
+            // InternalDescartesQL.g:2458:2: (otherlv_1= '.' ( (lv_key_2_0= RULE_ID ) ) )*
+            loop35:
             do {
-                int alt28=2;
-                int LA28_0 = input.LA(1);
+                int alt35=2;
+                int LA35_0 = input.LA(1);
 
-                if ( (LA28_0==43) ) {
-                    alt28=1;
+                if ( (LA35_0==47) ) {
+                    alt35=1;
                 }
 
 
-                switch (alt28) {
+                switch (alt35) {
             	case 1 :
-            	    // InternalDescartesQL.g:2263:4: otherlv_1= '.' ( (lv_key_2_0= RULE_ID ) )
+            	    // InternalDescartesQL.g:2458:4: otherlv_1= '.' ( (lv_key_2_0= RULE_ID ) )
             	    {
-            	    otherlv_1=(Token)match(input,43,FOLLOW_7); 
+            	    otherlv_1=(Token)match(input,47,FOLLOW_11); 
 
             	        	newLeafNode(otherlv_1, grammarAccess.getConfigurationPropertyClauseAccess().getFullStopKeyword_1_0());
             	        
-            	    // InternalDescartesQL.g:2267:1: ( (lv_key_2_0= RULE_ID ) )
-            	    // InternalDescartesQL.g:2268:1: (lv_key_2_0= RULE_ID )
+            	    // InternalDescartesQL.g:2462:1: ( (lv_key_2_0= RULE_ID ) )
+            	    // InternalDescartesQL.g:2463:1: (lv_key_2_0= RULE_ID )
             	    {
-            	    // InternalDescartesQL.g:2268:1: (lv_key_2_0= RULE_ID )
-            	    // InternalDescartesQL.g:2269:3: lv_key_2_0= RULE_ID
+            	    // InternalDescartesQL.g:2463:1: (lv_key_2_0= RULE_ID )
+            	    // InternalDescartesQL.g:2464:3: lv_key_2_0= RULE_ID
             	    {
-            	    lv_key_2_0=(Token)match(input,RULE_ID,FOLLOW_42); 
+            	    lv_key_2_0=(Token)match(input,RULE_ID,FOLLOW_45); 
 
             	    			newLeafNode(lv_key_2_0, grammarAccess.getConfigurationPropertyClauseAccess().getKeyIDTerminalRuleCall_1_1_0()); 
             	    		
@@ -5483,19 +5971,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
             	    break;
 
             	default :
-            	    break loop28;
+            	    break loop35;
                 }
             } while (true);
 
-            otherlv_3=(Token)match(input,44,FOLLOW_36); 
+            otherlv_3=(Token)match(input,48,FOLLOW_39); 
 
                 	newLeafNode(otherlv_3, grammarAccess.getConfigurationPropertyClauseAccess().getEqualsSignKeyword_2());
                 
-            // InternalDescartesQL.g:2289:1: ( (lv_value_4_0= RULE_STRING ) )
-            // InternalDescartesQL.g:2290:1: (lv_value_4_0= RULE_STRING )
+            // InternalDescartesQL.g:2484:1: ( (lv_value_4_0= RULE_STRING ) )
+            // InternalDescartesQL.g:2485:1: (lv_value_4_0= RULE_STRING )
             {
-            // InternalDescartesQL.g:2290:1: (lv_value_4_0= RULE_STRING )
-            // InternalDescartesQL.g:2291:3: lv_value_4_0= RULE_STRING
+            // InternalDescartesQL.g:2485:1: (lv_value_4_0= RULE_STRING )
+            // InternalDescartesQL.g:2486:3: lv_value_4_0= RULE_STRING
             {
             lv_value_4_0=(Token)match(input,RULE_STRING,FOLLOW_2); 
 
@@ -5538,7 +6026,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleDoFVariationClause"
-    // InternalDescartesQL.g:2315:1: entryRuleDoFVariationClause returns [EObject current=null] : iv_ruleDoFVariationClause= ruleDoFVariationClause EOF ;
+    // InternalDescartesQL.g:2510:1: entryRuleDoFVariationClause returns [EObject current=null] : iv_ruleDoFVariationClause= ruleDoFVariationClause EOF ;
     public final EObject entryRuleDoFVariationClause() throws RecognitionException {
         EObject current = null;
 
@@ -5546,8 +6034,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:2316:2: (iv_ruleDoFVariationClause= ruleDoFVariationClause EOF )
-            // InternalDescartesQL.g:2317:2: iv_ruleDoFVariationClause= ruleDoFVariationClause EOF
+            // InternalDescartesQL.g:2511:2: (iv_ruleDoFVariationClause= ruleDoFVariationClause EOF )
+            // InternalDescartesQL.g:2512:2: iv_ruleDoFVariationClause= ruleDoFVariationClause EOF
             {
              newCompositeNode(grammarAccess.getDoFVariationClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -5574,7 +6062,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleDoFVariationClause"
-    // InternalDescartesQL.g:2324:1: ruleDoFVariationClause returns [EObject current=null] : ( ( (lv_mode1_0_0= '<' ) ) ( ( (lv_variation_1_1= ruleIntervalVariationClause | lv_variation_1_2= ruleValueVariationClause | lv_variation_1_3= ruleDoubleValueVariationClause ) ) ) ( (lv_mode2_2_0= '>' ) ) ) ;
+    // InternalDescartesQL.g:2519:1: ruleDoFVariationClause returns [EObject current=null] : ( ( (lv_mode1_0_0= '<' ) ) ( ( (lv_variation_1_1= ruleIntervalVariationClause | lv_variation_1_2= ruleValueVariationClause | lv_variation_1_3= ruleDoubleValueVariationClause ) ) ) ( (lv_mode2_2_0= '>' ) ) ) ;
     public final EObject ruleDoFVariationClause() throws RecognitionException {
         EObject current = null;
 
@@ -5590,19 +6078,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:2327:28: ( ( ( (lv_mode1_0_0= '<' ) ) ( ( (lv_variation_1_1= ruleIntervalVariationClause | lv_variation_1_2= ruleValueVariationClause | lv_variation_1_3= ruleDoubleValueVariationClause ) ) ) ( (lv_mode2_2_0= '>' ) ) ) )
-            // InternalDescartesQL.g:2328:1: ( ( (lv_mode1_0_0= '<' ) ) ( ( (lv_variation_1_1= ruleIntervalVariationClause | lv_variation_1_2= ruleValueVariationClause | lv_variation_1_3= ruleDoubleValueVariationClause ) ) ) ( (lv_mode2_2_0= '>' ) ) )
+            // InternalDescartesQL.g:2522:28: ( ( ( (lv_mode1_0_0= '<' ) ) ( ( (lv_variation_1_1= ruleIntervalVariationClause | lv_variation_1_2= ruleValueVariationClause | lv_variation_1_3= ruleDoubleValueVariationClause ) ) ) ( (lv_mode2_2_0= '>' ) ) ) )
+            // InternalDescartesQL.g:2523:1: ( ( (lv_mode1_0_0= '<' ) ) ( ( (lv_variation_1_1= ruleIntervalVariationClause | lv_variation_1_2= ruleValueVariationClause | lv_variation_1_3= ruleDoubleValueVariationClause ) ) ) ( (lv_mode2_2_0= '>' ) ) )
             {
-            // InternalDescartesQL.g:2328:1: ( ( (lv_mode1_0_0= '<' ) ) ( ( (lv_variation_1_1= ruleIntervalVariationClause | lv_variation_1_2= ruleValueVariationClause | lv_variation_1_3= ruleDoubleValueVariationClause ) ) ) ( (lv_mode2_2_0= '>' ) ) )
-            // InternalDescartesQL.g:2328:2: ( (lv_mode1_0_0= '<' ) ) ( ( (lv_variation_1_1= ruleIntervalVariationClause | lv_variation_1_2= ruleValueVariationClause | lv_variation_1_3= ruleDoubleValueVariationClause ) ) ) ( (lv_mode2_2_0= '>' ) )
+            // InternalDescartesQL.g:2523:1: ( ( (lv_mode1_0_0= '<' ) ) ( ( (lv_variation_1_1= ruleIntervalVariationClause | lv_variation_1_2= ruleValueVariationClause | lv_variation_1_3= ruleDoubleValueVariationClause ) ) ) ( (lv_mode2_2_0= '>' ) ) )
+            // InternalDescartesQL.g:2523:2: ( (lv_mode1_0_0= '<' ) ) ( ( (lv_variation_1_1= ruleIntervalVariationClause | lv_variation_1_2= ruleValueVariationClause | lv_variation_1_3= ruleDoubleValueVariationClause ) ) ) ( (lv_mode2_2_0= '>' ) )
             {
-            // InternalDescartesQL.g:2328:2: ( (lv_mode1_0_0= '<' ) )
-            // InternalDescartesQL.g:2329:1: (lv_mode1_0_0= '<' )
+            // InternalDescartesQL.g:2523:2: ( (lv_mode1_0_0= '<' ) )
+            // InternalDescartesQL.g:2524:1: (lv_mode1_0_0= '<' )
             {
-            // InternalDescartesQL.g:2329:1: (lv_mode1_0_0= '<' )
-            // InternalDescartesQL.g:2330:3: lv_mode1_0_0= '<'
+            // InternalDescartesQL.g:2524:1: (lv_mode1_0_0= '<' )
+            // InternalDescartesQL.g:2525:3: lv_mode1_0_0= '<'
             {
-            lv_mode1_0_0=(Token)match(input,45,FOLLOW_15); 
+            lv_mode1_0_0=(Token)match(input,49,FOLLOW_19); 
 
                     newLeafNode(lv_mode1_0_0, grammarAccess.getDoFVariationClauseAccess().getMode1LessThanSignKeyword_0_0());
                 
@@ -5618,49 +6106,49 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:2343:2: ( ( (lv_variation_1_1= ruleIntervalVariationClause | lv_variation_1_2= ruleValueVariationClause | lv_variation_1_3= ruleDoubleValueVariationClause ) ) )
-            // InternalDescartesQL.g:2344:1: ( (lv_variation_1_1= ruleIntervalVariationClause | lv_variation_1_2= ruleValueVariationClause | lv_variation_1_3= ruleDoubleValueVariationClause ) )
+            // InternalDescartesQL.g:2538:2: ( ( (lv_variation_1_1= ruleIntervalVariationClause | lv_variation_1_2= ruleValueVariationClause | lv_variation_1_3= ruleDoubleValueVariationClause ) ) )
+            // InternalDescartesQL.g:2539:1: ( (lv_variation_1_1= ruleIntervalVariationClause | lv_variation_1_2= ruleValueVariationClause | lv_variation_1_3= ruleDoubleValueVariationClause ) )
             {
-            // InternalDescartesQL.g:2344:1: ( (lv_variation_1_1= ruleIntervalVariationClause | lv_variation_1_2= ruleValueVariationClause | lv_variation_1_3= ruleDoubleValueVariationClause ) )
-            // InternalDescartesQL.g:2345:1: (lv_variation_1_1= ruleIntervalVariationClause | lv_variation_1_2= ruleValueVariationClause | lv_variation_1_3= ruleDoubleValueVariationClause )
+            // InternalDescartesQL.g:2539:1: ( (lv_variation_1_1= ruleIntervalVariationClause | lv_variation_1_2= ruleValueVariationClause | lv_variation_1_3= ruleDoubleValueVariationClause ) )
+            // InternalDescartesQL.g:2540:1: (lv_variation_1_1= ruleIntervalVariationClause | lv_variation_1_2= ruleValueVariationClause | lv_variation_1_3= ruleDoubleValueVariationClause )
             {
-            // InternalDescartesQL.g:2345:1: (lv_variation_1_1= ruleIntervalVariationClause | lv_variation_1_2= ruleValueVariationClause | lv_variation_1_3= ruleDoubleValueVariationClause )
-            int alt29=3;
-            int LA29_0 = input.LA(1);
+            // InternalDescartesQL.g:2540:1: (lv_variation_1_1= ruleIntervalVariationClause | lv_variation_1_2= ruleValueVariationClause | lv_variation_1_3= ruleDoubleValueVariationClause )
+            int alt36=3;
+            int LA36_0 = input.LA(1);
 
-            if ( (LA29_0==RULE_INT) ) {
-                int LA29_1 = input.LA(2);
+            if ( (LA36_0==RULE_INT) ) {
+                int LA36_1 = input.LA(2);
 
-                if ( (LA29_1==16||LA29_1==46) ) {
-                    alt29=2;
+                if ( (LA36_1==20||LA36_1==50) ) {
+                    alt36=2;
                 }
-                else if ( (LA29_1==47) ) {
-                    alt29=1;
+                else if ( (LA36_1==51) ) {
+                    alt36=1;
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("", 29, 1, input);
+                        new NoViableAltException("", 36, 1, input);
 
                     throw nvae;
                 }
             }
-            else if ( (LA29_0==RULE_DOUBLE) ) {
-                alt29=3;
+            else if ( (LA36_0==RULE_DOUBLE) ) {
+                alt36=3;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("", 29, 0, input);
+                    new NoViableAltException("", 36, 0, input);
 
                 throw nvae;
             }
-            switch (alt29) {
+            switch (alt36) {
                 case 1 :
-                    // InternalDescartesQL.g:2346:3: lv_variation_1_1= ruleIntervalVariationClause
+                    // InternalDescartesQL.g:2541:3: lv_variation_1_1= ruleIntervalVariationClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getDoFVariationClauseAccess().getVariationIntervalVariationClauseParserRuleCall_1_0_0()); 
                     	    
-                    pushFollow(FOLLOW_43);
+                    pushFollow(FOLLOW_46);
                     lv_variation_1_1=ruleIntervalVariationClause();
 
                     state._fsp--;
@@ -5680,12 +6168,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 2 :
-                    // InternalDescartesQL.g:2361:8: lv_variation_1_2= ruleValueVariationClause
+                    // InternalDescartesQL.g:2556:8: lv_variation_1_2= ruleValueVariationClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getDoFVariationClauseAccess().getVariationValueVariationClauseParserRuleCall_1_0_1()); 
                     	    
-                    pushFollow(FOLLOW_43);
+                    pushFollow(FOLLOW_46);
                     lv_variation_1_2=ruleValueVariationClause();
 
                     state._fsp--;
@@ -5705,12 +6193,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 3 :
-                    // InternalDescartesQL.g:2376:8: lv_variation_1_3= ruleDoubleValueVariationClause
+                    // InternalDescartesQL.g:2571:8: lv_variation_1_3= ruleDoubleValueVariationClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getDoFVariationClauseAccess().getVariationDoubleValueVariationClauseParserRuleCall_1_0_2()); 
                     	    
-                    pushFollow(FOLLOW_43);
+                    pushFollow(FOLLOW_46);
                     lv_variation_1_3=ruleDoubleValueVariationClause();
 
                     state._fsp--;
@@ -5738,13 +6226,13 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:2394:2: ( (lv_mode2_2_0= '>' ) )
-            // InternalDescartesQL.g:2395:1: (lv_mode2_2_0= '>' )
+            // InternalDescartesQL.g:2589:2: ( (lv_mode2_2_0= '>' ) )
+            // InternalDescartesQL.g:2590:1: (lv_mode2_2_0= '>' )
             {
-            // InternalDescartesQL.g:2395:1: (lv_mode2_2_0= '>' )
-            // InternalDescartesQL.g:2396:3: lv_mode2_2_0= '>'
+            // InternalDescartesQL.g:2590:1: (lv_mode2_2_0= '>' )
+            // InternalDescartesQL.g:2591:3: lv_mode2_2_0= '>'
             {
-            lv_mode2_2_0=(Token)match(input,46,FOLLOW_2); 
+            lv_mode2_2_0=(Token)match(input,50,FOLLOW_2); 
 
                     newLeafNode(lv_mode2_2_0, grammarAccess.getDoFVariationClauseAccess().getMode2GreaterThanSignKeyword_2_0());
                 
@@ -5781,7 +6269,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleValueVariationClause"
-    // InternalDescartesQL.g:2417:1: entryRuleValueVariationClause returns [EObject current=null] : iv_ruleValueVariationClause= ruleValueVariationClause EOF ;
+    // InternalDescartesQL.g:2612:1: entryRuleValueVariationClause returns [EObject current=null] : iv_ruleValueVariationClause= ruleValueVariationClause EOF ;
     public final EObject entryRuleValueVariationClause() throws RecognitionException {
         EObject current = null;
 
@@ -5789,8 +6277,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:2418:2: (iv_ruleValueVariationClause= ruleValueVariationClause EOF )
-            // InternalDescartesQL.g:2419:2: iv_ruleValueVariationClause= ruleValueVariationClause EOF
+            // InternalDescartesQL.g:2613:2: (iv_ruleValueVariationClause= ruleValueVariationClause EOF )
+            // InternalDescartesQL.g:2614:2: iv_ruleValueVariationClause= ruleValueVariationClause EOF
             {
              newCompositeNode(grammarAccess.getValueVariationClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -5817,7 +6305,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleValueVariationClause"
-    // InternalDescartesQL.g:2426:1: ruleValueVariationClause returns [EObject current=null] : ( ( (lv_value_0_0= RULE_INT ) ) (otherlv_1= ',' ( (lv_value_2_0= RULE_INT ) ) )* ) ;
+    // InternalDescartesQL.g:2621:1: ruleValueVariationClause returns [EObject current=null] : ( ( (lv_value_0_0= RULE_INT ) ) (otherlv_1= ',' ( (lv_value_2_0= RULE_INT ) ) )* ) ;
     public final EObject ruleValueVariationClause() throws RecognitionException {
         EObject current = null;
 
@@ -5828,19 +6316,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:2429:28: ( ( ( (lv_value_0_0= RULE_INT ) ) (otherlv_1= ',' ( (lv_value_2_0= RULE_INT ) ) )* ) )
-            // InternalDescartesQL.g:2430:1: ( ( (lv_value_0_0= RULE_INT ) ) (otherlv_1= ',' ( (lv_value_2_0= RULE_INT ) ) )* )
+            // InternalDescartesQL.g:2624:28: ( ( ( (lv_value_0_0= RULE_INT ) ) (otherlv_1= ',' ( (lv_value_2_0= RULE_INT ) ) )* ) )
+            // InternalDescartesQL.g:2625:1: ( ( (lv_value_0_0= RULE_INT ) ) (otherlv_1= ',' ( (lv_value_2_0= RULE_INT ) ) )* )
             {
-            // InternalDescartesQL.g:2430:1: ( ( (lv_value_0_0= RULE_INT ) ) (otherlv_1= ',' ( (lv_value_2_0= RULE_INT ) ) )* )
-            // InternalDescartesQL.g:2430:2: ( (lv_value_0_0= RULE_INT ) ) (otherlv_1= ',' ( (lv_value_2_0= RULE_INT ) ) )*
+            // InternalDescartesQL.g:2625:1: ( ( (lv_value_0_0= RULE_INT ) ) (otherlv_1= ',' ( (lv_value_2_0= RULE_INT ) ) )* )
+            // InternalDescartesQL.g:2625:2: ( (lv_value_0_0= RULE_INT ) ) (otherlv_1= ',' ( (lv_value_2_0= RULE_INT ) ) )*
             {
-            // InternalDescartesQL.g:2430:2: ( (lv_value_0_0= RULE_INT ) )
-            // InternalDescartesQL.g:2431:1: (lv_value_0_0= RULE_INT )
+            // InternalDescartesQL.g:2625:2: ( (lv_value_0_0= RULE_INT ) )
+            // InternalDescartesQL.g:2626:1: (lv_value_0_0= RULE_INT )
             {
-            // InternalDescartesQL.g:2431:1: (lv_value_0_0= RULE_INT )
-            // InternalDescartesQL.g:2432:3: lv_value_0_0= RULE_INT
+            // InternalDescartesQL.g:2626:1: (lv_value_0_0= RULE_INT )
+            // InternalDescartesQL.g:2627:3: lv_value_0_0= RULE_INT
             {
-            lv_value_0_0=(Token)match(input,RULE_INT,FOLLOW_8); 
+            lv_value_0_0=(Token)match(input,RULE_INT,FOLLOW_12); 
 
             			newLeafNode(lv_value_0_0, grammarAccess.getValueVariationClauseAccess().getValueINTTerminalRuleCall_0_0()); 
             		
@@ -5860,38 +6348,38 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:2448:2: (otherlv_1= ',' ( (lv_value_2_0= RULE_INT ) ) )*
-            loop30:
+            // InternalDescartesQL.g:2643:2: (otherlv_1= ',' ( (lv_value_2_0= RULE_INT ) ) )*
+            loop37:
             do {
-                int alt30=2;
-                int LA30_0 = input.LA(1);
+                int alt37=2;
+                int LA37_0 = input.LA(1);
 
-                if ( (LA30_0==16) ) {
-                    int LA30_2 = input.LA(2);
+                if ( (LA37_0==20) ) {
+                    int LA37_2 = input.LA(2);
 
-                    if ( (LA30_2==RULE_INT) ) {
-                        alt30=1;
+                    if ( (LA37_2==RULE_INT) ) {
+                        alt37=1;
                     }
 
 
                 }
 
 
-                switch (alt30) {
+                switch (alt37) {
             	case 1 :
-            	    // InternalDescartesQL.g:2448:4: otherlv_1= ',' ( (lv_value_2_0= RULE_INT ) )
+            	    // InternalDescartesQL.g:2643:4: otherlv_1= ',' ( (lv_value_2_0= RULE_INT ) )
             	    {
-            	    otherlv_1=(Token)match(input,16,FOLLOW_19); 
+            	    otherlv_1=(Token)match(input,20,FOLLOW_24); 
 
             	        	newLeafNode(otherlv_1, grammarAccess.getValueVariationClauseAccess().getCommaKeyword_1_0());
             	        
-            	    // InternalDescartesQL.g:2452:1: ( (lv_value_2_0= RULE_INT ) )
-            	    // InternalDescartesQL.g:2453:1: (lv_value_2_0= RULE_INT )
+            	    // InternalDescartesQL.g:2647:1: ( (lv_value_2_0= RULE_INT ) )
+            	    // InternalDescartesQL.g:2648:1: (lv_value_2_0= RULE_INT )
             	    {
-            	    // InternalDescartesQL.g:2453:1: (lv_value_2_0= RULE_INT )
-            	    // InternalDescartesQL.g:2454:3: lv_value_2_0= RULE_INT
+            	    // InternalDescartesQL.g:2648:1: (lv_value_2_0= RULE_INT )
+            	    // InternalDescartesQL.g:2649:3: lv_value_2_0= RULE_INT
             	    {
-            	    lv_value_2_0=(Token)match(input,RULE_INT,FOLLOW_8); 
+            	    lv_value_2_0=(Token)match(input,RULE_INT,FOLLOW_12); 
 
             	    			newLeafNode(lv_value_2_0, grammarAccess.getValueVariationClauseAccess().getValueINTTerminalRuleCall_1_1_0()); 
             	    		
@@ -5916,7 +6404,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
             	    break;
 
             	default :
-            	    break loop30;
+            	    break loop37;
                 }
             } while (true);
 
@@ -5941,7 +6429,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleDoubleValueVariationClause"
-    // InternalDescartesQL.g:2478:1: entryRuleDoubleValueVariationClause returns [EObject current=null] : iv_ruleDoubleValueVariationClause= ruleDoubleValueVariationClause EOF ;
+    // InternalDescartesQL.g:2673:1: entryRuleDoubleValueVariationClause returns [EObject current=null] : iv_ruleDoubleValueVariationClause= ruleDoubleValueVariationClause EOF ;
     public final EObject entryRuleDoubleValueVariationClause() throws RecognitionException {
         EObject current = null;
 
@@ -5949,8 +6437,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:2479:2: (iv_ruleDoubleValueVariationClause= ruleDoubleValueVariationClause EOF )
-            // InternalDescartesQL.g:2480:2: iv_ruleDoubleValueVariationClause= ruleDoubleValueVariationClause EOF
+            // InternalDescartesQL.g:2674:2: (iv_ruleDoubleValueVariationClause= ruleDoubleValueVariationClause EOF )
+            // InternalDescartesQL.g:2675:2: iv_ruleDoubleValueVariationClause= ruleDoubleValueVariationClause EOF
             {
              newCompositeNode(grammarAccess.getDoubleValueVariationClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -5977,7 +6465,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleDoubleValueVariationClause"
-    // InternalDescartesQL.g:2487:1: ruleDoubleValueVariationClause returns [EObject current=null] : ( ( (lv_value_0_0= RULE_DOUBLE ) ) (otherlv_1= ',' ( (lv_value_2_0= RULE_DOUBLE ) ) )* ) ;
+    // InternalDescartesQL.g:2682:1: ruleDoubleValueVariationClause returns [EObject current=null] : ( ( (lv_value_0_0= RULE_DOUBLE ) ) (otherlv_1= ',' ( (lv_value_2_0= RULE_DOUBLE ) ) )* ) ;
     public final EObject ruleDoubleValueVariationClause() throws RecognitionException {
         EObject current = null;
 
@@ -5988,19 +6476,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:2490:28: ( ( ( (lv_value_0_0= RULE_DOUBLE ) ) (otherlv_1= ',' ( (lv_value_2_0= RULE_DOUBLE ) ) )* ) )
-            // InternalDescartesQL.g:2491:1: ( ( (lv_value_0_0= RULE_DOUBLE ) ) (otherlv_1= ',' ( (lv_value_2_0= RULE_DOUBLE ) ) )* )
+            // InternalDescartesQL.g:2685:28: ( ( ( (lv_value_0_0= RULE_DOUBLE ) ) (otherlv_1= ',' ( (lv_value_2_0= RULE_DOUBLE ) ) )* ) )
+            // InternalDescartesQL.g:2686:1: ( ( (lv_value_0_0= RULE_DOUBLE ) ) (otherlv_1= ',' ( (lv_value_2_0= RULE_DOUBLE ) ) )* )
             {
-            // InternalDescartesQL.g:2491:1: ( ( (lv_value_0_0= RULE_DOUBLE ) ) (otherlv_1= ',' ( (lv_value_2_0= RULE_DOUBLE ) ) )* )
-            // InternalDescartesQL.g:2491:2: ( (lv_value_0_0= RULE_DOUBLE ) ) (otherlv_1= ',' ( (lv_value_2_0= RULE_DOUBLE ) ) )*
+            // InternalDescartesQL.g:2686:1: ( ( (lv_value_0_0= RULE_DOUBLE ) ) (otherlv_1= ',' ( (lv_value_2_0= RULE_DOUBLE ) ) )* )
+            // InternalDescartesQL.g:2686:2: ( (lv_value_0_0= RULE_DOUBLE ) ) (otherlv_1= ',' ( (lv_value_2_0= RULE_DOUBLE ) ) )*
             {
-            // InternalDescartesQL.g:2491:2: ( (lv_value_0_0= RULE_DOUBLE ) )
-            // InternalDescartesQL.g:2492:1: (lv_value_0_0= RULE_DOUBLE )
+            // InternalDescartesQL.g:2686:2: ( (lv_value_0_0= RULE_DOUBLE ) )
+            // InternalDescartesQL.g:2687:1: (lv_value_0_0= RULE_DOUBLE )
             {
-            // InternalDescartesQL.g:2492:1: (lv_value_0_0= RULE_DOUBLE )
-            // InternalDescartesQL.g:2493:3: lv_value_0_0= RULE_DOUBLE
+            // InternalDescartesQL.g:2687:1: (lv_value_0_0= RULE_DOUBLE )
+            // InternalDescartesQL.g:2688:3: lv_value_0_0= RULE_DOUBLE
             {
-            lv_value_0_0=(Token)match(input,RULE_DOUBLE,FOLLOW_8); 
+            lv_value_0_0=(Token)match(input,RULE_DOUBLE,FOLLOW_12); 
 
             			newLeafNode(lv_value_0_0, grammarAccess.getDoubleValueVariationClauseAccess().getValueDOUBLETerminalRuleCall_0_0()); 
             		
@@ -6020,32 +6508,32 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:2509:2: (otherlv_1= ',' ( (lv_value_2_0= RULE_DOUBLE ) ) )*
-            loop31:
+            // InternalDescartesQL.g:2704:2: (otherlv_1= ',' ( (lv_value_2_0= RULE_DOUBLE ) ) )*
+            loop38:
             do {
-                int alt31=2;
-                int LA31_0 = input.LA(1);
+                int alt38=2;
+                int LA38_0 = input.LA(1);
 
-                if ( (LA31_0==16) ) {
-                    alt31=1;
+                if ( (LA38_0==20) ) {
+                    alt38=1;
                 }
 
 
-                switch (alt31) {
+                switch (alt38) {
             	case 1 :
-            	    // InternalDescartesQL.g:2509:4: otherlv_1= ',' ( (lv_value_2_0= RULE_DOUBLE ) )
+            	    // InternalDescartesQL.g:2704:4: otherlv_1= ',' ( (lv_value_2_0= RULE_DOUBLE ) )
             	    {
-            	    otherlv_1=(Token)match(input,16,FOLLOW_20); 
+            	    otherlv_1=(Token)match(input,20,FOLLOW_9); 
 
             	        	newLeafNode(otherlv_1, grammarAccess.getDoubleValueVariationClauseAccess().getCommaKeyword_1_0());
             	        
-            	    // InternalDescartesQL.g:2513:1: ( (lv_value_2_0= RULE_DOUBLE ) )
-            	    // InternalDescartesQL.g:2514:1: (lv_value_2_0= RULE_DOUBLE )
+            	    // InternalDescartesQL.g:2708:1: ( (lv_value_2_0= RULE_DOUBLE ) )
+            	    // InternalDescartesQL.g:2709:1: (lv_value_2_0= RULE_DOUBLE )
             	    {
-            	    // InternalDescartesQL.g:2514:1: (lv_value_2_0= RULE_DOUBLE )
-            	    // InternalDescartesQL.g:2515:3: lv_value_2_0= RULE_DOUBLE
+            	    // InternalDescartesQL.g:2709:1: (lv_value_2_0= RULE_DOUBLE )
+            	    // InternalDescartesQL.g:2710:3: lv_value_2_0= RULE_DOUBLE
             	    {
-            	    lv_value_2_0=(Token)match(input,RULE_DOUBLE,FOLLOW_8); 
+            	    lv_value_2_0=(Token)match(input,RULE_DOUBLE,FOLLOW_12); 
 
             	    			newLeafNode(lv_value_2_0, grammarAccess.getDoubleValueVariationClauseAccess().getValueDOUBLETerminalRuleCall_1_1_0()); 
             	    		
@@ -6070,7 +6558,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
             	    break;
 
             	default :
-            	    break loop31;
+            	    break loop38;
                 }
             } while (true);
 
@@ -6095,7 +6583,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleIntervalVariationClause"
-    // InternalDescartesQL.g:2539:1: entryRuleIntervalVariationClause returns [EObject current=null] : iv_ruleIntervalVariationClause= ruleIntervalVariationClause EOF ;
+    // InternalDescartesQL.g:2734:1: entryRuleIntervalVariationClause returns [EObject current=null] : iv_ruleIntervalVariationClause= ruleIntervalVariationClause EOF ;
     public final EObject entryRuleIntervalVariationClause() throws RecognitionException {
         EObject current = null;
 
@@ -6103,8 +6591,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:2540:2: (iv_ruleIntervalVariationClause= ruleIntervalVariationClause EOF )
-            // InternalDescartesQL.g:2541:2: iv_ruleIntervalVariationClause= ruleIntervalVariationClause EOF
+            // InternalDescartesQL.g:2735:2: (iv_ruleIntervalVariationClause= ruleIntervalVariationClause EOF )
+            // InternalDescartesQL.g:2736:2: iv_ruleIntervalVariationClause= ruleIntervalVariationClause EOF
             {
              newCompositeNode(grammarAccess.getIntervalVariationClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -6131,7 +6619,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleIntervalVariationClause"
-    // InternalDescartesQL.g:2548:1: ruleIntervalVariationClause returns [EObject current=null] : ( ( (lv_start_0_0= RULE_INT ) ) otherlv_1= '..' ( (lv_end_2_0= RULE_INT ) ) otherlv_3= 'BY' ( (lv_step_4_0= RULE_INT ) ) ) ;
+    // InternalDescartesQL.g:2743:1: ruleIntervalVariationClause returns [EObject current=null] : ( ( (lv_start_0_0= RULE_INT ) ) otherlv_1= '..' ( (lv_end_2_0= RULE_INT ) ) otherlv_3= 'BY' ( (lv_step_4_0= RULE_INT ) ) ) ;
     public final EObject ruleIntervalVariationClause() throws RecognitionException {
         EObject current = null;
 
@@ -6144,19 +6632,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:2551:28: ( ( ( (lv_start_0_0= RULE_INT ) ) otherlv_1= '..' ( (lv_end_2_0= RULE_INT ) ) otherlv_3= 'BY' ( (lv_step_4_0= RULE_INT ) ) ) )
-            // InternalDescartesQL.g:2552:1: ( ( (lv_start_0_0= RULE_INT ) ) otherlv_1= '..' ( (lv_end_2_0= RULE_INT ) ) otherlv_3= 'BY' ( (lv_step_4_0= RULE_INT ) ) )
+            // InternalDescartesQL.g:2746:28: ( ( ( (lv_start_0_0= RULE_INT ) ) otherlv_1= '..' ( (lv_end_2_0= RULE_INT ) ) otherlv_3= 'BY' ( (lv_step_4_0= RULE_INT ) ) ) )
+            // InternalDescartesQL.g:2747:1: ( ( (lv_start_0_0= RULE_INT ) ) otherlv_1= '..' ( (lv_end_2_0= RULE_INT ) ) otherlv_3= 'BY' ( (lv_step_4_0= RULE_INT ) ) )
             {
-            // InternalDescartesQL.g:2552:1: ( ( (lv_start_0_0= RULE_INT ) ) otherlv_1= '..' ( (lv_end_2_0= RULE_INT ) ) otherlv_3= 'BY' ( (lv_step_4_0= RULE_INT ) ) )
-            // InternalDescartesQL.g:2552:2: ( (lv_start_0_0= RULE_INT ) ) otherlv_1= '..' ( (lv_end_2_0= RULE_INT ) ) otherlv_3= 'BY' ( (lv_step_4_0= RULE_INT ) )
+            // InternalDescartesQL.g:2747:1: ( ( (lv_start_0_0= RULE_INT ) ) otherlv_1= '..' ( (lv_end_2_0= RULE_INT ) ) otherlv_3= 'BY' ( (lv_step_4_0= RULE_INT ) ) )
+            // InternalDescartesQL.g:2747:2: ( (lv_start_0_0= RULE_INT ) ) otherlv_1= '..' ( (lv_end_2_0= RULE_INT ) ) otherlv_3= 'BY' ( (lv_step_4_0= RULE_INT ) )
             {
-            // InternalDescartesQL.g:2552:2: ( (lv_start_0_0= RULE_INT ) )
-            // InternalDescartesQL.g:2553:1: (lv_start_0_0= RULE_INT )
+            // InternalDescartesQL.g:2747:2: ( (lv_start_0_0= RULE_INT ) )
+            // InternalDescartesQL.g:2748:1: (lv_start_0_0= RULE_INT )
             {
-            // InternalDescartesQL.g:2553:1: (lv_start_0_0= RULE_INT )
-            // InternalDescartesQL.g:2554:3: lv_start_0_0= RULE_INT
+            // InternalDescartesQL.g:2748:1: (lv_start_0_0= RULE_INT )
+            // InternalDescartesQL.g:2749:3: lv_start_0_0= RULE_INT
             {
-            lv_start_0_0=(Token)match(input,RULE_INT,FOLLOW_44); 
+            lv_start_0_0=(Token)match(input,RULE_INT,FOLLOW_47); 
 
             			newLeafNode(lv_start_0_0, grammarAccess.getIntervalVariationClauseAccess().getStartINTTerminalRuleCall_0_0()); 
             		
@@ -6176,17 +6664,17 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            otherlv_1=(Token)match(input,47,FOLLOW_19); 
+            otherlv_1=(Token)match(input,51,FOLLOW_24); 
 
                 	newLeafNode(otherlv_1, grammarAccess.getIntervalVariationClauseAccess().getFullStopFullStopKeyword_1());
                 
-            // InternalDescartesQL.g:2574:1: ( (lv_end_2_0= RULE_INT ) )
-            // InternalDescartesQL.g:2575:1: (lv_end_2_0= RULE_INT )
+            // InternalDescartesQL.g:2769:1: ( (lv_end_2_0= RULE_INT ) )
+            // InternalDescartesQL.g:2770:1: (lv_end_2_0= RULE_INT )
             {
-            // InternalDescartesQL.g:2575:1: (lv_end_2_0= RULE_INT )
-            // InternalDescartesQL.g:2576:3: lv_end_2_0= RULE_INT
+            // InternalDescartesQL.g:2770:1: (lv_end_2_0= RULE_INT )
+            // InternalDescartesQL.g:2771:3: lv_end_2_0= RULE_INT
             {
-            lv_end_2_0=(Token)match(input,RULE_INT,FOLLOW_45); 
+            lv_end_2_0=(Token)match(input,RULE_INT,FOLLOW_48); 
 
             			newLeafNode(lv_end_2_0, grammarAccess.getIntervalVariationClauseAccess().getEndINTTerminalRuleCall_2_0()); 
             		
@@ -6206,15 +6694,15 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            otherlv_3=(Token)match(input,48,FOLLOW_19); 
+            otherlv_3=(Token)match(input,52,FOLLOW_24); 
 
                 	newLeafNode(otherlv_3, grammarAccess.getIntervalVariationClauseAccess().getBYKeyword_3());
                 
-            // InternalDescartesQL.g:2596:1: ( (lv_step_4_0= RULE_INT ) )
-            // InternalDescartesQL.g:2597:1: (lv_step_4_0= RULE_INT )
+            // InternalDescartesQL.g:2791:1: ( (lv_step_4_0= RULE_INT ) )
+            // InternalDescartesQL.g:2792:1: (lv_step_4_0= RULE_INT )
             {
-            // InternalDescartesQL.g:2597:1: (lv_step_4_0= RULE_INT )
-            // InternalDescartesQL.g:2598:3: lv_step_4_0= RULE_INT
+            // InternalDescartesQL.g:2792:1: (lv_step_4_0= RULE_INT )
+            // InternalDescartesQL.g:2793:3: lv_step_4_0= RULE_INT
             {
             lv_step_4_0=(Token)match(input,RULE_INT,FOLLOW_2); 
 
@@ -6257,7 +6745,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleVaryingClause"
-    // InternalDescartesQL.g:2622:1: entryRuleVaryingClause returns [EObject current=null] : iv_ruleVaryingClause= ruleVaryingClause EOF ;
+    // InternalDescartesQL.g:2817:1: entryRuleVaryingClause returns [EObject current=null] : iv_ruleVaryingClause= ruleVaryingClause EOF ;
     public final EObject entryRuleVaryingClause() throws RecognitionException {
         EObject current = null;
 
@@ -6265,8 +6753,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:2623:2: (iv_ruleVaryingClause= ruleVaryingClause EOF )
-            // InternalDescartesQL.g:2624:2: iv_ruleVaryingClause= ruleVaryingClause EOF
+            // InternalDescartesQL.g:2818:2: (iv_ruleVaryingClause= ruleVaryingClause EOF )
+            // InternalDescartesQL.g:2819:2: iv_ruleVaryingClause= ruleVaryingClause EOF
             {
              newCompositeNode(grammarAccess.getVaryingClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -6293,7 +6781,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleVaryingClause"
-    // InternalDescartesQL.g:2631:1: ruleVaryingClause returns [EObject current=null] : ( ( (lv_mode_0_0= 'VARYING' ) ) ( (lv_dofReferences_1_0= ruleDoFReference ) ) (otherlv_2= ',' ( (lv_dofReferences_3_0= ruleDoFReference ) ) )* ) ;
+    // InternalDescartesQL.g:2826:1: ruleVaryingClause returns [EObject current=null] : ( ( (lv_mode_0_0= 'VARYING' ) ) ( (lv_dofReferences_1_0= ruleDoFReference ) ) (otherlv_2= ',' ( (lv_dofReferences_3_0= ruleDoFReference ) ) )* ) ;
     public final EObject ruleVaryingClause() throws RecognitionException {
         EObject current = null;
 
@@ -6307,19 +6795,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:2634:28: ( ( ( (lv_mode_0_0= 'VARYING' ) ) ( (lv_dofReferences_1_0= ruleDoFReference ) ) (otherlv_2= ',' ( (lv_dofReferences_3_0= ruleDoFReference ) ) )* ) )
-            // InternalDescartesQL.g:2635:1: ( ( (lv_mode_0_0= 'VARYING' ) ) ( (lv_dofReferences_1_0= ruleDoFReference ) ) (otherlv_2= ',' ( (lv_dofReferences_3_0= ruleDoFReference ) ) )* )
+            // InternalDescartesQL.g:2829:28: ( ( ( (lv_mode_0_0= 'VARYING' ) ) ( (lv_dofReferences_1_0= ruleDoFReference ) ) (otherlv_2= ',' ( (lv_dofReferences_3_0= ruleDoFReference ) ) )* ) )
+            // InternalDescartesQL.g:2830:1: ( ( (lv_mode_0_0= 'VARYING' ) ) ( (lv_dofReferences_1_0= ruleDoFReference ) ) (otherlv_2= ',' ( (lv_dofReferences_3_0= ruleDoFReference ) ) )* )
             {
-            // InternalDescartesQL.g:2635:1: ( ( (lv_mode_0_0= 'VARYING' ) ) ( (lv_dofReferences_1_0= ruleDoFReference ) ) (otherlv_2= ',' ( (lv_dofReferences_3_0= ruleDoFReference ) ) )* )
-            // InternalDescartesQL.g:2635:2: ( (lv_mode_0_0= 'VARYING' ) ) ( (lv_dofReferences_1_0= ruleDoFReference ) ) (otherlv_2= ',' ( (lv_dofReferences_3_0= ruleDoFReference ) ) )*
+            // InternalDescartesQL.g:2830:1: ( ( (lv_mode_0_0= 'VARYING' ) ) ( (lv_dofReferences_1_0= ruleDoFReference ) ) (otherlv_2= ',' ( (lv_dofReferences_3_0= ruleDoFReference ) ) )* )
+            // InternalDescartesQL.g:2830:2: ( (lv_mode_0_0= 'VARYING' ) ) ( (lv_dofReferences_1_0= ruleDoFReference ) ) (otherlv_2= ',' ( (lv_dofReferences_3_0= ruleDoFReference ) ) )*
             {
-            // InternalDescartesQL.g:2635:2: ( (lv_mode_0_0= 'VARYING' ) )
-            // InternalDescartesQL.g:2636:1: (lv_mode_0_0= 'VARYING' )
+            // InternalDescartesQL.g:2830:2: ( (lv_mode_0_0= 'VARYING' ) )
+            // InternalDescartesQL.g:2831:1: (lv_mode_0_0= 'VARYING' )
             {
-            // InternalDescartesQL.g:2636:1: (lv_mode_0_0= 'VARYING' )
-            // InternalDescartesQL.g:2637:3: lv_mode_0_0= 'VARYING'
+            // InternalDescartesQL.g:2831:1: (lv_mode_0_0= 'VARYING' )
+            // InternalDescartesQL.g:2832:3: lv_mode_0_0= 'VARYING'
             {
-            lv_mode_0_0=(Token)match(input,49,FOLLOW_36); 
+            lv_mode_0_0=(Token)match(input,53,FOLLOW_39); 
 
                     newLeafNode(lv_mode_0_0, grammarAccess.getVaryingClauseAccess().getModeVARYINGKeyword_0_0());
                 
@@ -6335,16 +6823,16 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:2650:2: ( (lv_dofReferences_1_0= ruleDoFReference ) )
-            // InternalDescartesQL.g:2651:1: (lv_dofReferences_1_0= ruleDoFReference )
+            // InternalDescartesQL.g:2845:2: ( (lv_dofReferences_1_0= ruleDoFReference ) )
+            // InternalDescartesQL.g:2846:1: (lv_dofReferences_1_0= ruleDoFReference )
             {
-            // InternalDescartesQL.g:2651:1: (lv_dofReferences_1_0= ruleDoFReference )
-            // InternalDescartesQL.g:2652:3: lv_dofReferences_1_0= ruleDoFReference
+            // InternalDescartesQL.g:2846:1: (lv_dofReferences_1_0= ruleDoFReference )
+            // InternalDescartesQL.g:2847:3: lv_dofReferences_1_0= ruleDoFReference
             {
              
             	        newCompositeNode(grammarAccess.getVaryingClauseAccess().getDofReferencesDoFReferenceParserRuleCall_1_0()); 
             	    
-            pushFollow(FOLLOW_8);
+            pushFollow(FOLLOW_12);
             lv_dofReferences_1_0=ruleDoFReference();
 
             state._fsp--;
@@ -6366,35 +6854,35 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:2668:2: (otherlv_2= ',' ( (lv_dofReferences_3_0= ruleDoFReference ) ) )*
-            loop32:
+            // InternalDescartesQL.g:2863:2: (otherlv_2= ',' ( (lv_dofReferences_3_0= ruleDoFReference ) ) )*
+            loop39:
             do {
-                int alt32=2;
-                int LA32_0 = input.LA(1);
+                int alt39=2;
+                int LA39_0 = input.LA(1);
 
-                if ( (LA32_0==16) ) {
-                    alt32=1;
+                if ( (LA39_0==20) ) {
+                    alt39=1;
                 }
 
 
-                switch (alt32) {
+                switch (alt39) {
             	case 1 :
-            	    // InternalDescartesQL.g:2668:4: otherlv_2= ',' ( (lv_dofReferences_3_0= ruleDoFReference ) )
+            	    // InternalDescartesQL.g:2863:4: otherlv_2= ',' ( (lv_dofReferences_3_0= ruleDoFReference ) )
             	    {
-            	    otherlv_2=(Token)match(input,16,FOLLOW_36); 
+            	    otherlv_2=(Token)match(input,20,FOLLOW_39); 
 
             	        	newLeafNode(otherlv_2, grammarAccess.getVaryingClauseAccess().getCommaKeyword_2_0());
             	        
-            	    // InternalDescartesQL.g:2672:1: ( (lv_dofReferences_3_0= ruleDoFReference ) )
-            	    // InternalDescartesQL.g:2673:1: (lv_dofReferences_3_0= ruleDoFReference )
+            	    // InternalDescartesQL.g:2867:1: ( (lv_dofReferences_3_0= ruleDoFReference ) )
+            	    // InternalDescartesQL.g:2868:1: (lv_dofReferences_3_0= ruleDoFReference )
             	    {
-            	    // InternalDescartesQL.g:2673:1: (lv_dofReferences_3_0= ruleDoFReference )
-            	    // InternalDescartesQL.g:2674:3: lv_dofReferences_3_0= ruleDoFReference
+            	    // InternalDescartesQL.g:2868:1: (lv_dofReferences_3_0= ruleDoFReference )
+            	    // InternalDescartesQL.g:2869:3: lv_dofReferences_3_0= ruleDoFReference
             	    {
             	     
             	    	        newCompositeNode(grammarAccess.getVaryingClauseAccess().getDofReferencesDoFReferenceParserRuleCall_2_1_0()); 
             	    	    
-            	    pushFollow(FOLLOW_8);
+            	    pushFollow(FOLLOW_12);
             	    lv_dofReferences_3_0=ruleDoFReference();
 
             	    state._fsp--;
@@ -6421,7 +6909,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
             	    break;
 
             	default :
-            	    break loop32;
+            	    break loop39;
                 }
             } while (true);
 
@@ -6446,7 +6934,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleDoFReference"
-    // InternalDescartesQL.g:2698:1: entryRuleDoFReference returns [EObject current=null] : iv_ruleDoFReference= ruleDoFReference EOF ;
+    // InternalDescartesQL.g:2893:1: entryRuleDoFReference returns [EObject current=null] : iv_ruleDoFReference= ruleDoFReference EOF ;
     public final EObject entryRuleDoFReference() throws RecognitionException {
         EObject current = null;
 
@@ -6454,8 +6942,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:2699:2: (iv_ruleDoFReference= ruleDoFReference EOF )
-            // InternalDescartesQL.g:2700:2: iv_ruleDoFReference= ruleDoFReference EOF
+            // InternalDescartesQL.g:2894:2: (iv_ruleDoFReference= ruleDoFReference EOF )
+            // InternalDescartesQL.g:2895:2: iv_ruleDoFReference= ruleDoFReference EOF
             {
              newCompositeNode(grammarAccess.getDoFReferenceRule()); 
             pushFollow(FOLLOW_1);
@@ -6482,7 +6970,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleDoFReference"
-    // InternalDescartesQL.g:2707:1: ruleDoFReference returns [EObject current=null] : ( ( (lv_doFIdentifier_0_0= RULE_STRING ) ) ( (lv_doFAliasClause_1_0= ruleAliasClause ) )? ( ( (lv_doFVariationClause_2_1= ruleConfigurationPropertiesClause | lv_doFVariationClause_2_2= ruleDoFVariationClause ) ) )? ) ;
+    // InternalDescartesQL.g:2902:1: ruleDoFReference returns [EObject current=null] : ( ( (lv_doFIdentifier_0_0= RULE_STRING ) ) ( (lv_doFAliasClause_1_0= ruleAliasClause ) )? ( ( (lv_doFVariationClause_2_1= ruleConfigurationPropertiesClause | lv_doFVariationClause_2_2= ruleDoFVariationClause ) ) )? ) ;
     public final EObject ruleDoFReference() throws RecognitionException {
         EObject current = null;
 
@@ -6497,19 +6985,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:2710:28: ( ( ( (lv_doFIdentifier_0_0= RULE_STRING ) ) ( (lv_doFAliasClause_1_0= ruleAliasClause ) )? ( ( (lv_doFVariationClause_2_1= ruleConfigurationPropertiesClause | lv_doFVariationClause_2_2= ruleDoFVariationClause ) ) )? ) )
-            // InternalDescartesQL.g:2711:1: ( ( (lv_doFIdentifier_0_0= RULE_STRING ) ) ( (lv_doFAliasClause_1_0= ruleAliasClause ) )? ( ( (lv_doFVariationClause_2_1= ruleConfigurationPropertiesClause | lv_doFVariationClause_2_2= ruleDoFVariationClause ) ) )? )
+            // InternalDescartesQL.g:2905:28: ( ( ( (lv_doFIdentifier_0_0= RULE_STRING ) ) ( (lv_doFAliasClause_1_0= ruleAliasClause ) )? ( ( (lv_doFVariationClause_2_1= ruleConfigurationPropertiesClause | lv_doFVariationClause_2_2= ruleDoFVariationClause ) ) )? ) )
+            // InternalDescartesQL.g:2906:1: ( ( (lv_doFIdentifier_0_0= RULE_STRING ) ) ( (lv_doFAliasClause_1_0= ruleAliasClause ) )? ( ( (lv_doFVariationClause_2_1= ruleConfigurationPropertiesClause | lv_doFVariationClause_2_2= ruleDoFVariationClause ) ) )? )
             {
-            // InternalDescartesQL.g:2711:1: ( ( (lv_doFIdentifier_0_0= RULE_STRING ) ) ( (lv_doFAliasClause_1_0= ruleAliasClause ) )? ( ( (lv_doFVariationClause_2_1= ruleConfigurationPropertiesClause | lv_doFVariationClause_2_2= ruleDoFVariationClause ) ) )? )
-            // InternalDescartesQL.g:2711:2: ( (lv_doFIdentifier_0_0= RULE_STRING ) ) ( (lv_doFAliasClause_1_0= ruleAliasClause ) )? ( ( (lv_doFVariationClause_2_1= ruleConfigurationPropertiesClause | lv_doFVariationClause_2_2= ruleDoFVariationClause ) ) )?
+            // InternalDescartesQL.g:2906:1: ( ( (lv_doFIdentifier_0_0= RULE_STRING ) ) ( (lv_doFAliasClause_1_0= ruleAliasClause ) )? ( ( (lv_doFVariationClause_2_1= ruleConfigurationPropertiesClause | lv_doFVariationClause_2_2= ruleDoFVariationClause ) ) )? )
+            // InternalDescartesQL.g:2906:2: ( (lv_doFIdentifier_0_0= RULE_STRING ) ) ( (lv_doFAliasClause_1_0= ruleAliasClause ) )? ( ( (lv_doFVariationClause_2_1= ruleConfigurationPropertiesClause | lv_doFVariationClause_2_2= ruleDoFVariationClause ) ) )?
             {
-            // InternalDescartesQL.g:2711:2: ( (lv_doFIdentifier_0_0= RULE_STRING ) )
-            // InternalDescartesQL.g:2712:1: (lv_doFIdentifier_0_0= RULE_STRING )
+            // InternalDescartesQL.g:2906:2: ( (lv_doFIdentifier_0_0= RULE_STRING ) )
+            // InternalDescartesQL.g:2907:1: (lv_doFIdentifier_0_0= RULE_STRING )
             {
-            // InternalDescartesQL.g:2712:1: (lv_doFIdentifier_0_0= RULE_STRING )
-            // InternalDescartesQL.g:2713:3: lv_doFIdentifier_0_0= RULE_STRING
+            // InternalDescartesQL.g:2907:1: (lv_doFIdentifier_0_0= RULE_STRING )
+            // InternalDescartesQL.g:2908:3: lv_doFIdentifier_0_0= RULE_STRING
             {
-            lv_doFIdentifier_0_0=(Token)match(input,RULE_STRING,FOLLOW_46); 
+            lv_doFIdentifier_0_0=(Token)match(input,RULE_STRING,FOLLOW_49); 
 
             			newLeafNode(lv_doFIdentifier_0_0, grammarAccess.getDoFReferenceAccess().getDoFIdentifierSTRINGTerminalRuleCall_0_0()); 
             		
@@ -6529,24 +7017,24 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:2729:2: ( (lv_doFAliasClause_1_0= ruleAliasClause ) )?
-            int alt33=2;
-            int LA33_0 = input.LA(1);
+            // InternalDescartesQL.g:2924:2: ( (lv_doFAliasClause_1_0= ruleAliasClause ) )?
+            int alt40=2;
+            int LA40_0 = input.LA(1);
 
-            if ( (LA33_0==55) ) {
-                alt33=1;
+            if ( (LA40_0==59) ) {
+                alt40=1;
             }
-            switch (alt33) {
+            switch (alt40) {
                 case 1 :
-                    // InternalDescartesQL.g:2730:1: (lv_doFAliasClause_1_0= ruleAliasClause )
+                    // InternalDescartesQL.g:2925:1: (lv_doFAliasClause_1_0= ruleAliasClause )
                     {
-                    // InternalDescartesQL.g:2730:1: (lv_doFAliasClause_1_0= ruleAliasClause )
-                    // InternalDescartesQL.g:2731:3: lv_doFAliasClause_1_0= ruleAliasClause
+                    // InternalDescartesQL.g:2925:1: (lv_doFAliasClause_1_0= ruleAliasClause )
+                    // InternalDescartesQL.g:2926:3: lv_doFAliasClause_1_0= ruleAliasClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getDoFReferenceAccess().getDoFAliasClauseAliasClauseParserRuleCall_1_0()); 
                     	    
-                    pushFollow(FOLLOW_47);
+                    pushFollow(FOLLOW_50);
                     lv_doFAliasClause_1_0=ruleAliasClause();
 
                     state._fsp--;
@@ -6571,39 +7059,39 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:2747:3: ( ( (lv_doFVariationClause_2_1= ruleConfigurationPropertiesClause | lv_doFVariationClause_2_2= ruleDoFVariationClause ) ) )?
-            int alt35=2;
-            int LA35_0 = input.LA(1);
+            // InternalDescartesQL.g:2942:3: ( ( (lv_doFVariationClause_2_1= ruleConfigurationPropertiesClause | lv_doFVariationClause_2_2= ruleDoFVariationClause ) ) )?
+            int alt42=2;
+            int LA42_0 = input.LA(1);
 
-            if ( (LA35_0==41||LA35_0==45) ) {
-                alt35=1;
+            if ( (LA42_0==45||LA42_0==49) ) {
+                alt42=1;
             }
-            switch (alt35) {
+            switch (alt42) {
                 case 1 :
-                    // InternalDescartesQL.g:2748:1: ( (lv_doFVariationClause_2_1= ruleConfigurationPropertiesClause | lv_doFVariationClause_2_2= ruleDoFVariationClause ) )
+                    // InternalDescartesQL.g:2943:1: ( (lv_doFVariationClause_2_1= ruleConfigurationPropertiesClause | lv_doFVariationClause_2_2= ruleDoFVariationClause ) )
                     {
-                    // InternalDescartesQL.g:2748:1: ( (lv_doFVariationClause_2_1= ruleConfigurationPropertiesClause | lv_doFVariationClause_2_2= ruleDoFVariationClause ) )
-                    // InternalDescartesQL.g:2749:1: (lv_doFVariationClause_2_1= ruleConfigurationPropertiesClause | lv_doFVariationClause_2_2= ruleDoFVariationClause )
+                    // InternalDescartesQL.g:2943:1: ( (lv_doFVariationClause_2_1= ruleConfigurationPropertiesClause | lv_doFVariationClause_2_2= ruleDoFVariationClause ) )
+                    // InternalDescartesQL.g:2944:1: (lv_doFVariationClause_2_1= ruleConfigurationPropertiesClause | lv_doFVariationClause_2_2= ruleDoFVariationClause )
                     {
-                    // InternalDescartesQL.g:2749:1: (lv_doFVariationClause_2_1= ruleConfigurationPropertiesClause | lv_doFVariationClause_2_2= ruleDoFVariationClause )
-                    int alt34=2;
-                    int LA34_0 = input.LA(1);
+                    // InternalDescartesQL.g:2944:1: (lv_doFVariationClause_2_1= ruleConfigurationPropertiesClause | lv_doFVariationClause_2_2= ruleDoFVariationClause )
+                    int alt41=2;
+                    int LA41_0 = input.LA(1);
 
-                    if ( (LA34_0==41) ) {
-                        alt34=1;
+                    if ( (LA41_0==45) ) {
+                        alt41=1;
                     }
-                    else if ( (LA34_0==45) ) {
-                        alt34=2;
+                    else if ( (LA41_0==49) ) {
+                        alt41=2;
                     }
                     else {
                         NoViableAltException nvae =
-                            new NoViableAltException("", 34, 0, input);
+                            new NoViableAltException("", 41, 0, input);
 
                         throw nvae;
                     }
-                    switch (alt34) {
+                    switch (alt41) {
                         case 1 :
-                            // InternalDescartesQL.g:2750:3: lv_doFVariationClause_2_1= ruleConfigurationPropertiesClause
+                            // InternalDescartesQL.g:2945:3: lv_doFVariationClause_2_1= ruleConfigurationPropertiesClause
                             {
                              
                             	        newCompositeNode(grammarAccess.getDoFReferenceAccess().getDoFVariationClauseConfigurationPropertiesClauseParserRuleCall_2_0_0()); 
@@ -6628,7 +7116,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                             }
                             break;
                         case 2 :
-                            // InternalDescartesQL.g:2765:8: lv_doFVariationClause_2_2= ruleDoFVariationClause
+                            // InternalDescartesQL.g:2960:8: lv_doFVariationClause_2_2= ruleDoFVariationClause
                             {
                              
                             	        newCompositeNode(grammarAccess.getDoFReferenceAccess().getDoFVariationClauseDoFVariationClauseParserRuleCall_2_0_1()); 
@@ -6685,7 +7173,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleMetricClause"
-    // InternalDescartesQL.g:2791:1: entryRuleMetricClause returns [EObject current=null] : iv_ruleMetricClause= ruleMetricClause EOF ;
+    // InternalDescartesQL.g:2986:1: entryRuleMetricClause returns [EObject current=null] : iv_ruleMetricClause= ruleMetricClause EOF ;
     public final EObject entryRuleMetricClause() throws RecognitionException {
         EObject current = null;
 
@@ -6693,8 +7181,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:2792:2: (iv_ruleMetricClause= ruleMetricClause EOF )
-            // InternalDescartesQL.g:2793:2: iv_ruleMetricClause= ruleMetricClause EOF
+            // InternalDescartesQL.g:2987:2: (iv_ruleMetricClause= ruleMetricClause EOF )
+            // InternalDescartesQL.g:2988:2: iv_ruleMetricClause= ruleMetricClause EOF
             {
              newCompositeNode(grammarAccess.getMetricClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -6721,7 +7209,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleMetricClause"
-    // InternalDescartesQL.g:2800:1: ruleMetricClause returns [EObject current=null] : ( (lv_metricReference_0_0= ruleMetricReference ) ) ;
+    // InternalDescartesQL.g:2995:1: ruleMetricClause returns [EObject current=null] : ( (lv_metricReference_0_0= ruleMetricReference ) ) ;
     public final EObject ruleMetricClause() throws RecognitionException {
         EObject current = null;
 
@@ -6731,14 +7219,14 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:2803:28: ( ( (lv_metricReference_0_0= ruleMetricReference ) ) )
-            // InternalDescartesQL.g:2804:1: ( (lv_metricReference_0_0= ruleMetricReference ) )
+            // InternalDescartesQL.g:2998:28: ( ( (lv_metricReference_0_0= ruleMetricReference ) ) )
+            // InternalDescartesQL.g:2999:1: ( (lv_metricReference_0_0= ruleMetricReference ) )
             {
-            // InternalDescartesQL.g:2804:1: ( (lv_metricReference_0_0= ruleMetricReference ) )
-            // InternalDescartesQL.g:2805:1: (lv_metricReference_0_0= ruleMetricReference )
+            // InternalDescartesQL.g:2999:1: ( (lv_metricReference_0_0= ruleMetricReference ) )
+            // InternalDescartesQL.g:3000:1: (lv_metricReference_0_0= ruleMetricReference )
             {
-            // InternalDescartesQL.g:2805:1: (lv_metricReference_0_0= ruleMetricReference )
-            // InternalDescartesQL.g:2806:3: lv_metricReference_0_0= ruleMetricReference
+            // InternalDescartesQL.g:3000:1: (lv_metricReference_0_0= ruleMetricReference )
+            // InternalDescartesQL.g:3001:3: lv_metricReference_0_0= ruleMetricReference
             {
              
             	        newCompositeNode(grammarAccess.getMetricClauseAccess().getMetricReferenceMetricReferenceParserRuleCall_0()); 
@@ -6783,7 +7271,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleAggregateMetricClause"
-    // InternalDescartesQL.g:2830:1: entryRuleAggregateMetricClause returns [EObject current=null] : iv_ruleAggregateMetricClause= ruleAggregateMetricClause EOF ;
+    // InternalDescartesQL.g:3025:1: entryRuleAggregateMetricClause returns [EObject current=null] : iv_ruleAggregateMetricClause= ruleAggregateMetricClause EOF ;
     public final EObject entryRuleAggregateMetricClause() throws RecognitionException {
         EObject current = null;
 
@@ -6791,8 +7279,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:2831:2: (iv_ruleAggregateMetricClause= ruleAggregateMetricClause EOF )
-            // InternalDescartesQL.g:2832:2: iv_ruleAggregateMetricClause= ruleAggregateMetricClause EOF
+            // InternalDescartesQL.g:3026:2: (iv_ruleAggregateMetricClause= ruleAggregateMetricClause EOF )
+            // InternalDescartesQL.g:3027:2: iv_ruleAggregateMetricClause= ruleAggregateMetricClause EOF
             {
              newCompositeNode(grammarAccess.getAggregateMetricClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -6819,7 +7307,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleAggregateMetricClause"
-    // InternalDescartesQL.g:2839:1: ruleAggregateMetricClause returns [EObject current=null] : ( ( (lv_function_0_0= ruleStatisticalAggregateType ) ) otherlv_1= '(' ( ( (lv_metrics_2_1= ruleMetricStarClause | lv_metrics_2_2= ruleMetricClauses ) ) ) otherlv_3= ')' ( (lv_properties_4_0= ruleConfigurationPropertiesClause ) )? ) ;
+    // InternalDescartesQL.g:3034:1: ruleAggregateMetricClause returns [EObject current=null] : ( ( (lv_function_0_0= ruleStatisticalAggregateType ) ) otherlv_1= '(' ( ( (lv_metrics_2_1= ruleMetricStarClause | lv_metrics_2_2= ruleMetricClauses ) ) ) otherlv_3= ')' ( (lv_properties_4_0= ruleConfigurationPropertiesClause ) )? ) ;
     public final EObject ruleAggregateMetricClause() throws RecognitionException {
         EObject current = null;
 
@@ -6837,22 +7325,22 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:2842:28: ( ( ( (lv_function_0_0= ruleStatisticalAggregateType ) ) otherlv_1= '(' ( ( (lv_metrics_2_1= ruleMetricStarClause | lv_metrics_2_2= ruleMetricClauses ) ) ) otherlv_3= ')' ( (lv_properties_4_0= ruleConfigurationPropertiesClause ) )? ) )
-            // InternalDescartesQL.g:2843:1: ( ( (lv_function_0_0= ruleStatisticalAggregateType ) ) otherlv_1= '(' ( ( (lv_metrics_2_1= ruleMetricStarClause | lv_metrics_2_2= ruleMetricClauses ) ) ) otherlv_3= ')' ( (lv_properties_4_0= ruleConfigurationPropertiesClause ) )? )
+            // InternalDescartesQL.g:3037:28: ( ( ( (lv_function_0_0= ruleStatisticalAggregateType ) ) otherlv_1= '(' ( ( (lv_metrics_2_1= ruleMetricStarClause | lv_metrics_2_2= ruleMetricClauses ) ) ) otherlv_3= ')' ( (lv_properties_4_0= ruleConfigurationPropertiesClause ) )? ) )
+            // InternalDescartesQL.g:3038:1: ( ( (lv_function_0_0= ruleStatisticalAggregateType ) ) otherlv_1= '(' ( ( (lv_metrics_2_1= ruleMetricStarClause | lv_metrics_2_2= ruleMetricClauses ) ) ) otherlv_3= ')' ( (lv_properties_4_0= ruleConfigurationPropertiesClause ) )? )
             {
-            // InternalDescartesQL.g:2843:1: ( ( (lv_function_0_0= ruleStatisticalAggregateType ) ) otherlv_1= '(' ( ( (lv_metrics_2_1= ruleMetricStarClause | lv_metrics_2_2= ruleMetricClauses ) ) ) otherlv_3= ')' ( (lv_properties_4_0= ruleConfigurationPropertiesClause ) )? )
-            // InternalDescartesQL.g:2843:2: ( (lv_function_0_0= ruleStatisticalAggregateType ) ) otherlv_1= '(' ( ( (lv_metrics_2_1= ruleMetricStarClause | lv_metrics_2_2= ruleMetricClauses ) ) ) otherlv_3= ')' ( (lv_properties_4_0= ruleConfigurationPropertiesClause ) )?
+            // InternalDescartesQL.g:3038:1: ( ( (lv_function_0_0= ruleStatisticalAggregateType ) ) otherlv_1= '(' ( ( (lv_metrics_2_1= ruleMetricStarClause | lv_metrics_2_2= ruleMetricClauses ) ) ) otherlv_3= ')' ( (lv_properties_4_0= ruleConfigurationPropertiesClause ) )? )
+            // InternalDescartesQL.g:3038:2: ( (lv_function_0_0= ruleStatisticalAggregateType ) ) otherlv_1= '(' ( ( (lv_metrics_2_1= ruleMetricStarClause | lv_metrics_2_2= ruleMetricClauses ) ) ) otherlv_3= ')' ( (lv_properties_4_0= ruleConfigurationPropertiesClause ) )?
             {
-            // InternalDescartesQL.g:2843:2: ( (lv_function_0_0= ruleStatisticalAggregateType ) )
-            // InternalDescartesQL.g:2844:1: (lv_function_0_0= ruleStatisticalAggregateType )
+            // InternalDescartesQL.g:3038:2: ( (lv_function_0_0= ruleStatisticalAggregateType ) )
+            // InternalDescartesQL.g:3039:1: (lv_function_0_0= ruleStatisticalAggregateType )
             {
-            // InternalDescartesQL.g:2844:1: (lv_function_0_0= ruleStatisticalAggregateType )
-            // InternalDescartesQL.g:2845:3: lv_function_0_0= ruleStatisticalAggregateType
+            // InternalDescartesQL.g:3039:1: (lv_function_0_0= ruleStatisticalAggregateType )
+            // InternalDescartesQL.g:3040:3: lv_function_0_0= ruleStatisticalAggregateType
             {
              
             	        newCompositeNode(grammarAccess.getAggregateMetricClauseAccess().getFunctionStatisticalAggregateTypeEnumRuleCall_0_0()); 
             	    
-            pushFollow(FOLLOW_10);
+            pushFollow(FOLLOW_14);
             lv_function_0_0=ruleStatisticalAggregateType();
 
             state._fsp--;
@@ -6874,40 +7362,40 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            otherlv_1=(Token)match(input,19,FOLLOW_48); 
+            otherlv_1=(Token)match(input,23,FOLLOW_51); 
 
                 	newLeafNode(otherlv_1, grammarAccess.getAggregateMetricClauseAccess().getLeftParenthesisKeyword_1());
                 
-            // InternalDescartesQL.g:2865:1: ( ( (lv_metrics_2_1= ruleMetricStarClause | lv_metrics_2_2= ruleMetricClauses ) ) )
-            // InternalDescartesQL.g:2866:1: ( (lv_metrics_2_1= ruleMetricStarClause | lv_metrics_2_2= ruleMetricClauses ) )
+            // InternalDescartesQL.g:3060:1: ( ( (lv_metrics_2_1= ruleMetricStarClause | lv_metrics_2_2= ruleMetricClauses ) ) )
+            // InternalDescartesQL.g:3061:1: ( (lv_metrics_2_1= ruleMetricStarClause | lv_metrics_2_2= ruleMetricClauses ) )
             {
-            // InternalDescartesQL.g:2866:1: ( (lv_metrics_2_1= ruleMetricStarClause | lv_metrics_2_2= ruleMetricClauses ) )
-            // InternalDescartesQL.g:2867:1: (lv_metrics_2_1= ruleMetricStarClause | lv_metrics_2_2= ruleMetricClauses )
+            // InternalDescartesQL.g:3061:1: ( (lv_metrics_2_1= ruleMetricStarClause | lv_metrics_2_2= ruleMetricClauses ) )
+            // InternalDescartesQL.g:3062:1: (lv_metrics_2_1= ruleMetricStarClause | lv_metrics_2_2= ruleMetricClauses )
             {
-            // InternalDescartesQL.g:2867:1: (lv_metrics_2_1= ruleMetricStarClause | lv_metrics_2_2= ruleMetricClauses )
-            int alt36=2;
-            int LA36_0 = input.LA(1);
+            // InternalDescartesQL.g:3062:1: (lv_metrics_2_1= ruleMetricStarClause | lv_metrics_2_2= ruleMetricClauses )
+            int alt43=2;
+            int LA43_0 = input.LA(1);
 
-            if ( (LA36_0==50) ) {
-                alt36=1;
+            if ( (LA43_0==54) ) {
+                alt43=1;
             }
-            else if ( (LA36_0==RULE_ID) ) {
-                alt36=2;
+            else if ( (LA43_0==RULE_ID) ) {
+                alt43=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("", 36, 0, input);
+                    new NoViableAltException("", 43, 0, input);
 
                 throw nvae;
             }
-            switch (alt36) {
+            switch (alt43) {
                 case 1 :
-                    // InternalDescartesQL.g:2868:3: lv_metrics_2_1= ruleMetricStarClause
+                    // InternalDescartesQL.g:3063:3: lv_metrics_2_1= ruleMetricStarClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getAggregateMetricClauseAccess().getMetricsMetricStarClauseParserRuleCall_2_0_0()); 
                     	    
-                    pushFollow(FOLLOW_29);
+                    pushFollow(FOLLOW_32);
                     lv_metrics_2_1=ruleMetricStarClause();
 
                     state._fsp--;
@@ -6927,12 +7415,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 2 :
-                    // InternalDescartesQL.g:2883:8: lv_metrics_2_2= ruleMetricClauses
+                    // InternalDescartesQL.g:3078:8: lv_metrics_2_2= ruleMetricClauses
                     {
                      
                     	        newCompositeNode(grammarAccess.getAggregateMetricClauseAccess().getMetricsMetricClausesParserRuleCall_2_0_1()); 
                     	    
-                    pushFollow(FOLLOW_29);
+                    pushFollow(FOLLOW_32);
                     lv_metrics_2_2=ruleMetricClauses();
 
                     state._fsp--;
@@ -6960,23 +7448,23 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            otherlv_3=(Token)match(input,20,FOLLOW_40); 
+            otherlv_3=(Token)match(input,24,FOLLOW_43); 
 
                 	newLeafNode(otherlv_3, grammarAccess.getAggregateMetricClauseAccess().getRightParenthesisKeyword_3());
                 
-            // InternalDescartesQL.g:2905:1: ( (lv_properties_4_0= ruleConfigurationPropertiesClause ) )?
-            int alt37=2;
-            int LA37_0 = input.LA(1);
+            // InternalDescartesQL.g:3100:1: ( (lv_properties_4_0= ruleConfigurationPropertiesClause ) )?
+            int alt44=2;
+            int LA44_0 = input.LA(1);
 
-            if ( (LA37_0==41) ) {
-                alt37=1;
+            if ( (LA44_0==45) ) {
+                alt44=1;
             }
-            switch (alt37) {
+            switch (alt44) {
                 case 1 :
-                    // InternalDescartesQL.g:2906:1: (lv_properties_4_0= ruleConfigurationPropertiesClause )
+                    // InternalDescartesQL.g:3101:1: (lv_properties_4_0= ruleConfigurationPropertiesClause )
                     {
-                    // InternalDescartesQL.g:2906:1: (lv_properties_4_0= ruleConfigurationPropertiesClause )
-                    // InternalDescartesQL.g:2907:3: lv_properties_4_0= ruleConfigurationPropertiesClause
+                    // InternalDescartesQL.g:3101:1: (lv_properties_4_0= ruleConfigurationPropertiesClause )
+                    // InternalDescartesQL.g:3102:3: lv_properties_4_0= ruleConfigurationPropertiesClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getAggregateMetricClauseAccess().getPropertiesConfigurationPropertiesClauseParserRuleCall_4_0()); 
@@ -7027,7 +7515,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleMetricClauses"
-    // InternalDescartesQL.g:2931:1: entryRuleMetricClauses returns [EObject current=null] : iv_ruleMetricClauses= ruleMetricClauses EOF ;
+    // InternalDescartesQL.g:3126:1: entryRuleMetricClauses returns [EObject current=null] : iv_ruleMetricClauses= ruleMetricClauses EOF ;
     public final EObject entryRuleMetricClauses() throws RecognitionException {
         EObject current = null;
 
@@ -7035,8 +7523,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:2932:2: (iv_ruleMetricClauses= ruleMetricClauses EOF )
-            // InternalDescartesQL.g:2933:2: iv_ruleMetricClauses= ruleMetricClauses EOF
+            // InternalDescartesQL.g:3127:2: (iv_ruleMetricClauses= ruleMetricClauses EOF )
+            // InternalDescartesQL.g:3128:2: iv_ruleMetricClauses= ruleMetricClauses EOF
             {
              newCompositeNode(grammarAccess.getMetricClausesRule()); 
             pushFollow(FOLLOW_1);
@@ -7063,7 +7551,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleMetricClauses"
-    // InternalDescartesQL.g:2940:1: ruleMetricClauses returns [EObject current=null] : ( ( (lv_metrics_0_0= ruleMetricClause ) ) (otherlv_1= ',' ( (lv_metrics_2_0= ruleMetricClause ) ) )* ) ;
+    // InternalDescartesQL.g:3135:1: ruleMetricClauses returns [EObject current=null] : ( ( (lv_metrics_0_0= ruleMetricClause ) ) (otherlv_1= ',' ( (lv_metrics_2_0= ruleMetricClause ) ) )* ) ;
     public final EObject ruleMetricClauses() throws RecognitionException {
         EObject current = null;
 
@@ -7076,22 +7564,22 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:2943:28: ( ( ( (lv_metrics_0_0= ruleMetricClause ) ) (otherlv_1= ',' ( (lv_metrics_2_0= ruleMetricClause ) ) )* ) )
-            // InternalDescartesQL.g:2944:1: ( ( (lv_metrics_0_0= ruleMetricClause ) ) (otherlv_1= ',' ( (lv_metrics_2_0= ruleMetricClause ) ) )* )
+            // InternalDescartesQL.g:3138:28: ( ( ( (lv_metrics_0_0= ruleMetricClause ) ) (otherlv_1= ',' ( (lv_metrics_2_0= ruleMetricClause ) ) )* ) )
+            // InternalDescartesQL.g:3139:1: ( ( (lv_metrics_0_0= ruleMetricClause ) ) (otherlv_1= ',' ( (lv_metrics_2_0= ruleMetricClause ) ) )* )
             {
-            // InternalDescartesQL.g:2944:1: ( ( (lv_metrics_0_0= ruleMetricClause ) ) (otherlv_1= ',' ( (lv_metrics_2_0= ruleMetricClause ) ) )* )
-            // InternalDescartesQL.g:2944:2: ( (lv_metrics_0_0= ruleMetricClause ) ) (otherlv_1= ',' ( (lv_metrics_2_0= ruleMetricClause ) ) )*
+            // InternalDescartesQL.g:3139:1: ( ( (lv_metrics_0_0= ruleMetricClause ) ) (otherlv_1= ',' ( (lv_metrics_2_0= ruleMetricClause ) ) )* )
+            // InternalDescartesQL.g:3139:2: ( (lv_metrics_0_0= ruleMetricClause ) ) (otherlv_1= ',' ( (lv_metrics_2_0= ruleMetricClause ) ) )*
             {
-            // InternalDescartesQL.g:2944:2: ( (lv_metrics_0_0= ruleMetricClause ) )
-            // InternalDescartesQL.g:2945:1: (lv_metrics_0_0= ruleMetricClause )
+            // InternalDescartesQL.g:3139:2: ( (lv_metrics_0_0= ruleMetricClause ) )
+            // InternalDescartesQL.g:3140:1: (lv_metrics_0_0= ruleMetricClause )
             {
-            // InternalDescartesQL.g:2945:1: (lv_metrics_0_0= ruleMetricClause )
-            // InternalDescartesQL.g:2946:3: lv_metrics_0_0= ruleMetricClause
+            // InternalDescartesQL.g:3140:1: (lv_metrics_0_0= ruleMetricClause )
+            // InternalDescartesQL.g:3141:3: lv_metrics_0_0= ruleMetricClause
             {
              
             	        newCompositeNode(grammarAccess.getMetricClausesAccess().getMetricsMetricClauseParserRuleCall_0_0()); 
             	    
-            pushFollow(FOLLOW_8);
+            pushFollow(FOLLOW_12);
             lv_metrics_0_0=ruleMetricClause();
 
             state._fsp--;
@@ -7113,35 +7601,35 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:2962:2: (otherlv_1= ',' ( (lv_metrics_2_0= ruleMetricClause ) ) )*
-            loop38:
+            // InternalDescartesQL.g:3157:2: (otherlv_1= ',' ( (lv_metrics_2_0= ruleMetricClause ) ) )*
+            loop45:
             do {
-                int alt38=2;
-                int LA38_0 = input.LA(1);
+                int alt45=2;
+                int LA45_0 = input.LA(1);
 
-                if ( (LA38_0==16) ) {
-                    alt38=1;
+                if ( (LA45_0==20) ) {
+                    alt45=1;
                 }
 
 
-                switch (alt38) {
+                switch (alt45) {
             	case 1 :
-            	    // InternalDescartesQL.g:2962:4: otherlv_1= ',' ( (lv_metrics_2_0= ruleMetricClause ) )
+            	    // InternalDescartesQL.g:3157:4: otherlv_1= ',' ( (lv_metrics_2_0= ruleMetricClause ) )
             	    {
-            	    otherlv_1=(Token)match(input,16,FOLLOW_7); 
+            	    otherlv_1=(Token)match(input,20,FOLLOW_11); 
 
             	        	newLeafNode(otherlv_1, grammarAccess.getMetricClausesAccess().getCommaKeyword_1_0());
             	        
-            	    // InternalDescartesQL.g:2966:1: ( (lv_metrics_2_0= ruleMetricClause ) )
-            	    // InternalDescartesQL.g:2967:1: (lv_metrics_2_0= ruleMetricClause )
+            	    // InternalDescartesQL.g:3161:1: ( (lv_metrics_2_0= ruleMetricClause ) )
+            	    // InternalDescartesQL.g:3162:1: (lv_metrics_2_0= ruleMetricClause )
             	    {
-            	    // InternalDescartesQL.g:2967:1: (lv_metrics_2_0= ruleMetricClause )
-            	    // InternalDescartesQL.g:2968:3: lv_metrics_2_0= ruleMetricClause
+            	    // InternalDescartesQL.g:3162:1: (lv_metrics_2_0= ruleMetricClause )
+            	    // InternalDescartesQL.g:3163:3: lv_metrics_2_0= ruleMetricClause
             	    {
             	     
             	    	        newCompositeNode(grammarAccess.getMetricClausesAccess().getMetricsMetricClauseParserRuleCall_1_1_0()); 
             	    	    
-            	    pushFollow(FOLLOW_8);
+            	    pushFollow(FOLLOW_12);
             	    lv_metrics_2_0=ruleMetricClause();
 
             	    state._fsp--;
@@ -7168,7 +7656,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
             	    break;
 
             	default :
-            	    break loop38;
+            	    break loop45;
                 }
             } while (true);
 
@@ -7193,7 +7681,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleMetricStarClause"
-    // InternalDescartesQL.g:2992:1: entryRuleMetricStarClause returns [EObject current=null] : iv_ruleMetricStarClause= ruleMetricStarClause EOF ;
+    // InternalDescartesQL.g:3187:1: entryRuleMetricStarClause returns [EObject current=null] : iv_ruleMetricStarClause= ruleMetricStarClause EOF ;
     public final EObject entryRuleMetricStarClause() throws RecognitionException {
         EObject current = null;
 
@@ -7201,8 +7689,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:2993:2: (iv_ruleMetricStarClause= ruleMetricStarClause EOF )
-            // InternalDescartesQL.g:2994:2: iv_ruleMetricStarClause= ruleMetricStarClause EOF
+            // InternalDescartesQL.g:3188:2: (iv_ruleMetricStarClause= ruleMetricStarClause EOF )
+            // InternalDescartesQL.g:3189:2: iv_ruleMetricStarClause= ruleMetricStarClause EOF
             {
              newCompositeNode(grammarAccess.getMetricStarClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -7229,7 +7717,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleMetricStarClause"
-    // InternalDescartesQL.g:3001:1: ruleMetricStarClause returns [EObject current=null] : (otherlv_0= '*.' ( (lv_metricName_1_0= RULE_ID ) ) ) ;
+    // InternalDescartesQL.g:3196:1: ruleMetricStarClause returns [EObject current=null] : (otherlv_0= '*.' ( (lv_metricName_1_0= RULE_ID ) ) ) ;
     public final EObject ruleMetricStarClause() throws RecognitionException {
         EObject current = null;
 
@@ -7239,21 +7727,21 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:3004:28: ( (otherlv_0= '*.' ( (lv_metricName_1_0= RULE_ID ) ) ) )
-            // InternalDescartesQL.g:3005:1: (otherlv_0= '*.' ( (lv_metricName_1_0= RULE_ID ) ) )
+            // InternalDescartesQL.g:3199:28: ( (otherlv_0= '*.' ( (lv_metricName_1_0= RULE_ID ) ) ) )
+            // InternalDescartesQL.g:3200:1: (otherlv_0= '*.' ( (lv_metricName_1_0= RULE_ID ) ) )
             {
-            // InternalDescartesQL.g:3005:1: (otherlv_0= '*.' ( (lv_metricName_1_0= RULE_ID ) ) )
-            // InternalDescartesQL.g:3005:3: otherlv_0= '*.' ( (lv_metricName_1_0= RULE_ID ) )
+            // InternalDescartesQL.g:3200:1: (otherlv_0= '*.' ( (lv_metricName_1_0= RULE_ID ) ) )
+            // InternalDescartesQL.g:3200:3: otherlv_0= '*.' ( (lv_metricName_1_0= RULE_ID ) )
             {
-            otherlv_0=(Token)match(input,50,FOLLOW_7); 
+            otherlv_0=(Token)match(input,54,FOLLOW_11); 
 
                 	newLeafNode(otherlv_0, grammarAccess.getMetricStarClauseAccess().getAsteriskFullStopKeyword_0());
                 
-            // InternalDescartesQL.g:3009:1: ( (lv_metricName_1_0= RULE_ID ) )
-            // InternalDescartesQL.g:3010:1: (lv_metricName_1_0= RULE_ID )
+            // InternalDescartesQL.g:3204:1: ( (lv_metricName_1_0= RULE_ID ) )
+            // InternalDescartesQL.g:3205:1: (lv_metricName_1_0= RULE_ID )
             {
-            // InternalDescartesQL.g:3010:1: (lv_metricName_1_0= RULE_ID )
-            // InternalDescartesQL.g:3011:3: lv_metricName_1_0= RULE_ID
+            // InternalDescartesQL.g:3205:1: (lv_metricName_1_0= RULE_ID )
+            // InternalDescartesQL.g:3206:3: lv_metricName_1_0= RULE_ID
             {
             lv_metricName_1_0=(Token)match(input,RULE_ID,FOLLOW_2); 
 
@@ -7296,7 +7784,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleMetricReference"
-    // InternalDescartesQL.g:3035:1: entryRuleMetricReference returns [EObject current=null] : iv_ruleMetricReference= ruleMetricReference EOF ;
+    // InternalDescartesQL.g:3230:1: entryRuleMetricReference returns [EObject current=null] : iv_ruleMetricReference= ruleMetricReference EOF ;
     public final EObject entryRuleMetricReference() throws RecognitionException {
         EObject current = null;
 
@@ -7304,8 +7792,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:3036:2: (iv_ruleMetricReference= ruleMetricReference EOF )
-            // InternalDescartesQL.g:3037:2: iv_ruleMetricReference= ruleMetricReference EOF
+            // InternalDescartesQL.g:3231:2: (iv_ruleMetricReference= ruleMetricReference EOF )
+            // InternalDescartesQL.g:3232:2: iv_ruleMetricReference= ruleMetricReference EOF
             {
              newCompositeNode(grammarAccess.getMetricReferenceRule()); 
             pushFollow(FOLLOW_1);
@@ -7332,7 +7820,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleMetricReference"
-    // InternalDescartesQL.g:3044:1: ruleMetricReference returns [EObject current=null] : ( ( (lv_entityReference_0_0= RULE_ID ) ) ( ( (lv_seperatorn_1_0= '.' ) ) ( (lv_navigationClause_2_0= ruleNavigationClause ) ) )? ( (lv_separator_3_0= '.' ) ) ( (lv_metricReference_4_0= RULE_ID ) ) ( ( (lv_separatorv_5_0= '.' ) ) ( (lv_statTypeReference_6_0= RULE_ID ) ) )? ) ;
+    // InternalDescartesQL.g:3239:1: ruleMetricReference returns [EObject current=null] : ( ( (lv_entityReference_0_0= RULE_ID ) ) ( ( (lv_seperatorn_1_0= '.' ) ) ( (lv_navigationClause_2_0= ruleNavigationClause ) ) )? ( (lv_separator_3_0= '.' ) ) ( (lv_metricReference_4_0= RULE_ID ) ) ( ( (lv_separatorv_5_0= '.' ) ) ( (lv_statTypeReference_6_0= RULE_ID ) ) )? ) ;
     public final EObject ruleMetricReference() throws RecognitionException {
         EObject current = null;
 
@@ -7348,19 +7836,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:3047:28: ( ( ( (lv_entityReference_0_0= RULE_ID ) ) ( ( (lv_seperatorn_1_0= '.' ) ) ( (lv_navigationClause_2_0= ruleNavigationClause ) ) )? ( (lv_separator_3_0= '.' ) ) ( (lv_metricReference_4_0= RULE_ID ) ) ( ( (lv_separatorv_5_0= '.' ) ) ( (lv_statTypeReference_6_0= RULE_ID ) ) )? ) )
-            // InternalDescartesQL.g:3048:1: ( ( (lv_entityReference_0_0= RULE_ID ) ) ( ( (lv_seperatorn_1_0= '.' ) ) ( (lv_navigationClause_2_0= ruleNavigationClause ) ) )? ( (lv_separator_3_0= '.' ) ) ( (lv_metricReference_4_0= RULE_ID ) ) ( ( (lv_separatorv_5_0= '.' ) ) ( (lv_statTypeReference_6_0= RULE_ID ) ) )? )
+            // InternalDescartesQL.g:3242:28: ( ( ( (lv_entityReference_0_0= RULE_ID ) ) ( ( (lv_seperatorn_1_0= '.' ) ) ( (lv_navigationClause_2_0= ruleNavigationClause ) ) )? ( (lv_separator_3_0= '.' ) ) ( (lv_metricReference_4_0= RULE_ID ) ) ( ( (lv_separatorv_5_0= '.' ) ) ( (lv_statTypeReference_6_0= RULE_ID ) ) )? ) )
+            // InternalDescartesQL.g:3243:1: ( ( (lv_entityReference_0_0= RULE_ID ) ) ( ( (lv_seperatorn_1_0= '.' ) ) ( (lv_navigationClause_2_0= ruleNavigationClause ) ) )? ( (lv_separator_3_0= '.' ) ) ( (lv_metricReference_4_0= RULE_ID ) ) ( ( (lv_separatorv_5_0= '.' ) ) ( (lv_statTypeReference_6_0= RULE_ID ) ) )? )
             {
-            // InternalDescartesQL.g:3048:1: ( ( (lv_entityReference_0_0= RULE_ID ) ) ( ( (lv_seperatorn_1_0= '.' ) ) ( (lv_navigationClause_2_0= ruleNavigationClause ) ) )? ( (lv_separator_3_0= '.' ) ) ( (lv_metricReference_4_0= RULE_ID ) ) ( ( (lv_separatorv_5_0= '.' ) ) ( (lv_statTypeReference_6_0= RULE_ID ) ) )? )
-            // InternalDescartesQL.g:3048:2: ( (lv_entityReference_0_0= RULE_ID ) ) ( ( (lv_seperatorn_1_0= '.' ) ) ( (lv_navigationClause_2_0= ruleNavigationClause ) ) )? ( (lv_separator_3_0= '.' ) ) ( (lv_metricReference_4_0= RULE_ID ) ) ( ( (lv_separatorv_5_0= '.' ) ) ( (lv_statTypeReference_6_0= RULE_ID ) ) )?
+            // InternalDescartesQL.g:3243:1: ( ( (lv_entityReference_0_0= RULE_ID ) ) ( ( (lv_seperatorn_1_0= '.' ) ) ( (lv_navigationClause_2_0= ruleNavigationClause ) ) )? ( (lv_separator_3_0= '.' ) ) ( (lv_metricReference_4_0= RULE_ID ) ) ( ( (lv_separatorv_5_0= '.' ) ) ( (lv_statTypeReference_6_0= RULE_ID ) ) )? )
+            // InternalDescartesQL.g:3243:2: ( (lv_entityReference_0_0= RULE_ID ) ) ( ( (lv_seperatorn_1_0= '.' ) ) ( (lv_navigationClause_2_0= ruleNavigationClause ) ) )? ( (lv_separator_3_0= '.' ) ) ( (lv_metricReference_4_0= RULE_ID ) ) ( ( (lv_separatorv_5_0= '.' ) ) ( (lv_statTypeReference_6_0= RULE_ID ) ) )?
             {
-            // InternalDescartesQL.g:3048:2: ( (lv_entityReference_0_0= RULE_ID ) )
-            // InternalDescartesQL.g:3049:1: (lv_entityReference_0_0= RULE_ID )
+            // InternalDescartesQL.g:3243:2: ( (lv_entityReference_0_0= RULE_ID ) )
+            // InternalDescartesQL.g:3244:1: (lv_entityReference_0_0= RULE_ID )
             {
-            // InternalDescartesQL.g:3049:1: (lv_entityReference_0_0= RULE_ID )
-            // InternalDescartesQL.g:3050:3: lv_entityReference_0_0= RULE_ID
+            // InternalDescartesQL.g:3244:1: (lv_entityReference_0_0= RULE_ID )
+            // InternalDescartesQL.g:3245:3: lv_entityReference_0_0= RULE_ID
             {
-            lv_entityReference_0_0=(Token)match(input,RULE_ID,FOLLOW_49); 
+            lv_entityReference_0_0=(Token)match(input,RULE_ID,FOLLOW_52); 
 
             			newLeafNode(lv_entityReference_0_0, grammarAccess.getMetricReferenceAccess().getEntityReferenceIDTerminalRuleCall_0_0()); 
             		
@@ -7380,28 +7868,28 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:3066:2: ( ( (lv_seperatorn_1_0= '.' ) ) ( (lv_navigationClause_2_0= ruleNavigationClause ) ) )?
-            int alt39=2;
-            int LA39_0 = input.LA(1);
+            // InternalDescartesQL.g:3261:2: ( ( (lv_seperatorn_1_0= '.' ) ) ( (lv_navigationClause_2_0= ruleNavigationClause ) ) )?
+            int alt46=2;
+            int LA46_0 = input.LA(1);
 
-            if ( (LA39_0==43) ) {
-                int LA39_1 = input.LA(2);
+            if ( (LA46_0==47) ) {
+                int LA46_1 = input.LA(2);
 
-                if ( ((LA39_1>=51 && LA39_1<=53)) ) {
-                    alt39=1;
+                if ( ((LA46_1>=55 && LA46_1<=57)) ) {
+                    alt46=1;
                 }
             }
-            switch (alt39) {
+            switch (alt46) {
                 case 1 :
-                    // InternalDescartesQL.g:3066:3: ( (lv_seperatorn_1_0= '.' ) ) ( (lv_navigationClause_2_0= ruleNavigationClause ) )
+                    // InternalDescartesQL.g:3261:3: ( (lv_seperatorn_1_0= '.' ) ) ( (lv_navigationClause_2_0= ruleNavigationClause ) )
                     {
-                    // InternalDescartesQL.g:3066:3: ( (lv_seperatorn_1_0= '.' ) )
-                    // InternalDescartesQL.g:3067:1: (lv_seperatorn_1_0= '.' )
+                    // InternalDescartesQL.g:3261:3: ( (lv_seperatorn_1_0= '.' ) )
+                    // InternalDescartesQL.g:3262:1: (lv_seperatorn_1_0= '.' )
                     {
-                    // InternalDescartesQL.g:3067:1: (lv_seperatorn_1_0= '.' )
-                    // InternalDescartesQL.g:3068:3: lv_seperatorn_1_0= '.'
+                    // InternalDescartesQL.g:3262:1: (lv_seperatorn_1_0= '.' )
+                    // InternalDescartesQL.g:3263:3: lv_seperatorn_1_0= '.'
                     {
-                    lv_seperatorn_1_0=(Token)match(input,43,FOLLOW_50); 
+                    lv_seperatorn_1_0=(Token)match(input,47,FOLLOW_53); 
 
                             newLeafNode(lv_seperatorn_1_0, grammarAccess.getMetricReferenceAccess().getSeperatornFullStopKeyword_1_0_0());
                         
@@ -7417,16 +7905,16 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
                     }
 
-                    // InternalDescartesQL.g:3081:2: ( (lv_navigationClause_2_0= ruleNavigationClause ) )
-                    // InternalDescartesQL.g:3082:1: (lv_navigationClause_2_0= ruleNavigationClause )
+                    // InternalDescartesQL.g:3276:2: ( (lv_navigationClause_2_0= ruleNavigationClause ) )
+                    // InternalDescartesQL.g:3277:1: (lv_navigationClause_2_0= ruleNavigationClause )
                     {
-                    // InternalDescartesQL.g:3082:1: (lv_navigationClause_2_0= ruleNavigationClause )
-                    // InternalDescartesQL.g:3083:3: lv_navigationClause_2_0= ruleNavigationClause
+                    // InternalDescartesQL.g:3277:1: (lv_navigationClause_2_0= ruleNavigationClause )
+                    // InternalDescartesQL.g:3278:3: lv_navigationClause_2_0= ruleNavigationClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getMetricReferenceAccess().getNavigationClauseNavigationClauseParserRuleCall_1_1_0()); 
                     	    
-                    pushFollow(FOLLOW_49);
+                    pushFollow(FOLLOW_52);
                     lv_navigationClause_2_0=ruleNavigationClause();
 
                     state._fsp--;
@@ -7454,13 +7942,13 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:3099:4: ( (lv_separator_3_0= '.' ) )
-            // InternalDescartesQL.g:3100:1: (lv_separator_3_0= '.' )
+            // InternalDescartesQL.g:3294:4: ( (lv_separator_3_0= '.' ) )
+            // InternalDescartesQL.g:3295:1: (lv_separator_3_0= '.' )
             {
-            // InternalDescartesQL.g:3100:1: (lv_separator_3_0= '.' )
-            // InternalDescartesQL.g:3101:3: lv_separator_3_0= '.'
+            // InternalDescartesQL.g:3295:1: (lv_separator_3_0= '.' )
+            // InternalDescartesQL.g:3296:3: lv_separator_3_0= '.'
             {
-            lv_separator_3_0=(Token)match(input,43,FOLLOW_7); 
+            lv_separator_3_0=(Token)match(input,47,FOLLOW_11); 
 
                     newLeafNode(lv_separator_3_0, grammarAccess.getMetricReferenceAccess().getSeparatorFullStopKeyword_2_0());
                 
@@ -7476,13 +7964,13 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:3114:2: ( (lv_metricReference_4_0= RULE_ID ) )
-            // InternalDescartesQL.g:3115:1: (lv_metricReference_4_0= RULE_ID )
+            // InternalDescartesQL.g:3309:2: ( (lv_metricReference_4_0= RULE_ID ) )
+            // InternalDescartesQL.g:3310:1: (lv_metricReference_4_0= RULE_ID )
             {
-            // InternalDescartesQL.g:3115:1: (lv_metricReference_4_0= RULE_ID )
-            // InternalDescartesQL.g:3116:3: lv_metricReference_4_0= RULE_ID
+            // InternalDescartesQL.g:3310:1: (lv_metricReference_4_0= RULE_ID )
+            // InternalDescartesQL.g:3311:3: lv_metricReference_4_0= RULE_ID
             {
-            lv_metricReference_4_0=(Token)match(input,RULE_ID,FOLLOW_51); 
+            lv_metricReference_4_0=(Token)match(input,RULE_ID,FOLLOW_54); 
 
             			newLeafNode(lv_metricReference_4_0, grammarAccess.getMetricReferenceAccess().getMetricReferenceIDTerminalRuleCall_3_0()); 
             		
@@ -7502,24 +7990,24 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:3132:2: ( ( (lv_separatorv_5_0= '.' ) ) ( (lv_statTypeReference_6_0= RULE_ID ) ) )?
-            int alt40=2;
-            int LA40_0 = input.LA(1);
+            // InternalDescartesQL.g:3327:2: ( ( (lv_separatorv_5_0= '.' ) ) ( (lv_statTypeReference_6_0= RULE_ID ) ) )?
+            int alt47=2;
+            int LA47_0 = input.LA(1);
 
-            if ( (LA40_0==43) ) {
-                alt40=1;
+            if ( (LA47_0==47) ) {
+                alt47=1;
             }
-            switch (alt40) {
+            switch (alt47) {
                 case 1 :
-                    // InternalDescartesQL.g:3132:3: ( (lv_separatorv_5_0= '.' ) ) ( (lv_statTypeReference_6_0= RULE_ID ) )
+                    // InternalDescartesQL.g:3327:3: ( (lv_separatorv_5_0= '.' ) ) ( (lv_statTypeReference_6_0= RULE_ID ) )
                     {
-                    // InternalDescartesQL.g:3132:3: ( (lv_separatorv_5_0= '.' ) )
-                    // InternalDescartesQL.g:3133:1: (lv_separatorv_5_0= '.' )
+                    // InternalDescartesQL.g:3327:3: ( (lv_separatorv_5_0= '.' ) )
+                    // InternalDescartesQL.g:3328:1: (lv_separatorv_5_0= '.' )
                     {
-                    // InternalDescartesQL.g:3133:1: (lv_separatorv_5_0= '.' )
-                    // InternalDescartesQL.g:3134:3: lv_separatorv_5_0= '.'
+                    // InternalDescartesQL.g:3328:1: (lv_separatorv_5_0= '.' )
+                    // InternalDescartesQL.g:3329:3: lv_separatorv_5_0= '.'
                     {
-                    lv_separatorv_5_0=(Token)match(input,43,FOLLOW_7); 
+                    lv_separatorv_5_0=(Token)match(input,47,FOLLOW_11); 
 
                             newLeafNode(lv_separatorv_5_0, grammarAccess.getMetricReferenceAccess().getSeparatorvFullStopKeyword_4_0_0());
                         
@@ -7535,11 +8023,11 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
                     }
 
-                    // InternalDescartesQL.g:3147:2: ( (lv_statTypeReference_6_0= RULE_ID ) )
-                    // InternalDescartesQL.g:3148:1: (lv_statTypeReference_6_0= RULE_ID )
+                    // InternalDescartesQL.g:3342:2: ( (lv_statTypeReference_6_0= RULE_ID ) )
+                    // InternalDescartesQL.g:3343:1: (lv_statTypeReference_6_0= RULE_ID )
                     {
-                    // InternalDescartesQL.g:3148:1: (lv_statTypeReference_6_0= RULE_ID )
-                    // InternalDescartesQL.g:3149:3: lv_statTypeReference_6_0= RULE_ID
+                    // InternalDescartesQL.g:3343:1: (lv_statTypeReference_6_0= RULE_ID )
+                    // InternalDescartesQL.g:3344:3: lv_statTypeReference_6_0= RULE_ID
                     {
                     lv_statTypeReference_6_0=(Token)match(input,RULE_ID,FOLLOW_2); 
 
@@ -7588,7 +8076,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleNavigationClause"
-    // InternalDescartesQL.g:3173:1: entryRuleNavigationClause returns [EObject current=null] : iv_ruleNavigationClause= ruleNavigationClause EOF ;
+    // InternalDescartesQL.g:3368:1: entryRuleNavigationClause returns [EObject current=null] : iv_ruleNavigationClause= ruleNavigationClause EOF ;
     public final EObject entryRuleNavigationClause() throws RecognitionException {
         EObject current = null;
 
@@ -7596,8 +8084,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:3174:2: (iv_ruleNavigationClause= ruleNavigationClause EOF )
-            // InternalDescartesQL.g:3175:2: iv_ruleNavigationClause= ruleNavigationClause EOF
+            // InternalDescartesQL.g:3369:2: (iv_ruleNavigationClause= ruleNavigationClause EOF )
+            // InternalDescartesQL.g:3370:2: iv_ruleNavigationClause= ruleNavigationClause EOF
             {
              newCompositeNode(grammarAccess.getNavigationClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -7624,7 +8112,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleNavigationClause"
-    // InternalDescartesQL.g:3182:1: ruleNavigationClause returns [EObject current=null] : (this_ParentClause_0= ruleParentClause | this_ChildrenClause_1= ruleChildrenClause | this_FindClause_2= ruleFindClause ) ;
+    // InternalDescartesQL.g:3377:1: ruleNavigationClause returns [EObject current=null] : (this_ParentClause_0= ruleParentClause | this_ChildrenClause_1= ruleChildrenClause | this_FindClause_2= ruleFindClause ) ;
     public final EObject ruleNavigationClause() throws RecognitionException {
         EObject current = null;
 
@@ -7638,37 +8126,37 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:3185:28: ( (this_ParentClause_0= ruleParentClause | this_ChildrenClause_1= ruleChildrenClause | this_FindClause_2= ruleFindClause ) )
-            // InternalDescartesQL.g:3186:1: (this_ParentClause_0= ruleParentClause | this_ChildrenClause_1= ruleChildrenClause | this_FindClause_2= ruleFindClause )
+            // InternalDescartesQL.g:3380:28: ( (this_ParentClause_0= ruleParentClause | this_ChildrenClause_1= ruleChildrenClause | this_FindClause_2= ruleFindClause ) )
+            // InternalDescartesQL.g:3381:1: (this_ParentClause_0= ruleParentClause | this_ChildrenClause_1= ruleChildrenClause | this_FindClause_2= ruleFindClause )
             {
-            // InternalDescartesQL.g:3186:1: (this_ParentClause_0= ruleParentClause | this_ChildrenClause_1= ruleChildrenClause | this_FindClause_2= ruleFindClause )
-            int alt41=3;
+            // InternalDescartesQL.g:3381:1: (this_ParentClause_0= ruleParentClause | this_ChildrenClause_1= ruleChildrenClause | this_FindClause_2= ruleFindClause )
+            int alt48=3;
             switch ( input.LA(1) ) {
-            case 52:
+            case 56:
                 {
-                alt41=1;
+                alt48=1;
                 }
                 break;
-            case 51:
+            case 55:
                 {
-                alt41=2;
+                alt48=2;
                 }
                 break;
-            case 53:
+            case 57:
                 {
-                alt41=3;
+                alt48=3;
                 }
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("", 41, 0, input);
+                    new NoViableAltException("", 48, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt41) {
+            switch (alt48) {
                 case 1 :
-                    // InternalDescartesQL.g:3187:5: this_ParentClause_0= ruleParentClause
+                    // InternalDescartesQL.g:3382:5: this_ParentClause_0= ruleParentClause
                     {
                      
                             newCompositeNode(grammarAccess.getNavigationClauseAccess().getParentClauseParserRuleCall_0()); 
@@ -7686,7 +8174,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 2 :
-                    // InternalDescartesQL.g:3197:5: this_ChildrenClause_1= ruleChildrenClause
+                    // InternalDescartesQL.g:3392:5: this_ChildrenClause_1= ruleChildrenClause
                     {
                      
                             newCompositeNode(grammarAccess.getNavigationClauseAccess().getChildrenClauseParserRuleCall_1()); 
@@ -7704,7 +8192,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 3 :
-                    // InternalDescartesQL.g:3207:5: this_FindClause_2= ruleFindClause
+                    // InternalDescartesQL.g:3402:5: this_FindClause_2= ruleFindClause
                     {
                      
                             newCompositeNode(grammarAccess.getNavigationClauseAccess().getFindClauseParserRuleCall_2()); 
@@ -7742,7 +8230,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleChildrenClause"
-    // InternalDescartesQL.g:3223:1: entryRuleChildrenClause returns [EObject current=null] : iv_ruleChildrenClause= ruleChildrenClause EOF ;
+    // InternalDescartesQL.g:3418:1: entryRuleChildrenClause returns [EObject current=null] : iv_ruleChildrenClause= ruleChildrenClause EOF ;
     public final EObject entryRuleChildrenClause() throws RecognitionException {
         EObject current = null;
 
@@ -7750,8 +8238,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:3224:2: (iv_ruleChildrenClause= ruleChildrenClause EOF )
-            // InternalDescartesQL.g:3225:2: iv_ruleChildrenClause= ruleChildrenClause EOF
+            // InternalDescartesQL.g:3419:2: (iv_ruleChildrenClause= ruleChildrenClause EOF )
+            // InternalDescartesQL.g:3420:2: iv_ruleChildrenClause= ruleChildrenClause EOF
             {
              newCompositeNode(grammarAccess.getChildrenClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -7778,7 +8266,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleChildrenClause"
-    // InternalDescartesQL.g:3232:1: ruleChildrenClause returns [EObject current=null] : ( (lv_content_0_0= 'children' ) ) ;
+    // InternalDescartesQL.g:3427:1: ruleChildrenClause returns [EObject current=null] : ( (lv_content_0_0= 'children' ) ) ;
     public final EObject ruleChildrenClause() throws RecognitionException {
         EObject current = null;
 
@@ -7787,16 +8275,16 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:3235:28: ( ( (lv_content_0_0= 'children' ) ) )
-            // InternalDescartesQL.g:3236:1: ( (lv_content_0_0= 'children' ) )
+            // InternalDescartesQL.g:3430:28: ( ( (lv_content_0_0= 'children' ) ) )
+            // InternalDescartesQL.g:3431:1: ( (lv_content_0_0= 'children' ) )
             {
-            // InternalDescartesQL.g:3236:1: ( (lv_content_0_0= 'children' ) )
-            // InternalDescartesQL.g:3237:1: (lv_content_0_0= 'children' )
+            // InternalDescartesQL.g:3431:1: ( (lv_content_0_0= 'children' ) )
+            // InternalDescartesQL.g:3432:1: (lv_content_0_0= 'children' )
             {
-            // InternalDescartesQL.g:3237:1: (lv_content_0_0= 'children' )
-            // InternalDescartesQL.g:3238:3: lv_content_0_0= 'children'
+            // InternalDescartesQL.g:3432:1: (lv_content_0_0= 'children' )
+            // InternalDescartesQL.g:3433:3: lv_content_0_0= 'children'
             {
-            lv_content_0_0=(Token)match(input,51,FOLLOW_2); 
+            lv_content_0_0=(Token)match(input,55,FOLLOW_2); 
 
                     newLeafNode(lv_content_0_0, grammarAccess.getChildrenClauseAccess().getContentChildrenKeyword_0());
                 
@@ -7830,7 +8318,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleParentClause"
-    // InternalDescartesQL.g:3259:1: entryRuleParentClause returns [EObject current=null] : iv_ruleParentClause= ruleParentClause EOF ;
+    // InternalDescartesQL.g:3454:1: entryRuleParentClause returns [EObject current=null] : iv_ruleParentClause= ruleParentClause EOF ;
     public final EObject entryRuleParentClause() throws RecognitionException {
         EObject current = null;
 
@@ -7838,8 +8326,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:3260:2: (iv_ruleParentClause= ruleParentClause EOF )
-            // InternalDescartesQL.g:3261:2: iv_ruleParentClause= ruleParentClause EOF
+            // InternalDescartesQL.g:3455:2: (iv_ruleParentClause= ruleParentClause EOF )
+            // InternalDescartesQL.g:3456:2: iv_ruleParentClause= ruleParentClause EOF
             {
              newCompositeNode(grammarAccess.getParentClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -7866,7 +8354,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleParentClause"
-    // InternalDescartesQL.g:3268:1: ruleParentClause returns [EObject current=null] : ( (lv_content_0_0= 'parent' ) ) ;
+    // InternalDescartesQL.g:3463:1: ruleParentClause returns [EObject current=null] : ( (lv_content_0_0= 'parent' ) ) ;
     public final EObject ruleParentClause() throws RecognitionException {
         EObject current = null;
 
@@ -7875,16 +8363,16 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:3271:28: ( ( (lv_content_0_0= 'parent' ) ) )
-            // InternalDescartesQL.g:3272:1: ( (lv_content_0_0= 'parent' ) )
+            // InternalDescartesQL.g:3466:28: ( ( (lv_content_0_0= 'parent' ) ) )
+            // InternalDescartesQL.g:3467:1: ( (lv_content_0_0= 'parent' ) )
             {
-            // InternalDescartesQL.g:3272:1: ( (lv_content_0_0= 'parent' ) )
-            // InternalDescartesQL.g:3273:1: (lv_content_0_0= 'parent' )
+            // InternalDescartesQL.g:3467:1: ( (lv_content_0_0= 'parent' ) )
+            // InternalDescartesQL.g:3468:1: (lv_content_0_0= 'parent' )
             {
-            // InternalDescartesQL.g:3273:1: (lv_content_0_0= 'parent' )
-            // InternalDescartesQL.g:3274:3: lv_content_0_0= 'parent'
+            // InternalDescartesQL.g:3468:1: (lv_content_0_0= 'parent' )
+            // InternalDescartesQL.g:3469:3: lv_content_0_0= 'parent'
             {
-            lv_content_0_0=(Token)match(input,52,FOLLOW_2); 
+            lv_content_0_0=(Token)match(input,56,FOLLOW_2); 
 
                     newLeafNode(lv_content_0_0, grammarAccess.getParentClauseAccess().getContentParentKeyword_0());
                 
@@ -7918,7 +8406,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleFindClause"
-    // InternalDescartesQL.g:3295:1: entryRuleFindClause returns [EObject current=null] : iv_ruleFindClause= ruleFindClause EOF ;
+    // InternalDescartesQL.g:3490:1: entryRuleFindClause returns [EObject current=null] : iv_ruleFindClause= ruleFindClause EOF ;
     public final EObject entryRuleFindClause() throws RecognitionException {
         EObject current = null;
 
@@ -7926,8 +8414,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:3296:2: (iv_ruleFindClause= ruleFindClause EOF )
-            // InternalDescartesQL.g:3297:2: iv_ruleFindClause= ruleFindClause EOF
+            // InternalDescartesQL.g:3491:2: (iv_ruleFindClause= ruleFindClause EOF )
+            // InternalDescartesQL.g:3492:2: iv_ruleFindClause= ruleFindClause EOF
             {
              newCompositeNode(grammarAccess.getFindClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -7954,7 +8442,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleFindClause"
-    // InternalDescartesQL.g:3304:1: ruleFindClause returns [EObject current=null] : ( ( (lv_start_0_0= 'find(' ) ) ( (lv_childName_1_0= RULE_STRING ) ) ( (lv_end_2_0= ')' ) ) ) ;
+    // InternalDescartesQL.g:3499:1: ruleFindClause returns [EObject current=null] : ( ( (lv_start_0_0= 'find(' ) ) ( (lv_childName_1_0= RULE_STRING ) ) ( (lv_end_2_0= ')' ) ) ) ;
     public final EObject ruleFindClause() throws RecognitionException {
         EObject current = null;
 
@@ -7965,19 +8453,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:3307:28: ( ( ( (lv_start_0_0= 'find(' ) ) ( (lv_childName_1_0= RULE_STRING ) ) ( (lv_end_2_0= ')' ) ) ) )
-            // InternalDescartesQL.g:3308:1: ( ( (lv_start_0_0= 'find(' ) ) ( (lv_childName_1_0= RULE_STRING ) ) ( (lv_end_2_0= ')' ) ) )
+            // InternalDescartesQL.g:3502:28: ( ( ( (lv_start_0_0= 'find(' ) ) ( (lv_childName_1_0= RULE_STRING ) ) ( (lv_end_2_0= ')' ) ) ) )
+            // InternalDescartesQL.g:3503:1: ( ( (lv_start_0_0= 'find(' ) ) ( (lv_childName_1_0= RULE_STRING ) ) ( (lv_end_2_0= ')' ) ) )
             {
-            // InternalDescartesQL.g:3308:1: ( ( (lv_start_0_0= 'find(' ) ) ( (lv_childName_1_0= RULE_STRING ) ) ( (lv_end_2_0= ')' ) ) )
-            // InternalDescartesQL.g:3308:2: ( (lv_start_0_0= 'find(' ) ) ( (lv_childName_1_0= RULE_STRING ) ) ( (lv_end_2_0= ')' ) )
+            // InternalDescartesQL.g:3503:1: ( ( (lv_start_0_0= 'find(' ) ) ( (lv_childName_1_0= RULE_STRING ) ) ( (lv_end_2_0= ')' ) ) )
+            // InternalDescartesQL.g:3503:2: ( (lv_start_0_0= 'find(' ) ) ( (lv_childName_1_0= RULE_STRING ) ) ( (lv_end_2_0= ')' ) )
             {
-            // InternalDescartesQL.g:3308:2: ( (lv_start_0_0= 'find(' ) )
-            // InternalDescartesQL.g:3309:1: (lv_start_0_0= 'find(' )
+            // InternalDescartesQL.g:3503:2: ( (lv_start_0_0= 'find(' ) )
+            // InternalDescartesQL.g:3504:1: (lv_start_0_0= 'find(' )
             {
-            // InternalDescartesQL.g:3309:1: (lv_start_0_0= 'find(' )
-            // InternalDescartesQL.g:3310:3: lv_start_0_0= 'find('
+            // InternalDescartesQL.g:3504:1: (lv_start_0_0= 'find(' )
+            // InternalDescartesQL.g:3505:3: lv_start_0_0= 'find('
             {
-            lv_start_0_0=(Token)match(input,53,FOLLOW_36); 
+            lv_start_0_0=(Token)match(input,57,FOLLOW_39); 
 
                     newLeafNode(lv_start_0_0, grammarAccess.getFindClauseAccess().getStartFindKeyword_0_0());
                 
@@ -7993,13 +8481,13 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:3323:2: ( (lv_childName_1_0= RULE_STRING ) )
-            // InternalDescartesQL.g:3324:1: (lv_childName_1_0= RULE_STRING )
+            // InternalDescartesQL.g:3518:2: ( (lv_childName_1_0= RULE_STRING ) )
+            // InternalDescartesQL.g:3519:1: (lv_childName_1_0= RULE_STRING )
             {
-            // InternalDescartesQL.g:3324:1: (lv_childName_1_0= RULE_STRING )
-            // InternalDescartesQL.g:3325:3: lv_childName_1_0= RULE_STRING
+            // InternalDescartesQL.g:3519:1: (lv_childName_1_0= RULE_STRING )
+            // InternalDescartesQL.g:3520:3: lv_childName_1_0= RULE_STRING
             {
-            lv_childName_1_0=(Token)match(input,RULE_STRING,FOLLOW_29); 
+            lv_childName_1_0=(Token)match(input,RULE_STRING,FOLLOW_32); 
 
             			newLeafNode(lv_childName_1_0, grammarAccess.getFindClauseAccess().getChildNameSTRINGTerminalRuleCall_1_0()); 
             		
@@ -8019,13 +8507,13 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:3341:2: ( (lv_end_2_0= ')' ) )
-            // InternalDescartesQL.g:3342:1: (lv_end_2_0= ')' )
+            // InternalDescartesQL.g:3536:2: ( (lv_end_2_0= ')' ) )
+            // InternalDescartesQL.g:3537:1: (lv_end_2_0= ')' )
             {
-            // InternalDescartesQL.g:3342:1: (lv_end_2_0= ')' )
-            // InternalDescartesQL.g:3343:3: lv_end_2_0= ')'
+            // InternalDescartesQL.g:3537:1: (lv_end_2_0= ')' )
+            // InternalDescartesQL.g:3538:3: lv_end_2_0= ')'
             {
-            lv_end_2_0=(Token)match(input,20,FOLLOW_2); 
+            lv_end_2_0=(Token)match(input,24,FOLLOW_2); 
 
                     newLeafNode(lv_end_2_0, grammarAccess.getFindClauseAccess().getEndRightParenthesisKeyword_2_0());
                 
@@ -8062,7 +8550,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleForClause"
-    // InternalDescartesQL.g:3364:1: entryRuleForClause returns [EObject current=null] : iv_ruleForClause= ruleForClause EOF ;
+    // InternalDescartesQL.g:3559:1: entryRuleForClause returns [EObject current=null] : iv_ruleForClause= ruleForClause EOF ;
     public final EObject entryRuleForClause() throws RecognitionException {
         EObject current = null;
 
@@ -8070,8 +8558,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:3365:2: (iv_ruleForClause= ruleForClause EOF )
-            // InternalDescartesQL.g:3366:2: iv_ruleForClause= ruleForClause EOF
+            // InternalDescartesQL.g:3560:2: (iv_ruleForClause= ruleForClause EOF )
+            // InternalDescartesQL.g:3561:2: iv_ruleForClause= ruleForClause EOF
             {
              newCompositeNode(grammarAccess.getForClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -8098,7 +8586,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleForClause"
-    // InternalDescartesQL.g:3373:1: ruleForClause returns [EObject current=null] : ( ( (lv_mode_0_0= 'FOR' ) ) ( (lv_entityReferenceClause_1_0= ruleEntityReferenceClause ) ) ) ;
+    // InternalDescartesQL.g:3568:1: ruleForClause returns [EObject current=null] : ( ( (lv_mode_0_0= 'FOR' ) ) ( (lv_entityReferenceClause_1_0= ruleEntityReferenceClause ) ) ) ;
     public final EObject ruleForClause() throws RecognitionException {
         EObject current = null;
 
@@ -8109,19 +8597,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:3376:28: ( ( ( (lv_mode_0_0= 'FOR' ) ) ( (lv_entityReferenceClause_1_0= ruleEntityReferenceClause ) ) ) )
-            // InternalDescartesQL.g:3377:1: ( ( (lv_mode_0_0= 'FOR' ) ) ( (lv_entityReferenceClause_1_0= ruleEntityReferenceClause ) ) )
+            // InternalDescartesQL.g:3571:28: ( ( ( (lv_mode_0_0= 'FOR' ) ) ( (lv_entityReferenceClause_1_0= ruleEntityReferenceClause ) ) ) )
+            // InternalDescartesQL.g:3572:1: ( ( (lv_mode_0_0= 'FOR' ) ) ( (lv_entityReferenceClause_1_0= ruleEntityReferenceClause ) ) )
             {
-            // InternalDescartesQL.g:3377:1: ( ( (lv_mode_0_0= 'FOR' ) ) ( (lv_entityReferenceClause_1_0= ruleEntityReferenceClause ) ) )
-            // InternalDescartesQL.g:3377:2: ( (lv_mode_0_0= 'FOR' ) ) ( (lv_entityReferenceClause_1_0= ruleEntityReferenceClause ) )
+            // InternalDescartesQL.g:3572:1: ( ( (lv_mode_0_0= 'FOR' ) ) ( (lv_entityReferenceClause_1_0= ruleEntityReferenceClause ) ) )
+            // InternalDescartesQL.g:3572:2: ( (lv_mode_0_0= 'FOR' ) ) ( (lv_entityReferenceClause_1_0= ruleEntityReferenceClause ) )
             {
-            // InternalDescartesQL.g:3377:2: ( (lv_mode_0_0= 'FOR' ) )
-            // InternalDescartesQL.g:3378:1: (lv_mode_0_0= 'FOR' )
+            // InternalDescartesQL.g:3572:2: ( (lv_mode_0_0= 'FOR' ) )
+            // InternalDescartesQL.g:3573:1: (lv_mode_0_0= 'FOR' )
             {
-            // InternalDescartesQL.g:3378:1: (lv_mode_0_0= 'FOR' )
-            // InternalDescartesQL.g:3379:3: lv_mode_0_0= 'FOR'
+            // InternalDescartesQL.g:3573:1: (lv_mode_0_0= 'FOR' )
+            // InternalDescartesQL.g:3574:3: lv_mode_0_0= 'FOR'
             {
-            lv_mode_0_0=(Token)match(input,54,FOLLOW_28); 
+            lv_mode_0_0=(Token)match(input,58,FOLLOW_31); 
 
                     newLeafNode(lv_mode_0_0, grammarAccess.getForClauseAccess().getModeFORKeyword_0_0());
                 
@@ -8137,11 +8625,11 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:3392:2: ( (lv_entityReferenceClause_1_0= ruleEntityReferenceClause ) )
-            // InternalDescartesQL.g:3393:1: (lv_entityReferenceClause_1_0= ruleEntityReferenceClause )
+            // InternalDescartesQL.g:3587:2: ( (lv_entityReferenceClause_1_0= ruleEntityReferenceClause ) )
+            // InternalDescartesQL.g:3588:1: (lv_entityReferenceClause_1_0= ruleEntityReferenceClause )
             {
-            // InternalDescartesQL.g:3393:1: (lv_entityReferenceClause_1_0= ruleEntityReferenceClause )
-            // InternalDescartesQL.g:3394:3: lv_entityReferenceClause_1_0= ruleEntityReferenceClause
+            // InternalDescartesQL.g:3588:1: (lv_entityReferenceClause_1_0= ruleEntityReferenceClause )
+            // InternalDescartesQL.g:3589:3: lv_entityReferenceClause_1_0= ruleEntityReferenceClause
             {
              
             	        newCompositeNode(grammarAccess.getForClauseAccess().getEntityReferenceClauseEntityReferenceClauseParserRuleCall_1_0()); 
@@ -8189,7 +8677,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleEntityReferenceClause"
-    // InternalDescartesQL.g:3418:1: entryRuleEntityReferenceClause returns [EObject current=null] : iv_ruleEntityReferenceClause= ruleEntityReferenceClause EOF ;
+    // InternalDescartesQL.g:3613:1: entryRuleEntityReferenceClause returns [EObject current=null] : iv_ruleEntityReferenceClause= ruleEntityReferenceClause EOF ;
     public final EObject entryRuleEntityReferenceClause() throws RecognitionException {
         EObject current = null;
 
@@ -8197,8 +8685,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:3419:2: (iv_ruleEntityReferenceClause= ruleEntityReferenceClause EOF )
-            // InternalDescartesQL.g:3420:2: iv_ruleEntityReferenceClause= ruleEntityReferenceClause EOF
+            // InternalDescartesQL.g:3614:2: (iv_ruleEntityReferenceClause= ruleEntityReferenceClause EOF )
+            // InternalDescartesQL.g:3615:2: iv_ruleEntityReferenceClause= ruleEntityReferenceClause EOF
             {
              newCompositeNode(grammarAccess.getEntityReferenceClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -8225,7 +8713,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleEntityReferenceClause"
-    // InternalDescartesQL.g:3427:1: ruleEntityReferenceClause returns [EObject current=null] : ( ( (lv_entityReferences_0_0= ruleEntityReference ) ) (otherlv_1= ',' ( (lv_entityReferences_2_0= ruleEntityReference ) ) )* ) ;
+    // InternalDescartesQL.g:3622:1: ruleEntityReferenceClause returns [EObject current=null] : ( ( (lv_entityReferences_0_0= ruleEntityReference ) ) (otherlv_1= ',' ( (lv_entityReferences_2_0= ruleEntityReference ) ) )* ) ;
     public final EObject ruleEntityReferenceClause() throws RecognitionException {
         EObject current = null;
 
@@ -8238,22 +8726,22 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:3430:28: ( ( ( (lv_entityReferences_0_0= ruleEntityReference ) ) (otherlv_1= ',' ( (lv_entityReferences_2_0= ruleEntityReference ) ) )* ) )
-            // InternalDescartesQL.g:3431:1: ( ( (lv_entityReferences_0_0= ruleEntityReference ) ) (otherlv_1= ',' ( (lv_entityReferences_2_0= ruleEntityReference ) ) )* )
+            // InternalDescartesQL.g:3625:28: ( ( ( (lv_entityReferences_0_0= ruleEntityReference ) ) (otherlv_1= ',' ( (lv_entityReferences_2_0= ruleEntityReference ) ) )* ) )
+            // InternalDescartesQL.g:3626:1: ( ( (lv_entityReferences_0_0= ruleEntityReference ) ) (otherlv_1= ',' ( (lv_entityReferences_2_0= ruleEntityReference ) ) )* )
             {
-            // InternalDescartesQL.g:3431:1: ( ( (lv_entityReferences_0_0= ruleEntityReference ) ) (otherlv_1= ',' ( (lv_entityReferences_2_0= ruleEntityReference ) ) )* )
-            // InternalDescartesQL.g:3431:2: ( (lv_entityReferences_0_0= ruleEntityReference ) ) (otherlv_1= ',' ( (lv_entityReferences_2_0= ruleEntityReference ) ) )*
+            // InternalDescartesQL.g:3626:1: ( ( (lv_entityReferences_0_0= ruleEntityReference ) ) (otherlv_1= ',' ( (lv_entityReferences_2_0= ruleEntityReference ) ) )* )
+            // InternalDescartesQL.g:3626:2: ( (lv_entityReferences_0_0= ruleEntityReference ) ) (otherlv_1= ',' ( (lv_entityReferences_2_0= ruleEntityReference ) ) )*
             {
-            // InternalDescartesQL.g:3431:2: ( (lv_entityReferences_0_0= ruleEntityReference ) )
-            // InternalDescartesQL.g:3432:1: (lv_entityReferences_0_0= ruleEntityReference )
+            // InternalDescartesQL.g:3626:2: ( (lv_entityReferences_0_0= ruleEntityReference ) )
+            // InternalDescartesQL.g:3627:1: (lv_entityReferences_0_0= ruleEntityReference )
             {
-            // InternalDescartesQL.g:3432:1: (lv_entityReferences_0_0= ruleEntityReference )
-            // InternalDescartesQL.g:3433:3: lv_entityReferences_0_0= ruleEntityReference
+            // InternalDescartesQL.g:3627:1: (lv_entityReferences_0_0= ruleEntityReference )
+            // InternalDescartesQL.g:3628:3: lv_entityReferences_0_0= ruleEntityReference
             {
              
             	        newCompositeNode(grammarAccess.getEntityReferenceClauseAccess().getEntityReferencesEntityReferenceParserRuleCall_0_0()); 
             	    
-            pushFollow(FOLLOW_8);
+            pushFollow(FOLLOW_12);
             lv_entityReferences_0_0=ruleEntityReference();
 
             state._fsp--;
@@ -8275,35 +8763,35 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:3449:2: (otherlv_1= ',' ( (lv_entityReferences_2_0= ruleEntityReference ) ) )*
-            loop42:
+            // InternalDescartesQL.g:3644:2: (otherlv_1= ',' ( (lv_entityReferences_2_0= ruleEntityReference ) ) )*
+            loop49:
             do {
-                int alt42=2;
-                int LA42_0 = input.LA(1);
+                int alt49=2;
+                int LA49_0 = input.LA(1);
 
-                if ( (LA42_0==16) ) {
-                    alt42=1;
+                if ( (LA49_0==20) ) {
+                    alt49=1;
                 }
 
 
-                switch (alt42) {
+                switch (alt49) {
             	case 1 :
-            	    // InternalDescartesQL.g:3449:4: otherlv_1= ',' ( (lv_entityReferences_2_0= ruleEntityReference ) )
+            	    // InternalDescartesQL.g:3644:4: otherlv_1= ',' ( (lv_entityReferences_2_0= ruleEntityReference ) )
             	    {
-            	    otherlv_1=(Token)match(input,16,FOLLOW_28); 
+            	    otherlv_1=(Token)match(input,20,FOLLOW_31); 
 
             	        	newLeafNode(otherlv_1, grammarAccess.getEntityReferenceClauseAccess().getCommaKeyword_1_0());
             	        
-            	    // InternalDescartesQL.g:3453:1: ( (lv_entityReferences_2_0= ruleEntityReference ) )
-            	    // InternalDescartesQL.g:3454:1: (lv_entityReferences_2_0= ruleEntityReference )
+            	    // InternalDescartesQL.g:3648:1: ( (lv_entityReferences_2_0= ruleEntityReference ) )
+            	    // InternalDescartesQL.g:3649:1: (lv_entityReferences_2_0= ruleEntityReference )
             	    {
-            	    // InternalDescartesQL.g:3454:1: (lv_entityReferences_2_0= ruleEntityReference )
-            	    // InternalDescartesQL.g:3455:3: lv_entityReferences_2_0= ruleEntityReference
+            	    // InternalDescartesQL.g:3649:1: (lv_entityReferences_2_0= ruleEntityReference )
+            	    // InternalDescartesQL.g:3650:3: lv_entityReferences_2_0= ruleEntityReference
             	    {
             	     
             	    	        newCompositeNode(grammarAccess.getEntityReferenceClauseAccess().getEntityReferencesEntityReferenceParserRuleCall_1_1_0()); 
             	    	    
-            	    pushFollow(FOLLOW_8);
+            	    pushFollow(FOLLOW_12);
             	    lv_entityReferences_2_0=ruleEntityReference();
 
             	    state._fsp--;
@@ -8330,7 +8818,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
             	    break;
 
             	default :
-            	    break loop42;
+            	    break loop49;
                 }
             } while (true);
 
@@ -8355,7 +8843,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleEntityReference"
-    // InternalDescartesQL.g:3479:1: entryRuleEntityReference returns [EObject current=null] : iv_ruleEntityReference= ruleEntityReference EOF ;
+    // InternalDescartesQL.g:3674:1: entryRuleEntityReference returns [EObject current=null] : iv_ruleEntityReference= ruleEntityReference EOF ;
     public final EObject entryRuleEntityReference() throws RecognitionException {
         EObject current = null;
 
@@ -8363,8 +8851,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:3480:2: (iv_ruleEntityReference= ruleEntityReference EOF )
-            // InternalDescartesQL.g:3481:2: iv_ruleEntityReference= ruleEntityReference EOF
+            // InternalDescartesQL.g:3675:2: (iv_ruleEntityReference= ruleEntityReference EOF )
+            // InternalDescartesQL.g:3676:2: iv_ruleEntityReference= ruleEntityReference EOF
             {
              newCompositeNode(grammarAccess.getEntityReferenceRule()); 
             pushFollow(FOLLOW_1);
@@ -8391,7 +8879,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleEntityReference"
-    // InternalDescartesQL.g:3488:1: ruleEntityReference returns [EObject current=null] : ( ( (lv_type_0_0= RULE_ID ) )? ( (lv_identifier_1_0= RULE_STRING ) ) ( (lv_alias_2_0= ruleAliasClause ) )? ) ;
+    // InternalDescartesQL.g:3683:1: ruleEntityReference returns [EObject current=null] : ( ( (lv_type_0_0= RULE_ID ) )? ( (lv_identifier_1_0= RULE_STRING ) ) ( (lv_alias_2_0= ruleAliasClause ) )? ) ;
     public final EObject ruleEntityReference() throws RecognitionException {
         EObject current = null;
 
@@ -8403,27 +8891,27 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:3491:28: ( ( ( (lv_type_0_0= RULE_ID ) )? ( (lv_identifier_1_0= RULE_STRING ) ) ( (lv_alias_2_0= ruleAliasClause ) )? ) )
-            // InternalDescartesQL.g:3492:1: ( ( (lv_type_0_0= RULE_ID ) )? ( (lv_identifier_1_0= RULE_STRING ) ) ( (lv_alias_2_0= ruleAliasClause ) )? )
+            // InternalDescartesQL.g:3686:28: ( ( ( (lv_type_0_0= RULE_ID ) )? ( (lv_identifier_1_0= RULE_STRING ) ) ( (lv_alias_2_0= ruleAliasClause ) )? ) )
+            // InternalDescartesQL.g:3687:1: ( ( (lv_type_0_0= RULE_ID ) )? ( (lv_identifier_1_0= RULE_STRING ) ) ( (lv_alias_2_0= ruleAliasClause ) )? )
             {
-            // InternalDescartesQL.g:3492:1: ( ( (lv_type_0_0= RULE_ID ) )? ( (lv_identifier_1_0= RULE_STRING ) ) ( (lv_alias_2_0= ruleAliasClause ) )? )
-            // InternalDescartesQL.g:3492:2: ( (lv_type_0_0= RULE_ID ) )? ( (lv_identifier_1_0= RULE_STRING ) ) ( (lv_alias_2_0= ruleAliasClause ) )?
+            // InternalDescartesQL.g:3687:1: ( ( (lv_type_0_0= RULE_ID ) )? ( (lv_identifier_1_0= RULE_STRING ) ) ( (lv_alias_2_0= ruleAliasClause ) )? )
+            // InternalDescartesQL.g:3687:2: ( (lv_type_0_0= RULE_ID ) )? ( (lv_identifier_1_0= RULE_STRING ) ) ( (lv_alias_2_0= ruleAliasClause ) )?
             {
-            // InternalDescartesQL.g:3492:2: ( (lv_type_0_0= RULE_ID ) )?
-            int alt43=2;
-            int LA43_0 = input.LA(1);
+            // InternalDescartesQL.g:3687:2: ( (lv_type_0_0= RULE_ID ) )?
+            int alt50=2;
+            int LA50_0 = input.LA(1);
 
-            if ( (LA43_0==RULE_ID) ) {
-                alt43=1;
+            if ( (LA50_0==RULE_ID) ) {
+                alt50=1;
             }
-            switch (alt43) {
+            switch (alt50) {
                 case 1 :
-                    // InternalDescartesQL.g:3493:1: (lv_type_0_0= RULE_ID )
+                    // InternalDescartesQL.g:3688:1: (lv_type_0_0= RULE_ID )
                     {
-                    // InternalDescartesQL.g:3493:1: (lv_type_0_0= RULE_ID )
-                    // InternalDescartesQL.g:3494:3: lv_type_0_0= RULE_ID
+                    // InternalDescartesQL.g:3688:1: (lv_type_0_0= RULE_ID )
+                    // InternalDescartesQL.g:3689:3: lv_type_0_0= RULE_ID
                     {
-                    lv_type_0_0=(Token)match(input,RULE_ID,FOLLOW_36); 
+                    lv_type_0_0=(Token)match(input,RULE_ID,FOLLOW_39); 
 
                     			newLeafNode(lv_type_0_0, grammarAccess.getEntityReferenceAccess().getTypeIDTerminalRuleCall_0_0()); 
                     		
@@ -8446,13 +8934,13 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:3510:3: ( (lv_identifier_1_0= RULE_STRING ) )
-            // InternalDescartesQL.g:3511:1: (lv_identifier_1_0= RULE_STRING )
+            // InternalDescartesQL.g:3705:3: ( (lv_identifier_1_0= RULE_STRING ) )
+            // InternalDescartesQL.g:3706:1: (lv_identifier_1_0= RULE_STRING )
             {
-            // InternalDescartesQL.g:3511:1: (lv_identifier_1_0= RULE_STRING )
-            // InternalDescartesQL.g:3512:3: lv_identifier_1_0= RULE_STRING
+            // InternalDescartesQL.g:3706:1: (lv_identifier_1_0= RULE_STRING )
+            // InternalDescartesQL.g:3707:3: lv_identifier_1_0= RULE_STRING
             {
-            lv_identifier_1_0=(Token)match(input,RULE_STRING,FOLLOW_52); 
+            lv_identifier_1_0=(Token)match(input,RULE_STRING,FOLLOW_55); 
 
             			newLeafNode(lv_identifier_1_0, grammarAccess.getEntityReferenceAccess().getIdentifierSTRINGTerminalRuleCall_1_0()); 
             		
@@ -8472,19 +8960,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:3528:2: ( (lv_alias_2_0= ruleAliasClause ) )?
-            int alt44=2;
-            int LA44_0 = input.LA(1);
+            // InternalDescartesQL.g:3723:2: ( (lv_alias_2_0= ruleAliasClause ) )?
+            int alt51=2;
+            int LA51_0 = input.LA(1);
 
-            if ( (LA44_0==55) ) {
-                alt44=1;
+            if ( (LA51_0==59) ) {
+                alt51=1;
             }
-            switch (alt44) {
+            switch (alt51) {
                 case 1 :
-                    // InternalDescartesQL.g:3529:1: (lv_alias_2_0= ruleAliasClause )
+                    // InternalDescartesQL.g:3724:1: (lv_alias_2_0= ruleAliasClause )
                     {
-                    // InternalDescartesQL.g:3529:1: (lv_alias_2_0= ruleAliasClause )
-                    // InternalDescartesQL.g:3530:3: lv_alias_2_0= ruleAliasClause
+                    // InternalDescartesQL.g:3724:1: (lv_alias_2_0= ruleAliasClause )
+                    // InternalDescartesQL.g:3725:3: lv_alias_2_0= ruleAliasClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getEntityReferenceAccess().getAliasAliasClauseParserRuleCall_2_0()); 
@@ -8535,7 +9023,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleAliasClause"
-    // InternalDescartesQL.g:3554:1: entryRuleAliasClause returns [EObject current=null] : iv_ruleAliasClause= ruleAliasClause EOF ;
+    // InternalDescartesQL.g:3749:1: entryRuleAliasClause returns [EObject current=null] : iv_ruleAliasClause= ruleAliasClause EOF ;
     public final EObject entryRuleAliasClause() throws RecognitionException {
         EObject current = null;
 
@@ -8543,8 +9031,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:3555:2: (iv_ruleAliasClause= ruleAliasClause EOF )
-            // InternalDescartesQL.g:3556:2: iv_ruleAliasClause= ruleAliasClause EOF
+            // InternalDescartesQL.g:3750:2: (iv_ruleAliasClause= ruleAliasClause EOF )
+            // InternalDescartesQL.g:3751:2: iv_ruleAliasClause= ruleAliasClause EOF
             {
              newCompositeNode(grammarAccess.getAliasClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -8571,7 +9059,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleAliasClause"
-    // InternalDescartesQL.g:3563:1: ruleAliasClause returns [EObject current=null] : ( ( (lv_mode_0_0= 'AS' ) ) ( (lv_alias_1_0= RULE_ID ) ) ) ;
+    // InternalDescartesQL.g:3758:1: ruleAliasClause returns [EObject current=null] : ( ( (lv_mode_0_0= 'AS' ) ) ( (lv_alias_1_0= RULE_ID ) ) ) ;
     public final EObject ruleAliasClause() throws RecognitionException {
         EObject current = null;
 
@@ -8581,19 +9069,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:3566:28: ( ( ( (lv_mode_0_0= 'AS' ) ) ( (lv_alias_1_0= RULE_ID ) ) ) )
-            // InternalDescartesQL.g:3567:1: ( ( (lv_mode_0_0= 'AS' ) ) ( (lv_alias_1_0= RULE_ID ) ) )
+            // InternalDescartesQL.g:3761:28: ( ( ( (lv_mode_0_0= 'AS' ) ) ( (lv_alias_1_0= RULE_ID ) ) ) )
+            // InternalDescartesQL.g:3762:1: ( ( (lv_mode_0_0= 'AS' ) ) ( (lv_alias_1_0= RULE_ID ) ) )
             {
-            // InternalDescartesQL.g:3567:1: ( ( (lv_mode_0_0= 'AS' ) ) ( (lv_alias_1_0= RULE_ID ) ) )
-            // InternalDescartesQL.g:3567:2: ( (lv_mode_0_0= 'AS' ) ) ( (lv_alias_1_0= RULE_ID ) )
+            // InternalDescartesQL.g:3762:1: ( ( (lv_mode_0_0= 'AS' ) ) ( (lv_alias_1_0= RULE_ID ) ) )
+            // InternalDescartesQL.g:3762:2: ( (lv_mode_0_0= 'AS' ) ) ( (lv_alias_1_0= RULE_ID ) )
             {
-            // InternalDescartesQL.g:3567:2: ( (lv_mode_0_0= 'AS' ) )
-            // InternalDescartesQL.g:3568:1: (lv_mode_0_0= 'AS' )
+            // InternalDescartesQL.g:3762:2: ( (lv_mode_0_0= 'AS' ) )
+            // InternalDescartesQL.g:3763:1: (lv_mode_0_0= 'AS' )
             {
-            // InternalDescartesQL.g:3568:1: (lv_mode_0_0= 'AS' )
-            // InternalDescartesQL.g:3569:3: lv_mode_0_0= 'AS'
+            // InternalDescartesQL.g:3763:1: (lv_mode_0_0= 'AS' )
+            // InternalDescartesQL.g:3764:3: lv_mode_0_0= 'AS'
             {
-            lv_mode_0_0=(Token)match(input,55,FOLLOW_7); 
+            lv_mode_0_0=(Token)match(input,59,FOLLOW_11); 
 
                     newLeafNode(lv_mode_0_0, grammarAccess.getAliasClauseAccess().getModeASKeyword_0_0());
                 
@@ -8609,11 +9097,11 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:3582:2: ( (lv_alias_1_0= RULE_ID ) )
-            // InternalDescartesQL.g:3583:1: (lv_alias_1_0= RULE_ID )
+            // InternalDescartesQL.g:3777:2: ( (lv_alias_1_0= RULE_ID ) )
+            // InternalDescartesQL.g:3778:1: (lv_alias_1_0= RULE_ID )
             {
-            // InternalDescartesQL.g:3583:1: (lv_alias_1_0= RULE_ID )
-            // InternalDescartesQL.g:3584:3: lv_alias_1_0= RULE_ID
+            // InternalDescartesQL.g:3778:1: (lv_alias_1_0= RULE_ID )
+            // InternalDescartesQL.g:3779:3: lv_alias_1_0= RULE_ID
             {
             lv_alias_1_0=(Token)match(input,RULE_ID,FOLLOW_2); 
 
@@ -8656,7 +9144,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleUsingClause"
-    // InternalDescartesQL.g:3608:1: entryRuleUsingClause returns [EObject current=null] : iv_ruleUsingClause= ruleUsingClause EOF ;
+    // InternalDescartesQL.g:3803:1: entryRuleUsingClause returns [EObject current=null] : iv_ruleUsingClause= ruleUsingClause EOF ;
     public final EObject entryRuleUsingClause() throws RecognitionException {
         EObject current = null;
 
@@ -8664,8 +9152,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:3609:2: (iv_ruleUsingClause= ruleUsingClause EOF )
-            // InternalDescartesQL.g:3610:2: iv_ruleUsingClause= ruleUsingClause EOF
+            // InternalDescartesQL.g:3804:2: (iv_ruleUsingClause= ruleUsingClause EOF )
+            // InternalDescartesQL.g:3805:2: iv_ruleUsingClause= ruleUsingClause EOF
             {
              newCompositeNode(grammarAccess.getUsingClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -8692,7 +9180,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleUsingClause"
-    // InternalDescartesQL.g:3617:1: ruleUsingClause returns [EObject current=null] : ( ( (lv_mode_0_0= 'USING' ) ) ( (lv_modelReference_1_0= ruleModelReferenceClause ) ) ) ;
+    // InternalDescartesQL.g:3812:1: ruleUsingClause returns [EObject current=null] : ( ( (lv_mode_0_0= 'USING' ) ) ( (lv_modelReference_1_0= ruleModelReferenceClause ) ) ) ;
     public final EObject ruleUsingClause() throws RecognitionException {
         EObject current = null;
 
@@ -8703,19 +9191,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:3620:28: ( ( ( (lv_mode_0_0= 'USING' ) ) ( (lv_modelReference_1_0= ruleModelReferenceClause ) ) ) )
-            // InternalDescartesQL.g:3621:1: ( ( (lv_mode_0_0= 'USING' ) ) ( (lv_modelReference_1_0= ruleModelReferenceClause ) ) )
+            // InternalDescartesQL.g:3815:28: ( ( ( (lv_mode_0_0= 'USING' ) ) ( (lv_modelReference_1_0= ruleModelReferenceClause ) ) ) )
+            // InternalDescartesQL.g:3816:1: ( ( (lv_mode_0_0= 'USING' ) ) ( (lv_modelReference_1_0= ruleModelReferenceClause ) ) )
             {
-            // InternalDescartesQL.g:3621:1: ( ( (lv_mode_0_0= 'USING' ) ) ( (lv_modelReference_1_0= ruleModelReferenceClause ) ) )
-            // InternalDescartesQL.g:3621:2: ( (lv_mode_0_0= 'USING' ) ) ( (lv_modelReference_1_0= ruleModelReferenceClause ) )
+            // InternalDescartesQL.g:3816:1: ( ( (lv_mode_0_0= 'USING' ) ) ( (lv_modelReference_1_0= ruleModelReferenceClause ) ) )
+            // InternalDescartesQL.g:3816:2: ( (lv_mode_0_0= 'USING' ) ) ( (lv_modelReference_1_0= ruleModelReferenceClause ) )
             {
-            // InternalDescartesQL.g:3621:2: ( (lv_mode_0_0= 'USING' ) )
-            // InternalDescartesQL.g:3622:1: (lv_mode_0_0= 'USING' )
+            // InternalDescartesQL.g:3816:2: ( (lv_mode_0_0= 'USING' ) )
+            // InternalDescartesQL.g:3817:1: (lv_mode_0_0= 'USING' )
             {
-            // InternalDescartesQL.g:3622:1: (lv_mode_0_0= 'USING' )
-            // InternalDescartesQL.g:3623:3: lv_mode_0_0= 'USING'
+            // InternalDescartesQL.g:3817:1: (lv_mode_0_0= 'USING' )
+            // InternalDescartesQL.g:3818:3: lv_mode_0_0= 'USING'
             {
-            lv_mode_0_0=(Token)match(input,56,FOLLOW_7); 
+            lv_mode_0_0=(Token)match(input,60,FOLLOW_11); 
 
                     newLeafNode(lv_mode_0_0, grammarAccess.getUsingClauseAccess().getModeUSINGKeyword_0_0());
                 
@@ -8731,11 +9219,11 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:3636:2: ( (lv_modelReference_1_0= ruleModelReferenceClause ) )
-            // InternalDescartesQL.g:3637:1: (lv_modelReference_1_0= ruleModelReferenceClause )
+            // InternalDescartesQL.g:3831:2: ( (lv_modelReference_1_0= ruleModelReferenceClause ) )
+            // InternalDescartesQL.g:3832:1: (lv_modelReference_1_0= ruleModelReferenceClause )
             {
-            // InternalDescartesQL.g:3637:1: (lv_modelReference_1_0= ruleModelReferenceClause )
-            // InternalDescartesQL.g:3638:3: lv_modelReference_1_0= ruleModelReferenceClause
+            // InternalDescartesQL.g:3832:1: (lv_modelReference_1_0= ruleModelReferenceClause )
+            // InternalDescartesQL.g:3833:3: lv_modelReference_1_0= ruleModelReferenceClause
             {
              
             	        newCompositeNode(grammarAccess.getUsingClauseAccess().getModelReferenceModelReferenceClauseParserRuleCall_1_0()); 
@@ -8783,7 +9271,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleWithClause"
-    // InternalDescartesQL.g:3662:1: entryRuleWithClause returns [EObject current=null] : iv_ruleWithClause= ruleWithClause EOF ;
+    // InternalDescartesQL.g:3857:1: entryRuleWithClause returns [EObject current=null] : iv_ruleWithClause= ruleWithClause EOF ;
     public final EObject entryRuleWithClause() throws RecognitionException {
         EObject current = null;
 
@@ -8791,8 +9279,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:3663:2: (iv_ruleWithClause= ruleWithClause EOF )
-            // InternalDescartesQL.g:3664:2: iv_ruleWithClause= ruleWithClause EOF
+            // InternalDescartesQL.g:3858:2: (iv_ruleWithClause= ruleWithClause EOF )
+            // InternalDescartesQL.g:3859:2: iv_ruleWithClause= ruleWithClause EOF
             {
              newCompositeNode(grammarAccess.getWithClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -8819,7 +9307,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleWithClause"
-    // InternalDescartesQL.g:3671:1: ruleWithClause returns [EObject current=null] : ( ( (lv_mode_0_0= 'WITH' ) ) ( (lv_modelReference_1_0= ruleModelReferenceClause ) ) ) ;
+    // InternalDescartesQL.g:3866:1: ruleWithClause returns [EObject current=null] : ( ( (lv_mode_0_0= 'WITH' ) ) ( (lv_modelReference_1_0= ruleModelReferenceClause ) ) ) ;
     public final EObject ruleWithClause() throws RecognitionException {
         EObject current = null;
 
@@ -8830,19 +9318,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:3674:28: ( ( ( (lv_mode_0_0= 'WITH' ) ) ( (lv_modelReference_1_0= ruleModelReferenceClause ) ) ) )
-            // InternalDescartesQL.g:3675:1: ( ( (lv_mode_0_0= 'WITH' ) ) ( (lv_modelReference_1_0= ruleModelReferenceClause ) ) )
+            // InternalDescartesQL.g:3869:28: ( ( ( (lv_mode_0_0= 'WITH' ) ) ( (lv_modelReference_1_0= ruleModelReferenceClause ) ) ) )
+            // InternalDescartesQL.g:3870:1: ( ( (lv_mode_0_0= 'WITH' ) ) ( (lv_modelReference_1_0= ruleModelReferenceClause ) ) )
             {
-            // InternalDescartesQL.g:3675:1: ( ( (lv_mode_0_0= 'WITH' ) ) ( (lv_modelReference_1_0= ruleModelReferenceClause ) ) )
-            // InternalDescartesQL.g:3675:2: ( (lv_mode_0_0= 'WITH' ) ) ( (lv_modelReference_1_0= ruleModelReferenceClause ) )
+            // InternalDescartesQL.g:3870:1: ( ( (lv_mode_0_0= 'WITH' ) ) ( (lv_modelReference_1_0= ruleModelReferenceClause ) ) )
+            // InternalDescartesQL.g:3870:2: ( (lv_mode_0_0= 'WITH' ) ) ( (lv_modelReference_1_0= ruleModelReferenceClause ) )
             {
-            // InternalDescartesQL.g:3675:2: ( (lv_mode_0_0= 'WITH' ) )
-            // InternalDescartesQL.g:3676:1: (lv_mode_0_0= 'WITH' )
+            // InternalDescartesQL.g:3870:2: ( (lv_mode_0_0= 'WITH' ) )
+            // InternalDescartesQL.g:3871:1: (lv_mode_0_0= 'WITH' )
             {
-            // InternalDescartesQL.g:3676:1: (lv_mode_0_0= 'WITH' )
-            // InternalDescartesQL.g:3677:3: lv_mode_0_0= 'WITH'
+            // InternalDescartesQL.g:3871:1: (lv_mode_0_0= 'WITH' )
+            // InternalDescartesQL.g:3872:3: lv_mode_0_0= 'WITH'
             {
-            lv_mode_0_0=(Token)match(input,57,FOLLOW_7); 
+            lv_mode_0_0=(Token)match(input,61,FOLLOW_11); 
 
                     newLeafNode(lv_mode_0_0, grammarAccess.getWithClauseAccess().getModeWITHKeyword_0_0());
                 
@@ -8858,11 +9346,11 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:3690:2: ( (lv_modelReference_1_0= ruleModelReferenceClause ) )
-            // InternalDescartesQL.g:3691:1: (lv_modelReference_1_0= ruleModelReferenceClause )
+            // InternalDescartesQL.g:3885:2: ( (lv_modelReference_1_0= ruleModelReferenceClause ) )
+            // InternalDescartesQL.g:3886:1: (lv_modelReference_1_0= ruleModelReferenceClause )
             {
-            // InternalDescartesQL.g:3691:1: (lv_modelReference_1_0= ruleModelReferenceClause )
-            // InternalDescartesQL.g:3692:3: lv_modelReference_1_0= ruleModelReferenceClause
+            // InternalDescartesQL.g:3886:1: (lv_modelReference_1_0= ruleModelReferenceClause )
+            // InternalDescartesQL.g:3887:3: lv_modelReference_1_0= ruleModelReferenceClause
             {
              
             	        newCompositeNode(grammarAccess.getWithClauseAccess().getModelReferenceModelReferenceClauseParserRuleCall_1_0()); 
@@ -8910,7 +9398,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleModelReferenceClause"
-    // InternalDescartesQL.g:3716:1: entryRuleModelReferenceClause returns [EObject current=null] : iv_ruleModelReferenceClause= ruleModelReferenceClause EOF ;
+    // InternalDescartesQL.g:3911:1: entryRuleModelReferenceClause returns [EObject current=null] : iv_ruleModelReferenceClause= ruleModelReferenceClause EOF ;
     public final EObject entryRuleModelReferenceClause() throws RecognitionException {
         EObject current = null;
 
@@ -8918,8 +9406,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:3717:2: (iv_ruleModelReferenceClause= ruleModelReferenceClause EOF )
-            // InternalDescartesQL.g:3718:2: iv_ruleModelReferenceClause= ruleModelReferenceClause EOF
+            // InternalDescartesQL.g:3912:2: (iv_ruleModelReferenceClause= ruleModelReferenceClause EOF )
+            // InternalDescartesQL.g:3913:2: iv_ruleModelReferenceClause= ruleModelReferenceClause EOF
             {
              newCompositeNode(grammarAccess.getModelReferenceClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -8946,7 +9434,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleModelReferenceClause"
-    // InternalDescartesQL.g:3725:1: ruleModelReferenceClause returns [EObject current=null] : ( ( (lv_family_0_0= ruleModelFamily ) ) otherlv_1= '@' ( (lv_model_2_0= ruleModelLocation ) ) ) ;
+    // InternalDescartesQL.g:3920:1: ruleModelReferenceClause returns [EObject current=null] : ( ( (lv_family_0_0= ruleModelFamily ) ) otherlv_1= '@' ( (lv_model_2_0= ruleModelLocation ) ) ) ;
     public final EObject ruleModelReferenceClause() throws RecognitionException {
         EObject current = null;
 
@@ -8959,22 +9447,22 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:3728:28: ( ( ( (lv_family_0_0= ruleModelFamily ) ) otherlv_1= '@' ( (lv_model_2_0= ruleModelLocation ) ) ) )
-            // InternalDescartesQL.g:3729:1: ( ( (lv_family_0_0= ruleModelFamily ) ) otherlv_1= '@' ( (lv_model_2_0= ruleModelLocation ) ) )
+            // InternalDescartesQL.g:3923:28: ( ( ( (lv_family_0_0= ruleModelFamily ) ) otherlv_1= '@' ( (lv_model_2_0= ruleModelLocation ) ) ) )
+            // InternalDescartesQL.g:3924:1: ( ( (lv_family_0_0= ruleModelFamily ) ) otherlv_1= '@' ( (lv_model_2_0= ruleModelLocation ) ) )
             {
-            // InternalDescartesQL.g:3729:1: ( ( (lv_family_0_0= ruleModelFamily ) ) otherlv_1= '@' ( (lv_model_2_0= ruleModelLocation ) ) )
-            // InternalDescartesQL.g:3729:2: ( (lv_family_0_0= ruleModelFamily ) ) otherlv_1= '@' ( (lv_model_2_0= ruleModelLocation ) )
+            // InternalDescartesQL.g:3924:1: ( ( (lv_family_0_0= ruleModelFamily ) ) otherlv_1= '@' ( (lv_model_2_0= ruleModelLocation ) ) )
+            // InternalDescartesQL.g:3924:2: ( (lv_family_0_0= ruleModelFamily ) ) otherlv_1= '@' ( (lv_model_2_0= ruleModelLocation ) )
             {
-            // InternalDescartesQL.g:3729:2: ( (lv_family_0_0= ruleModelFamily ) )
-            // InternalDescartesQL.g:3730:1: (lv_family_0_0= ruleModelFamily )
+            // InternalDescartesQL.g:3924:2: ( (lv_family_0_0= ruleModelFamily ) )
+            // InternalDescartesQL.g:3925:1: (lv_family_0_0= ruleModelFamily )
             {
-            // InternalDescartesQL.g:3730:1: (lv_family_0_0= ruleModelFamily )
-            // InternalDescartesQL.g:3731:3: lv_family_0_0= ruleModelFamily
+            // InternalDescartesQL.g:3925:1: (lv_family_0_0= ruleModelFamily )
+            // InternalDescartesQL.g:3926:3: lv_family_0_0= ruleModelFamily
             {
              
             	        newCompositeNode(grammarAccess.getModelReferenceClauseAccess().getFamilyModelFamilyParserRuleCall_0_0()); 
             	    
-            pushFollow(FOLLOW_53);
+            pushFollow(FOLLOW_56);
             lv_family_0_0=ruleModelFamily();
 
             state._fsp--;
@@ -8996,15 +9484,15 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            otherlv_1=(Token)match(input,58,FOLLOW_36); 
+            otherlv_1=(Token)match(input,62,FOLLOW_39); 
 
                 	newLeafNode(otherlv_1, grammarAccess.getModelReferenceClauseAccess().getCommercialAtKeyword_1());
                 
-            // InternalDescartesQL.g:3751:1: ( (lv_model_2_0= ruleModelLocation ) )
-            // InternalDescartesQL.g:3752:1: (lv_model_2_0= ruleModelLocation )
+            // InternalDescartesQL.g:3946:1: ( (lv_model_2_0= ruleModelLocation ) )
+            // InternalDescartesQL.g:3947:1: (lv_model_2_0= ruleModelLocation )
             {
-            // InternalDescartesQL.g:3752:1: (lv_model_2_0= ruleModelLocation )
-            // InternalDescartesQL.g:3753:3: lv_model_2_0= ruleModelLocation
+            // InternalDescartesQL.g:3947:1: (lv_model_2_0= ruleModelLocation )
+            // InternalDescartesQL.g:3948:3: lv_model_2_0= ruleModelLocation
             {
              
             	        newCompositeNode(grammarAccess.getModelReferenceClauseAccess().getModelModelLocationParserRuleCall_2_0()); 
@@ -9052,7 +9540,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleModelFamily"
-    // InternalDescartesQL.g:3777:1: entryRuleModelFamily returns [EObject current=null] : iv_ruleModelFamily= ruleModelFamily EOF ;
+    // InternalDescartesQL.g:3972:1: entryRuleModelFamily returns [EObject current=null] : iv_ruleModelFamily= ruleModelFamily EOF ;
     public final EObject entryRuleModelFamily() throws RecognitionException {
         EObject current = null;
 
@@ -9060,8 +9548,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:3778:2: (iv_ruleModelFamily= ruleModelFamily EOF )
-            // InternalDescartesQL.g:3779:2: iv_ruleModelFamily= ruleModelFamily EOF
+            // InternalDescartesQL.g:3973:2: (iv_ruleModelFamily= ruleModelFamily EOF )
+            // InternalDescartesQL.g:3974:2: iv_ruleModelFamily= ruleModelFamily EOF
             {
              newCompositeNode(grammarAccess.getModelFamilyRule()); 
             pushFollow(FOLLOW_1);
@@ -9088,7 +9576,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleModelFamily"
-    // InternalDescartesQL.g:3786:1: ruleModelFamily returns [EObject current=null] : ( (lv_family_0_0= RULE_ID ) ) ;
+    // InternalDescartesQL.g:3981:1: ruleModelFamily returns [EObject current=null] : ( (lv_family_0_0= RULE_ID ) ) ;
     public final EObject ruleModelFamily() throws RecognitionException {
         EObject current = null;
 
@@ -9097,14 +9585,14 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:3789:28: ( ( (lv_family_0_0= RULE_ID ) ) )
-            // InternalDescartesQL.g:3790:1: ( (lv_family_0_0= RULE_ID ) )
+            // InternalDescartesQL.g:3984:28: ( ( (lv_family_0_0= RULE_ID ) ) )
+            // InternalDescartesQL.g:3985:1: ( (lv_family_0_0= RULE_ID ) )
             {
-            // InternalDescartesQL.g:3790:1: ( (lv_family_0_0= RULE_ID ) )
-            // InternalDescartesQL.g:3791:1: (lv_family_0_0= RULE_ID )
+            // InternalDescartesQL.g:3985:1: ( (lv_family_0_0= RULE_ID ) )
+            // InternalDescartesQL.g:3986:1: (lv_family_0_0= RULE_ID )
             {
-            // InternalDescartesQL.g:3791:1: (lv_family_0_0= RULE_ID )
-            // InternalDescartesQL.g:3792:3: lv_family_0_0= RULE_ID
+            // InternalDescartesQL.g:3986:1: (lv_family_0_0= RULE_ID )
+            // InternalDescartesQL.g:3987:3: lv_family_0_0= RULE_ID
             {
             lv_family_0_0=(Token)match(input,RULE_ID,FOLLOW_2); 
 
@@ -9144,7 +9632,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleModelLocation"
-    // InternalDescartesQL.g:3816:1: entryRuleModelLocation returns [EObject current=null] : iv_ruleModelLocation= ruleModelLocation EOF ;
+    // InternalDescartesQL.g:4011:1: entryRuleModelLocation returns [EObject current=null] : iv_ruleModelLocation= ruleModelLocation EOF ;
     public final EObject entryRuleModelLocation() throws RecognitionException {
         EObject current = null;
 
@@ -9152,8 +9640,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:3817:2: (iv_ruleModelLocation= ruleModelLocation EOF )
-            // InternalDescartesQL.g:3818:2: iv_ruleModelLocation= ruleModelLocation EOF
+            // InternalDescartesQL.g:4012:2: (iv_ruleModelLocation= ruleModelLocation EOF )
+            // InternalDescartesQL.g:4013:2: iv_ruleModelLocation= ruleModelLocation EOF
             {
              newCompositeNode(grammarAccess.getModelLocationRule()); 
             pushFollow(FOLLOW_1);
@@ -9180,7 +9668,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleModelLocation"
-    // InternalDescartesQL.g:3825:1: ruleModelLocation returns [EObject current=null] : ( (lv_location_0_0= RULE_STRING ) ) ;
+    // InternalDescartesQL.g:4020:1: ruleModelLocation returns [EObject current=null] : ( (lv_location_0_0= RULE_STRING ) ) ;
     public final EObject ruleModelLocation() throws RecognitionException {
         EObject current = null;
 
@@ -9189,14 +9677,14 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:3828:28: ( ( (lv_location_0_0= RULE_STRING ) ) )
-            // InternalDescartesQL.g:3829:1: ( (lv_location_0_0= RULE_STRING ) )
+            // InternalDescartesQL.g:4023:28: ( ( (lv_location_0_0= RULE_STRING ) ) )
+            // InternalDescartesQL.g:4024:1: ( (lv_location_0_0= RULE_STRING ) )
             {
-            // InternalDescartesQL.g:3829:1: ( (lv_location_0_0= RULE_STRING ) )
-            // InternalDescartesQL.g:3830:1: (lv_location_0_0= RULE_STRING )
+            // InternalDescartesQL.g:4024:1: ( (lv_location_0_0= RULE_STRING ) )
+            // InternalDescartesQL.g:4025:1: (lv_location_0_0= RULE_STRING )
             {
-            // InternalDescartesQL.g:3830:1: (lv_location_0_0= RULE_STRING )
-            // InternalDescartesQL.g:3831:3: lv_location_0_0= RULE_STRING
+            // InternalDescartesQL.g:4025:1: (lv_location_0_0= RULE_STRING )
+            // InternalDescartesQL.g:4026:3: lv_location_0_0= RULE_STRING
             {
             lv_location_0_0=(Token)match(input,RULE_STRING,FOLLOW_2); 
 
@@ -9236,7 +9724,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleFilterClause"
-    // InternalDescartesQL.g:3855:1: entryRuleFilterClause returns [EObject current=null] : iv_ruleFilterClause= ruleFilterClause EOF ;
+    // InternalDescartesQL.g:4050:1: entryRuleFilterClause returns [EObject current=null] : iv_ruleFilterClause= ruleFilterClause EOF ;
     public final EObject entryRuleFilterClause() throws RecognitionException {
         EObject current = null;
 
@@ -9244,8 +9732,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:3856:2: (iv_ruleFilterClause= ruleFilterClause EOF )
-            // InternalDescartesQL.g:3857:2: iv_ruleFilterClause= ruleFilterClause EOF
+            // InternalDescartesQL.g:4051:2: (iv_ruleFilterClause= ruleFilterClause EOF )
+            // InternalDescartesQL.g:4052:2: iv_ruleFilterClause= ruleFilterClause EOF
             {
              newCompositeNode(grammarAccess.getFilterClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -9272,7 +9760,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleFilterClause"
-    // InternalDescartesQL.g:3864:1: ruleFilterClause returns [EObject current=null] : ( ( (lv_mode_0_0= 'FILTERED BY' ) ) ( (lv_filterConditions_1_0= ruleFilterConditionClause ) ) ( ( (lv_filterConjunctions_2_0= ruleFilterConjunction ) ) ( (lv_filterConditions_3_0= ruleFilterConditionClause ) ) )* ) ;
+    // InternalDescartesQL.g:4059:1: ruleFilterClause returns [EObject current=null] : ( ( (lv_mode_0_0= 'FILTERED BY' ) ) ( (lv_filterConditions_1_0= ruleFilterConditionClause ) ) ( ( (lv_filterConjunctions_2_0= ruleFilterConjunction ) ) ( (lv_filterConditions_3_0= ruleFilterConditionClause ) ) )* ) ;
     public final EObject ruleFilterClause() throws RecognitionException {
         EObject current = null;
 
@@ -9287,19 +9775,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:3867:28: ( ( ( (lv_mode_0_0= 'FILTERED BY' ) ) ( (lv_filterConditions_1_0= ruleFilterConditionClause ) ) ( ( (lv_filterConjunctions_2_0= ruleFilterConjunction ) ) ( (lv_filterConditions_3_0= ruleFilterConditionClause ) ) )* ) )
-            // InternalDescartesQL.g:3868:1: ( ( (lv_mode_0_0= 'FILTERED BY' ) ) ( (lv_filterConditions_1_0= ruleFilterConditionClause ) ) ( ( (lv_filterConjunctions_2_0= ruleFilterConjunction ) ) ( (lv_filterConditions_3_0= ruleFilterConditionClause ) ) )* )
+            // InternalDescartesQL.g:4062:28: ( ( ( (lv_mode_0_0= 'FILTERED BY' ) ) ( (lv_filterConditions_1_0= ruleFilterConditionClause ) ) ( ( (lv_filterConjunctions_2_0= ruleFilterConjunction ) ) ( (lv_filterConditions_3_0= ruleFilterConditionClause ) ) )* ) )
+            // InternalDescartesQL.g:4063:1: ( ( (lv_mode_0_0= 'FILTERED BY' ) ) ( (lv_filterConditions_1_0= ruleFilterConditionClause ) ) ( ( (lv_filterConjunctions_2_0= ruleFilterConjunction ) ) ( (lv_filterConditions_3_0= ruleFilterConditionClause ) ) )* )
             {
-            // InternalDescartesQL.g:3868:1: ( ( (lv_mode_0_0= 'FILTERED BY' ) ) ( (lv_filterConditions_1_0= ruleFilterConditionClause ) ) ( ( (lv_filterConjunctions_2_0= ruleFilterConjunction ) ) ( (lv_filterConditions_3_0= ruleFilterConditionClause ) ) )* )
-            // InternalDescartesQL.g:3868:2: ( (lv_mode_0_0= 'FILTERED BY' ) ) ( (lv_filterConditions_1_0= ruleFilterConditionClause ) ) ( ( (lv_filterConjunctions_2_0= ruleFilterConjunction ) ) ( (lv_filterConditions_3_0= ruleFilterConditionClause ) ) )*
+            // InternalDescartesQL.g:4063:1: ( ( (lv_mode_0_0= 'FILTERED BY' ) ) ( (lv_filterConditions_1_0= ruleFilterConditionClause ) ) ( ( (lv_filterConjunctions_2_0= ruleFilterConjunction ) ) ( (lv_filterConditions_3_0= ruleFilterConditionClause ) ) )* )
+            // InternalDescartesQL.g:4063:2: ( (lv_mode_0_0= 'FILTERED BY' ) ) ( (lv_filterConditions_1_0= ruleFilterConditionClause ) ) ( ( (lv_filterConjunctions_2_0= ruleFilterConjunction ) ) ( (lv_filterConditions_3_0= ruleFilterConditionClause ) ) )*
             {
-            // InternalDescartesQL.g:3868:2: ( (lv_mode_0_0= 'FILTERED BY' ) )
-            // InternalDescartesQL.g:3869:1: (lv_mode_0_0= 'FILTERED BY' )
+            // InternalDescartesQL.g:4063:2: ( (lv_mode_0_0= 'FILTERED BY' ) )
+            // InternalDescartesQL.g:4064:1: (lv_mode_0_0= 'FILTERED BY' )
             {
-            // InternalDescartesQL.g:3869:1: (lv_mode_0_0= 'FILTERED BY' )
-            // InternalDescartesQL.g:3870:3: lv_mode_0_0= 'FILTERED BY'
+            // InternalDescartesQL.g:4064:1: (lv_mode_0_0= 'FILTERED BY' )
+            // InternalDescartesQL.g:4065:3: lv_mode_0_0= 'FILTERED BY'
             {
-            lv_mode_0_0=(Token)match(input,59,FOLLOW_54); 
+            lv_mode_0_0=(Token)match(input,63,FOLLOW_57); 
 
                     newLeafNode(lv_mode_0_0, grammarAccess.getFilterClauseAccess().getModeFILTEREDBYKeyword_0_0());
                 
@@ -9315,16 +9803,16 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:3883:2: ( (lv_filterConditions_1_0= ruleFilterConditionClause ) )
-            // InternalDescartesQL.g:3884:1: (lv_filterConditions_1_0= ruleFilterConditionClause )
+            // InternalDescartesQL.g:4078:2: ( (lv_filterConditions_1_0= ruleFilterConditionClause ) )
+            // InternalDescartesQL.g:4079:1: (lv_filterConditions_1_0= ruleFilterConditionClause )
             {
-            // InternalDescartesQL.g:3884:1: (lv_filterConditions_1_0= ruleFilterConditionClause )
-            // InternalDescartesQL.g:3885:3: lv_filterConditions_1_0= ruleFilterConditionClause
+            // InternalDescartesQL.g:4079:1: (lv_filterConditions_1_0= ruleFilterConditionClause )
+            // InternalDescartesQL.g:4080:3: lv_filterConditions_1_0= ruleFilterConditionClause
             {
              
             	        newCompositeNode(grammarAccess.getFilterClauseAccess().getFilterConditionsFilterConditionClauseParserRuleCall_1_0()); 
             	    
-            pushFollow(FOLLOW_55);
+            pushFollow(FOLLOW_58);
             lv_filterConditions_1_0=ruleFilterConditionClause();
 
             state._fsp--;
@@ -9346,31 +9834,31 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:3901:2: ( ( (lv_filterConjunctions_2_0= ruleFilterConjunction ) ) ( (lv_filterConditions_3_0= ruleFilterConditionClause ) ) )*
-            loop45:
+            // InternalDescartesQL.g:4096:2: ( ( (lv_filterConjunctions_2_0= ruleFilterConjunction ) ) ( (lv_filterConditions_3_0= ruleFilterConditionClause ) ) )*
+            loop52:
             do {
-                int alt45=2;
-                int LA45_0 = input.LA(1);
+                int alt52=2;
+                int LA52_0 = input.LA(1);
 
-                if ( (LA45_0==64||(LA45_0>=77 && LA45_0<=78)) ) {
-                    alt45=1;
+                if ( (LA52_0==68||(LA52_0>=81 && LA52_0<=82)) ) {
+                    alt52=1;
                 }
 
 
-                switch (alt45) {
+                switch (alt52) {
             	case 1 :
-            	    // InternalDescartesQL.g:3901:3: ( (lv_filterConjunctions_2_0= ruleFilterConjunction ) ) ( (lv_filterConditions_3_0= ruleFilterConditionClause ) )
+            	    // InternalDescartesQL.g:4096:3: ( (lv_filterConjunctions_2_0= ruleFilterConjunction ) ) ( (lv_filterConditions_3_0= ruleFilterConditionClause ) )
             	    {
-            	    // InternalDescartesQL.g:3901:3: ( (lv_filterConjunctions_2_0= ruleFilterConjunction ) )
-            	    // InternalDescartesQL.g:3902:1: (lv_filterConjunctions_2_0= ruleFilterConjunction )
+            	    // InternalDescartesQL.g:4096:3: ( (lv_filterConjunctions_2_0= ruleFilterConjunction ) )
+            	    // InternalDescartesQL.g:4097:1: (lv_filterConjunctions_2_0= ruleFilterConjunction )
             	    {
-            	    // InternalDescartesQL.g:3902:1: (lv_filterConjunctions_2_0= ruleFilterConjunction )
-            	    // InternalDescartesQL.g:3903:3: lv_filterConjunctions_2_0= ruleFilterConjunction
+            	    // InternalDescartesQL.g:4097:1: (lv_filterConjunctions_2_0= ruleFilterConjunction )
+            	    // InternalDescartesQL.g:4098:3: lv_filterConjunctions_2_0= ruleFilterConjunction
             	    {
             	     
             	    	        newCompositeNode(grammarAccess.getFilterClauseAccess().getFilterConjunctionsFilterConjunctionEnumRuleCall_2_0_0()); 
             	    	    
-            	    pushFollow(FOLLOW_54);
+            	    pushFollow(FOLLOW_57);
             	    lv_filterConjunctions_2_0=ruleFilterConjunction();
 
             	    state._fsp--;
@@ -9392,16 +9880,16 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             	    }
 
-            	    // InternalDescartesQL.g:3919:2: ( (lv_filterConditions_3_0= ruleFilterConditionClause ) )
-            	    // InternalDescartesQL.g:3920:1: (lv_filterConditions_3_0= ruleFilterConditionClause )
+            	    // InternalDescartesQL.g:4114:2: ( (lv_filterConditions_3_0= ruleFilterConditionClause ) )
+            	    // InternalDescartesQL.g:4115:1: (lv_filterConditions_3_0= ruleFilterConditionClause )
             	    {
-            	    // InternalDescartesQL.g:3920:1: (lv_filterConditions_3_0= ruleFilterConditionClause )
-            	    // InternalDescartesQL.g:3921:3: lv_filterConditions_3_0= ruleFilterConditionClause
+            	    // InternalDescartesQL.g:4115:1: (lv_filterConditions_3_0= ruleFilterConditionClause )
+            	    // InternalDescartesQL.g:4116:3: lv_filterConditions_3_0= ruleFilterConditionClause
             	    {
             	     
             	    	        newCompositeNode(grammarAccess.getFilterClauseAccess().getFilterConditionsFilterConditionClauseParserRuleCall_2_1_0()); 
             	    	    
-            	    pushFollow(FOLLOW_55);
+            	    pushFollow(FOLLOW_58);
             	    lv_filterConditions_3_0=ruleFilterConditionClause();
 
             	    state._fsp--;
@@ -9428,7 +9916,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
             	    break;
 
             	default :
-            	    break loop45;
+            	    break loop52;
                 }
             } while (true);
 
@@ -9453,7 +9941,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleFilterConditionClause"
-    // InternalDescartesQL.g:3945:1: entryRuleFilterConditionClause returns [EObject current=null] : iv_ruleFilterConditionClause= ruleFilterConditionClause EOF ;
+    // InternalDescartesQL.g:4140:1: entryRuleFilterConditionClause returns [EObject current=null] : iv_ruleFilterConditionClause= ruleFilterConditionClause EOF ;
     public final EObject entryRuleFilterConditionClause() throws RecognitionException {
         EObject current = null;
 
@@ -9461,8 +9949,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:3946:2: (iv_ruleFilterConditionClause= ruleFilterConditionClause EOF )
-            // InternalDescartesQL.g:3947:2: iv_ruleFilterConditionClause= ruleFilterConditionClause EOF
+            // InternalDescartesQL.g:4141:2: (iv_ruleFilterConditionClause= ruleFilterConditionClause EOF )
+            // InternalDescartesQL.g:4142:2: iv_ruleFilterConditionClause= ruleFilterConditionClause EOF
             {
              newCompositeNode(grammarAccess.getFilterConditionClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -9489,7 +9977,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleFilterConditionClause"
-    // InternalDescartesQL.g:3954:1: ruleFilterConditionClause returns [EObject current=null] : ( ( (lv_mode_0_0= 'CONDITION' ) ) otherlv_1= '(' ( (lv_condition_2_0= ruleFilterConditionType ) ) otherlv_3= ',' ( (lv_value_4_0= ruleFilterConditionValue ) ) otherlv_5= ')' ) ;
+    // InternalDescartesQL.g:4149:1: ruleFilterConditionClause returns [EObject current=null] : ( ( (lv_mode_0_0= 'CONDITION' ) ) otherlv_1= '(' ( (lv_condition_2_0= ruleFilterConditionType ) ) otherlv_3= ',' ( (lv_value_4_0= ruleFilterConditionValue ) ) otherlv_5= ')' ) ;
     public final EObject ruleFilterConditionClause() throws RecognitionException {
         EObject current = null;
 
@@ -9505,19 +9993,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:3957:28: ( ( ( (lv_mode_0_0= 'CONDITION' ) ) otherlv_1= '(' ( (lv_condition_2_0= ruleFilterConditionType ) ) otherlv_3= ',' ( (lv_value_4_0= ruleFilterConditionValue ) ) otherlv_5= ')' ) )
-            // InternalDescartesQL.g:3958:1: ( ( (lv_mode_0_0= 'CONDITION' ) ) otherlv_1= '(' ( (lv_condition_2_0= ruleFilterConditionType ) ) otherlv_3= ',' ( (lv_value_4_0= ruleFilterConditionValue ) ) otherlv_5= ')' )
+            // InternalDescartesQL.g:4152:28: ( ( ( (lv_mode_0_0= 'CONDITION' ) ) otherlv_1= '(' ( (lv_condition_2_0= ruleFilterConditionType ) ) otherlv_3= ',' ( (lv_value_4_0= ruleFilterConditionValue ) ) otherlv_5= ')' ) )
+            // InternalDescartesQL.g:4153:1: ( ( (lv_mode_0_0= 'CONDITION' ) ) otherlv_1= '(' ( (lv_condition_2_0= ruleFilterConditionType ) ) otherlv_3= ',' ( (lv_value_4_0= ruleFilterConditionValue ) ) otherlv_5= ')' )
             {
-            // InternalDescartesQL.g:3958:1: ( ( (lv_mode_0_0= 'CONDITION' ) ) otherlv_1= '(' ( (lv_condition_2_0= ruleFilterConditionType ) ) otherlv_3= ',' ( (lv_value_4_0= ruleFilterConditionValue ) ) otherlv_5= ')' )
-            // InternalDescartesQL.g:3958:2: ( (lv_mode_0_0= 'CONDITION' ) ) otherlv_1= '(' ( (lv_condition_2_0= ruleFilterConditionType ) ) otherlv_3= ',' ( (lv_value_4_0= ruleFilterConditionValue ) ) otherlv_5= ')'
+            // InternalDescartesQL.g:4153:1: ( ( (lv_mode_0_0= 'CONDITION' ) ) otherlv_1= '(' ( (lv_condition_2_0= ruleFilterConditionType ) ) otherlv_3= ',' ( (lv_value_4_0= ruleFilterConditionValue ) ) otherlv_5= ')' )
+            // InternalDescartesQL.g:4153:2: ( (lv_mode_0_0= 'CONDITION' ) ) otherlv_1= '(' ( (lv_condition_2_0= ruleFilterConditionType ) ) otherlv_3= ',' ( (lv_value_4_0= ruleFilterConditionValue ) ) otherlv_5= ')'
             {
-            // InternalDescartesQL.g:3958:2: ( (lv_mode_0_0= 'CONDITION' ) )
-            // InternalDescartesQL.g:3959:1: (lv_mode_0_0= 'CONDITION' )
+            // InternalDescartesQL.g:4153:2: ( (lv_mode_0_0= 'CONDITION' ) )
+            // InternalDescartesQL.g:4154:1: (lv_mode_0_0= 'CONDITION' )
             {
-            // InternalDescartesQL.g:3959:1: (lv_mode_0_0= 'CONDITION' )
-            // InternalDescartesQL.g:3960:3: lv_mode_0_0= 'CONDITION'
+            // InternalDescartesQL.g:4154:1: (lv_mode_0_0= 'CONDITION' )
+            // InternalDescartesQL.g:4155:3: lv_mode_0_0= 'CONDITION'
             {
-            lv_mode_0_0=(Token)match(input,60,FOLLOW_10); 
+            lv_mode_0_0=(Token)match(input,64,FOLLOW_14); 
 
                     newLeafNode(lv_mode_0_0, grammarAccess.getFilterConditionClauseAccess().getModeCONDITIONKeyword_0_0());
                 
@@ -9533,20 +10021,20 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            otherlv_1=(Token)match(input,19,FOLLOW_56); 
+            otherlv_1=(Token)match(input,23,FOLLOW_59); 
 
                 	newLeafNode(otherlv_1, grammarAccess.getFilterConditionClauseAccess().getLeftParenthesisKeyword_1());
                 
-            // InternalDescartesQL.g:3977:1: ( (lv_condition_2_0= ruleFilterConditionType ) )
-            // InternalDescartesQL.g:3978:1: (lv_condition_2_0= ruleFilterConditionType )
+            // InternalDescartesQL.g:4172:1: ( (lv_condition_2_0= ruleFilterConditionType ) )
+            // InternalDescartesQL.g:4173:1: (lv_condition_2_0= ruleFilterConditionType )
             {
-            // InternalDescartesQL.g:3978:1: (lv_condition_2_0= ruleFilterConditionType )
-            // InternalDescartesQL.g:3979:3: lv_condition_2_0= ruleFilterConditionType
+            // InternalDescartesQL.g:4173:1: (lv_condition_2_0= ruleFilterConditionType )
+            // InternalDescartesQL.g:4174:3: lv_condition_2_0= ruleFilterConditionType
             {
              
             	        newCompositeNode(grammarAccess.getFilterConditionClauseAccess().getConditionFilterConditionTypeEnumRuleCall_2_0()); 
             	    
-            pushFollow(FOLLOW_57);
+            pushFollow(FOLLOW_60);
             lv_condition_2_0=ruleFilterConditionType();
 
             state._fsp--;
@@ -9568,20 +10056,20 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            otherlv_3=(Token)match(input,16,FOLLOW_36); 
+            otherlv_3=(Token)match(input,20,FOLLOW_39); 
 
                 	newLeafNode(otherlv_3, grammarAccess.getFilterConditionClauseAccess().getCommaKeyword_3());
                 
-            // InternalDescartesQL.g:3999:1: ( (lv_value_4_0= ruleFilterConditionValue ) )
-            // InternalDescartesQL.g:4000:1: (lv_value_4_0= ruleFilterConditionValue )
+            // InternalDescartesQL.g:4194:1: ( (lv_value_4_0= ruleFilterConditionValue ) )
+            // InternalDescartesQL.g:4195:1: (lv_value_4_0= ruleFilterConditionValue )
             {
-            // InternalDescartesQL.g:4000:1: (lv_value_4_0= ruleFilterConditionValue )
-            // InternalDescartesQL.g:4001:3: lv_value_4_0= ruleFilterConditionValue
+            // InternalDescartesQL.g:4195:1: (lv_value_4_0= ruleFilterConditionValue )
+            // InternalDescartesQL.g:4196:3: lv_value_4_0= ruleFilterConditionValue
             {
              
             	        newCompositeNode(grammarAccess.getFilterConditionClauseAccess().getValueFilterConditionValueParserRuleCall_4_0()); 
             	    
-            pushFollow(FOLLOW_29);
+            pushFollow(FOLLOW_32);
             lv_value_4_0=ruleFilterConditionValue();
 
             state._fsp--;
@@ -9603,7 +10091,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            otherlv_5=(Token)match(input,20,FOLLOW_2); 
+            otherlv_5=(Token)match(input,24,FOLLOW_2); 
 
                 	newLeafNode(otherlv_5, grammarAccess.getFilterConditionClauseAccess().getRightParenthesisKeyword_5());
                 
@@ -9628,7 +10116,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleFilterConditionValue"
-    // InternalDescartesQL.g:4029:1: entryRuleFilterConditionValue returns [EObject current=null] : iv_ruleFilterConditionValue= ruleFilterConditionValue EOF ;
+    // InternalDescartesQL.g:4224:1: entryRuleFilterConditionValue returns [EObject current=null] : iv_ruleFilterConditionValue= ruleFilterConditionValue EOF ;
     public final EObject entryRuleFilterConditionValue() throws RecognitionException {
         EObject current = null;
 
@@ -9636,8 +10124,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:4030:2: (iv_ruleFilterConditionValue= ruleFilterConditionValue EOF )
-            // InternalDescartesQL.g:4031:2: iv_ruleFilterConditionValue= ruleFilterConditionValue EOF
+            // InternalDescartesQL.g:4225:2: (iv_ruleFilterConditionValue= ruleFilterConditionValue EOF )
+            // InternalDescartesQL.g:4226:2: iv_ruleFilterConditionValue= ruleFilterConditionValue EOF
             {
              newCompositeNode(grammarAccess.getFilterConditionValueRule()); 
             pushFollow(FOLLOW_1);
@@ -9664,7 +10152,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleFilterConditionValue"
-    // InternalDescartesQL.g:4038:1: ruleFilterConditionValue returns [EObject current=null] : ( (lv_value_0_0= RULE_STRING ) ) ;
+    // InternalDescartesQL.g:4233:1: ruleFilterConditionValue returns [EObject current=null] : ( (lv_value_0_0= RULE_STRING ) ) ;
     public final EObject ruleFilterConditionValue() throws RecognitionException {
         EObject current = null;
 
@@ -9673,14 +10161,14 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:4041:28: ( ( (lv_value_0_0= RULE_STRING ) ) )
-            // InternalDescartesQL.g:4042:1: ( (lv_value_0_0= RULE_STRING ) )
+            // InternalDescartesQL.g:4236:28: ( ( (lv_value_0_0= RULE_STRING ) ) )
+            // InternalDescartesQL.g:4237:1: ( (lv_value_0_0= RULE_STRING ) )
             {
-            // InternalDescartesQL.g:4042:1: ( (lv_value_0_0= RULE_STRING ) )
-            // InternalDescartesQL.g:4043:1: (lv_value_0_0= RULE_STRING )
+            // InternalDescartesQL.g:4237:1: ( (lv_value_0_0= RULE_STRING ) )
+            // InternalDescartesQL.g:4238:1: (lv_value_0_0= RULE_STRING )
             {
-            // InternalDescartesQL.g:4043:1: (lv_value_0_0= RULE_STRING )
-            // InternalDescartesQL.g:4044:3: lv_value_0_0= RULE_STRING
+            // InternalDescartesQL.g:4238:1: (lv_value_0_0= RULE_STRING )
+            // InternalDescartesQL.g:4239:3: lv_value_0_0= RULE_STRING
             {
             lv_value_0_0=(Token)match(input,RULE_STRING,FOLLOW_2); 
 
@@ -9720,7 +10208,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleObserveClause"
-    // InternalDescartesQL.g:4068:1: entryRuleObserveClause returns [EObject current=null] : iv_ruleObserveClause= ruleObserveClause EOF ;
+    // InternalDescartesQL.g:4263:1: entryRuleObserveClause returns [EObject current=null] : iv_ruleObserveClause= ruleObserveClause EOF ;
     public final EObject entryRuleObserveClause() throws RecognitionException {
         EObject current = null;
 
@@ -9728,8 +10216,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:4069:2: (iv_ruleObserveClause= ruleObserveClause EOF )
-            // InternalDescartesQL.g:4070:2: iv_ruleObserveClause= ruleObserveClause EOF
+            // InternalDescartesQL.g:4264:2: (iv_ruleObserveClause= ruleObserveClause EOF )
+            // InternalDescartesQL.g:4265:2: iv_ruleObserveClause= ruleObserveClause EOF
             {
              newCompositeNode(grammarAccess.getObserveClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -9756,7 +10244,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleObserveClause"
-    // InternalDescartesQL.g:4077:1: ruleObserveClause returns [EObject current=null] : ( ( (lv_mode_0_0= 'OBSERVE' ) ) ( (lv_observation_1_0= ruleObservationClause ) ) ( (lv_sampleClause_2_0= ruleSampleClause ) )? ) ;
+    // InternalDescartesQL.g:4272:1: ruleObserveClause returns [EObject current=null] : ( ( (lv_mode_0_0= 'OBSERVE' ) ) ( (lv_observation_1_0= ruleObservationClause ) ) ( (lv_sampleClause_2_0= ruleSampleClause ) )? ) ;
     public final EObject ruleObserveClause() throws RecognitionException {
         EObject current = null;
 
@@ -9769,19 +10257,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:4080:28: ( ( ( (lv_mode_0_0= 'OBSERVE' ) ) ( (lv_observation_1_0= ruleObservationClause ) ) ( (lv_sampleClause_2_0= ruleSampleClause ) )? ) )
-            // InternalDescartesQL.g:4081:1: ( ( (lv_mode_0_0= 'OBSERVE' ) ) ( (lv_observation_1_0= ruleObservationClause ) ) ( (lv_sampleClause_2_0= ruleSampleClause ) )? )
+            // InternalDescartesQL.g:4275:28: ( ( ( (lv_mode_0_0= 'OBSERVE' ) ) ( (lv_observation_1_0= ruleObservationClause ) ) ( (lv_sampleClause_2_0= ruleSampleClause ) )? ) )
+            // InternalDescartesQL.g:4276:1: ( ( (lv_mode_0_0= 'OBSERVE' ) ) ( (lv_observation_1_0= ruleObservationClause ) ) ( (lv_sampleClause_2_0= ruleSampleClause ) )? )
             {
-            // InternalDescartesQL.g:4081:1: ( ( (lv_mode_0_0= 'OBSERVE' ) ) ( (lv_observation_1_0= ruleObservationClause ) ) ( (lv_sampleClause_2_0= ruleSampleClause ) )? )
-            // InternalDescartesQL.g:4081:2: ( (lv_mode_0_0= 'OBSERVE' ) ) ( (lv_observation_1_0= ruleObservationClause ) ) ( (lv_sampleClause_2_0= ruleSampleClause ) )?
+            // InternalDescartesQL.g:4276:1: ( ( (lv_mode_0_0= 'OBSERVE' ) ) ( (lv_observation_1_0= ruleObservationClause ) ) ( (lv_sampleClause_2_0= ruleSampleClause ) )? )
+            // InternalDescartesQL.g:4276:2: ( (lv_mode_0_0= 'OBSERVE' ) ) ( (lv_observation_1_0= ruleObservationClause ) ) ( (lv_sampleClause_2_0= ruleSampleClause ) )?
             {
-            // InternalDescartesQL.g:4081:2: ( (lv_mode_0_0= 'OBSERVE' ) )
-            // InternalDescartesQL.g:4082:1: (lv_mode_0_0= 'OBSERVE' )
+            // InternalDescartesQL.g:4276:2: ( (lv_mode_0_0= 'OBSERVE' ) )
+            // InternalDescartesQL.g:4277:1: (lv_mode_0_0= 'OBSERVE' )
             {
-            // InternalDescartesQL.g:4082:1: (lv_mode_0_0= 'OBSERVE' )
-            // InternalDescartesQL.g:4083:3: lv_mode_0_0= 'OBSERVE'
+            // InternalDescartesQL.g:4277:1: (lv_mode_0_0= 'OBSERVE' )
+            // InternalDescartesQL.g:4278:3: lv_mode_0_0= 'OBSERVE'
             {
-            lv_mode_0_0=(Token)match(input,61,FOLLOW_58); 
+            lv_mode_0_0=(Token)match(input,65,FOLLOW_61); 
 
                     newLeafNode(lv_mode_0_0, grammarAccess.getObserveClauseAccess().getModeOBSERVEKeyword_0_0());
                 
@@ -9797,16 +10285,16 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:4096:2: ( (lv_observation_1_0= ruleObservationClause ) )
-            // InternalDescartesQL.g:4097:1: (lv_observation_1_0= ruleObservationClause )
+            // InternalDescartesQL.g:4291:2: ( (lv_observation_1_0= ruleObservationClause ) )
+            // InternalDescartesQL.g:4292:1: (lv_observation_1_0= ruleObservationClause )
             {
-            // InternalDescartesQL.g:4097:1: (lv_observation_1_0= ruleObservationClause )
-            // InternalDescartesQL.g:4098:3: lv_observation_1_0= ruleObservationClause
+            // InternalDescartesQL.g:4292:1: (lv_observation_1_0= ruleObservationClause )
+            // InternalDescartesQL.g:4293:3: lv_observation_1_0= ruleObservationClause
             {
              
             	        newCompositeNode(grammarAccess.getObserveClauseAccess().getObservationObservationClauseParserRuleCall_1_0()); 
             	    
-            pushFollow(FOLLOW_59);
+            pushFollow(FOLLOW_62);
             lv_observation_1_0=ruleObservationClause();
 
             state._fsp--;
@@ -9828,19 +10316,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:4114:2: ( (lv_sampleClause_2_0= ruleSampleClause ) )?
-            int alt46=2;
-            int LA46_0 = input.LA(1);
+            // InternalDescartesQL.g:4309:2: ( (lv_sampleClause_2_0= ruleSampleClause ) )?
+            int alt53=2;
+            int LA53_0 = input.LA(1);
 
-            if ( (LA46_0==62) ) {
-                alt46=1;
+            if ( (LA53_0==66) ) {
+                alt53=1;
             }
-            switch (alt46) {
+            switch (alt53) {
                 case 1 :
-                    // InternalDescartesQL.g:4115:1: (lv_sampleClause_2_0= ruleSampleClause )
+                    // InternalDescartesQL.g:4310:1: (lv_sampleClause_2_0= ruleSampleClause )
                     {
-                    // InternalDescartesQL.g:4115:1: (lv_sampleClause_2_0= ruleSampleClause )
-                    // InternalDescartesQL.g:4116:3: lv_sampleClause_2_0= ruleSampleClause
+                    // InternalDescartesQL.g:4310:1: (lv_sampleClause_2_0= ruleSampleClause )
+                    // InternalDescartesQL.g:4311:3: lv_sampleClause_2_0= ruleSampleClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getObserveClauseAccess().getSampleClauseSampleClauseParserRuleCall_2_0()); 
@@ -9891,7 +10379,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleObservationClause"
-    // InternalDescartesQL.g:4140:1: entryRuleObservationClause returns [EObject current=null] : iv_ruleObservationClause= ruleObservationClause EOF ;
+    // InternalDescartesQL.g:4335:1: entryRuleObservationClause returns [EObject current=null] : iv_ruleObservationClause= ruleObservationClause EOF ;
     public final EObject entryRuleObservationClause() throws RecognitionException {
         EObject current = null;
 
@@ -9899,8 +10387,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:4141:2: (iv_ruleObservationClause= ruleObservationClause EOF )
-            // InternalDescartesQL.g:4142:2: iv_ruleObservationClause= ruleObservationClause EOF
+            // InternalDescartesQL.g:4336:2: (iv_ruleObservationClause= ruleObservationClause EOF )
+            // InternalDescartesQL.g:4337:2: iv_ruleObservationClause= ruleObservationClause EOF
             {
              newCompositeNode(grammarAccess.getObservationClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -9927,7 +10415,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleObservationClause"
-    // InternalDescartesQL.g:4149:1: ruleObservationClause returns [EObject current=null] : (this_ConnectorTimeUnitClause_0= ruleConnectorTimeUnitClause | this_ConnectorInstanceReferenceClause_1= ruleConnectorInstanceReferenceClause | this_ObserveRelativeClause_2= ruleObserveRelativeClause | this_ObserveBetweenClause_3= ruleObserveBetweenClause ) ;
+    // InternalDescartesQL.g:4344:1: ruleObservationClause returns [EObject current=null] : (this_ConnectorTimeUnitClause_0= ruleConnectorTimeUnitClause | this_ConnectorInstanceReferenceClause_1= ruleConnectorInstanceReferenceClause | this_ObserveRelativeClause_2= ruleObserveRelativeClause | this_ObserveBetweenClause_3= ruleObserveBetweenClause ) ;
     public final EObject ruleObservationClause() throws RecognitionException {
         EObject current = null;
 
@@ -9943,43 +10431,43 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:4152:28: ( (this_ConnectorTimeUnitClause_0= ruleConnectorTimeUnitClause | this_ConnectorInstanceReferenceClause_1= ruleConnectorInstanceReferenceClause | this_ObserveRelativeClause_2= ruleObserveRelativeClause | this_ObserveBetweenClause_3= ruleObserveBetweenClause ) )
-            // InternalDescartesQL.g:4153:1: (this_ConnectorTimeUnitClause_0= ruleConnectorTimeUnitClause | this_ConnectorInstanceReferenceClause_1= ruleConnectorInstanceReferenceClause | this_ObserveRelativeClause_2= ruleObserveRelativeClause | this_ObserveBetweenClause_3= ruleObserveBetweenClause )
+            // InternalDescartesQL.g:4347:28: ( (this_ConnectorTimeUnitClause_0= ruleConnectorTimeUnitClause | this_ConnectorInstanceReferenceClause_1= ruleConnectorInstanceReferenceClause | this_ObserveRelativeClause_2= ruleObserveRelativeClause | this_ObserveBetweenClause_3= ruleObserveBetweenClause ) )
+            // InternalDescartesQL.g:4348:1: (this_ConnectorTimeUnitClause_0= ruleConnectorTimeUnitClause | this_ConnectorInstanceReferenceClause_1= ruleConnectorInstanceReferenceClause | this_ObserveRelativeClause_2= ruleObserveRelativeClause | this_ObserveBetweenClause_3= ruleObserveBetweenClause )
             {
-            // InternalDescartesQL.g:4153:1: (this_ConnectorTimeUnitClause_0= ruleConnectorTimeUnitClause | this_ConnectorInstanceReferenceClause_1= ruleConnectorInstanceReferenceClause | this_ObserveRelativeClause_2= ruleObserveRelativeClause | this_ObserveBetweenClause_3= ruleObserveBetweenClause )
-            int alt47=4;
+            // InternalDescartesQL.g:4348:1: (this_ConnectorTimeUnitClause_0= ruleConnectorTimeUnitClause | this_ConnectorInstanceReferenceClause_1= ruleConnectorInstanceReferenceClause | this_ObserveRelativeClause_2= ruleObserveRelativeClause | this_ObserveBetweenClause_3= ruleObserveBetweenClause )
+            int alt54=4;
             switch ( input.LA(1) ) {
             case RULE_INT:
                 {
-                alt47=1;
+                alt54=1;
                 }
                 break;
             case RULE_ID:
                 {
-                alt47=2;
+                alt54=2;
                 }
                 break;
-            case 81:
-            case 82:
+            case 85:
+            case 86:
                 {
-                alt47=3;
+                alt54=3;
                 }
                 break;
-            case 63:
+            case 67:
                 {
-                alt47=4;
+                alt54=4;
                 }
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("", 47, 0, input);
+                    new NoViableAltException("", 54, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt47) {
+            switch (alt54) {
                 case 1 :
-                    // InternalDescartesQL.g:4154:5: this_ConnectorTimeUnitClause_0= ruleConnectorTimeUnitClause
+                    // InternalDescartesQL.g:4349:5: this_ConnectorTimeUnitClause_0= ruleConnectorTimeUnitClause
                     {
                      
                             newCompositeNode(grammarAccess.getObservationClauseAccess().getConnectorTimeUnitClauseParserRuleCall_0()); 
@@ -9997,7 +10485,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 2 :
-                    // InternalDescartesQL.g:4164:5: this_ConnectorInstanceReferenceClause_1= ruleConnectorInstanceReferenceClause
+                    // InternalDescartesQL.g:4359:5: this_ConnectorInstanceReferenceClause_1= ruleConnectorInstanceReferenceClause
                     {
                      
                             newCompositeNode(grammarAccess.getObservationClauseAccess().getConnectorInstanceReferenceClauseParserRuleCall_1()); 
@@ -10015,7 +10503,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 3 :
-                    // InternalDescartesQL.g:4174:5: this_ObserveRelativeClause_2= ruleObserveRelativeClause
+                    // InternalDescartesQL.g:4369:5: this_ObserveRelativeClause_2= ruleObserveRelativeClause
                     {
                      
                             newCompositeNode(grammarAccess.getObservationClauseAccess().getObserveRelativeClauseParserRuleCall_2()); 
@@ -10033,7 +10521,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 4 :
-                    // InternalDescartesQL.g:4184:5: this_ObserveBetweenClause_3= ruleObserveBetweenClause
+                    // InternalDescartesQL.g:4379:5: this_ObserveBetweenClause_3= ruleObserveBetweenClause
                     {
                      
                             newCompositeNode(grammarAccess.getObservationClauseAccess().getObserveBetweenClauseParserRuleCall_3()); 
@@ -10071,7 +10559,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleSampleClause"
-    // InternalDescartesQL.g:4200:1: entryRuleSampleClause returns [EObject current=null] : iv_ruleSampleClause= ruleSampleClause EOF ;
+    // InternalDescartesQL.g:4395:1: entryRuleSampleClause returns [EObject current=null] : iv_ruleSampleClause= ruleSampleClause EOF ;
     public final EObject entryRuleSampleClause() throws RecognitionException {
         EObject current = null;
 
@@ -10079,8 +10567,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:4201:2: (iv_ruleSampleClause= ruleSampleClause EOF )
-            // InternalDescartesQL.g:4202:2: iv_ruleSampleClause= ruleSampleClause EOF
+            // InternalDescartesQL.g:4396:2: (iv_ruleSampleClause= ruleSampleClause EOF )
+            // InternalDescartesQL.g:4397:2: iv_ruleSampleClause= ruleSampleClause EOF
             {
              newCompositeNode(grammarAccess.getSampleClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -10107,7 +10595,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleSampleClause"
-    // InternalDescartesQL.g:4209:1: ruleSampleClause returns [EObject current=null] : ( ( (lv_mode_0_0= 'SAMPLED BY' ) ) ( (lv_durationClause_1_0= ruleRelativeTimeDurationClause ) ) ( (lv_durationClause_2_0= ruleRelativeTimeDurationClause ) )* ) ;
+    // InternalDescartesQL.g:4404:1: ruleSampleClause returns [EObject current=null] : ( ( (lv_mode_0_0= 'SAMPLED BY' ) ) ( (lv_durationClause_1_0= ruleRelativeTimeDurationClause ) ) ( (lv_durationClause_2_0= ruleRelativeTimeDurationClause ) )* ) ;
     public final EObject ruleSampleClause() throws RecognitionException {
         EObject current = null;
 
@@ -10120,19 +10608,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:4212:28: ( ( ( (lv_mode_0_0= 'SAMPLED BY' ) ) ( (lv_durationClause_1_0= ruleRelativeTimeDurationClause ) ) ( (lv_durationClause_2_0= ruleRelativeTimeDurationClause ) )* ) )
-            // InternalDescartesQL.g:4213:1: ( ( (lv_mode_0_0= 'SAMPLED BY' ) ) ( (lv_durationClause_1_0= ruleRelativeTimeDurationClause ) ) ( (lv_durationClause_2_0= ruleRelativeTimeDurationClause ) )* )
+            // InternalDescartesQL.g:4407:28: ( ( ( (lv_mode_0_0= 'SAMPLED BY' ) ) ( (lv_durationClause_1_0= ruleRelativeTimeDurationClause ) ) ( (lv_durationClause_2_0= ruleRelativeTimeDurationClause ) )* ) )
+            // InternalDescartesQL.g:4408:1: ( ( (lv_mode_0_0= 'SAMPLED BY' ) ) ( (lv_durationClause_1_0= ruleRelativeTimeDurationClause ) ) ( (lv_durationClause_2_0= ruleRelativeTimeDurationClause ) )* )
             {
-            // InternalDescartesQL.g:4213:1: ( ( (lv_mode_0_0= 'SAMPLED BY' ) ) ( (lv_durationClause_1_0= ruleRelativeTimeDurationClause ) ) ( (lv_durationClause_2_0= ruleRelativeTimeDurationClause ) )* )
-            // InternalDescartesQL.g:4213:2: ( (lv_mode_0_0= 'SAMPLED BY' ) ) ( (lv_durationClause_1_0= ruleRelativeTimeDurationClause ) ) ( (lv_durationClause_2_0= ruleRelativeTimeDurationClause ) )*
+            // InternalDescartesQL.g:4408:1: ( ( (lv_mode_0_0= 'SAMPLED BY' ) ) ( (lv_durationClause_1_0= ruleRelativeTimeDurationClause ) ) ( (lv_durationClause_2_0= ruleRelativeTimeDurationClause ) )* )
+            // InternalDescartesQL.g:4408:2: ( (lv_mode_0_0= 'SAMPLED BY' ) ) ( (lv_durationClause_1_0= ruleRelativeTimeDurationClause ) ) ( (lv_durationClause_2_0= ruleRelativeTimeDurationClause ) )*
             {
-            // InternalDescartesQL.g:4213:2: ( (lv_mode_0_0= 'SAMPLED BY' ) )
-            // InternalDescartesQL.g:4214:1: (lv_mode_0_0= 'SAMPLED BY' )
+            // InternalDescartesQL.g:4408:2: ( (lv_mode_0_0= 'SAMPLED BY' ) )
+            // InternalDescartesQL.g:4409:1: (lv_mode_0_0= 'SAMPLED BY' )
             {
-            // InternalDescartesQL.g:4214:1: (lv_mode_0_0= 'SAMPLED BY' )
-            // InternalDescartesQL.g:4215:3: lv_mode_0_0= 'SAMPLED BY'
+            // InternalDescartesQL.g:4409:1: (lv_mode_0_0= 'SAMPLED BY' )
+            // InternalDescartesQL.g:4410:3: lv_mode_0_0= 'SAMPLED BY'
             {
-            lv_mode_0_0=(Token)match(input,62,FOLLOW_19); 
+            lv_mode_0_0=(Token)match(input,66,FOLLOW_24); 
 
                     newLeafNode(lv_mode_0_0, grammarAccess.getSampleClauseAccess().getModeSAMPLEDBYKeyword_0_0());
                 
@@ -10148,16 +10636,16 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:4228:2: ( (lv_durationClause_1_0= ruleRelativeTimeDurationClause ) )
-            // InternalDescartesQL.g:4229:1: (lv_durationClause_1_0= ruleRelativeTimeDurationClause )
+            // InternalDescartesQL.g:4423:2: ( (lv_durationClause_1_0= ruleRelativeTimeDurationClause ) )
+            // InternalDescartesQL.g:4424:1: (lv_durationClause_1_0= ruleRelativeTimeDurationClause )
             {
-            // InternalDescartesQL.g:4229:1: (lv_durationClause_1_0= ruleRelativeTimeDurationClause )
-            // InternalDescartesQL.g:4230:3: lv_durationClause_1_0= ruleRelativeTimeDurationClause
+            // InternalDescartesQL.g:4424:1: (lv_durationClause_1_0= ruleRelativeTimeDurationClause )
+            // InternalDescartesQL.g:4425:3: lv_durationClause_1_0= ruleRelativeTimeDurationClause
             {
              
             	        newCompositeNode(grammarAccess.getSampleClauseAccess().getDurationClauseRelativeTimeDurationClauseParserRuleCall_1_0()); 
             	    
-            pushFollow(FOLLOW_60);
+            pushFollow(FOLLOW_63);
             lv_durationClause_1_0=ruleRelativeTimeDurationClause();
 
             state._fsp--;
@@ -10179,28 +10667,28 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:4246:2: ( (lv_durationClause_2_0= ruleRelativeTimeDurationClause ) )*
-            loop48:
+            // InternalDescartesQL.g:4441:2: ( (lv_durationClause_2_0= ruleRelativeTimeDurationClause ) )*
+            loop55:
             do {
-                int alt48=2;
-                int LA48_0 = input.LA(1);
+                int alt55=2;
+                int LA55_0 = input.LA(1);
 
-                if ( (LA48_0==RULE_INT) ) {
-                    alt48=1;
+                if ( (LA55_0==RULE_INT) ) {
+                    alt55=1;
                 }
 
 
-                switch (alt48) {
+                switch (alt55) {
             	case 1 :
-            	    // InternalDescartesQL.g:4247:1: (lv_durationClause_2_0= ruleRelativeTimeDurationClause )
+            	    // InternalDescartesQL.g:4442:1: (lv_durationClause_2_0= ruleRelativeTimeDurationClause )
             	    {
-            	    // InternalDescartesQL.g:4247:1: (lv_durationClause_2_0= ruleRelativeTimeDurationClause )
-            	    // InternalDescartesQL.g:4248:3: lv_durationClause_2_0= ruleRelativeTimeDurationClause
+            	    // InternalDescartesQL.g:4442:1: (lv_durationClause_2_0= ruleRelativeTimeDurationClause )
+            	    // InternalDescartesQL.g:4443:3: lv_durationClause_2_0= ruleRelativeTimeDurationClause
             	    {
             	     
             	    	        newCompositeNode(grammarAccess.getSampleClauseAccess().getDurationClauseRelativeTimeDurationClauseParserRuleCall_2_0()); 
             	    	    
-            	    pushFollow(FOLLOW_60);
+            	    pushFollow(FOLLOW_63);
             	    lv_durationClause_2_0=ruleRelativeTimeDurationClause();
 
             	    state._fsp--;
@@ -10224,7 +10712,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
             	    break;
 
             	default :
-            	    break loop48;
+            	    break loop55;
                 }
             } while (true);
 
@@ -10249,7 +10737,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleConnectorTimeUnitClause"
-    // InternalDescartesQL.g:4272:1: entryRuleConnectorTimeUnitClause returns [EObject current=null] : iv_ruleConnectorTimeUnitClause= ruleConnectorTimeUnitClause EOF ;
+    // InternalDescartesQL.g:4467:1: entryRuleConnectorTimeUnitClause returns [EObject current=null] : iv_ruleConnectorTimeUnitClause= ruleConnectorTimeUnitClause EOF ;
     public final EObject entryRuleConnectorTimeUnitClause() throws RecognitionException {
         EObject current = null;
 
@@ -10257,8 +10745,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:4273:2: (iv_ruleConnectorTimeUnitClause= ruleConnectorTimeUnitClause EOF )
-            // InternalDescartesQL.g:4274:2: iv_ruleConnectorTimeUnitClause= ruleConnectorTimeUnitClause EOF
+            // InternalDescartesQL.g:4468:2: (iv_ruleConnectorTimeUnitClause= ruleConnectorTimeUnitClause EOF )
+            // InternalDescartesQL.g:4469:2: iv_ruleConnectorTimeUnitClause= ruleConnectorTimeUnitClause EOF
             {
              newCompositeNode(grammarAccess.getConnectorTimeUnitClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -10285,7 +10773,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleConnectorTimeUnitClause"
-    // InternalDescartesQL.g:4281:1: ruleConnectorTimeUnitClause returns [EObject current=null] : ( ( (lv_count_0_0= RULE_INT ) ) ( (lv_timeIndicator_1_0= RULE_ID ) ) ) ;
+    // InternalDescartesQL.g:4476:1: ruleConnectorTimeUnitClause returns [EObject current=null] : ( ( (lv_count_0_0= RULE_INT ) ) ( (lv_timeIndicator_1_0= RULE_ID ) ) ) ;
     public final EObject ruleConnectorTimeUnitClause() throws RecognitionException {
         EObject current = null;
 
@@ -10295,19 +10783,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:4284:28: ( ( ( (lv_count_0_0= RULE_INT ) ) ( (lv_timeIndicator_1_0= RULE_ID ) ) ) )
-            // InternalDescartesQL.g:4285:1: ( ( (lv_count_0_0= RULE_INT ) ) ( (lv_timeIndicator_1_0= RULE_ID ) ) )
+            // InternalDescartesQL.g:4479:28: ( ( ( (lv_count_0_0= RULE_INT ) ) ( (lv_timeIndicator_1_0= RULE_ID ) ) ) )
+            // InternalDescartesQL.g:4480:1: ( ( (lv_count_0_0= RULE_INT ) ) ( (lv_timeIndicator_1_0= RULE_ID ) ) )
             {
-            // InternalDescartesQL.g:4285:1: ( ( (lv_count_0_0= RULE_INT ) ) ( (lv_timeIndicator_1_0= RULE_ID ) ) )
-            // InternalDescartesQL.g:4285:2: ( (lv_count_0_0= RULE_INT ) ) ( (lv_timeIndicator_1_0= RULE_ID ) )
+            // InternalDescartesQL.g:4480:1: ( ( (lv_count_0_0= RULE_INT ) ) ( (lv_timeIndicator_1_0= RULE_ID ) ) )
+            // InternalDescartesQL.g:4480:2: ( (lv_count_0_0= RULE_INT ) ) ( (lv_timeIndicator_1_0= RULE_ID ) )
             {
-            // InternalDescartesQL.g:4285:2: ( (lv_count_0_0= RULE_INT ) )
-            // InternalDescartesQL.g:4286:1: (lv_count_0_0= RULE_INT )
+            // InternalDescartesQL.g:4480:2: ( (lv_count_0_0= RULE_INT ) )
+            // InternalDescartesQL.g:4481:1: (lv_count_0_0= RULE_INT )
             {
-            // InternalDescartesQL.g:4286:1: (lv_count_0_0= RULE_INT )
-            // InternalDescartesQL.g:4287:3: lv_count_0_0= RULE_INT
+            // InternalDescartesQL.g:4481:1: (lv_count_0_0= RULE_INT )
+            // InternalDescartesQL.g:4482:3: lv_count_0_0= RULE_INT
             {
-            lv_count_0_0=(Token)match(input,RULE_INT,FOLLOW_7); 
+            lv_count_0_0=(Token)match(input,RULE_INT,FOLLOW_11); 
 
             			newLeafNode(lv_count_0_0, grammarAccess.getConnectorTimeUnitClauseAccess().getCountINTTerminalRuleCall_0_0()); 
             		
@@ -10327,11 +10815,11 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:4303:2: ( (lv_timeIndicator_1_0= RULE_ID ) )
-            // InternalDescartesQL.g:4304:1: (lv_timeIndicator_1_0= RULE_ID )
+            // InternalDescartesQL.g:4498:2: ( (lv_timeIndicator_1_0= RULE_ID ) )
+            // InternalDescartesQL.g:4499:1: (lv_timeIndicator_1_0= RULE_ID )
             {
-            // InternalDescartesQL.g:4304:1: (lv_timeIndicator_1_0= RULE_ID )
-            // InternalDescartesQL.g:4305:3: lv_timeIndicator_1_0= RULE_ID
+            // InternalDescartesQL.g:4499:1: (lv_timeIndicator_1_0= RULE_ID )
+            // InternalDescartesQL.g:4500:3: lv_timeIndicator_1_0= RULE_ID
             {
             lv_timeIndicator_1_0=(Token)match(input,RULE_ID,FOLLOW_2); 
 
@@ -10374,7 +10862,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleConnectorInstanceReferenceClause"
-    // InternalDescartesQL.g:4329:1: entryRuleConnectorInstanceReferenceClause returns [EObject current=null] : iv_ruleConnectorInstanceReferenceClause= ruleConnectorInstanceReferenceClause EOF ;
+    // InternalDescartesQL.g:4524:1: entryRuleConnectorInstanceReferenceClause returns [EObject current=null] : iv_ruleConnectorInstanceReferenceClause= ruleConnectorInstanceReferenceClause EOF ;
     public final EObject entryRuleConnectorInstanceReferenceClause() throws RecognitionException {
         EObject current = null;
 
@@ -10382,8 +10870,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:4330:2: (iv_ruleConnectorInstanceReferenceClause= ruleConnectorInstanceReferenceClause EOF )
-            // InternalDescartesQL.g:4331:2: iv_ruleConnectorInstanceReferenceClause= ruleConnectorInstanceReferenceClause EOF
+            // InternalDescartesQL.g:4525:2: (iv_ruleConnectorInstanceReferenceClause= ruleConnectorInstanceReferenceClause EOF )
+            // InternalDescartesQL.g:4526:2: iv_ruleConnectorInstanceReferenceClause= ruleConnectorInstanceReferenceClause EOF
             {
              newCompositeNode(grammarAccess.getConnectorInstanceReferenceClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -10410,7 +10898,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleConnectorInstanceReferenceClause"
-    // InternalDescartesQL.g:4338:1: ruleConnectorInstanceReferenceClause returns [EObject current=null] : ( ( (lv_type_0_0= RULE_ID ) ) ( (lv_identifier_1_0= RULE_STRING ) ) ) ;
+    // InternalDescartesQL.g:4533:1: ruleConnectorInstanceReferenceClause returns [EObject current=null] : ( ( (lv_type_0_0= RULE_ID ) ) ( (lv_identifier_1_0= RULE_STRING ) ) ) ;
     public final EObject ruleConnectorInstanceReferenceClause() throws RecognitionException {
         EObject current = null;
 
@@ -10420,19 +10908,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:4341:28: ( ( ( (lv_type_0_0= RULE_ID ) ) ( (lv_identifier_1_0= RULE_STRING ) ) ) )
-            // InternalDescartesQL.g:4342:1: ( ( (lv_type_0_0= RULE_ID ) ) ( (lv_identifier_1_0= RULE_STRING ) ) )
+            // InternalDescartesQL.g:4536:28: ( ( ( (lv_type_0_0= RULE_ID ) ) ( (lv_identifier_1_0= RULE_STRING ) ) ) )
+            // InternalDescartesQL.g:4537:1: ( ( (lv_type_0_0= RULE_ID ) ) ( (lv_identifier_1_0= RULE_STRING ) ) )
             {
-            // InternalDescartesQL.g:4342:1: ( ( (lv_type_0_0= RULE_ID ) ) ( (lv_identifier_1_0= RULE_STRING ) ) )
-            // InternalDescartesQL.g:4342:2: ( (lv_type_0_0= RULE_ID ) ) ( (lv_identifier_1_0= RULE_STRING ) )
+            // InternalDescartesQL.g:4537:1: ( ( (lv_type_0_0= RULE_ID ) ) ( (lv_identifier_1_0= RULE_STRING ) ) )
+            // InternalDescartesQL.g:4537:2: ( (lv_type_0_0= RULE_ID ) ) ( (lv_identifier_1_0= RULE_STRING ) )
             {
-            // InternalDescartesQL.g:4342:2: ( (lv_type_0_0= RULE_ID ) )
-            // InternalDescartesQL.g:4343:1: (lv_type_0_0= RULE_ID )
+            // InternalDescartesQL.g:4537:2: ( (lv_type_0_0= RULE_ID ) )
+            // InternalDescartesQL.g:4538:1: (lv_type_0_0= RULE_ID )
             {
-            // InternalDescartesQL.g:4343:1: (lv_type_0_0= RULE_ID )
-            // InternalDescartesQL.g:4344:3: lv_type_0_0= RULE_ID
+            // InternalDescartesQL.g:4538:1: (lv_type_0_0= RULE_ID )
+            // InternalDescartesQL.g:4539:3: lv_type_0_0= RULE_ID
             {
-            lv_type_0_0=(Token)match(input,RULE_ID,FOLLOW_36); 
+            lv_type_0_0=(Token)match(input,RULE_ID,FOLLOW_39); 
 
             			newLeafNode(lv_type_0_0, grammarAccess.getConnectorInstanceReferenceClauseAccess().getTypeIDTerminalRuleCall_0_0()); 
             		
@@ -10452,11 +10940,11 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:4360:2: ( (lv_identifier_1_0= RULE_STRING ) )
-            // InternalDescartesQL.g:4361:1: (lv_identifier_1_0= RULE_STRING )
+            // InternalDescartesQL.g:4555:2: ( (lv_identifier_1_0= RULE_STRING ) )
+            // InternalDescartesQL.g:4556:1: (lv_identifier_1_0= RULE_STRING )
             {
-            // InternalDescartesQL.g:4361:1: (lv_identifier_1_0= RULE_STRING )
-            // InternalDescartesQL.g:4362:3: lv_identifier_1_0= RULE_STRING
+            // InternalDescartesQL.g:4556:1: (lv_identifier_1_0= RULE_STRING )
+            // InternalDescartesQL.g:4557:3: lv_identifier_1_0= RULE_STRING
             {
             lv_identifier_1_0=(Token)match(input,RULE_STRING,FOLLOW_2); 
 
@@ -10499,7 +10987,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleObserveRelativeClause"
-    // InternalDescartesQL.g:4386:1: entryRuleObserveRelativeClause returns [EObject current=null] : iv_ruleObserveRelativeClause= ruleObserveRelativeClause EOF ;
+    // InternalDescartesQL.g:4581:1: entryRuleObserveRelativeClause returns [EObject current=null] : iv_ruleObserveRelativeClause= ruleObserveRelativeClause EOF ;
     public final EObject entryRuleObserveRelativeClause() throws RecognitionException {
         EObject current = null;
 
@@ -10507,8 +10995,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:4387:2: (iv_ruleObserveRelativeClause= ruleObserveRelativeClause EOF )
-            // InternalDescartesQL.g:4388:2: iv_ruleObserveRelativeClause= ruleObserveRelativeClause EOF
+            // InternalDescartesQL.g:4582:2: (iv_ruleObserveRelativeClause= ruleObserveRelativeClause EOF )
+            // InternalDescartesQL.g:4583:2: iv_ruleObserveRelativeClause= ruleObserveRelativeClause EOF
             {
              newCompositeNode(grammarAccess.getObserveRelativeClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -10535,7 +11023,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleObserveRelativeClause"
-    // InternalDescartesQL.g:4395:1: ruleObserveRelativeClause returns [EObject current=null] : ( ( (lv_direction_0_0= ruleObserveRelativeDirectionType ) ) ( ( (lv_timeTarget_1_1= ruleAbsoluteTimeClause | lv_timeTarget_1_2= ruleRelativeTimeClause ) ) ) ) ;
+    // InternalDescartesQL.g:4590:1: ruleObserveRelativeClause returns [EObject current=null] : ( ( (lv_direction_0_0= ruleObserveRelativeDirectionType ) ) ( ( (lv_timeTarget_1_1= ruleAbsoluteTimeClause | lv_timeTarget_1_2= ruleRelativeTimeClause ) ) ) ) ;
     public final EObject ruleObserveRelativeClause() throws RecognitionException {
         EObject current = null;
 
@@ -10549,22 +11037,22 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:4398:28: ( ( ( (lv_direction_0_0= ruleObserveRelativeDirectionType ) ) ( ( (lv_timeTarget_1_1= ruleAbsoluteTimeClause | lv_timeTarget_1_2= ruleRelativeTimeClause ) ) ) ) )
-            // InternalDescartesQL.g:4399:1: ( ( (lv_direction_0_0= ruleObserveRelativeDirectionType ) ) ( ( (lv_timeTarget_1_1= ruleAbsoluteTimeClause | lv_timeTarget_1_2= ruleRelativeTimeClause ) ) ) )
+            // InternalDescartesQL.g:4593:28: ( ( ( (lv_direction_0_0= ruleObserveRelativeDirectionType ) ) ( ( (lv_timeTarget_1_1= ruleAbsoluteTimeClause | lv_timeTarget_1_2= ruleRelativeTimeClause ) ) ) ) )
+            // InternalDescartesQL.g:4594:1: ( ( (lv_direction_0_0= ruleObserveRelativeDirectionType ) ) ( ( (lv_timeTarget_1_1= ruleAbsoluteTimeClause | lv_timeTarget_1_2= ruleRelativeTimeClause ) ) ) )
             {
-            // InternalDescartesQL.g:4399:1: ( ( (lv_direction_0_0= ruleObserveRelativeDirectionType ) ) ( ( (lv_timeTarget_1_1= ruleAbsoluteTimeClause | lv_timeTarget_1_2= ruleRelativeTimeClause ) ) ) )
-            // InternalDescartesQL.g:4399:2: ( (lv_direction_0_0= ruleObserveRelativeDirectionType ) ) ( ( (lv_timeTarget_1_1= ruleAbsoluteTimeClause | lv_timeTarget_1_2= ruleRelativeTimeClause ) ) )
+            // InternalDescartesQL.g:4594:1: ( ( (lv_direction_0_0= ruleObserveRelativeDirectionType ) ) ( ( (lv_timeTarget_1_1= ruleAbsoluteTimeClause | lv_timeTarget_1_2= ruleRelativeTimeClause ) ) ) )
+            // InternalDescartesQL.g:4594:2: ( (lv_direction_0_0= ruleObserveRelativeDirectionType ) ) ( ( (lv_timeTarget_1_1= ruleAbsoluteTimeClause | lv_timeTarget_1_2= ruleRelativeTimeClause ) ) )
             {
-            // InternalDescartesQL.g:4399:2: ( (lv_direction_0_0= ruleObserveRelativeDirectionType ) )
-            // InternalDescartesQL.g:4400:1: (lv_direction_0_0= ruleObserveRelativeDirectionType )
+            // InternalDescartesQL.g:4594:2: ( (lv_direction_0_0= ruleObserveRelativeDirectionType ) )
+            // InternalDescartesQL.g:4595:1: (lv_direction_0_0= ruleObserveRelativeDirectionType )
             {
-            // InternalDescartesQL.g:4400:1: (lv_direction_0_0= ruleObserveRelativeDirectionType )
-            // InternalDescartesQL.g:4401:3: lv_direction_0_0= ruleObserveRelativeDirectionType
+            // InternalDescartesQL.g:4595:1: (lv_direction_0_0= ruleObserveRelativeDirectionType )
+            // InternalDescartesQL.g:4596:3: lv_direction_0_0= ruleObserveRelativeDirectionType
             {
              
             	        newCompositeNode(grammarAccess.getObserveRelativeClauseAccess().getDirectionObserveRelativeDirectionTypeEnumRuleCall_0_0()); 
             	    
-            pushFollow(FOLLOW_61);
+            pushFollow(FOLLOW_64);
             lv_direction_0_0=ruleObserveRelativeDirectionType();
 
             state._fsp--;
@@ -10586,31 +11074,31 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:4417:2: ( ( (lv_timeTarget_1_1= ruleAbsoluteTimeClause | lv_timeTarget_1_2= ruleRelativeTimeClause ) ) )
-            // InternalDescartesQL.g:4418:1: ( (lv_timeTarget_1_1= ruleAbsoluteTimeClause | lv_timeTarget_1_2= ruleRelativeTimeClause ) )
+            // InternalDescartesQL.g:4612:2: ( ( (lv_timeTarget_1_1= ruleAbsoluteTimeClause | lv_timeTarget_1_2= ruleRelativeTimeClause ) ) )
+            // InternalDescartesQL.g:4613:1: ( (lv_timeTarget_1_1= ruleAbsoluteTimeClause | lv_timeTarget_1_2= ruleRelativeTimeClause ) )
             {
-            // InternalDescartesQL.g:4418:1: ( (lv_timeTarget_1_1= ruleAbsoluteTimeClause | lv_timeTarget_1_2= ruleRelativeTimeClause ) )
-            // InternalDescartesQL.g:4419:1: (lv_timeTarget_1_1= ruleAbsoluteTimeClause | lv_timeTarget_1_2= ruleRelativeTimeClause )
+            // InternalDescartesQL.g:4613:1: ( (lv_timeTarget_1_1= ruleAbsoluteTimeClause | lv_timeTarget_1_2= ruleRelativeTimeClause ) )
+            // InternalDescartesQL.g:4614:1: (lv_timeTarget_1_1= ruleAbsoluteTimeClause | lv_timeTarget_1_2= ruleRelativeTimeClause )
             {
-            // InternalDescartesQL.g:4419:1: (lv_timeTarget_1_1= ruleAbsoluteTimeClause | lv_timeTarget_1_2= ruleRelativeTimeClause )
-            int alt49=2;
-            int LA49_0 = input.LA(1);
+            // InternalDescartesQL.g:4614:1: (lv_timeTarget_1_1= ruleAbsoluteTimeClause | lv_timeTarget_1_2= ruleRelativeTimeClause )
+            int alt56=2;
+            int LA56_0 = input.LA(1);
 
-            if ( (LA49_0==RULE_STRING) ) {
-                alt49=1;
+            if ( (LA56_0==RULE_STRING) ) {
+                alt56=1;
             }
-            else if ( (LA49_0==RULE_INT) ) {
-                alt49=2;
+            else if ( (LA56_0==RULE_INT) ) {
+                alt56=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("", 49, 0, input);
+                    new NoViableAltException("", 56, 0, input);
 
                 throw nvae;
             }
-            switch (alt49) {
+            switch (alt56) {
                 case 1 :
-                    // InternalDescartesQL.g:4420:3: lv_timeTarget_1_1= ruleAbsoluteTimeClause
+                    // InternalDescartesQL.g:4615:3: lv_timeTarget_1_1= ruleAbsoluteTimeClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getObserveRelativeClauseAccess().getTimeTargetAbsoluteTimeClauseParserRuleCall_1_0_0()); 
@@ -10635,7 +11123,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 2 :
-                    // InternalDescartesQL.g:4435:8: lv_timeTarget_1_2= ruleRelativeTimeClause
+                    // InternalDescartesQL.g:4630:8: lv_timeTarget_1_2= ruleRelativeTimeClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getObserveRelativeClauseAccess().getTimeTargetRelativeTimeClauseParserRuleCall_1_0_1()); 
@@ -10689,7 +11177,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleObserveBetweenClause"
-    // InternalDescartesQL.g:4461:1: entryRuleObserveBetweenClause returns [EObject current=null] : iv_ruleObserveBetweenClause= ruleObserveBetweenClause EOF ;
+    // InternalDescartesQL.g:4656:1: entryRuleObserveBetweenClause returns [EObject current=null] : iv_ruleObserveBetweenClause= ruleObserveBetweenClause EOF ;
     public final EObject entryRuleObserveBetweenClause() throws RecognitionException {
         EObject current = null;
 
@@ -10697,8 +11185,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:4462:2: (iv_ruleObserveBetweenClause= ruleObserveBetweenClause EOF )
-            // InternalDescartesQL.g:4463:2: iv_ruleObserveBetweenClause= ruleObserveBetweenClause EOF
+            // InternalDescartesQL.g:4657:2: (iv_ruleObserveBetweenClause= ruleObserveBetweenClause EOF )
+            // InternalDescartesQL.g:4658:2: iv_ruleObserveBetweenClause= ruleObserveBetweenClause EOF
             {
              newCompositeNode(grammarAccess.getObserveBetweenClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -10725,7 +11213,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleObserveBetweenClause"
-    // InternalDescartesQL.g:4470:1: ruleObserveBetweenClause returns [EObject current=null] : ( ( (lv_mode1_0_0= 'BETWEEN' ) ) ( ( (lv_startingTime_1_1= ruleAbsoluteTimeClause | lv_startingTime_1_2= ruleRelativeTimeWithSignClause ) ) ) ( (lv_mode2_2_0= 'AND' ) ) ( ( (lv_endingTime_3_1= ruleAbsoluteTimeClause | lv_endingTime_3_2= ruleRelativeTimeWithSignClause ) ) ) ) ;
+    // InternalDescartesQL.g:4665:1: ruleObserveBetweenClause returns [EObject current=null] : ( ( (lv_mode1_0_0= 'BETWEEN' ) ) ( ( (lv_startingTime_1_1= ruleAbsoluteTimeClause | lv_startingTime_1_2= ruleRelativeTimeWithSignClause ) ) ) ( (lv_mode2_2_0= 'AND' ) ) ( ( (lv_endingTime_3_1= ruleAbsoluteTimeClause | lv_endingTime_3_2= ruleRelativeTimeWithSignClause ) ) ) ) ;
     public final EObject ruleObserveBetweenClause() throws RecognitionException {
         EObject current = null;
 
@@ -10743,19 +11231,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:4473:28: ( ( ( (lv_mode1_0_0= 'BETWEEN' ) ) ( ( (lv_startingTime_1_1= ruleAbsoluteTimeClause | lv_startingTime_1_2= ruleRelativeTimeWithSignClause ) ) ) ( (lv_mode2_2_0= 'AND' ) ) ( ( (lv_endingTime_3_1= ruleAbsoluteTimeClause | lv_endingTime_3_2= ruleRelativeTimeWithSignClause ) ) ) ) )
-            // InternalDescartesQL.g:4474:1: ( ( (lv_mode1_0_0= 'BETWEEN' ) ) ( ( (lv_startingTime_1_1= ruleAbsoluteTimeClause | lv_startingTime_1_2= ruleRelativeTimeWithSignClause ) ) ) ( (lv_mode2_2_0= 'AND' ) ) ( ( (lv_endingTime_3_1= ruleAbsoluteTimeClause | lv_endingTime_3_2= ruleRelativeTimeWithSignClause ) ) ) )
+            // InternalDescartesQL.g:4668:28: ( ( ( (lv_mode1_0_0= 'BETWEEN' ) ) ( ( (lv_startingTime_1_1= ruleAbsoluteTimeClause | lv_startingTime_1_2= ruleRelativeTimeWithSignClause ) ) ) ( (lv_mode2_2_0= 'AND' ) ) ( ( (lv_endingTime_3_1= ruleAbsoluteTimeClause | lv_endingTime_3_2= ruleRelativeTimeWithSignClause ) ) ) ) )
+            // InternalDescartesQL.g:4669:1: ( ( (lv_mode1_0_0= 'BETWEEN' ) ) ( ( (lv_startingTime_1_1= ruleAbsoluteTimeClause | lv_startingTime_1_2= ruleRelativeTimeWithSignClause ) ) ) ( (lv_mode2_2_0= 'AND' ) ) ( ( (lv_endingTime_3_1= ruleAbsoluteTimeClause | lv_endingTime_3_2= ruleRelativeTimeWithSignClause ) ) ) )
             {
-            // InternalDescartesQL.g:4474:1: ( ( (lv_mode1_0_0= 'BETWEEN' ) ) ( ( (lv_startingTime_1_1= ruleAbsoluteTimeClause | lv_startingTime_1_2= ruleRelativeTimeWithSignClause ) ) ) ( (lv_mode2_2_0= 'AND' ) ) ( ( (lv_endingTime_3_1= ruleAbsoluteTimeClause | lv_endingTime_3_2= ruleRelativeTimeWithSignClause ) ) ) )
-            // InternalDescartesQL.g:4474:2: ( (lv_mode1_0_0= 'BETWEEN' ) ) ( ( (lv_startingTime_1_1= ruleAbsoluteTimeClause | lv_startingTime_1_2= ruleRelativeTimeWithSignClause ) ) ) ( (lv_mode2_2_0= 'AND' ) ) ( ( (lv_endingTime_3_1= ruleAbsoluteTimeClause | lv_endingTime_3_2= ruleRelativeTimeWithSignClause ) ) )
+            // InternalDescartesQL.g:4669:1: ( ( (lv_mode1_0_0= 'BETWEEN' ) ) ( ( (lv_startingTime_1_1= ruleAbsoluteTimeClause | lv_startingTime_1_2= ruleRelativeTimeWithSignClause ) ) ) ( (lv_mode2_2_0= 'AND' ) ) ( ( (lv_endingTime_3_1= ruleAbsoluteTimeClause | lv_endingTime_3_2= ruleRelativeTimeWithSignClause ) ) ) )
+            // InternalDescartesQL.g:4669:2: ( (lv_mode1_0_0= 'BETWEEN' ) ) ( ( (lv_startingTime_1_1= ruleAbsoluteTimeClause | lv_startingTime_1_2= ruleRelativeTimeWithSignClause ) ) ) ( (lv_mode2_2_0= 'AND' ) ) ( ( (lv_endingTime_3_1= ruleAbsoluteTimeClause | lv_endingTime_3_2= ruleRelativeTimeWithSignClause ) ) )
             {
-            // InternalDescartesQL.g:4474:2: ( (lv_mode1_0_0= 'BETWEEN' ) )
-            // InternalDescartesQL.g:4475:1: (lv_mode1_0_0= 'BETWEEN' )
+            // InternalDescartesQL.g:4669:2: ( (lv_mode1_0_0= 'BETWEEN' ) )
+            // InternalDescartesQL.g:4670:1: (lv_mode1_0_0= 'BETWEEN' )
             {
-            // InternalDescartesQL.g:4475:1: (lv_mode1_0_0= 'BETWEEN' )
-            // InternalDescartesQL.g:4476:3: lv_mode1_0_0= 'BETWEEN'
+            // InternalDescartesQL.g:4670:1: (lv_mode1_0_0= 'BETWEEN' )
+            // InternalDescartesQL.g:4671:3: lv_mode1_0_0= 'BETWEEN'
             {
-            lv_mode1_0_0=(Token)match(input,63,FOLLOW_62); 
+            lv_mode1_0_0=(Token)match(input,67,FOLLOW_65); 
 
                     newLeafNode(lv_mode1_0_0, grammarAccess.getObserveBetweenClauseAccess().getMode1BETWEENKeyword_0_0());
                 
@@ -10771,36 +11259,36 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:4489:2: ( ( (lv_startingTime_1_1= ruleAbsoluteTimeClause | lv_startingTime_1_2= ruleRelativeTimeWithSignClause ) ) )
-            // InternalDescartesQL.g:4490:1: ( (lv_startingTime_1_1= ruleAbsoluteTimeClause | lv_startingTime_1_2= ruleRelativeTimeWithSignClause ) )
+            // InternalDescartesQL.g:4684:2: ( ( (lv_startingTime_1_1= ruleAbsoluteTimeClause | lv_startingTime_1_2= ruleRelativeTimeWithSignClause ) ) )
+            // InternalDescartesQL.g:4685:1: ( (lv_startingTime_1_1= ruleAbsoluteTimeClause | lv_startingTime_1_2= ruleRelativeTimeWithSignClause ) )
             {
-            // InternalDescartesQL.g:4490:1: ( (lv_startingTime_1_1= ruleAbsoluteTimeClause | lv_startingTime_1_2= ruleRelativeTimeWithSignClause ) )
-            // InternalDescartesQL.g:4491:1: (lv_startingTime_1_1= ruleAbsoluteTimeClause | lv_startingTime_1_2= ruleRelativeTimeWithSignClause )
+            // InternalDescartesQL.g:4685:1: ( (lv_startingTime_1_1= ruleAbsoluteTimeClause | lv_startingTime_1_2= ruleRelativeTimeWithSignClause ) )
+            // InternalDescartesQL.g:4686:1: (lv_startingTime_1_1= ruleAbsoluteTimeClause | lv_startingTime_1_2= ruleRelativeTimeWithSignClause )
             {
-            // InternalDescartesQL.g:4491:1: (lv_startingTime_1_1= ruleAbsoluteTimeClause | lv_startingTime_1_2= ruleRelativeTimeWithSignClause )
-            int alt50=2;
-            int LA50_0 = input.LA(1);
+            // InternalDescartesQL.g:4686:1: (lv_startingTime_1_1= ruleAbsoluteTimeClause | lv_startingTime_1_2= ruleRelativeTimeWithSignClause )
+            int alt57=2;
+            int LA57_0 = input.LA(1);
 
-            if ( (LA50_0==RULE_STRING) ) {
-                alt50=1;
+            if ( (LA57_0==RULE_STRING) ) {
+                alt57=1;
             }
-            else if ( ((LA50_0>=83 && LA50_0<=84)) ) {
-                alt50=2;
+            else if ( ((LA57_0>=87 && LA57_0<=88)) ) {
+                alt57=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("", 50, 0, input);
+                    new NoViableAltException("", 57, 0, input);
 
                 throw nvae;
             }
-            switch (alt50) {
+            switch (alt57) {
                 case 1 :
-                    // InternalDescartesQL.g:4492:3: lv_startingTime_1_1= ruleAbsoluteTimeClause
+                    // InternalDescartesQL.g:4687:3: lv_startingTime_1_1= ruleAbsoluteTimeClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getObserveBetweenClauseAccess().getStartingTimeAbsoluteTimeClauseParserRuleCall_1_0_0()); 
                     	    
-                    pushFollow(FOLLOW_63);
+                    pushFollow(FOLLOW_66);
                     lv_startingTime_1_1=ruleAbsoluteTimeClause();
 
                     state._fsp--;
@@ -10820,12 +11308,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 2 :
-                    // InternalDescartesQL.g:4507:8: lv_startingTime_1_2= ruleRelativeTimeWithSignClause
+                    // InternalDescartesQL.g:4702:8: lv_startingTime_1_2= ruleRelativeTimeWithSignClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getObserveBetweenClauseAccess().getStartingTimeRelativeTimeWithSignClauseParserRuleCall_1_0_1()); 
                     	    
-                    pushFollow(FOLLOW_63);
+                    pushFollow(FOLLOW_66);
                     lv_startingTime_1_2=ruleRelativeTimeWithSignClause();
 
                     state._fsp--;
@@ -10853,13 +11341,13 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:4525:2: ( (lv_mode2_2_0= 'AND' ) )
-            // InternalDescartesQL.g:4526:1: (lv_mode2_2_0= 'AND' )
+            // InternalDescartesQL.g:4720:2: ( (lv_mode2_2_0= 'AND' ) )
+            // InternalDescartesQL.g:4721:1: (lv_mode2_2_0= 'AND' )
             {
-            // InternalDescartesQL.g:4526:1: (lv_mode2_2_0= 'AND' )
-            // InternalDescartesQL.g:4527:3: lv_mode2_2_0= 'AND'
+            // InternalDescartesQL.g:4721:1: (lv_mode2_2_0= 'AND' )
+            // InternalDescartesQL.g:4722:3: lv_mode2_2_0= 'AND'
             {
-            lv_mode2_2_0=(Token)match(input,64,FOLLOW_62); 
+            lv_mode2_2_0=(Token)match(input,68,FOLLOW_65); 
 
                     newLeafNode(lv_mode2_2_0, grammarAccess.getObserveBetweenClauseAccess().getMode2ANDKeyword_2_0());
                 
@@ -10875,31 +11363,31 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:4540:2: ( ( (lv_endingTime_3_1= ruleAbsoluteTimeClause | lv_endingTime_3_2= ruleRelativeTimeWithSignClause ) ) )
-            // InternalDescartesQL.g:4541:1: ( (lv_endingTime_3_1= ruleAbsoluteTimeClause | lv_endingTime_3_2= ruleRelativeTimeWithSignClause ) )
+            // InternalDescartesQL.g:4735:2: ( ( (lv_endingTime_3_1= ruleAbsoluteTimeClause | lv_endingTime_3_2= ruleRelativeTimeWithSignClause ) ) )
+            // InternalDescartesQL.g:4736:1: ( (lv_endingTime_3_1= ruleAbsoluteTimeClause | lv_endingTime_3_2= ruleRelativeTimeWithSignClause ) )
             {
-            // InternalDescartesQL.g:4541:1: ( (lv_endingTime_3_1= ruleAbsoluteTimeClause | lv_endingTime_3_2= ruleRelativeTimeWithSignClause ) )
-            // InternalDescartesQL.g:4542:1: (lv_endingTime_3_1= ruleAbsoluteTimeClause | lv_endingTime_3_2= ruleRelativeTimeWithSignClause )
+            // InternalDescartesQL.g:4736:1: ( (lv_endingTime_3_1= ruleAbsoluteTimeClause | lv_endingTime_3_2= ruleRelativeTimeWithSignClause ) )
+            // InternalDescartesQL.g:4737:1: (lv_endingTime_3_1= ruleAbsoluteTimeClause | lv_endingTime_3_2= ruleRelativeTimeWithSignClause )
             {
-            // InternalDescartesQL.g:4542:1: (lv_endingTime_3_1= ruleAbsoluteTimeClause | lv_endingTime_3_2= ruleRelativeTimeWithSignClause )
-            int alt51=2;
-            int LA51_0 = input.LA(1);
+            // InternalDescartesQL.g:4737:1: (lv_endingTime_3_1= ruleAbsoluteTimeClause | lv_endingTime_3_2= ruleRelativeTimeWithSignClause )
+            int alt58=2;
+            int LA58_0 = input.LA(1);
 
-            if ( (LA51_0==RULE_STRING) ) {
-                alt51=1;
+            if ( (LA58_0==RULE_STRING) ) {
+                alt58=1;
             }
-            else if ( ((LA51_0>=83 && LA51_0<=84)) ) {
-                alt51=2;
+            else if ( ((LA58_0>=87 && LA58_0<=88)) ) {
+                alt58=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("", 51, 0, input);
+                    new NoViableAltException("", 58, 0, input);
 
                 throw nvae;
             }
-            switch (alt51) {
+            switch (alt58) {
                 case 1 :
-                    // InternalDescartesQL.g:4543:3: lv_endingTime_3_1= ruleAbsoluteTimeClause
+                    // InternalDescartesQL.g:4738:3: lv_endingTime_3_1= ruleAbsoluteTimeClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getObserveBetweenClauseAccess().getEndingTimeAbsoluteTimeClauseParserRuleCall_3_0_0()); 
@@ -10924,7 +11412,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 2 :
-                    // InternalDescartesQL.g:4558:8: lv_endingTime_3_2= ruleRelativeTimeWithSignClause
+                    // InternalDescartesQL.g:4753:8: lv_endingTime_3_2= ruleRelativeTimeWithSignClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getObserveBetweenClauseAccess().getEndingTimeRelativeTimeWithSignClauseParserRuleCall_3_0_1()); 
@@ -10978,7 +11466,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleRelativeTimeWithSignClause"
-    // InternalDescartesQL.g:4584:1: entryRuleRelativeTimeWithSignClause returns [EObject current=null] : iv_ruleRelativeTimeWithSignClause= ruleRelativeTimeWithSignClause EOF ;
+    // InternalDescartesQL.g:4779:1: entryRuleRelativeTimeWithSignClause returns [EObject current=null] : iv_ruleRelativeTimeWithSignClause= ruleRelativeTimeWithSignClause EOF ;
     public final EObject entryRuleRelativeTimeWithSignClause() throws RecognitionException {
         EObject current = null;
 
@@ -10986,8 +11474,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:4585:2: (iv_ruleRelativeTimeWithSignClause= ruleRelativeTimeWithSignClause EOF )
-            // InternalDescartesQL.g:4586:2: iv_ruleRelativeTimeWithSignClause= ruleRelativeTimeWithSignClause EOF
+            // InternalDescartesQL.g:4780:2: (iv_ruleRelativeTimeWithSignClause= ruleRelativeTimeWithSignClause EOF )
+            // InternalDescartesQL.g:4781:2: iv_ruleRelativeTimeWithSignClause= ruleRelativeTimeWithSignClause EOF
             {
              newCompositeNode(grammarAccess.getRelativeTimeWithSignClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -11014,7 +11502,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleRelativeTimeWithSignClause"
-    // InternalDescartesQL.g:4593:1: ruleRelativeTimeWithSignClause returns [EObject current=null] : ( ( (lv_sign_0_0= ruleRelativeTimeSignType ) ) ( (lv_timeClause_1_0= ruleRelativeTimeClause ) ) ) ;
+    // InternalDescartesQL.g:4788:1: ruleRelativeTimeWithSignClause returns [EObject current=null] : ( ( (lv_sign_0_0= ruleRelativeTimeSignType ) ) ( (lv_timeClause_1_0= ruleRelativeTimeClause ) ) ) ;
     public final EObject ruleRelativeTimeWithSignClause() throws RecognitionException {
         EObject current = null;
 
@@ -11026,22 +11514,22 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:4596:28: ( ( ( (lv_sign_0_0= ruleRelativeTimeSignType ) ) ( (lv_timeClause_1_0= ruleRelativeTimeClause ) ) ) )
-            // InternalDescartesQL.g:4597:1: ( ( (lv_sign_0_0= ruleRelativeTimeSignType ) ) ( (lv_timeClause_1_0= ruleRelativeTimeClause ) ) )
+            // InternalDescartesQL.g:4791:28: ( ( ( (lv_sign_0_0= ruleRelativeTimeSignType ) ) ( (lv_timeClause_1_0= ruleRelativeTimeClause ) ) ) )
+            // InternalDescartesQL.g:4792:1: ( ( (lv_sign_0_0= ruleRelativeTimeSignType ) ) ( (lv_timeClause_1_0= ruleRelativeTimeClause ) ) )
             {
-            // InternalDescartesQL.g:4597:1: ( ( (lv_sign_0_0= ruleRelativeTimeSignType ) ) ( (lv_timeClause_1_0= ruleRelativeTimeClause ) ) )
-            // InternalDescartesQL.g:4597:2: ( (lv_sign_0_0= ruleRelativeTimeSignType ) ) ( (lv_timeClause_1_0= ruleRelativeTimeClause ) )
+            // InternalDescartesQL.g:4792:1: ( ( (lv_sign_0_0= ruleRelativeTimeSignType ) ) ( (lv_timeClause_1_0= ruleRelativeTimeClause ) ) )
+            // InternalDescartesQL.g:4792:2: ( (lv_sign_0_0= ruleRelativeTimeSignType ) ) ( (lv_timeClause_1_0= ruleRelativeTimeClause ) )
             {
-            // InternalDescartesQL.g:4597:2: ( (lv_sign_0_0= ruleRelativeTimeSignType ) )
-            // InternalDescartesQL.g:4598:1: (lv_sign_0_0= ruleRelativeTimeSignType )
+            // InternalDescartesQL.g:4792:2: ( (lv_sign_0_0= ruleRelativeTimeSignType ) )
+            // InternalDescartesQL.g:4793:1: (lv_sign_0_0= ruleRelativeTimeSignType )
             {
-            // InternalDescartesQL.g:4598:1: (lv_sign_0_0= ruleRelativeTimeSignType )
-            // InternalDescartesQL.g:4599:3: lv_sign_0_0= ruleRelativeTimeSignType
+            // InternalDescartesQL.g:4793:1: (lv_sign_0_0= ruleRelativeTimeSignType )
+            // InternalDescartesQL.g:4794:3: lv_sign_0_0= ruleRelativeTimeSignType
             {
              
             	        newCompositeNode(grammarAccess.getRelativeTimeWithSignClauseAccess().getSignRelativeTimeSignTypeEnumRuleCall_0_0()); 
             	    
-            pushFollow(FOLLOW_61);
+            pushFollow(FOLLOW_64);
             lv_sign_0_0=ruleRelativeTimeSignType();
 
             state._fsp--;
@@ -11063,11 +11551,11 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:4615:2: ( (lv_timeClause_1_0= ruleRelativeTimeClause ) )
-            // InternalDescartesQL.g:4616:1: (lv_timeClause_1_0= ruleRelativeTimeClause )
+            // InternalDescartesQL.g:4810:2: ( (lv_timeClause_1_0= ruleRelativeTimeClause ) )
+            // InternalDescartesQL.g:4811:1: (lv_timeClause_1_0= ruleRelativeTimeClause )
             {
-            // InternalDescartesQL.g:4616:1: (lv_timeClause_1_0= ruleRelativeTimeClause )
-            // InternalDescartesQL.g:4617:3: lv_timeClause_1_0= ruleRelativeTimeClause
+            // InternalDescartesQL.g:4811:1: (lv_timeClause_1_0= ruleRelativeTimeClause )
+            // InternalDescartesQL.g:4812:3: lv_timeClause_1_0= ruleRelativeTimeClause
             {
              
             	        newCompositeNode(grammarAccess.getRelativeTimeWithSignClauseAccess().getTimeClauseRelativeTimeClauseParserRuleCall_1_0()); 
@@ -11115,7 +11603,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleAbsoluteTimeClause"
-    // InternalDescartesQL.g:4645:1: entryRuleAbsoluteTimeClause returns [EObject current=null] : iv_ruleAbsoluteTimeClause= ruleAbsoluteTimeClause EOF ;
+    // InternalDescartesQL.g:4840:1: entryRuleAbsoluteTimeClause returns [EObject current=null] : iv_ruleAbsoluteTimeClause= ruleAbsoluteTimeClause EOF ;
     public final EObject entryRuleAbsoluteTimeClause() throws RecognitionException {
         EObject current = null;
 
@@ -11123,8 +11611,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:4646:2: (iv_ruleAbsoluteTimeClause= ruleAbsoluteTimeClause EOF )
-            // InternalDescartesQL.g:4647:2: iv_ruleAbsoluteTimeClause= ruleAbsoluteTimeClause EOF
+            // InternalDescartesQL.g:4841:2: (iv_ruleAbsoluteTimeClause= ruleAbsoluteTimeClause EOF )
+            // InternalDescartesQL.g:4842:2: iv_ruleAbsoluteTimeClause= ruleAbsoluteTimeClause EOF
             {
              newCompositeNode(grammarAccess.getAbsoluteTimeClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -11151,7 +11639,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleAbsoluteTimeClause"
-    // InternalDescartesQL.g:4654:1: ruleAbsoluteTimeClause returns [EObject current=null] : ( (lv_timeSpec_0_0= RULE_STRING ) ) ;
+    // InternalDescartesQL.g:4849:1: ruleAbsoluteTimeClause returns [EObject current=null] : ( (lv_timeSpec_0_0= RULE_STRING ) ) ;
     public final EObject ruleAbsoluteTimeClause() throws RecognitionException {
         EObject current = null;
 
@@ -11160,14 +11648,14 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:4657:28: ( ( (lv_timeSpec_0_0= RULE_STRING ) ) )
-            // InternalDescartesQL.g:4658:1: ( (lv_timeSpec_0_0= RULE_STRING ) )
+            // InternalDescartesQL.g:4852:28: ( ( (lv_timeSpec_0_0= RULE_STRING ) ) )
+            // InternalDescartesQL.g:4853:1: ( (lv_timeSpec_0_0= RULE_STRING ) )
             {
-            // InternalDescartesQL.g:4658:1: ( (lv_timeSpec_0_0= RULE_STRING ) )
-            // InternalDescartesQL.g:4659:1: (lv_timeSpec_0_0= RULE_STRING )
+            // InternalDescartesQL.g:4853:1: ( (lv_timeSpec_0_0= RULE_STRING ) )
+            // InternalDescartesQL.g:4854:1: (lv_timeSpec_0_0= RULE_STRING )
             {
-            // InternalDescartesQL.g:4659:1: (lv_timeSpec_0_0= RULE_STRING )
-            // InternalDescartesQL.g:4660:3: lv_timeSpec_0_0= RULE_STRING
+            // InternalDescartesQL.g:4854:1: (lv_timeSpec_0_0= RULE_STRING )
+            // InternalDescartesQL.g:4855:3: lv_timeSpec_0_0= RULE_STRING
             {
             lv_timeSpec_0_0=(Token)match(input,RULE_STRING,FOLLOW_2); 
 
@@ -11207,7 +11695,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleRelativeTimeClause"
-    // InternalDescartesQL.g:4684:1: entryRuleRelativeTimeClause returns [EObject current=null] : iv_ruleRelativeTimeClause= ruleRelativeTimeClause EOF ;
+    // InternalDescartesQL.g:4879:1: entryRuleRelativeTimeClause returns [EObject current=null] : iv_ruleRelativeTimeClause= ruleRelativeTimeClause EOF ;
     public final EObject entryRuleRelativeTimeClause() throws RecognitionException {
         EObject current = null;
 
@@ -11215,8 +11703,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:4685:2: (iv_ruleRelativeTimeClause= ruleRelativeTimeClause EOF )
-            // InternalDescartesQL.g:4686:2: iv_ruleRelativeTimeClause= ruleRelativeTimeClause EOF
+            // InternalDescartesQL.g:4880:2: (iv_ruleRelativeTimeClause= ruleRelativeTimeClause EOF )
+            // InternalDescartesQL.g:4881:2: iv_ruleRelativeTimeClause= ruleRelativeTimeClause EOF
             {
              newCompositeNode(grammarAccess.getRelativeTimeClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -11243,7 +11731,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleRelativeTimeClause"
-    // InternalDescartesQL.g:4693:1: ruleRelativeTimeClause returns [EObject current=null] : ( ( (lv_durationClause_0_0= ruleRelativeTimeDurationClause ) ) ( (lv_durationClause_1_0= ruleRelativeTimeDurationClause ) )* ) ;
+    // InternalDescartesQL.g:4888:1: ruleRelativeTimeClause returns [EObject current=null] : ( ( (lv_durationClause_0_0= ruleRelativeTimeDurationClause ) ) ( (lv_durationClause_1_0= ruleRelativeTimeDurationClause ) )* ) ;
     public final EObject ruleRelativeTimeClause() throws RecognitionException {
         EObject current = null;
 
@@ -11255,22 +11743,22 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:4696:28: ( ( ( (lv_durationClause_0_0= ruleRelativeTimeDurationClause ) ) ( (lv_durationClause_1_0= ruleRelativeTimeDurationClause ) )* ) )
-            // InternalDescartesQL.g:4697:1: ( ( (lv_durationClause_0_0= ruleRelativeTimeDurationClause ) ) ( (lv_durationClause_1_0= ruleRelativeTimeDurationClause ) )* )
+            // InternalDescartesQL.g:4891:28: ( ( ( (lv_durationClause_0_0= ruleRelativeTimeDurationClause ) ) ( (lv_durationClause_1_0= ruleRelativeTimeDurationClause ) )* ) )
+            // InternalDescartesQL.g:4892:1: ( ( (lv_durationClause_0_0= ruleRelativeTimeDurationClause ) ) ( (lv_durationClause_1_0= ruleRelativeTimeDurationClause ) )* )
             {
-            // InternalDescartesQL.g:4697:1: ( ( (lv_durationClause_0_0= ruleRelativeTimeDurationClause ) ) ( (lv_durationClause_1_0= ruleRelativeTimeDurationClause ) )* )
-            // InternalDescartesQL.g:4697:2: ( (lv_durationClause_0_0= ruleRelativeTimeDurationClause ) ) ( (lv_durationClause_1_0= ruleRelativeTimeDurationClause ) )*
+            // InternalDescartesQL.g:4892:1: ( ( (lv_durationClause_0_0= ruleRelativeTimeDurationClause ) ) ( (lv_durationClause_1_0= ruleRelativeTimeDurationClause ) )* )
+            // InternalDescartesQL.g:4892:2: ( (lv_durationClause_0_0= ruleRelativeTimeDurationClause ) ) ( (lv_durationClause_1_0= ruleRelativeTimeDurationClause ) )*
             {
-            // InternalDescartesQL.g:4697:2: ( (lv_durationClause_0_0= ruleRelativeTimeDurationClause ) )
-            // InternalDescartesQL.g:4698:1: (lv_durationClause_0_0= ruleRelativeTimeDurationClause )
+            // InternalDescartesQL.g:4892:2: ( (lv_durationClause_0_0= ruleRelativeTimeDurationClause ) )
+            // InternalDescartesQL.g:4893:1: (lv_durationClause_0_0= ruleRelativeTimeDurationClause )
             {
-            // InternalDescartesQL.g:4698:1: (lv_durationClause_0_0= ruleRelativeTimeDurationClause )
-            // InternalDescartesQL.g:4699:3: lv_durationClause_0_0= ruleRelativeTimeDurationClause
+            // InternalDescartesQL.g:4893:1: (lv_durationClause_0_0= ruleRelativeTimeDurationClause )
+            // InternalDescartesQL.g:4894:3: lv_durationClause_0_0= ruleRelativeTimeDurationClause
             {
              
             	        newCompositeNode(grammarAccess.getRelativeTimeClauseAccess().getDurationClauseRelativeTimeDurationClauseParserRuleCall_0_0()); 
             	    
-            pushFollow(FOLLOW_60);
+            pushFollow(FOLLOW_63);
             lv_durationClause_0_0=ruleRelativeTimeDurationClause();
 
             state._fsp--;
@@ -11292,28 +11780,28 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:4715:2: ( (lv_durationClause_1_0= ruleRelativeTimeDurationClause ) )*
-            loop52:
+            // InternalDescartesQL.g:4910:2: ( (lv_durationClause_1_0= ruleRelativeTimeDurationClause ) )*
+            loop59:
             do {
-                int alt52=2;
-                int LA52_0 = input.LA(1);
+                int alt59=2;
+                int LA59_0 = input.LA(1);
 
-                if ( (LA52_0==RULE_INT) ) {
-                    alt52=1;
+                if ( (LA59_0==RULE_INT) ) {
+                    alt59=1;
                 }
 
 
-                switch (alt52) {
+                switch (alt59) {
             	case 1 :
-            	    // InternalDescartesQL.g:4716:1: (lv_durationClause_1_0= ruleRelativeTimeDurationClause )
+            	    // InternalDescartesQL.g:4911:1: (lv_durationClause_1_0= ruleRelativeTimeDurationClause )
             	    {
-            	    // InternalDescartesQL.g:4716:1: (lv_durationClause_1_0= ruleRelativeTimeDurationClause )
-            	    // InternalDescartesQL.g:4717:3: lv_durationClause_1_0= ruleRelativeTimeDurationClause
+            	    // InternalDescartesQL.g:4911:1: (lv_durationClause_1_0= ruleRelativeTimeDurationClause )
+            	    // InternalDescartesQL.g:4912:3: lv_durationClause_1_0= ruleRelativeTimeDurationClause
             	    {
             	     
             	    	        newCompositeNode(grammarAccess.getRelativeTimeClauseAccess().getDurationClauseRelativeTimeDurationClauseParserRuleCall_1_0()); 
             	    	    
-            	    pushFollow(FOLLOW_60);
+            	    pushFollow(FOLLOW_63);
             	    lv_durationClause_1_0=ruleRelativeTimeDurationClause();
 
             	    state._fsp--;
@@ -11337,7 +11825,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
             	    break;
 
             	default :
-            	    break loop52;
+            	    break loop59;
                 }
             } while (true);
 
@@ -11362,7 +11850,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleRelativeTimeDurationClause"
-    // InternalDescartesQL.g:4741:1: entryRuleRelativeTimeDurationClause returns [EObject current=null] : iv_ruleRelativeTimeDurationClause= ruleRelativeTimeDurationClause EOF ;
+    // InternalDescartesQL.g:4936:1: entryRuleRelativeTimeDurationClause returns [EObject current=null] : iv_ruleRelativeTimeDurationClause= ruleRelativeTimeDurationClause EOF ;
     public final EObject entryRuleRelativeTimeDurationClause() throws RecognitionException {
         EObject current = null;
 
@@ -11370,8 +11858,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:4742:2: (iv_ruleRelativeTimeDurationClause= ruleRelativeTimeDurationClause EOF )
-            // InternalDescartesQL.g:4743:2: iv_ruleRelativeTimeDurationClause= ruleRelativeTimeDurationClause EOF
+            // InternalDescartesQL.g:4937:2: (iv_ruleRelativeTimeDurationClause= ruleRelativeTimeDurationClause EOF )
+            // InternalDescartesQL.g:4938:2: iv_ruleRelativeTimeDurationClause= ruleRelativeTimeDurationClause EOF
             {
              newCompositeNode(grammarAccess.getRelativeTimeDurationClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -11398,7 +11886,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleRelativeTimeDurationClause"
-    // InternalDescartesQL.g:4750:1: ruleRelativeTimeDurationClause returns [EObject current=null] : ( ( (lv_duration_0_0= RULE_INT ) ) ( (lv_timeModifier_1_0= ruleTimeModifierType ) ) ) ;
+    // InternalDescartesQL.g:4945:1: ruleRelativeTimeDurationClause returns [EObject current=null] : ( ( (lv_duration_0_0= RULE_INT ) ) ( (lv_timeModifier_1_0= ruleTimeModifierType ) ) ) ;
     public final EObject ruleRelativeTimeDurationClause() throws RecognitionException {
         EObject current = null;
 
@@ -11409,19 +11897,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:4753:28: ( ( ( (lv_duration_0_0= RULE_INT ) ) ( (lv_timeModifier_1_0= ruleTimeModifierType ) ) ) )
-            // InternalDescartesQL.g:4754:1: ( ( (lv_duration_0_0= RULE_INT ) ) ( (lv_timeModifier_1_0= ruleTimeModifierType ) ) )
+            // InternalDescartesQL.g:4948:28: ( ( ( (lv_duration_0_0= RULE_INT ) ) ( (lv_timeModifier_1_0= ruleTimeModifierType ) ) ) )
+            // InternalDescartesQL.g:4949:1: ( ( (lv_duration_0_0= RULE_INT ) ) ( (lv_timeModifier_1_0= ruleTimeModifierType ) ) )
             {
-            // InternalDescartesQL.g:4754:1: ( ( (lv_duration_0_0= RULE_INT ) ) ( (lv_timeModifier_1_0= ruleTimeModifierType ) ) )
-            // InternalDescartesQL.g:4754:2: ( (lv_duration_0_0= RULE_INT ) ) ( (lv_timeModifier_1_0= ruleTimeModifierType ) )
+            // InternalDescartesQL.g:4949:1: ( ( (lv_duration_0_0= RULE_INT ) ) ( (lv_timeModifier_1_0= ruleTimeModifierType ) ) )
+            // InternalDescartesQL.g:4949:2: ( (lv_duration_0_0= RULE_INT ) ) ( (lv_timeModifier_1_0= ruleTimeModifierType ) )
             {
-            // InternalDescartesQL.g:4754:2: ( (lv_duration_0_0= RULE_INT ) )
-            // InternalDescartesQL.g:4755:1: (lv_duration_0_0= RULE_INT )
+            // InternalDescartesQL.g:4949:2: ( (lv_duration_0_0= RULE_INT ) )
+            // InternalDescartesQL.g:4950:1: (lv_duration_0_0= RULE_INT )
             {
-            // InternalDescartesQL.g:4755:1: (lv_duration_0_0= RULE_INT )
-            // InternalDescartesQL.g:4756:3: lv_duration_0_0= RULE_INT
+            // InternalDescartesQL.g:4950:1: (lv_duration_0_0= RULE_INT )
+            // InternalDescartesQL.g:4951:3: lv_duration_0_0= RULE_INT
             {
-            lv_duration_0_0=(Token)match(input,RULE_INT,FOLLOW_64); 
+            lv_duration_0_0=(Token)match(input,RULE_INT,FOLLOW_67); 
 
             			newLeafNode(lv_duration_0_0, grammarAccess.getRelativeTimeDurationClauseAccess().getDurationINTTerminalRuleCall_0_0()); 
             		
@@ -11441,11 +11929,11 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:4772:2: ( (lv_timeModifier_1_0= ruleTimeModifierType ) )
-            // InternalDescartesQL.g:4773:1: (lv_timeModifier_1_0= ruleTimeModifierType )
+            // InternalDescartesQL.g:4967:2: ( (lv_timeModifier_1_0= ruleTimeModifierType ) )
+            // InternalDescartesQL.g:4968:1: (lv_timeModifier_1_0= ruleTimeModifierType )
             {
-            // InternalDescartesQL.g:4773:1: (lv_timeModifier_1_0= ruleTimeModifierType )
-            // InternalDescartesQL.g:4774:3: lv_timeModifier_1_0= ruleTimeModifierType
+            // InternalDescartesQL.g:4968:1: (lv_timeModifier_1_0= ruleTimeModifierType )
+            // InternalDescartesQL.g:4969:3: lv_timeModifier_1_0= ruleTimeModifierType
             {
              
             	        newCompositeNode(grammarAccess.getRelativeTimeDurationClauseAccess().getTimeModifierTimeModifierTypeEnumRuleCall_1_0()); 
@@ -11493,7 +11981,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleWhatIfQuery"
-    // InternalDescartesQL.g:4798:1: entryRuleWhatIfQuery returns [EObject current=null] : iv_ruleWhatIfQuery= ruleWhatIfQuery EOF ;
+    // InternalDescartesQL.g:4993:1: entryRuleWhatIfQuery returns [EObject current=null] : iv_ruleWhatIfQuery= ruleWhatIfQuery EOF ;
     public final EObject entryRuleWhatIfQuery() throws RecognitionException {
         EObject current = null;
 
@@ -11501,8 +11989,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:4799:2: (iv_ruleWhatIfQuery= ruleWhatIfQuery EOF )
-            // InternalDescartesQL.g:4800:2: iv_ruleWhatIfQuery= ruleWhatIfQuery EOF
+            // InternalDescartesQL.g:4994:2: (iv_ruleWhatIfQuery= ruleWhatIfQuery EOF )
+            // InternalDescartesQL.g:4995:2: iv_ruleWhatIfQuery= ruleWhatIfQuery EOF
             {
              newCompositeNode(grammarAccess.getWhatIfQueryRule()); 
             pushFollow(FOLLOW_1);
@@ -11529,7 +12017,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleWhatIfQuery"
-    // InternalDescartesQL.g:4807:1: ruleWhatIfQuery returns [EObject current=null] : (otherlv_0= 'WHAT IF' ( (lv_whatIfVariation_1_0= ruleWhatIfVariation ) ) (otherlv_2= 'SELECT' ( (lv_metricReferenceClauses_3_0= ruleMetricReferenceClauses ) ) ( (lv_forClause_4_0= ruleForClause ) ) )? ( (lv_filteringClause_5_0= ruleFilteringClause ) )? ( (lv_deltaClause_6_0= ruleDeltaClause ) )? ( (lv_usingClause_7_0= ruleUsingClause ) ) ) ;
+    // InternalDescartesQL.g:5002:1: ruleWhatIfQuery returns [EObject current=null] : (otherlv_0= 'WHAT IF' ( (lv_whatIfVariation_1_0= ruleWhatIfVariation ) ) (otherlv_2= 'SELECT' ( (lv_metricReferenceClauses_3_0= ruleMetricReferenceClauses ) ) ( (lv_forClause_4_0= ruleForClause ) ) )? ( (lv_filteringClause_5_0= ruleFilteringClause ) )? ( (lv_deltaClause_6_0= ruleDeltaClause ) )? ( (lv_usingClause_7_0= ruleUsingClause ) ) ) ;
     public final EObject ruleWhatIfQuery() throws RecognitionException {
         EObject current = null;
 
@@ -11551,26 +12039,26 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:4810:28: ( (otherlv_0= 'WHAT IF' ( (lv_whatIfVariation_1_0= ruleWhatIfVariation ) ) (otherlv_2= 'SELECT' ( (lv_metricReferenceClauses_3_0= ruleMetricReferenceClauses ) ) ( (lv_forClause_4_0= ruleForClause ) ) )? ( (lv_filteringClause_5_0= ruleFilteringClause ) )? ( (lv_deltaClause_6_0= ruleDeltaClause ) )? ( (lv_usingClause_7_0= ruleUsingClause ) ) ) )
-            // InternalDescartesQL.g:4811:1: (otherlv_0= 'WHAT IF' ( (lv_whatIfVariation_1_0= ruleWhatIfVariation ) ) (otherlv_2= 'SELECT' ( (lv_metricReferenceClauses_3_0= ruleMetricReferenceClauses ) ) ( (lv_forClause_4_0= ruleForClause ) ) )? ( (lv_filteringClause_5_0= ruleFilteringClause ) )? ( (lv_deltaClause_6_0= ruleDeltaClause ) )? ( (lv_usingClause_7_0= ruleUsingClause ) ) )
+            // InternalDescartesQL.g:5005:28: ( (otherlv_0= 'WHAT IF' ( (lv_whatIfVariation_1_0= ruleWhatIfVariation ) ) (otherlv_2= 'SELECT' ( (lv_metricReferenceClauses_3_0= ruleMetricReferenceClauses ) ) ( (lv_forClause_4_0= ruleForClause ) ) )? ( (lv_filteringClause_5_0= ruleFilteringClause ) )? ( (lv_deltaClause_6_0= ruleDeltaClause ) )? ( (lv_usingClause_7_0= ruleUsingClause ) ) ) )
+            // InternalDescartesQL.g:5006:1: (otherlv_0= 'WHAT IF' ( (lv_whatIfVariation_1_0= ruleWhatIfVariation ) ) (otherlv_2= 'SELECT' ( (lv_metricReferenceClauses_3_0= ruleMetricReferenceClauses ) ) ( (lv_forClause_4_0= ruleForClause ) ) )? ( (lv_filteringClause_5_0= ruleFilteringClause ) )? ( (lv_deltaClause_6_0= ruleDeltaClause ) )? ( (lv_usingClause_7_0= ruleUsingClause ) ) )
             {
-            // InternalDescartesQL.g:4811:1: (otherlv_0= 'WHAT IF' ( (lv_whatIfVariation_1_0= ruleWhatIfVariation ) ) (otherlv_2= 'SELECT' ( (lv_metricReferenceClauses_3_0= ruleMetricReferenceClauses ) ) ( (lv_forClause_4_0= ruleForClause ) ) )? ( (lv_filteringClause_5_0= ruleFilteringClause ) )? ( (lv_deltaClause_6_0= ruleDeltaClause ) )? ( (lv_usingClause_7_0= ruleUsingClause ) ) )
-            // InternalDescartesQL.g:4811:3: otherlv_0= 'WHAT IF' ( (lv_whatIfVariation_1_0= ruleWhatIfVariation ) ) (otherlv_2= 'SELECT' ( (lv_metricReferenceClauses_3_0= ruleMetricReferenceClauses ) ) ( (lv_forClause_4_0= ruleForClause ) ) )? ( (lv_filteringClause_5_0= ruleFilteringClause ) )? ( (lv_deltaClause_6_0= ruleDeltaClause ) )? ( (lv_usingClause_7_0= ruleUsingClause ) )
+            // InternalDescartesQL.g:5006:1: (otherlv_0= 'WHAT IF' ( (lv_whatIfVariation_1_0= ruleWhatIfVariation ) ) (otherlv_2= 'SELECT' ( (lv_metricReferenceClauses_3_0= ruleMetricReferenceClauses ) ) ( (lv_forClause_4_0= ruleForClause ) ) )? ( (lv_filteringClause_5_0= ruleFilteringClause ) )? ( (lv_deltaClause_6_0= ruleDeltaClause ) )? ( (lv_usingClause_7_0= ruleUsingClause ) ) )
+            // InternalDescartesQL.g:5006:3: otherlv_0= 'WHAT IF' ( (lv_whatIfVariation_1_0= ruleWhatIfVariation ) ) (otherlv_2= 'SELECT' ( (lv_metricReferenceClauses_3_0= ruleMetricReferenceClauses ) ) ( (lv_forClause_4_0= ruleForClause ) ) )? ( (lv_filteringClause_5_0= ruleFilteringClause ) )? ( (lv_deltaClause_6_0= ruleDeltaClause ) )? ( (lv_usingClause_7_0= ruleUsingClause ) )
             {
-            otherlv_0=(Token)match(input,65,FOLLOW_36); 
+            otherlv_0=(Token)match(input,69,FOLLOW_39); 
 
                 	newLeafNode(otherlv_0, grammarAccess.getWhatIfQueryAccess().getWHATIFKeyword_0());
                 
-            // InternalDescartesQL.g:4815:1: ( (lv_whatIfVariation_1_0= ruleWhatIfVariation ) )
-            // InternalDescartesQL.g:4816:1: (lv_whatIfVariation_1_0= ruleWhatIfVariation )
+            // InternalDescartesQL.g:5010:1: ( (lv_whatIfVariation_1_0= ruleWhatIfVariation ) )
+            // InternalDescartesQL.g:5011:1: (lv_whatIfVariation_1_0= ruleWhatIfVariation )
             {
-            // InternalDescartesQL.g:4816:1: (lv_whatIfVariation_1_0= ruleWhatIfVariation )
-            // InternalDescartesQL.g:4817:3: lv_whatIfVariation_1_0= ruleWhatIfVariation
+            // InternalDescartesQL.g:5011:1: (lv_whatIfVariation_1_0= ruleWhatIfVariation )
+            // InternalDescartesQL.g:5012:3: lv_whatIfVariation_1_0= ruleWhatIfVariation
             {
              
             	        newCompositeNode(grammarAccess.getWhatIfQueryAccess().getWhatIfVariationWhatIfVariationParserRuleCall_1_0()); 
             	    
-            pushFollow(FOLLOW_65);
+            pushFollow(FOLLOW_68);
             lv_whatIfVariation_1_0=ruleWhatIfVariation();
 
             state._fsp--;
@@ -11592,31 +12080,31 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:4833:2: (otherlv_2= 'SELECT' ( (lv_metricReferenceClauses_3_0= ruleMetricReferenceClauses ) ) ( (lv_forClause_4_0= ruleForClause ) ) )?
-            int alt53=2;
-            int LA53_0 = input.LA(1);
+            // InternalDescartesQL.g:5028:2: (otherlv_2= 'SELECT' ( (lv_metricReferenceClauses_3_0= ruleMetricReferenceClauses ) ) ( (lv_forClause_4_0= ruleForClause ) ) )?
+            int alt60=2;
+            int LA60_0 = input.LA(1);
 
-            if ( (LA53_0==35) ) {
-                alt53=1;
+            if ( (LA60_0==39) ) {
+                alt60=1;
             }
-            switch (alt53) {
+            switch (alt60) {
                 case 1 :
-                    // InternalDescartesQL.g:4833:4: otherlv_2= 'SELECT' ( (lv_metricReferenceClauses_3_0= ruleMetricReferenceClauses ) ) ( (lv_forClause_4_0= ruleForClause ) )
+                    // InternalDescartesQL.g:5028:4: otherlv_2= 'SELECT' ( (lv_metricReferenceClauses_3_0= ruleMetricReferenceClauses ) ) ( (lv_forClause_4_0= ruleForClause ) )
                     {
-                    otherlv_2=(Token)match(input,35,FOLLOW_13); 
+                    otherlv_2=(Token)match(input,39,FOLLOW_17); 
 
                         	newLeafNode(otherlv_2, grammarAccess.getWhatIfQueryAccess().getSELECTKeyword_2_0());
                         
-                    // InternalDescartesQL.g:4837:1: ( (lv_metricReferenceClauses_3_0= ruleMetricReferenceClauses ) )
-                    // InternalDescartesQL.g:4838:1: (lv_metricReferenceClauses_3_0= ruleMetricReferenceClauses )
+                    // InternalDescartesQL.g:5032:1: ( (lv_metricReferenceClauses_3_0= ruleMetricReferenceClauses ) )
+                    // InternalDescartesQL.g:5033:1: (lv_metricReferenceClauses_3_0= ruleMetricReferenceClauses )
                     {
-                    // InternalDescartesQL.g:4838:1: (lv_metricReferenceClauses_3_0= ruleMetricReferenceClauses )
-                    // InternalDescartesQL.g:4839:3: lv_metricReferenceClauses_3_0= ruleMetricReferenceClauses
+                    // InternalDescartesQL.g:5033:1: (lv_metricReferenceClauses_3_0= ruleMetricReferenceClauses )
+                    // InternalDescartesQL.g:5034:3: lv_metricReferenceClauses_3_0= ruleMetricReferenceClauses
                     {
                      
                     	        newCompositeNode(grammarAccess.getWhatIfQueryAccess().getMetricReferenceClausesMetricReferenceClausesParserRuleCall_2_1_0()); 
                     	    
-                    pushFollow(FOLLOW_32);
+                    pushFollow(FOLLOW_35);
                     lv_metricReferenceClauses_3_0=ruleMetricReferenceClauses();
 
                     state._fsp--;
@@ -11638,16 +12126,16 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
                     }
 
-                    // InternalDescartesQL.g:4855:2: ( (lv_forClause_4_0= ruleForClause ) )
-                    // InternalDescartesQL.g:4856:1: (lv_forClause_4_0= ruleForClause )
+                    // InternalDescartesQL.g:5050:2: ( (lv_forClause_4_0= ruleForClause ) )
+                    // InternalDescartesQL.g:5051:1: (lv_forClause_4_0= ruleForClause )
                     {
-                    // InternalDescartesQL.g:4856:1: (lv_forClause_4_0= ruleForClause )
-                    // InternalDescartesQL.g:4857:3: lv_forClause_4_0= ruleForClause
+                    // InternalDescartesQL.g:5051:1: (lv_forClause_4_0= ruleForClause )
+                    // InternalDescartesQL.g:5052:3: lv_forClause_4_0= ruleForClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getWhatIfQueryAccess().getForClauseForClauseParserRuleCall_2_2_0()); 
                     	    
-                    pushFollow(FOLLOW_66);
+                    pushFollow(FOLLOW_69);
                     lv_forClause_4_0=ruleForClause();
 
                     state._fsp--;
@@ -11675,24 +12163,24 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:4873:4: ( (lv_filteringClause_5_0= ruleFilteringClause ) )?
-            int alt54=2;
-            int LA54_0 = input.LA(1);
+            // InternalDescartesQL.g:5068:4: ( (lv_filteringClause_5_0= ruleFilteringClause ) )?
+            int alt61=2;
+            int LA61_0 = input.LA(1);
 
-            if ( (LA54_0==67) ) {
-                alt54=1;
+            if ( (LA61_0==71) ) {
+                alt61=1;
             }
-            switch (alt54) {
+            switch (alt61) {
                 case 1 :
-                    // InternalDescartesQL.g:4874:1: (lv_filteringClause_5_0= ruleFilteringClause )
+                    // InternalDescartesQL.g:5069:1: (lv_filteringClause_5_0= ruleFilteringClause )
                     {
-                    // InternalDescartesQL.g:4874:1: (lv_filteringClause_5_0= ruleFilteringClause )
-                    // InternalDescartesQL.g:4875:3: lv_filteringClause_5_0= ruleFilteringClause
+                    // InternalDescartesQL.g:5069:1: (lv_filteringClause_5_0= ruleFilteringClause )
+                    // InternalDescartesQL.g:5070:3: lv_filteringClause_5_0= ruleFilteringClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getWhatIfQueryAccess().getFilteringClauseFilteringClauseParserRuleCall_3_0()); 
                     	    
-                    pushFollow(FOLLOW_67);
+                    pushFollow(FOLLOW_70);
                     lv_filteringClause_5_0=ruleFilteringClause();
 
                     state._fsp--;
@@ -11717,19 +12205,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:4891:3: ( (lv_deltaClause_6_0= ruleDeltaClause ) )?
-            int alt55=2;
-            int LA55_0 = input.LA(1);
+            // InternalDescartesQL.g:5086:3: ( (lv_deltaClause_6_0= ruleDeltaClause ) )?
+            int alt62=2;
+            int LA62_0 = input.LA(1);
 
-            if ( (LA55_0==66) ) {
-                alt55=1;
+            if ( (LA62_0==70) ) {
+                alt62=1;
             }
-            switch (alt55) {
+            switch (alt62) {
                 case 1 :
-                    // InternalDescartesQL.g:4892:1: (lv_deltaClause_6_0= ruleDeltaClause )
+                    // InternalDescartesQL.g:5087:1: (lv_deltaClause_6_0= ruleDeltaClause )
                     {
-                    // InternalDescartesQL.g:4892:1: (lv_deltaClause_6_0= ruleDeltaClause )
-                    // InternalDescartesQL.g:4893:3: lv_deltaClause_6_0= ruleDeltaClause
+                    // InternalDescartesQL.g:5087:1: (lv_deltaClause_6_0= ruleDeltaClause )
+                    // InternalDescartesQL.g:5088:3: lv_deltaClause_6_0= ruleDeltaClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getWhatIfQueryAccess().getDeltaClauseDeltaClauseParserRuleCall_4_0()); 
@@ -11759,11 +12247,11 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:4909:3: ( (lv_usingClause_7_0= ruleUsingClause ) )
-            // InternalDescartesQL.g:4910:1: (lv_usingClause_7_0= ruleUsingClause )
+            // InternalDescartesQL.g:5104:3: ( (lv_usingClause_7_0= ruleUsingClause ) )
+            // InternalDescartesQL.g:5105:1: (lv_usingClause_7_0= ruleUsingClause )
             {
-            // InternalDescartesQL.g:4910:1: (lv_usingClause_7_0= ruleUsingClause )
-            // InternalDescartesQL.g:4911:3: lv_usingClause_7_0= ruleUsingClause
+            // InternalDescartesQL.g:5105:1: (lv_usingClause_7_0= ruleUsingClause )
+            // InternalDescartesQL.g:5106:3: lv_usingClause_7_0= ruleUsingClause
             {
              
             	        newCompositeNode(grammarAccess.getWhatIfQueryAccess().getUsingClauseUsingClauseParserRuleCall_5_0()); 
@@ -11811,7 +12299,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleDeltaClause"
-    // InternalDescartesQL.g:4935:1: entryRuleDeltaClause returns [String current=null] : iv_ruleDeltaClause= ruleDeltaClause EOF ;
+    // InternalDescartesQL.g:5130:1: entryRuleDeltaClause returns [String current=null] : iv_ruleDeltaClause= ruleDeltaClause EOF ;
     public final String entryRuleDeltaClause() throws RecognitionException {
         String current = null;
 
@@ -11819,8 +12307,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:4936:2: (iv_ruleDeltaClause= ruleDeltaClause EOF )
-            // InternalDescartesQL.g:4937:2: iv_ruleDeltaClause= ruleDeltaClause EOF
+            // InternalDescartesQL.g:5131:2: (iv_ruleDeltaClause= ruleDeltaClause EOF )
+            // InternalDescartesQL.g:5132:2: iv_ruleDeltaClause= ruleDeltaClause EOF
             {
              newCompositeNode(grammarAccess.getDeltaClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -11847,7 +12335,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleDeltaClause"
-    // InternalDescartesQL.g:4944:1: ruleDeltaClause returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : kw= 'DELTA' ;
+    // InternalDescartesQL.g:5139:1: ruleDeltaClause returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : kw= 'DELTA' ;
     public final AntlrDatatypeRuleToken ruleDeltaClause() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -11856,10 +12344,10 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:4947:28: (kw= 'DELTA' )
-            // InternalDescartesQL.g:4949:2: kw= 'DELTA'
+            // InternalDescartesQL.g:5142:28: (kw= 'DELTA' )
+            // InternalDescartesQL.g:5144:2: kw= 'DELTA'
             {
-            kw=(Token)match(input,66,FOLLOW_2); 
+            kw=(Token)match(input,70,FOLLOW_2); 
 
                     current.merge(kw);
                     newLeafNode(kw, grammarAccess.getDeltaClauseAccess().getDELTAKeyword()); 
@@ -11882,7 +12370,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleWhatIfVariation"
-    // InternalDescartesQL.g:4962:1: entryRuleWhatIfVariation returns [EObject current=null] : iv_ruleWhatIfVariation= ruleWhatIfVariation EOF ;
+    // InternalDescartesQL.g:5157:1: entryRuleWhatIfVariation returns [EObject current=null] : iv_ruleWhatIfVariation= ruleWhatIfVariation EOF ;
     public final EObject entryRuleWhatIfVariation() throws RecognitionException {
         EObject current = null;
 
@@ -11890,8 +12378,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:4963:2: (iv_ruleWhatIfVariation= ruleWhatIfVariation EOF )
-            // InternalDescartesQL.g:4964:2: iv_ruleWhatIfVariation= ruleWhatIfVariation EOF
+            // InternalDescartesQL.g:5158:2: (iv_ruleWhatIfVariation= ruleWhatIfVariation EOF )
+            // InternalDescartesQL.g:5159:2: iv_ruleWhatIfVariation= ruleWhatIfVariation EOF
             {
              newCompositeNode(grammarAccess.getWhatIfVariationRule()); 
             pushFollow(FOLLOW_1);
@@ -11918,7 +12406,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleWhatIfVariation"
-    // InternalDescartesQL.g:4971:1: ruleWhatIfVariation returns [EObject current=null] : ( ( (lv_whatIfVariationClause_0_0= ruleWhatIfVariationClause ) ) (otherlv_1= ',' ( (lv_whatIfVariationClause_2_0= ruleWhatIfVariationClause ) ) )* ) ;
+    // InternalDescartesQL.g:5166:1: ruleWhatIfVariation returns [EObject current=null] : ( ( (lv_whatIfVariationClause_0_0= ruleWhatIfVariationClause ) ) (otherlv_1= ',' ( (lv_whatIfVariationClause_2_0= ruleWhatIfVariationClause ) ) )* ) ;
     public final EObject ruleWhatIfVariation() throws RecognitionException {
         EObject current = null;
 
@@ -11931,22 +12419,22 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:4974:28: ( ( ( (lv_whatIfVariationClause_0_0= ruleWhatIfVariationClause ) ) (otherlv_1= ',' ( (lv_whatIfVariationClause_2_0= ruleWhatIfVariationClause ) ) )* ) )
-            // InternalDescartesQL.g:4975:1: ( ( (lv_whatIfVariationClause_0_0= ruleWhatIfVariationClause ) ) (otherlv_1= ',' ( (lv_whatIfVariationClause_2_0= ruleWhatIfVariationClause ) ) )* )
+            // InternalDescartesQL.g:5169:28: ( ( ( (lv_whatIfVariationClause_0_0= ruleWhatIfVariationClause ) ) (otherlv_1= ',' ( (lv_whatIfVariationClause_2_0= ruleWhatIfVariationClause ) ) )* ) )
+            // InternalDescartesQL.g:5170:1: ( ( (lv_whatIfVariationClause_0_0= ruleWhatIfVariationClause ) ) (otherlv_1= ',' ( (lv_whatIfVariationClause_2_0= ruleWhatIfVariationClause ) ) )* )
             {
-            // InternalDescartesQL.g:4975:1: ( ( (lv_whatIfVariationClause_0_0= ruleWhatIfVariationClause ) ) (otherlv_1= ',' ( (lv_whatIfVariationClause_2_0= ruleWhatIfVariationClause ) ) )* )
-            // InternalDescartesQL.g:4975:2: ( (lv_whatIfVariationClause_0_0= ruleWhatIfVariationClause ) ) (otherlv_1= ',' ( (lv_whatIfVariationClause_2_0= ruleWhatIfVariationClause ) ) )*
+            // InternalDescartesQL.g:5170:1: ( ( (lv_whatIfVariationClause_0_0= ruleWhatIfVariationClause ) ) (otherlv_1= ',' ( (lv_whatIfVariationClause_2_0= ruleWhatIfVariationClause ) ) )* )
+            // InternalDescartesQL.g:5170:2: ( (lv_whatIfVariationClause_0_0= ruleWhatIfVariationClause ) ) (otherlv_1= ',' ( (lv_whatIfVariationClause_2_0= ruleWhatIfVariationClause ) ) )*
             {
-            // InternalDescartesQL.g:4975:2: ( (lv_whatIfVariationClause_0_0= ruleWhatIfVariationClause ) )
-            // InternalDescartesQL.g:4976:1: (lv_whatIfVariationClause_0_0= ruleWhatIfVariationClause )
+            // InternalDescartesQL.g:5170:2: ( (lv_whatIfVariationClause_0_0= ruleWhatIfVariationClause ) )
+            // InternalDescartesQL.g:5171:1: (lv_whatIfVariationClause_0_0= ruleWhatIfVariationClause )
             {
-            // InternalDescartesQL.g:4976:1: (lv_whatIfVariationClause_0_0= ruleWhatIfVariationClause )
-            // InternalDescartesQL.g:4977:3: lv_whatIfVariationClause_0_0= ruleWhatIfVariationClause
+            // InternalDescartesQL.g:5171:1: (lv_whatIfVariationClause_0_0= ruleWhatIfVariationClause )
+            // InternalDescartesQL.g:5172:3: lv_whatIfVariationClause_0_0= ruleWhatIfVariationClause
             {
              
             	        newCompositeNode(grammarAccess.getWhatIfVariationAccess().getWhatIfVariationClauseWhatIfVariationClauseParserRuleCall_0_0()); 
             	    
-            pushFollow(FOLLOW_8);
+            pushFollow(FOLLOW_12);
             lv_whatIfVariationClause_0_0=ruleWhatIfVariationClause();
 
             state._fsp--;
@@ -11968,35 +12456,35 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:4993:2: (otherlv_1= ',' ( (lv_whatIfVariationClause_2_0= ruleWhatIfVariationClause ) ) )*
-            loop56:
+            // InternalDescartesQL.g:5188:2: (otherlv_1= ',' ( (lv_whatIfVariationClause_2_0= ruleWhatIfVariationClause ) ) )*
+            loop63:
             do {
-                int alt56=2;
-                int LA56_0 = input.LA(1);
+                int alt63=2;
+                int LA63_0 = input.LA(1);
 
-                if ( (LA56_0==16) ) {
-                    alt56=1;
+                if ( (LA63_0==20) ) {
+                    alt63=1;
                 }
 
 
-                switch (alt56) {
+                switch (alt63) {
             	case 1 :
-            	    // InternalDescartesQL.g:4993:4: otherlv_1= ',' ( (lv_whatIfVariationClause_2_0= ruleWhatIfVariationClause ) )
+            	    // InternalDescartesQL.g:5188:4: otherlv_1= ',' ( (lv_whatIfVariationClause_2_0= ruleWhatIfVariationClause ) )
             	    {
-            	    otherlv_1=(Token)match(input,16,FOLLOW_36); 
+            	    otherlv_1=(Token)match(input,20,FOLLOW_39); 
 
             	        	newLeafNode(otherlv_1, grammarAccess.getWhatIfVariationAccess().getCommaKeyword_1_0());
             	        
-            	    // InternalDescartesQL.g:4997:1: ( (lv_whatIfVariationClause_2_0= ruleWhatIfVariationClause ) )
-            	    // InternalDescartesQL.g:4998:1: (lv_whatIfVariationClause_2_0= ruleWhatIfVariationClause )
+            	    // InternalDescartesQL.g:5192:1: ( (lv_whatIfVariationClause_2_0= ruleWhatIfVariationClause ) )
+            	    // InternalDescartesQL.g:5193:1: (lv_whatIfVariationClause_2_0= ruleWhatIfVariationClause )
             	    {
-            	    // InternalDescartesQL.g:4998:1: (lv_whatIfVariationClause_2_0= ruleWhatIfVariationClause )
-            	    // InternalDescartesQL.g:4999:3: lv_whatIfVariationClause_2_0= ruleWhatIfVariationClause
+            	    // InternalDescartesQL.g:5193:1: (lv_whatIfVariationClause_2_0= ruleWhatIfVariationClause )
+            	    // InternalDescartesQL.g:5194:3: lv_whatIfVariationClause_2_0= ruleWhatIfVariationClause
             	    {
             	     
             	    	        newCompositeNode(grammarAccess.getWhatIfVariationAccess().getWhatIfVariationClauseWhatIfVariationClauseParserRuleCall_1_1_0()); 
             	    	    
-            	    pushFollow(FOLLOW_8);
+            	    pushFollow(FOLLOW_12);
             	    lv_whatIfVariationClause_2_0=ruleWhatIfVariationClause();
 
             	    state._fsp--;
@@ -12023,7 +12511,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
             	    break;
 
             	default :
-            	    break loop56;
+            	    break loop63;
                 }
             } while (true);
 
@@ -12048,7 +12536,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleFilteringClause"
-    // InternalDescartesQL.g:5023:1: entryRuleFilteringClause returns [EObject current=null] : iv_ruleFilteringClause= ruleFilteringClause EOF ;
+    // InternalDescartesQL.g:5218:1: entryRuleFilteringClause returns [EObject current=null] : iv_ruleFilteringClause= ruleFilteringClause EOF ;
     public final EObject entryRuleFilteringClause() throws RecognitionException {
         EObject current = null;
 
@@ -12056,8 +12544,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:5024:2: (iv_ruleFilteringClause= ruleFilteringClause EOF )
-            // InternalDescartesQL.g:5025:2: iv_ruleFilteringClause= ruleFilteringClause EOF
+            // InternalDescartesQL.g:5219:2: (iv_ruleFilteringClause= ruleFilteringClause EOF )
+            // InternalDescartesQL.g:5220:2: iv_ruleFilteringClause= ruleFilteringClause EOF
             {
              newCompositeNode(grammarAccess.getFilteringClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -12084,7 +12572,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleFilteringClause"
-    // InternalDescartesQL.g:5032:1: ruleFilteringClause returns [EObject current=null] : (otherlv_0= 'FILTERING' ( ( (lv_filteringRule_1_0= ruleFilteringRule ) ) | ( (lv_filteringStrategy_2_0= ruleFilteringStrategy ) ) ) ) ;
+    // InternalDescartesQL.g:5227:1: ruleFilteringClause returns [EObject current=null] : (otherlv_0= 'FILTERING' ( ( (lv_filteringRule_1_0= ruleFilteringRule ) ) | ( (lv_filteringStrategy_2_0= ruleFilteringStrategy ) ) ) ) ;
     public final EObject ruleFilteringClause() throws RecognitionException {
         EObject current = null;
 
@@ -12097,41 +12585,41 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:5035:28: ( (otherlv_0= 'FILTERING' ( ( (lv_filteringRule_1_0= ruleFilteringRule ) ) | ( (lv_filteringStrategy_2_0= ruleFilteringStrategy ) ) ) ) )
-            // InternalDescartesQL.g:5036:1: (otherlv_0= 'FILTERING' ( ( (lv_filteringRule_1_0= ruleFilteringRule ) ) | ( (lv_filteringStrategy_2_0= ruleFilteringStrategy ) ) ) )
+            // InternalDescartesQL.g:5230:28: ( (otherlv_0= 'FILTERING' ( ( (lv_filteringRule_1_0= ruleFilteringRule ) ) | ( (lv_filteringStrategy_2_0= ruleFilteringStrategy ) ) ) ) )
+            // InternalDescartesQL.g:5231:1: (otherlv_0= 'FILTERING' ( ( (lv_filteringRule_1_0= ruleFilteringRule ) ) | ( (lv_filteringStrategy_2_0= ruleFilteringStrategy ) ) ) )
             {
-            // InternalDescartesQL.g:5036:1: (otherlv_0= 'FILTERING' ( ( (lv_filteringRule_1_0= ruleFilteringRule ) ) | ( (lv_filteringStrategy_2_0= ruleFilteringStrategy ) ) ) )
-            // InternalDescartesQL.g:5036:3: otherlv_0= 'FILTERING' ( ( (lv_filteringRule_1_0= ruleFilteringRule ) ) | ( (lv_filteringStrategy_2_0= ruleFilteringStrategy ) ) )
+            // InternalDescartesQL.g:5231:1: (otherlv_0= 'FILTERING' ( ( (lv_filteringRule_1_0= ruleFilteringRule ) ) | ( (lv_filteringStrategy_2_0= ruleFilteringStrategy ) ) ) )
+            // InternalDescartesQL.g:5231:3: otherlv_0= 'FILTERING' ( ( (lv_filteringRule_1_0= ruleFilteringRule ) ) | ( (lv_filteringStrategy_2_0= ruleFilteringStrategy ) ) )
             {
-            otherlv_0=(Token)match(input,67,FOLLOW_68); 
+            otherlv_0=(Token)match(input,71,FOLLOW_71); 
 
                 	newLeafNode(otherlv_0, grammarAccess.getFilteringClauseAccess().getFILTERINGKeyword_0());
                 
-            // InternalDescartesQL.g:5040:1: ( ( (lv_filteringRule_1_0= ruleFilteringRule ) ) | ( (lv_filteringStrategy_2_0= ruleFilteringStrategy ) ) )
-            int alt57=2;
-            int LA57_0 = input.LA(1);
+            // InternalDescartesQL.g:5235:1: ( ( (lv_filteringRule_1_0= ruleFilteringRule ) ) | ( (lv_filteringStrategy_2_0= ruleFilteringStrategy ) ) )
+            int alt64=2;
+            int LA64_0 = input.LA(1);
 
-            if ( ((LA57_0>=RULE_INT && LA57_0<=RULE_DOUBLE)) ) {
-                alt57=1;
+            if ( (LA64_0==RULE_DOUBLE||LA64_0==RULE_INT) ) {
+                alt64=1;
             }
-            else if ( (LA57_0==RULE_STRING) ) {
-                alt57=2;
+            else if ( (LA64_0==RULE_STRING) ) {
+                alt64=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("", 57, 0, input);
+                    new NoViableAltException("", 64, 0, input);
 
                 throw nvae;
             }
-            switch (alt57) {
+            switch (alt64) {
                 case 1 :
-                    // InternalDescartesQL.g:5040:2: ( (lv_filteringRule_1_0= ruleFilteringRule ) )
+                    // InternalDescartesQL.g:5235:2: ( (lv_filteringRule_1_0= ruleFilteringRule ) )
                     {
-                    // InternalDescartesQL.g:5040:2: ( (lv_filteringRule_1_0= ruleFilteringRule ) )
-                    // InternalDescartesQL.g:5041:1: (lv_filteringRule_1_0= ruleFilteringRule )
+                    // InternalDescartesQL.g:5235:2: ( (lv_filteringRule_1_0= ruleFilteringRule ) )
+                    // InternalDescartesQL.g:5236:1: (lv_filteringRule_1_0= ruleFilteringRule )
                     {
-                    // InternalDescartesQL.g:5041:1: (lv_filteringRule_1_0= ruleFilteringRule )
-                    // InternalDescartesQL.g:5042:3: lv_filteringRule_1_0= ruleFilteringRule
+                    // InternalDescartesQL.g:5236:1: (lv_filteringRule_1_0= ruleFilteringRule )
+                    // InternalDescartesQL.g:5237:3: lv_filteringRule_1_0= ruleFilteringRule
                     {
                      
                     	        newCompositeNode(grammarAccess.getFilteringClauseAccess().getFilteringRuleFilteringRuleParserRuleCall_1_0_0()); 
@@ -12162,13 +12650,13 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 2 :
-                    // InternalDescartesQL.g:5059:6: ( (lv_filteringStrategy_2_0= ruleFilteringStrategy ) )
+                    // InternalDescartesQL.g:5254:6: ( (lv_filteringStrategy_2_0= ruleFilteringStrategy ) )
                     {
-                    // InternalDescartesQL.g:5059:6: ( (lv_filteringStrategy_2_0= ruleFilteringStrategy ) )
-                    // InternalDescartesQL.g:5060:1: (lv_filteringStrategy_2_0= ruleFilteringStrategy )
+                    // InternalDescartesQL.g:5254:6: ( (lv_filteringStrategy_2_0= ruleFilteringStrategy ) )
+                    // InternalDescartesQL.g:5255:1: (lv_filteringStrategy_2_0= ruleFilteringStrategy )
                     {
-                    // InternalDescartesQL.g:5060:1: (lv_filteringStrategy_2_0= ruleFilteringStrategy )
-                    // InternalDescartesQL.g:5061:3: lv_filteringStrategy_2_0= ruleFilteringStrategy
+                    // InternalDescartesQL.g:5255:1: (lv_filteringStrategy_2_0= ruleFilteringStrategy )
+                    // InternalDescartesQL.g:5256:3: lv_filteringStrategy_2_0= ruleFilteringStrategy
                     {
                      
                     	        newCompositeNode(grammarAccess.getFilteringClauseAccess().getFilteringStrategyFilteringStrategyParserRuleCall_1_1_0()); 
@@ -12222,7 +12710,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleFilteringStrategy"
-    // InternalDescartesQL.g:5085:1: entryRuleFilteringStrategy returns [EObject current=null] : iv_ruleFilteringStrategy= ruleFilteringStrategy EOF ;
+    // InternalDescartesQL.g:5280:1: entryRuleFilteringStrategy returns [EObject current=null] : iv_ruleFilteringStrategy= ruleFilteringStrategy EOF ;
     public final EObject entryRuleFilteringStrategy() throws RecognitionException {
         EObject current = null;
 
@@ -12230,8 +12718,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:5086:2: (iv_ruleFilteringStrategy= ruleFilteringStrategy EOF )
-            // InternalDescartesQL.g:5087:2: iv_ruleFilteringStrategy= ruleFilteringStrategy EOF
+            // InternalDescartesQL.g:5281:2: (iv_ruleFilteringStrategy= ruleFilteringStrategy EOF )
+            // InternalDescartesQL.g:5282:2: iv_ruleFilteringStrategy= ruleFilteringStrategy EOF
             {
              newCompositeNode(grammarAccess.getFilteringStrategyRule()); 
             pushFollow(FOLLOW_1);
@@ -12258,7 +12746,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleFilteringStrategy"
-    // InternalDescartesQL.g:5094:1: ruleFilteringStrategy returns [EObject current=null] : ( (lv_filteringStrategy_0_0= RULE_STRING ) ) ;
+    // InternalDescartesQL.g:5289:1: ruleFilteringStrategy returns [EObject current=null] : ( (lv_filteringStrategy_0_0= RULE_STRING ) ) ;
     public final EObject ruleFilteringStrategy() throws RecognitionException {
         EObject current = null;
 
@@ -12267,14 +12755,14 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:5097:28: ( ( (lv_filteringStrategy_0_0= RULE_STRING ) ) )
-            // InternalDescartesQL.g:5098:1: ( (lv_filteringStrategy_0_0= RULE_STRING ) )
+            // InternalDescartesQL.g:5292:28: ( ( (lv_filteringStrategy_0_0= RULE_STRING ) ) )
+            // InternalDescartesQL.g:5293:1: ( (lv_filteringStrategy_0_0= RULE_STRING ) )
             {
-            // InternalDescartesQL.g:5098:1: ( (lv_filteringStrategy_0_0= RULE_STRING ) )
-            // InternalDescartesQL.g:5099:1: (lv_filteringStrategy_0_0= RULE_STRING )
+            // InternalDescartesQL.g:5293:1: ( (lv_filteringStrategy_0_0= RULE_STRING ) )
+            // InternalDescartesQL.g:5294:1: (lv_filteringStrategy_0_0= RULE_STRING )
             {
-            // InternalDescartesQL.g:5099:1: (lv_filteringStrategy_0_0= RULE_STRING )
-            // InternalDescartesQL.g:5100:3: lv_filteringStrategy_0_0= RULE_STRING
+            // InternalDescartesQL.g:5294:1: (lv_filteringStrategy_0_0= RULE_STRING )
+            // InternalDescartesQL.g:5295:3: lv_filteringStrategy_0_0= RULE_STRING
             {
             lv_filteringStrategy_0_0=(Token)match(input,RULE_STRING,FOLLOW_2); 
 
@@ -12314,7 +12802,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleFilteringRule"
-    // InternalDescartesQL.g:5124:1: entryRuleFilteringRule returns [EObject current=null] : iv_ruleFilteringRule= ruleFilteringRule EOF ;
+    // InternalDescartesQL.g:5319:1: entryRuleFilteringRule returns [EObject current=null] : iv_ruleFilteringRule= ruleFilteringRule EOF ;
     public final EObject entryRuleFilteringRule() throws RecognitionException {
         EObject current = null;
 
@@ -12322,8 +12810,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:5125:2: (iv_ruleFilteringRule= ruleFilteringRule EOF )
-            // InternalDescartesQL.g:5126:2: iv_ruleFilteringRule= ruleFilteringRule EOF
+            // InternalDescartesQL.g:5320:2: (iv_ruleFilteringRule= ruleFilteringRule EOF )
+            // InternalDescartesQL.g:5321:2: iv_ruleFilteringRule= ruleFilteringRule EOF
             {
              newCompositeNode(grammarAccess.getFilteringRuleRule()); 
             pushFollow(FOLLOW_1);
@@ -12350,7 +12838,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleFilteringRule"
-    // InternalDescartesQL.g:5133:1: ruleFilteringRule returns [EObject current=null] : ( ( (lv_filteringValue_0_0= ruleVariableValue ) ) ( (lv_modifier_1_0= '%' ) )? ) ;
+    // InternalDescartesQL.g:5328:1: ruleFilteringRule returns [EObject current=null] : ( ( (lv_filteringValue_0_0= ruleVariableValue ) ) ( (lv_modifier_1_0= '%' ) )? ) ;
     public final EObject ruleFilteringRule() throws RecognitionException {
         EObject current = null;
 
@@ -12361,22 +12849,22 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:5136:28: ( ( ( (lv_filteringValue_0_0= ruleVariableValue ) ) ( (lv_modifier_1_0= '%' ) )? ) )
-            // InternalDescartesQL.g:5137:1: ( ( (lv_filteringValue_0_0= ruleVariableValue ) ) ( (lv_modifier_1_0= '%' ) )? )
+            // InternalDescartesQL.g:5331:28: ( ( ( (lv_filteringValue_0_0= ruleVariableValue ) ) ( (lv_modifier_1_0= '%' ) )? ) )
+            // InternalDescartesQL.g:5332:1: ( ( (lv_filteringValue_0_0= ruleVariableValue ) ) ( (lv_modifier_1_0= '%' ) )? )
             {
-            // InternalDescartesQL.g:5137:1: ( ( (lv_filteringValue_0_0= ruleVariableValue ) ) ( (lv_modifier_1_0= '%' ) )? )
-            // InternalDescartesQL.g:5137:2: ( (lv_filteringValue_0_0= ruleVariableValue ) ) ( (lv_modifier_1_0= '%' ) )?
+            // InternalDescartesQL.g:5332:1: ( ( (lv_filteringValue_0_0= ruleVariableValue ) ) ( (lv_modifier_1_0= '%' ) )? )
+            // InternalDescartesQL.g:5332:2: ( (lv_filteringValue_0_0= ruleVariableValue ) ) ( (lv_modifier_1_0= '%' ) )?
             {
-            // InternalDescartesQL.g:5137:2: ( (lv_filteringValue_0_0= ruleVariableValue ) )
-            // InternalDescartesQL.g:5138:1: (lv_filteringValue_0_0= ruleVariableValue )
+            // InternalDescartesQL.g:5332:2: ( (lv_filteringValue_0_0= ruleVariableValue ) )
+            // InternalDescartesQL.g:5333:1: (lv_filteringValue_0_0= ruleVariableValue )
             {
-            // InternalDescartesQL.g:5138:1: (lv_filteringValue_0_0= ruleVariableValue )
-            // InternalDescartesQL.g:5139:3: lv_filteringValue_0_0= ruleVariableValue
+            // InternalDescartesQL.g:5333:1: (lv_filteringValue_0_0= ruleVariableValue )
+            // InternalDescartesQL.g:5334:3: lv_filteringValue_0_0= ruleVariableValue
             {
              
             	        newCompositeNode(grammarAccess.getFilteringRuleAccess().getFilteringValueVariableValueParserRuleCall_0_0()); 
             	    
-            pushFollow(FOLLOW_69);
+            pushFollow(FOLLOW_72);
             lv_filteringValue_0_0=ruleVariableValue();
 
             state._fsp--;
@@ -12398,21 +12886,21 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:5155:2: ( (lv_modifier_1_0= '%' ) )?
-            int alt58=2;
-            int LA58_0 = input.LA(1);
+            // InternalDescartesQL.g:5350:2: ( (lv_modifier_1_0= '%' ) )?
+            int alt65=2;
+            int LA65_0 = input.LA(1);
 
-            if ( (LA58_0==68) ) {
-                alt58=1;
+            if ( (LA65_0==72) ) {
+                alt65=1;
             }
-            switch (alt58) {
+            switch (alt65) {
                 case 1 :
-                    // InternalDescartesQL.g:5156:1: (lv_modifier_1_0= '%' )
+                    // InternalDescartesQL.g:5351:1: (lv_modifier_1_0= '%' )
                     {
-                    // InternalDescartesQL.g:5156:1: (lv_modifier_1_0= '%' )
-                    // InternalDescartesQL.g:5157:3: lv_modifier_1_0= '%'
+                    // InternalDescartesQL.g:5351:1: (lv_modifier_1_0= '%' )
+                    // InternalDescartesQL.g:5352:3: lv_modifier_1_0= '%'
                     {
-                    lv_modifier_1_0=(Token)match(input,68,FOLLOW_2); 
+                    lv_modifier_1_0=(Token)match(input,72,FOLLOW_2); 
 
                             newLeafNode(lv_modifier_1_0, grammarAccess.getFilteringRuleAccess().getModifierPercentSignKeyword_1_0());
                         
@@ -12452,7 +12940,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleWhatIfVariationClause"
-    // InternalDescartesQL.g:5178:1: entryRuleWhatIfVariationClause returns [EObject current=null] : iv_ruleWhatIfVariationClause= ruleWhatIfVariationClause EOF ;
+    // InternalDescartesQL.g:5373:1: entryRuleWhatIfVariationClause returns [EObject current=null] : iv_ruleWhatIfVariationClause= ruleWhatIfVariationClause EOF ;
     public final EObject entryRuleWhatIfVariationClause() throws RecognitionException {
         EObject current = null;
 
@@ -12460,8 +12948,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:5179:2: (iv_ruleWhatIfVariationClause= ruleWhatIfVariationClause EOF )
-            // InternalDescartesQL.g:5180:2: iv_ruleWhatIfVariationClause= ruleWhatIfVariationClause EOF
+            // InternalDescartesQL.g:5374:2: (iv_ruleWhatIfVariationClause= ruleWhatIfVariationClause EOF )
+            // InternalDescartesQL.g:5375:2: iv_ruleWhatIfVariationClause= ruleWhatIfVariationClause EOF
             {
              newCompositeNode(grammarAccess.getWhatIfVariationClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -12488,7 +12976,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleWhatIfVariationClause"
-    // InternalDescartesQL.g:5187:1: ruleWhatIfVariationClause returns [EObject current=null] : ( ( (lv_variationPoint_0_0= RULE_STRING ) ) ( (lv_values_1_0= ruleWhatIfValueVariationClause ) ) ) ;
+    // InternalDescartesQL.g:5382:1: ruleWhatIfVariationClause returns [EObject current=null] : ( ( (lv_variationPoint_0_0= RULE_STRING ) ) ( (lv_values_1_0= ruleWhatIfValueVariationClause ) ) ) ;
     public final EObject ruleWhatIfVariationClause() throws RecognitionException {
         EObject current = null;
 
@@ -12499,19 +12987,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:5190:28: ( ( ( (lv_variationPoint_0_0= RULE_STRING ) ) ( (lv_values_1_0= ruleWhatIfValueVariationClause ) ) ) )
-            // InternalDescartesQL.g:5191:1: ( ( (lv_variationPoint_0_0= RULE_STRING ) ) ( (lv_values_1_0= ruleWhatIfValueVariationClause ) ) )
+            // InternalDescartesQL.g:5385:28: ( ( ( (lv_variationPoint_0_0= RULE_STRING ) ) ( (lv_values_1_0= ruleWhatIfValueVariationClause ) ) ) )
+            // InternalDescartesQL.g:5386:1: ( ( (lv_variationPoint_0_0= RULE_STRING ) ) ( (lv_values_1_0= ruleWhatIfValueVariationClause ) ) )
             {
-            // InternalDescartesQL.g:5191:1: ( ( (lv_variationPoint_0_0= RULE_STRING ) ) ( (lv_values_1_0= ruleWhatIfValueVariationClause ) ) )
-            // InternalDescartesQL.g:5191:2: ( (lv_variationPoint_0_0= RULE_STRING ) ) ( (lv_values_1_0= ruleWhatIfValueVariationClause ) )
+            // InternalDescartesQL.g:5386:1: ( ( (lv_variationPoint_0_0= RULE_STRING ) ) ( (lv_values_1_0= ruleWhatIfValueVariationClause ) ) )
+            // InternalDescartesQL.g:5386:2: ( (lv_variationPoint_0_0= RULE_STRING ) ) ( (lv_values_1_0= ruleWhatIfValueVariationClause ) )
             {
-            // InternalDescartesQL.g:5191:2: ( (lv_variationPoint_0_0= RULE_STRING ) )
-            // InternalDescartesQL.g:5192:1: (lv_variationPoint_0_0= RULE_STRING )
+            // InternalDescartesQL.g:5386:2: ( (lv_variationPoint_0_0= RULE_STRING ) )
+            // InternalDescartesQL.g:5387:1: (lv_variationPoint_0_0= RULE_STRING )
             {
-            // InternalDescartesQL.g:5192:1: (lv_variationPoint_0_0= RULE_STRING )
-            // InternalDescartesQL.g:5193:3: lv_variationPoint_0_0= RULE_STRING
+            // InternalDescartesQL.g:5387:1: (lv_variationPoint_0_0= RULE_STRING )
+            // InternalDescartesQL.g:5388:3: lv_variationPoint_0_0= RULE_STRING
             {
-            lv_variationPoint_0_0=(Token)match(input,RULE_STRING,FOLLOW_70); 
+            lv_variationPoint_0_0=(Token)match(input,RULE_STRING,FOLLOW_73); 
 
             			newLeafNode(lv_variationPoint_0_0, grammarAccess.getWhatIfVariationClauseAccess().getVariationPointSTRINGTerminalRuleCall_0_0()); 
             		
@@ -12531,11 +13019,11 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:5209:2: ( (lv_values_1_0= ruleWhatIfValueVariationClause ) )
-            // InternalDescartesQL.g:5210:1: (lv_values_1_0= ruleWhatIfValueVariationClause )
+            // InternalDescartesQL.g:5404:2: ( (lv_values_1_0= ruleWhatIfValueVariationClause ) )
+            // InternalDescartesQL.g:5405:1: (lv_values_1_0= ruleWhatIfValueVariationClause )
             {
-            // InternalDescartesQL.g:5210:1: (lv_values_1_0= ruleWhatIfValueVariationClause )
-            // InternalDescartesQL.g:5211:3: lv_values_1_0= ruleWhatIfValueVariationClause
+            // InternalDescartesQL.g:5405:1: (lv_values_1_0= ruleWhatIfValueVariationClause )
+            // InternalDescartesQL.g:5406:3: lv_values_1_0= ruleWhatIfValueVariationClause
             {
              
             	        newCompositeNode(grammarAccess.getWhatIfVariationClauseAccess().getValuesWhatIfValueVariationClauseParserRuleCall_1_0()); 
@@ -12583,7 +13071,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleWhatIfValueVariationClause"
-    // InternalDescartesQL.g:5235:1: entryRuleWhatIfValueVariationClause returns [EObject current=null] : iv_ruleWhatIfValueVariationClause= ruleWhatIfValueVariationClause EOF ;
+    // InternalDescartesQL.g:5430:1: entryRuleWhatIfValueVariationClause returns [EObject current=null] : iv_ruleWhatIfValueVariationClause= ruleWhatIfValueVariationClause EOF ;
     public final EObject entryRuleWhatIfValueVariationClause() throws RecognitionException {
         EObject current = null;
 
@@ -12591,8 +13079,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:5236:2: (iv_ruleWhatIfValueVariationClause= ruleWhatIfValueVariationClause EOF )
-            // InternalDescartesQL.g:5237:2: iv_ruleWhatIfValueVariationClause= ruleWhatIfValueVariationClause EOF
+            // InternalDescartesQL.g:5431:2: (iv_ruleWhatIfValueVariationClause= ruleWhatIfValueVariationClause EOF )
+            // InternalDescartesQL.g:5432:2: iv_ruleWhatIfValueVariationClause= ruleWhatIfValueVariationClause EOF
             {
              newCompositeNode(grammarAccess.getWhatIfValueVariationClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -12619,7 +13107,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleWhatIfValueVariationClause"
-    // InternalDescartesQL.g:5244:1: ruleWhatIfValueVariationClause returns [EObject current=null] : (otherlv_0= '<' ( ( (lv_variationClause_1_1= ruleIntervalVariationClause | lv_variationClause_1_2= ruleValueVariationClause | lv_variationClause_1_3= ruleArithmeticClause | lv_variationClause_1_4= ruleVariationInstruction ) ) ) (otherlv_2= ',' ( ( (lv_variationClause_3_1= ruleIntervalVariationClause | lv_variationClause_3_2= ruleValueVariationClause | lv_variationClause_3_3= ruleArithmeticClause | lv_variationClause_3_4= ruleVariationInstruction ) ) )+ )* otherlv_4= '>' ) ;
+    // InternalDescartesQL.g:5439:1: ruleWhatIfValueVariationClause returns [EObject current=null] : (otherlv_0= '<' ( ( (lv_variationClause_1_1= ruleIntervalVariationClause | lv_variationClause_1_2= ruleValueVariationClause | lv_variationClause_1_3= ruleArithmeticClause | lv_variationClause_1_4= ruleVariationInstruction ) ) ) (otherlv_2= ',' ( ( (lv_variationClause_3_1= ruleIntervalVariationClause | lv_variationClause_3_2= ruleValueVariationClause | lv_variationClause_3_3= ruleArithmeticClause | lv_variationClause_3_4= ruleVariationInstruction ) ) )+ )* otherlv_4= '>' ) ;
     public final EObject ruleWhatIfValueVariationClause() throws RecognitionException {
         EObject current = null;
 
@@ -12646,70 +13134,70 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:5247:28: ( (otherlv_0= '<' ( ( (lv_variationClause_1_1= ruleIntervalVariationClause | lv_variationClause_1_2= ruleValueVariationClause | lv_variationClause_1_3= ruleArithmeticClause | lv_variationClause_1_4= ruleVariationInstruction ) ) ) (otherlv_2= ',' ( ( (lv_variationClause_3_1= ruleIntervalVariationClause | lv_variationClause_3_2= ruleValueVariationClause | lv_variationClause_3_3= ruleArithmeticClause | lv_variationClause_3_4= ruleVariationInstruction ) ) )+ )* otherlv_4= '>' ) )
-            // InternalDescartesQL.g:5248:1: (otherlv_0= '<' ( ( (lv_variationClause_1_1= ruleIntervalVariationClause | lv_variationClause_1_2= ruleValueVariationClause | lv_variationClause_1_3= ruleArithmeticClause | lv_variationClause_1_4= ruleVariationInstruction ) ) ) (otherlv_2= ',' ( ( (lv_variationClause_3_1= ruleIntervalVariationClause | lv_variationClause_3_2= ruleValueVariationClause | lv_variationClause_3_3= ruleArithmeticClause | lv_variationClause_3_4= ruleVariationInstruction ) ) )+ )* otherlv_4= '>' )
+            // InternalDescartesQL.g:5442:28: ( (otherlv_0= '<' ( ( (lv_variationClause_1_1= ruleIntervalVariationClause | lv_variationClause_1_2= ruleValueVariationClause | lv_variationClause_1_3= ruleArithmeticClause | lv_variationClause_1_4= ruleVariationInstruction ) ) ) (otherlv_2= ',' ( ( (lv_variationClause_3_1= ruleIntervalVariationClause | lv_variationClause_3_2= ruleValueVariationClause | lv_variationClause_3_3= ruleArithmeticClause | lv_variationClause_3_4= ruleVariationInstruction ) ) )+ )* otherlv_4= '>' ) )
+            // InternalDescartesQL.g:5443:1: (otherlv_0= '<' ( ( (lv_variationClause_1_1= ruleIntervalVariationClause | lv_variationClause_1_2= ruleValueVariationClause | lv_variationClause_1_3= ruleArithmeticClause | lv_variationClause_1_4= ruleVariationInstruction ) ) ) (otherlv_2= ',' ( ( (lv_variationClause_3_1= ruleIntervalVariationClause | lv_variationClause_3_2= ruleValueVariationClause | lv_variationClause_3_3= ruleArithmeticClause | lv_variationClause_3_4= ruleVariationInstruction ) ) )+ )* otherlv_4= '>' )
             {
-            // InternalDescartesQL.g:5248:1: (otherlv_0= '<' ( ( (lv_variationClause_1_1= ruleIntervalVariationClause | lv_variationClause_1_2= ruleValueVariationClause | lv_variationClause_1_3= ruleArithmeticClause | lv_variationClause_1_4= ruleVariationInstruction ) ) ) (otherlv_2= ',' ( ( (lv_variationClause_3_1= ruleIntervalVariationClause | lv_variationClause_3_2= ruleValueVariationClause | lv_variationClause_3_3= ruleArithmeticClause | lv_variationClause_3_4= ruleVariationInstruction ) ) )+ )* otherlv_4= '>' )
-            // InternalDescartesQL.g:5248:3: otherlv_0= '<' ( ( (lv_variationClause_1_1= ruleIntervalVariationClause | lv_variationClause_1_2= ruleValueVariationClause | lv_variationClause_1_3= ruleArithmeticClause | lv_variationClause_1_4= ruleVariationInstruction ) ) ) (otherlv_2= ',' ( ( (lv_variationClause_3_1= ruleIntervalVariationClause | lv_variationClause_3_2= ruleValueVariationClause | lv_variationClause_3_3= ruleArithmeticClause | lv_variationClause_3_4= ruleVariationInstruction ) ) )+ )* otherlv_4= '>'
+            // InternalDescartesQL.g:5443:1: (otherlv_0= '<' ( ( (lv_variationClause_1_1= ruleIntervalVariationClause | lv_variationClause_1_2= ruleValueVariationClause | lv_variationClause_1_3= ruleArithmeticClause | lv_variationClause_1_4= ruleVariationInstruction ) ) ) (otherlv_2= ',' ( ( (lv_variationClause_3_1= ruleIntervalVariationClause | lv_variationClause_3_2= ruleValueVariationClause | lv_variationClause_3_3= ruleArithmeticClause | lv_variationClause_3_4= ruleVariationInstruction ) ) )+ )* otherlv_4= '>' )
+            // InternalDescartesQL.g:5443:3: otherlv_0= '<' ( ( (lv_variationClause_1_1= ruleIntervalVariationClause | lv_variationClause_1_2= ruleValueVariationClause | lv_variationClause_1_3= ruleArithmeticClause | lv_variationClause_1_4= ruleVariationInstruction ) ) ) (otherlv_2= ',' ( ( (lv_variationClause_3_1= ruleIntervalVariationClause | lv_variationClause_3_2= ruleValueVariationClause | lv_variationClause_3_3= ruleArithmeticClause | lv_variationClause_3_4= ruleVariationInstruction ) ) )+ )* otherlv_4= '>'
             {
-            otherlv_0=(Token)match(input,45,FOLLOW_71); 
+            otherlv_0=(Token)match(input,49,FOLLOW_74); 
 
                 	newLeafNode(otherlv_0, grammarAccess.getWhatIfValueVariationClauseAccess().getLessThanSignKeyword_0());
                 
-            // InternalDescartesQL.g:5252:1: ( ( (lv_variationClause_1_1= ruleIntervalVariationClause | lv_variationClause_1_2= ruleValueVariationClause | lv_variationClause_1_3= ruleArithmeticClause | lv_variationClause_1_4= ruleVariationInstruction ) ) )
-            // InternalDescartesQL.g:5253:1: ( (lv_variationClause_1_1= ruleIntervalVariationClause | lv_variationClause_1_2= ruleValueVariationClause | lv_variationClause_1_3= ruleArithmeticClause | lv_variationClause_1_4= ruleVariationInstruction ) )
+            // InternalDescartesQL.g:5447:1: ( ( (lv_variationClause_1_1= ruleIntervalVariationClause | lv_variationClause_1_2= ruleValueVariationClause | lv_variationClause_1_3= ruleArithmeticClause | lv_variationClause_1_4= ruleVariationInstruction ) ) )
+            // InternalDescartesQL.g:5448:1: ( (lv_variationClause_1_1= ruleIntervalVariationClause | lv_variationClause_1_2= ruleValueVariationClause | lv_variationClause_1_3= ruleArithmeticClause | lv_variationClause_1_4= ruleVariationInstruction ) )
             {
-            // InternalDescartesQL.g:5253:1: ( (lv_variationClause_1_1= ruleIntervalVariationClause | lv_variationClause_1_2= ruleValueVariationClause | lv_variationClause_1_3= ruleArithmeticClause | lv_variationClause_1_4= ruleVariationInstruction ) )
-            // InternalDescartesQL.g:5254:1: (lv_variationClause_1_1= ruleIntervalVariationClause | lv_variationClause_1_2= ruleValueVariationClause | lv_variationClause_1_3= ruleArithmeticClause | lv_variationClause_1_4= ruleVariationInstruction )
+            // InternalDescartesQL.g:5448:1: ( (lv_variationClause_1_1= ruleIntervalVariationClause | lv_variationClause_1_2= ruleValueVariationClause | lv_variationClause_1_3= ruleArithmeticClause | lv_variationClause_1_4= ruleVariationInstruction ) )
+            // InternalDescartesQL.g:5449:1: (lv_variationClause_1_1= ruleIntervalVariationClause | lv_variationClause_1_2= ruleValueVariationClause | lv_variationClause_1_3= ruleArithmeticClause | lv_variationClause_1_4= ruleVariationInstruction )
             {
-            // InternalDescartesQL.g:5254:1: (lv_variationClause_1_1= ruleIntervalVariationClause | lv_variationClause_1_2= ruleValueVariationClause | lv_variationClause_1_3= ruleArithmeticClause | lv_variationClause_1_4= ruleVariationInstruction )
-            int alt59=4;
+            // InternalDescartesQL.g:5449:1: (lv_variationClause_1_1= ruleIntervalVariationClause | lv_variationClause_1_2= ruleValueVariationClause | lv_variationClause_1_3= ruleArithmeticClause | lv_variationClause_1_4= ruleVariationInstruction )
+            int alt66=4;
             switch ( input.LA(1) ) {
             case RULE_INT:
                 {
-                int LA59_1 = input.LA(2);
+                int LA66_1 = input.LA(2);
 
-                if ( (LA59_1==47) ) {
-                    alt59=1;
+                if ( (LA66_1==51) ) {
+                    alt66=1;
                 }
-                else if ( (LA59_1==16||LA59_1==46) ) {
-                    alt59=2;
+                else if ( (LA66_1==20||LA66_1==50) ) {
+                    alt66=2;
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("", 59, 1, input);
+                        new NoViableAltException("", 66, 1, input);
 
                     throw nvae;
                 }
                 }
                 break;
-            case 69:
-            case 70:
-            case 71:
+            case 73:
+            case 74:
+            case 75:
                 {
-                alt59=3;
+                alt66=3;
                 }
                 break;
             case RULE_ID:
                 {
-                alt59=4;
+                alt66=4;
                 }
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("", 59, 0, input);
+                    new NoViableAltException("", 66, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt59) {
+            switch (alt66) {
                 case 1 :
-                    // InternalDescartesQL.g:5255:3: lv_variationClause_1_1= ruleIntervalVariationClause
+                    // InternalDescartesQL.g:5450:3: lv_variationClause_1_1= ruleIntervalVariationClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getWhatIfValueVariationClauseAccess().getVariationClauseIntervalVariationClauseParserRuleCall_1_0_0()); 
                     	    
-                    pushFollow(FOLLOW_72);
+                    pushFollow(FOLLOW_75);
                     lv_variationClause_1_1=ruleIntervalVariationClause();
 
                     state._fsp--;
@@ -12729,12 +13217,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 2 :
-                    // InternalDescartesQL.g:5270:8: lv_variationClause_1_2= ruleValueVariationClause
+                    // InternalDescartesQL.g:5465:8: lv_variationClause_1_2= ruleValueVariationClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getWhatIfValueVariationClauseAccess().getVariationClauseValueVariationClauseParserRuleCall_1_0_1()); 
                     	    
-                    pushFollow(FOLLOW_72);
+                    pushFollow(FOLLOW_75);
                     lv_variationClause_1_2=ruleValueVariationClause();
 
                     state._fsp--;
@@ -12754,12 +13242,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 3 :
-                    // InternalDescartesQL.g:5285:8: lv_variationClause_1_3= ruleArithmeticClause
+                    // InternalDescartesQL.g:5480:8: lv_variationClause_1_3= ruleArithmeticClause
                     {
                      
                     	        newCompositeNode(grammarAccess.getWhatIfValueVariationClauseAccess().getVariationClauseArithmeticClauseParserRuleCall_1_0_2()); 
                     	    
-                    pushFollow(FOLLOW_72);
+                    pushFollow(FOLLOW_75);
                     lv_variationClause_1_3=ruleArithmeticClause();
 
                     state._fsp--;
@@ -12779,12 +13267,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 4 :
-                    // InternalDescartesQL.g:5300:8: lv_variationClause_1_4= ruleVariationInstruction
+                    // InternalDescartesQL.g:5495:8: lv_variationClause_1_4= ruleVariationInstruction
                     {
                      
                     	        newCompositeNode(grammarAccess.getWhatIfValueVariationClauseAccess().getVariationClauseVariationInstructionParserRuleCall_1_0_3()); 
                     	    
-                    pushFollow(FOLLOW_72);
+                    pushFollow(FOLLOW_75);
                     lv_variationClause_1_4=ruleVariationInstruction();
 
                     state._fsp--;
@@ -12812,92 +13300,92 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:5318:2: (otherlv_2= ',' ( ( (lv_variationClause_3_1= ruleIntervalVariationClause | lv_variationClause_3_2= ruleValueVariationClause | lv_variationClause_3_3= ruleArithmeticClause | lv_variationClause_3_4= ruleVariationInstruction ) ) )+ )*
-            loop62:
+            // InternalDescartesQL.g:5513:2: (otherlv_2= ',' ( ( (lv_variationClause_3_1= ruleIntervalVariationClause | lv_variationClause_3_2= ruleValueVariationClause | lv_variationClause_3_3= ruleArithmeticClause | lv_variationClause_3_4= ruleVariationInstruction ) ) )+ )*
+            loop69:
             do {
-                int alt62=2;
-                int LA62_0 = input.LA(1);
+                int alt69=2;
+                int LA69_0 = input.LA(1);
 
-                if ( (LA62_0==16) ) {
-                    alt62=1;
+                if ( (LA69_0==20) ) {
+                    alt69=1;
                 }
 
 
-                switch (alt62) {
+                switch (alt69) {
             	case 1 :
-            	    // InternalDescartesQL.g:5318:4: otherlv_2= ',' ( ( (lv_variationClause_3_1= ruleIntervalVariationClause | lv_variationClause_3_2= ruleValueVariationClause | lv_variationClause_3_3= ruleArithmeticClause | lv_variationClause_3_4= ruleVariationInstruction ) ) )+
+            	    // InternalDescartesQL.g:5513:4: otherlv_2= ',' ( ( (lv_variationClause_3_1= ruleIntervalVariationClause | lv_variationClause_3_2= ruleValueVariationClause | lv_variationClause_3_3= ruleArithmeticClause | lv_variationClause_3_4= ruleVariationInstruction ) ) )+
             	    {
-            	    otherlv_2=(Token)match(input,16,FOLLOW_71); 
+            	    otherlv_2=(Token)match(input,20,FOLLOW_74); 
 
             	        	newLeafNode(otherlv_2, grammarAccess.getWhatIfValueVariationClauseAccess().getCommaKeyword_2_0());
             	        
-            	    // InternalDescartesQL.g:5322:1: ( ( (lv_variationClause_3_1= ruleIntervalVariationClause | lv_variationClause_3_2= ruleValueVariationClause | lv_variationClause_3_3= ruleArithmeticClause | lv_variationClause_3_4= ruleVariationInstruction ) ) )+
-            	    int cnt61=0;
-            	    loop61:
+            	    // InternalDescartesQL.g:5517:1: ( ( (lv_variationClause_3_1= ruleIntervalVariationClause | lv_variationClause_3_2= ruleValueVariationClause | lv_variationClause_3_3= ruleArithmeticClause | lv_variationClause_3_4= ruleVariationInstruction ) ) )+
+            	    int cnt68=0;
+            	    loop68:
             	    do {
-            	        int alt61=2;
-            	        int LA61_0 = input.LA(1);
+            	        int alt68=2;
+            	        int LA68_0 = input.LA(1);
 
-            	        if ( ((LA61_0>=RULE_ID && LA61_0<=RULE_INT)||(LA61_0>=69 && LA61_0<=71)) ) {
-            	            alt61=1;
+            	        if ( ((LA68_0>=RULE_ID && LA68_0<=RULE_INT)||(LA68_0>=73 && LA68_0<=75)) ) {
+            	            alt68=1;
             	        }
 
 
-            	        switch (alt61) {
+            	        switch (alt68) {
             	    	case 1 :
-            	    	    // InternalDescartesQL.g:5323:1: ( (lv_variationClause_3_1= ruleIntervalVariationClause | lv_variationClause_3_2= ruleValueVariationClause | lv_variationClause_3_3= ruleArithmeticClause | lv_variationClause_3_4= ruleVariationInstruction ) )
+            	    	    // InternalDescartesQL.g:5518:1: ( (lv_variationClause_3_1= ruleIntervalVariationClause | lv_variationClause_3_2= ruleValueVariationClause | lv_variationClause_3_3= ruleArithmeticClause | lv_variationClause_3_4= ruleVariationInstruction ) )
             	    	    {
-            	    	    // InternalDescartesQL.g:5323:1: ( (lv_variationClause_3_1= ruleIntervalVariationClause | lv_variationClause_3_2= ruleValueVariationClause | lv_variationClause_3_3= ruleArithmeticClause | lv_variationClause_3_4= ruleVariationInstruction ) )
-            	    	    // InternalDescartesQL.g:5324:1: (lv_variationClause_3_1= ruleIntervalVariationClause | lv_variationClause_3_2= ruleValueVariationClause | lv_variationClause_3_3= ruleArithmeticClause | lv_variationClause_3_4= ruleVariationInstruction )
+            	    	    // InternalDescartesQL.g:5518:1: ( (lv_variationClause_3_1= ruleIntervalVariationClause | lv_variationClause_3_2= ruleValueVariationClause | lv_variationClause_3_3= ruleArithmeticClause | lv_variationClause_3_4= ruleVariationInstruction ) )
+            	    	    // InternalDescartesQL.g:5519:1: (lv_variationClause_3_1= ruleIntervalVariationClause | lv_variationClause_3_2= ruleValueVariationClause | lv_variationClause_3_3= ruleArithmeticClause | lv_variationClause_3_4= ruleVariationInstruction )
             	    	    {
-            	    	    // InternalDescartesQL.g:5324:1: (lv_variationClause_3_1= ruleIntervalVariationClause | lv_variationClause_3_2= ruleValueVariationClause | lv_variationClause_3_3= ruleArithmeticClause | lv_variationClause_3_4= ruleVariationInstruction )
-            	    	    int alt60=4;
+            	    	    // InternalDescartesQL.g:5519:1: (lv_variationClause_3_1= ruleIntervalVariationClause | lv_variationClause_3_2= ruleValueVariationClause | lv_variationClause_3_3= ruleArithmeticClause | lv_variationClause_3_4= ruleVariationInstruction )
+            	    	    int alt67=4;
             	    	    switch ( input.LA(1) ) {
             	    	    case RULE_INT:
             	    	        {
-            	    	        int LA60_1 = input.LA(2);
+            	    	        int LA67_1 = input.LA(2);
 
-            	    	        if ( (LA60_1==47) ) {
-            	    	            alt60=1;
+            	    	        if ( (LA67_1==51) ) {
+            	    	            alt67=1;
             	    	        }
-            	    	        else if ( ((LA60_1>=RULE_ID && LA60_1<=RULE_INT)||LA60_1==16||LA60_1==46||(LA60_1>=69 && LA60_1<=71)) ) {
-            	    	            alt60=2;
+            	    	        else if ( ((LA67_1>=RULE_ID && LA67_1<=RULE_INT)||LA67_1==20||LA67_1==50||(LA67_1>=73 && LA67_1<=75)) ) {
+            	    	            alt67=2;
             	    	        }
             	    	        else {
             	    	            NoViableAltException nvae =
-            	    	                new NoViableAltException("", 60, 1, input);
+            	    	                new NoViableAltException("", 67, 1, input);
 
             	    	            throw nvae;
             	    	        }
             	    	        }
             	    	        break;
-            	    	    case 69:
-            	    	    case 70:
-            	    	    case 71:
+            	    	    case 73:
+            	    	    case 74:
+            	    	    case 75:
             	    	        {
-            	    	        alt60=3;
+            	    	        alt67=3;
             	    	        }
             	    	        break;
             	    	    case RULE_ID:
             	    	        {
-            	    	        alt60=4;
+            	    	        alt67=4;
             	    	        }
             	    	        break;
             	    	    default:
             	    	        NoViableAltException nvae =
-            	    	            new NoViableAltException("", 60, 0, input);
+            	    	            new NoViableAltException("", 67, 0, input);
 
             	    	        throw nvae;
             	    	    }
 
-            	    	    switch (alt60) {
+            	    	    switch (alt67) {
             	    	        case 1 :
-            	    	            // InternalDescartesQL.g:5325:3: lv_variationClause_3_1= ruleIntervalVariationClause
+            	    	            // InternalDescartesQL.g:5520:3: lv_variationClause_3_1= ruleIntervalVariationClause
             	    	            {
             	    	             
             	    	            	        newCompositeNode(grammarAccess.getWhatIfValueVariationClauseAccess().getVariationClauseIntervalVariationClauseParserRuleCall_2_1_0_0()); 
             	    	            	    
-            	    	            pushFollow(FOLLOW_73);
+            	    	            pushFollow(FOLLOW_76);
             	    	            lv_variationClause_3_1=ruleIntervalVariationClause();
 
             	    	            state._fsp--;
@@ -12917,12 +13405,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
             	    	            }
             	    	            break;
             	    	        case 2 :
-            	    	            // InternalDescartesQL.g:5340:8: lv_variationClause_3_2= ruleValueVariationClause
+            	    	            // InternalDescartesQL.g:5535:8: lv_variationClause_3_2= ruleValueVariationClause
             	    	            {
             	    	             
             	    	            	        newCompositeNode(grammarAccess.getWhatIfValueVariationClauseAccess().getVariationClauseValueVariationClauseParserRuleCall_2_1_0_1()); 
             	    	            	    
-            	    	            pushFollow(FOLLOW_73);
+            	    	            pushFollow(FOLLOW_76);
             	    	            lv_variationClause_3_2=ruleValueVariationClause();
 
             	    	            state._fsp--;
@@ -12942,12 +13430,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
             	    	            }
             	    	            break;
             	    	        case 3 :
-            	    	            // InternalDescartesQL.g:5355:8: lv_variationClause_3_3= ruleArithmeticClause
+            	    	            // InternalDescartesQL.g:5550:8: lv_variationClause_3_3= ruleArithmeticClause
             	    	            {
             	    	             
             	    	            	        newCompositeNode(grammarAccess.getWhatIfValueVariationClauseAccess().getVariationClauseArithmeticClauseParserRuleCall_2_1_0_2()); 
             	    	            	    
-            	    	            pushFollow(FOLLOW_73);
+            	    	            pushFollow(FOLLOW_76);
             	    	            lv_variationClause_3_3=ruleArithmeticClause();
 
             	    	            state._fsp--;
@@ -12967,12 +13455,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
             	    	            }
             	    	            break;
             	    	        case 4 :
-            	    	            // InternalDescartesQL.g:5370:8: lv_variationClause_3_4= ruleVariationInstruction
+            	    	            // InternalDescartesQL.g:5565:8: lv_variationClause_3_4= ruleVariationInstruction
             	    	            {
             	    	             
             	    	            	        newCompositeNode(grammarAccess.getWhatIfValueVariationClauseAccess().getVariationClauseVariationInstructionParserRuleCall_2_1_0_3()); 
             	    	            	    
-            	    	            pushFollow(FOLLOW_73);
+            	    	            pushFollow(FOLLOW_76);
             	    	            lv_variationClause_3_4=ruleVariationInstruction();
 
             	    	            state._fsp--;
@@ -13002,12 +13490,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
             	    	    break;
 
             	    	default :
-            	    	    if ( cnt61 >= 1 ) break loop61;
+            	    	    if ( cnt68 >= 1 ) break loop68;
             	                EarlyExitException eee =
-            	                    new EarlyExitException(61, input);
+            	                    new EarlyExitException(68, input);
             	                throw eee;
             	        }
-            	        cnt61++;
+            	        cnt68++;
             	    } while (true);
 
 
@@ -13015,11 +13503,11 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
             	    break;
 
             	default :
-            	    break loop62;
+            	    break loop69;
                 }
             } while (true);
 
-            otherlv_4=(Token)match(input,46,FOLLOW_2); 
+            otherlv_4=(Token)match(input,50,FOLLOW_2); 
 
                 	newLeafNode(otherlv_4, grammarAccess.getWhatIfValueVariationClauseAccess().getGreaterThanSignKeyword_3());
                 
@@ -13044,7 +13532,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleVariationInstruction"
-    // InternalDescartesQL.g:5402:1: entryRuleVariationInstruction returns [EObject current=null] : iv_ruleVariationInstruction= ruleVariationInstruction EOF ;
+    // InternalDescartesQL.g:5597:1: entryRuleVariationInstruction returns [EObject current=null] : iv_ruleVariationInstruction= ruleVariationInstruction EOF ;
     public final EObject entryRuleVariationInstruction() throws RecognitionException {
         EObject current = null;
 
@@ -13052,8 +13540,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:5403:2: (iv_ruleVariationInstruction= ruleVariationInstruction EOF )
-            // InternalDescartesQL.g:5404:2: iv_ruleVariationInstruction= ruleVariationInstruction EOF
+            // InternalDescartesQL.g:5598:2: (iv_ruleVariationInstruction= ruleVariationInstruction EOF )
+            // InternalDescartesQL.g:5599:2: iv_ruleVariationInstruction= ruleVariationInstruction EOF
             {
              newCompositeNode(grammarAccess.getVariationInstructionRule()); 
             pushFollow(FOLLOW_1);
@@ -13080,7 +13568,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleVariationInstruction"
-    // InternalDescartesQL.g:5411:1: ruleVariationInstruction returns [EObject current=null] : ( ( (lv_variation_0_0= RULE_ID ) ) (otherlv_1= '(' ( (lv_argument_2_0= RULE_STRING ) ) otherlv_3= ')' ) ) ;
+    // InternalDescartesQL.g:5606:1: ruleVariationInstruction returns [EObject current=null] : ( ( (lv_variation_0_0= RULE_ID ) ) (otherlv_1= '(' ( (lv_argument_2_0= RULE_STRING ) ) otherlv_3= ')' ) ) ;
     public final EObject ruleVariationInstruction() throws RecognitionException {
         EObject current = null;
 
@@ -13092,19 +13580,19 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:5414:28: ( ( ( (lv_variation_0_0= RULE_ID ) ) (otherlv_1= '(' ( (lv_argument_2_0= RULE_STRING ) ) otherlv_3= ')' ) ) )
-            // InternalDescartesQL.g:5415:1: ( ( (lv_variation_0_0= RULE_ID ) ) (otherlv_1= '(' ( (lv_argument_2_0= RULE_STRING ) ) otherlv_3= ')' ) )
+            // InternalDescartesQL.g:5609:28: ( ( ( (lv_variation_0_0= RULE_ID ) ) (otherlv_1= '(' ( (lv_argument_2_0= RULE_STRING ) ) otherlv_3= ')' ) ) )
+            // InternalDescartesQL.g:5610:1: ( ( (lv_variation_0_0= RULE_ID ) ) (otherlv_1= '(' ( (lv_argument_2_0= RULE_STRING ) ) otherlv_3= ')' ) )
             {
-            // InternalDescartesQL.g:5415:1: ( ( (lv_variation_0_0= RULE_ID ) ) (otherlv_1= '(' ( (lv_argument_2_0= RULE_STRING ) ) otherlv_3= ')' ) )
-            // InternalDescartesQL.g:5415:2: ( (lv_variation_0_0= RULE_ID ) ) (otherlv_1= '(' ( (lv_argument_2_0= RULE_STRING ) ) otherlv_3= ')' )
+            // InternalDescartesQL.g:5610:1: ( ( (lv_variation_0_0= RULE_ID ) ) (otherlv_1= '(' ( (lv_argument_2_0= RULE_STRING ) ) otherlv_3= ')' ) )
+            // InternalDescartesQL.g:5610:2: ( (lv_variation_0_0= RULE_ID ) ) (otherlv_1= '(' ( (lv_argument_2_0= RULE_STRING ) ) otherlv_3= ')' )
             {
-            // InternalDescartesQL.g:5415:2: ( (lv_variation_0_0= RULE_ID ) )
-            // InternalDescartesQL.g:5416:1: (lv_variation_0_0= RULE_ID )
+            // InternalDescartesQL.g:5610:2: ( (lv_variation_0_0= RULE_ID ) )
+            // InternalDescartesQL.g:5611:1: (lv_variation_0_0= RULE_ID )
             {
-            // InternalDescartesQL.g:5416:1: (lv_variation_0_0= RULE_ID )
-            // InternalDescartesQL.g:5417:3: lv_variation_0_0= RULE_ID
+            // InternalDescartesQL.g:5611:1: (lv_variation_0_0= RULE_ID )
+            // InternalDescartesQL.g:5612:3: lv_variation_0_0= RULE_ID
             {
-            lv_variation_0_0=(Token)match(input,RULE_ID,FOLLOW_10); 
+            lv_variation_0_0=(Token)match(input,RULE_ID,FOLLOW_14); 
 
             			newLeafNode(lv_variation_0_0, grammarAccess.getVariationInstructionAccess().getVariationIDTerminalRuleCall_0_0()); 
             		
@@ -13124,20 +13612,20 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:5433:2: (otherlv_1= '(' ( (lv_argument_2_0= RULE_STRING ) ) otherlv_3= ')' )
-            // InternalDescartesQL.g:5433:4: otherlv_1= '(' ( (lv_argument_2_0= RULE_STRING ) ) otherlv_3= ')'
+            // InternalDescartesQL.g:5628:2: (otherlv_1= '(' ( (lv_argument_2_0= RULE_STRING ) ) otherlv_3= ')' )
+            // InternalDescartesQL.g:5628:4: otherlv_1= '(' ( (lv_argument_2_0= RULE_STRING ) ) otherlv_3= ')'
             {
-            otherlv_1=(Token)match(input,19,FOLLOW_36); 
+            otherlv_1=(Token)match(input,23,FOLLOW_39); 
 
                 	newLeafNode(otherlv_1, grammarAccess.getVariationInstructionAccess().getLeftParenthesisKeyword_1_0());
                 
-            // InternalDescartesQL.g:5437:1: ( (lv_argument_2_0= RULE_STRING ) )
-            // InternalDescartesQL.g:5438:1: (lv_argument_2_0= RULE_STRING )
+            // InternalDescartesQL.g:5632:1: ( (lv_argument_2_0= RULE_STRING ) )
+            // InternalDescartesQL.g:5633:1: (lv_argument_2_0= RULE_STRING )
             {
-            // InternalDescartesQL.g:5438:1: (lv_argument_2_0= RULE_STRING )
-            // InternalDescartesQL.g:5439:3: lv_argument_2_0= RULE_STRING
+            // InternalDescartesQL.g:5633:1: (lv_argument_2_0= RULE_STRING )
+            // InternalDescartesQL.g:5634:3: lv_argument_2_0= RULE_STRING
             {
-            lv_argument_2_0=(Token)match(input,RULE_STRING,FOLLOW_29); 
+            lv_argument_2_0=(Token)match(input,RULE_STRING,FOLLOW_32); 
 
             			newLeafNode(lv_argument_2_0, grammarAccess.getVariationInstructionAccess().getArgumentSTRINGTerminalRuleCall_1_1_0()); 
             		
@@ -13157,7 +13645,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            otherlv_3=(Token)match(input,20,FOLLOW_2); 
+            otherlv_3=(Token)match(input,24,FOLLOW_2); 
 
                 	newLeafNode(otherlv_3, grammarAccess.getVariationInstructionAccess().getRightParenthesisKeyword_1_2());
                 
@@ -13184,8 +13672,184 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
     // $ANTLR end "ruleVariationInstruction"
 
 
+    // $ANTLR start "entryRuleMultipleArithmeticClause"
+    // InternalDescartesQL.g:5662:1: entryRuleMultipleArithmeticClause returns [EObject current=null] : iv_ruleMultipleArithmeticClause= ruleMultipleArithmeticClause EOF ;
+    public final EObject entryRuleMultipleArithmeticClause() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleMultipleArithmeticClause = null;
+
+
+        try {
+            // InternalDescartesQL.g:5663:2: (iv_ruleMultipleArithmeticClause= ruleMultipleArithmeticClause EOF )
+            // InternalDescartesQL.g:5664:2: iv_ruleMultipleArithmeticClause= ruleMultipleArithmeticClause EOF
+            {
+             newCompositeNode(grammarAccess.getMultipleArithmeticClauseRule()); 
+            pushFollow(FOLLOW_1);
+            iv_ruleMultipleArithmeticClause=ruleMultipleArithmeticClause();
+
+            state._fsp--;
+
+             current =iv_ruleMultipleArithmeticClause; 
+            match(input,EOF,FOLLOW_2); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleMultipleArithmeticClause"
+
+
+    // $ANTLR start "ruleMultipleArithmeticClause"
+    // InternalDescartesQL.g:5671:1: ruleMultipleArithmeticClause returns [EObject current=null] : (otherlv_0= '<' ( (lv_multiClause_1_0= ruleArithmeticClause ) ) (otherlv_2= ',' ( (lv_multiClause_3_0= ruleArithmeticClause ) ) )* otherlv_4= '>' ) ;
+    public final EObject ruleMultipleArithmeticClause() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_2=null;
+        Token otherlv_4=null;
+        EObject lv_multiClause_1_0 = null;
+
+        EObject lv_multiClause_3_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // InternalDescartesQL.g:5674:28: ( (otherlv_0= '<' ( (lv_multiClause_1_0= ruleArithmeticClause ) ) (otherlv_2= ',' ( (lv_multiClause_3_0= ruleArithmeticClause ) ) )* otherlv_4= '>' ) )
+            // InternalDescartesQL.g:5675:1: (otherlv_0= '<' ( (lv_multiClause_1_0= ruleArithmeticClause ) ) (otherlv_2= ',' ( (lv_multiClause_3_0= ruleArithmeticClause ) ) )* otherlv_4= '>' )
+            {
+            // InternalDescartesQL.g:5675:1: (otherlv_0= '<' ( (lv_multiClause_1_0= ruleArithmeticClause ) ) (otherlv_2= ',' ( (lv_multiClause_3_0= ruleArithmeticClause ) ) )* otherlv_4= '>' )
+            // InternalDescartesQL.g:5675:3: otherlv_0= '<' ( (lv_multiClause_1_0= ruleArithmeticClause ) ) (otherlv_2= ',' ( (lv_multiClause_3_0= ruleArithmeticClause ) ) )* otherlv_4= '>'
+            {
+            otherlv_0=(Token)match(input,49,FOLLOW_77); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getMultipleArithmeticClauseAccess().getLessThanSignKeyword_0());
+                
+            // InternalDescartesQL.g:5679:1: ( (lv_multiClause_1_0= ruleArithmeticClause ) )
+            // InternalDescartesQL.g:5680:1: (lv_multiClause_1_0= ruleArithmeticClause )
+            {
+            // InternalDescartesQL.g:5680:1: (lv_multiClause_1_0= ruleArithmeticClause )
+            // InternalDescartesQL.g:5681:3: lv_multiClause_1_0= ruleArithmeticClause
+            {
+             
+            	        newCompositeNode(grammarAccess.getMultipleArithmeticClauseAccess().getMultiClauseArithmeticClauseParserRuleCall_1_0()); 
+            	    
+            pushFollow(FOLLOW_75);
+            lv_multiClause_1_0=ruleArithmeticClause();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getMultipleArithmeticClauseRule());
+            	        }
+                   		add(
+                   			current, 
+                   			"multiClause",
+                    		lv_multiClause_1_0, 
+                    		"tools.descartes.dql.lang.DescartesQL.ArithmeticClause");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            // InternalDescartesQL.g:5697:2: (otherlv_2= ',' ( (lv_multiClause_3_0= ruleArithmeticClause ) ) )*
+            loop70:
+            do {
+                int alt70=2;
+                int LA70_0 = input.LA(1);
+
+                if ( (LA70_0==20) ) {
+                    alt70=1;
+                }
+
+
+                switch (alt70) {
+            	case 1 :
+            	    // InternalDescartesQL.g:5697:4: otherlv_2= ',' ( (lv_multiClause_3_0= ruleArithmeticClause ) )
+            	    {
+            	    otherlv_2=(Token)match(input,20,FOLLOW_77); 
+
+            	        	newLeafNode(otherlv_2, grammarAccess.getMultipleArithmeticClauseAccess().getCommaKeyword_2_0());
+            	        
+            	    // InternalDescartesQL.g:5701:1: ( (lv_multiClause_3_0= ruleArithmeticClause ) )
+            	    // InternalDescartesQL.g:5702:1: (lv_multiClause_3_0= ruleArithmeticClause )
+            	    {
+            	    // InternalDescartesQL.g:5702:1: (lv_multiClause_3_0= ruleArithmeticClause )
+            	    // InternalDescartesQL.g:5703:3: lv_multiClause_3_0= ruleArithmeticClause
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getMultipleArithmeticClauseAccess().getMultiClauseArithmeticClauseParserRuleCall_2_1_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_75);
+            	    lv_multiClause_3_0=ruleArithmeticClause();
+
+            	    state._fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = createModelElementForParent(grammarAccess.getMultipleArithmeticClauseRule());
+            	    	        }
+            	           		add(
+            	           			current, 
+            	           			"multiClause",
+            	            		lv_multiClause_3_0, 
+            	            		"tools.descartes.dql.lang.DescartesQL.ArithmeticClause");
+            	    	        afterParserOrEnumRuleCall();
+            	    	    
+
+            	    }
+
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop70;
+                }
+            } while (true);
+
+            otherlv_4=(Token)match(input,50,FOLLOW_2); 
+
+                	newLeafNode(otherlv_4, grammarAccess.getMultipleArithmeticClauseAccess().getGreaterThanSignKeyword_3());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleMultipleArithmeticClause"
+
+
     // $ANTLR start "entryRuleArithmeticClause"
-    // InternalDescartesQL.g:5469:1: entryRuleArithmeticClause returns [EObject current=null] : iv_ruleArithmeticClause= ruleArithmeticClause EOF ;
+    // InternalDescartesQL.g:5731:1: entryRuleArithmeticClause returns [EObject current=null] : iv_ruleArithmeticClause= ruleArithmeticClause EOF ;
     public final EObject entryRuleArithmeticClause() throws RecognitionException {
         EObject current = null;
 
@@ -13193,8 +13857,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:5470:2: (iv_ruleArithmeticClause= ruleArithmeticClause EOF )
-            // InternalDescartesQL.g:5471:2: iv_ruleArithmeticClause= ruleArithmeticClause EOF
+            // InternalDescartesQL.g:5732:2: (iv_ruleArithmeticClause= ruleArithmeticClause EOF )
+            // InternalDescartesQL.g:5733:2: iv_ruleArithmeticClause= ruleArithmeticClause EOF
             {
              newCompositeNode(grammarAccess.getArithmeticClauseRule()); 
             pushFollow(FOLLOW_1);
@@ -13221,7 +13885,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleArithmeticClause"
-    // InternalDescartesQL.g:5478:1: ruleArithmeticClause returns [EObject current=null] : ( ( ( (lv_mode_0_1= 'ADD' | lv_mode_0_2= 'SUB' | lv_mode_0_3= 'MULTIPLY' ) ) ) ( (lv_value_1_0= ruleVariableValue ) ) ) ;
+    // InternalDescartesQL.g:5740:1: ruleArithmeticClause returns [EObject current=null] : ( ( ( (lv_mode_0_1= 'ADD' | lv_mode_0_2= 'SUB' | lv_mode_0_3= 'MULTIPLY' ) ) ) ( (lv_value_1_0= ruleVariableValue ) ) ) ;
     public final EObject ruleArithmeticClause() throws RecognitionException {
         EObject current = null;
 
@@ -13234,48 +13898,48 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:5481:28: ( ( ( ( (lv_mode_0_1= 'ADD' | lv_mode_0_2= 'SUB' | lv_mode_0_3= 'MULTIPLY' ) ) ) ( (lv_value_1_0= ruleVariableValue ) ) ) )
-            // InternalDescartesQL.g:5482:1: ( ( ( (lv_mode_0_1= 'ADD' | lv_mode_0_2= 'SUB' | lv_mode_0_3= 'MULTIPLY' ) ) ) ( (lv_value_1_0= ruleVariableValue ) ) )
+            // InternalDescartesQL.g:5743:28: ( ( ( ( (lv_mode_0_1= 'ADD' | lv_mode_0_2= 'SUB' | lv_mode_0_3= 'MULTIPLY' ) ) ) ( (lv_value_1_0= ruleVariableValue ) ) ) )
+            // InternalDescartesQL.g:5744:1: ( ( ( (lv_mode_0_1= 'ADD' | lv_mode_0_2= 'SUB' | lv_mode_0_3= 'MULTIPLY' ) ) ) ( (lv_value_1_0= ruleVariableValue ) ) )
             {
-            // InternalDescartesQL.g:5482:1: ( ( ( (lv_mode_0_1= 'ADD' | lv_mode_0_2= 'SUB' | lv_mode_0_3= 'MULTIPLY' ) ) ) ( (lv_value_1_0= ruleVariableValue ) ) )
-            // InternalDescartesQL.g:5482:2: ( ( (lv_mode_0_1= 'ADD' | lv_mode_0_2= 'SUB' | lv_mode_0_3= 'MULTIPLY' ) ) ) ( (lv_value_1_0= ruleVariableValue ) )
+            // InternalDescartesQL.g:5744:1: ( ( ( (lv_mode_0_1= 'ADD' | lv_mode_0_2= 'SUB' | lv_mode_0_3= 'MULTIPLY' ) ) ) ( (lv_value_1_0= ruleVariableValue ) ) )
+            // InternalDescartesQL.g:5744:2: ( ( (lv_mode_0_1= 'ADD' | lv_mode_0_2= 'SUB' | lv_mode_0_3= 'MULTIPLY' ) ) ) ( (lv_value_1_0= ruleVariableValue ) )
             {
-            // InternalDescartesQL.g:5482:2: ( ( (lv_mode_0_1= 'ADD' | lv_mode_0_2= 'SUB' | lv_mode_0_3= 'MULTIPLY' ) ) )
-            // InternalDescartesQL.g:5483:1: ( (lv_mode_0_1= 'ADD' | lv_mode_0_2= 'SUB' | lv_mode_0_3= 'MULTIPLY' ) )
+            // InternalDescartesQL.g:5744:2: ( ( (lv_mode_0_1= 'ADD' | lv_mode_0_2= 'SUB' | lv_mode_0_3= 'MULTIPLY' ) ) )
+            // InternalDescartesQL.g:5745:1: ( (lv_mode_0_1= 'ADD' | lv_mode_0_2= 'SUB' | lv_mode_0_3= 'MULTIPLY' ) )
             {
-            // InternalDescartesQL.g:5483:1: ( (lv_mode_0_1= 'ADD' | lv_mode_0_2= 'SUB' | lv_mode_0_3= 'MULTIPLY' ) )
-            // InternalDescartesQL.g:5484:1: (lv_mode_0_1= 'ADD' | lv_mode_0_2= 'SUB' | lv_mode_0_3= 'MULTIPLY' )
+            // InternalDescartesQL.g:5745:1: ( (lv_mode_0_1= 'ADD' | lv_mode_0_2= 'SUB' | lv_mode_0_3= 'MULTIPLY' ) )
+            // InternalDescartesQL.g:5746:1: (lv_mode_0_1= 'ADD' | lv_mode_0_2= 'SUB' | lv_mode_0_3= 'MULTIPLY' )
             {
-            // InternalDescartesQL.g:5484:1: (lv_mode_0_1= 'ADD' | lv_mode_0_2= 'SUB' | lv_mode_0_3= 'MULTIPLY' )
-            int alt63=3;
+            // InternalDescartesQL.g:5746:1: (lv_mode_0_1= 'ADD' | lv_mode_0_2= 'SUB' | lv_mode_0_3= 'MULTIPLY' )
+            int alt71=3;
             switch ( input.LA(1) ) {
-            case 69:
+            case 73:
                 {
-                alt63=1;
+                alt71=1;
                 }
                 break;
-            case 70:
+            case 74:
                 {
-                alt63=2;
+                alt71=2;
                 }
                 break;
-            case 71:
+            case 75:
                 {
-                alt63=3;
+                alt71=3;
                 }
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("", 63, 0, input);
+                    new NoViableAltException("", 71, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt63) {
+            switch (alt71) {
                 case 1 :
-                    // InternalDescartesQL.g:5485:3: lv_mode_0_1= 'ADD'
+                    // InternalDescartesQL.g:5747:3: lv_mode_0_1= 'ADD'
                     {
-                    lv_mode_0_1=(Token)match(input,69,FOLLOW_15); 
+                    lv_mode_0_1=(Token)match(input,73,FOLLOW_19); 
 
                             newLeafNode(lv_mode_0_1, grammarAccess.getArithmeticClauseAccess().getModeADDKeyword_0_0_0());
                         
@@ -13289,9 +13953,9 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 2 :
-                    // InternalDescartesQL.g:5497:8: lv_mode_0_2= 'SUB'
+                    // InternalDescartesQL.g:5759:8: lv_mode_0_2= 'SUB'
                     {
-                    lv_mode_0_2=(Token)match(input,70,FOLLOW_15); 
+                    lv_mode_0_2=(Token)match(input,74,FOLLOW_19); 
 
                             newLeafNode(lv_mode_0_2, grammarAccess.getArithmeticClauseAccess().getModeSUBKeyword_0_0_1());
                         
@@ -13305,9 +13969,9 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 3 :
-                    // InternalDescartesQL.g:5509:8: lv_mode_0_3= 'MULTIPLY'
+                    // InternalDescartesQL.g:5771:8: lv_mode_0_3= 'MULTIPLY'
                     {
-                    lv_mode_0_3=(Token)match(input,71,FOLLOW_15); 
+                    lv_mode_0_3=(Token)match(input,75,FOLLOW_19); 
 
                             newLeafNode(lv_mode_0_3, grammarAccess.getArithmeticClauseAccess().getModeMULTIPLYKeyword_0_0_2());
                         
@@ -13329,11 +13993,11 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
             }
 
-            // InternalDescartesQL.g:5524:2: ( (lv_value_1_0= ruleVariableValue ) )
-            // InternalDescartesQL.g:5525:1: (lv_value_1_0= ruleVariableValue )
+            // InternalDescartesQL.g:5786:2: ( (lv_value_1_0= ruleVariableValue ) )
+            // InternalDescartesQL.g:5787:1: (lv_value_1_0= ruleVariableValue )
             {
-            // InternalDescartesQL.g:5525:1: (lv_value_1_0= ruleVariableValue )
-            // InternalDescartesQL.g:5526:3: lv_value_1_0= ruleVariableValue
+            // InternalDescartesQL.g:5787:1: (lv_value_1_0= ruleVariableValue )
+            // InternalDescartesQL.g:5788:3: lv_value_1_0= ruleVariableValue
             {
              
             	        newCompositeNode(grammarAccess.getArithmeticClauseAccess().getValueVariableValueParserRuleCall_1_0()); 
@@ -13381,7 +14045,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleVariableValue"
-    // InternalDescartesQL.g:5550:1: entryRuleVariableValue returns [EObject current=null] : iv_ruleVariableValue= ruleVariableValue EOF ;
+    // InternalDescartesQL.g:5812:1: entryRuleVariableValue returns [EObject current=null] : iv_ruleVariableValue= ruleVariableValue EOF ;
     public final EObject entryRuleVariableValue() throws RecognitionException {
         EObject current = null;
 
@@ -13389,8 +14053,8 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // InternalDescartesQL.g:5551:2: (iv_ruleVariableValue= ruleVariableValue EOF )
-            // InternalDescartesQL.g:5552:2: iv_ruleVariableValue= ruleVariableValue EOF
+            // InternalDescartesQL.g:5813:2: (iv_ruleVariableValue= ruleVariableValue EOF )
+            // InternalDescartesQL.g:5814:2: iv_ruleVariableValue= ruleVariableValue EOF
             {
              newCompositeNode(grammarAccess.getVariableValueRule()); 
             pushFollow(FOLLOW_1);
@@ -13417,7 +14081,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleVariableValue"
-    // InternalDescartesQL.g:5559:1: ruleVariableValue returns [EObject current=null] : ( ( (lv_intValue_0_0= RULE_INT ) ) | ( (lv_doubleValue_1_0= RULE_DOUBLE ) ) ) ;
+    // InternalDescartesQL.g:5821:1: ruleVariableValue returns [EObject current=null] : ( ( (lv_intValue_0_0= RULE_INT ) ) | ( (lv_doubleValue_1_0= RULE_DOUBLE ) ) ) ;
     public final EObject ruleVariableValue() throws RecognitionException {
         EObject current = null;
 
@@ -13427,34 +14091,34 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // InternalDescartesQL.g:5562:28: ( ( ( (lv_intValue_0_0= RULE_INT ) ) | ( (lv_doubleValue_1_0= RULE_DOUBLE ) ) ) )
-            // InternalDescartesQL.g:5563:1: ( ( (lv_intValue_0_0= RULE_INT ) ) | ( (lv_doubleValue_1_0= RULE_DOUBLE ) ) )
+            // InternalDescartesQL.g:5824:28: ( ( ( (lv_intValue_0_0= RULE_INT ) ) | ( (lv_doubleValue_1_0= RULE_DOUBLE ) ) ) )
+            // InternalDescartesQL.g:5825:1: ( ( (lv_intValue_0_0= RULE_INT ) ) | ( (lv_doubleValue_1_0= RULE_DOUBLE ) ) )
             {
-            // InternalDescartesQL.g:5563:1: ( ( (lv_intValue_0_0= RULE_INT ) ) | ( (lv_doubleValue_1_0= RULE_DOUBLE ) ) )
-            int alt64=2;
-            int LA64_0 = input.LA(1);
+            // InternalDescartesQL.g:5825:1: ( ( (lv_intValue_0_0= RULE_INT ) ) | ( (lv_doubleValue_1_0= RULE_DOUBLE ) ) )
+            int alt72=2;
+            int LA72_0 = input.LA(1);
 
-            if ( (LA64_0==RULE_INT) ) {
-                alt64=1;
+            if ( (LA72_0==RULE_INT) ) {
+                alt72=1;
             }
-            else if ( (LA64_0==RULE_DOUBLE) ) {
-                alt64=2;
+            else if ( (LA72_0==RULE_DOUBLE) ) {
+                alt72=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("", 64, 0, input);
+                    new NoViableAltException("", 72, 0, input);
 
                 throw nvae;
             }
-            switch (alt64) {
+            switch (alt72) {
                 case 1 :
-                    // InternalDescartesQL.g:5563:2: ( (lv_intValue_0_0= RULE_INT ) )
+                    // InternalDescartesQL.g:5825:2: ( (lv_intValue_0_0= RULE_INT ) )
                     {
-                    // InternalDescartesQL.g:5563:2: ( (lv_intValue_0_0= RULE_INT ) )
-                    // InternalDescartesQL.g:5564:1: (lv_intValue_0_0= RULE_INT )
+                    // InternalDescartesQL.g:5825:2: ( (lv_intValue_0_0= RULE_INT ) )
+                    // InternalDescartesQL.g:5826:1: (lv_intValue_0_0= RULE_INT )
                     {
-                    // InternalDescartesQL.g:5564:1: (lv_intValue_0_0= RULE_INT )
-                    // InternalDescartesQL.g:5565:3: lv_intValue_0_0= RULE_INT
+                    // InternalDescartesQL.g:5826:1: (lv_intValue_0_0= RULE_INT )
+                    // InternalDescartesQL.g:5827:3: lv_intValue_0_0= RULE_INT
                     {
                     lv_intValue_0_0=(Token)match(input,RULE_INT,FOLLOW_2); 
 
@@ -13480,13 +14144,13 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 2 :
-                    // InternalDescartesQL.g:5582:6: ( (lv_doubleValue_1_0= RULE_DOUBLE ) )
+                    // InternalDescartesQL.g:5844:6: ( (lv_doubleValue_1_0= RULE_DOUBLE ) )
                     {
-                    // InternalDescartesQL.g:5582:6: ( (lv_doubleValue_1_0= RULE_DOUBLE ) )
-                    // InternalDescartesQL.g:5583:1: (lv_doubleValue_1_0= RULE_DOUBLE )
+                    // InternalDescartesQL.g:5844:6: ( (lv_doubleValue_1_0= RULE_DOUBLE ) )
+                    // InternalDescartesQL.g:5845:1: (lv_doubleValue_1_0= RULE_DOUBLE )
                     {
-                    // InternalDescartesQL.g:5583:1: (lv_doubleValue_1_0= RULE_DOUBLE )
-                    // InternalDescartesQL.g:5584:3: lv_doubleValue_1_0= RULE_DOUBLE
+                    // InternalDescartesQL.g:5845:1: (lv_doubleValue_1_0= RULE_DOUBLE )
+                    // InternalDescartesQL.g:5846:3: lv_doubleValue_1_0= RULE_DOUBLE
                     {
                     lv_doubleValue_1_0=(Token)match(input,RULE_DOUBLE,FOLLOW_2); 
 
@@ -13532,7 +14196,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleComparator"
-    // InternalDescartesQL.g:5608:1: ruleComparator returns [Enumerator current=null] : ( (enumLiteral_0= '<' ) | (enumLiteral_1= '<=' ) | (enumLiteral_2= '>' ) | (enumLiteral_3= '>=' ) | (enumLiteral_4= '==' ) ) ;
+    // InternalDescartesQL.g:5870:1: ruleComparator returns [Enumerator current=null] : ( (enumLiteral_0= '<' ) | (enumLiteral_1= '<=' ) | (enumLiteral_2= '>' ) | (enumLiteral_3= '>=' ) | (enumLiteral_4= '==' ) ) ;
     public final Enumerator ruleComparator() throws RecognitionException {
         Enumerator current = null;
 
@@ -13544,52 +14208,52 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
          enterRule(); 
         try {
-            // InternalDescartesQL.g:5610:28: ( ( (enumLiteral_0= '<' ) | (enumLiteral_1= '<=' ) | (enumLiteral_2= '>' ) | (enumLiteral_3= '>=' ) | (enumLiteral_4= '==' ) ) )
-            // InternalDescartesQL.g:5611:1: ( (enumLiteral_0= '<' ) | (enumLiteral_1= '<=' ) | (enumLiteral_2= '>' ) | (enumLiteral_3= '>=' ) | (enumLiteral_4= '==' ) )
+            // InternalDescartesQL.g:5872:28: ( ( (enumLiteral_0= '<' ) | (enumLiteral_1= '<=' ) | (enumLiteral_2= '>' ) | (enumLiteral_3= '>=' ) | (enumLiteral_4= '==' ) ) )
+            // InternalDescartesQL.g:5873:1: ( (enumLiteral_0= '<' ) | (enumLiteral_1= '<=' ) | (enumLiteral_2= '>' ) | (enumLiteral_3= '>=' ) | (enumLiteral_4= '==' ) )
             {
-            // InternalDescartesQL.g:5611:1: ( (enumLiteral_0= '<' ) | (enumLiteral_1= '<=' ) | (enumLiteral_2= '>' ) | (enumLiteral_3= '>=' ) | (enumLiteral_4= '==' ) )
-            int alt65=5;
+            // InternalDescartesQL.g:5873:1: ( (enumLiteral_0= '<' ) | (enumLiteral_1= '<=' ) | (enumLiteral_2= '>' ) | (enumLiteral_3= '>=' ) | (enumLiteral_4= '==' ) )
+            int alt73=5;
             switch ( input.LA(1) ) {
-            case 45:
+            case 49:
                 {
-                alt65=1;
+                alt73=1;
                 }
                 break;
-            case 72:
+            case 76:
                 {
-                alt65=2;
+                alt73=2;
                 }
                 break;
-            case 46:
+            case 50:
                 {
-                alt65=3;
+                alt73=3;
                 }
                 break;
-            case 73:
+            case 77:
                 {
-                alt65=4;
+                alt73=4;
                 }
                 break;
-            case 74:
+            case 78:
                 {
-                alt65=5;
+                alt73=5;
                 }
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("", 65, 0, input);
+                    new NoViableAltException("", 73, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt65) {
+            switch (alt73) {
                 case 1 :
-                    // InternalDescartesQL.g:5611:2: (enumLiteral_0= '<' )
+                    // InternalDescartesQL.g:5873:2: (enumLiteral_0= '<' )
                     {
-                    // InternalDescartesQL.g:5611:2: (enumLiteral_0= '<' )
-                    // InternalDescartesQL.g:5611:4: enumLiteral_0= '<'
+                    // InternalDescartesQL.g:5873:2: (enumLiteral_0= '<' )
+                    // InternalDescartesQL.g:5873:4: enumLiteral_0= '<'
                     {
-                    enumLiteral_0=(Token)match(input,45,FOLLOW_2); 
+                    enumLiteral_0=(Token)match(input,49,FOLLOW_2); 
 
                             current = grammarAccess.getComparatorAccess().getLessEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_0, grammarAccess.getComparatorAccess().getLessEnumLiteralDeclaration_0()); 
@@ -13601,12 +14265,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 2 :
-                    // InternalDescartesQL.g:5617:6: (enumLiteral_1= '<=' )
+                    // InternalDescartesQL.g:5879:6: (enumLiteral_1= '<=' )
                     {
-                    // InternalDescartesQL.g:5617:6: (enumLiteral_1= '<=' )
-                    // InternalDescartesQL.g:5617:8: enumLiteral_1= '<='
+                    // InternalDescartesQL.g:5879:6: (enumLiteral_1= '<=' )
+                    // InternalDescartesQL.g:5879:8: enumLiteral_1= '<='
                     {
-                    enumLiteral_1=(Token)match(input,72,FOLLOW_2); 
+                    enumLiteral_1=(Token)match(input,76,FOLLOW_2); 
 
                             current = grammarAccess.getComparatorAccess().getLessEqualEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_1, grammarAccess.getComparatorAccess().getLessEqualEnumLiteralDeclaration_1()); 
@@ -13618,12 +14282,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 3 :
-                    // InternalDescartesQL.g:5623:6: (enumLiteral_2= '>' )
+                    // InternalDescartesQL.g:5885:6: (enumLiteral_2= '>' )
                     {
-                    // InternalDescartesQL.g:5623:6: (enumLiteral_2= '>' )
-                    // InternalDescartesQL.g:5623:8: enumLiteral_2= '>'
+                    // InternalDescartesQL.g:5885:6: (enumLiteral_2= '>' )
+                    // InternalDescartesQL.g:5885:8: enumLiteral_2= '>'
                     {
-                    enumLiteral_2=(Token)match(input,46,FOLLOW_2); 
+                    enumLiteral_2=(Token)match(input,50,FOLLOW_2); 
 
                             current = grammarAccess.getComparatorAccess().getGreaterEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_2, grammarAccess.getComparatorAccess().getGreaterEnumLiteralDeclaration_2()); 
@@ -13635,12 +14299,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 4 :
-                    // InternalDescartesQL.g:5629:6: (enumLiteral_3= '>=' )
+                    // InternalDescartesQL.g:5891:6: (enumLiteral_3= '>=' )
                     {
-                    // InternalDescartesQL.g:5629:6: (enumLiteral_3= '>=' )
-                    // InternalDescartesQL.g:5629:8: enumLiteral_3= '>='
+                    // InternalDescartesQL.g:5891:6: (enumLiteral_3= '>=' )
+                    // InternalDescartesQL.g:5891:8: enumLiteral_3= '>='
                     {
-                    enumLiteral_3=(Token)match(input,73,FOLLOW_2); 
+                    enumLiteral_3=(Token)match(input,77,FOLLOW_2); 
 
                             current = grammarAccess.getComparatorAccess().getGreaterEqualEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_3, grammarAccess.getComparatorAccess().getGreaterEqualEnumLiteralDeclaration_3()); 
@@ -13652,12 +14316,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 5 :
-                    // InternalDescartesQL.g:5635:6: (enumLiteral_4= '==' )
+                    // InternalDescartesQL.g:5897:6: (enumLiteral_4= '==' )
                     {
-                    // InternalDescartesQL.g:5635:6: (enumLiteral_4= '==' )
-                    // InternalDescartesQL.g:5635:8: enumLiteral_4= '=='
+                    // InternalDescartesQL.g:5897:6: (enumLiteral_4= '==' )
+                    // InternalDescartesQL.g:5897:8: enumLiteral_4= '=='
                     {
-                    enumLiteral_4=(Token)match(input,74,FOLLOW_2); 
+                    enumLiteral_4=(Token)match(input,78,FOLLOW_2); 
 
                             current = grammarAccess.getComparatorAccess().getEqualEnumLiteralDeclaration_4().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_4, grammarAccess.getComparatorAccess().getEqualEnumLiteralDeclaration_4()); 
@@ -13689,7 +14353,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleCurrency"
-    // InternalDescartesQL.g:5645:1: ruleCurrency returns [Enumerator current=null] : ( (enumLiteral_0= 'EUR' ) | (enumLiteral_1= 'USD' ) ) ;
+    // InternalDescartesQL.g:5907:1: ruleCurrency returns [Enumerator current=null] : ( (enumLiteral_0= 'EUR' ) | (enumLiteral_1= 'USD' ) ) ;
     public final Enumerator ruleCurrency() throws RecognitionException {
         Enumerator current = null;
 
@@ -13698,33 +14362,33 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
          enterRule(); 
         try {
-            // InternalDescartesQL.g:5647:28: ( ( (enumLiteral_0= 'EUR' ) | (enumLiteral_1= 'USD' ) ) )
-            // InternalDescartesQL.g:5648:1: ( (enumLiteral_0= 'EUR' ) | (enumLiteral_1= 'USD' ) )
+            // InternalDescartesQL.g:5909:28: ( ( (enumLiteral_0= 'EUR' ) | (enumLiteral_1= 'USD' ) ) )
+            // InternalDescartesQL.g:5910:1: ( (enumLiteral_0= 'EUR' ) | (enumLiteral_1= 'USD' ) )
             {
-            // InternalDescartesQL.g:5648:1: ( (enumLiteral_0= 'EUR' ) | (enumLiteral_1= 'USD' ) )
-            int alt66=2;
-            int LA66_0 = input.LA(1);
+            // InternalDescartesQL.g:5910:1: ( (enumLiteral_0= 'EUR' ) | (enumLiteral_1= 'USD' ) )
+            int alt74=2;
+            int LA74_0 = input.LA(1);
 
-            if ( (LA66_0==75) ) {
-                alt66=1;
+            if ( (LA74_0==79) ) {
+                alt74=1;
             }
-            else if ( (LA66_0==76) ) {
-                alt66=2;
+            else if ( (LA74_0==80) ) {
+                alt74=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("", 66, 0, input);
+                    new NoViableAltException("", 74, 0, input);
 
                 throw nvae;
             }
-            switch (alt66) {
+            switch (alt74) {
                 case 1 :
-                    // InternalDescartesQL.g:5648:2: (enumLiteral_0= 'EUR' )
+                    // InternalDescartesQL.g:5910:2: (enumLiteral_0= 'EUR' )
                     {
-                    // InternalDescartesQL.g:5648:2: (enumLiteral_0= 'EUR' )
-                    // InternalDescartesQL.g:5648:4: enumLiteral_0= 'EUR'
+                    // InternalDescartesQL.g:5910:2: (enumLiteral_0= 'EUR' )
+                    // InternalDescartesQL.g:5910:4: enumLiteral_0= 'EUR'
                     {
-                    enumLiteral_0=(Token)match(input,75,FOLLOW_2); 
+                    enumLiteral_0=(Token)match(input,79,FOLLOW_2); 
 
                             current = grammarAccess.getCurrencyAccess().getEuroEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_0, grammarAccess.getCurrencyAccess().getEuroEnumLiteralDeclaration_0()); 
@@ -13736,12 +14400,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 2 :
-                    // InternalDescartesQL.g:5654:6: (enumLiteral_1= 'USD' )
+                    // InternalDescartesQL.g:5916:6: (enumLiteral_1= 'USD' )
                     {
-                    // InternalDescartesQL.g:5654:6: (enumLiteral_1= 'USD' )
-                    // InternalDescartesQL.g:5654:8: enumLiteral_1= 'USD'
+                    // InternalDescartesQL.g:5916:6: (enumLiteral_1= 'USD' )
+                    // InternalDescartesQL.g:5916:8: enumLiteral_1= 'USD'
                     {
-                    enumLiteral_1=(Token)match(input,76,FOLLOW_2); 
+                    enumLiteral_1=(Token)match(input,80,FOLLOW_2); 
 
                             current = grammarAccess.getCurrencyAccess().getUsDollarEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_1, grammarAccess.getCurrencyAccess().getUsDollarEnumLiteralDeclaration_1()); 
@@ -13773,7 +14437,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleFilterConjunction"
-    // InternalDescartesQL.g:5664:1: ruleFilterConjunction returns [Enumerator current=null] : ( (enumLiteral_0= 'AND' ) | (enumLiteral_1= 'XOR' ) | (enumLiteral_2= 'OR' ) ) ;
+    // InternalDescartesQL.g:5926:1: ruleFilterConjunction returns [Enumerator current=null] : ( (enumLiteral_0= 'AND' ) | (enumLiteral_1= 'XOR' ) | (enumLiteral_2= 'OR' ) ) ;
     public final Enumerator ruleFilterConjunction() throws RecognitionException {
         Enumerator current = null;
 
@@ -13783,42 +14447,42 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
          enterRule(); 
         try {
-            // InternalDescartesQL.g:5666:28: ( ( (enumLiteral_0= 'AND' ) | (enumLiteral_1= 'XOR' ) | (enumLiteral_2= 'OR' ) ) )
-            // InternalDescartesQL.g:5667:1: ( (enumLiteral_0= 'AND' ) | (enumLiteral_1= 'XOR' ) | (enumLiteral_2= 'OR' ) )
+            // InternalDescartesQL.g:5928:28: ( ( (enumLiteral_0= 'AND' ) | (enumLiteral_1= 'XOR' ) | (enumLiteral_2= 'OR' ) ) )
+            // InternalDescartesQL.g:5929:1: ( (enumLiteral_0= 'AND' ) | (enumLiteral_1= 'XOR' ) | (enumLiteral_2= 'OR' ) )
             {
-            // InternalDescartesQL.g:5667:1: ( (enumLiteral_0= 'AND' ) | (enumLiteral_1= 'XOR' ) | (enumLiteral_2= 'OR' ) )
-            int alt67=3;
+            // InternalDescartesQL.g:5929:1: ( (enumLiteral_0= 'AND' ) | (enumLiteral_1= 'XOR' ) | (enumLiteral_2= 'OR' ) )
+            int alt75=3;
             switch ( input.LA(1) ) {
-            case 64:
+            case 68:
                 {
-                alt67=1;
+                alt75=1;
                 }
                 break;
-            case 77:
+            case 81:
                 {
-                alt67=2;
+                alt75=2;
                 }
                 break;
-            case 78:
+            case 82:
                 {
-                alt67=3;
+                alt75=3;
                 }
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("", 67, 0, input);
+                    new NoViableAltException("", 75, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt67) {
+            switch (alt75) {
                 case 1 :
-                    // InternalDescartesQL.g:5667:2: (enumLiteral_0= 'AND' )
+                    // InternalDescartesQL.g:5929:2: (enumLiteral_0= 'AND' )
                     {
-                    // InternalDescartesQL.g:5667:2: (enumLiteral_0= 'AND' )
-                    // InternalDescartesQL.g:5667:4: enumLiteral_0= 'AND'
+                    // InternalDescartesQL.g:5929:2: (enumLiteral_0= 'AND' )
+                    // InternalDescartesQL.g:5929:4: enumLiteral_0= 'AND'
                     {
-                    enumLiteral_0=(Token)match(input,64,FOLLOW_2); 
+                    enumLiteral_0=(Token)match(input,68,FOLLOW_2); 
 
                             current = grammarAccess.getFilterConjunctionAccess().getANDEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_0, grammarAccess.getFilterConjunctionAccess().getANDEnumLiteralDeclaration_0()); 
@@ -13830,12 +14494,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 2 :
-                    // InternalDescartesQL.g:5673:6: (enumLiteral_1= 'XOR' )
+                    // InternalDescartesQL.g:5935:6: (enumLiteral_1= 'XOR' )
                     {
-                    // InternalDescartesQL.g:5673:6: (enumLiteral_1= 'XOR' )
-                    // InternalDescartesQL.g:5673:8: enumLiteral_1= 'XOR'
+                    // InternalDescartesQL.g:5935:6: (enumLiteral_1= 'XOR' )
+                    // InternalDescartesQL.g:5935:8: enumLiteral_1= 'XOR'
                     {
-                    enumLiteral_1=(Token)match(input,77,FOLLOW_2); 
+                    enumLiteral_1=(Token)match(input,81,FOLLOW_2); 
 
                             current = grammarAccess.getFilterConjunctionAccess().getXOREnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_1, grammarAccess.getFilterConjunctionAccess().getXOREnumLiteralDeclaration_1()); 
@@ -13847,12 +14511,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 3 :
-                    // InternalDescartesQL.g:5679:6: (enumLiteral_2= 'OR' )
+                    // InternalDescartesQL.g:5941:6: (enumLiteral_2= 'OR' )
                     {
-                    // InternalDescartesQL.g:5679:6: (enumLiteral_2= 'OR' )
-                    // InternalDescartesQL.g:5679:8: enumLiteral_2= 'OR'
+                    // InternalDescartesQL.g:5941:6: (enumLiteral_2= 'OR' )
+                    // InternalDescartesQL.g:5941:8: enumLiteral_2= 'OR'
                     {
-                    enumLiteral_2=(Token)match(input,78,FOLLOW_2); 
+                    enumLiteral_2=(Token)match(input,82,FOLLOW_2); 
 
                             current = grammarAccess.getFilterConjunctionAccess().getOREnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_2, grammarAccess.getFilterConjunctionAccess().getOREnumLiteralDeclaration_2()); 
@@ -13884,7 +14548,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleFilterConditionType"
-    // InternalDescartesQL.g:5689:1: ruleFilterConditionType returns [Enumerator current=null] : ( (enumLiteral_0= 'INSTANCEOF' ) | (enumLiteral_1= 'CLASSREGEX' ) ) ;
+    // InternalDescartesQL.g:5951:1: ruleFilterConditionType returns [Enumerator current=null] : ( (enumLiteral_0= 'INSTANCEOF' ) | (enumLiteral_1= 'CLASSREGEX' ) ) ;
     public final Enumerator ruleFilterConditionType() throws RecognitionException {
         Enumerator current = null;
 
@@ -13893,33 +14557,33 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
          enterRule(); 
         try {
-            // InternalDescartesQL.g:5691:28: ( ( (enumLiteral_0= 'INSTANCEOF' ) | (enumLiteral_1= 'CLASSREGEX' ) ) )
-            // InternalDescartesQL.g:5692:1: ( (enumLiteral_0= 'INSTANCEOF' ) | (enumLiteral_1= 'CLASSREGEX' ) )
+            // InternalDescartesQL.g:5953:28: ( ( (enumLiteral_0= 'INSTANCEOF' ) | (enumLiteral_1= 'CLASSREGEX' ) ) )
+            // InternalDescartesQL.g:5954:1: ( (enumLiteral_0= 'INSTANCEOF' ) | (enumLiteral_1= 'CLASSREGEX' ) )
             {
-            // InternalDescartesQL.g:5692:1: ( (enumLiteral_0= 'INSTANCEOF' ) | (enumLiteral_1= 'CLASSREGEX' ) )
-            int alt68=2;
-            int LA68_0 = input.LA(1);
+            // InternalDescartesQL.g:5954:1: ( (enumLiteral_0= 'INSTANCEOF' ) | (enumLiteral_1= 'CLASSREGEX' ) )
+            int alt76=2;
+            int LA76_0 = input.LA(1);
 
-            if ( (LA68_0==79) ) {
-                alt68=1;
+            if ( (LA76_0==83) ) {
+                alt76=1;
             }
-            else if ( (LA68_0==80) ) {
-                alt68=2;
+            else if ( (LA76_0==84) ) {
+                alt76=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("", 68, 0, input);
+                    new NoViableAltException("", 76, 0, input);
 
                 throw nvae;
             }
-            switch (alt68) {
+            switch (alt76) {
                 case 1 :
-                    // InternalDescartesQL.g:5692:2: (enumLiteral_0= 'INSTANCEOF' )
+                    // InternalDescartesQL.g:5954:2: (enumLiteral_0= 'INSTANCEOF' )
                     {
-                    // InternalDescartesQL.g:5692:2: (enumLiteral_0= 'INSTANCEOF' )
-                    // InternalDescartesQL.g:5692:4: enumLiteral_0= 'INSTANCEOF'
+                    // InternalDescartesQL.g:5954:2: (enumLiteral_0= 'INSTANCEOF' )
+                    // InternalDescartesQL.g:5954:4: enumLiteral_0= 'INSTANCEOF'
                     {
-                    enumLiteral_0=(Token)match(input,79,FOLLOW_2); 
+                    enumLiteral_0=(Token)match(input,83,FOLLOW_2); 
 
                             current = grammarAccess.getFilterConditionTypeAccess().getINSTANCEOFEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_0, grammarAccess.getFilterConditionTypeAccess().getINSTANCEOFEnumLiteralDeclaration_0()); 
@@ -13931,12 +14595,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 2 :
-                    // InternalDescartesQL.g:5698:6: (enumLiteral_1= 'CLASSREGEX' )
+                    // InternalDescartesQL.g:5960:6: (enumLiteral_1= 'CLASSREGEX' )
                     {
-                    // InternalDescartesQL.g:5698:6: (enumLiteral_1= 'CLASSREGEX' )
-                    // InternalDescartesQL.g:5698:8: enumLiteral_1= 'CLASSREGEX'
+                    // InternalDescartesQL.g:5960:6: (enumLiteral_1= 'CLASSREGEX' )
+                    // InternalDescartesQL.g:5960:8: enumLiteral_1= 'CLASSREGEX'
                     {
-                    enumLiteral_1=(Token)match(input,80,FOLLOW_2); 
+                    enumLiteral_1=(Token)match(input,84,FOLLOW_2); 
 
                             current = grammarAccess.getFilterConditionTypeAccess().getCLASSREGEXEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_1, grammarAccess.getFilterConditionTypeAccess().getCLASSREGEXEnumLiteralDeclaration_1()); 
@@ -13968,7 +14632,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleObserveRelativeDirectionType"
-    // InternalDescartesQL.g:5708:1: ruleObserveRelativeDirectionType returns [Enumerator current=null] : ( (enumLiteral_0= 'SINCE' ) | (enumLiteral_1= 'NEXT' ) ) ;
+    // InternalDescartesQL.g:5970:1: ruleObserveRelativeDirectionType returns [Enumerator current=null] : ( (enumLiteral_0= 'SINCE' ) | (enumLiteral_1= 'NEXT' ) ) ;
     public final Enumerator ruleObserveRelativeDirectionType() throws RecognitionException {
         Enumerator current = null;
 
@@ -13977,33 +14641,33 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
          enterRule(); 
         try {
-            // InternalDescartesQL.g:5710:28: ( ( (enumLiteral_0= 'SINCE' ) | (enumLiteral_1= 'NEXT' ) ) )
-            // InternalDescartesQL.g:5711:1: ( (enumLiteral_0= 'SINCE' ) | (enumLiteral_1= 'NEXT' ) )
+            // InternalDescartesQL.g:5972:28: ( ( (enumLiteral_0= 'SINCE' ) | (enumLiteral_1= 'NEXT' ) ) )
+            // InternalDescartesQL.g:5973:1: ( (enumLiteral_0= 'SINCE' ) | (enumLiteral_1= 'NEXT' ) )
             {
-            // InternalDescartesQL.g:5711:1: ( (enumLiteral_0= 'SINCE' ) | (enumLiteral_1= 'NEXT' ) )
-            int alt69=2;
-            int LA69_0 = input.LA(1);
+            // InternalDescartesQL.g:5973:1: ( (enumLiteral_0= 'SINCE' ) | (enumLiteral_1= 'NEXT' ) )
+            int alt77=2;
+            int LA77_0 = input.LA(1);
 
-            if ( (LA69_0==81) ) {
-                alt69=1;
+            if ( (LA77_0==85) ) {
+                alt77=1;
             }
-            else if ( (LA69_0==82) ) {
-                alt69=2;
+            else if ( (LA77_0==86) ) {
+                alt77=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("", 69, 0, input);
+                    new NoViableAltException("", 77, 0, input);
 
                 throw nvae;
             }
-            switch (alt69) {
+            switch (alt77) {
                 case 1 :
-                    // InternalDescartesQL.g:5711:2: (enumLiteral_0= 'SINCE' )
+                    // InternalDescartesQL.g:5973:2: (enumLiteral_0= 'SINCE' )
                     {
-                    // InternalDescartesQL.g:5711:2: (enumLiteral_0= 'SINCE' )
-                    // InternalDescartesQL.g:5711:4: enumLiteral_0= 'SINCE'
+                    // InternalDescartesQL.g:5973:2: (enumLiteral_0= 'SINCE' )
+                    // InternalDescartesQL.g:5973:4: enumLiteral_0= 'SINCE'
                     {
-                    enumLiteral_0=(Token)match(input,81,FOLLOW_2); 
+                    enumLiteral_0=(Token)match(input,85,FOLLOW_2); 
 
                             current = grammarAccess.getObserveRelativeDirectionTypeAccess().getSINCEEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_0, grammarAccess.getObserveRelativeDirectionTypeAccess().getSINCEEnumLiteralDeclaration_0()); 
@@ -14015,12 +14679,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 2 :
-                    // InternalDescartesQL.g:5717:6: (enumLiteral_1= 'NEXT' )
+                    // InternalDescartesQL.g:5979:6: (enumLiteral_1= 'NEXT' )
                     {
-                    // InternalDescartesQL.g:5717:6: (enumLiteral_1= 'NEXT' )
-                    // InternalDescartesQL.g:5717:8: enumLiteral_1= 'NEXT'
+                    // InternalDescartesQL.g:5979:6: (enumLiteral_1= 'NEXT' )
+                    // InternalDescartesQL.g:5979:8: enumLiteral_1= 'NEXT'
                     {
-                    enumLiteral_1=(Token)match(input,82,FOLLOW_2); 
+                    enumLiteral_1=(Token)match(input,86,FOLLOW_2); 
 
                             current = grammarAccess.getObserveRelativeDirectionTypeAccess().getNEXTEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_1, grammarAccess.getObserveRelativeDirectionTypeAccess().getNEXTEnumLiteralDeclaration_1()); 
@@ -14052,7 +14716,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleRelativeTimeSignType"
-    // InternalDescartesQL.g:5727:1: ruleRelativeTimeSignType returns [Enumerator current=null] : ( (enumLiteral_0= '-' ) | (enumLiteral_1= '+' ) ) ;
+    // InternalDescartesQL.g:5989:1: ruleRelativeTimeSignType returns [Enumerator current=null] : ( (enumLiteral_0= '-' ) | (enumLiteral_1= '+' ) ) ;
     public final Enumerator ruleRelativeTimeSignType() throws RecognitionException {
         Enumerator current = null;
 
@@ -14061,33 +14725,33 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
          enterRule(); 
         try {
-            // InternalDescartesQL.g:5729:28: ( ( (enumLiteral_0= '-' ) | (enumLiteral_1= '+' ) ) )
-            // InternalDescartesQL.g:5730:1: ( (enumLiteral_0= '-' ) | (enumLiteral_1= '+' ) )
+            // InternalDescartesQL.g:5991:28: ( ( (enumLiteral_0= '-' ) | (enumLiteral_1= '+' ) ) )
+            // InternalDescartesQL.g:5992:1: ( (enumLiteral_0= '-' ) | (enumLiteral_1= '+' ) )
             {
-            // InternalDescartesQL.g:5730:1: ( (enumLiteral_0= '-' ) | (enumLiteral_1= '+' ) )
-            int alt70=2;
-            int LA70_0 = input.LA(1);
+            // InternalDescartesQL.g:5992:1: ( (enumLiteral_0= '-' ) | (enumLiteral_1= '+' ) )
+            int alt78=2;
+            int LA78_0 = input.LA(1);
 
-            if ( (LA70_0==83) ) {
-                alt70=1;
+            if ( (LA78_0==87) ) {
+                alt78=1;
             }
-            else if ( (LA70_0==84) ) {
-                alt70=2;
+            else if ( (LA78_0==88) ) {
+                alt78=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("", 70, 0, input);
+                    new NoViableAltException("", 78, 0, input);
 
                 throw nvae;
             }
-            switch (alt70) {
+            switch (alt78) {
                 case 1 :
-                    // InternalDescartesQL.g:5730:2: (enumLiteral_0= '-' )
+                    // InternalDescartesQL.g:5992:2: (enumLiteral_0= '-' )
                     {
-                    // InternalDescartesQL.g:5730:2: (enumLiteral_0= '-' )
-                    // InternalDescartesQL.g:5730:4: enumLiteral_0= '-'
+                    // InternalDescartesQL.g:5992:2: (enumLiteral_0= '-' )
+                    // InternalDescartesQL.g:5992:4: enumLiteral_0= '-'
                     {
-                    enumLiteral_0=(Token)match(input,83,FOLLOW_2); 
+                    enumLiteral_0=(Token)match(input,87,FOLLOW_2); 
 
                             current = grammarAccess.getRelativeTimeSignTypeAccess().getMINUSEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_0, grammarAccess.getRelativeTimeSignTypeAccess().getMINUSEnumLiteralDeclaration_0()); 
@@ -14099,12 +14763,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 2 :
-                    // InternalDescartesQL.g:5736:6: (enumLiteral_1= '+' )
+                    // InternalDescartesQL.g:5998:6: (enumLiteral_1= '+' )
                     {
-                    // InternalDescartesQL.g:5736:6: (enumLiteral_1= '+' )
-                    // InternalDescartesQL.g:5736:8: enumLiteral_1= '+'
+                    // InternalDescartesQL.g:5998:6: (enumLiteral_1= '+' )
+                    // InternalDescartesQL.g:5998:8: enumLiteral_1= '+'
                     {
-                    enumLiteral_1=(Token)match(input,84,FOLLOW_2); 
+                    enumLiteral_1=(Token)match(input,88,FOLLOW_2); 
 
                             current = grammarAccess.getRelativeTimeSignTypeAccess().getPLUSEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_1, grammarAccess.getRelativeTimeSignTypeAccess().getPLUSEnumLiteralDeclaration_1()); 
@@ -14136,7 +14800,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleTimeModifierType"
-    // InternalDescartesQL.g:5746:1: ruleTimeModifierType returns [Enumerator current=null] : ( (enumLiteral_0= 'y' ) | (enumLiteral_1= 'm' ) | (enumLiteral_2= 'w' ) | (enumLiteral_3= 'd' ) | (enumLiteral_4= 'h' ) | (enumLiteral_5= 'M' ) | (enumLiteral_6= 's' ) | (enumLiteral_7= 'S' ) ) ;
+    // InternalDescartesQL.g:6008:1: ruleTimeModifierType returns [Enumerator current=null] : ( (enumLiteral_0= 'y' ) | (enumLiteral_1= 'm' ) | (enumLiteral_2= 'w' ) | (enumLiteral_3= 'd' ) | (enumLiteral_4= 'h' ) | (enumLiteral_5= 'M' ) | (enumLiteral_6= 's' ) | (enumLiteral_7= 'S' ) ) ;
     public final Enumerator ruleTimeModifierType() throws RecognitionException {
         Enumerator current = null;
 
@@ -14151,67 +14815,67 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
          enterRule(); 
         try {
-            // InternalDescartesQL.g:5748:28: ( ( (enumLiteral_0= 'y' ) | (enumLiteral_1= 'm' ) | (enumLiteral_2= 'w' ) | (enumLiteral_3= 'd' ) | (enumLiteral_4= 'h' ) | (enumLiteral_5= 'M' ) | (enumLiteral_6= 's' ) | (enumLiteral_7= 'S' ) ) )
-            // InternalDescartesQL.g:5749:1: ( (enumLiteral_0= 'y' ) | (enumLiteral_1= 'm' ) | (enumLiteral_2= 'w' ) | (enumLiteral_3= 'd' ) | (enumLiteral_4= 'h' ) | (enumLiteral_5= 'M' ) | (enumLiteral_6= 's' ) | (enumLiteral_7= 'S' ) )
+            // InternalDescartesQL.g:6010:28: ( ( (enumLiteral_0= 'y' ) | (enumLiteral_1= 'm' ) | (enumLiteral_2= 'w' ) | (enumLiteral_3= 'd' ) | (enumLiteral_4= 'h' ) | (enumLiteral_5= 'M' ) | (enumLiteral_6= 's' ) | (enumLiteral_7= 'S' ) ) )
+            // InternalDescartesQL.g:6011:1: ( (enumLiteral_0= 'y' ) | (enumLiteral_1= 'm' ) | (enumLiteral_2= 'w' ) | (enumLiteral_3= 'd' ) | (enumLiteral_4= 'h' ) | (enumLiteral_5= 'M' ) | (enumLiteral_6= 's' ) | (enumLiteral_7= 'S' ) )
             {
-            // InternalDescartesQL.g:5749:1: ( (enumLiteral_0= 'y' ) | (enumLiteral_1= 'm' ) | (enumLiteral_2= 'w' ) | (enumLiteral_3= 'd' ) | (enumLiteral_4= 'h' ) | (enumLiteral_5= 'M' ) | (enumLiteral_6= 's' ) | (enumLiteral_7= 'S' ) )
-            int alt71=8;
+            // InternalDescartesQL.g:6011:1: ( (enumLiteral_0= 'y' ) | (enumLiteral_1= 'm' ) | (enumLiteral_2= 'w' ) | (enumLiteral_3= 'd' ) | (enumLiteral_4= 'h' ) | (enumLiteral_5= 'M' ) | (enumLiteral_6= 's' ) | (enumLiteral_7= 'S' ) )
+            int alt79=8;
             switch ( input.LA(1) ) {
-            case 85:
+            case 89:
                 {
-                alt71=1;
+                alt79=1;
                 }
                 break;
-            case 86:
+            case 90:
                 {
-                alt71=2;
+                alt79=2;
                 }
                 break;
-            case 87:
+            case 91:
                 {
-                alt71=3;
+                alt79=3;
                 }
                 break;
-            case 88:
+            case 92:
                 {
-                alt71=4;
+                alt79=4;
                 }
                 break;
-            case 89:
+            case 93:
                 {
-                alt71=5;
+                alt79=5;
                 }
                 break;
-            case 90:
+            case 94:
                 {
-                alt71=6;
+                alt79=6;
                 }
                 break;
-            case 91:
+            case 95:
                 {
-                alt71=7;
+                alt79=7;
                 }
                 break;
-            case 92:
+            case 96:
                 {
-                alt71=8;
+                alt79=8;
                 }
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("", 71, 0, input);
+                    new NoViableAltException("", 79, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt71) {
+            switch (alt79) {
                 case 1 :
-                    // InternalDescartesQL.g:5749:2: (enumLiteral_0= 'y' )
+                    // InternalDescartesQL.g:6011:2: (enumLiteral_0= 'y' )
                     {
-                    // InternalDescartesQL.g:5749:2: (enumLiteral_0= 'y' )
-                    // InternalDescartesQL.g:5749:4: enumLiteral_0= 'y'
+                    // InternalDescartesQL.g:6011:2: (enumLiteral_0= 'y' )
+                    // InternalDescartesQL.g:6011:4: enumLiteral_0= 'y'
                     {
-                    enumLiteral_0=(Token)match(input,85,FOLLOW_2); 
+                    enumLiteral_0=(Token)match(input,89,FOLLOW_2); 
 
                             current = grammarAccess.getTimeModifierTypeAccess().getYEAREnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_0, grammarAccess.getTimeModifierTypeAccess().getYEAREnumLiteralDeclaration_0()); 
@@ -14223,12 +14887,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 2 :
-                    // InternalDescartesQL.g:5755:6: (enumLiteral_1= 'm' )
+                    // InternalDescartesQL.g:6017:6: (enumLiteral_1= 'm' )
                     {
-                    // InternalDescartesQL.g:5755:6: (enumLiteral_1= 'm' )
-                    // InternalDescartesQL.g:5755:8: enumLiteral_1= 'm'
+                    // InternalDescartesQL.g:6017:6: (enumLiteral_1= 'm' )
+                    // InternalDescartesQL.g:6017:8: enumLiteral_1= 'm'
                     {
-                    enumLiteral_1=(Token)match(input,86,FOLLOW_2); 
+                    enumLiteral_1=(Token)match(input,90,FOLLOW_2); 
 
                             current = grammarAccess.getTimeModifierTypeAccess().getMONTHEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_1, grammarAccess.getTimeModifierTypeAccess().getMONTHEnumLiteralDeclaration_1()); 
@@ -14240,12 +14904,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 3 :
-                    // InternalDescartesQL.g:5761:6: (enumLiteral_2= 'w' )
+                    // InternalDescartesQL.g:6023:6: (enumLiteral_2= 'w' )
                     {
-                    // InternalDescartesQL.g:5761:6: (enumLiteral_2= 'w' )
-                    // InternalDescartesQL.g:5761:8: enumLiteral_2= 'w'
+                    // InternalDescartesQL.g:6023:6: (enumLiteral_2= 'w' )
+                    // InternalDescartesQL.g:6023:8: enumLiteral_2= 'w'
                     {
-                    enumLiteral_2=(Token)match(input,87,FOLLOW_2); 
+                    enumLiteral_2=(Token)match(input,91,FOLLOW_2); 
 
                             current = grammarAccess.getTimeModifierTypeAccess().getWEEKEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_2, grammarAccess.getTimeModifierTypeAccess().getWEEKEnumLiteralDeclaration_2()); 
@@ -14257,12 +14921,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 4 :
-                    // InternalDescartesQL.g:5767:6: (enumLiteral_3= 'd' )
+                    // InternalDescartesQL.g:6029:6: (enumLiteral_3= 'd' )
                     {
-                    // InternalDescartesQL.g:5767:6: (enumLiteral_3= 'd' )
-                    // InternalDescartesQL.g:5767:8: enumLiteral_3= 'd'
+                    // InternalDescartesQL.g:6029:6: (enumLiteral_3= 'd' )
+                    // InternalDescartesQL.g:6029:8: enumLiteral_3= 'd'
                     {
-                    enumLiteral_3=(Token)match(input,88,FOLLOW_2); 
+                    enumLiteral_3=(Token)match(input,92,FOLLOW_2); 
 
                             current = grammarAccess.getTimeModifierTypeAccess().getDAYEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_3, grammarAccess.getTimeModifierTypeAccess().getDAYEnumLiteralDeclaration_3()); 
@@ -14274,12 +14938,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 5 :
-                    // InternalDescartesQL.g:5773:6: (enumLiteral_4= 'h' )
+                    // InternalDescartesQL.g:6035:6: (enumLiteral_4= 'h' )
                     {
-                    // InternalDescartesQL.g:5773:6: (enumLiteral_4= 'h' )
-                    // InternalDescartesQL.g:5773:8: enumLiteral_4= 'h'
+                    // InternalDescartesQL.g:6035:6: (enumLiteral_4= 'h' )
+                    // InternalDescartesQL.g:6035:8: enumLiteral_4= 'h'
                     {
-                    enumLiteral_4=(Token)match(input,89,FOLLOW_2); 
+                    enumLiteral_4=(Token)match(input,93,FOLLOW_2); 
 
                             current = grammarAccess.getTimeModifierTypeAccess().getHOUREnumLiteralDeclaration_4().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_4, grammarAccess.getTimeModifierTypeAccess().getHOUREnumLiteralDeclaration_4()); 
@@ -14291,12 +14955,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 6 :
-                    // InternalDescartesQL.g:5779:6: (enumLiteral_5= 'M' )
+                    // InternalDescartesQL.g:6041:6: (enumLiteral_5= 'M' )
                     {
-                    // InternalDescartesQL.g:5779:6: (enumLiteral_5= 'M' )
-                    // InternalDescartesQL.g:5779:8: enumLiteral_5= 'M'
+                    // InternalDescartesQL.g:6041:6: (enumLiteral_5= 'M' )
+                    // InternalDescartesQL.g:6041:8: enumLiteral_5= 'M'
                     {
-                    enumLiteral_5=(Token)match(input,90,FOLLOW_2); 
+                    enumLiteral_5=(Token)match(input,94,FOLLOW_2); 
 
                             current = grammarAccess.getTimeModifierTypeAccess().getMINUTEEnumLiteralDeclaration_5().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_5, grammarAccess.getTimeModifierTypeAccess().getMINUTEEnumLiteralDeclaration_5()); 
@@ -14308,12 +14972,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 7 :
-                    // InternalDescartesQL.g:5785:6: (enumLiteral_6= 's' )
+                    // InternalDescartesQL.g:6047:6: (enumLiteral_6= 's' )
                     {
-                    // InternalDescartesQL.g:5785:6: (enumLiteral_6= 's' )
-                    // InternalDescartesQL.g:5785:8: enumLiteral_6= 's'
+                    // InternalDescartesQL.g:6047:6: (enumLiteral_6= 's' )
+                    // InternalDescartesQL.g:6047:8: enumLiteral_6= 's'
                     {
-                    enumLiteral_6=(Token)match(input,91,FOLLOW_2); 
+                    enumLiteral_6=(Token)match(input,95,FOLLOW_2); 
 
                             current = grammarAccess.getTimeModifierTypeAccess().getSECONDEnumLiteralDeclaration_6().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_6, grammarAccess.getTimeModifierTypeAccess().getSECONDEnumLiteralDeclaration_6()); 
@@ -14325,12 +14989,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 8 :
-                    // InternalDescartesQL.g:5791:6: (enumLiteral_7= 'S' )
+                    // InternalDescartesQL.g:6053:6: (enumLiteral_7= 'S' )
                     {
-                    // InternalDescartesQL.g:5791:6: (enumLiteral_7= 'S' )
-                    // InternalDescartesQL.g:5791:8: enumLiteral_7= 'S'
+                    // InternalDescartesQL.g:6053:6: (enumLiteral_7= 'S' )
+                    // InternalDescartesQL.g:6053:8: enumLiteral_7= 'S'
                     {
-                    enumLiteral_7=(Token)match(input,92,FOLLOW_2); 
+                    enumLiteral_7=(Token)match(input,96,FOLLOW_2); 
 
                             current = grammarAccess.getTimeModifierTypeAccess().getMILLISECONDEnumLiteralDeclaration_7().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_7, grammarAccess.getTimeModifierTypeAccess().getMILLISECONDEnumLiteralDeclaration_7()); 
@@ -14362,7 +15026,7 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleStatisticalAggregateType"
-    // InternalDescartesQL.g:5801:1: ruleStatisticalAggregateType returns [Enumerator current=null] : ( (enumLiteral_0= 'MIN' ) | (enumLiteral_1= 'MAX' ) | (enumLiteral_2= 'GEOMEAN' ) | (enumLiteral_3= 'N' ) | (enumLiteral_4= 'SUM' ) | (enumLiteral_5= 'SUMOFSQUARES' ) | (enumLiteral_6= 'STDDEV' ) | (enumLiteral_7= 'VAR' ) | (enumLiteral_8= 'PERCENTILE' ) | (enumLiteral_9= 'MEAN' ) ) ;
+    // InternalDescartesQL.g:6063:1: ruleStatisticalAggregateType returns [Enumerator current=null] : ( (enumLiteral_0= 'MIN' ) | (enumLiteral_1= 'MAX' ) | (enumLiteral_2= 'GEOMEAN' ) | (enumLiteral_3= 'N' ) | (enumLiteral_4= 'SUM' ) | (enumLiteral_5= 'SUMOFSQUARES' ) | (enumLiteral_6= 'STDDEV' ) | (enumLiteral_7= 'VAR' ) | (enumLiteral_8= 'PERCENTILE' ) | (enumLiteral_9= 'MEAN' ) ) ;
     public final Enumerator ruleStatisticalAggregateType() throws RecognitionException {
         Enumerator current = null;
 
@@ -14379,77 +15043,77 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
 
          enterRule(); 
         try {
-            // InternalDescartesQL.g:5803:28: ( ( (enumLiteral_0= 'MIN' ) | (enumLiteral_1= 'MAX' ) | (enumLiteral_2= 'GEOMEAN' ) | (enumLiteral_3= 'N' ) | (enumLiteral_4= 'SUM' ) | (enumLiteral_5= 'SUMOFSQUARES' ) | (enumLiteral_6= 'STDDEV' ) | (enumLiteral_7= 'VAR' ) | (enumLiteral_8= 'PERCENTILE' ) | (enumLiteral_9= 'MEAN' ) ) )
-            // InternalDescartesQL.g:5804:1: ( (enumLiteral_0= 'MIN' ) | (enumLiteral_1= 'MAX' ) | (enumLiteral_2= 'GEOMEAN' ) | (enumLiteral_3= 'N' ) | (enumLiteral_4= 'SUM' ) | (enumLiteral_5= 'SUMOFSQUARES' ) | (enumLiteral_6= 'STDDEV' ) | (enumLiteral_7= 'VAR' ) | (enumLiteral_8= 'PERCENTILE' ) | (enumLiteral_9= 'MEAN' ) )
+            // InternalDescartesQL.g:6065:28: ( ( (enumLiteral_0= 'MIN' ) | (enumLiteral_1= 'MAX' ) | (enumLiteral_2= 'GEOMEAN' ) | (enumLiteral_3= 'N' ) | (enumLiteral_4= 'SUM' ) | (enumLiteral_5= 'SUMOFSQUARES' ) | (enumLiteral_6= 'STDDEV' ) | (enumLiteral_7= 'VAR' ) | (enumLiteral_8= 'PERCENTILE' ) | (enumLiteral_9= 'MEAN' ) ) )
+            // InternalDescartesQL.g:6066:1: ( (enumLiteral_0= 'MIN' ) | (enumLiteral_1= 'MAX' ) | (enumLiteral_2= 'GEOMEAN' ) | (enumLiteral_3= 'N' ) | (enumLiteral_4= 'SUM' ) | (enumLiteral_5= 'SUMOFSQUARES' ) | (enumLiteral_6= 'STDDEV' ) | (enumLiteral_7= 'VAR' ) | (enumLiteral_8= 'PERCENTILE' ) | (enumLiteral_9= 'MEAN' ) )
             {
-            // InternalDescartesQL.g:5804:1: ( (enumLiteral_0= 'MIN' ) | (enumLiteral_1= 'MAX' ) | (enumLiteral_2= 'GEOMEAN' ) | (enumLiteral_3= 'N' ) | (enumLiteral_4= 'SUM' ) | (enumLiteral_5= 'SUMOFSQUARES' ) | (enumLiteral_6= 'STDDEV' ) | (enumLiteral_7= 'VAR' ) | (enumLiteral_8= 'PERCENTILE' ) | (enumLiteral_9= 'MEAN' ) )
-            int alt72=10;
+            // InternalDescartesQL.g:6066:1: ( (enumLiteral_0= 'MIN' ) | (enumLiteral_1= 'MAX' ) | (enumLiteral_2= 'GEOMEAN' ) | (enumLiteral_3= 'N' ) | (enumLiteral_4= 'SUM' ) | (enumLiteral_5= 'SUMOFSQUARES' ) | (enumLiteral_6= 'STDDEV' ) | (enumLiteral_7= 'VAR' ) | (enumLiteral_8= 'PERCENTILE' ) | (enumLiteral_9= 'MEAN' ) )
+            int alt80=10;
             switch ( input.LA(1) ) {
-            case 93:
+            case 97:
                 {
-                alt72=1;
+                alt80=1;
                 }
                 break;
-            case 94:
+            case 98:
                 {
-                alt72=2;
+                alt80=2;
                 }
                 break;
-            case 95:
+            case 99:
                 {
-                alt72=3;
+                alt80=3;
                 }
                 break;
-            case 96:
+            case 100:
                 {
-                alt72=4;
+                alt80=4;
                 }
                 break;
-            case 97:
+            case 101:
                 {
-                alt72=5;
+                alt80=5;
                 }
                 break;
-            case 98:
+            case 102:
                 {
-                alt72=6;
+                alt80=6;
                 }
                 break;
-            case 99:
+            case 103:
                 {
-                alt72=7;
+                alt80=7;
                 }
                 break;
-            case 100:
+            case 104:
                 {
-                alt72=8;
+                alt80=8;
                 }
                 break;
-            case 101:
+            case 105:
                 {
-                alt72=9;
+                alt80=9;
                 }
                 break;
-            case 102:
+            case 106:
                 {
-                alt72=10;
+                alt80=10;
                 }
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("", 72, 0, input);
+                    new NoViableAltException("", 80, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt72) {
+            switch (alt80) {
                 case 1 :
-                    // InternalDescartesQL.g:5804:2: (enumLiteral_0= 'MIN' )
+                    // InternalDescartesQL.g:6066:2: (enumLiteral_0= 'MIN' )
                     {
-                    // InternalDescartesQL.g:5804:2: (enumLiteral_0= 'MIN' )
-                    // InternalDescartesQL.g:5804:4: enumLiteral_0= 'MIN'
+                    // InternalDescartesQL.g:6066:2: (enumLiteral_0= 'MIN' )
+                    // InternalDescartesQL.g:6066:4: enumLiteral_0= 'MIN'
                     {
-                    enumLiteral_0=(Token)match(input,93,FOLLOW_2); 
+                    enumLiteral_0=(Token)match(input,97,FOLLOW_2); 
 
                             current = grammarAccess.getStatisticalAggregateTypeAccess().getMINEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_0, grammarAccess.getStatisticalAggregateTypeAccess().getMINEnumLiteralDeclaration_0()); 
@@ -14461,12 +15125,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 2 :
-                    // InternalDescartesQL.g:5810:6: (enumLiteral_1= 'MAX' )
+                    // InternalDescartesQL.g:6072:6: (enumLiteral_1= 'MAX' )
                     {
-                    // InternalDescartesQL.g:5810:6: (enumLiteral_1= 'MAX' )
-                    // InternalDescartesQL.g:5810:8: enumLiteral_1= 'MAX'
+                    // InternalDescartesQL.g:6072:6: (enumLiteral_1= 'MAX' )
+                    // InternalDescartesQL.g:6072:8: enumLiteral_1= 'MAX'
                     {
-                    enumLiteral_1=(Token)match(input,94,FOLLOW_2); 
+                    enumLiteral_1=(Token)match(input,98,FOLLOW_2); 
 
                             current = grammarAccess.getStatisticalAggregateTypeAccess().getMAXEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_1, grammarAccess.getStatisticalAggregateTypeAccess().getMAXEnumLiteralDeclaration_1()); 
@@ -14478,12 +15142,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 3 :
-                    // InternalDescartesQL.g:5816:6: (enumLiteral_2= 'GEOMEAN' )
+                    // InternalDescartesQL.g:6078:6: (enumLiteral_2= 'GEOMEAN' )
                     {
-                    // InternalDescartesQL.g:5816:6: (enumLiteral_2= 'GEOMEAN' )
-                    // InternalDescartesQL.g:5816:8: enumLiteral_2= 'GEOMEAN'
+                    // InternalDescartesQL.g:6078:6: (enumLiteral_2= 'GEOMEAN' )
+                    // InternalDescartesQL.g:6078:8: enumLiteral_2= 'GEOMEAN'
                     {
-                    enumLiteral_2=(Token)match(input,95,FOLLOW_2); 
+                    enumLiteral_2=(Token)match(input,99,FOLLOW_2); 
 
                             current = grammarAccess.getStatisticalAggregateTypeAccess().getGEOMEANEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_2, grammarAccess.getStatisticalAggregateTypeAccess().getGEOMEANEnumLiteralDeclaration_2()); 
@@ -14495,12 +15159,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 4 :
-                    // InternalDescartesQL.g:5822:6: (enumLiteral_3= 'N' )
+                    // InternalDescartesQL.g:6084:6: (enumLiteral_3= 'N' )
                     {
-                    // InternalDescartesQL.g:5822:6: (enumLiteral_3= 'N' )
-                    // InternalDescartesQL.g:5822:8: enumLiteral_3= 'N'
+                    // InternalDescartesQL.g:6084:6: (enumLiteral_3= 'N' )
+                    // InternalDescartesQL.g:6084:8: enumLiteral_3= 'N'
                     {
-                    enumLiteral_3=(Token)match(input,96,FOLLOW_2); 
+                    enumLiteral_3=(Token)match(input,100,FOLLOW_2); 
 
                             current = grammarAccess.getStatisticalAggregateTypeAccess().getNEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_3, grammarAccess.getStatisticalAggregateTypeAccess().getNEnumLiteralDeclaration_3()); 
@@ -14512,12 +15176,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 5 :
-                    // InternalDescartesQL.g:5828:6: (enumLiteral_4= 'SUM' )
+                    // InternalDescartesQL.g:6090:6: (enumLiteral_4= 'SUM' )
                     {
-                    // InternalDescartesQL.g:5828:6: (enumLiteral_4= 'SUM' )
-                    // InternalDescartesQL.g:5828:8: enumLiteral_4= 'SUM'
+                    // InternalDescartesQL.g:6090:6: (enumLiteral_4= 'SUM' )
+                    // InternalDescartesQL.g:6090:8: enumLiteral_4= 'SUM'
                     {
-                    enumLiteral_4=(Token)match(input,97,FOLLOW_2); 
+                    enumLiteral_4=(Token)match(input,101,FOLLOW_2); 
 
                             current = grammarAccess.getStatisticalAggregateTypeAccess().getSUMEnumLiteralDeclaration_4().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_4, grammarAccess.getStatisticalAggregateTypeAccess().getSUMEnumLiteralDeclaration_4()); 
@@ -14529,12 +15193,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 6 :
-                    // InternalDescartesQL.g:5834:6: (enumLiteral_5= 'SUMOFSQUARES' )
+                    // InternalDescartesQL.g:6096:6: (enumLiteral_5= 'SUMOFSQUARES' )
                     {
-                    // InternalDescartesQL.g:5834:6: (enumLiteral_5= 'SUMOFSQUARES' )
-                    // InternalDescartesQL.g:5834:8: enumLiteral_5= 'SUMOFSQUARES'
+                    // InternalDescartesQL.g:6096:6: (enumLiteral_5= 'SUMOFSQUARES' )
+                    // InternalDescartesQL.g:6096:8: enumLiteral_5= 'SUMOFSQUARES'
                     {
-                    enumLiteral_5=(Token)match(input,98,FOLLOW_2); 
+                    enumLiteral_5=(Token)match(input,102,FOLLOW_2); 
 
                             current = grammarAccess.getStatisticalAggregateTypeAccess().getSUMOFSQUARESEnumLiteralDeclaration_5().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_5, grammarAccess.getStatisticalAggregateTypeAccess().getSUMOFSQUARESEnumLiteralDeclaration_5()); 
@@ -14546,12 +15210,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 7 :
-                    // InternalDescartesQL.g:5840:6: (enumLiteral_6= 'STDDEV' )
+                    // InternalDescartesQL.g:6102:6: (enumLiteral_6= 'STDDEV' )
                     {
-                    // InternalDescartesQL.g:5840:6: (enumLiteral_6= 'STDDEV' )
-                    // InternalDescartesQL.g:5840:8: enumLiteral_6= 'STDDEV'
+                    // InternalDescartesQL.g:6102:6: (enumLiteral_6= 'STDDEV' )
+                    // InternalDescartesQL.g:6102:8: enumLiteral_6= 'STDDEV'
                     {
-                    enumLiteral_6=(Token)match(input,99,FOLLOW_2); 
+                    enumLiteral_6=(Token)match(input,103,FOLLOW_2); 
 
                             current = grammarAccess.getStatisticalAggregateTypeAccess().getSTDDEVEnumLiteralDeclaration_6().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_6, grammarAccess.getStatisticalAggregateTypeAccess().getSTDDEVEnumLiteralDeclaration_6()); 
@@ -14563,12 +15227,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 8 :
-                    // InternalDescartesQL.g:5846:6: (enumLiteral_7= 'VAR' )
+                    // InternalDescartesQL.g:6108:6: (enumLiteral_7= 'VAR' )
                     {
-                    // InternalDescartesQL.g:5846:6: (enumLiteral_7= 'VAR' )
-                    // InternalDescartesQL.g:5846:8: enumLiteral_7= 'VAR'
+                    // InternalDescartesQL.g:6108:6: (enumLiteral_7= 'VAR' )
+                    // InternalDescartesQL.g:6108:8: enumLiteral_7= 'VAR'
                     {
-                    enumLiteral_7=(Token)match(input,100,FOLLOW_2); 
+                    enumLiteral_7=(Token)match(input,104,FOLLOW_2); 
 
                             current = grammarAccess.getStatisticalAggregateTypeAccess().getVAREnumLiteralDeclaration_7().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_7, grammarAccess.getStatisticalAggregateTypeAccess().getVAREnumLiteralDeclaration_7()); 
@@ -14580,12 +15244,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 9 :
-                    // InternalDescartesQL.g:5852:6: (enumLiteral_8= 'PERCENTILE' )
+                    // InternalDescartesQL.g:6114:6: (enumLiteral_8= 'PERCENTILE' )
                     {
-                    // InternalDescartesQL.g:5852:6: (enumLiteral_8= 'PERCENTILE' )
-                    // InternalDescartesQL.g:5852:8: enumLiteral_8= 'PERCENTILE'
+                    // InternalDescartesQL.g:6114:6: (enumLiteral_8= 'PERCENTILE' )
+                    // InternalDescartesQL.g:6114:8: enumLiteral_8= 'PERCENTILE'
                     {
-                    enumLiteral_8=(Token)match(input,101,FOLLOW_2); 
+                    enumLiteral_8=(Token)match(input,105,FOLLOW_2); 
 
                             current = grammarAccess.getStatisticalAggregateTypeAccess().getPERCENTILEEnumLiteralDeclaration_8().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_8, grammarAccess.getStatisticalAggregateTypeAccess().getPERCENTILEEnumLiteralDeclaration_8()); 
@@ -14597,12 +15261,12 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
                     }
                     break;
                 case 10 :
-                    // InternalDescartesQL.g:5858:6: (enumLiteral_9= 'MEAN' )
+                    // InternalDescartesQL.g:6120:6: (enumLiteral_9= 'MEAN' )
                     {
-                    // InternalDescartesQL.g:5858:6: (enumLiteral_9= 'MEAN' )
-                    // InternalDescartesQL.g:5858:8: enumLiteral_9= 'MEAN'
+                    // InternalDescartesQL.g:6120:6: (enumLiteral_9= 'MEAN' )
+                    // InternalDescartesQL.g:6120:8: enumLiteral_9= 'MEAN'
                     {
-                    enumLiteral_9=(Token)match(input,102,FOLLOW_2); 
+                    enumLiteral_9=(Token)match(input,106,FOLLOW_2); 
 
                             current = grammarAccess.getStatisticalAggregateTypeAccess().getMEANEnumLiteralDeclaration_9().getEnumLiteral().getInstance();
                             newLeafNode(enumLiteral_9, grammarAccess.getStatisticalAggregateTypeAccess().getMEANEnumLiteralDeclaration_9()); 
@@ -14640,75 +15304,79 @@ public class InternalDescartesQLParser extends AbstractInternalAntlrParser {
     public static final BitSet FOLLOW_1 = new BitSet(new long[]{0x0000000000000000L});
     public static final BitSet FOLLOW_2 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_3 = new BitSet(new long[]{0x0000000000001000L});
-    public static final BitSet FOLLOW_4 = new BitSet(new long[]{0x0000000000008000L});
-    public static final BitSet FOLLOW_5 = new BitSet(new long[]{0x0000000000020000L});
-    public static final BitSet FOLLOW_6 = new BitSet(new long[]{0x014000C000000000L});
-    public static final BitSet FOLLOW_7 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_8 = new BitSet(new long[]{0x0000000000010002L});
-    public static final BitSet FOLLOW_9 = new BitSet(new long[]{0x0000000000040000L});
-    public static final BitSet FOLLOW_10 = new BitSet(new long[]{0x0000000000080000L});
-    public static final BitSet FOLLOW_11 = new BitSet(new long[]{0x0000000000110000L});
-    public static final BitSet FOLLOW_12 = new BitSet(new long[]{0x0000000000200000L});
-    public static final BitSet FOLLOW_13 = new BitSet(new long[]{0x0000000000000010L,0x0000007FE0000000L});
-    public static final BitSet FOLLOW_14 = new BitSet(new long[]{0x0000600000000000L,0x0000000000000700L});
-    public static final BitSet FOLLOW_15 = new BitSet(new long[]{0x0000000000000060L});
-    public static final BitSet FOLLOW_16 = new BitSet(new long[]{0x0000000001800002L});
-    public static final BitSet FOLLOW_17 = new BitSet(new long[]{0x0000000001000002L});
-    public static final BitSet FOLLOW_18 = new BitSet(new long[]{0x0000000000400002L});
-    public static final BitSet FOLLOW_19 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_20 = new BitSet(new long[]{0x0000000000000040L});
-    public static final BitSet FOLLOW_21 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001800L});
-    public static final BitSet FOLLOW_22 = new BitSet(new long[]{0x0000000002000002L});
-    public static final BitSet FOLLOW_23 = new BitSet(new long[]{0x0000000004000000L});
-    public static final BitSet FOLLOW_24 = new BitSet(new long[]{0x0000000700000000L});
-    public static final BitSet FOLLOW_25 = new BitSet(new long[]{0x094000C000000000L});
-    public static final BitSet FOLLOW_26 = new BitSet(new long[]{0x00000000E0000000L});
-    public static final BitSet FOLLOW_27 = new BitSet(new long[]{0x0200000000000002L});
-    public static final BitSet FOLLOW_28 = new BitSet(new long[]{0x0000000000000090L});
-    public static final BitSet FOLLOW_29 = new BitSet(new long[]{0x0000000000100000L});
-    public static final BitSet FOLLOW_30 = new BitSet(new long[]{0x004000C000000000L});
-    public static final BitSet FOLLOW_31 = new BitSet(new long[]{0x0040008000000000L});
-    public static final BitSet FOLLOW_32 = new BitSet(new long[]{0x0040000000000000L});
-    public static final BitSet FOLLOW_33 = new BitSet(new long[]{0x2000000000000002L});
-    public static final BitSet FOLLOW_34 = new BitSet(new long[]{0x0000002000000000L});
-    public static final BitSet FOLLOW_35 = new BitSet(new long[]{0x0000008000000000L});
-    public static final BitSet FOLLOW_36 = new BitSet(new long[]{0x0000000000000080L});
-    public static final BitSet FOLLOW_37 = new BitSet(new long[]{0x0202014000000002L});
-    public static final BitSet FOLLOW_38 = new BitSet(new long[]{0x0200014000000002L});
-    public static final BitSet FOLLOW_39 = new BitSet(new long[]{0x0200004000000002L});
-    public static final BitSet FOLLOW_40 = new BitSet(new long[]{0x0000020000000002L});
-    public static final BitSet FOLLOW_41 = new BitSet(new long[]{0x0000040000010000L});
-    public static final BitSet FOLLOW_42 = new BitSet(new long[]{0x0000180000000000L});
-    public static final BitSet FOLLOW_43 = new BitSet(new long[]{0x0000400000000000L});
-    public static final BitSet FOLLOW_44 = new BitSet(new long[]{0x0000800000000000L});
-    public static final BitSet FOLLOW_45 = new BitSet(new long[]{0x0001000000000000L});
-    public static final BitSet FOLLOW_46 = new BitSet(new long[]{0x0080220000000002L});
-    public static final BitSet FOLLOW_47 = new BitSet(new long[]{0x0000220000000002L});
-    public static final BitSet FOLLOW_48 = new BitSet(new long[]{0x0004000000000010L});
-    public static final BitSet FOLLOW_49 = new BitSet(new long[]{0x0000080000000000L});
-    public static final BitSet FOLLOW_50 = new BitSet(new long[]{0x0038000000000000L});
-    public static final BitSet FOLLOW_51 = new BitSet(new long[]{0x0000080000000002L});
-    public static final BitSet FOLLOW_52 = new BitSet(new long[]{0x0080000000000002L});
-    public static final BitSet FOLLOW_53 = new BitSet(new long[]{0x0400000000000000L});
-    public static final BitSet FOLLOW_54 = new BitSet(new long[]{0x1000000000000000L});
-    public static final BitSet FOLLOW_55 = new BitSet(new long[]{0x0000000000000002L,0x0000000000006001L});
-    public static final BitSet FOLLOW_56 = new BitSet(new long[]{0x0000000000000000L,0x0000000000018000L});
-    public static final BitSet FOLLOW_57 = new BitSet(new long[]{0x0000000000010000L});
-    public static final BitSet FOLLOW_58 = new BitSet(new long[]{0x8000000000000030L,0x0000000000060000L});
-    public static final BitSet FOLLOW_59 = new BitSet(new long[]{0x4000000000000002L});
-    public static final BitSet FOLLOW_60 = new BitSet(new long[]{0x0000000000000022L});
-    public static final BitSet FOLLOW_61 = new BitSet(new long[]{0x00000000000000A0L});
-    public static final BitSet FOLLOW_62 = new BitSet(new long[]{0x0000000000000080L,0x0000000000180000L});
-    public static final BitSet FOLLOW_63 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000001L});
-    public static final BitSet FOLLOW_64 = new BitSet(new long[]{0x0000000000000000L,0x000000001FE00000L});
-    public static final BitSet FOLLOW_65 = new BitSet(new long[]{0x014000C800000000L,0x000000000000000CL});
-    public static final BitSet FOLLOW_66 = new BitSet(new long[]{0x014000C000000000L,0x000000000000000CL});
-    public static final BitSet FOLLOW_67 = new BitSet(new long[]{0x014000C000000000L,0x0000000000000004L});
-    public static final BitSet FOLLOW_68 = new BitSet(new long[]{0x00000000000000E0L});
-    public static final BitSet FOLLOW_69 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000010L});
-    public static final BitSet FOLLOW_70 = new BitSet(new long[]{0x0000200000000000L});
-    public static final BitSet FOLLOW_71 = new BitSet(new long[]{0x0000000000000030L,0x00000000000000E0L});
-    public static final BitSet FOLLOW_72 = new BitSet(new long[]{0x0000400000010000L});
-    public static final BitSet FOLLOW_73 = new BitSet(new long[]{0x0000400000010030L,0x00000000000000E0L});
+    public static final BitSet FOLLOW_4 = new BitSet(new long[]{0x0000000000080000L});
+    public static final BitSet FOLLOW_5 = new BitSet(new long[]{0x0000000000200000L});
+    public static final BitSet FOLLOW_6 = new BitSet(new long[]{0x14000C0000000000L});
+    public static final BitSet FOLLOW_7 = new BitSet(new long[]{0x14020C0000020000L});
+    public static final BitSet FOLLOW_8 = new BitSet(new long[]{0x14000C0000020000L});
+    public static final BitSet FOLLOW_9 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_10 = new BitSet(new long[]{0x0000000000040000L});
+    public static final BitSet FOLLOW_11 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_12 = new BitSet(new long[]{0x0000000000100002L});
+    public static final BitSet FOLLOW_13 = new BitSet(new long[]{0x0000000000400000L});
+    public static final BitSet FOLLOW_14 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_15 = new BitSet(new long[]{0x0000000001100000L});
+    public static final BitSet FOLLOW_16 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_17 = new BitSet(new long[]{0x0000000000000020L,0x000007FE00000000L});
+    public static final BitSet FOLLOW_18 = new BitSet(new long[]{0x0006000000000000L,0x0000000000007000L});
+    public static final BitSet FOLLOW_19 = new BitSet(new long[]{0x0000000000000050L});
+    public static final BitSet FOLLOW_20 = new BitSet(new long[]{0x0000000038020002L});
+    public static final BitSet FOLLOW_21 = new BitSet(new long[]{0x0000000030020002L});
+    public static final BitSet FOLLOW_22 = new BitSet(new long[]{0x0000000020020002L});
+    public static final BitSet FOLLOW_23 = new BitSet(new long[]{0x0000000004000002L});
+    public static final BitSet FOLLOW_24 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_25 = new BitSet(new long[]{0x0000000000000002L,0x0000000000018000L});
+    public static final BitSet FOLLOW_26 = new BitSet(new long[]{0x0000000040000000L});
+    public static final BitSet FOLLOW_27 = new BitSet(new long[]{0x0000007000000000L});
+    public static final BitSet FOLLOW_28 = new BitSet(new long[]{0x94000C0000000000L});
+    public static final BitSet FOLLOW_29 = new BitSet(new long[]{0x0000000E00000000L});
+    public static final BitSet FOLLOW_30 = new BitSet(new long[]{0x2000000000000002L});
+    public static final BitSet FOLLOW_31 = new BitSet(new long[]{0x00000000000000A0L});
+    public static final BitSet FOLLOW_32 = new BitSet(new long[]{0x0000000001000000L});
+    public static final BitSet FOLLOW_33 = new BitSet(new long[]{0x04000C0000000000L});
+    public static final BitSet FOLLOW_34 = new BitSet(new long[]{0x0400080000000000L});
+    public static final BitSet FOLLOW_35 = new BitSet(new long[]{0x0400000000000000L});
+    public static final BitSet FOLLOW_36 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000002L});
+    public static final BitSet FOLLOW_37 = new BitSet(new long[]{0x0000020000000000L});
+    public static final BitSet FOLLOW_38 = new BitSet(new long[]{0x0000080000000000L});
+    public static final BitSet FOLLOW_39 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_40 = new BitSet(new long[]{0x2020140000000002L});
+    public static final BitSet FOLLOW_41 = new BitSet(new long[]{0x2000140000000002L});
+    public static final BitSet FOLLOW_42 = new BitSet(new long[]{0x2000040000000002L});
+    public static final BitSet FOLLOW_43 = new BitSet(new long[]{0x0000200000000002L});
+    public static final BitSet FOLLOW_44 = new BitSet(new long[]{0x0000400000100000L});
+    public static final BitSet FOLLOW_45 = new BitSet(new long[]{0x0001800000000000L});
+    public static final BitSet FOLLOW_46 = new BitSet(new long[]{0x0004000000000000L});
+    public static final BitSet FOLLOW_47 = new BitSet(new long[]{0x0008000000000000L});
+    public static final BitSet FOLLOW_48 = new BitSet(new long[]{0x0010000000000000L});
+    public static final BitSet FOLLOW_49 = new BitSet(new long[]{0x0802200000000002L});
+    public static final BitSet FOLLOW_50 = new BitSet(new long[]{0x0002200000000002L});
+    public static final BitSet FOLLOW_51 = new BitSet(new long[]{0x0040000000000020L});
+    public static final BitSet FOLLOW_52 = new BitSet(new long[]{0x0000800000000000L});
+    public static final BitSet FOLLOW_53 = new BitSet(new long[]{0x0380000000000000L});
+    public static final BitSet FOLLOW_54 = new BitSet(new long[]{0x0000800000000002L});
+    public static final BitSet FOLLOW_55 = new BitSet(new long[]{0x0800000000000002L});
+    public static final BitSet FOLLOW_56 = new BitSet(new long[]{0x4000000000000000L});
+    public static final BitSet FOLLOW_57 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000001L});
+    public static final BitSet FOLLOW_58 = new BitSet(new long[]{0x0000000000000002L,0x0000000000060010L});
+    public static final BitSet FOLLOW_59 = new BitSet(new long[]{0x0000000000000000L,0x0000000000180000L});
+    public static final BitSet FOLLOW_60 = new BitSet(new long[]{0x0000000000100000L});
+    public static final BitSet FOLLOW_61 = new BitSet(new long[]{0x0000000000000060L,0x0000000000600008L});
+    public static final BitSet FOLLOW_62 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000004L});
+    public static final BitSet FOLLOW_63 = new BitSet(new long[]{0x0000000000000042L});
+    public static final BitSet FOLLOW_64 = new BitSet(new long[]{0x00000000000000C0L});
+    public static final BitSet FOLLOW_65 = new BitSet(new long[]{0x0000000000000080L,0x0000000001800000L});
+    public static final BitSet FOLLOW_66 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
+    public static final BitSet FOLLOW_67 = new BitSet(new long[]{0x0000000000000000L,0x00000001FE000000L});
+    public static final BitSet FOLLOW_68 = new BitSet(new long[]{0x14000C8000000000L,0x00000000000000C0L});
+    public static final BitSet FOLLOW_69 = new BitSet(new long[]{0x14000C0000000000L,0x00000000000000C0L});
+    public static final BitSet FOLLOW_70 = new BitSet(new long[]{0x14000C0000000000L,0x0000000000000040L});
+    public static final BitSet FOLLOW_71 = new BitSet(new long[]{0x00000000000000D0L});
+    public static final BitSet FOLLOW_72 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000100L});
+    public static final BitSet FOLLOW_73 = new BitSet(new long[]{0x0002000000000000L});
+    public static final BitSet FOLLOW_74 = new BitSet(new long[]{0x0000000000000060L,0x0000000000000E00L});
+    public static final BitSet FOLLOW_75 = new BitSet(new long[]{0x0004000000100000L});
+    public static final BitSet FOLLOW_76 = new BitSet(new long[]{0x0004000000100060L,0x0000000000000E00L});
+    public static final BitSet FOLLOW_77 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000E00L});
 
 }
\ No newline at end of file
diff --git a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/serializer/DescartesQLSemanticSequencer.java b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/serializer/DescartesQLSemanticSequencer.java
index b5cce30a..000e494d 100644
--- a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/serializer/DescartesQLSemanticSequencer.java
+++ b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/serializer/DescartesQLSemanticSequencer.java
@@ -67,6 +67,7 @@ import tools.descartes.dql.lang.descartesQL.FilteringStrategy;
 import tools.descartes.dql.lang.descartesQL.FindClause;
 import tools.descartes.dql.lang.descartesQL.ForClause;
 import tools.descartes.dql.lang.descartesQL.Fuzziness;
+import tools.descartes.dql.lang.descartesQL.GenerateSLAConcern;
 import tools.descartes.dql.lang.descartesQL.GetConstraintsQuery;
 import tools.descartes.dql.lang.descartesQL.GetExplorationStrategiesQuery;
 import tools.descartes.dql.lang.descartesQL.GetQuery;
@@ -216,6 +217,9 @@ public class DescartesQLSemanticSequencer extends AbstractDelegatingSemanticSequ
 			case DescartesQLPackage.FUZZINESS:
 				sequence_Fuzziness(context, (Fuzziness) semanticObject); 
 				return; 
+			case DescartesQLPackage.GENERATE_SLA_CONCERN:
+				sequence_GenerateSLAConcern(context, (GenerateSLAConcern) semanticObject); 
+				return; 
 			case DescartesQLPackage.GET_CONSTRAINTS_QUERY:
 				sequence_GetConstraintsQuery(context, (GetConstraintsQuery) semanticObject); 
 				return; 
@@ -541,7 +545,8 @@ public class DescartesQLSemanticSequencer extends AbstractDelegatingSemanticSequ
 	 *         query=PerformanceIssueQuery | 
 	 *         query=ConnectorCapabilityQuery | 
 	 *         query=WhatIfQuery | 
-	 *         query=Goal
+	 *         query=Goal | 
+	 *         query=GenerateSLAConcern
 	 *     )
 	 */
 	protected void sequence_DescartesQL(ISerializationContext context, DescartesQL semanticObject) {
@@ -842,6 +847,25 @@ public class DescartesQLSemanticSequencer extends AbstractDelegatingSemanticSequ
 	}
 	
 	
+	/**
+	 * Contexts:
+	 *     GenerateSLAConcern returns GenerateSLAConcern
+	 *
+	 * Constraint:
+	 *     (
+	 *         offset=MultipleArithmeticClause? 
+	 *         percentage=DOUBLE? 
+	 *         constraintClause=ConstraintClause? 
+	 *         dofClause=DoFClause? 
+	 *         forClause=ForClause? 
+	 *         usingClause=UsingClause
+	 *     )
+	 */
+	protected void sequence_GenerateSLAConcern(ISerializationContext context, GenerateSLAConcern semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
 	/**
 	 * Contexts:
 	 *     GetConstraintsQuery returns GetConstraintsQuery
@@ -915,7 +939,7 @@ public class DescartesQLSemanticSequencer extends AbstractDelegatingSemanticSequ
 	 *
 	 * Constraint:
 	 *     (
-	 *         (queryType='ENSURE' | queryType='MONITOR') 
+	 *         (queryType='ENSURE' | queryType='MONITOR' | queryType='EVALUATE') 
 	 *         slaQuery=SlaQuery 
 	 *         sloQuery=SloQuery 
 	 *         constraintClause=ConstraintClause? 
@@ -1238,7 +1262,7 @@ public class DescartesQLSemanticSequencer extends AbstractDelegatingSemanticSequ
 	 *     Penalty returns Penalty
 	 *
 	 * Constraint:
-	 *     (type='PENALTY' value=DOUBLE currency=Currency violation=Violation?)
+	 *     (type='PENALTY' value=DOUBLE currency=Currency?)
 	 */
 	protected void sequence_Penalty(ISerializationContext context, Penalty semanticObject) {
 		genericSequencer.createSequence(context, semanticObject);
@@ -1380,7 +1404,8 @@ public class DescartesQLSemanticSequencer extends AbstractDelegatingSemanticSequ
 	 *         comparator=Comparator 
 	 *         value=VariableValue 
 	 *         fuz=Fuzziness? 
-	 *         pen=Penalty?
+	 *         pen=Penalty? 
+	 *         violation=Violation?
 	 *     )
 	 */
 	protected void sequence_Slo(ISerializationContext context, Slo semanticObject) {
@@ -1471,16 +1496,10 @@ public class DescartesQLSemanticSequencer extends AbstractDelegatingSemanticSequ
 	 *     Violation returns Violation
 	 *
 	 * Constraint:
-	 *     amount=INT
+	 *     (amount=INT | percentage=DOUBLE)
 	 */
 	protected void sequence_Violation(ISerializationContext context, Violation semanticObject) {
-		if (errorAcceptor != null) {
-			if (transientValues.isValueTransient(semanticObject, DescartesQLPackage.Literals.VIOLATION__AMOUNT) == ValueTransient.YES)
-				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, DescartesQLPackage.Literals.VIOLATION__AMOUNT));
-		}
-		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
-		feeder.accept(grammarAccess.getViolationAccess().getAmountINTTerminalRuleCall_1_0(), semanticObject.getAmount());
-		feeder.finish();
+		genericSequencer.createSequence(context, semanticObject);
 	}
 	
 	
diff --git a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/services/DescartesQLGrammarAccess.java b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/services/DescartesQLGrammarAccess.java
index a898fa4c..80d29cac 100644
--- a/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/services/DescartesQLGrammarAccess.java
+++ b/lang/tools.descartes.dql.lang/src-gen/tools/descartes/dql/lang/services/DescartesQLGrammarAccess.java
@@ -52,24 +52,26 @@ public class DescartesQLGrammarAccess extends AbstractGrammarElementFinder {
 		private final RuleCall cQueryConnectorCapabilityQueryParserRuleCall_0_0_3 = (RuleCall)cQueryAlternatives_0_0.eContents().get(3);
 		private final RuleCall cQueryWhatIfQueryParserRuleCall_0_0_4 = (RuleCall)cQueryAlternatives_0_0.eContents().get(4);
 		private final RuleCall cQueryGoalParserRuleCall_0_0_5 = (RuleCall)cQueryAlternatives_0_0.eContents().get(5);
+		private final RuleCall cQueryGenerateSLAConcernParserRuleCall_0_0_6 = (RuleCall)cQueryAlternatives_0_0.eContents().get(6);
 		private final Keyword cSemicolonKeyword_1 = (Keyword)cGroup.eContents().get(1);
 		
 		//// @THESIS
 		//DescartesQL:
 		//	query=(ModelStructureQuery | PerformanceMetricsQuery | PerformanceIssueQuery | ConnectorCapabilityQuery | WhatIfQuery
-		//	| Goal)
+		//	| Goal | GenerateSLAConcern)
 		//	';';
 		@Override public ParserRule getRule() { return rule; }
 
 		//query=(ModelStructureQuery | PerformanceMetricsQuery | PerformanceIssueQuery | ConnectorCapabilityQuery | WhatIfQuery |
-		//Goal) ';'
+		//Goal | GenerateSLAConcern) ';'
 		public Group getGroup() { return cGroup; }
 
 		//query=(ModelStructureQuery | PerformanceMetricsQuery | PerformanceIssueQuery | ConnectorCapabilityQuery | WhatIfQuery |
-		//Goal)
+		//Goal | GenerateSLAConcern)
 		public Assignment getQueryAssignment_0() { return cQueryAssignment_0; }
 
-		//(ModelStructureQuery | PerformanceMetricsQuery | PerformanceIssueQuery | ConnectorCapabilityQuery | WhatIfQuery | Goal)
+		//(ModelStructureQuery | PerformanceMetricsQuery | PerformanceIssueQuery | ConnectorCapabilityQuery | WhatIfQuery | Goal |
+		//GenerateSLAConcern)
 		public Alternatives getQueryAlternatives_0_0() { return cQueryAlternatives_0_0; }
 
 		//ModelStructureQuery
@@ -90,6 +92,9 @@ public class DescartesQLGrammarAccess extends AbstractGrammarElementFinder {
 		//Goal
 		public RuleCall getQueryGoalParserRuleCall_0_0_5() { return cQueryGoalParserRuleCall_0_0_5; }
 
+		//GenerateSLAConcern
+		public RuleCall getQueryGenerateSLAConcernParserRuleCall_0_0_6() { return cQueryGenerateSLAConcernParserRuleCall_0_0_6; }
+
 		//';'
 		public Keyword getSemicolonKeyword_1() { return cSemicolonKeyword_1; }
 	}
@@ -101,6 +106,7 @@ public class DescartesQLGrammarAccess extends AbstractGrammarElementFinder {
 		private final Alternatives cQueryTypeAlternatives_0_0 = (Alternatives)cQueryTypeAssignment_0.eContents().get(0);
 		private final Keyword cQueryTypeENSUREKeyword_0_0_0 = (Keyword)cQueryTypeAlternatives_0_0.eContents().get(0);
 		private final Keyword cQueryTypeMONITORKeyword_0_0_1 = (Keyword)cQueryTypeAlternatives_0_0.eContents().get(1);
+		private final Keyword cQueryTypeEVALUATEKeyword_0_0_2 = (Keyword)cQueryTypeAlternatives_0_0.eContents().get(2);
 		private final Assignment cSlaQueryAssignment_1 = (Assignment)cGroup.eContents().get(1);
 		private final RuleCall cSlaQuerySlaQueryParserRuleCall_1_0 = (RuleCall)cSlaQueryAssignment_1.eContents().get(0);
 		private final Assignment cSloQueryAssignment_2 = (Assignment)cGroup.eContents().get(2);
@@ -115,18 +121,18 @@ public class DescartesQLGrammarAccess extends AbstractGrammarElementFinder {
 		private final RuleCall cUsingClauseUsingClauseParserRuleCall_6_0 = (RuleCall)cUsingClauseAssignment_6.eContents().get(0);
 		
 		//Goal:
-		//	queryType=('ENSURE' | 'MONITOR') slaQuery=SlaQuery sloQuery=SloQuery constraintClause=ConstraintClause?
+		//	queryType=('ENSURE' | 'MONITOR' | 'EVALUATE') slaQuery=SlaQuery sloQuery=SloQuery constraintClause=ConstraintClause?
 		//	dofClause=DoFClause? forClause=ForClause? usingClause=UsingClause;
 		@Override public ParserRule getRule() { return rule; }
 
-		//queryType=('ENSURE' | 'MONITOR') slaQuery=SlaQuery sloQuery=SloQuery constraintClause=ConstraintClause?
+		//queryType=('ENSURE' | 'MONITOR' | 'EVALUATE') slaQuery=SlaQuery sloQuery=SloQuery constraintClause=ConstraintClause?
 		//dofClause=DoFClause? forClause=ForClause? usingClause=UsingClause
 		public Group getGroup() { return cGroup; }
 
-		//queryType=('ENSURE' | 'MONITOR')
+		//queryType=('ENSURE' | 'MONITOR' | 'EVALUATE')
 		public Assignment getQueryTypeAssignment_0() { return cQueryTypeAssignment_0; }
 
-		//('ENSURE' | 'MONITOR')
+		//('ENSURE' | 'MONITOR' | 'EVALUATE')
 		public Alternatives getQueryTypeAlternatives_0_0() { return cQueryTypeAlternatives_0_0; }
 
 		//'ENSURE'
@@ -135,6 +141,9 @@ public class DescartesQLGrammarAccess extends AbstractGrammarElementFinder {
 		//'MONITOR'
 		public Keyword getQueryTypeMONITORKeyword_0_0_1() { return cQueryTypeMONITORKeyword_0_0_1; }
 
+		//'EVALUATE'
+		public Keyword getQueryTypeEVALUATEKeyword_0_0_2() { return cQueryTypeEVALUATEKeyword_0_0_2; }
+
 		//slaQuery=SlaQuery
 		public Assignment getSlaQueryAssignment_1() { return cSlaQueryAssignment_1; }
 
@@ -172,6 +181,84 @@ public class DescartesQLGrammarAccess extends AbstractGrammarElementFinder {
 		public RuleCall getUsingClauseUsingClauseParserRuleCall_6_0() { return cUsingClauseUsingClauseParserRuleCall_6_0; }
 	}
 
+	public class GenerateSLAConcernElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "tools.descartes.dql.lang.DescartesQL.GenerateSLAConcern");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cGENERATEKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cOffsetAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cOffsetMultipleArithmeticClauseParserRuleCall_1_0 = (RuleCall)cOffsetAssignment_1.eContents().get(0);
+		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
+		private final Keyword cSATISFACTIONLEVELKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
+		private final Assignment cPercentageAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
+		private final RuleCall cPercentageDOUBLETerminalRuleCall_2_1_0 = (RuleCall)cPercentageAssignment_2_1.eContents().get(0);
+		private final Keyword cPERCENTKeyword_2_2 = (Keyword)cGroup_2.eContents().get(2);
+		private final Assignment cConstraintClauseAssignment_3 = (Assignment)cGroup.eContents().get(3);
+		private final RuleCall cConstraintClauseConstraintClauseParserRuleCall_3_0 = (RuleCall)cConstraintClauseAssignment_3.eContents().get(0);
+		private final Assignment cDofClauseAssignment_4 = (Assignment)cGroup.eContents().get(4);
+		private final RuleCall cDofClauseDoFClauseParserRuleCall_4_0 = (RuleCall)cDofClauseAssignment_4.eContents().get(0);
+		private final Assignment cForClauseAssignment_5 = (Assignment)cGroup.eContents().get(5);
+		private final RuleCall cForClauseForClauseParserRuleCall_5_0 = (RuleCall)cForClauseAssignment_5.eContents().get(0);
+		private final Assignment cUsingClauseAssignment_6 = (Assignment)cGroup.eContents().get(6);
+		private final RuleCall cUsingClauseUsingClauseParserRuleCall_6_0 = (RuleCall)cUsingClauseAssignment_6.eContents().get(0);
+		
+		//GenerateSLAConcern:
+		//	'GENERATE' offset=MultipleArithmeticClause? ('SATISFACTION-LEVEL' percentage=DOUBLE 'PERCENT')?
+		//	constraintClause=ConstraintClause? dofClause=DoFClause? forClause=ForClause? usingClause=UsingClause;
+		@Override public ParserRule getRule() { return rule; }
+
+		//'GENERATE' offset=MultipleArithmeticClause? ('SATISFACTION-LEVEL' percentage=DOUBLE 'PERCENT')?
+		//constraintClause=ConstraintClause? dofClause=DoFClause? forClause=ForClause? usingClause=UsingClause
+		public Group getGroup() { return cGroup; }
+
+		//'GENERATE'
+		public Keyword getGENERATEKeyword_0() { return cGENERATEKeyword_0; }
+
+		//offset=MultipleArithmeticClause?
+		public Assignment getOffsetAssignment_1() { return cOffsetAssignment_1; }
+
+		//MultipleArithmeticClause
+		public RuleCall getOffsetMultipleArithmeticClauseParserRuleCall_1_0() { return cOffsetMultipleArithmeticClauseParserRuleCall_1_0; }
+
+		//('SATISFACTION-LEVEL' percentage=DOUBLE 'PERCENT')?
+		public Group getGroup_2() { return cGroup_2; }
+
+		//'SATISFACTION-LEVEL'
+		public Keyword getSATISFACTIONLEVELKeyword_2_0() { return cSATISFACTIONLEVELKeyword_2_0; }
+
+		//percentage=DOUBLE
+		public Assignment getPercentageAssignment_2_1() { return cPercentageAssignment_2_1; }
+
+		//DOUBLE
+		public RuleCall getPercentageDOUBLETerminalRuleCall_2_1_0() { return cPercentageDOUBLETerminalRuleCall_2_1_0; }
+
+		//'PERCENT'
+		public Keyword getPERCENTKeyword_2_2() { return cPERCENTKeyword_2_2; }
+
+		//constraintClause=ConstraintClause?
+		public Assignment getConstraintClauseAssignment_3() { return cConstraintClauseAssignment_3; }
+
+		//ConstraintClause
+		public RuleCall getConstraintClauseConstraintClauseParserRuleCall_3_0() { return cConstraintClauseConstraintClauseParserRuleCall_3_0; }
+
+		//dofClause=DoFClause?
+		public Assignment getDofClauseAssignment_4() { return cDofClauseAssignment_4; }
+
+		//DoFClause
+		public RuleCall getDofClauseDoFClauseParserRuleCall_4_0() { return cDofClauseDoFClauseParserRuleCall_4_0; }
+
+		//forClause=ForClause?
+		public Assignment getForClauseAssignment_5() { return cForClauseAssignment_5; }
+
+		//ForClause
+		public RuleCall getForClauseForClauseParserRuleCall_5_0() { return cForClauseForClauseParserRuleCall_5_0; }
+
+		//usingClause=UsingClause
+		public Assignment getUsingClauseAssignment_6() { return cUsingClauseAssignment_6; }
+
+		//UsingClause
+		public RuleCall getUsingClauseUsingClauseParserRuleCall_6_0() { return cUsingClauseUsingClauseParserRuleCall_6_0; }
+	}
+
 	public class SlaQueryElements extends AbstractParserRuleElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "tools.descartes.dql.lang.DescartesQL.SlaQuery");
 		private final Group cGroup = (Group)rule.eContents().get(1);
@@ -332,14 +419,17 @@ public class DescartesQLGrammarAccess extends AbstractGrammarElementFinder {
 		private final RuleCall cFuzFuzzinessParserRuleCall_5_0 = (RuleCall)cFuzAssignment_5.eContents().get(0);
 		private final Assignment cPenAssignment_6 = (Assignment)cGroup.eContents().get(6);
 		private final RuleCall cPenPenaltyParserRuleCall_6_0 = (RuleCall)cPenAssignment_6.eContents().get(0);
+		private final Assignment cViolationAssignment_7 = (Assignment)cGroup.eContents().get(7);
+		private final RuleCall cViolationViolationParserRuleCall_7_0 = (RuleCall)cViolationAssignment_7.eContents().get(0);
 		
 		//Slo:
 		//	name=ID ':' metricClauseType=MetricClauseType comparator=Comparator value=VariableValue fuz=Fuzziness?
-		//	pen=Penalty?;
+		//	pen=Penalty? violation=Violation?;
 		@Override public ParserRule getRule() { return rule; }
 
 		//// CPU,Service,Memory... . Metric . statistic Type 
 		//name=ID ':' metricClauseType=MetricClauseType comparator=Comparator value=VariableValue fuz=Fuzziness? pen=Penalty?
+		//violation=Violation?
 		public Group getGroup() { return cGroup; }
 
 		//// CPU,Service,Memory... . Metric . statistic Type 
@@ -381,6 +471,12 @@ public class DescartesQLGrammarAccess extends AbstractGrammarElementFinder {
 
 		//Penalty
 		public RuleCall getPenPenaltyParserRuleCall_6_0() { return cPenPenaltyParserRuleCall_6_0; }
+
+		//violation=Violation?
+		public Assignment getViolationAssignment_7() { return cViolationAssignment_7; }
+
+		//Violation
+		public RuleCall getViolationViolationParserRuleCall_7_0() { return cViolationViolationParserRuleCall_7_0; }
 	}
 
 	public class WeightedSloElements extends AbstractParserRuleElementFinder {
@@ -460,14 +556,12 @@ public class DescartesQLGrammarAccess extends AbstractGrammarElementFinder {
 		private final RuleCall cValueDOUBLETerminalRuleCall_1_0 = (RuleCall)cValueAssignment_1.eContents().get(0);
 		private final Assignment cCurrencyAssignment_2 = (Assignment)cGroup.eContents().get(2);
 		private final RuleCall cCurrencyCurrencyEnumRuleCall_2_0 = (RuleCall)cCurrencyAssignment_2.eContents().get(0);
-		private final Assignment cViolationAssignment_3 = (Assignment)cGroup.eContents().get(3);
-		private final RuleCall cViolationViolationParserRuleCall_3_0 = (RuleCall)cViolationAssignment_3.eContents().get(0);
 		
 		//Penalty:
-		//	type='PENALTY' value=DOUBLE currency=Currency violation=Violation?;
+		//	type='PENALTY' value=DOUBLE currency=Currency?;
 		@Override public ParserRule getRule() { return rule; }
 
-		//type='PENALTY' value=DOUBLE currency=Currency violation=Violation?
+		//type='PENALTY' value=DOUBLE currency=Currency?
 		public Group getGroup() { return cGroup; }
 
 		//type='PENALTY'
@@ -482,45 +576,63 @@ public class DescartesQLGrammarAccess extends AbstractGrammarElementFinder {
 		//DOUBLE
 		public RuleCall getValueDOUBLETerminalRuleCall_1_0() { return cValueDOUBLETerminalRuleCall_1_0; }
 
-		//currency=Currency
+		//currency=Currency?
 		public Assignment getCurrencyAssignment_2() { return cCurrencyAssignment_2; }
 
 		//Currency
 		public RuleCall getCurrencyCurrencyEnumRuleCall_2_0() { return cCurrencyCurrencyEnumRuleCall_2_0; }
-
-		//violation=Violation?
-		public Assignment getViolationAssignment_3() { return cViolationAssignment_3; }
-
-		//Violation
-		public RuleCall getViolationViolationParserRuleCall_3_0() { return cViolationViolationParserRuleCall_3_0; }
 	}
 
 	public class ViolationElements extends AbstractParserRuleElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "tools.descartes.dql.lang.DescartesQL.Violation");
-		private final Group cGroup = (Group)rule.eContents().get(1);
-		private final Keyword cPERKeyword_0 = (Keyword)cGroup.eContents().get(0);
-		private final Assignment cAmountAssignment_1 = (Assignment)cGroup.eContents().get(1);
-		private final RuleCall cAmountINTTerminalRuleCall_1_0 = (RuleCall)cAmountAssignment_1.eContents().get(0);
-		private final Keyword cVIOLATIONSKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
+		private final Keyword cPERKeyword_0_0 = (Keyword)cGroup_0.eContents().get(0);
+		private final Assignment cAmountAssignment_0_1 = (Assignment)cGroup_0.eContents().get(1);
+		private final RuleCall cAmountINTTerminalRuleCall_0_1_0 = (RuleCall)cAmountAssignment_0_1.eContents().get(0);
+		private final Keyword cVIOLATIONSKeyword_0_2 = (Keyword)cGroup_0.eContents().get(2);
+		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
+		private final Keyword cSATISFACTIONLEVELKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
+		private final Assignment cPercentageAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
+		private final RuleCall cPercentageDOUBLETerminalRuleCall_1_1_0 = (RuleCall)cPercentageAssignment_1_1.eContents().get(0);
+		private final Keyword cPERCENTKeyword_1_2 = (Keyword)cGroup_1.eContents().get(2);
 		
 		//Violation:
-		//	'PER' amount=INT 'VIOLATIONS';
+		//	'PER' amount=INT 'VIOLATIONS' | 'SATISFACTION-LEVEL' percentage=DOUBLE 'PERCENT';
 		@Override public ParserRule getRule() { return rule; }
 
+		//'PER' amount=INT 'VIOLATIONS' | 'SATISFACTION-LEVEL' percentage=DOUBLE 'PERCENT'
+		public Alternatives getAlternatives() { return cAlternatives; }
+
 		//'PER' amount=INT 'VIOLATIONS'
-		public Group getGroup() { return cGroup; }
+		public Group getGroup_0() { return cGroup_0; }
 
 		//'PER'
-		public Keyword getPERKeyword_0() { return cPERKeyword_0; }
+		public Keyword getPERKeyword_0_0() { return cPERKeyword_0_0; }
 
 		//amount=INT
-		public Assignment getAmountAssignment_1() { return cAmountAssignment_1; }
+		public Assignment getAmountAssignment_0_1() { return cAmountAssignment_0_1; }
 
 		//INT
-		public RuleCall getAmountINTTerminalRuleCall_1_0() { return cAmountINTTerminalRuleCall_1_0; }
+		public RuleCall getAmountINTTerminalRuleCall_0_1_0() { return cAmountINTTerminalRuleCall_0_1_0; }
 
 		//'VIOLATIONS'
-		public Keyword getVIOLATIONSKeyword_2() { return cVIOLATIONSKeyword_2; }
+		public Keyword getVIOLATIONSKeyword_0_2() { return cVIOLATIONSKeyword_0_2; }
+
+		//'SATISFACTION-LEVEL' percentage=DOUBLE 'PERCENT'
+		public Group getGroup_1() { return cGroup_1; }
+
+		//'SATISFACTION-LEVEL'
+		public Keyword getSATISFACTIONLEVELKeyword_1_0() { return cSATISFACTIONLEVELKeyword_1_0; }
+
+		//percentage=DOUBLE
+		public Assignment getPercentageAssignment_1_1() { return cPercentageAssignment_1_1; }
+
+		//DOUBLE
+		public RuleCall getPercentageDOUBLETerminalRuleCall_1_1_0() { return cPercentageDOUBLETerminalRuleCall_1_1_0; }
+
+		//'PERCENT'
+		public Keyword getPERCENTKeyword_1_2() { return cPERCENTKeyword_1_2; }
 	}
 
 	public class ModelStructureQueryElements extends AbstractParserRuleElementFinder {
@@ -3465,6 +3577,7 @@ public class DescartesQLGrammarAccess extends AbstractGrammarElementFinder {
 	
 	private final DescartesQLElements pDescartesQL;
 	private final GoalElements pGoal;
+	private final GenerateSLAConcernElements pGenerateSLAConcern;
 	private final SlaQueryElements pSlaQuery;
 	private final SloQueryElements pSloQuery;
 	private final SlaElements pSla;
@@ -3569,6 +3682,7 @@ public class DescartesQLGrammarAccess extends AbstractGrammarElementFinder {
 		this.gaTerminals = gaTerminals;
 		this.pDescartesQL = new DescartesQLElements();
 		this.pGoal = new GoalElements();
+		this.pGenerateSLAConcern = new GenerateSLAConcernElements();
 		this.pSlaQuery = new SlaQueryElements();
 		this.pSloQuery = new SloQueryElements();
 		this.pSla = new SlaElements();
@@ -3693,7 +3807,7 @@ public class DescartesQLGrammarAccess extends AbstractGrammarElementFinder {
 	//// @THESIS
 	//DescartesQL:
 	//	query=(ModelStructureQuery | PerformanceMetricsQuery | PerformanceIssueQuery | ConnectorCapabilityQuery | WhatIfQuery
-	//	| Goal)
+	//	| Goal | GenerateSLAConcern)
 	//	';';
 	public DescartesQLElements getDescartesQLAccess() {
 		return pDescartesQL;
@@ -3704,7 +3818,7 @@ public class DescartesQLGrammarAccess extends AbstractGrammarElementFinder {
 	}
 
 	//Goal:
-	//	queryType=('ENSURE' | 'MONITOR') slaQuery=SlaQuery sloQuery=SloQuery constraintClause=ConstraintClause?
+	//	queryType=('ENSURE' | 'MONITOR' | 'EVALUATE') slaQuery=SlaQuery sloQuery=SloQuery constraintClause=ConstraintClause?
 	//	dofClause=DoFClause? forClause=ForClause? usingClause=UsingClause;
 	public GoalElements getGoalAccess() {
 		return pGoal;
@@ -3714,6 +3828,17 @@ public class DescartesQLGrammarAccess extends AbstractGrammarElementFinder {
 		return getGoalAccess().getRule();
 	}
 
+	//GenerateSLAConcern:
+	//	'GENERATE' offset=MultipleArithmeticClause? ('SATISFACTION-LEVEL' percentage=DOUBLE 'PERCENT')?
+	//	constraintClause=ConstraintClause? dofClause=DoFClause? forClause=ForClause? usingClause=UsingClause;
+	public GenerateSLAConcernElements getGenerateSLAConcernAccess() {
+		return pGenerateSLAConcern;
+	}
+	
+	public ParserRule getGenerateSLAConcernRule() {
+		return getGenerateSLAConcernAccess().getRule();
+	}
+
 	//SlaQuery:
 	//	type='AGREEMENTS' slas+=Sla (',' slas+=Sla)*;
 	public SlaQueryElements getSlaQueryAccess() {
@@ -3746,7 +3871,7 @@ public class DescartesQLGrammarAccess extends AbstractGrammarElementFinder {
 
 	//Slo:
 	//	name=ID ':' metricClauseType=MetricClauseType comparator=Comparator value=VariableValue fuz=Fuzziness?
-	//	pen=Penalty?;
+	//	pen=Penalty? violation=Violation?;
 	public SloElements getSloAccess() {
 		return pSlo;
 	}
@@ -3776,7 +3901,7 @@ public class DescartesQLGrammarAccess extends AbstractGrammarElementFinder {
 	}
 
 	//Penalty:
-	//	type='PENALTY' value=DOUBLE currency=Currency violation=Violation?;
+	//	type='PENALTY' value=DOUBLE currency=Currency?;
 	public PenaltyElements getPenaltyAccess() {
 		return pPenalty;
 	}
@@ -3786,7 +3911,7 @@ public class DescartesQLGrammarAccess extends AbstractGrammarElementFinder {
 	}
 
 	//Violation:
-	//	'PER' amount=INT 'VIOLATIONS';
+	//	'PER' amount=INT 'VIOLATIONS' | 'SATISFACTION-LEVEL' percentage=DOUBLE 'PERCENT';
 	public ViolationElements getViolationAccess() {
 		return pViolation;
 	}
diff --git a/lang/tools.descartes.dql.lang/src/tools/descartes/dql/lang/DescartesQL.xtext b/lang/tools.descartes.dql.lang/src/tools/descartes/dql/lang/DescartesQL.xtext
index 82c73720..13f6e92b 100644
--- a/lang/tools.descartes.dql.lang/src/tools/descartes/dql/lang/DescartesQL.xtext
+++ b/lang/tools.descartes.dql.lang/src/tools/descartes/dql/lang/DescartesQL.xtext
@@ -6,11 +6,13 @@ import "http://www.eclipse.org/emf/2002/Ecore" as ecore
 // @THESIS
 DescartesQL:
 	query=(ModelStructureQuery | PerformanceMetricsQuery | PerformanceIssueQuery | ConnectorCapabilityQuery | WhatIfQuery
-	| Goal)
+	| Goal | GenerateSLAConcern)
 	';';
 
 Goal:
-	queryType=('ENSURE' | 'MONITOR') slaQuery=SlaQuery sloQuery=SloQuery (constraintClause=ConstraintClause)? (dofClause=DoFClause)? (forClause=ForClause)? usingClause=UsingClause;
+	queryType= ('ENSURE' | 'MONITOR' | 'EVALUATE' ) slaQuery=SlaQuery sloQuery=SloQuery (constraintClause=ConstraintClause)? (dofClause=DoFClause)? (forClause=ForClause)? usingClause=UsingClause;
+	
+GenerateSLAConcern: 'GENERATE' (offset=MultipleArithmeticClause)? ('SATISFACTION-LEVEL' percentage=DOUBLE 'PERCENT')? (constraintClause=ConstraintClause)? (dofClause=DoFClause)? (forClause=ForClause)? usingClause=UsingClause;
 
 SlaQuery:
 	type='AGREEMENTS' slas+=Sla (',' slas+=Sla)*;
@@ -23,7 +25,7 @@ Sla:
 
 Slo: // CPU,Service,Memory... . Metric . statistic Type 
 	name=ID ':' metricClauseType=MetricClauseType comparator=Comparator value=VariableValue (fuz=Fuzziness)?
-	(pen=Penalty)?;
+	(pen=Penalty)? (violation=Violation)?;
 
 WeightedSlo:
 	slo=[Slo] ('*' weight=INT)?;
@@ -32,10 +34,10 @@ Fuzziness:
 	type='FUZZINESS' deviation=VariableValue;
 
 Penalty:
-	type='PENALTY' value=DOUBLE currency=Currency (violation=Violation)?;
+	type='PENALTY' value=DOUBLE currency=Currency?;
 
 Violation:
-	'PER' amount=INT 'VIOLATIONS';
+	('PER' amount=INT 'VIOLATIONS') | ('SATISFACTION-LEVEL' percentage=DOUBLE 'PERCENT');
 
 enum Comparator:
 	less='<' | lessEqual='<=' | greater='>' | greaterEqual='>=' | equal='==';
diff --git a/lang/tools.descartes.dql.lang/xtend-gen/tools/descartes/dql/lang/generator/.DescartesQLGenerator.xtendbin b/lang/tools.descartes.dql.lang/xtend-gen/tools/descartes/dql/lang/generator/.DescartesQLGenerator.xtendbin
index f695a62c45ac40e3837bc2bf512cef5e19700640..f1002eee52b99a5a31628852ab98800ea36ad923 100644
GIT binary patch
delta 64
zcmbOtI7N^*z?+#xgn@&DgTXjs-bUWJ%*;S~^IGO$CNP7U?II(HG5I>XIhYpYum{t@
G9F71ReG%~h

delta 64
zcmbOtI7N^*z?+#xgn@&DgQ2N5b0hCuW@aG0c`b7=6PUrwc99Xpn0%ex983#x*n{a{
G4o3hyBohk&

-- 
GitLab