Redesign query template to accept Query as parameter

Introduce QueryParameter as the way to refer to Query instance
in templates.
Introduce QueryTable.
This commit is contained in:
Fedor Isakov 2020-04-21 17:30:47 +02:00
parent dae5a63835
commit 71dadaff0f
6 changed files with 303 additions and 9 deletions

View File

@ -237,6 +237,9 @@
<child id="1107880067339" name="method" index="3MN40a" />
</concept>
<concept id="1171903607971" name="jetbrains.mps.baseLanguage.structure.WildCardType" flags="in" index="3qTvmN" />
<concept id="1171903916106" name="jetbrains.mps.baseLanguage.structure.UpperBoundType" flags="in" index="3qUE_q">
<child id="1171903916107" name="bound" index="3qUE_r" />
</concept>
<concept id="7812454656619025416" name="jetbrains.mps.baseLanguage.structure.MethodDeclaration" flags="ng" index="1rXfSm">
<property id="8355037393041754995" name="isNative" index="2aFKle" />
</concept>
@ -13579,6 +13582,27 @@
</node>
</node>
<node concept="2tJIrI" id="4t7Xo7icolH" role="jymVt" />
<node concept="3clFb_" id="5EDW3XE0F7L" role="jymVt">
<property role="TrG5h" value="queryClass" />
<node concept="3Tm1VV" id="5EDW3XE0F7N" role="1B3o_S" />
<node concept="3uibUv" id="5EDW3XE0F7O" role="3clF45">
<ref role="3uigEE" to="wyt6:~Class" resolve="Class" />
<node concept="3qUE_q" id="5EDW3XE0F7P" role="11_B2D">
<node concept="3uibUv" id="5EDW3XE0F7Q" role="3qUE_r">
<ref role="3uigEE" to="i348:5EDW3XDYeWv" resolve="Query" />
</node>
</node>
</node>
<node concept="3clFbS" id="5EDW3XE0F7U" role="3clF47">
<node concept="3clFbF" id="5EDW3XE6x5r" role="3cqZAp">
<node concept="10Nm6u" id="5EDW3XE6x5q" role="3clFbG" />
</node>
</node>
<node concept="2AHcQZ" id="5EDW3XE0F7V" role="2AJF6D">
<ref role="2AI5Lk" to="wyt6:~Override" resolve="Override" />
</node>
</node>
<node concept="2tJIrI" id="5EDW3XE0GCG" role="jymVt" />
<node concept="3clFb_" id="7P_FdVPsJk6" role="jymVt">
<property role="1EzhhJ" value="false" />
<property role="TrG5h" value="newQuery" />

View File

@ -1956,5 +1956,33 @@
<node concept="3clFbS" id="JOGAOsxlgZ" role="2VODD2" />
</node>
</node>
<node concept="13h7C7" id="5EDW3XEbK71">
<property role="3GE5qa" value="query" />
<ref role="13h7C2" to="wq2x:5EDW3XEaQl5" resolve="QueryParameter" />
<node concept="13i0hz" id="5EDW3XEbK7c" role="13h7CS">
<property role="TrG5h" value="getQueryTemplate" />
<node concept="3Tm1VV" id="5EDW3XEbK7d" role="1B3o_S" />
<node concept="3Tqbb2" id="5EDW3XEbK7s" role="3clF45">
<ref role="ehGHo" to="wq2x:7P_FdVQ_S6B" resolve="QueryTemplate" />
</node>
<node concept="3clFbS" id="5EDW3XEbK7f" role="3clF47">
<node concept="3clFbF" id="5EDW3XEbKk9" role="3cqZAp">
<node concept="2OqwBi" id="5EDW3XEbKtt" role="3clFbG">
<node concept="13iPFW" id="5EDW3XEbKk8" role="2Oq$k0" />
<node concept="2Xjw5R" id="5EDW3XEbK_d" role="2OqNvi">
<node concept="1xMEDy" id="5EDW3XEbK_f" role="1xVPHs">
<node concept="chp4Y" id="5EDW3XEbKCY" role="ri$Ld">
<ref role="cht4Q" to="wq2x:7P_FdVQ_S6B" resolve="QueryTemplate" />
</node>
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="13hLZK" id="5EDW3XEbK72" role="13h7CW">
<node concept="3clFbS" id="5EDW3XEbK73" role="2VODD2" />
</node>
</node>
</model>

View File

@ -4014,18 +4014,36 @@
<node concept="3EZMnI" id="7P_FdVQ_S6R" role="2wV5jI">
<node concept="3F0A7n" id="7P_FdVQ_S77" role="3EZMnx">
<ref role="1NtTu8" to="tpck:h0TrG11" resolve="name" />
<node concept="ljvvj" id="2BZXJecJGb_" role="3F10Kt">
</node>
<node concept="3F0ifn" id="5EDW3XE7Ja0" role="3EZMnx">
<property role="3F0ifm" value="handle" />
</node>
<node concept="1iCGBv" id="5EDW3XE6suX" role="3EZMnx">
<ref role="1NtTu8" to="wq2x:5EDW3XE6suU" resolve="queryType" />
<node concept="1sVBvm" id="5EDW3XE6suY" role="1sWHZn">
<node concept="3F0A7n" id="5EDW3XE6suZ" role="2wV5jI">
<property role="1Intyy" value="true" />
<ref role="1NtTu8" to="tpck:h0TrG11" resolve="name" />
<ref role="1k5W1q" to="tpen:hFIVf2f" resolve="ClassName" />
</node>
</node>
</node>
<node concept="3F0ifn" id="5EDW3XE7JbR" role="3EZMnx">
<property role="3F0ifm" value="query" />
<ref role="1k5W1q" node="7ksQUDZqpsE" resolve="InputName" />
</node>
<node concept="3F0ifn" id="5EDW3XE7Jar" role="3EZMnx">
<property role="3F0ifm" value="{" />
<ref role="1k5W1q" to="tpen:hFD5onb" resolve="LeftBrace" />
<node concept="ljvvj" id="5EDW3XE7JaD" role="3F10Kt">
<property role="VOm3f" value="true" />
</node>
</node>
<node concept="l2Vlx" id="7P_FdVQ_S6U" role="2iSdaV" />
<node concept="3F0ifn" id="3IIf9O_dj_Z" role="3EZMnx">
<property role="3F0ifm" value="" />
<node concept="ljvvj" id="3IIf9O_djA6" role="3F10Kt">
<node concept="3EZMnI" id="6OXbTDyyUaE" role="3EZMnx">
<node concept="lj46D" id="5EDW3XE7JaI" role="3F10Kt">
<property role="VOm3f" value="true" />
</node>
</node>
<node concept="3EZMnI" id="6OXbTDyyUaE" role="3EZMnx">
<node concept="VPM3Z" id="6OXbTDyyUaG" role="3F10Kt">
<property role="VOm3f" value="false" />
</node>
@ -4034,6 +4052,13 @@
</node>
<node concept="l2Vlx" id="6OXbTDyyUaJ" role="2iSdaV" />
</node>
<node concept="3F0ifn" id="5EDW3XE7Jb6" role="3EZMnx">
<property role="3F0ifm" value="}" />
<ref role="1k5W1q" to="tpen:hFD5_7H" resolve="RightBrace" />
<node concept="pVoyu" id="5EDW3XE7Jbn" role="3F10Kt">
<property role="VOm3f" value="true" />
</node>
</node>
</node>
</node>
<node concept="24kQdi" id="6OXbTD$dU7D">
@ -4045,12 +4070,18 @@
</node>
<node concept="3F0A7n" id="6OXbTD$dU81" role="3EZMnx">
<ref role="1NtTu8" to="tpck:h0TrG11" resolve="name" />
<node concept="ljvvj" id="6OXbTD$dU8h" role="3F10Kt">
<property role="VOm3f" value="true" />
</node>
</node>
<node concept="3F0ifn" id="2BZXJecNiyN" role="3EZMnx">
<property role="3F0ifm" value="parameter:" />
<node concept="pVoyu" id="5EDW3XE2doR" role="3F10Kt">
<property role="VOm3f" value="true" />
</node>
<node concept="lj46D" id="5EDW3XE2doM" role="3F10Kt">
<property role="VOm3f" value="true" />
</node>
<node concept="3nxI2P" id="5EDW3XE6svv" role="3F10Kt">
<property role="VOm3f" value="true" />
</node>
</node>
<node concept="3F2HdR" id="2BZXJecNizj" role="3EZMnx">
<property role="2czwfO" value="," />
@ -4068,12 +4099,18 @@
</node>
<node concept="3F0ifn" id="2BZXJecEa_K" role="3EZMnx">
<property role="3F0ifm" value="kind:" />
<node concept="3nxI2P" id="5EDW3XE32A4" role="3F10Kt">
<property role="VOm3f" value="true" />
</node>
</node>
<node concept="3F1sOY" id="2BZXJecEa_m" role="3EZMnx">
<ref role="1NtTu8" to="wq2x:2BZXJecE0bF" resolve="queryKind" />
<node concept="ljvvj" id="2BZXJecEaAS" role="3F10Kt">
<property role="VOm3f" value="true" />
</node>
<node concept="3nxI2P" id="5EDW3XE32Ac" role="3F10Kt">
<property role="VOm3f" value="true" />
</node>
</node>
<node concept="3F0ifn" id="6OXbTD$dU8b" role="3EZMnx">
<property role="3F0ifm" value="" />
@ -8077,5 +8114,111 @@
</node>
</node>
</node>
<node concept="24kQdi" id="5EDW3XE0OBF">
<property role="3GE5qa" value="query" />
<ref role="1XX52x" to="wq2x:5EDW3XE0OAL" resolve="QueryTable" />
<node concept="3EZMnI" id="5EDW3XE0OBH" role="2wV5jI">
<node concept="PMmxH" id="5EDW3XE0P0w" role="3EZMnx">
<ref role="PMmxG" to="tpco:2wZex4PafBj" resolve="alias" />
<ref role="1k5W1q" to="qgy9:4aJUH_hW38r" resolve="RuleKeyword" />
</node>
<node concept="3F0A7n" id="5EDW3XE0P0D" role="3EZMnx">
<ref role="1NtTu8" to="tpck:h0TrG11" resolve="name" />
<ref role="1k5W1q" to="tpen:hFIVf2f" resolve="ClassName" />
</node>
<node concept="3F0ifn" id="5EDW3XE0PmJ" role="3EZMnx">
<property role="3F0ifm" value="" />
<node concept="VPM3Z" id="5EDW3XE0PmK" role="3F10Kt">
<property role="VOm3f" value="false" />
</node>
<node concept="pVoyu" id="5EDW3XE0PmL" role="3F10Kt">
<property role="VOm3f" value="true" />
</node>
</node>
<node concept="3F2HdR" id="5EDW3XE0PnH" role="3EZMnx">
<property role="2czwfO" value=" " />
<ref role="1NtTu8" to="wq2x:5EDW3XE0PmY" resolve="query" />
<node concept="lj46D" id="5EDW3XE0PnR" role="3F10Kt">
<property role="VOm3f" value="true" />
</node>
<node concept="pVoyu" id="5EDW3XE0PnS" role="3F10Kt">
<property role="VOm3f" value="true" />
</node>
<node concept="l2Vlx" id="5EDW3XE0PnJ" role="2czzBx" />
<node concept="tppnM" id="5EDW3XE0PnX" role="sWeuL">
<node concept="ljvvj" id="5EDW3XE0PnZ" role="3F10Kt">
<property role="VOm3f" value="true" />
</node>
</node>
</node>
<node concept="l2Vlx" id="5EDW3XE0OBK" role="2iSdaV" />
</node>
</node>
<node concept="24kQdi" id="5EDW3XEaQlY">
<property role="3GE5qa" value="query" />
<ref role="1XX52x" to="wq2x:5EDW3XEaQl5" resolve="QueryParameter" />
<node concept="3EZMnI" id="5EDW3XEaRlR" role="2wV5jI">
<node concept="PMmxH" id="5EDW3XEaRlY" role="3EZMnx">
<ref role="PMmxG" to="tpco:2wZex4PafBj" resolve="alias" />
<ref role="1k5W1q" node="7ksQUDZqpsE" resolve="InputName" />
</node>
<node concept="l2Vlx" id="5EDW3XEaRlU" role="2iSdaV" />
</node>
</node>
<node concept="3p36aQ" id="5EDW3XEaQmr">
<property role="3GE5qa" value="query" />
<ref role="aqKnT" to="wq2x:5EDW3XEaQl5" resolve="QueryParameter" />
<node concept="3ft6gV" id="5EDW3XEaQms" role="3ft7WO">
<node concept="3eGOop" id="5EDW3XEc8hU" role="3ft5RZ">
<node concept="ucgPf" id="5EDW3XEc8hW" role="3aKz83">
<node concept="3clFbS" id="5EDW3XEc8hY" role="2VODD2">
<node concept="3clFbF" id="5EDW3XEc8jh" role="3cqZAp">
<node concept="2ShNRf" id="5EDW3XEc8jf" role="3clFbG">
<node concept="3zrR0B" id="5EDW3XEc9io" role="2ShVmc">
<node concept="3Tqbb2" id="5EDW3XEc9iq" role="3zrR0E">
<ref role="ehGHo" to="wq2x:5EDW3XEaQl5" resolve="QueryParameter" />
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="16NfWO" id="5EDW3XEcbS2" role="upBLP">
<node concept="uGdhv" id="5EDW3XEcbSQ" role="16NeZM">
<node concept="3clFbS" id="5EDW3XEcbSS" role="2VODD2">
<node concept="3clFbF" id="5EDW3XEcbXN" role="3cqZAp">
<node concept="2OqwBi" id="5EDW3XEccpd" role="3clFbG">
<node concept="35c_gC" id="5EDW3XEcbXM" role="2Oq$k0">
<ref role="35c_gD" to="wq2x:5EDW3XEaQl5" resolve="QueryParameter" />
</node>
<node concept="3n3YKJ" id="5EDW3XEccO4" role="2OqNvi" />
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="3ft6gW" id="5EDW3XEaQmu" role="3ft5RY">
<node concept="3clFbS" id="5EDW3XEaQmv" role="2VODD2">
<node concept="3clFbF" id="5EDW3XEaQqz" role="3cqZAp">
<node concept="2OqwBi" id="5EDW3XEaQYy" role="3clFbG">
<node concept="2OqwBi" id="5EDW3XEaQun" role="2Oq$k0">
<node concept="3bvxqY" id="5EDW3XEaQqy" role="2Oq$k0" />
<node concept="2Xjw5R" id="5EDW3XEaQA0" role="2OqNvi">
<node concept="1xMEDy" id="5EDW3XEaQA2" role="1xVPHs">
<node concept="chp4Y" id="5EDW3XEaQDQ" role="ri$Ld">
<ref role="cht4Q" to="wq2x:7P_FdVQ_S6B" resolve="QueryTemplate" />
</node>
</node>
<node concept="1xIGOp" id="5EDW3XEaQNF" role="1xVPHs" />
</node>
</node>
<node concept="3x8VRR" id="5EDW3XEaRfS" role="2OqNvi" />
</node>
</node>
</node>
</node>
</node>
</node>
</model>

View File

@ -837,6 +837,17 @@
<property role="TrG5h" value="QueryTemplate" />
<property role="3GE5qa" value="query" />
<ref role="1TJDcQ" to="tpck:gw2VY9q" resolve="BaseConcept" />
<node concept="1TJgyi" id="5EDW3XEcagK" role="1TKVEl">
<property role="IQ2nx" value="6533016889632793648" />
<property role="TrG5h" value="queryName" />
<ref role="AX2Wp" to="tpck:fKAOsGN" resolve="string" />
</node>
<node concept="1TJgyj" id="5EDW3XE6suU" role="1TKVEi">
<property role="IQ2ns" value="6533016889631295418" />
<property role="20kJfa" value="queryType" />
<property role="20lbJX" value="fLJekj4/_1" />
<ref role="20lvS9" to="tpee:g7pOWCK" resolve="Classifier" />
</node>
<node concept="1TJgyj" id="6OXbTDyyU9U" role="1TKVEi">
<property role="IQ2ns" value="7871500063838282362" />
<property role="20lmBu" value="fLJjDmT/aggregation" />
@ -877,6 +888,7 @@
<property role="20kJfa" value="queryKind" />
<property role="20lbJX" value="fLJekj4/_1" />
<ref role="20lvS9" to="tpee:fz3vP1J" resolve="Expression" />
<node concept="asaX9" id="5EDW3XE6mPT" role="lGtFl" />
</node>
<node concept="1TJgyj" id="6OXbTD$dU7c" role="1TKVEi">
<property role="IQ2ns" value="7871500063866331596" />
@ -1711,5 +1723,30 @@
<ref role="20lvS9" node="JOGAOsxanH" resolve="TermConstructor" />
</node>
</node>
<node concept="1TIwiD" id="5EDW3XE0OAL">
<property role="EcuMT" value="6533016889629821361" />
<property role="3GE5qa" value="query" />
<property role="TrG5h" value="QueryTable" />
<property role="19KtqR" value="true" />
<property role="34LRSv" value="query table" />
<ref role="1TJDcQ" to="tpck:gw2VY9q" resolve="BaseConcept" />
<node concept="1TJgyj" id="5EDW3XE0PmY" role="1TKVEi">
<property role="IQ2ns" value="6533016889629824446" />
<property role="20lmBu" value="fLJjDmT/aggregation" />
<property role="20kJfa" value="query" />
<property role="20lbJX" value="fLJekj5/_0__n" />
<ref role="20lvS9" node="7P_FdVQ_S6B" resolve="QueryTemplate" />
</node>
<node concept="PrWs8" id="5EDW3XE0OBD" role="PzmwI">
<ref role="PrY4T" to="tpee:hCUYCKd" resolve="IValidIdentifier" />
</node>
</node>
<node concept="1TIwiD" id="5EDW3XEaQl5">
<property role="EcuMT" value="6533016889632449861" />
<property role="3GE5qa" value="query" />
<property role="TrG5h" value="QueryParameter" />
<property role="34LRSv" value="query" />
<ref role="1TJDcQ" to="tpee:fz3vP1J" resolve="Expression" />
</node>
</model>

View File

@ -21,6 +21,7 @@
<import index="6exd" ref="r:0f9b1fb3-00f9-4480-b235-1a906a087ab2(jetbrains.mps.logic.dataform)" />
<import index="mhbf" ref="8865b7a8-5271-43d3-884c-6fd1d9cfdd34/java:org.jetbrains.mps.openapi.model(MPS.OpenAPI/)" implicit="true" />
<import index="wyt6" ref="6354ebe7-c22a-4a0f-ac54-50b52ab9b065/java:java.lang(JDK/)" implicit="true" />
<import index="x5bw" ref="r:15ea4f4e-2f41-4ce3-b7e4-a4e0737f0171(jetbrains.mps.lang.coderules.behavior)" implicit="true" />
</imports>
<registry>
<language id="f3061a53-9226-4cc5-a443-f952ceaf5816" name="jetbrains.mps.baseLanguage">
@ -108,6 +109,7 @@
</language>
<language id="3a13115c-633c-4c5c-bbcc-75c4219e9555" name="jetbrains.mps.lang.quotation">
<concept id="1196350785110" name="jetbrains.mps.lang.quotation.structure.AbstractAntiquotation" flags="ng" index="2c44t0">
<property id="6489343236075007666" name="label" index="3hQQBS" />
<child id="1196350785111" name="expression" index="2c44t1" />
</concept>
<concept id="1196350785117" name="jetbrains.mps.lang.quotation.structure.ReferenceAntiquotation" flags="ng" index="2c44tb" />
@ -1605,5 +1607,48 @@
<ref role="1YaFvo" to="wq2x:24ciDNzqIuw" resolve="TermType" />
</node>
</node>
<node concept="1YbPZF" id="5EDW3XEbJHV">
<property role="TrG5h" value="typeof_QueryParameter" />
<property role="3GE5qa" value="query" />
<node concept="3clFbS" id="5EDW3XEbJHW" role="18ibNy">
<node concept="1Z5TYs" id="5EDW3XEbJNz" role="3cqZAp">
<node concept="mw_s8" id="5EDW3XEbJNR" role="1ZfhKB">
<node concept="2c44tf" id="5EDW3XEbJNN" role="mwGJk">
<node concept="3uibUv" id="5EDW3XEbJOd" role="2c44tc">
<node concept="2c44tb" id="5EDW3XEbJOV" role="lGtFl">
<property role="2qtEX8" value="classifier" />
<property role="P3scX" value="f3061a53-9226-4cc5-a443-f952ceaf5816/1107535904670/1107535924139" />
<property role="3hQQBS" value="ClassifierType" />
<node concept="2OqwBi" id="5EDW3XEbL5R" role="2c44t1">
<node concept="2OqwBi" id="5EDW3XEbJYD" role="2Oq$k0">
<node concept="1YBJjd" id="5EDW3XEbJPj" role="2Oq$k0">
<ref role="1YBMHb" node="5EDW3XEbJHY" resolve="qp" />
</node>
<node concept="2qgKlT" id="5EDW3XEbKPs" role="2OqNvi">
<ref role="37wK5l" to="x5bw:5EDW3XEbK7c" resolve="getQueryTemplate" />
</node>
</node>
<node concept="3TrEf2" id="5EDW3XEbLk4" role="2OqNvi">
<ref role="3Tt5mk" to="wq2x:5EDW3XE6suU" resolve="queryType" />
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="mw_s8" id="5EDW3XEbJNA" role="1ZfhK$">
<node concept="1Z2H0r" id="5EDW3XEbJI5" role="mwGJk">
<node concept="1YBJjd" id="5EDW3XEbJJT" role="1Z2MuG">
<ref role="1YBMHb" node="5EDW3XEbJHY" resolve="qp" />
</node>
</node>
</node>
</node>
</node>
<node concept="1YaCAy" id="5EDW3XEbJHY" role="1YuTPh">
<property role="TrG5h" value="qp" />
<ref role="1YaFvo" to="wq2x:5EDW3XEaQl5" resolve="QueryParameter" />
</node>
</node>
</model>

View File

@ -1027,8 +1027,25 @@
<node concept="3uibUv" id="4t7Xo7intc6" role="3clF45">
<ref role="3uigEE" node="4t7Xo7inshN" resolve="QueryKind" />
</node>
<node concept="2AHcQZ" id="5EDW3XE0DfZ" role="2AJF6D">
<ref role="2AI5Lk" to="wyt6:~Deprecated" resolve="Deprecated" />
</node>
</node>
<node concept="2tJIrI" id="6OXbTD$iO0D" role="jymVt" />
<node concept="3clFb_" id="5EDW3XE0DF4" role="jymVt">
<property role="TrG5h" value="queryClass" />
<node concept="3clFbS" id="5EDW3XE0DF7" role="3clF47" />
<node concept="3Tm1VV" id="5EDW3XE0DF8" role="1B3o_S" />
<node concept="3uibUv" id="5EDW3XE0Dl6" role="3clF45">
<ref role="3uigEE" to="wyt6:~Class" resolve="Class" />
<node concept="3qUE_q" id="5EDW3XE0DnS" role="11_B2D">
<node concept="3uibUv" id="5EDW3XE0Do4" role="3qUE_r">
<ref role="3uigEE" node="5EDW3XDYeWv" resolve="Query" />
</node>
</node>
</node>
</node>
<node concept="2tJIrI" id="5EDW3XE0Dj$" role="jymVt" />
<node concept="3clFb_" id="5itBwM78vMu" role="jymVt">
<property role="TrG5h" value="createToken" />
<node concept="37vLTG" id="5itBwM78zqd" role="3clF46">