From 28f64d324a5be248382ccd79f82d3f881f7a52b7 Mon Sep 17 00:00:00 2001 From: Manfred Moosleitner Date: Thu, 10 Sep 2020 08:37:57 +0200 Subject: [PATCH] changes to help page --- ...e70cd.css => calc.75808e4b525444cf6e03.css | 0 ...css.gz => calc.75808e4b525444cf6e03.css.gz | Bin index.html | 4 ++-- index.html.gz | Bin 1820 -> 1821 bytes ...js => calc.75808e4b525444cf6e03.bundle.js} | 2 +- ...=> calc.75808e4b525444cf6e03.bundle.js.gz} | Bin 727221 -> 727245 bytes ...s => tests.75808e4b525444cf6e03.bundle.js} | 0 ...> tests.75808e4b525444cf6e03.bundle.js.gz} | Bin test.html | 4 ++-- test.html.gz | Bin 421 -> 422 bytes ...70cd.css => tests.75808e4b525444cf6e03.css | 0 ...ss.gz => tests.75808e4b525444cf6e03.css.gz | Bin 12 files changed, 5 insertions(+), 5 deletions(-) rename calc.b61e25e429566c9e70cd.css => calc.75808e4b525444cf6e03.css (100%) rename calc.b61e25e429566c9e70cd.css.gz => calc.75808e4b525444cf6e03.css.gz (100%) rename js/{calc.b61e25e429566c9e70cd.bundle.js => calc.75808e4b525444cf6e03.bundle.js} (87%) rename js/{calc.b61e25e429566c9e70cd.bundle.js.gz => calc.75808e4b525444cf6e03.bundle.js.gz} (88%) rename js/{tests.b61e25e429566c9e70cd.bundle.js => tests.75808e4b525444cf6e03.bundle.js} (100%) rename js/{tests.b61e25e429566c9e70cd.bundle.js.gz => tests.75808e4b525444cf6e03.bundle.js.gz} (100%) rename tests.b61e25e429566c9e70cd.css => tests.75808e4b525444cf6e03.css (100%) rename tests.b61e25e429566c9e70cd.css.gz => tests.75808e4b525444cf6e03.css.gz (100%) diff --git a/calc.b61e25e429566c9e70cd.css b/calc.75808e4b525444cf6e03.css similarity index 100% rename from calc.b61e25e429566c9e70cd.css rename to calc.75808e4b525444cf6e03.css diff --git a/calc.b61e25e429566c9e70cd.css.gz b/calc.75808e4b525444cf6e03.css.gz similarity index 100% rename from calc.b61e25e429566c9e70cd.css.gz rename to calc.75808e4b525444cf6e03.css.gz diff --git a/index.html b/index.html index a75b421f3..92c96a5cd 100644 --- a/index.html +++ b/index.html @@ -116,7 +116,7 @@ } } - +
@@ -125,6 +125,6 @@
- + \ No newline at end of file diff --git a/index.html.gz b/index.html.gz index 84cdd8a462ca78a56a5b1304c3a254570a822385..74302fb71766b3a6e855151b079eccb86a030c51 100644 GIT binary patch delta 1805 zcmV+o2lDuw4xJ8vABzY8000000t2mAZFAek5&lg5iZwkc$(8^}y~R~Tr;ehgZd1n- zsncXU{%`~qz)2tux;v0!66Lq|xjRs#Wm|4C;Yb8-Z}+*~y?x{9ldr!!yZrI>IhA%% zJ>NSG4?J09&-Z$#3$}vNQfR|=)^BYdJ?r1oOKY2mZ(6y3ob`W*{_`R_Q;SAeIj^`+ zsj4m45PEq&3Z82mCaSarRq4|tFhlA|6wzL< zccz-PmPKi4e=XD8&k0c2mUTgY3M?=I%PUj8PngDUJz)eonLWk$ttoX zlV!ayq;kK1__z8=R+XUF?YxpHP`;HZ*M`TmjA=if#Pl*JC%Di9B#UrztaOn8GQnX<3}d6{-p{pI z@T|X-ylRxTJFZ>H%$Bo^mryqHi!sSsS}Cf?z>z$Eo5qv=1DuRas%7Kc-iM0!V3)Az z(fgp1tH#h8)>JHX{UPolZuUi0jA*_lzU8#FvMxy4xV!!xJ+67ZQaUs5DDghzc;^^? zln7c{)~v@LQcTsAgx{@F)%&W5)|N`|IJOI@`v~(QkO9WELx)JyR2*5=re!1{*C!)? zVl(T1PoGV0@!zLXa}GX(%rQwWmX0fVC>A$$;V)>59MJ5#fnstY3Qio)2L53G_F(@b z;N3IwJii%vdVD)Q{sgk;`2g}l)G}vdKO%0V<#@&Od$xzt=DKs@hs8xMw2T^wtH>fN z=CN58?zSqWXZ@#>$>;Mte;DQq<9sbs9|+NZB@*$>@$X#n(@Y#4?57U}k=qN7(ud5s z|MYzrgam?IZQ11c9FrN78dHG)91~)6F`}Qr)01xo-zZg7`~nfVwlX!}`ARf+ zOEc161QzWU{_)E%v_#k|U!P9UUAU9{u&;IGQ>F5?l?u`HsdJG9Ec0ApJ0Q%pS|JbzhM*QY z*_vA8`ceqPxFg1zn@XgNi$}75#BuDC0^+MurX{UZJ%BNyHS7=WK;1#YT3$5%%u0#O zZ@a96PH}+vZ^^+t6Jo$!AE7`w2RISjOx|iRXynAI4$i=yA0Pt6Lt|GM8)(j$L1bvM z^{!ewwj#>52oKMP%35J=A&~++bGz&K-NIIF%2jlzzVR$=}=T z$Hqn6a5{<&im)9H{xlfHP~=>sSr58t5k^=0;VB2Cs)z%?TY%KJ$x;bGuzxEoy@^ z7ANFiE9a^RyKn`*y&ZS1F5@;`*VZpFm4?Gy_7(`aItxAagq|KB92|I5Kf#{R@nLi8 z*Co5EwnLaBLRm*zWU@6UG@W#l69y-Ly^`L_zikx2Oq**&hIt>w8$bE1i@A-!jw3z$ za1vU$L+v^HKE)5^x~Nf&NTpq$(BzBz`0>j95lV$4KDP0D)cviNxVR6|8z#pvDJE{z zzfIhal=$ECeWuNs!CVBEZ^qt6e2V%!db}#o&C*cm! vN^SWbA14U&*1hRh<`L`XNVAGDEIH(^Y@8;+<~=yU{o4N@8{e}h1P}lKMcID> delta 1804 zcmV+n2lM!y4xA2uABzY8000000t2mAZFAc;68>!eij6WoNp~VC*|FQWR@&6{wdwUz zPve_wCzB5lxg=pz1Py?a)zd zp6#E82c9glXZw4nbGCxgQfR|=+G}kdeb(F1OKY2mZ(6y3nD%~({_{LKQ}aexIjguw zsj4m45PESw<*WcDae`Lbil6<+mH3Gw(s){_YEhA>3Z7{kCaSarRq4|tFhlB56w&_P z-kEAvS{9|HgYo2;zEh>BYc}*RHl|_?4*Xq~($Fi_>XhkBWlaB6dQPC3c6P<7C9BAm zOqTWBkjnjk;@|2QSyh5A+F2!2pnNY=t__c95z|3Dj_E~CP!0-gL@vIkr7%=0OPMrQ z%UNqVqouSZ7^DG8E-OI%tXh~=lbTr}@u-=E_1-&4l6g2eR=P+4nc%P_hOtq!@pCQa zJnbzcFB_%pj%$}Pv*k471(c2aVnni*R*EVza3oKEC-Jy<4<}=jYS}oq_n_hi>=HIT zcpp@9)figAnu>+4-^V?`%|5S+A?imAGi@Viy2dRGna zHq+jJ%(a`(Zve&et;afe>APA`#CV|IQ^p&cxB-L3&>hxjpA7z0aKc zPtS)zNFd1V4f3{5-3c_1BQhgWBPtMpBSMVMhx99W_T=mSH%b*1KSxBatW3=hz7qA{ z(3JG&fknH8fBg0vZBaXjy@A_`Z#o{lfa~>}VcfK)90*;sbEs*Cj`wa9cq%YY=zdSi(as_j>tE6oG%5wP412TNIJYB{1zrC#w7^@C6QcuSJyav2xi zW06?9EKb!t*{-gPV=Y7JM z7h!uz@^P%d<{E=RXDHA}+L^aoi(K<vr;1S z+b-*%Qyd`vTXHbZgcxwwM<`Iv0Zs%rleZcS8ac77gEO$_2Z#W1-`FL_2AVNu5E+_m zy{p!at%$NM!u|81vR0T|NTdMI-0muVyRcR3GM3{#Hfa56xh_i!p~)40rC;xS^6#zp zW8)%jFd4=MMc5Adf9nrpC~_{+atC^`#_>R|GA-5u(~z(D+`JYjJ+3^8E$o$&wP#x2 z+93HI*Z+Hh>gx^*vUlCnseThT^k_Qu8IWTZ$Tnv`6b5x$RU`7>ff*)Z#w}g1=(HJ+ zD4GoEAK?hp<$fQljvKUp8~TC<{V)39z+y-zZ!uJHDNGp_YpwUYue+{L#+3?vY&hI4 zRH06tBk2F{DrHxGpx%p-_ZWbK2O5P24fGQdGova*gV)2V=7f&MpZG<^x!ta;7PY|{ z^Aqx~m2*{uUAO|@-i|w0mvNh}YwH)7O2c6;dkchIorNBILXQt04-Y-6pI}eu_(^l? z*Co5EwnLa9LRm*zWU@6UG#Pi369y-Lvy$G*FV_lSrp+}X!@P^)jURu~#oSt8$B~|W zFb*x;q3${RKE@B_x~Nf&NTpq!(D?IB{CMU53Z=pkAKLgc>i$tnT-=A~4U=P-6cab< z-zM%yN<2HB@WBy3Ie2<>e4IYzPseE%rv}5jpEA9)DVfoaPm}NicmH&zvX#qYj7%;l ztuT1L4AY~yeTA{OM>3oCT!BV{y~2ROwQuHI_GvF=E},s=function(){},t.unstable_forceFrameRate=function(e){0>e||125>>1,o=e[r];if(!(void 0!==o&&0T(a,n))void 0!==l&&0>T(l,a)?(e[r]=l,e[s]=n,r=s):(e[r]=a,e[i]=n,r=i);else{if(!(void 0!==l&&0>T(l,n)))break e;e[r]=l,e[s]=n,r=s}}}return t}return null}function T(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var M=[],x=[],L=1,R=null,A=3,D=!1,N=!1,P=!1;function I(e){for(var t=O(x);null!==t;){if(null===t.callback)k(x);else{if(!(t.startTime<=e))break;k(x),t.sortIndex=t.expirationTime,S(M,t)}t=O(x)}}function H(e){if(P=!1,I(e),!N)if(null!==O(M))N=!0,r(Y);else{var t=O(x);null!==t&&o(H,t.startTime-e)}}function Y(e,n){N=!1,P&&(P=!1,i()),D=!0;var r=A;try{for(I(n),R=O(M);null!==R&&(!(R.expirationTime>n)||e&&!a());){var s=R.callback;if(null!==s){R.callback=null,A=R.priorityLevel;var l=s(R.expirationTime<=n);n=t.unstable_now(),"function"==typeof l?R.callback=l:R===O(M)&&k(M),I(n)}else k(M);R=O(M)}if(null!==R)var u=!0;else{var c=O(x);null!==c&&o(H,c.startTime-n),u=!1}return u}finally{R=null,A=r,D=!1}}function F(e){switch(e){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var W=s;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){N||D||(N=!0,r(Y))},t.unstable_getCurrentPriorityLevel=function(){return A},t.unstable_getFirstCallbackNode=function(){return O(M)},t.unstable_next=function(e){switch(A){case 1:case 2:case 3:var t=3;break;default:t=A}var n=A;A=t;try{return e()}finally{A=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=W,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=A;A=e;try{return t()}finally{A=n}},t.unstable_scheduleCallback=function(e,n,a){var s=t.unstable_now();if("object"==typeof a&&null!==a){var l=a.delay;l="number"==typeof l&&0s?(e.sortIndex=l,S(x,e),null===O(M)&&e===O(x)&&(P?i():P=!0,o(H,l-s))):(e.sortIndex=a,S(M,e),N||D||(N=!0,r(Y))),e},t.unstable_shouldYield=function(){var e=t.unstable_now();I(e);var n=O(M);return n!==R&&null!==R&&null!==n&&null!==n.callback&&n.startTime<=e&&n.expirationTime=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n("./node_modules/setimmediate/setImmediate.js"),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n("./node_modules/webpack/buildin/global.js"))},"./node_modules/warning/warning.js":function(e,t,n){"use strict";var r=function(){};e.exports=r},"./node_modules/webpack/buildin/global.js":function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},"./node_modules/webpack/buildin/harmony-module.js":function(e,t){e.exports=function(e){if(!e.webpackPolyfill){var t=Object.create(e);t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),Object.defineProperty(t,"exports",{enumerable:!0}),t.webpackPolyfill=1}return t}},"./node_modules/webpack/buildin/module.js":function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},"./src/calc2/calculator.entry.tsx":function(e,t,n){"use strict";n.r(t);var r=n("./src/calc2/i18n.tsx"),o=n("./src/calc2/utils/groupUtils.ts"),i=n("./node_modules/immutable/dist/immutable.es.js"),a=function(e){return"@@redux-saga/"+e},s=a("CANCEL_PROMISE"),l=a("CHANNEL_END"),u=a("IO"),c=a("MATCH"),d=a("MULTICAST"),h=a("SAGA_ACTION"),f=a("SELF_CANCELLATION"),m=a("TASK"),p=a("TASK_CANCEL"),g=a("TERMINATE"),y=a("LOCATION"),b=n("./node_modules/@babel/runtime/helpers/esm/extends.js"),v=function(e){return null==e},_=function(e){return null!=e},w=function(e){return"function"==typeof e},E=function(e){return"string"==typeof e},j=Array.isArray,C=function(e){return e&&w(e.then)},S=function(e){return e&&w(e.next)&&w(e.throw)},O=function e(t){return t&&(E(t)||M(t)||w(t)||j(t)&&t.every(e))},k=function(e){return e&&w(e.take)&&w(e.close)},T=function(e){return w(e)&&e.hasOwnProperty("toString")},M=function(e){return Boolean(e)&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype};var x=function(e){return function(){return e}}(!0),L=function(){};var R=function(e){return e};"function"==typeof Symbol&&Symbol.asyncIterator&&Symbol.asyncIterator;var A=function(e,t){Object(b.a)(e,t),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(t).forEach((function(n){e[n]=t[n]}))};function D(e,t){var n=e.indexOf(t);n>=0&&e.splice(n,1)}function N(e){var t=!1;return function(){t||(t=!0,e())}}var P=function(e){throw e},I=function(e){return{value:e,done:!0}};function H(e,t,n){void 0===t&&(t=P),void 0===n&&(n="iterator");var r={meta:{name:n},next:e,throw:t,return:I,isSagaIterator:!0};return"undefined"!=typeof Symbol&&(r[Symbol.iterator]=function(){return r}),r}function Y(e,t){var n=t.sagaStack;console.error(e),console.error(n)}var F=function(e){return Array.apply(null,new Array(e))},W=function(e){return function(t){return e(Object.defineProperty(t,h,{value:!0}))}},B=function(e){return e===g},U=function(e){return e===p},z=function(e){return B(e)||U(e)};function V(e,t){var n=Object.keys(e),r=n.length;var o,i=0,a=j(e)?F(r):{},s={};return n.forEach((function(e){var n=function(n,s){o||(s||z(n)?(t.cancel(),t(n,s)):(a[e]=n,++i===r&&(o=!0,t(a))))};n.cancel=L,s[e]=n})),t.cancel=function(){o||(o=!0,n.forEach((function(e){return s[e].cancel()})))},s}function q(e){return{name:e.name||"anonymous",location:G(e)}}function G(e){return e[y]}function K(e,t){void 0===e&&(e=10);var n=new Array(e),r=0,o=0,i=0,a=function(t){n[o]=t,o=(o+1)%e,r++},s=function(){if(0!=r){var t=n[i];return n[i]=null,r--,i=(i+1)%e,t}},l=function(){for(var e=[];r;)e.push(s());return e};return{isEmpty:function(){return 0==r},put:function(s){var u;if(r1?t-1:0),r=1;r1?t-1:0),r=1;r2?n-2:0),o=2;oe.groupInfo.source===n&&e.groupInfo.id===r&&e.groupInfo.filename===o&&e.groupInfo.index===i);return a?Object.assign(Object.assign({},e),{current:Object.assign(Object.assign({},e.current),{group:a})}):(console.error("could not find group ",a),e)}case"GROUPS_LOAD_SUCCESS":{const{loadedGroups:n}=t;let r=e;for(const e of n)r=Object.assign(Object.assign({},r),{groups:r.groups.set(le(e),e)});return r}case"GROUP_SET_DRAFT":{let{draft:n}=t;n=Object.assign(Object.assign({},n),{isDraft:!0}),e=Object.assign(Object.assign({},e),{groups:e.groups.set(le(n),n),current:Object.assign(Object.assign({},e.current),{group:n})})}default:return e}}function le(e){const{source:t,id:n,filename:r,index:o}=e.groupInfo;return`${t}/${n}/${r}/${o}`}n("./node_modules/custom-event-polyfill/polyfill.js");var ue=n("./node_modules/react/index.js"),ce=n("./node_modules/react-dom/index.js"),de=n("./node_modules/react-hot-loader/index.js"),he=(n.p,n("./src/calc2/main.hot.tsx")),fe=n("./node_modules/redux/es/redux.js"),me=n("./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js");function pe(){var e={};return e.promise=new Promise((function(t,n){e.resolve=t,e.reject=n})),e}var ge=pe,ye=[],be=0;function ve(e){try{Ee(),e()}finally{je()}}function _e(e){ye.push(e),be||(Ee(),Ce())}function we(e){try{return Ee(),e()}finally{Ce()}}function Ee(){be++}function je(){be--}function Ce(){var e;for(je();!be&&void 0!==(e=ye.shift());)ve(e)}var Se=function(e){return function(t){return e.some((function(e){return xe(e)(t)}))}},Oe=function(e){return function(t){return e(t)}},ke=function(e){return function(t){return t.type===String(e)}},Te=function(e){return function(t){return t.type===e}},Me=function(){return x};function xe(e){var t="*"===e?Me:E(e)?ke:j(e)?Se:T(e)?ke:w(e)?Oe:M(e)?Te:null;if(null===t)throw new Error("invalid pattern: "+e);return t(e)}var Le={type:l},Re=function(e){return e&&e.type===l};function Ae(e){void 0===e&&(e=X());var t=!1,n=[];return{take:function(r){t&&e.isEmpty()?r(Le):e.isEmpty()?(n.push(r),r.cancel=function(){D(n,r)}):r(e.take())},put:function(r){if(!t){if(0===n.length)return e.put(r);n.shift()(r)}},flush:function(n){t&&e.isEmpty()?n(Le):n(e.flush())},close:function(){if(!t){t=!0;var e=n;n=[];for(var r=0,o=e.length;r2?h-2:0),m=2;m2?n-2:0),o=2;o1?t-1:0),r=1;r!(e.groupInfo.source!==t||e.groupInfo.id!==n||!r||"first"!==r&&r.filename!==e.groupInfo.filename||!r||"first"!==r&&r.index!==e.groupInfo.index));if(s){const{source:e,id:t,filename:n,index:r}=s.groupInfo,o={type:"GROUP_SET_CURRENT",source:e,id:t,filename:n,index:r};yield Q(o)}else try{if("local"!==t&&"gist"!==t)throw new Error(`unsupported source-type ${t}`);const e=yield ee(o.b,t,n,i,a),s={type:"GROUPS_LOAD_SUCCESS",loadedGroups:e};if(yield Q(s),void 0!==r&&e.length>0){const{source:t,id:n,filename:r}=e[0].groupInfo,o={type:"GROUP_SET_CURRENT",source:t,id:n,filename:r,index:0};yield Q(o)}}catch(e){console.error("could not fetch group",e),window.alert("Could not fetch group!\nDefault group loaded.\n"+e)}}))})),ce.render(ue.createElement(de.AppContainer,null,ue.createElement(he.a,{store:et})),document.getElementById("root"));{const e={type:"SET_LOCALE",locale:r.c.language};et.dispatch(e)}for(const e of function(){const e=[{maintainerGroup:Object(r.d)("calc.maintainer-groups.misc"),maintainer:"",source:"local",id:"uibk"},{maintainerGroup:Object(r.d)("calc.maintainer-groups.uibk"),maintainer:'mtschu',source:"gist",id:"2923a30a474fdcb46bee"},{maintainerGroup:Object(r.d)("calc.maintainer-groups.uibk"),maintainer:'Wolfgang Gassler',source:"gist",id:"7d1871f79a8bcb4788de"},{maintainerGroup:Object(r.d)("calc.maintainer-groups.uibk"),maintainer:'Michael Rampl',source:"gist",id:"b58108eacc9c5916726b2327789204ab"},{maintainerGroup:Object(r.d)("calc.maintainer-groups.uibk"),maintainer:'Michael Rampl',source:"gist",id:"963d8b886fb468d742c71d34ba0dbbed"},{maintainerGroup:Object(r.d)("calc.maintainer-groups.saarland"),maintainer:'Jens Dittrich',source:"gist",id:"41cf5ce652756d9331eec7562644e074"},{maintainerGroup:Object(r.d)("calc.maintainer-groups.saarland"),maintainer:'Jens Dittrich',source:"gist",id:"c306ecf21c6e6d175508d3ac6b4355e7"}];let t=!0;return e.map(({source:e,id:n,maintainer:r,maintainerGroup:o})=>{const i={type:"GROUPS_LOAD_REQUEST",source:e,id:n,setCurrent:t?"first":void 0,maintainer:r,maintainerGroup:o};return t=!1,i})}())et.dispatch(e)},"./src/calc2/components/calculator.scss":function(e,t,n){},"./src/calc2/components/dropdownList.tsx":function(e,t,n){"use strict";n.d(t,"a",(function(){return h}));var r=n("./node_modules/react/index.js"),o=n("./node_modules/reactstrap/lib/Dropdown.js"),i=n.n(o),a=n("./node_modules/reactstrap/lib/DropdownItem.js"),s=n.n(a),l=n("./node_modules/reactstrap/lib/DropdownMenu.js"),u=n.n(l),c=n("./node_modules/reactstrap/lib/DropdownToggle.js"),d=n.n(c);class h extends r.Component{constructor(e){super(e),this.id=`dropdown-${Math.random().toString(36).substr(2,10)}`,this.state={isOpen:!1},this.toggle=this.toggle.bind(this)}toggle(){this.setState({isOpen:!this.state.isOpen})}render(){const{label:e,elements:t,value:n,onChange:o,disabled:a=!1}=this.props,{isOpen:l}=this.state;return r.createElement(i.a,{isOpen:l,toggle:this.toggle},r.createElement(d.a,{color:"",disabled:a||0===t.length},e),r.createElement(u.a,null,t.map((e,t)=>"separator"===e.type?r.createElement(s.a,{key:t,divider:!0}):"header"===e.type?r.createElement(s.a,{key:t,header:!0},e.label):r.createElement(s.a,{key:t,onClick:t=>{t.preventDefault(),o&&o(e.value)},active:e.active||e.value===n},e.label))))}}},"./src/calc2/components/editorBase.tsx":function(e,t,n){"use strict";(function(e){n.d(t,"a",(function(){return O})),n.d(t,"b",(function(){return k})),n.d(t,"c",(function(){return T}));var r=n("./node_modules/@fortawesome/free-solid-svg-icons/index.es.js"),o=n("./node_modules/@fortawesome/react-fontawesome/index.es.js"),i=n("./src/calc2/components/dropdownList.tsx"),a=n("./src/calc2/components/toolbar.tsx"),s=n("./src/calc2/i18n.tsx"),l=n("./node_modules/classnames/index.js"),u=n("./node_modules/codemirror/lib/codemirror.js"),c=(n("./node_modules/codemirror/addon/hint/show-hint.js"),n("./src/db/exec/RANode.ts")),d=n("./src/db/translate/utils.ts"),h=n("./node_modules/react/index.js"),f=n("./node_modules/react-dom/index.js"),m=n("./node_modules/react-toastify/esm/react-toastify.js"),p=n("./node_modules/reactstrap/es/Button.js"),g=n("./node_modules/reactstrap/es/Modal.js"),y=n("./node_modules/reactstrap/es/ModalHeader.js"),b=n("./node_modules/reactstrap/es/ModalBody.js"),v=n("./node_modules/reactstrap/es/ModalFooter.js"),_=n("./node_modules/reactstrap/es/Input.js"),w=n("./node_modules/@handsontable/react/es/react-handsontable.js");n("./node_modules/codemirror/lib/codemirror.css"),n("./node_modules/codemirror/theme/eclipse.css"),n("./node_modules/codemirror/addon/hint/show-hint.css"),n("./node_modules/codemirror/addon/lint/lint.js"),n("./node_modules/codemirror/addon/lint/lint.css"),n("./node_modules/codemirror/addon/display/placeholder.js"),n("./node_modules/codemirror/addon/display/autorefresh.js"),n("./node_modules/codemirror/mode/sql/sql.js"),n("./node_modules/handsontable/dist/handsontable.full.css"),u.defineMode("relalg",(function(){const e=["pi","sigma","rho","tau","<-","->","intersect","union","except","/","-","\\\\","x","cross join","join","inner join","natural join","left join","right join","left outer join","right outer join","left semi join","right semi join","anti join","anti semi join","and","or","xor"],t=["π","σ","ρ","τ","←","→","∩","∪","÷","-","⨯","⨝","⟕","⟖","⟗","⋉","⋊","▷"],n=["<-","->",">=","<=","=","∧","∨","⊻","⊕","≠","=","¬",">","<","≥","≤"],r=(e,t,n,r="")=>{for(let o=0;o({inBlockComment:!1}),token:(o,i)=>i.inBlockComment?(o.match(/.*?\*\//,!0)?i.inBlockComment=!1:o.match(/.*/,!0),"comment"):o.match(/\/\*.*?\*\//,!0)?"comment":!i.inBlockComment&&o.match(/^\/\*.*/,!0)?(i.inBlockComment=!0,"comment"):i.inInlineRelation?(o.match(/.*?}/,!0)?i.inInlineRelation=!1:o.match(/.*/,!0),"inlineRelation"):o.match(/^{/,!0)?(i.inInlineRelation=!0,"inlineRelation"):o.match(/^--[\t ]/,!0)?(o.skipToEnd(),"comment"):o.match(/^\/\*.*?$/,!0)?"comment":r(o,t,!0)?"keyword math":r(o,e,!0,"([\\(\\)[\\]{\\}, \\.\\t]|$)")?"keyword":r(o,n,!0)?"operator math":o.match(/^\[[0-9]+]/,!0)?"attribute":o.match(/^[0-9]+(\.[0-9]+)?/,!0)?"number":o.match(/\^'[^']*'/i,!0)?"string":o.match(/\^[a-z]+\.[a-z]*/i,!0)?"qualified-column":o.match(/^[\(\)\[]\{},]/i,!0)?"bracket":o.match(/^[a-z][a-z0-9\.]*/i,!0)?"word":(o.next(),"else")}}));const E=e=>{const{editor:t}=e,{type:n,message:r,position:o}=e.alert,i={error:Object(s.d)("editor.alert-message-headers.error"),warning:Object(s.d)("editor.alert-message-headers.warning")}[n];return h.createElement("div",{className:l("alert ",{"alert-danger":"error"===n,"alert-warning":"warning"===n})},o?h.createElement("strong",null,i,": ",h.createElement("a",{onClick:e=>{if(t)return t.focus(),t.getDoc().setCursor(o),t.scrollIntoView(null,42),e.preventDefault(),!1;console.warn("editor not initialized yet")},href:"#"},Object(s.d)("editor.error-at-line-x",{line:o.line+1})),": ",r):h.createElement("strong",null,i,": ",r))};class j{constructor(){this.name="",this.type="",this.data=[]}}class C{constructor(){this.name="",this.attributes=[]}toString(e){let t="";t=!1===e?this.name+" = {\n":"{ ";const n=new Array;for(let e=0;e<1+this.attributes[0].data.length;e++)n.push("");return this.attributes.forEach((e,t)=>{t>0&&(n[0]+=", "),n[0]+=e.name,e.data.forEach((r,o)=>{t>0&&(n[o+1]+=", "),"number"===e.type?n[o+1]+=r:n[o+1]+="'"+r+"'"})}),t+=n.join("\n"),t+="\n}\n",t}fromTableData(e){if(null==e)return;const t=new Array;t.push([]),t.push([]),e.columns.forEach(e=>{t[0].push(e.name),t[1].push(e.type)}),e.rows.forEach(e=>{t.push(e)}),this.fromData(t)}toData(){const e=new Array;if(0===this.attributes.length)return[[]];for(let t=0;t<2+this.attributes[0].data.length;t++)e.push([]);return this.attributes.forEach(t=>{e[0].push(t.name),e[1].push(t.type),t.data.forEach((t,n)=>{e[n+2].push(t)})}),e}fromData(e){for(let t=0;t{const r=new Array,i=e.split(t);-1===o&&(o=i.length),i.length===o&&(i.forEach(e=>{r.push(e)}),n.push(r))}),this.fromData(n)}toCSV(e=";"){let t="";return this.toData().forEach(n=>{t+=n.join(e)+"\n"}),t}}const S="CodeMirror-table-edit-markers";class O extends h.Component{constructor(e){super(e);const t=Object.assign({theme:"eclipse",smartdent:!0,tabSize:2,indentWithTabs:!0,lineNumbers:!0,lineWrapping:!0,matchBrackets:!0,autoCloseBrackets:!0,smartIndent:!0,autofocus:!1,autoRefresh:!0,enableInlineRelationEditor:!0,gutters:["CodeMirror-lint-markers",S],mode:e.mode,viewportMargin:1/0,extraKeys:{"Shift-Tab":"indentLess","Ctrl-Enter":e=>{this.exec(!1)},"Shift-Ctrl-Enter":e=>{const{editor:t}=this.state;t&&t.getDoc().somethingSelected()&&this.exec(!0)},"Ctrl-S":e=>{this.downloadEditorText()},"Ctrl-Space":e=>{u.showHint(e,e=>this.genericHint(e),{closeOnUnfocus:!0})}},placeholder:Object(s.d)("editor.codemirror-placeholder"),textChange:null},e.codeMirrorOptions);this.hotTableSettings={colHeaders:!1,rowHeaders:function(e){return 0===e?Object(s.d)("calc.editors.ra.inline-editor.row-name"):1===e?Object(s.d)("calc.editors.ra.inline-editor.row-type"):e-1},height:function(){return.7*document.body.clientHeight},fixedRowsTop:2,minRows:2,minCols:1,minSpareRows:1,minSpareCols:1,colWidths:"100px",contextMenu:!0,cells:function(e,t){return 1===e?{type:"dropdown",source:["number","string","date"]}:{}}},this.state={editor:null,codeMirrorOptions:t,history:[],isSelectionSelected:!1,execSuccessful:!1,execErrors:[],isExecutionDisabled:!1,execResult:null,modal:!1,inlineRelationModal:!1,relationEditorName:"",replSelStart:null,replSelEnd:null},this.toggle=this.toggle.bind(this),this.inlineRelationEditorOk=this.inlineRelationEditorOk.bind(this),this.toggleInlineRelationEditor=this.toggleInlineRelationEditor.bind(this),this.inlineRelationEditorClose=this.inlineRelationEditorClose.bind(this),this.inlineRelationEditorUpload=this.inlineRelationEditorUpload.bind(this),this.inlineRelationEditorDownload=this.inlineRelationEditorDownload.bind(this),this.hinterCache={hints:[],hintsFromLinter:[],changed:!0},this.linter=this.linter.bind(this),this.exec=this.exec.bind(this),this.applyHistory=this.applyHistory.bind(this),this.downloadEditorText=this.downloadEditorText.bind(this),this.uploadCSVRef=h.createRef()}getInlineRelationData(){return this.hotTableSettings.data}setInlineRelationData(e){this.hotTableSettings.datta=e}inlineRelationEditorOpen(e){const t=new C,{editor:n}=this.state;if(n){let r=n.getDoc().getCursor(),o=n.getDoc().getCursor();e?(t.name=e.assignmentName,t.fromTableData(e.content),r=u.Pos(e.line-1,0),o=u.Pos(e.end.line,e.end.column)):(t.attributes.push(new j),t.attributes.push(new j)),this.setState({inlineRelationModal:!0,relationEditorName:t.name,replSelStart:r,replSelEnd:o},()=>{this.hotTableSettings.data=t.toData()})}}inlineRelationEditorOk(){const e=new C;e.name=this.state.relationEditorName,e.fromData(this.getInlineRelationData());const{editor:t,replSelStart:n,replSelEnd:r}=this.state;t&&t.getDoc().replaceRange(e.toString("relalg"===this.props.tab),n,r),this.inlineRelationEditorClose()}inlineRelationEditorClose(){this.setState({inlineRelationModal:!1})}inlineRelationEditorUpload(e){const t=e.target.files;if(t.length>0){const e=new FileReader;e.onload=e=>{const n=e.target.result,r=new C;r.fromCSV(n),r.name=t[0].name.replace(".csv",""),this.setInlineRelationData(r.toData())},e.readAsText(t[0])}}inlineRelationEditorDownload(){const e=new C;e.fromData(this.getInlineRelationData());const t=e.toCSV(),n=(document.createElement("a"),document.createElement("a"));n.href=window.URL.createObjectURL(new Blob([t],{type:"text/csv"})),n.download=this.state.relationEditorName+".csv",n.click()}componentDidMount(){const e=Object(f.findDOMNode)(this).querySelector("textarea");if(!e)throw new Error("could not fid textarea");const t=u.fromTextArea(e,this.state.codeMirrorOptions);this.setState({editor:t,relationEditorName:""}),null!=this.props.linterFunction&&t.setOption("lint",{getAnnotations:this.linter}),t.on("cursorActivity",e=>{this.setState({isSelectionSelected:e.getDoc().somethingSelected()})}),t.on("change",e=>{this.props.textChange(e)})}render(){const{execErrors:e,isSelectionSelected:t,editor:n,history:u,execSuccessful:c,isExecutionDisabled:d,execResult:f}=this.state,{toolbar:m,disableHistory:j=!1,execButtonLabel:C}=this.props;return h.createElement("div",null,h.createElement("div",{className:"editor-base"},h.createElement(a.a,{groups:m}),h.createElement("textarea",null),h.createElement("div",{className:"exec-errors"},e.map((e,t)=>h.createElement(E,{key:t,alert:e,editor:n}))),h.createElement("div",{className:"input-buttons"},h.createElement("button",{type:"button",disabled:d,className:l("btn btn-primary exec-button selection",{"selection-selected":t,"btn-danger":e.length>0,"btn-success":c,disabled:d}),onClick:()=>{n?this.exec(n.getDoc().somethingSelected()):console.warn("editor not initialized yet")}},C?h.createElement("span",null,h.createElement(o.a,{icon:r.o})," ",h.createElement(s.b,{id:C})):h.createElement(h.Fragment,null,h.createElement("span",{className:"glyphicon glyphicon-play"})," ",h.createElement("span",{className:"query"},h.createElement(o.a,{icon:r.n})," ",h.createElement(s.b,{id:"calc.editors.ra.button-execute-query"})),h.createElement("span",{className:"selection"},h.createElement(s.b,{id:"calc.editors.ra.button-execute-selection"})))),h.createElement("div",{style:{float:"right"}},h.createElement(p.a,{color:"Link",type:"button",className:"hideOnSM",onClick:this.downloadEditorText},h.createElement(o.a,{icon:r.h})," ",h.createElement("span",{className:"hideOnSM"},h.createElement(s.b,{id:"calc.editors.ra.button-download"}))),j?null:h.createElement("div",{className:"btn-group history-container"},h.createElement(i.a,{label:h.createElement("span",null,h.createElement(o.a,{icon:r.k})," ",h.createElement("span",{className:"hideOnSM"},h.createElement(s.b,{id:"calc.editors.button-history"}))),elements:u.map(e=>({label:h.createElement(h.Fragment,null,h.createElement("small",{className:"muted text-muted"},e.time.toLocaleTimeString()),h.createElement("div",null,e.code)),value:e})),onChange:this.applyHistory})))),h.createElement("div",{className:"exec-result"},f),h.createElement(g.a,{isOpen:this.state.modal,toggle:this.toggle,className:"showOnSM"},h.createElement(y.a,{toggle:this.toggle},Object(s.d)("calc.result.modal.title")),h.createElement(b.a,null,h.createElement("div",null,f)),h.createElement(v.a,null,h.createElement("span",null),h.createElement(p.a,{color:"secondary",onClick:this.toggle},Object(s.d)("calc.result.modal.close")))),h.createElement(g.a,{isOpen:this.state.inlineRelationModal,toggle:this.toggleInlineRelationEditor},h.createElement(y.a,{toggle:this.toggleInlineRelationEditor},Object(s.d)("calc.editors.ra.inline-editor.title")),h.createElement(b.a,null,h.createElement("div",null,"group"===this.props.tab?h.createElement("div",null,h.createElement(_.a,{placeholder:Object(s.d)("calc.editors.ra.inline-editor.input-relation-name"),value:this.state.relationEditorName,onChange:e=>{this.setState({relationEditorName:e.target.value})}}),h.createElement("br",null)):null,h.createElement(w.a,{settings:this.hotTableSettings,licenseKey:"non-commercial-and-evaluation"}))),h.createElement(v.a,null,h.createElement(p.a,{color:"light",onClick:this.inlineRelationEditorDownload},h.createElement(o.a,{icon:r.h})," ",Object(s.d)("calc.editors.ra.inline-editor.button-download-csv")),h.createElement(p.a,{color:"light",onClick:()=>{var e;null===(e=this.uploadCSVRef.current)||void 0===e||e.click()}},h.createElement(o.a,{icon:r.s})," ",Object(s.d)("calc.editors.ra.inline-editor.button-upload-csv")),h.createElement("input",{className:"hidden",ref:this.uploadCSVRef,onChange:this.inlineRelationEditorUpload,type:"file"}),h.createElement("span",{className:"flexSpan"}),h.createElement(p.a,{color:"primary",onClick:this.inlineRelationEditorOk},h.createElement(o.a,{icon:r.e})," ",Object(s.d)("calc.editors.ra.inline-editor.button-ok")),h.createElement(p.a,{color:"secondary",onClick:this.inlineRelationEditorClose},h.createElement(o.a,{icon:r.r})," ",Object(s.d)("calc.editors.ra.inline-editor.button-cancel"))))))}isMobile(){return window.innerWidth<=992}toggleInlineRelationEditor(){this.setState({inlineRelationModal:!this.state.inlineRelationModal})}toggle(){this.isMobile()&&this.setState({modal:!this.state.modal})}applyHistory(e){this.replaceAll(e.code)}forceLinterRun(){const{editor:e}=this.state;if(!e)return void console.warn("editor not initialized yet");const t=e.getValue();e.setValue(""),e.setValue(t)}historyAddEntry(e){const{historyMaxEntries:t=10,historyMaxLabelLength:n=20}=this.props,r={time:new Date,label:e.length>n?e.substr(0,n-4)+" ...":e,code:e};this.setState({history:[r,...this.state.history].slice(-t)})}clearExecutionAlerts(){this.state.execErrors.splice(0,this.state.execErrors.length),m.b.dismiss()}addExecutionWarning(e,t){this._addExecutionAlert(e,t,"warning"),this.isMobile()&&m.b.warn(e,{className:"fancyToastWarning"})}addExecutionError(e,t){this._addExecutionAlert(e,t,"error"),this.isMobile()&&m.b.error(e,{className:"fancyToastError"})}_addExecutionAlert(e,t,n){this.isMobile();const{editor:r}=this.state,o={type:n,message:e,position:t},i=this.state.execErrors;i.push(o),this.setState({execErrors:i})}setText(e,t){const{editor:n}=this.state;n?("selection"===t?n.getDoc().replaceSelection(e,"end"):n.setValue(e),this.clearExecutionAlerts(),this.setState({execSuccessful:!1})):console.warn("editor not initialized yet")}getText(){const{editor:e}=this.state;if(e)return e.getValue();console.warn("editor not initialized yet")}focus(){const{editor:e}=this.state;e?e.focus():console.warn("editor not initialized yet")}refresh(){const{editor:e}=this.state;e?e.refresh():console.warn("editor not initialized yet")}downloadEditorText(){let e="query";const{editor:t}=this.state;if(!t)return void console.warn("editor not initialized yet");switch(t.getOption("mode")){case"sql":case"text/x-mysql":e+=".sql";break;case"ra":default:e+=".txt"}((e,t)=>{const n=document.createElement("a");n.href=window.URL.createObjectURL(new Blob([t],{type:"text/plain"})),n.download=e,n.click()})(e,t.getValue())}resetHinter(){this.hinterCache={hints:[],hintsFromLinter:[],changed:!0}}linter(t){const{editor:n}=this.state;if(!n)return console.warn("editor not initialized yet"),[];if(0===t.length||!this.props.linterFunction)return[];try{const e=this.props.linterFunction(this,n,t);return 0===e.length&&0===this.hinterCache.hintsFromLinter.length||(this.hinterCache.hintsFromLinter=e,this.hinterCache.changed=!0),[]}catch(t){const r=[];console.log(t);const o=O._generateErrorFromException(t,0,0),i=e("").append(o.message).text();if(!o.codemirrorPositions)return this.clearExecutionAlerts(),this.addExecutionError(i),[];const a=o.codemirrorPositions.from;let s=o.codemirrorPositions.to;const l=n.getTokenAt({line:a.line,ch:a.ch+1},!0),u=n.getDoc().getRange(a,s);return void 0!==l.string&&l.string.length>u.length&&(s=n.getDoc().posFromIndex(n.getDoc().indexFromPos(a)+l.string.length)),r.push({from:a,to:s,message:i,severity:"error"}),this.props.enableInlineRelationEditor&&this.clearInlineRelationMarkers(),r}}genericHint(e){const{getHintsFunction:t}=this.props,n=e.getDoc().getCursor(),r=e.getTokenAt(n),o=(e,t="unknown")=>({text:e,displayText:e,className:`hint-${t}`});let i=[];if(!0===this.hinterCache.changed){const e={},n=t?t():[];for(let t=0;t0)for(let e=0;es.length&&0===t.indexOf(s)&&a.push(i[e])}else a=i;return{list:a,from:u.Pos(n.line,r.start),to:u.Pos(n.line,r.end)}}exec(e){const{editor:t}=this.state;if(!t)throw new Error("editor not initialized yet");this.setState({execResult:h.createElement("div",{className:"spinner"},h.createElement("div",{className:"rect1"}),h.createElement("div",{className:"rect2"}),h.createElement("div",{className:"rect3"}),h.createElement("div",{className:"rect4"}),h.createElement("div",{className:"rect5"}))},()=>{this.clearExecutionAlerts();let n="",r={line:0,ch:0};!0!==e?n=t.getValue():(n=t.getDoc().getSelection(),r=t.getDoc().getCursor("from")),0===n.length&&(this.clearExecutionAlerts(),this.addExecutionError(Object(s.d)("editor.error-no-query-found"))),this.clearExecutionAlerts();try{const{result:e}=this.props.execFunction(this,n,r);this.setState({execResult:e});const t=new CustomEvent("editor.execSuccessful",{detail:{editor:this}});return document.dispatchEvent(t),this.toggle(),!0}catch(e){console.error(e,e.stack);const t=O._generateErrorFromException(e,r.line,r.ch);this.addExecutionError(t.message,t.codemirrorPositions?t.codemirrorPositions.from:void 0),this.props.enableInlineRelationEditor&&this.clearInlineRelationMarkers()}})}static _generateErrorFromException(e,t,n){let r=void 0!==e.message?e.message:e;r=r.replace(/(\\(u|x)[0-9A-F]+)/g,(e,t)=>`${String.fromCharCode(parseInt(t.substr(2),16))}`);let o=null;void 0!==e.codeInfo&&void 0!==e.codeInfo.location?o=e.codeInfo.location:void 0!==e.location&&(o=e.location);let i=null;return null!==o&&(i={from:{line:o.start.line+(t||0)-1,ch:o.start.column+(n||0)-1},to:{line:o.end.line+(t||0)-1,ch:o.end.column+(n||0)-1}}),{message:r,location:o,codemirrorPositions:i}}static buildTranslatedPegJsMessage(e,t){return null!==e&&function(e){let t=1;for(e.sort((e,t)=>e.descriptiont.description?1:0);t1?`${n.slice(0,-1).join(", ")} ${Object(s.d)("editor.pegjs-error.or")} ${n[e.length-1]}`:n[0],o=t?`"${function(e){function t(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+t(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+t(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+t(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+t(e)}))}(t)}"`:Object(s.d)("editor.pegjs-error.end-of-input");return Object(s.d)("editor.pegjs-error.expected-found",{expected:r,found:o})}(e,t)}setExecutionDisabled(e){this.setState({isExecutionDisabled:e})}replaceText(e,t){const n="string"==typeof e.label?e.label:"";this.replaceSelection(n,t)}replaceSelection(e,t){this.setText(t||e,"selection"),this.focus()}replaceAll(e,t){this.setText(t||e,"all"),this.focus()}setReadOnly(t){const{editor:n}=this.state;if(!n)throw new Error("editor not initialized yet");const r=e(n.getWrapperElement());!1===t?(n.setOption("readOnly",!1),r.removeClass("readonly")):(n.setOption("readOnly","nocursor"),r.addClass("readonly"))}addInlineRelationMarkers(e){const{editor:t}=this.state;if(!t)return void console.warn("editor not initialized yet");const n=function(e){const t=[];return Object(d.a)(e,e=>{const n=e;if(n&&"table"===n.type){const e={name:n.name,line:n.codeInfo.location.start.line-1,column:n.codeInfo.location.start.column-1,length:n.codeInfo.text.length,assignmentName:n.assignmentName?n.assignmentName:"",content:{columns:n.columns,rows:n.rows},start:n.codeInfo.location.start,end:n.codeInfo.location.end};t.push(e)}}),t}(e);this.clearInlineRelationMarkers();for(let e=0;e{this.inlineRelationEditorOpen(n[e])},f.render(h.createElement(o.a,{icon:r.q}),i,()=>{i.style.marginLeft="-15px",t.setGutterMarker(n[e].line++,S,i)})}}clearInlineRelationMarkers(){const{editor:e}=this.state;e?e.clearGutter(S):console.warn("editor not initialized yet")}}function k(e){const t=[],n=function(e){const r=e.getSchema();for(let e=0;e-1&&!this.props.autohide&&(this._hideTimeout&&this.clearHideTimeout(),this.state.isOpen&&!this.props.isOpen&&this.toggle())},n.onMouseLeaveTooltipContent=function(e){this.props.trigger.indexOf("hover")>-1&&!this.props.autohide&&(this._showTimeout&&this.clearShowTimeout(),e.persist(),this._hideTimeout=setTimeout(this.hide.bind(this,e),this.getDelay("hide")))},n.onEscKeyDown=function(e){"Escape"===e.key&&this.hide(e)},n.getRef=function(e){var t=this.props.innerRef;t&&("function"==typeof t?t(e):"object"==typeof t&&(t.current=e)),this._popover=e},n.getDelay=function(e){var t=this.props.delay;return"object"==typeof t?isNaN(t[e])?S[e]:t[e]:t},n.show=function(e){if(!this.props.isOpen){if(this.clearShowTimeout(),this.currentTargetElement=e?e.currentTarget||e.target:null,e&&e.composedPath&&"function"==typeof e.composedPath){var t=e.composedPath();this.currentTargetElement=t&&t[0]||this.currentTargetElement}this.toggle(e)}},n.showWithDelay=function(e){this._hideTimeout&&this.clearHideTimeout(),this._showTimeout=setTimeout(this.show.bind(this,e),this.getDelay("show"))},n.hide=function(e){this.props.isOpen&&(this.clearHideTimeout(),this.currentTargetElement=null,this.toggle(e))},n.hideWithDelay=function(e){this._showTimeout&&this.clearShowTimeout(),this._hideTimeout=setTimeout(this.hide.bind(this,e),this.getDelay("hide"))},n.clearShowTimeout=function(){clearTimeout(this._showTimeout),this._showTimeout=void 0},n.clearHideTimeout=function(){clearTimeout(this._hideTimeout),this._hideTimeout=void 0},n.handleDocumentClick=function(e){var t=this.props.trigger.split(" ");t.indexOf("legacy")>-1&&(this.props.isOpen||T(e.target,this._targets))?(this._hideTimeout&&this.clearHideTimeout(),this.props.isOpen&&!k(e.target,this._popover)?this.hideWithDelay(e):this.props.isOpen||this.showWithDelay(e)):t.indexOf("click")>-1&&T(e.target,this._targets)&&(this._hideTimeout&&this.clearHideTimeout(),this.props.isOpen?this.hideWithDelay(e):this.showWithDelay(e))},n.addEventOnTargets=function(e,t,n){this._targets.forEach((function(r){r.addEventListener(e,t,n)}))},n.removeEventOnTargets=function(e,t,n){this._targets.forEach((function(r){r.removeEventListener(e,t,n)}))},n.addTargetEvents=function(){if(this.props.trigger){var e=this.props.trigger.split(" ");-1===e.indexOf("manual")&&((e.indexOf("click")>-1||e.indexOf("legacy")>-1)&&document.addEventListener("click",this.handleDocumentClick,!0),this._targets&&this._targets.length&&(e.indexOf("hover")>-1&&(this.addEventOnTargets("mouseover",this.showWithDelay,!0),this.addEventOnTargets("mouseout",this.hideWithDelay,!0)),e.indexOf("focus")>-1&&(this.addEventOnTargets("focusin",this.show,!0),this.addEventOnTargets("focusout",this.hide,!0)),this.addEventOnTargets("keydown",this.onEscKeyDown,!0)))}},n.removeTargetEvents=function(){this._targets&&(this.removeEventOnTargets("mouseover",this.showWithDelay,!0),this.removeEventOnTargets("mouseout",this.hideWithDelay,!0),this.removeEventOnTargets("keydown",this.onEscKeyDown,!0),this.removeEventOnTargets("focusin",this.show,!0),this.removeEventOnTargets("focusout",this.hide,!0)),document.removeEventListener("click",this.handleDocumentClick,!0)},n.updateTarget=function(){var e=Object(b.i)(this.props.target,!0);e!==this._targets&&(this.removeTargetEvents(),this._targets=e?Array.from(e):[],this.currentTargetElement=this.currentTargetElement||this._targets[0],this.addTargetEvents())},n.toggle=function(e){return this.props.disabled||!this._isMounted?e&&e.preventDefault():this.props.toggle(e)},n.render=function(){if(!this.props.isOpen)return null;this.updateTarget();var e=this.props,t=e.className,n=e.cssModule,r=e.innerClassName,o=e.isOpen,s=e.hideArrow,l=e.boundariesElement,u=e.placement,c=e.placementPrefix,d=e.arrowClassName,h=e.popperClassName,f=e.container,m=e.modifiers,p=e.offset,g=e.fade,y=e.flip,v=Object(b.l)(this.props,Object.keys(C)),_=Object(b.k)(h,n),w=Object(b.k)(r,n);return i.a.createElement(j,{className:t,target:this.currentTargetElement||this._targets[0],isOpen:o,hideArrow:s,boundariesElement:l,placement:u,placementPrefix:c,arrowClassName:d,popperClassName:_,container:f,modifiers:m,offset:p,cssModule:n,fade:g,flip:y},i.a.createElement("div",Object(a.a)({},v,{ref:this.getRef,className:w,role:"tooltip",onMouseOver:this.onMouseOverTooltipContent,onMouseLeave:this.onMouseLeaveTooltipContent,onKeyDown:this.onEscKeyDown})))},t}(i.a.Component);M.propTypes=C,M.defaultProps=O;var x=M,L=function(e){var t=l()("popover","show",e.popperClassName),n=l()("popover-inner",e.innerClassName);return i.a.createElement(x,Object(a.a)({},e,{popperClassName:t,innerClassName:n}))};L.propTypes=C,L.defaultProps={placement:"right",placementPrefix:"bs-popover",trigger:"click"};var R=L,A={tag:b.o,className:h.a.string,cssModule:h.a.object},D=function(e){var t=e.className,n=e.cssModule,r=e.tag,o=Object(f.a)(e,["className","cssModule","tag"]),s=Object(b.k)(l()(t,"popover-header"),n);return i.a.createElement(r,Object(a.a)({},o,{className:s}))};D.propTypes=A,D.defaultProps={tag:"h3"};var N=D,P={tag:b.o,className:h.a.string,cssModule:h.a.object},I=function(e){var t=e.className,n=e.cssModule,r=e.tag,o=Object(f.a)(e,["className","cssModule","tag"]),s=Object(b.k)(l()(t,"popover-body"),n);return i.a.createElement(r,Object(a.a)({},o,{className:s}))};I.propTypes=P,I.defaultProps={tag:"div"};var H=I;class Y extends o.Component{constructor(e){super(e),this.body=Object(r.a)((e,t)=>!1===t?null:"function"==typeof e?e():e),this.state={id:"popWrapper_"+Math.random().toString(36).substr(2),isOpen:!1},this.hoverOpen=this.hoverOpen.bind(this),this.hoverClose=this.hoverClose.bind(this),this.handleClick=this.handleClick.bind(this),this.open=this.open.bind(this),this.close=this.close.bind(this)}componentWillUnmount(){this.close()}open(){this.setState({isOpen:!0}),document.addEventListener("click",this.close)}close(e){if(e){const{target:t}=e;if(t instanceof Element&&null!==t.closest(".popover__inside"))return}this.setState({isOpen:!1}),document.removeEventListener("click",this.close)}hoverOpen(){const{trigger:e}=this.props;("hover"===e||Array.isArray(e)&&e.includes("hover"))&&this.open()}hoverClose(){const{trigger:e}=this.props;("hover"===e||Array.isArray(e)&&e.includes("hover"))&&this.close()}handleClick(e){const{trigger:t,onClick:n}=this.props;if(n&&n(e),"click"===t||Array.isArray(t)&&t.includes("click")){const{isOpen:e}=this.state;e?this.close():this.open()}}render(){const{id:e,isOpen:t}=this.state,{title:n,className:r=""}=this.props,i=this.body(this.props.body,t);return o.createElement(o.Fragment,null,o.createElement("div",{onMouseEnter:this.hoverOpen,onMouseLeave:this.hoverClose,onFocus:this.hoverOpen,onBlur:this.hoverClose,onClick:this.handleClick,id:e,className:`popover__outside ${r}`},o.Children.only(this.props.children),o.createElement(R,{target:`#${e}`,isOpen:t,className:`popover__inside ${r}`},o.createElement(N,null,n),o.createElement(H,null,i))))}}},"./src/calc2/components/raTree.scss":function(e,t,n){},"./src/calc2/components/result.scss":function(e,t,n){},"./src/calc2/components/toolbar.scss":function(e,t,n){},"./src/calc2/components/toolbar.tsx":function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var r=n("./src/calc2/components/dropdownList.tsx"),o=n("./src/calc2/components/popover.tsx"),i=n("./src/calc2/i18n.tsx"),a=n("./node_modules/react/index.js");n("./src/calc2/components/toolbar.scss");class s extends a.Component{render(){const{groups:e}=this.props;return a.createElement("div",{className:"toolbar codemirror-toolbar"},e.map((e,t)=>e.items.map((e,t)=>a.createElement(o.a,{key:t,trigger:["hover","focus"],placement:"dropdown"===e.type?"top":"bottom",title:e.tooltipTitle?String(Object(i.d)(e.tooltipTitle)):"",body:a.createElement(i.b,{id:e.tooltip,html:!0}),className:("dropdown"===e.type?"toolbar__popover__dropdown":"toolbar__popover")+" "+(void 0===e.className?"":e.className)},"dropdown"===e.type?a.createElement(r.a,{label:e.label,elements:e.elements,onChange:e.onChange,value:e.value}):a.createElement("span",{onClick:t=>{t.preventDefault(),t.stopPropagation(),e.onClick(e)}},e.label)))))}}},"./src/calc2/data/uibk.txt":function(e,t,n){"use strict";n.r(t),t.default="group: UIBK - R, S, T\ndescription: Tables from and for the lecture [Databases: Foundations, Data Models and System Concepts - University of Innsbruck](http://dbis-informatik.uibk.ac.at/249-0-VO-Datenbanksysteme.html) chapter 3 \ncategory@de:Universität Innsbruck\ncategory@en:University of Innsbruck\n\nR = {\na, b, c\n\n1, 'a', 'd'\n3, 'c', 'c'\n4, 'd', 'f'\n5, 'd', 'b'\n6, 'e', 'f'\n}\n\nS = {\nb, d\n\n'a', 100\n'b', 300\n'c', 400\n'd', 200\n'e', 150\n}\n\nT = {\nb, d\n\n'a', 100\n'd', 200\n'f', 400\n'g', 120\n}\n\ngroup: Kemper Datenbanksysteme\ndescription: Source: [Alfons Kemper, André Eickler: Datenbanksysteme: Eine Einführung 8. Auflage](http://www3.in.tum.de/teaching/bookDBMSeinf/), Seite 84, Abbildung 3.8\n\nProfessoren = {\nPersNr:number\tName:string\tRang:string\tRaum:number\n2125\tSokrates\tC4\t226\n2126\tRussel\tC4\t232\n2127\tKopernikus\tC3\t310\n2133\tPopper\tC3\t52\n2134\tAugustinus\tC3\t309\n2136\tCurie\tC4\t36\n2137\tKant\tC4\t7\n}\n\nStudenten = {\nMatrNr:number\tName:string\tSemester:number\n24002\tXenokrates\t18\n25403\tJonas\t12\n26120\tFichte\t10\n26830\tAristoxenos\t8\n27550\tSchopenhauer\t6\n28106\tCarnap\t3\n29120\tTheophrastos\t2\n29555\tFeuerbach\t2\n}\n\n\nVorlesungen = {\nVorlNr:number\tTitel:string\tSWS:number\tgelesenVon:number\n5001\tGrundzuege\t4\t2137\n5041\tEthik\t4\t2125\n5043\tErkenntnistheorie\t3\t2126\n5049\tMaeeutik\t2\t2125\n4052\tLogik\t4\t2125\n5052\tWissenschaftstheorie\t3\t2126\n5216\tBioethik\t2\t2126\n5259\t'Der Wiener Kreis'\t2\t2133\n5022\t'Glaube und wissen'\t2\t2134\n4630\t'Glaube und wissen'\t4\t2137\n}\n\nvoraussetzen = {\nVorgaenger:number\tNachfolger:number\n5001\t5041\n5001\t5043\n5001\t5049\n5041\t5216\n5043\t5052\n5041\t5052\n5052\t5259\n}\n\nhoeren = {\nMatrNr:number\tVorlNr:number\n26120\t5001\n27550\t5001\n27550\t4052\n28106\t5041\n28106\t5052\n28106\t5216\n28106\t5259\n29120\t5001\n29120\t5041\n29120\t5049\n29555\t5022\n25403\t5022\n29555\t5001\n}\n\nAssistenten = {\nPersNr:number\tName:string\tFachgebiet:string\tBoss:number\n3002\tPlaton\tIdeenlehre\t2125\n3003\tAristoteles\tSyllogistik\t2125\n3004\tWittgenstein\tSprachtheorie\t2126\n3005\tRhetikus\tPlanetenbewegung\t2127\n3006\tNewton\t'Keplersche Gesetze'\t2127\n3007\tSpinoza\t'Gott und Natur'\t2134\n}\n\npruefen = {\nMatrNr:number\tVorlNr:number\tPersNr:number\tNote:number\n28106\t5001\t2126\t1\n25403\t5041\t2125\t2\n27550\t4630\t2137\t2\n}\n\n\n\ngroup: UIBK - KursDB\ndescription: Tables from and for the lecture [Databases: Foundations, Data Models and System Concepts - University of Innsbruck](http://dbis-informatik.uibk.ac.at/249-0-VO-Datenbanksysteme.html) chapter 3 \n\nKurs = {\nKursNr, Titel\n\nG08, 'Grundlagen I'\nG10, 'Grundlagen II'\nP13, 'C-Programmierung'\nI09, Datenbanken\n}\n\nKursleiter = {\nPersNr, Name, Gehalt\n\n27183, 'Meier, I.', 4300.50\n29594, 'Schulze, H.', 3890.20\n38197, 'Huber, L.', 4200.10\n43325, 'Müller, K.', 3400.80\n}\n\nVorauss = {\nVorNr, KursNr\nG08, P13\nG10, P13\nG08, I09\nG10, I09\nP13, I09\n}\n\nFuehrt_durch = {\nAngNr\tKursNr\tPersNr\n1\tG08\t38197\n2\tG08\t38197\n1\tG10\t43325\n2\tG10\t29594\n1\tP13\t27183\n2\tP13\t27183\n1\tI09\t29594\n2\tI09\t29594\n3\tI09\t29594\n}\n\nTeilnehmer = {\nTnNr, Name, Ort \n143, 'Schmidt, M.', Bremen \n145, 'Huber, Chr.', Augsburg \n146, 'Abele, I.', Senden \n149, 'Kircher, B.', Bochum \n155, 'Meier, W.', Stuttgart \n171, 'Möller, H.', Innsbruck \n173, 'Schulze, B.', Stuttgart \n177, 'Mons, F.', Essen \n185, 'Meier, K.', Heidelberg \n187, 'Karstens, L.', Hamburg \n194, 'Gerstner, M.', Innsbruck \n}\n\nNimmt_teil = {\nAngNr\tKursNr\tTnNr\n2\tG08\t143\n2\tP13\t143\n1\tG08\t145\n1\tP13\t146\n1\tI09\t146\n2\tP13\t149\n1\tI09\t155\n1\tI09\t171\n1\tI09\t173\n2\tP13\t177\n1\tI09\t185\n2\tI09\t187\n1\tP13\t194\n}\n\nAngebot = {\nAngNr\tKursNr\tDatum\tOrt\n1\tG08\t2000-10-13\t'München'\n2\tG08\t2000-11-24\tBremen\n1\tG10\t2000-12-01\t'München'\n2\tG10\t2001-02-15\tHamburg\n1\tP13\t2001-05-28\tInnsbruck\n2\tP13\t2001-07-01\tEssen\n1\tI09\t2001-03-27\tStuttgart\n2\tI09\t2001-04-23\tHamburg\n3\tI09\t2001-05-29\t'München'\n}\n\n\n\ngroup:Database Systems The Complete Book - Exercise 2.4.1\ndescription[[ Sample Data from [Database Systems The Complete Book 2nd Edition](http://infolab.stanford.edu/~ullman/dscb.html) Exercise 2.4.1 Page 52-55 ]]\n\nProduct = {\nmaker\tmodel\ttype\nA\t1001\tpc\nA\t1002\tpc\nA\t1003\tpc\nA\t2004\tlaptop\nA\t2005\tlaptop\nA\t2006\tlaptop\nB\t1004\tpc\nB\t1005\tpc\nB\t1006\tpc\nB\t2007\tpc\nC\t1007\tpc\nD\t1008\tpc\nD\t1009\tpc\nD\t1010\tpc\nD\t3004\tprinter\nD\t3005\tprinter\nE\t1011\tpc\nE\t1012\tpc\nE\t1013\tpc\nE\t2001\tlaptop\nE\t2002\tlaptop\nE\t2003\tlaptop\nE\t3001\tprinter\nE\t3002\tprinter\nE\t3003\tprinter\nF\t2008\tlaptop\nF\t2009\tlaptop\nG\t2010\tlaptop\nH\t3006\tprinter\nH\t3007\tprinter\n}\n\nPC = {\nmodel\tspeed\tram\thd\tprice\n1001\t2.66\t1024\t250\t2114\n1002\t2.1\t512\t250\t995\n1003\t1.42\t512\t80\t478\n1004\t2.8\t1024\t250\t649\n1005\t3.2\t512\t250\t630\n1006\t3.2\t1024\t320\t1049\n1007\t2.2\t1024\t200\t510\n1008\t2.2\t2048\t250\t770\n1009\t2\t1024\t250\t650\n1010\t2.8\t2048\t300\t770\n1011\t1.86\t2048\t160\t959\n1012\t2.8\t1024\t160\t649\n1013\t3.06\t512\t80\t529\n}\n\nLaptop = {\nmodel\tspeed\tram\thd\tscreen\tprice\n2001\t2\t2048\t240\t20.1\t3673\n2002\t1.73\t1024\t80\t17\t949\n2003\t1.8\t512\t60\t15.4\t549\n2004\t2\t512\t60\t13.3\t1150\n2005\t2.16\t1024\t120\t17\t2500\n2006\t2\t2048\t80\t15.4\t1700\n2007\t1.83\t1024\t120\t13.3\t1429\n2008\t1.6\t1024\t100\t15.4\t900\n2009\t1.6\t512\t80\t14.1\t680\n2010\t2\t2048\t160\t15.4\t2300\n}\n\nPrinter = {\nmodel\tcolor\ttype\tprice\n3001\ttrue\tink-jet\t99\n3002\tfalse\tlaser\t239\n3003\ttrue\tlaser\t899\n3004\ttrue\tink-jet\t120\n3005\tfalse\tlaser\t120\n3006\ttrue\tink-jet\t100\n3007\ttrue\tlaser\t200\n}\n\ngroup:Database Systems The Complete Book - Exercise 2.4.3\ndescription[[ Sample Data from [Database Systems The Complete Book 2nd Edition](http://infolab.stanford.edu/~ullman/dscb.html) Exercise 2.4.1 Page 55-57 ]]\n\nClasses = {\nclass\ttype\tcountry\tnumGuns\tbore\tdisplacement\nBismarck\tbb\tGermany\t8\t15\t42000\nIowa\tbb\tUSA\t9\t16\t46000\nKongo\tbc\tJapan\t8\t14\t32000\n'North Carolina'\tbb\tUSA\t9\t16\t37000\nRenown\tbc\t'Gt. Britan'\t6\t15\t23000\nRevenge\tbb\t'Gt. Britan'\t8\t15\t29000\nTennessee\tbb\tUSA\t12\t14\t32000\nYamato\tbb\tJapan\t9\t18\t65000\n}\n\nBattles = {\nname\tdate\n'Denmark Strait'\t1941-05-24\nGuadalcanal\t1942-11-15\n'North Cape'\t1943-12-26\n'Surigao Strait'\t1944-10-25\n}\n\nOutcomes = {\nship\tbattle\tresult\nArizona\t'Pearl Harbor'\tsunk\nBismarck\t'Denmark Strait'\tsunk\nCalifornia\t'Surigao Strait'\tok\n'Duke of York'\t'North Cape'\tok\nFuso\t'Surigao Strait'\tsunk\nHood\t'Denmark Strait'\tsunk\n'King George V'\t'Denmark Strait'\tok\nKirishima\tGuadalcanal\tsunk\n'Prince of Wales'\t'Denmark Strait'\tdamaged\nRodney\t'Denmark Strait'\tok\nScharnhorst\t'North Cape'\tsunk\n'South Dakota'\tGuadalcanal\tdamaged\nTennessee\t'Surigao Strait'\tok\nWashington\tGuadalcanal\tok\n'West Virginia'\t'Surigao Strait'\tok\nYamashiro\t'Surigao Strait'\tsunk\n}\n\nShips = {\nname\tclass\tlaunched\nCalifornia\tTennessee\t1921\nHaruna\tKongo\t1915\nHiei\tKongo\t1914\nIowa\tIowa\t1943\nKirishima\tKongo\t1915\nKongo\tKongo\t1913\nMissouri\tIowa\t1944\nMusashi\tYamato\t1942\n'New Jersey'\tIowa\t1943\n'North Carolina'\t'North Carolina'\t1941\nRamillies\tRevenge\t1917\nRenown\tRenown\t1916\nRepulse\tRenown\t1916\nResolution\tRevenge\t1916\nRevenge\tRevenge\t1916\n'Royal Oak'\tRevenge\t1916\n'Royal Sovereign'\tRevenge\t1916\nTennessee\tTennessee\t1920\nWashington\t'North Carolina'\t1941\nWisconsin\tIowa\t1944\nYamato\tYamato\t1941\n}\n\n\ngroup:Wikipedia - Relational algebra (en)\ndescription[[This are the tables from [Relational algebra - Wikipedia The Free Encyclopedia](http://en.wikipedia.org/wiki/Relational_algebra)\n\nlicense: [CC BY-SA](http://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License)]]\n\nEmployee = {\n\tName:string, EmpId:number, DeptName:string\n\t'Harry' , 3415 , 'Finance' \n\t'Sally' , 2241 , 'Sales' \n\t'George' , 3401 , 'Finance' \n\t'Harriet' , 2202 , 'Sales' \n\t'Tim' , 1123 , 'Executive' \n}\n\nDept = {\n\tDeptName:string, Manager:string\n\t'Sales' , 'Harriet' \n\t'Production' , 'Charles' \n}\n\nCompleted = {\n\tStudent:string, Task:string\n\t'Fred' , 'Database1'\n\t'Fred' , 'Database2'\n\t'Fred' , 'Compiler1'\n\t'Eugene' , 'Database1'\n\t'Eugene' , 'Compiler1'\n\t'Sarah' , 'Database1'\n\t'Sarah' , 'Database2'\n}\n\nDBProject = {\n\tTask:string\n\t'Database1'\n\t'Database2'\n}\n\nCar = {\n\tCarModel:string, CarPrice:number\n\t'CarA' , 20000 \n\t'CarB' , 30000 \n\t'CarC' , 50000 \n}\n\nBoat = {\n\tBoatModel:string, BoatPrice:number\n\t'Boat1' , 10000 \n\t'Boat2' , 40000 \n\t'Boat3' , 60000 \n}"},"./src/calc2/i18n.tsx":function(e,t,n){"use strict";n.d(t,"c",(function(){return d})),n.d(t,"d",(function(){return h})),n.d(t,"a",(function(){return p})),n.d(t,"b",(function(){return g}));var r=n("./node_modules/i18next/dist/es/index.js"),o=n("./node_modules/i18next-browser-languagedetector/index.js"),i=n("./node_modules/react/index.js"),a=n("./src/locales/de.json"),s=n("./src/locales/en.json"),l=n("./src/locales/es.json"),u=n("./src/locales/kr.json"),c=n("./src/locales/pt.json");const d=r.b(o).init({resources:{en:{translations:s},de:{translations:a},es:{translations:l},kr:{translations:u},pt:{translations:c}},fallbackLng:"en",nsSeparator:":",keySeparator:!1,defaultNS:"translations",debug:!0});function h(e,t){return String(d.t(e,t))}const{Provider:f,Consumer:m}=i.createContext(d),p=e=>i.createElement(f,{value:d},e.children),g=({id:e,html:t=!1})=>i.createElement(m,null,n=>t?i.createElement("span",{dangerouslySetInnerHTML:{__html:String(n.t(e,{interpolation:{escapeValue:!1}}))}}):i.createElement("span",null,String(n.t(e))))},"./src/calc2/main.hot.tsx":function(e,t,n){"use strict";(function(e){var r=n("./src/calc2/main.tsx"),o=n("./node_modules/react-hot-loader/index.js");t.a=Object(o.hot)(e)(r.a)}).call(this,n("./node_modules/webpack/buildin/harmony-module.js")(e))},"./src/calc2/main.tsx":function(e,t,n){"use strict";n.d(t,"a",(function(){return zn}));n("./node_modules/bootstrap/dist/css/bootstrap.css");var r=n("./src/calc2/i18n.tsx"),o=n("./node_modules/react/index.js"),i=n.n(o),a=n("./node_modules/prop-types/index.js"),s=n.n(a),l=i.a.createContext(null);var u=function(e){e()},c={notify:function(){}};function d(){var e=u,t=null,n=null;return{clear:function(){t=null,n=null},notify:function(){e((function(){for(var e=t;e;)e.callback(),e=e.next}))},get:function(){for(var e=[],n=t;n;)e.push(n),n=n.next;return e},subscribe:function(e){var r=!0,o=n={callback:e,next:null,prev:n};return o.prev?o.prev.next=o:t=o,function(){r&&null!==t&&(r=!1,o.next?o.next.prev=o.prev:n=o.prev,o.prev?o.prev.next=o.next:t=o.next)}}}}var h=function(){function e(e,t){this.store=e,this.parentSub=t,this.unsubscribe=null,this.listeners=c,this.handleChangeWrapper=this.handleChangeWrapper.bind(this)}var t=e.prototype;return t.addNestedSub=function(e){return this.trySubscribe(),this.listeners.subscribe(e)},t.notifyNestedSubs=function(){this.listeners.notify()},t.handleChangeWrapper=function(){this.onStateChange&&this.onStateChange()},t.isSubscribed=function(){return Boolean(this.unsubscribe)},t.trySubscribe=function(){this.unsubscribe||(this.unsubscribe=this.parentSub?this.parentSub.addNestedSub(this.handleChangeWrapper):this.store.subscribe(this.handleChangeWrapper),this.listeners=d())},t.tryUnsubscribe=function(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=null,this.listeners.clear(),this.listeners=c)},e}();var f=function(e){var t=e.store,n=e.context,r=e.children,a=Object(o.useMemo)((function(){var e=new h(t);return e.onStateChange=e.notifyNestedSubs,{store:t,subscription:e}}),[t]),s=Object(o.useMemo)((function(){return t.getState()}),[t]);Object(o.useEffect)((function(){var e=a.subscription;return e.trySubscribe(),s!==t.getState()&&e.notifyNestedSubs(),function(){e.tryUnsubscribe(),e.onStateChange=null}}),[a,s]);var u=n||l;return i.a.createElement(u.Provider,{value:a},r)},m=n("./node_modules/@babel/runtime/helpers/esm/extends.js"),p=n("./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js"),g=n("./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),y=n.n(g),b=n("./node_modules/react-is/index.js"),v="undefined"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement?o.useLayoutEffect:o.useEffect,_=[],w=[null,null];function E(e,t){var n=e[1];return[t.payload,n+1]}function j(e,t,n){v((function(){return e.apply(void 0,t)}),n)}function C(e,t,n,r,o,i,a){e.current=r,t.current=o,n.current=!1,i.current&&(i.current=null,a())}function S(e,t,n,r,o,i,a,s,l,u){if(e){var c=!1,d=null,h=function(){if(!c){var e,n,h=t.getState();try{e=r(h,o.current)}catch(e){n=e,d=e}n||(d=null),e===i.current?a.current||l():(i.current=e,s.current=e,a.current=!0,u({type:"STORE_UPDATED",payload:{error:n}}))}};n.onStateChange=h,n.trySubscribe(),h();return function(){if(c=!0,n.tryUnsubscribe(),n.onStateChange=null,d)throw d}}}var O=function(){return[null,0]};function k(e,t){void 0===t&&(t={});var n=t,r=n.getDisplayName,a=void 0===r?function(e){return"ConnectAdvanced("+e+")"}:r,s=n.methodName,u=void 0===s?"connectAdvanced":s,c=n.renderCountProp,d=void 0===c?void 0:c,f=n.shouldHandleStateChanges,g=void 0===f||f,v=n.storeKey,k=void 0===v?"store":v,T=(n.withRef,n.forwardRef),M=void 0!==T&&T,x=n.context,L=void 0===x?l:x,R=Object(p.a)(n,["getDisplayName","methodName","renderCountProp","shouldHandleStateChanges","storeKey","withRef","forwardRef","context"]),A=L;return function(t){var n=t.displayName||t.name||"Component",r=a(n),s=Object(m.a)({},R,{getDisplayName:a,methodName:u,renderCountProp:d,shouldHandleStateChanges:g,storeKey:k,displayName:r,wrappedComponentName:n,WrappedComponent:t}),l=R.pure;var c=l?o.useMemo:function(e){return e()};function f(n){var r=Object(o.useMemo)((function(){var e=n.forwardedRef,t=Object(p.a)(n,["forwardedRef"]);return[n.context,e,t]}),[n]),a=r[0],l=r[1],u=r[2],d=Object(o.useMemo)((function(){return a&&a.Consumer&&Object(b.isContextConsumer)(i.a.createElement(a.Consumer,null))?a:A}),[a,A]),f=Object(o.useContext)(d),y=Boolean(n.store)&&Boolean(n.store.getState)&&Boolean(n.store.dispatch);Boolean(f)&&Boolean(f.store);var v=y?n.store:f.store,k=Object(o.useMemo)((function(){return function(t){return e(t.dispatch,s)}(v)}),[v]),T=Object(o.useMemo)((function(){if(!g)return w;var e=new h(v,y?null:f.subscription),t=e.notifyNestedSubs.bind(e);return[e,t]}),[v,y,f]),M=T[0],x=T[1],L=Object(o.useMemo)((function(){return y?f:Object(m.a)({},f,{subscription:M})}),[y,f,M]),R=Object(o.useReducer)(E,_,O),D=R[0][0],N=R[1];if(D&&D.error)throw D.error;var P=Object(o.useRef)(),I=Object(o.useRef)(u),H=Object(o.useRef)(),Y=Object(o.useRef)(!1),F=c((function(){return H.current&&u===I.current?H.current:k(v.getState(),u)}),[v,D,u]);j(C,[I,P,Y,u,F,H,x]),j(S,[g,v,M,k,I,P,Y,H,x,N],[v,M,k]);var W=Object(o.useMemo)((function(){return i.a.createElement(t,Object(m.a)({},F,{ref:l}))}),[l,t,F]);return Object(o.useMemo)((function(){return g?i.a.createElement(d.Provider,{value:L},W):W}),[d,W,L])}var v=l?i.a.memo(f):f;if(v.WrappedComponent=t,v.displayName=r,M){var T=i.a.forwardRef((function(e,t){return i.a.createElement(v,Object(m.a)({},e,{forwardedRef:t}))}));return T.displayName=r,T.WrappedComponent=t,y()(T,t)}return y()(v,t)}}function T(e,t){return e===t?0!==e||0!==t||1/e==1/t:e!=e&&t!=t}function M(e,t){if(T(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(var o=0;o=0;r--){var o=t[r](e);if(o)return o}return function(t,r){throw new Error("Invalid value of type "+typeof e+" for "+n+" argument when connecting component "+r.wrappedComponentName+".")}}function B(e,t){return e===t}function U(e){var t=void 0===e?{}:e,n=t.connectHOC,r=void 0===n?k:n,o=t.mapStateToPropsFactories,i=void 0===o?N:o,a=t.mapDispatchToPropsFactories,s=void 0===a?D:a,l=t.mergePropsFactories,u=void 0===l?I:l,c=t.selectorFactory,d=void 0===c?F:c;return function(e,t,n,o){void 0===o&&(o={});var a=o,l=a.pure,c=void 0===l||l,h=a.areStatesEqual,f=void 0===h?B:h,g=a.areOwnPropsEqual,y=void 0===g?M:g,b=a.areStatePropsEqual,v=void 0===b?M:b,_=a.areMergedPropsEqual,w=void 0===_?M:_,E=Object(p.a)(a,["pure","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","areMergedPropsEqual"]),j=W(e,i,"mapStateToProps"),C=W(t,s,"mapDispatchToProps"),S=W(n,u,"mergeProps");return r(d,Object(m.a)({methodName:"connect",getDisplayName:function(e){return"Connect("+e+")"},shouldHandleStateChanges:Boolean(e),initMapStateToProps:j,initMapDispatchToProps:C,initMergeProps:S,pure:c,areStatesEqual:f,areOwnPropsEqual:y,areStatePropsEqual:v,areMergedPropsEqual:w},E))}}var z=U();var V,q=n("./node_modules/react-dom/index.js");V=q.unstable_batchedUpdates,u=V;var G=n("./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js");function K(e){return"/"===e.charAt(0)}function X(e,t){for(var n=t,r=n+1,o=e.length;r=0;c--){var d=o[c];"."===d?X(o,c):".."===d?(X(o,c),u++):u&&(X(o,c),u--)}if(!s)for(;u--;u)o.unshift("..");!s||""===o[0]||o[0]&&K(o[0])||o.unshift("");var h=o.join("/");return n&&"/"!==h.substr(-1)&&(h+="/"),h};function J(e){return e.valueOf?e.valueOf():Object.prototype.valueOf.call(e)}var Q=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every((function(t,r){return e(t,n[r])}));if("object"==typeof t||"object"==typeof n){var r=J(t),o=J(n);return r!==t||o!==n?e(r,o):Object.keys(Object.assign({},t,n)).every((function(r){return e(t[r],n[r])}))}return!1};var Z=function(e,t){if(!e)throw new Error("Invariant failed")};function ee(e){return"/"===e.charAt(0)?e:"/"+e}function te(e){return"/"===e.charAt(0)?e.substr(1):e}function ne(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function re(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function oe(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function ie(e,t,n,r){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var i=t.indexOf("?");return-1!==i&&(n=t.substr(i),t=t.substr(0,i)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e)).state=t:(void 0===(o=Object(m.a)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(e){throw e instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):e}return n&&(o.key=n),r?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=$(o.pathname,r.pathname)):o.pathname=r.pathname:o.pathname||(o.pathname="/"),o}function ae(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var i="function"==typeof e?e(t,n):e;"string"==typeof i?"function"==typeof r?r(i,o):o(!0):o(!1!==i)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,r):n.push(r),c({action:"PUSH",location:r,index:t,entries:n})}}))},replace:function(e,t){var r=ie(e,t,d(),y.location);u.confirmTransitionTo(r,"REPLACE",n,(function(e){e&&(y.entries[y.index]=r,c({action:"REPLACE",location:r}))}))},go:g,goBack:function(){g(-1)},goForward:function(){g(1)},canGo:function(e){var t=y.index+e;return t>=0&&t=0&&t<=r),active:e===t},o.createElement(ct,{onClick:()=>this.setPage(t)},t+1)));return o.createElement("ul",{className:"pagination"},o.createElement(st,{disabled:0===e},o.createElement(ct,{previous:!0,onClick:()=>this.setPage(e-1)})),i,o.createElement(st,{disabled:e+1>=r},o.createElement(ct,{next:!0,onClick:()=>this.setPage(e+1)})))}}var ht=n("./src/db/exec/ValueExpr.ts");n("./src/calc2/components/pagedTable.scss");class ft extends o.Component{constructor(e){super(e),this.state={page:0}}render(){const{table:e,maxLinesPerPage:t,showPagination:n=!0,className:r=""}=this.props,{page:i}=this.state,a=e.getSchema();return o.createElement("div",{className:"result-table pagedTable"},o.createElement("table",{className:r},o.createElement("thead",null,o.createElement("tr",null,a.getColumns().map((e,t)=>o.createElement("th",{key:t},e.toString())))),o.createElement("tbody",null,e.getRows(i*t,t).map((e,t)=>o.createElement("tr",{key:`row ${t}`},e.map((e,t)=>{const n=a.getType(t);return o.createElement("td",{key:`value ${t}`,className:`${n} ${null===e?"null":""}`},Object(ht.d)(e,n))}))))),n?o.createElement("div",{className:"pagination"},o.createElement(dt,{total:e.getNumRows(),maxLinesPerPage:t,pageChanged:e=>this.setState({page:e}),currentPage:i})):null)}}var mt=n("./src/calc2/components/popover.tsx"),pt=n("./src/db/exec/RANode.ts");n("./src/calc2/components/raTree.scss");class gt extends o.Component{constructor(e){super(e)}render(){const{root:e,numTreeLabelColors:t=0,activeNode:n,setActiveNode:r}=this.props;let i=0;const a=new Map,s=e=>{const l=e instanceof pt.c||e instanceof pt.a?s(e.getChild()):null,u=e instanceof pt.a?s(e.getChild2()):null;let c="";if(e.hasMetaData("fromVariable")){const n=e.getMetaData("fromVariable");!1===a.has(n)&&a.set(n,i++);const r=a.get(n)%t;c=o.createElement("span",null," ",o.createElement("span",{className:`label label-info label-info-${r}`},n," =")," ")}return o.createElement("li",null,o.createElement("div",{className:nt({node:!0,active:e===n}),onClick:()=>r&&r(e)},o.createElement(mt.a,{title:o.createElement("div",null,c,o.createElement("div",{dangerouslySetInnerHTML:{__html:e.getFormulaHtml(!0,!1)}})),body:()=>{e.check(),e.getResult();const t=e.getSchema(),n=e.getResultNumRows();return o.createElement("div",null,"columns:",o.createElement("ul",null,t.getColumns().map((e,n)=>o.createElement("li",{key:n},e.toString()," ",o.createElement("small",{className:"muted text-muted"},t.getType(n))))),e.hasMetaData("naturalJoinConditions")?o.createElement("div",null,"natural join conditions:",o.createElement("ul",null,e.getMetaData("naturalJoinConditions").map(e=>o.createElement("li",{dangerouslySetInnerHTML:{__html:e.getFormulaHtml()}})))):null,o.createElement("p",null,`${n} row${1===n?"":"s"}`),!0===e.getMetaData("isInlineRelation")&&e.hasMetaData("inlineRelationDefinition")?o.createElement("pre",null,e.getMetaData("inlineRelationDefinition")):null)},placement:"right",trigger:"hover"},o.createElement("a",{className:"formula"},c,o.createElement("span",{dangerouslySetInnerHTML:{__html:e.getFormulaHtml(!1,!1)}}),o.createElement("br",null),o.createElement("span",{className:"resultCountLabel"},`${e.getResultNumRows()} row${1===e.getResultNumRows()?"":"s"}`)))),l||u?o.createElement("ul",null,l,u):null)};return o.createElement("div",{className:"ra-tree"},o.createElement("div",{className:"tree"},o.createElement("ul",null,s(e))))}}var yt=n("./node_modules/memoize-one/dist/memoize-one.esm.js");n("./src/calc2/components/result.scss");class bt extends o.Component{constructor(e){super(e),this.result=Object(yt.a)(e=>{try{return e.check(),e.getResult()}catch(e){return console.error(e),null}}),this.state={activeNode:e.root,result:null},this.setActiveNode=this.setActiveNode.bind(this)}setActiveNode(e){this.setState({activeNode:e})}render(){const{root:e,numTreeLabelColors:t}=this.props,{activeNode:n}=this.state,r=this.result(n);return o.createElement("div",{className:"ra-result clearfix"},o.createElement("div",null,o.createElement(gt,{root:e,activeNode:n,numTreeLabelColors:t,setActiveNode:this.setActiveNode})),o.createElement("div",{className:"result"},o.createElement("div",null,o.createElement("h4",{className:"result-formula",dangerouslySetInnerHTML:{__html:n.getFormulaHtml(!0,!1)}}),o.createElement("div",{className:"result-table"},r?o.createElement(ft,{className:"table table-condensed",maxLinesPerPage:10,table:r,showPagination:!0}):null))))}}var vt=n("./src/db/relalg.ts");const _t=["pi","sigma","rho","tau","<-","intersect","union","/","-","\\","x","cross join","join","inner join","natural join","left join","right join","left outer join","right outer join","full outer join","left semi join","right semi join","anti join","and","or","xor","||"];class wt extends o.Component{constructor(e){super(e),this.editorBase=null,this.state={autoreplaceOperatorsMode:"none"},this.replaceText=this.replaceText.bind(this)}render(){const{group:e}=this.props,{autoreplaceOperatorsMode:t}=this.state,n={};return e.tables.forEach(e=>{n[e.tableName]=e.relation}),o.createElement(tt.a,{textChange:e=>{},ref:e=>{e&&(this.editorBase=e)},mode:"relalg",execFunction:(e,t,i)=>{const a=Object(vt.b)(t,Object.keys(n));if(Object(vt.j)(a,n),null===a.child)throw a.assignments.length>0?new Error(Object(r.d)("calc.messages.error-query-missing-assignments-found")):new Error(Object(r.d)("calc.messages.error-query-missing"));const s=Object(vt.h)(a,n);return s.check(),e.historyAddEntry(t),e.props.enableInlineRelationEditor&&e.addInlineRelationMarkers(a),{result:o.createElement(bt,{root:s,numTreeLabelColors:6})}},tab:"relalg",linterFunction:(e,o,i)=>{const a=[],s=Object(vt.b)(i,Object.keys(n));Object(vt.j)(s,n);for(let e=0;e0?new Error(Object(r.d)("calc.messages.error-query-missing-assignments-found")):new Error(Object(r.d)("calc.messages.error-query-missing"));const l=Object(vt.h)(s,n);if(l.check(),!1===o.getDoc().somethingSelected()){const e=o.getDoc().getCursor(),{query:n,cursor:r}=Object(vt.f)(i,s.operatorPositions,{line:e.line+1,column:e.ch+1},t);n!==i&&(o.setValue(n),o.getDoc().setCursor({line:r.line-1,ch:r.column-1}))}return e.props.enableInlineRelationEditor&&e.addInlineRelationMarkers(s),a.concat(Object(tt.b)(l))},getHintsFunction:()=>[..._t,...Object(tt.c)(e)],enableInlineRelationEditor:!0,toolbar:[{math:!0,items:[{label:"π",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.projection",tooltip:"calc.editors.ra.toolbar.projection-content"},{label:"σ",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.selection",tooltip:"calc.editors.ra.toolbar.selection-content"},{label:"ρ",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.rename",tooltip:"calc.editors.ra.toolbar.rename-content"},{label:"←",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.rename-columns-operator",tooltip:"calc.editors.ra.toolbar.rename-columns-operator-content"},{label:"τ",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.orderBy",tooltip:"calc.editors.ra.toolbar.orderBy-content"},{label:"γ",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.groupBy",tooltip:"calc.editors.ra.toolbar.groupBy-content"}]},{math:!0,items:[{label:"∧",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.and",tooltip:"calc.editors.ra.toolbar.and-content"},{label:"∨",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.or",tooltip:"calc.editors.ra.toolbar.or-content"},{label:"¬",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.not",tooltip:"calc.editors.ra.toolbar.not-content"},{label:"=",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.equals",tooltip:"calc.editors.ra.toolbar.equals-content"},{label:"≠",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.not-equals",tooltip:"calc.editors.ra.toolbar.not-equals-content"},{label:"≥",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.greater-or-equals",tooltip:"calc.editors.ra.toolbar.greater-or-equals-content"},{label:"≤",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.lesser-or-equals",tooltip:"calc.editors.ra.toolbar.lesser-or-equals-content"}]},{math:!0,items:[{label:"∩",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.intersect",tooltip:"calc.editors.ra.toolbar.intersect-content"},{label:"∪",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.union",tooltip:"calc.editors.ra.toolbar.union-content"},{label:"÷",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.division",tooltip:"calc.editors.ra.toolbar.division-content"},{label:"-",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.subtraction",tooltip:"calc.editors.ra.toolbar.subtraction-content"}]},{math:!0,items:[{label:"⨯",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.cross-join",tooltip:"calc.editors.ra.toolbar.cross-join-content"},{label:"⨝",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.natural-join",tooltip:"calc.editors.ra.toolbar.natural-join-content"},{label:"⟕",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.left-outer-join",tooltip:"calc.editors.ra.toolbar.left-outer-join-content"},{label:"⟖",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.right-outer-join",tooltip:"calc.editors.ra.toolbar.right-outer-join-content"},{label:"⟗",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.full-outer-join",tooltip:"calc.editors.ra.toolbar.full-outer-join-content"},{label:"⋉",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.left-semi-join",tooltip:"calc.editors.ra.toolbar.left-semi-join-content"},{label:"⋊",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.right-semi-join",tooltip:"calc.editors.ra.toolbar.right-semi-join-content"},{label:"▷",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.anti-join",tooltip:"calc.editors.ra.toolbar.anti-join-content"}]},{math:!0,items:[{label:"=",onClick:e=>this.replaceText(e,"= "),tooltipTitle:"calc.editors.ra.toolbar.assignment",tooltip:"calc.editors.ra.toolbar.assignment-content"},{label:"--",onClick:e=>this.replaceText(e,"-- "),tooltipTitle:"calc.editors.ra.toolbar.single-line-comment",tooltip:"calc.editors.ra.toolbar.single-line-comment-content"},{label:"/*",onClick:e=>this.replaceText(e,"/* */"),tooltipTitle:"calc.editors.ra.toolbar.multi-line-comment",tooltip:"calc.editors.ra.toolbar.multi-line-comment-content"},{label:"{}",onClick:e=>this.replaceText(e,"{a:string, b:number, X.c:date\n\ta, 1, 1970-01-01\n}"),tooltipTitle:"calc.editors.ra.toolbar.inline-relation",tooltip:"calc.editors.ra.toolbar.inline-relation-content"}]},{items:[{label:o.createElement(et.a,{icon:Ze.q}),onClick:()=>{this.editorBase&&this.editorBase.inlineRelationEditorOpen(null)},tooltipTitle:"calc.editors.ra.toolbar.inline-relation-editor",tooltip:"calc.editors.ra.toolbar.inline-relation-editor-content"},{label:o.createElement(et.a,{icon:Ze.d}),onClick:e=>this.replaceText(e,"date('1970-01-01')"),tooltipTitle:"calc.editors.ra.toolbar.insert-date",tooltip:"calc.editors.ra.toolbar.insert-date-content"},{className:"showOnSM",label:o.createElement(et.a,{className:"editorButtonOnSM",icon:Ze.m}),onClick:()=>{this.props.relInsertModalToggle()},tooltipTitle:"calc.editors.insert-relation-title",tooltip:"calc.editors.insert-relation-tooltip"}]},{items:[{className:"dropdownToolbarButton",type:"dropdown",label:o.createElement(et.a,{className:"editorButtonOnSM",icon:Ze.l}),tooltipTitle:"calc.editors.ra.toolbar.autoreplace-operators.title",tooltip:"calc.editors.ra.toolbar.autoreplace-operators.header",elements:[{type:"header",label:o.createElement(r.b,{id:"calc.editors.ra.toolbar.autoreplace-operators.header"})},{type:"separator"},{label:o.createElement(r.b,{id:"calc.editors.ra.toolbar.autoreplace-operators.none"}),value:"none"},{label:o.createElement(r.b,{id:"calc.editors.ra.toolbar.autoreplace-operators.plain2math"}),value:"plain2math"},{label:o.createElement(r.b,{id:"calc.editors.ra.toolbar.autoreplace-operators.math2plain"}),value:"math2plain"}],value:t,onChange:e=>{this.setState({autoreplaceOperatorsMode:e},()=>{this.editorBase&&this.editorBase.forceLinterRun()})}}]}]})}replaceText(e,t){this.editorBase&&this.editorBase.replaceText(e,t)}replaceSelection(e,t){this.editorBase&&this.editorBase.replaceSelection(e,t)}}var Et=n("./src/calc2/utils/groupUtils.ts"),jt=n("./node_modules/reactstrap/lib/Button.js"),Ct=n.n(jt);class St extends o.Component{constructor(e){super(e),this.editorBase=null,this.autoParsingTimeout=null,this.replaceSelection=this.replaceSelection.bind(this)}static generateInfo(e){return{groupInfo:{source:"local",id:"draft",filename:"draft",index:0,maintainer:"",maintainerGroup:""},sourceInfo:{}}}render(){const{group:e}=this.props,t={};return e.tables.forEach(e=>{t[e.tableName]=e.relation}),o.createElement(tt.a,{textChange:e=>{},ref:e=>{e&&(this.editorBase=e)},mode:"relalg",disableHistory:!0,execButtonLabel:"calc.editors.group.button-exec",execFunction:(e,t,n)=>{const i=Object(vt.c)(t),{groupInfo:a,sourceInfo:s}=St.generateInfo(i),l=Object(Et.a)(i,a,s),u=o.createElement(o.Fragment,null,l.map((e,t)=>o.createElement("div",{key:t},o.createElement("h4",null,e.groupName.fallback," ",o.createElement(Ct.a,{color:"link",onClick:()=>{this.props.setDraft(e)}},o.createElement(r.b,{id:"calc.editors.group.button-use"}))),o.createElement("ul",{className:"table-list"},e.tables.map((e,n)=>{const r=l[t].tables[n].relation.getResult().getHtml();return o.createElement("li",{key:n},o.createElement("h5",null,e.tableName),o.createElement("div",{dangerouslySetInnerHTML:{__html:r}}))})))));return i.groups.forEach(t=>{e.addInlineRelationMarkers(t)}),{result:u}},tab:"group",linterFunction:(e,t,n)=>{const r=Object(vt.c)(n);r.groups.forEach(t=>{e.addInlineRelationMarkers(t)});const{groupInfo:o,sourceInfo:i}=St.generateInfo(r);return Object(Et.a)(r,o,i),[]},getHintsFunction:()=>[..._t,"group","group@de","group@en","group@es","description","description@de","description@en","description@es","category","category@de","category@en","category@es",...Object(tt.c)(e)],enableInlineRelationEditor:!0,toolbar:[{math:!1,items:[{label:o.createElement("span",null,o.createElement(et.a,{icon:Ze.q})," ",o.createElement(r.b,{id:"calc.editors.group.toolbar.add-new-relation"})),onClick:()=>{this.editorBase&&this.editorBase.inlineRelationEditorOpen(null)},tooltipTitle:"calc.editors.group.toolbar.add-new-relation",tooltip:"calc.editors.group.toolbar.add-new-relation-content"}]}]})}replaceSelection(e,t){this.editorBase&&this.editorBase.replaceSelection(e,t)}}const Ot=["distinct","select distinct","from","where","order by","asc","desc","inner join","inner","join","natural","union","intersect","outer join","natural join","left join","right join","left outer join","right outer join","full outer join","group by","having","limit","offset","and","or","xor","||"];class kt extends o.Component{constructor(e){super(e),this.editorBase=null,this.replaceText=this.replaceText.bind(this)}render(){const{group:e}=this.props,t={};return e.tables.forEach(e=>{t[e.tableName]=e.relation}),o.createElement(tt.a,{textChange:e=>{},ref:e=>{e&&(this.editorBase=e)},mode:"text/x-mysql",execFunction:(e,n,i)=>{const a=Object(vt.e)(n);if(Object(vt.j)(a,t),null===a.child)throw a.assignments.length>0?new Error(Object(r.d)("calc.messages.error-query-missing-assignments-found")):new Error(Object(r.d)("calc.messages.error-query-missing"));const s=Object(vt.i)(a,t);return s.check(),e.historyAddEntry(n),{result:o.createElement(bt,{root:s,numTreeLabelColors:6})}},tab:"sql",linterFunction:(e,n,o)=>{const i=[],a=Object(vt.e)(o);Object(vt.j)(a,t);for(let e=0;e0?new Error(Object(r.d)("calc.messages.error-query-missing-assignments-found")):new Error(Object(r.d)("calc.messages.error-query-missing"));const s=Object(vt.i)(a,t);return s.check(),i.concat(Object(tt.b)(s))},getHintsFunction:()=>[...Ot,...Object(tt.c)(e)],enableInlineRelationEditor:!0,toolbar:[{math:!1,items:[{label:"select",tooltipTitle:"calc.editors.sql.toolbar.select",tooltip:"calc.editors.sql.toolbar.select",onClick:e=>this.replaceText(e,"select distinct")},{label:"from",onClick:this.replaceText,tooltipTitle:"calc.editors.sql.toolbar.from",tooltip:"calc.editors.sql.toolbar.from"},{label:"where",onClick:this.replaceText,tooltipTitle:"calc.editors.sql.toolbar.where",tooltip:"calc.editors.sql.toolbar.where"},{label:"group",tooltipTitle:"calc.editors.sql.toolbar.group-by",tooltip:"calc.editors.sql.toolbar.group-by",onClick:e=>this.replaceText(e,"group by")},{label:"having",onClick:this.replaceText,tooltipTitle:"calc.editors.sql.toolbar.having",tooltip:"calc.editors.sql.toolbar.having"},{label:"order",tooltipTitle:"calc.editors.sql.toolbar.order-by",tooltip:"calc.editors.sql.toolbar.order-by",onClick:e=>this.replaceText(e,"order by")},{label:"limit",onClick:this.replaceText,tooltipTitle:"calc.editors.sql.toolbar.limit",tooltip:"calc.editors.sql.toolbar.limit"},{label:o.createElement(et.a,{className:"showOnSM",icon:Ze.i}),onClick:e=>this.props.relInsertModalToggle,tooltipTitle:"calc.editors.insert-relation-title",tooltip:"calc.editors.insert-relation-tooltip"}]},{math:!0,items:[{label:o.createElement("i",{className:"fa fa-calendar"}),onClick:e=>this.replaceText(e,"date('1970-01-01')"),tooltipTitle:"calc.editors.sql.toolbar.insert-date",tooltip:"calc.editors.sql.toolbar.insert-date-content"}]}]})}replaceText(e,t){this.editorBase&&this.editorBase.replaceText(e,t)}replaceSelection(e,t){this.editorBase&&this.editorBase.replaceSelection(e,t)}}function Tt(e,t){return e[t]?e[t]:e.fallback}var Mt=n("./node_modules/react-toastify/esm/react-toastify.js"),xt=(n("./node_modules/react-toastify/dist/ReactToastify.css"),{tabs:s.a.bool,pills:s.a.bool,vertical:s.a.oneOfType([s.a.bool,s.a.string]),horizontal:s.a.string,justified:s.a.bool,fill:s.a.bool,navbar:s.a.bool,card:s.a.bool,tag:ot.o,className:s.a.string,cssModule:s.a.object}),Lt=function(e){var t=e.className,n=e.cssModule,r=e.tabs,o=e.pills,a=e.vertical,s=e.horizontal,l=e.justified,u=e.fill,c=e.navbar,d=e.card,h=e.tag,f=Object(p.a)(e,["className","cssModule","tabs","pills","vertical","horizontal","justified","fill","navbar","card","tag"]),g=Object(ot.k)(rt()(t,c?"navbar-nav":"nav",!!s&&"justify-content-"+s,function(e){return!1!==e&&(!0===e||"xs"===e?"flex-column":"flex-"+e+"-column")}(a),{"nav-tabs":r,"card-header-tabs":d&&r,"nav-pills":o,"card-header-pills":d&&o,"nav-justified":l,"nav-fill":u}),n);return i.a.createElement(h,Object(m.a)({},f,{className:g}))};Lt.propTypes=xt,Lt.defaultProps={tag:"ul",vertical:!1};var Rt=Lt,At=n("./node_modules/@babel/runtime/helpers/esm/objectSpread.js"),Dt=n("./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js"),Nt=n("./node_modules/react-popper/lib/esm/Manager.js"),Pt=i.a.createContext({}),It={a11y:s.a.bool,disabled:s.a.bool,direction:s.a.oneOf(["up","down","left","right"]),group:s.a.bool,isOpen:s.a.bool,nav:s.a.bool,active:s.a.bool,addonType:s.a.oneOfType([s.a.bool,s.a.oneOf(["prepend","append"])]),size:s.a.string,tag:ot.o,toggle:s.a.func,children:s.a.node,className:s.a.string,cssModule:s.a.object,inNavbar:s.a.bool,setActiveFromChild:s.a.bool},Ht=[ot.j.space,ot.j.enter,ot.j.up,ot.j.down,ot.j.end,ot.j.home],Yt=function(e){function t(t){var n;return(n=e.call(this,t)||this).addEvents=n.addEvents.bind(Object(Dt.a)(n)),n.handleDocumentClick=n.handleDocumentClick.bind(Object(Dt.a)(n)),n.handleKeyDown=n.handleKeyDown.bind(Object(Dt.a)(n)),n.removeEvents=n.removeEvents.bind(Object(Dt.a)(n)),n.toggle=n.toggle.bind(Object(Dt.a)(n)),n.containerRef=i.a.createRef(),n}Object(G.a)(t,e);var n=t.prototype;return n.getContextValue=function(){return{toggle:this.toggle,isOpen:this.props.isOpen,direction:"down"===this.props.direction&&this.props.dropup?"up":this.props.direction,inNavbar:this.props.inNavbar,disabled:this.props.disabled}},n.componentDidMount=function(){this.handleProps()},n.componentDidUpdate=function(e){this.props.isOpen!==e.isOpen&&this.handleProps()},n.componentWillUnmount=function(){this.removeEvents()},n.getContainer=function(){return this.containerRef.current},n.getMenuCtrl=function(){return this._$menuCtrl||(this._$menuCtrl=this.getContainer().querySelector("[aria-expanded]")),this._$menuCtrl},n.getMenuItems=function(){return[].slice.call(this.getContainer().querySelectorAll('[role="menuitem"]'))},n.addEvents=function(){var e=this;["click","touchstart","keyup"].forEach((function(t){return document.addEventListener(t,e.handleDocumentClick,!0)}))},n.removeEvents=function(){var e=this;["click","touchstart","keyup"].forEach((function(t){return document.removeEventListener(t,e.handleDocumentClick,!0)}))},n.handleDocumentClick=function(e){if(!e||3!==e.which&&("keyup"!==e.type||e.which===ot.j.tab)){var t=this.getContainer();(!t.contains(e.target)||t===e.target||"keyup"===e.type&&e.which!==ot.j.tab)&&this.toggle(e)}},n.handleKeyDown=function(e){var t=this;if(!/input|textarea/i.test(e.target.tagName)&&(ot.j.tab!==e.which||"menuitem"===e.target.getAttribute("role")&&this.props.a11y)&&((-1!==Ht.indexOf(e.which)||e.which>=48&&e.which<=90)&&e.preventDefault(),!this.props.disabled&&(this.getMenuCtrl()===e.target&&(!this.props.isOpen&&[ot.j.space,ot.j.enter,ot.j.up,ot.j.down].indexOf(e.which)>-1?(this.toggle(e),setTimeout((function(){return t.getMenuItems()[0].focus()}))):this.props.isOpen&&e.which===ot.j.esc&&this.toggle(e)),this.props.isOpen&&"menuitem"===e.target.getAttribute("role"))))if([ot.j.tab,ot.j.esc].indexOf(e.which)>-1)this.toggle(e),this.getMenuCtrl().focus();else if([ot.j.space,ot.j.enter].indexOf(e.which)>-1)e.target.click(),this.getMenuCtrl().focus();else if([ot.j.down,ot.j.up].indexOf(e.which)>-1||[ot.j.n,ot.j.p].indexOf(e.which)>-1&&e.ctrlKey){var n=this.getMenuItems(),r=n.indexOf(e.target);ot.j.up===e.which||ot.j.p===e.which&&e.ctrlKey?r=0!==r?r-1:n.length-1:(ot.j.down===e.which||ot.j.n===e.which&&e.ctrlKey)&&(r=r===n.length-1?0:r+1),n[r].focus()}else if(ot.j.end===e.which){var o=this.getMenuItems();o[o.length-1].focus()}else if(ot.j.home===e.which){this.getMenuItems()[0].focus()}else if(e.which>=48&&e.which<=90)for(var i=this.getMenuItems(),a=String.fromCharCode(e.which).toLowerCase(),s=0;s-1?"menuitem":void 0,n=Object(ot.l)(this.props,["toggle"]),r=n.className,o=n.cssModule,a=n.divider,s=n.tag,l=n.header,u=n.active,c=Object(p.a)(n,["className","cssModule","divider","tag","header","active"]),d=Object(ot.k)(rt()(r,{disabled:c.disabled,"dropdown-item":!a&&!l,active:u,"dropdown-header":l,"dropdown-divider":a}),o);return"button"===s&&(l?s="h6":a?s="div":c.href&&(s="a")),i.a.createElement(s,Object(m.a)({type:"button"===s&&(c.onClick||this.props.toggle)?"button":void 0},c,{tabIndex:e,role:t,className:d,onClick:this.onClick}))},t}(i.a.Component);tn.propTypes=en,tn.defaultProps={tag:"button",toggle:!0},tn.contextType=Pt;var nn=tn,rn={tag:ot.o,active:s.a.bool,className:s.a.string,cssModule:s.a.object},on=function(e){var t=e.className,n=e.cssModule,r=e.active,o=e.tag,a=Object(p.a)(e,["className","cssModule","active","tag"]),s=Object(ot.k)(rt()(t,"nav-item",!!r&&"active"),n);return i.a.createElement(o,Object(m.a)({},a,{className:s}))};on.propTypes=rn,on.defaultProps={tag:"li"};var an=on,sn={tag:ot.o,innerRef:s.a.oneOfType([s.a.object,s.a.func,s.a.string]),disabled:s.a.bool,active:s.a.bool,className:s.a.string,cssModule:s.a.object,onClick:s.a.func,href:s.a.any},ln=function(e){function t(t){var n;return(n=e.call(this,t)||this).onClick=n.onClick.bind(Object(Dt.a)(n)),n}Object(G.a)(t,e);var n=t.prototype;return n.onClick=function(e){this.props.disabled?e.preventDefault():("#"===this.props.href&&e.preventDefault(),this.props.onClick&&this.props.onClick(e))},n.render=function(){var e=this.props,t=e.className,n=e.cssModule,r=e.active,o=e.tag,a=e.innerRef,s=Object(p.a)(e,["className","cssModule","active","tag","innerRef"]),l=Object(ot.k)(rt()(t,"nav-link",{disabled:s.disabled,active:r}),n);return i.a.createElement(o,Object(m.a)({},s,{ref:a,onClick:this.onClick,className:l}))},t}(i.a.Component);ln.propTypes=sn,ln.defaultProps={tag:"a"};var un=ln,cn=n("./node_modules/react-lifecycles-compat/react-lifecycles-compat.es.js"),dn=i.a.createContext({}),hn={tag:ot.o,activeTab:s.a.any,className:s.a.string,cssModule:s.a.object},fn=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={activeTab:n.props.activeTab},n}return Object(G.a)(t,e),t.getDerivedStateFromProps=function(e,t){return t.activeTab!==e.activeTab?{activeTab:e.activeTab}:null},t.prototype.render=function(){var e=this.props,t=e.className,n=e.cssModule,r=e.tag,o=Object(ot.l)(this.props,Object.keys(hn)),a=Object(ot.k)(rt()("tab-content",t),n);return i.a.createElement(dn.Provider,{value:{activeTabId:this.state.activeTab}},i.a.createElement(r,Object(m.a)({},o,{className:a})))},t}(o.Component);Object(cn.polyfill)(fn);var mn=fn;fn.propTypes=hn,fn.defaultProps={tag:"div"};var pn={tag:ot.o,className:s.a.string,cssModule:s.a.object,tabId:s.a.any};function gn(e){var t=e.className,n=e.cssModule,r=e.tabId,o=e.tag,a=Object(p.a)(e,["className","cssModule","tabId","tag"]),s=function(e){return Object(ot.k)(rt()("tab-pane",t,{active:r===e}),n)};return i.a.createElement(dn.Consumer,null,(function(e){var t=e.activeTabId;return i.a.createElement(o,Object(m.a)({},a,{className:s(t)}))}))}gn.propTypes=pn,gn.defaultProps={tag:"div"};var yn=n("./node_modules/reactstrap/es/Modal.js"),bn=n("./node_modules/reactstrap/es/ModalHeader.js"),vn=n("./node_modules/reactstrap/es/ModalBody.js"),_n=n("./node_modules/reactstrap/es/ModalFooter.js");n("./src/calc2/components/groupRelationList.scss");const wn=({tables:e,replace:t,onElementClick:n})=>o.createElement("div",{className:"groupRelationList"},o.createElement("ul",null,e.map(e=>{const{columnNames:r,columnTypes:i,tableName:a}=e;return o.createElement("li",{key:a},o.createElement("span",{className:"clickable",onClick:()=>{t&&t(a),n&&n()}},a),o.createElement("ul",null,e.columnNames.map((e,r)=>o.createElement("li",{key:e},o.createElement("span",{className:"clickable",onClick:()=>{t&&t(e),n&&n()}},e," ",o.createElement("small",{className:"muted text-muted"},i[r]))," "))))})));var En=n("./node_modules/immutable/dist/immutable.es.js");class jn extends o.Component{constructor(e){super(e),this.getGroupsByHeadlineName=Object(yt.a)((e,t)=>{let n=En.b();const o=e=>Tt(e,t);for(const t of e.values()){let e=null;!0===t.isDraft?e=r.c.t("calc.maintainer-groups.temp"):t.category&&(e=o({lang:"",fallback:t.groupInfo.maintainerGroup}));const i=[...n.get(e)||[],t];i.sort((e,t)=>o(e.groupName).localeCompare(o(t.groupName))),n=n.set(e,i)}return n}),this.gistLink=""}render(){const{current:e,locale:t}=this.props,n=this.getGroupsByHeadlineName(this.props.groups,t);return o.createElement("div",{className:"container"},o.createElement("div",{className:"row"},o.createElement("div",{className:"col-md-6"},o.createElement("h4",null,o.createElement(r.b,{id:"calc.menu.headline"})),o.createElement("ul",{id:"groups-selector-list"},n.map((n,i)=>o.createElement("li",{key:`${i}`},i||o.createElement(r.b,{id:"calc.maintainer-groups.misc"}),o.createElement("ul",null,n.map((n,r)=>{const{groupName:i,groupInfo:a}=n,s=`/relax/calc/${a.source}/${a.id}/${a.filename}/${a.index}`;return o.createElement("li",{key:s,className:nt({active:e&&e.group.groupInfo===n.groupInfo})},o.createElement(Qe,{to:s,onClick:()=>{this.props.datasetLoaded()}},Tt(i,t)))})))).valueSeq().toArray())),o.createElement("div",{className:"col-md-6 align-text-top align-top"},o.createElement("h4",null,o.createElement(r.b,{id:"calc.menu.load-gist-headline"})),o.createElement("input",{type:"text",className:"form-control gist-load-input",placeholder:"","data-i18n":"[placeholder]calc.menu.load-gist-insert-placeholder",size:32,onChange:e=>{this.gistLink="/relax/calc/gist/"+e.target.value}}),o.createElement("button",{onClick:()=>{document.location.href=this.gistLink,this.props.datasetLoaded()},type:"button",className:"fullWidthBtn btn btn-secondary gist-load-btn"},o.createElement(r.b,{id:"calc.menu.load-gist-button"})),o.createElement("hr",null),o.createElement("h4",null,o.createElement(r.b,{id:"calc.menu.create-own-dataset-headline"})),o.createElement("p",null,o.createElement(r.b,{id:"calc.menu.create-own-dataset-text"})," ",o.createElement(Xe,{to:"/help#tutorial-maintainer"},o.createElement(r.b,{id:"calc.menu.create-own-dataset-text-link"}))),o.createElement("button",{type:"button",className:"fullWidthBtn btn btn-secondary open-group-new-btn",onClick:()=>{this.props.loadGroupTab(!1)}},o.createElement("i",{className:"fa fa-plus-square-o fa-lg"})," ",o.createElement("span",null,o.createElement(r.b,{id:"calc.menu.create-own-dataset-button-new"}))),o.createElement("button",{type:"button",className:"fullWidthBtn btn btn-secondary open-group-current-btn",onClick:()=>{this.props.loadGroupTab(!0)}},o.createElement("i",{className:"fa fa-pencil-square-o fa-lg"})," ",o.createElement("span",null,o.createElement(r.b,{id:"calc.menu.create-own-dataset-button-modify"}))))))}}const Cn=z(e=>({groups:e.groups.groups,current:e.groups.current,locale:e.session.locale}))(jn);var Sn={light:s.a.bool,dark:s.a.bool,full:s.a.bool,fixed:s.a.string,sticky:s.a.string,color:s.a.string,role:s.a.string,tag:ot.o,className:s.a.string,cssModule:s.a.object,expand:s.a.oneOfType([s.a.bool,s.a.string])},On=function(e){var t,n=e.expand,r=e.className,o=e.cssModule,a=e.light,s=e.dark,l=e.fixed,u=e.sticky,c=e.color,d=e.tag,h=Object(p.a)(e,["expand","className","cssModule","light","dark","fixed","sticky","color","tag"]),f=Object(ot.k)(rt()(r,"navbar",function(e){return!1!==e&&(!0===e||"xs"===e?"navbar-expand":"navbar-expand-"+e)}(n),((t={"navbar-light":a,"navbar-dark":s})["bg-"+c]=c,t["fixed-"+l]=l,t["sticky-"+u]=u,t)),o);return i.a.createElement(d,Object(m.a)({},h,{className:f}))};On.propTypes=Sn,On.defaultProps={tag:"nav",expand:!1};var kn=On,Tn={tag:ot.o,className:s.a.string,cssModule:s.a.object},Mn=function(e){var t=e.className,n=e.cssModule,r=e.tag,o=Object(p.a)(e,["className","cssModule","tag"]),a=Object(ot.k)(rt()(t,"navbar-brand"),n);return i.a.createElement(r,Object(m.a)({},o,{className:a}))};Mn.propTypes=Tn,Mn.defaultProps={tag:"a"};var xn=Mn,Ln=n("./node_modules/reactstrap/lib/NavLink.js"),Rn=n.n(Ln);class An extends o.Component{constructor(e){super(e),this.state={},this.changeLocale=this.changeLocale.bind(this)}changeLocale(e){r.c.language!==e&&window.confirm("Reload page to change language?")&&(r.c.changeLanguage(e),window.location.reload())}render(){return o.createElement(kn,{color:"light",light:!0,expand:"md",className:"desktopNavbar"},o.createElement(xn,{href:"/"},"RelaX"),o.createElement(Rt,{className:"ml-auto",navbar:!0},o.createElement(an,{className:"navItemSpace"},o.createElement(Rn.a,{href:"/relax/calc"},o.createElement(et.a,{icon:Ze.c})," Calculator")),o.createElement(Bt,{nav:!0,inNavbar:!0,className:"navItemSpace"},o.createElement(Gt,{nav:!0,caret:!0},o.createElement(et.a,{icon:Ze.j})," ",o.createElement(r.b,{id:"calc.navigation.language"})),o.createElement(Zt,{right:!0},o.createElement(nn,{onClick:()=>this.changeLocale("en")},"en"),o.createElement(nn,{onClick:()=>this.changeLocale("de")},"de"),o.createElement(nn,{onClick:()=>this.changeLocale("es")},"es"),o.createElement(nn,{onClick:()=>this.changeLocale("kr")},"kr"),o.createElement(nn,{onClick:()=>this.changeLocale("pt")},"pt"))),o.createElement(an,{className:"navItemSpace"},o.createElement(Rn.a,{href:"https://github.com/dbis-uibk/relax/issues"},o.createElement(et.a,{icon:Ze.f})," ",o.createElement(r.b,{id:"calc.navigation.feedback"}))),o.createElement(an,{className:"navItemSpace"},o.createElement(Rn.a,{href:"/relax/help"},o.createElement(et.a,{icon:Ze.p})," ",o.createElement(r.b,{id:"calc.navigation.help"}))),o.createElement(an,{className:"navItemSpace"},o.createElement(Rn.a,{href:"/relax/imprint"},o.createElement(et.a,{icon:Ze.a})," ",o.createElement(r.b,{id:"calc.navigation.imprint"})))))}}n("./src/calc2/components/calculator.scss");class Dn extends o.Component{constructor(e){super(e),this.refEditorRelalg=o.createRef(),this.refEditorSql=o.createRef(),this.refEditorGroup=o.createRef(),Mt.b.configure(),this.state={activeTab:"relalg",datasetModal:!1,relationModal:!1},this.getCurrentEditor=this.getCurrentEditor.bind(this),this.toggleDatasetModal=this.toggleDatasetModal.bind(this),this.insertRelationToggle=this.insertRelationToggle.bind(this),this.loadGroupEditor=this.loadGroupEditor.bind(this)}toggleDatasetModal(){this.setState({datasetModal:!this.state.datasetModal})}insertRelationToggle(){this.setState({relationModal:!this.state.relationModal})}changeLocale(e){r.c.language!==e&&window.confirm("Reload page to change language?")&&(r.c.changeLanguage(e),window.location.reload())}getCurrentEditor(){switch(this.state.activeTab){case"sql":return this.refEditorSql;case"relalg":return this.refEditorRelalg;case"group":return this.refEditorGroup}}loadGroupEditor(e){let t="-- this is an example\ngroup: nameOfTheNewGroup \n\nA = {\na:string, b:number\nexample, 42\n}";!0===e&&(t=this.props.group.definition),this.setState({activeTab:"group"},()=>{const e=this.getCurrentEditor().current;e&&e.editorBase.state.editor.setValue(t),this.toggleDatasetModal()})}render(){const{group:e,locale:t}=this.props,{activeTab:n}=this.state;return o.createElement("div",{className:"view-max"},o.createElement(An,null),o.createElement("div",{className:"calculator"},o.createElement(Mt.a,{enableMultiContainer:!0,position:Mt.b.POSITION.TOP_RIGHT}),o.createElement("div",{className:"row"},o.createElement("div",{className:"d-none d-xs-block d-sm-block d-md-block col-lg-1 col-xl-2"}),o.createElement("div",{className:"groups-container col-xs-2 col-sm-2 col-md-2 col-lg-2 col-xl-2"},o.createElement("button",{className:"btn btn-default dropdown-toggle",type:"button",id:"dropdownMenu1",onClick:this.toggleDatasetModal,style:{width:"100%",textAlign:"left",textOverflow:"ellipsis",overflow:"hidden"}},o.createElement("span",null,"Select DB (",Tt(e.groupName,t),")"),o.createElement("span",{className:"caret",style:{display:"block",position:"absolute",top:"50%",right:"10px"}})),o.createElement("div",null,o.createElement(wn,{tables:e.tables,replace:e=>{const t=this.getCurrentEditor();t&&t.current&&t.current.replaceSelection(e)},onElementClick:null}))),o.createElement("div",{className:"calculator-container col-xs-12 col-sm-12 col-md-12 col-lg-8 col-xl-6"},o.createElement(Rt,{tabs:!0},o.createElement(Bt,{nav:!0,inNavbar:!0,className:"showOnSM"},o.createElement(Gt,{nav:!0},o.createElement(et.a,{icon:Ze.b})),o.createElement(Zt,null,o.createElement(nn,{href:"/relax/calc"},o.createElement(et.a,{icon:Ze.c})," ",o.createElement(r.b,{id:"calc.navigation.calc"})),o.createElement(nn,{href:"/relax/help"},o.createElement(et.a,{icon:Ze.f})," ",o.createElement(r.b,{id:"calc.navigation.help"})),o.createElement(nn,{href:"https://github.com/dbis-uibk/relax/issues"},o.createElement(et.a,{icon:Ze.p})," ",o.createElement(r.b,{id:"calc.navigation.feedback"})),o.createElement(nn,{onClick:this.toggleDatasetModal},o.createElement(et.a,{icon:Ze.g})," ",o.createElement(r.b,{id:"calc.menu.datasets"})),o.createElement(nn,{divider:!0}),o.createElement(nn,{onClick:()=>this.changeLocale("en")},"en"),o.createElement(nn,{onClick:()=>this.changeLocale("de")},"de"),o.createElement(nn,{onClick:()=>this.changeLocale("es")},"es"),o.createElement(nn,{onClick:()=>this.changeLocale("kr")},"kr"))),o.createElement(an,null,o.createElement(un,{className:nt({active:"relalg"===n}),onClick:()=>{this.setState({activeTab:"relalg"})}},o.createElement("span",{className:"hideOnSM"},o.createElement(r.b,{id:"calc.editors.ra.tab-name"})),o.createElement("span",{className:"showOnSM"},o.createElement(r.b,{id:"calc.editors.ra.tab-name-short"})))),o.createElement(an,null,o.createElement(un,{className:nt({active:"sql"===n}),onClick:()=>{this.setState({activeTab:"sql"})}},o.createElement("span",{className:"hideOnSM"},o.createElement(r.b,{id:"calc.editors.sql.tab-name"})),o.createElement("span",{className:"showOnSM"},o.createElement(r.b,{id:"calc.editors.sql.tab-name-short"})))),o.createElement(an,null,o.createElement(un,{className:nt({active:"group"===n}),onClick:()=>{this.setState({activeTab:"group"})}},o.createElement("span",{className:"hideOnSM"},o.createElement(r.b,{id:"calc.editors.group.tab-name"})),o.createElement("span",{className:"showOnSM"},o.createElement(r.b,{id:"calc.editors.group.tab-name-short"}))))),o.createElement(mn,{activeTab:this.state.activeTab,className:"tab-content-border"},o.createElement(gn,{tabId:"relalg"},o.createElement(wt,{group:e,ref:this.refEditorRelalg,relInsertModalToggle:this.insertRelationToggle})),o.createElement(gn,{tabId:"sql"},o.createElement(kt,{group:e,ref:this.refEditorSql,relInsertModalToggle:this.insertRelationToggle})),o.createElement(gn,{tabId:"group"},o.createElement(St,{group:e,ref:this.refEditorGroup,setDraft:this.props.setDraft}))))),o.createElement(yn.a,{isOpen:this.state.datasetModal,toggle:this.toggleDatasetModal},o.createElement(bn.a,{toggle:this.toggleDatasetModal},Tt(e.groupName,t)),o.createElement(vn.a,null,o.createElement("div",null,o.createElement(Cn,{datasetLoaded:()=>{this.setState({datasetModal:!1})},loadGroupTab:e=>{this.loadGroupEditor(e)}}))),o.createElement(_n.a,null,o.createElement(zt.a,{color:"secondary",onClick:this.toggleDatasetModal},Object(r.d)("calc.result.modal.close")))),o.createElement(yn.a,{isOpen:this.state.relationModal,toggle:this.insertRelationToggle},o.createElement(bn.a,{toggle:this.insertRelationToggle},Tt(e.groupName,t)),o.createElement(vn.a,null,o.createElement(wn,{tables:e.tables,replace:e=>{const t=this.getCurrentEditor();t&&t.current&&t.current.replaceSelection(e)},onElementClick:this.insertRelationToggle})),o.createElement(_n.a,null,o.createElement(zt.a,{color:"secondary",onClick:this.insertRelationToggle},Object(r.d)("calc.result.modal.close"))))))}}class Nn extends o.Component{constructor(e){super(e),this.init=!1}componentDidUpdate(e){const{params:t}=this.props.match,{params:n}=e.match;!1!==this.init&&t.source===n.source&&t.id===n.id&&t.filename===n.filename&&t.index===n.index||(this.init=!0,this.loadGroup(this.props))}loadGroup(e){const{source:t,id:n,filename:r,index:o}=e.match.params;this.props.loadGroup(t,n,r,Number.parseInt(o,10),"","")}componentWillReceiveProps(e){const{params:t}=this.props.match,{params:n}=e.match;n.source!==t.source||n.id!==t.id||n.filename!==t.filename||(n.index,t.index)}render(){const{locale:e}=this.props,{current:t}=this.props.groups;return null!==t?o.createElement(Dn,{group:t.group,locale:e,setDraft:this.props.setDraft}):o.createElement("div",null,"loading ...")}}const Pn=z(e=>({groups:e.groups,locale:e.session.locale}),e=>({loadGroup:(t,n,r,o,i,a)=>{e({type:"GROUPS_LOAD_REQUEST",source:t,id:n,maintainer:i,maintainerGroup:a,setCurrent:{filename:r,index:o}})},setDraft:t=>{e({type:"GROUP_SET_DRAFT",draft:t})}}))(Nn);var In=n("./node_modules/jquery/dist/jquery.js"),Hn=n("./node_modules/railroad-diagrams/railroad-diagrams.js");n("./node_modules/railroad-diagrams/railroad-diagrams.css");class Yn extends o.Component{componentDidMount(){const e=q.findDOMNode(this);if(!e)throw new Error("could not find node");this.props.diagram.addTo(e)}shouldComponentUpdate(e){return this.props.diagram!==e.diagram}render(){return o.createElement("div",null)}}n("./src/calc2/views/help.css");class Fn extends o.Component{constructor(e){super(e),this.state={},this.changeLocale=this.changeLocale.bind(this)}changeLocale(e){r.c.language!==e&&window.confirm("Reload page to change language?")&&(r.c.changeLanguage(e),window.location.reload())}render(){return o.createElement(kn,{color:"light",light:!0,expand:"md",className:"mobileNavbar"},o.createElement(Bt,null,o.createElement(Gt,{nav:!0},o.createElement(et.a,{icon:Ze.b})),o.createElement(Zt,null,o.createElement(nn,{href:"/relax/calc"},o.createElement(et.a,{icon:Ze.c})," ",o.createElement(r.b,{id:"calc.navigation.calc"})),o.createElement(nn,{href:"/relax/help"},o.createElement(et.a,{icon:Ze.f})," ",o.createElement(r.b,{id:"calc.navigation.help"})),o.createElement(nn,{href:"/relax/imprint"},o.createElement(et.a,{icon:Ze.a})," ",o.createElement(r.b,{id:"calc.navigation.imprint"})),o.createElement(nn,{href:"https://github.com/dbis-uibk/relax/issues"},o.createElement(et.a,{icon:Ze.p})," ",o.createElement(r.b,{id:"calc.navigation.feedback"})),o.createElement(nn,{divider:!0}),o.createElement(nn,{onClick:()=>this.changeLocale("en")},"en"),o.createElement(nn,{onClick:()=>this.changeLocale("de")},"de"),o.createElement(nn,{onClick:()=>this.changeLocale("es")},"es"),o.createElement(nn,{onClick:()=>this.changeLocale("kr")},"kr"))),o.createElement(xn,{href:"/"},"RelaX"))}}class Wn extends o.Component{componentDidMount(){const e=In("#toc");let t=0,n=null,r=null,o=null;In("h2, h3, h4, h5, h6").each((function(){const i=In(this),a=i.attr("name")||i.attr("id")||"tocId"+t++;i.attr("name",a),i.attr("id",a);const s=''+i.text()+"";if(i.is("h2"))e.append(In(`
${s}
    `)),n=e.find("ul:last");else if(i.is("h3")){if(!n)throw new Error("malformed headings");n.append(In(`
  • ${s}
    • `)),r=n.find("ul:last")}else if(i.is("h4")){if(!r)throw new Error("malformed headings");r.append(In(`
    • ${s}
      • `)),o=r.find("ul:last")}else{if(!o)throw new Error("malformed headings");o.append(`
      • ${s}
      • `)}})),In("h1[id], h2[id], h3[id], h4[id], h5[id], h6[id]").each((function(){In(this).append(` `)}))}render(){return o.createElement("div",{className:"view-max"},o.createElement(An,null),o.createElement(Fn,null),o.createElement("div",{className:"view-content"},o.createElement("div",{className:"container"},o.createElement("h1",{id:"help"},"RelaX - Help"),o.createElement("div",{id:"toc"}),o.createElement("h2",{id:"tutorial-user"},"Tutorial - user"),o.createElement("h3",{id:"tutorial-user-coreconcepts"},"The core concepts"),o.createElement("p",null,"The goal of this tutorial is to give a quick introduction how to use the relational algebra calculator and its concepts. It assumes that you already know the relational algebra or are learning it from other sources."),o.createElement("p",null,"There is no real standard for the relational algebra like there is for SQL. So every book or teacher might have its slightly different interpretation and notation.",o.createElement("br",null),'The goal of this progam was to support the most commonly used "mathematical" notation used by ',o.createElement("a",{href:"http://infolab.stanford.edu/~ullman/dscb.html"},"Database Systems The Complete Book 2nd Edition by Hector Garcia-Molina, Jeff Ullman, and Jennifer Widom"),", ",o.createElement("a",{href:"http://www3.in.tum.de/teaching/bookDBMSeinf/",lang:"de"},"Datenbanksysteme: Eine Einführung by Alfons Kemper and André Eickler")," and ",o.createElement("a",{href:"http://en.wikipedia.org/wiki/Relational_algebra"},"Wikipedia - Relational Algebra")," and others."),o.createElement("h4",{id:"tutorial-user-relations"},"relations"),o.createElement("p",null,"The core element of the calculator is the relation (or table) which consists of a fixed number of attributes (or columns) in a fixed order (this is called the schema of the relation) and a set of tuples or rows containing the specific values."),o.createElement("p",null,"Each attribute has three distinct properties: its type, its position and its name."),o.createElement("p",null,"The type or domain of an attribute is either ",o.createElement("i",null,"string"),", ",o.createElement("i",null,"number"),", ",o.createElement("i",null,"date")," or ",o.createElement("i",null,"boolean"),".",o.createElement("br",null),"The type is used for example to determine if two values can be compared in a boolean expression or if two schemas are union compatible. In most cases the type of the attributes are obvious if you look at the values."),o.createElement("p",null,"The position of each attribute in a schema is fixed and can be used to adress the attributes.",o.createElement("br",null),"An example would be the projection of the first and third attribute or column of an arbitrary relation R: ",o.createElement("code",{className:"example block"},"π [1], [3] ( R )")),o.createElement("p",null,"The full qualified name of the attribute is a unique identifier of the attribute within the schema of its relation. It consists of the name itself and a relation qualifier and are written like in SQL as ",o.createElement("code",null,"R.a"),"where a is the name and R is the relation qualifier.",o.createElement("br",null),"An example would be the projectoin of the attributes a, b from a relation R: ",o.createElement("code",{className:"example block"},"π R.a, R.b ( R )"),o.createElement("br",null),"The default relation qualifier of each attribute is the name of its relation.",o.createElement("br",null),"If the attributes name without the qualifier is unique within the relation's schema, it also can be used to address a specific attribute.",o.createElement("br",null),"The previous example could also be written as ",o.createElement("code",null,"π a, b ( R )"),"."),o.createElement("p",null,"Each relation has a set of tuples (or rows). This means that there are no duplicate tuples within one relation and the duplicate-elimination is implicitly executed after every single step of the calculation.",o.createElement("br",null),"The tuples in the calculator have a defined order and unlike a normal database system all operations are implemented to preserve that order. This should help the users to see what has changed from one step to the next."),o.createElement("p",null,"so far we covered that"),o.createElement("ul",null,o.createElement("li",null,"relations are the core elements,"),o.createElement("li",null,"relations have a schema and a set of tuples,"),o.createElement("li",null,"each attribute in the schema has",o.createElement("ul",null,o.createElement("li",null,"data-type"),o.createElement("li",null,"a position"),o.createElement("li",null,"a fully qualified name (RELATION.attributename)"))),o.createElement("li",null,"and that each attribute can be addressed within an operation using",o.createElement("ul",null,o.createElement("li",null,"its position e.g. ",o.createElement("code",{className:""},"π [1], [2] ( R )"),","),o.createElement("li",null,"the attribute name e.g. ",o.createElement("code",{className:""},"π a, b ( R )")),o.createElement("li",null,"or its full quallified name if the unqualified is not unique e.g. ",o.createElement("code",{className:""},"π R.a, S.a ( R x S )"))))),o.createElement("h3",{id:"tutorial-user-plain-text-notation"},"Alternative plain text notation"),o.createElement("p",null,"Before we introduce how to use the operators this should be a quick introduction of a very handy feature of the relational algebra calculator: the alternative plain text notation"),o.createElement("p",null,'The "classNameic" mathematical notation uses greek letters like π, σ for the unary operations and special symbols like the join symbol ',o.createElement("span",{className:"math"},"⋈")," or the union symbol ",o.createElement("span",{className:"math"},"∪"),"for some binary operations.",o.createElement("br",null),"This symbols can be entered using the toolbar at the top of the editor."),o.createElement("p",null,'This calculator also supports a alternative syntax for all this symbols that follows two very simple rules: Every greek letter can be substituted with its name spelled out ("pi" for π, "gamma" for γ) and every other symbol has an equivalent name that is borrowed from SQL, programming languages like C and ',o.createElement("a",{href:"http://en.wikipedia.org/wiki/Set_theory"},"Set theory"),"."),o.createElement("p",null,"This substitutions should be easy to read and much more important very easy to write because you don't need any toolbar or mouse. The calculator also supports autocomplete: just press [CTRL]+[SPACE] to complete the current keyword.",o.createElement("br",null),"This feature should help you to write your statements more quickly and fluently."),o.createElement("code",{className:"example block"},"π R.a, S.a, S.b σ R.a = S.a ∧ ( R.a > 5 ∨ R.a ","<"," 0 ) ( R ⨯ S )"),"is equivalent to:",o.createElement("code",{className:"example block"},"pi R.a, S.a, S.b sigma R.a = S.a and ( R.a > 5 or R.a ","<"," 0 ) ( R cross join S )"),"In the following table you can see a list of all supported substitutions:",o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-condensed"},o.createElement("thead",null,o.createElement("tr",null,o.createElement("th",null,"classNameical notation"),o.createElement("th",null,"alternative notation"))),o.createElement("tbody",null,o.createElement("tr",null,o.createElement("td",{className:"math"},"π"),o.createElement("td",null,"pi")),o.createElement("tr",null,o.createElement("td",{className:"math"},"σ"),o.createElement("td",null,"sigma")),o.createElement("tr",null,o.createElement("td",{className:"math"},"ρ"),o.createElement("td",null,"rho")),o.createElement("tr",null,o.createElement("td",{className:"math"},"τ"),o.createElement("td",null,"tau")),o.createElement("tr",null,o.createElement("td",{className:"math"},"γ"),o.createElement("td",null,"gamma")),o.createElement("tr",null,o.createElement("td",{className:"math"},"∩"),o.createElement("td",null,"intersect")),o.createElement("tr",null,o.createElement("td",{className:"math"},"∪"),o.createElement("td",null,"union")),o.createElement("tr",null,o.createElement("td",{className:"math"},"-"),o.createElement("td",null,"\\")),o.createElement("tr",null,o.createElement("td",{className:"math"},"÷"),o.createElement("td",null,"/")),o.createElement("tr",null,o.createElement("td",{className:"math"},"⨯"),o.createElement("td",null,o.createElement("ul",null,o.createElement("li",null,"x"),o.createElement("li",null,"cross join")))),o.createElement("tr",null,o.createElement("td",{className:"math"},"⋈"),o.createElement("td",null,o.createElement("ul",null,o.createElement("li",null,"join"),o.createElement("li",null,"inner join"),o.createElement("li",null,"natural join")))),o.createElement("tr",null,o.createElement("td",{className:"math"},"⟕"),o.createElement("td",null,o.createElement("ul",null,o.createElement("li",null,"left join"),o.createElement("li",null,"left outer join")))),o.createElement("tr",null,o.createElement("td",{className:"math"},"⟖"),o.createElement("td",null,o.createElement("ul",null,o.createElement("li",null,"right join"),o.createElement("li",null,"right outer join")))),o.createElement("tr",null,o.createElement("td",{className:"math"},"⟗"),o.createElement("td",null,"full outer join")),o.createElement("tr",null,o.createElement("td",{className:"math"},"⋉"),o.createElement("td",null,"left semi join")),o.createElement("tr",null,o.createElement("td",{className:"math"},"⋊"),o.createElement("td",null,"right semi join")),o.createElement("tr",null,o.createElement("td",{className:"math"},"▷"),o.createElement("td",null,o.createElement("ul",null,o.createElement("li",null,"anti semi join"),o.createElement("li",null,"anti join")))),o.createElement("tr",null,o.createElement("td",{className:"math"},"←"),o.createElement("td",null,"<","-",o.createElement("code",{className:"example block"},"pi new_name ","<","- a ( R )"))),o.createElement("tr",null,o.createElement("td",{className:"math"},"→"),o.createElement("td",null,"->",o.createElement("code",{className:"example block"},"pi a -> new_name ( R )")))))),o.createElement("ul",null,o.createElement("li",null,"schema preserving operations - operations where the resulting relation has the same schema as its first argument-relation:",o.createElement("ul",null,o.createElement("li",null,"selection"),o.createElement("li",null,"union"),o.createElement("li",null,"intersection"),o.createElement("li",null,"subtraction"),o.createElement("li",null,"orderby"),o.createElement("li",null,"left outer join"),o.createElement("li",null,"left semi join"),o.createElement("li",null,"anti join")))),o.createElement("h3",{id:"tutorial-user-relalg"},"Relational algebra"),o.createElement("p",null,"For this Part we use the ",o.createElement("a",{href:"calc.htm?data=gist:2cfb981fbc5676182d64"},'"bank example" Dataset')," with 3 relations: ",o.createElement("i",null,"Customers"),", ",o.createElement("i",null,"Accounts")," and ",o.createElement("i",null,"PremiumCustomers"),". By convention relations start with a uppercase letter and attributes with a lower case letter."),o.createElement("h4",null,"Open and inspect dataset"),o.createElement("p",null,"Open the dataset used in this tutorial using the following link to the ",o.createElement("a",{href:"calc.htm?data=gist:2cfb981fbc5676182d64"},'"bank example" Dataset'),"."),o.createElement("p",null,"You find the relations and their attributes listed on the side and if you hover a relations name a preview of the first view tuples is displayed."),o.createElement("h4",{id:"tutorial-user-basic-query"},"The most basic query"),o.createElement("p",null,"After you have found the Dataset you can formulate the very first and most basic query in relational algebra: a relation without any further manipulation."),o.createElement("p",null,"Just enter the name of a relation into the code editor or click on the relation/attribute names to insert them into the code editor.",o.createElement("br",null),"Note that the editor supports auto completing the relation/attribute names of the current dataset and the operators with [CTRL]+[SPACE]"),o.createElement("p",null,"So if you want all tuples of the relation ",o.createElement("i",null,"Customer")," you should have the following statement: ",o.createElement("code",null,"Customer"),". And get all the tuples if you press the execute button or press [CTRL]+[RETURN]."),o.createElement("h4",{id:"tutorial-user-unary-operations"},"Unary operations"),o.createElement("p",null,"All unary operations have the same basic syntax ",o.createElement("code",null,o.createElement("i",null,"FUNCTION")," ARGUMENT ",o.createElement("strong",null,"("),"CHILD_EXPRESSION ",o.createElement("strong",null,")")),"."),o.createElement("p",{className:"hint"},"The braces around the ",o.createElement("code",null,"CHILD_EXPRESSION")," can be omitted. In this case the predefined ",o.createElement("a",{href:"#relalg-operator-precedence"},"operator precedence for relational algebra")," applies."),o.createElement("p",null,"A complete list of the supported relalg operations can be found here: ",o.createElement("a",{href:"#relalg-syntax"},"general syntax"),", ",o.createElement("a",{href:"#relalg-unary-operations"},"unary operations")," and ",o.createElement("a",{href:"#relalg-binary-operations"},"binary operations"),"."),o.createElement("p",null,"The projection is one of the basic operations that allow to choose which of the attributes of the parent relations should be included in the new one and in which order they should be."),o.createElement("p",null,"Renaming a relation (ρ) changes the qualifiers of all the relations attributes but does not touch the tuples."),o.createElement("p",null,"Renaming an attribute (ρ) only changes the name of a specific attribute (and leaves his relation-qualifier unchanged)."),o.createElement("p",null,"The statement ",o.createElement("code",null,"pi balance ( Accounts )")," returns a new relation with only the balance attribute."),o.createElement("p",null,"The next statement gets the balance with the account-id after renaming the relation to ",o.createElement("i",null,"A")," and renames one of the attributes."),o.createElement("code",{className:"example block"},"rho account_number ","<","- aid ( pi aid, A.balance ( rho A ( Accounts ) ) )"),o.createElement("p",{className:"hint"},"Like in SQL or most programming languages you can format your statement and use SQL like comments (with ",o.createElement("code",null,"-- ...")," or ",o.createElement("code",null,"/* ... */"),") to increase the readability."),o.createElement("p",null,"The next statement uses a selection to filter the tuples of a relation based on a boolean expression. The calculator supports complex boolean expression with functions and built in operator precedence.",o.createElement("br",null),"The attributes in the boolean expression can be given as name or numeric position like with the projection."),o.createElement("p",null,"The next statement selects all customers-ids of customers who have the same value for their firstname and lastname."),o.createElement("code",{className:"example block"},"-- this should return an relation with no tuples: pi cid ( sigma firstname=lastname ( Customers ) )"),o.createElement("p",null,"The next example uses a more complex expression to get all accounts with a balance over 100 or under -100."),o.createElement("code",{className:"example block"},"sigma balance > 100 or (balance*-1 > 100) ( Accounts ) -- (balance ","<"," -100) would also be correct"),o.createElement("p",null,"As a shorter alternative you can use a ",o.createElement("a",{href:"#relalg-valueexpr"},"function in your expression")," to get the same result:"),o.createElement("code",{className:"example block"},"sigma abs(balance) > 100 ( Accounts )"),o.createElement("h2",{id:"tutorial-maintainer"},"Tutorial - maintainer"),o.createElement("p",null,"Everybody can provide datasets that can be used in the relational algebra calculator and share them with others.",o.createElement("br",null),"We assume the scenario of a teacher wanting to provide a dataset for his/her students for this short tutorial."),o.createElement("p",null,"The datasets are specified in a simple text format and can be shared with others via ",o.createElement("a",{href:"https://gist.github.com/"},"GitHub Gists")," (a simple and free platform to share snippets).",o.createElement("br",null),"The shared gist gets an unique ID and the relational algebra calculator can load the dataset directly using this ID."),o.createElement("h3",{id:"tutorial-maintainer-create-dataset"},"Creating a dataset"),o.createElement("p",null,"The fist step is the creation of the dataset which is actually only a group of relation definitions with some additional information and is therefore refered as group in the specified format.",o.createElement("br",null),"The relations can then be used by the students to formulate the there statements.",o.createElement("br",null),"Lets assume we want to create a dataset of employees of a company."),"Every group definition starts with a simple header which (at least) contains the name of the group:",o.createElement("code",{className:"example block"},"group: bank example"),"every header field starts with the name of the field and is followed by a colon for single line values. The next (optional) header field we should specify is the description. It should contain information like who is maintaining this dataset or where to find additional information.",o.createElement("br",null),"In the description ",o.createElement("a",{href:"http://en.wikipedia.org/wiki/Markdown"},"Markdown")," can be used to format the text or set links to external resources.",o.createElement("p",null,"In our example we add a description that takes more than a single line and therefore we enclose the value in double brackets instead of using the colon."),o.createElement("code",{className:"example block"},"group: bank example description[[ the data for this dataset was generated using ","<","http://www.generatedata.com/> * the relation _Customers_ contains basic information about the customers of the bank. The relation _Accounts_ contains the basic information of a single account. Note that a customer can have any number of accounts. * the relation _PremiumCustomers_ contains the customer-ids of all customers with a total balance over 1000 ]]"),o.createElement("p",null,"The next step is to actually add the relations the students can use for their queries.",o.createElement("br",null),"The relation definitions are use the relational algebra syntax that can be used in this tool.",o.createElement("br",null),"Every relation is defined by a single variable assignment where the name of the variable is used as the relations name and the result of the expression defines the relation.",o.createElement("br",null),"The relalg expression can use all features that can be used in the tool and can also use other relations defined within the same dataset.",o.createElement("br",null),"Note that the name of the relation is used as the qualifier of each attribute/column."),o.createElement("p",null,"For the relation ",o.createElement("code",null,"Customers")," relation we use the ",o.createElement("a",{href:"#relalg-inline-relation"},"inline relation")," syntax as the most basic method to define the relation and can also be edited using the relation editor ",o.createElement("i",{className:"fa fa-table",title:"relation editor"})," which is a simple spread-sheet like editor. ",o.createElement("br",null),"The inline relations in combination with the editor should be very easy to use if you enter the data directly or if you have them as a csv/spread-sheet file."),o.createElement("code",{className:"example block"},"group: bank example\n\t\t\t\tdescription[[ the data for this dataset was generated using {'<'}http://www.generatedata.com/>\n\n\t\t\t\t* the relation _Customers_ contains basic information about the customers of the bank.\n\t\t\t\t* the relation _Accounts_ contains the basic information of a single account. Note that a customer can\n\t\t\t\thave any number of accounts.\n\t\t\t\t* the relation _PremiumCustomers_ contains the customer-ids of all customers with a total balance over\n\t\t\t\t1000\n\t\t\t\t]]\n\n\t\t\t\tCustomers = { cid firstname lastname\n\t\t\t\t1 Dexter Simpson\n\t\t\t\t2 Kaseem Gallagher\n\t\t\t\t3 Kuame Hamilton\n\t\t\t\t4 Robert Thompson\n\t\t\t\t5 Rhiannon Valentine\n\t\t\t\t6 Calvin Mays\n\t\t\t\t}\n\n\t\t\t\tAccounts = {\n\t\t\t\taid, cid, balance:number\n\t\t\t\t1, 1, 66\n\t\t\t\t2, 1, -304\n\t\t\t\t3, 2, 272\n\t\t\t\t4, 3, 3472\n\t\t\t\t5, 4, 975.7\n\t\t\t\t6, 4, 93\n\t\t\t\t7, 5, 534\n\t\t\t\t8, 5, -75.5\n\t\t\t\t}\n\t\t\t\t"),o.createElement("p",null,"As we can see the name of the relations are defined by the assignments.",o.createElement("br",null),"The inline-relations are enclosed by curly braces and contain the names of the attributes/columns in the first line and then a tuple/row per line where the values are simply separated by whitespace. You can also other seperators and can define the types explicitly as we can see at the Accounts relation. For further information can be found at ",o.createElement("a",{href:"#relalg-inline-relation"},"inline relation description"),"."),o.createElement("p",null,"Note that, unlike the variables used in a query, the definition of a new relation implicitly sets the attribute qualifier to the name of the relation. So the schema of the account relation is ",o.createElement("code",null,"(Accounts.aid, Accounts.cid, Accounts.balance)"),". This allows each attribute to be accessible with this name."),o.createElement("p",null,"The last relation we need to add in this example is the relation containing the banks premium Customers.",o.createElement("br",null),"They are specified by using the other two relations in a simple relational algebra statement that selects all customers with a total balance over 1000."),o.createElement("code",{className:"example block"},"group: bank example\n\t\t\t\tdescription[[ the data for this dataset was generated using {'<'}http://www.generatedata.com/>\n\n\t\t\t\t* the relation _Customers_ contains basic information about the customers of the bank.\n\t\t\t\t* the relation _Accounts_ contains the basic information of a single account. Note that a customer can\n\t\t\t\thave any number of accounts.\n\t\t\t\t* the relation _PremiumCustomers_ contains the customer-ids of all customers with a total balance over\n\t\t\t\t1000\n\t\t\t\t]]\n\n\t\t\t\tCustomers = { cid firstname lastname\n\t\t\t\t1 Dexter Simpson\n\t\t\t\t2 Kaseem Gallagher\n\t\t\t\t3 Kuame Hamilton\n\t\t\t\t4 Robert Thompson\n\t\t\t\t5 Rhiannon Valentine\n\t\t\t\t6 Calvin Mays\n\t\t\t\t}\n\n\t\t\t\tAccounts = {\n\t\t\t\taid, cid, balance:number\n\t\t\t\t1, 1, 66\n\t\t\t\t2, 1, -304\n\t\t\t\t3, 2, 272\n\t\t\t\t4, 3, 3472\n\t\t\t\t5, 4, 975.7\n\t\t\t\t6, 4, 93\n\t\t\t\t7, 5, 534\n\t\t\t\t8, 5, -75.5\n\t\t\t\t}\n\n\t\t\t\tPremiumCustomers =\n\t\t\t\t\tpi cid (\n\t\t\t\t\t\tsigma sum > 1000 (\n\t\t\t\t\t\t\tgamma cid; sum(balance)->sum (\n\t\t\t\t\t\t\t\tAccounts\n\t\t\t\t\t\t\t\tjoin Customers\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t"),o.createElement("p",null,"We have now seen how to define a dataset with its header containing the name and the description followed by relational algebra assignments defining the relations of the dataset."),o.createElement("p",null,"We can paste this definition directly in the ",o.createElement("i",null,"Group Editor")," to load and use it.",o.createElement("br",null),"In the next section we want to look at how we can publish this definition so that we give our students a single url or id to directly load the dataset."),o.createElement("h3",{id:"tutorial-maintainer-share-dataset"},"Share a dataset"),o.createElement("p",null,"If we want to share the definition of a dataset with other people we could simply give them the definition and they load it using the ",o.createElement("i",null,"group editor"),", but that would not be that practical for most cases."),o.createElement("p",null,"The simpler solution (for the users) is to publish the definition as a ",o.createElement("a",{href:"https://gist.github.com/"},"GitHub Gist")," and share the ID of the gist with others."),o.createElement("p",null,"Just create a gist with the definition as its content (the filename does not matter) and publish it. The ID of the Gist can now be found at the top of the page as ",o.createElement("i",null,"gist:xxxxxxxxxxxx")," or in the url after the last slash."),o.createElement("p",null,"This ID can then be shared and loaded in the interface or the calculator can be called directly with a specific ID by using using the parameter ",o.createElement("code",null,"?data=gist:xxxxxxxxxxxxxx"),"."),o.createElement("p",null,"For example the simple bank definition of this tutorial has been published as a ",o.createElement("a",{href:"https://gist.github.com/ragtime/2cfb981fbc5676182d64"},"Gist with the ID 2cfb981fbc5676182d64")," and can therefore be loaded directly by appending ",o.createElement("code",null,"?data=gist:2cfb981fbc5676182d64"),"to the url of the calculator."),o.createElement("h2",{id:"relalg-reference"},"Reference - relational algebra"),o.createElement("h3",{id:"relalg-syntax"},"General syntax"),o.createElement("div",null,o.createElement("h4",{id:"relalg-assignment"},"assignment"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"syntax"),o.createElement("td",null,o.createElement("code",null,o.createElement("i",null,"NAME")," ",o.createElement("strong",null,"=")," ",o.createElement("i",null,"EXPRESSION"))))))),o.createElement("div",null,o.createElement("p",null,"Defines a new local variable with the name ",o.createElement("i",null,"NAME"),"; its content is defined by",o.createElement("i",null,"EXPRESSION")),o.createElement("p",null,"The name of the new relation must be unique."),o.createElement("p",null,"The definition has to be executed with the statement."),o.createElement("div",{className:"example"},o.createElement("code",null,"TestA = π a,b R TestB = σ d > 0 S -- statement using the variable TestA join TestB")),o.createElement("p",null,"An assignment (= definition of a variable) is no valid relational algebra expression on its own. If you miss the acutal query a error is thrown (",o.createElement("i",null,"Error: only assignments found; query is missing"),")."),o.createElement("div",{className:"example"},o.createElement("code",null,"-- this is the definition of the variable Test = π Customer.firstname, surname ( Customer ) -- this is the actual query/statement using the variable Test")),o.createElement("p",null,"The defined variable can be used like the assigned expression could be used because every usage of the variable gets replaced with its definition before the query gets executed.",o.createElement("br",null),"This also means that the variable-name has no influence on the schema of the expression and the names of the attributes/columns are not affected by assignment:",o.createElement("code",{className:"block example"},"X = R X join S"),"The attributes of the relation R are only accessible with its original names (R.a, R.b, ..), and are not affected by the assignment."),o.createElement("p",null,"There is a known problem when the last assignment ends with a natural join and the query consists of a single relation:"),o.createElement("code",null,"A = S join R A -- this is the query"),o.createElement("p",null,"The statement is ambiguous and the parser interprets it as ",o.createElement("code",null,"A = (S join R A)"),"where R is interpreted as a column argument for the theta-join and therefore detects a cyclic usage of the variable A."),o.createElement("p",null,"Solution: To get the expected behaviour you have to set braces around the assigned expression like ",o.createElement("code",null,"A = (S join R) A")))),o.createElement("div",null,o.createElement("h4",{id:"relalg-comment-sl"},"single-line comment"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"syntax"),o.createElement("td",null,o.createElement("code",null,o.createElement("strong",null,"-- "),o.createElement("i",null,"COMMENT_TEXT"),o.createElement("i",null,"EXPRESSION"))))))),o.createElement("div",null,o.createElement("p",null,"the '--' must be followed by at least one whitespace charater! inserts a comment; its text goes until the end of the line"),o.createElement("p",null,"comments are recognized as whitespace"),o.createElement("div",{className:"example"},o.createElement("code",null,"Test =",o.createElement("b",null,"-- This is the expression that is assigned to Test:"),"π Customer.firstname, surname ( Customer )")))),o.createElement("div",null,o.createElement("h4",{id:"relalg-relation-name"},"pre defined relation"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"syntax"),o.createElement("td",null,o.createElement("code",null,o.createElement("i",null,"RELATION_NAME"))))))),o.createElement("div",null,o.createElement("p",null,"Uses a pre defined relation with the name ",o.createElement("i",null,"RELATION_NAME")),o.createElement("p",null,"The code completion only works for this relations."),o.createElement("div",{className:"example"},o.createElement("code",null,"( Customers ) cross join ( Accounts )")))),o.createElement("div",null,o.createElement("h4",{id:"relalg-comment-ml"},"multi-line comment"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"syntax"),o.createElement("td",null,o.createElement("code",null,o.createElement("strong",null,"/* "),o.createElement("i",null,"COMMENT_TEXT"),o.createElement("strong",null," */"),o.createElement("i",null,"EXPRESSION"))))))),o.createElement("div",null,o.createElement("p",null,"inserts a comment that can span multiple lines"),o.createElement("p",null,"comments are recognized as whitespace"),o.createElement("div",{className:"example"},o.createElement("code",null,o.createElement("b",null,"/* This is a very very long comment */"),"Test = π Customer.firstname, surname ( Customer )")))),o.createElement("div",null,o.createElement("h4",{id:"relalg-inline-relation"},"inline-relation"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"syntax"),o.createElement("td",null,o.createElement("code",null,o.createElement("b",null,"{"),o.createElement("i",null,"COLUMN_NAME_1"),":",o.createElement("i",null,"COLUMN_TYPE_1")," ...",o.createElement("i",null,"ROW_1"),o.createElement("i",null,"ROW_2"),"...",o.createElement("b",null,"}"))))))),o.createElement("div",null,o.createElement("p",null,"The inline-relation is a temporary relation that can be defined directly in the statement. It is only valid in the defining statement"),o.createElement("p",null,"Every inline-relation is a valid expression and thus can be used at any position a",o.createElement("i",null,"EXPRESSION")," is expected."),o.createElement("p",null,"The inline-relation is defined by a header, that specifies the schema of the relation and the rows containing the values and is surrounded by curly braces."),o.createElement("div",null,"The header is defined by a sequence of",o.createElement("code",null,o.createElement("i",null,"QUALIFIER.COLUMN_NAME"),":",o.createElement("i",null,"COLUMN_TYPE"))," ",o.createElement("b",null,"separated by any whitespace, comma or semicolon."),"The ",o.createElement("i",null,"QUALIFIER")," is optional. Also the ",o.createElement("i",null,"COLUMN_TYPE")," can be omitted if the type is well defined by the values of that column. The first non null value of a column defines its type.",o.createElement("br",null),"True and false (case insensitive without quotes) are reserved for a boolean type. They can be used as a simple string but they do not define the type of the column as string.",o.createElement("br",null),"The ",o.createElement("i",null,"COLUMN_TYPE")," can be one of the following",o.createElement("ul",null,o.createElement("li",null,"string"),o.createElement("li",null,"number"),o.createElement("li",null,"date"),o.createElement("li",null,"boolean")),o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Optional)(Object(Hn.Sequence)(Object(Hn.NonTerminal)("qualifier"),".")),Object(Hn.NonTerminal)("column-name"),Object(Hn.Optional)(Object(Hn.Sequence)(":",Object(Hn.Choice)(0,"string","number","date","boolean"))))}))),o.createElement("p",null,"The rows of the relation are defined by a list of values per row with the type of the corresponding column. The values are ",o.createElement("b",null,"separated by whitespace comma or semicolon."),o.createElement("br",null),"Simple strings only containing letters, numbers, hyphens, underlines, dots or periods ([0-9a-zA-Z\\-_\\.]+) can be written without single quotes. ",o.createElement("i",null,"NULL")," and ",o.createElement("i",null,"null")," are constant values. If null, true or false should be used as string they have te be quoted.",o.createElement("br",null),"More complex strings must be surrounded by single quotes: ",o.createElement("i",null,"'content'")," or ",o.createElement("i",null,"content"),"but '' or 'long content containing spaces and special characters like !' or 'null'.",o.createElement("br",null),"Dates are written in ISO-format: YYYY-MM-DD without single quotes",o.createElement("br",null),"A null-value can be written as ",o.createElement("i",null,"null")," or ",o.createElement("i",null,"NULL")," (without single quotes).",o.createElement("br",null),"Numbers could be integers in the form (-?[0-9]+) or floats in the form (-?[0-9]+\\.[0-9]+).",o.createElement("br",null),"Numbers in single quotes are recognized as numbers if the column type is defined as number or has been detected to be number from a previous value; otherwise it will be a string value..",o.createElement("br",null),"A boolean value is denoted as either ",o.createElement("i",null,"true")," or ",o.createElement("i",null,"false")," (case insensitive)."),o.createElement("p",null,"The header and rows can be indented if needed."),o.createElement("div",{className:"example"},o.createElement("code",null,"-- type for column b is defined by the first value\n\t\t\t\trho A {\n\t\t\t\t\ta:number, b\n\t\t\t\t\t1, 2\n\t\t\t\t\t3, 4\n\t\t\t\t}\n\t\t\t\tcross join\n\t\t\t\t{\n\t\t\t\t\ta:string X.b:date c:number\n\t\t\t\t\tAlpha 1970-01-01 1\n\t\t\t\t\t'Beta 2' 1970-01-02 3\n\t\t\t\t\t'' 1970-01-03 4\n\t\t\t\t}")))),o.createElement("div",null,o.createElement("h4",{id:"relalg-relalgexpr"},"relational algebra expression"),o.createElement("div",null,o.createElement("p",null,"A valid relational algebra expression is built by connecting ",o.createElement("i",null,"relation-name")," or ",o.createElement("i",null,"inline-relation"),"as atoms with the defined unary and binary operators."),"So a relational algebra expression is recursively defined as follows:",o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Choice)(0,Object(Hn.Sequence)("(",Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),")"),Object(Hn.NonTerminal)("relation-name","#relalg-relation-name"),Object(Hn.NonTerminal)("inline-relation","#relalg-inline-relation"),Object(Hn.Sequence)(Object(Hn.Choice)(0,Object(Hn.NonTerminal)("projection","#relalg-operations-projection"),Object(Hn.NonTerminal)("selection","#relalg-operations-selection"),Object(Hn.NonTerminal)("rename relation","#relalg-operations-renamerelation"),Object(Hn.NonTerminal)("rename column","#relalg-operations-renamecolumn"),Object(Hn.NonTerminal)("order by","#relalg-operations-orderby"),Object(Hn.NonTerminal)("group by","#relalg-operations-groupby")),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))),Object(Hn.Choice)(1,Object(Hn.Skip)(),Object(Hn.Sequence)(Object(Hn.Choice)(0,Object(Hn.NonTerminal)("intersection","#relalg-operations-intersection"),Object(Hn.NonTerminal)("union","#relalg-operations-union"),Object(Hn.NonTerminal)("division","#relalg-operations-division"),Object(Hn.NonTerminal)("subtraction","#relalg-operations-subtraction"),Object(Hn.NonTerminal)("cross product","#relalg-operations-crossjoin"),Object(Hn.NonTerminal)("θ-join","#relalg-operations-innerjoin"),Object(Hn.NonTerminal)("natural join","#relalg-operations-naturaljoin"),Object(Hn.NonTerminal)("left outer join","#relalg-operations-leftjoin"),Object(Hn.NonTerminal)("right outer join","#relalg-operations-rightjoin"),Object(Hn.NonTerminal)("full outer join","#relalg-operations-fulljoin"),Object(Hn.NonTerminal)("left semi join","#relalg-operations-leftsemijoin"),Object(Hn.NonTerminal)("right semi join","#relalg-operations-rightsemijoin"),Object(Hn.NonTerminal)("anti semi join","#relalg-operations-antijoin")),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))))})))),o.createElement("h3",{id:"relalg-unary-operations"},"Unary operations"),"Each unary operation follows the following syntax:",o.createElement("div",{className:"b-syntax"},o.createElement("code",null,o.createElement("i",null,"FUNCTION")," ARGUMENT ",o.createElement("strong",null,"(")," CHILD_EXPRESSION ",o.createElement("strong",null,")"))),"The parentheses are Optional.",o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-projection"},"projection"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"π")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"pi")),o.createElement("tr",null,o.createElement("th",null,"example"),o.createElement("td",null,o.createElement("code",{className:"relalg"},"pi a, b ( R )")))))),o.createElement("p",null,"The argument is a subset of columns of the schema of the ",o.createElement("i",null,"CHILD_EXPRESSION")," or a ",o.createElement("a",{href:"#relalg-valueexpr"},"value expression")),o.createElement("div",{className:"example"},o.createElement("code",null,"π Customer.firstname, surname ( Customer )")),o.createElement("div",{className:"example"},o.createElement("code",null,"pi c.id, [1] ( ρ c ( Customer ) )")),"Expressions can be used to create more complex statements using one or more columns of a single row.",o.createElement("div",{className:"example"},o.createElement("code",null,"pi c.id, lower(username)->user, concat(firstname, concat(' ', lastname))->fullname ( ρ c ( Customer ) )")),"The virtual column ",o.createElement("i",null,"ROWNUM")," used in previous versions is not supported any more but the ",o.createElement("code",null,"rownum()")," expression can be used to get the same information. And it can also be used directly in the boolean condition of a selection or join.",o.createElement("div",{className:"example"},"In this example the top 5 customers with the most orders are selected, where countOrders could be the result of a previous aggregation.",o.createElement("code",null,"pi firstname, lastname sigma rownum() ","<","= 5 tau countOrders desc Customer")),o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Sequence)(Object(Hn.Choice)(0,"π","pi"),Object(Hn.OneOrMore)(Object(Hn.NonTerminal)("column","#relalg-column"),",")),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))}))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-selection"},"selection"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"σ")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"pi")),o.createElement("tr",null,o.createElement("th",null,"example"),o.createElement("td",null,o.createElement("code",{className:"relalg"},"sigma a > 2 ( R )")))))),o.createElement("p",null,"The argument is a ",o.createElement("a",{href:"#relalg-valueexpr"},"boolean expression")," that each row of ",o.createElement("i",null,"CHILD_EXPRESSION"),"is checked on"),o.createElement("div",{className:"example"},o.createElement("code",null,"σ firstname = 'Bob' or firstname = 'Alice' ( Customer )")),o.createElement("div",{className:"example"},o.createElement("code",null,"σ (id > 10 and id ","<"," 100) or id = 42 ( Customer )")),o.createElement("div",{className:"example"},"Selecting all customers with a firstname that has an even length.",o.createElement("code",null,"σ mod(length(firstname),2) = 0 ( Customer )")),o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Sequence)(Object(Hn.Choice)(0,"σ","sigma"),Object(Hn.NonTerminal)("boolean-expression","#relalg-valueexpr")),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))}))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-renamerelation"},"rename relation"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"ρ")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"rho")),o.createElement("tr",null,o.createElement("th",null,"example"),o.createElement("td",null,o.createElement("code",{className:"relalg"},"( R ) join R.a = X.b (rho X ( R ))")))))),o.createElement("div",null,"The argument is the new name for the Relation returned by ",o.createElement("i",null,"CHILD_EXPRESSION"),o.createElement("div",{className:"example"},'rename the Relation from "Customer" to "a":',o.createElement("code",null,"π a.id, a.firstname ( ρ a ( Customer ) )")),o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Sequence)(Object(Hn.Choice)(0,"ρ","rho"),Object(Hn.NonTerminal)("new relation name")),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))})))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-renamecolumn"},"rename column"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"ρ")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"rho")),o.createElement("tr",null,o.createElement("th",null,"example"),o.createElement("td",null,"the old and the new column names in a list (see example) ",o.createElement("br",null),'"←" can be substituted with "',"<",'-"',o.createElement("code",{className:"relalg block"},"pi x, b rho a->x {a, b\n\t\t\t\t\t\t1, 2\n\t\t\t\t\t\t3, 4\n\t\t\t\t\t}")))))),o.createElement("div",null,"The argument is the old and the new column names in a list (see example) ",o.createElement("br",null),'"←" can be substituted with "',"<",'-"',o.createElement("div",{className:"example"},"rename the columns id and firstname to myId and foobar:",o.createElement("code",null,"ρ myId←id, foobar←firstname (π id, firstname ( Customer ) )")),o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Sequence)(Object(Hn.Choice)(0,"ρ","rho"),Object(Hn.OneOrMore)(Object(Hn.Choice)(0,Object(Hn.Sequence)(Object(Hn.NonTerminal)("new name"),Object(Hn.Choice)(0,"←","<-"),Object(Hn.NonTerminal)("column","#relalg-column")),Object(Hn.Sequence)(Object(Hn.NonTerminal)("column","#relalg-column"),Object(Hn.Choice)(0,"→","->"),Object(Hn.NonTerminal)("new name"))),",")),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))})))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-orderby"},"order by"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"τ")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"tau")),o.createElement("tr",null,o.createElement("th",null,"example"),o.createElement("td",null,o.createElement("code",{className:"relalg"},"tau a asc, b desc ( R )")))))),o.createElement("div",null,"The argument is a list of columns by which the relation should be ordered (see examples)",o.createElement("div",{className:"example"},"order the result by the first column (default is ascending) and the second column descending:",o.createElement("code",null,"τ [1], firstname desc (π id, firstname ( Customer ) )")),o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Sequence)(Object(Hn.Choice)(0,"τ","tau"),Object(Hn.OneOrMore)(Object(Hn.Sequence)(Object(Hn.NonTerminal)("column","#relalg-column"),Object(Hn.Choice)(0,Object(Hn.Skip)(),"asc","desc")),",")),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))})))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-groupby"},"group by"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"γ")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"gamma")),o.createElement("tr",null,o.createElement("th",null,"example"),o.createElement("td",null,o.createElement("code",{className:"relalg"},"gamma a, count(*)->x ( R )")))))),o.createElement("div",null,"The argument is a list of columns to group by, separated by commas followed by a semicolon",o.createElement("br",null),"and a list of aggregate functions to apply with their new name in form ",o.createElement("span",null,"AGG( COLUMN ) -> NEW_NAME"),o.createElement("div",{className:"example"},"order the result by the first column (default is ascending) and the second column descending:",o.createElement("code",null,"γ a, b ; sum(c)->x ( Customer )")),o.createElement("p",null,"If no grouping columns are provided the entire relation is the group."),o.createElement("div",null,"supported aggregate functions by type:",o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table"},o.createElement("thead",null,o.createElement("tr",null,o.createElement("td",null," "),o.createElement("th",null,"number"),o.createElement("th",null,"string"),o.createElement("th",null,"date"))),o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"COUNT( * )"),o.createElement("td",null,"yes"),o.createElement("td",null,"yes"),o.createElement("td",null,"yes")),o.createElement("tr",null,o.createElement("th",null,"COUNT( column )"),o.createElement("td",null,"yes"),o.createElement("td",null,"yes"),o.createElement("td",null,"yes")),o.createElement("tr",null,o.createElement("th",null,"MIN( column )"),o.createElement("td",null,"yes"),o.createElement("td",null,"yes"),o.createElement("td",null,"yes")),o.createElement("tr",null,o.createElement("th",null,"MAX( column )"),o.createElement("td",null,"yes"),o.createElement("td",null,"yes"),o.createElement("td",null,"yes")),o.createElement("tr",null,o.createElement("th",null,"SUM( column )"),o.createElement("td",null,"yes"),o.createElement("td",null,"no"),o.createElement("td",null,"no")),o.createElement("tr",null,o.createElement("th",null,"AVG( column )"),o.createElement("td",null,"yes"),o.createElement("td",null,"no"),o.createElement("td",null,"no")))))),o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Stack)(Object(Hn.Sequence)(Object(Hn.Choice)(0,"γ","gamma"),Object(Hn.Sequence)(Object(Hn.ZeroOrMore)(Object(Hn.NonTerminal)("column","#relalg-column"),","),";",Object(Hn.OneOrMore)(Object(Hn.Sequence)(Object(Hn.Choice)(0,"COUNT(*)",Object(Hn.Sequence)(Object(Hn.Choice)(0,"COUNT","MIN","MAX","SUM","AVG"),"(",Object(Hn.NonTerminal)("column","#relalg-column"),")")),Object(Hn.Choice)(0,"→","->"),Object(Hn.NonTerminal)("new name")),","))),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr")))})))),o.createElement("h3",{id:"relalg-binary-operations"},"Binary operations"),"Each binary operation follows the following syntax:",o.createElement("div",{className:"b-syntax"},o.createElement("code",null,o.createElement("strong",null,"(")," CHILD_EXPRESSION ",o.createElement("strong",null,")")," ",o.createElement("strong",null,"FUNCTION")," ARGUMENT ",o.createElement("strong",null,"("),"CHILD_EXPRESSION ",o.createElement("strong",null,")"))),"The parentheses are Optional.",o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-intersection"},"intersection - ∩"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"∩")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"intersect"))))),o.createElement("div",null,"no argument",o.createElement("div",{className:"example"},o.createElement("code",null,"( Customer ) ∩ ( Customer )")),"the schemas must be unifiable",o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"∩","intersect")),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))})))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-union"},"union - ∪"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"∪")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"union"))))),o.createElement("div",null,"no argument",o.createElement("div",{className:"example"},o.createElement("code",null,"( Customer ) ∪ ( Customer )")),"the schemas must be unifiable",o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"∪","union")),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))})))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-division"},"division"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"÷")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"/"))))),o.createElement("div",null,"no argument",o.createElement("div",{className:"example"},o.createElement("code",null,"( Customer ) ÷ ( Customer )")),"the schemas must be unifiable",o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"÷","/")),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))})))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-subtraction"},"subtraction / set-difference"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"-"),o.createElement("td",{className:"math"},"∪")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"\\",o.createElement("br",null),"except"))))),o.createElement("div",null,"no argument",o.createElement("div",{className:"example"},o.createElement("code",null,"( pi firstname ( Customer ) ) - ( rho test","<","-lastname ( pi lastname ( Customer ) ) )")),"the schemas must be unifiable",o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"-","\\","except")),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))})))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-crossjoin"},"cross product"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"⨯")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"cross join"))))),o.createElement("div",null,"no argument",o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"⨯",Object(Hn.Sequence)("cross","join"))),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))})))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-innerjoin"},"Theta-join / θ-join"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"⋈")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"join",o.createElement("br",null),"inner join"))))),o.createElement("div",null,"join condition",o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Stack)(Object(Hn.Sequence)(Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"⋈",Object(Hn.Sequence)(Object(Hn.Optional)("inner"),"join")),Object(Hn.NonTerminal)("boolean-expression","#relalg-valueexpr"))),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr")))}))),o.createElement("p",null,"Special case:",o.createElement("br",null),"The name of a single boolean column (like ",o.createElement("code",null,"R join a S"),") can not be used directly as a join condition due to ambiguities in the relational algebra syntax.",o.createElement("br",null),"The column must either be specified with its qualifier (",o.createElement("code",null,"R join R.a S"),") or wrapped in parentheses (",o.createElement("code",null,"R join (a) S"),").",o.createElement("br",null),"This is not necessary for more complex boolean expressions. The problem is only that the single column name can not be distinguished from a relation name: the expression ",o.createElement("code",null,"X=R join S X")," could be interpreted as ",o.createElement("code",null,"A=(R join S A)")," instead of ",o.createElement("code",null,"A=(R join S) A"),".")),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-naturaljoin"},"natural join"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"⋈")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"join",o.createElement("br",null),"natural join"))))),o.createElement("div",null,"no argument",o.createElement("div",{className:"example"},o.createElement("code",{className:"block"},"ρ a ( Customer )",o.createElement("span",{className:"math"},"⋈")," a.name ","<"," b.name ( ρ b ( Customer ) )")),o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"⋈",Object(Hn.Sequence)("natural","join"))),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))})))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-leftjoin"},"left outer join"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"⟕")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"left outer join",o.createElement("br",null),"left join"))))),o.createElement("div",null,"optional join condition; if no join condition is given it acts as a natural left outer join",o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Stack)(Object(Hn.Sequence)(Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"⟕",Object(Hn.Sequence)("left",Object(Hn.Optional)("outer"),"join")),Object(Hn.Optional)(Object(Hn.NonTerminal)("boolean-expression","#relalg-valueexpr")))),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr")))})))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-rightjoin"},"right outer join"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"⟖")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"right outer join",o.createElement("br",null),"right join"))))),o.createElement("div",null,"optional join condition; if no join condition is given it acts as a natural right outer join",o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Stack)(Object(Hn.Sequence)(Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"⟖",Object(Hn.Sequence)("right",Object(Hn.Optional)("outer"),"join")),Object(Hn.Optional)(Object(Hn.NonTerminal)("boolean-expression","#relalg-valueexpr")))),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr")))})))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-fulljoin"},"full outer join"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"⟗")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"full outer join"))))),o.createElement("div",null,"optional join condition; if no join condition is given it acts as a natural full outer join",o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Stack)(Object(Hn.Sequence)(Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"⟗",Object(Hn.Sequence)("full","outer","join")),Object(Hn.Optional)(Object(Hn.NonTerminal)("boolean-expression","#relalg-valueexpr")))),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr")))})))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-leftsemijoin"},"left semi join"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"⋉")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"left semi join"))))),o.createElement("div",null,"no argument",o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"⋉",Object(Hn.Sequence)("left","semi","join"))),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))}))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-rightsemijoin"},"right semi join"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"⋊")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"right semi join"))))),o.createElement("div",null,"no argument",o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"⋊",Object(Hn.Sequence)("right","semi","join"))),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))})))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-antijoin"},"anti semi join"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"▷")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"anti semi join",o.createElement("br",null),"anti join"))))),o.createElement("div",null,"no argument",o.createElement("br",null),o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Stack)(Object(Hn.Sequence)(Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"▷",Object(Hn.Sequence)("anti",Object(Hn.Optional)("semi"),"join")))),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr")))})))),o.createElement("h3",{id:"relalg-operator-precedence"},"Operator precedence"),o.createElement("p",null,"The operator precedence allows to obmit most of braces.",o.createElement("br",null),"The used precedence is shown in the table below.",o.createElement("br",null),"All operators are left associative."),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table"},o.createElement("thead",null,o.createElement("tr",null,o.createElement("th",null,"order of precedence"),o.createElement("th",null,"Operator"))),o.createElement("tbody",null,o.createElement("tr",null,o.createElement("td",null,"0"),o.createElement("td",null,o.createElement("a",{href:"#relalg-relation-name"},"relation-name"),",",o.createElement("a",{href:"#relalg-inline-relation"},"inline-relation"))),o.createElement("tr",null,o.createElement("td",null,"1"),o.createElement("td",null,o.createElement("a",{href:"#relalg-operations-projection"},"projection"),",",o.createElement("a",{href:"#relalg-operations-selection"},"selection"),",",o.createElement("a",{href:"#relalg-operations-renamecolumn"},"rename (columns)"),",",o.createElement("a",{href:"#relalg-operations-renamerelation"},"rename (relations)"),",",o.createElement("a",{href:"#relalg-operations-groupby"},"group"),",",o.createElement("a",{href:"#relalg-operations-orderby"},"order by"))),o.createElement("tr",null,o.createElement("td",null,"2"),o.createElement("td",null,o.createElement("a",{href:"#relalg-operations-crossjoin"},"cross product"),",",o.createElement("a",{href:"#relalg-operations-innerjoin"},"theta join"),",",o.createElement("a",{href:"#relalg-operations-naturaljoin"},"natural join"),",",o.createElement("a",{href:"#relalg-operations-leftjoin"},"left outer join"),",",o.createElement("a",{href:"#relalg-operations-rightjoin"},"right outer join"),",",o.createElement("a",{href:"#relalg-operations-fulljoin"},"full outer join"),",",o.createElement("a",{href:"#relalg-operations-leftsemijoin"},"left semi-join"),",",o.createElement("a",{href:"#relalg-operations-rightsemijoin"},"right semi-join"),",",o.createElement("a",{href:"#relalg-operations-antijoin"},"anti semi-join"),",",o.createElement("a",{href:"#relalg-operations-division"},"division"))),o.createElement("tr",null,o.createElement("td",null,"3"),o.createElement("td",null,o.createElement("a",{href:"#relalg-operations-intersection"},"intersection"))),o.createElement("tr",null,o.createElement("td",null,"4"),o.createElement("td",null,o.createElement("a",{href:"#relalg-operations-union"},"union"),",",o.createElement("a",{href:"#relalg-operations-subtraction"},"subtraction")))))),o.createElement("div",{className:"example"},o.createElement("code",null,"A join B x C"),o.createElement("br",null),"is equal to",o.createElement("br",null),o.createElement("code",null,"((A join B) x C)"),o.createElement("br",null),"because the cross product and the natural join are in the same precedence className."),o.createElement("div",{className:"example"},o.createElement("code",null,"sigma true A join sigma true B"),o.createElement("br",null),"is equal to",o.createElement("br",null),o.createElement("code",null,"(sigma true (A)) join (sigma true (B))"),o.createElement("br",null),"because the unary operators have a higher precedence than the binary operators."),o.createElement("h3",{id:"relalg-misc"},"Misc"),o.createElement("h4",{id:"relalg-column"},"Column"),"column is either",o.createElement("ul",null,o.createElement("li",null,'the name of a column: "columnName"'),o.createElement("li",null,'the number of the column (starting with 1): "[column-number]"'),o.createElement("li",null,'a full qualified column: "qualifier.columnName"'),o.createElement("li",null,"a value expression (if allowed for the specific operation)")),"the qualifier is optional if the column is unique in its schema.",o.createElement("h4",{id:"relalg-valueexpr"},"Value expressions"),"With most operators you can use a value-expression which connects one or more columns of a single row to calculate a new value. This is possible for:",o.createElement("ul",null,o.createElement("li",null,"the projection creating a new column (make sure to give the column a name)"),o.createElement("li",null,"the selection any expression evaluating to boolean can be used"),o.createElement("li",null,"for the joins any expression evaluating to boolean can be used; note that the ",o.createElement("code",null,"rownum()")," expression always represents the index of the lefthand relation")),"The expressions always operate on a single row/tuple of a table/relation.",o.createElement("br",null),"If you want to calculate values vertically over all values of a specific column/attribute you need to use group by with an aggregate function. The following table lists all functions and operators that can be used in an expression. They can be combined and nested in any arbitrary order but note that they do evaluate to a single type defined by the outer most expression. The following operators can be used:",o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table"},o.createElement("thead",null,o.createElement("tr",null,o.createElement("th",null,"syntax"),o.createElement("th",null,"returns type"),o.createElement("th",null,"description"))),o.createElement("tbody",null,o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"a AND b")),o.createElement("td",null,"boolean"),o.createElement("td",null,"logical and")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"a OR b")),o.createElement("td",null,"boolean"),o.createElement("td",null,"logical or")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"a XOR b")),o.createElement("td",null,"boolean"),o.createElement("td",null,"logical exclusive or")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"NOT b")),o.createElement("td",null,"boolean"),o.createElement("td",null,"logical not")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"a = b a != b a ","<"," b a > b a ","<","= b a >= b a != b")),o.createElement("td",null,"boolean"),o.createElement("td",null,"compares two values of the same type")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"a:string LIKE 'PATTERN'")),o.createElement("td",null,"boolean"),o.createElement("td",null,"returns true if expression evaluating to a string ",o.createElement("code",null,"a")," matches the pattern given as the second operand.",o.createElement("br",null),"The pattern has to be given as a string literal;",o.createElement("p",null,"An underscore (",o.createElement("code",null,"_"),") in the pattern stands for any single character and any percent sign (",o.createElement("code",null,"%"),") stands for any sequence of zero or more characters."))),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"a:string ILIKE 'PATTERN'")),o.createElement("td",null,"boolean"),o.createElement("td",null,"same as ",o.createElement("code",null,"LIKE")," but matches case-insensitive.",o.createElement("br",null),"This is not in the SQL standard but is a PostgreSQL extension.")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"a + b a - b a * b a / b a % b")),o.createElement("td",null,"number"),o.createElement("td",null,"arithmetic addition, subtraction, multiplication, division, modulo")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"rand()")),o.createElement("td",null,"number"),o.createElement("td",null,"returns a random number in the interval [0, 1]")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"rownum()")),o.createElement("td",null,"number"),o.createElement("td",null,"returns the index of the current row (starting with 0).",o.createElement("br",null),"If the function is used in a binary relational algebra expression (e.g. a join) it always represents the index of the left operand.")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"length(a:string)")),o.createElement("td",null,"number"),o.createElement("td",null,"returns the length of the string")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"date(a:string)")),o.createElement("td",null,"date"),o.createElement("td",null,"parses the given string to a date object. The string must be in the form YYYY-MM-DD")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"adddate(a:date, b:number)")),o.createElement("td",null,"date"),o.createElement("td",null,"adds the given number of days to date ",o.createElement("code",null,"a"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"subdate(a:date, b:number)")),o.createElement("td",null,"date"),o.createElement("td",null,"subtracts the given number of days from date ",o.createElement("code",null,"a"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"now() transaction_timestamp() statement_timestamp()")),o.createElement("td",null,"date"),o.createElement("td",null,"returns a timestamp representing the start of the query execution",o.createElement("br",null),"transaction- and statement start are the very same value due to the lack of a transaction concept")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"clock_timestamp()")),o.createElement("td",null,"date"),o.createElement("td",null,"returns the current timestamp while executing the query")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"year(a:date)")),o.createElement("td",null,"number"),o.createElement("td",null,"returns the year component of a given date")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"month(a:date)")),o.createElement("td",null,"number"),o.createElement("td",null,"returns the month component of a given date as a number. (1 = Sunday, 2 = Monday, ..., 7 = Saturday)")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"day(a:date) dayofmonth(a:date)")),o.createElement("td",null,"number"),o.createElement("td",null,"returns the day component of a given date as a number in the range 1 to 31")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"hour(a:date)")),o.createElement("td",null,"number"),o.createElement("td",null,"returns the hour component of a given date as a number in the range 0 to 23")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"minute(a:date)")),o.createElement("td",null,"number"),o.createElement("td",null,"returns the minute component of a given date as a number in the range 0 to 59")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"second(a:date)")),o.createElement("td",null,"number"),o.createElement("td",null,"returns the second component of a given date as a number in the range 0 to 59")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"concat(a:string [, ...])")),o.createElement("td",null,"string"),o.createElement("td",null,"concatenates the given strings")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"upper(a:string) ucase(a:string)")),o.createElement("td",null,"string"),o.createElement("td",null,"converts the given string to upper-case")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"lower(a:string) lcase(a:string)")),o.createElement("td",null,"string"),o.createElement("td",null,"converts the given string to lower-case")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"strlen(a:string)")),o.createElement("td",null,"number"),o.createElement("td",null,"number of characters of the string")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"abs(a:number)")),o.createElement("td",null,"number"),o.createElement("td",null,"the absolute value of the given number")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"add(a, b) sub(a, b) mul(a, b) div(a, b) mod(a, b)")),o.createElement("td",null,"number"),o.createElement("td",null,"arithmetic addition, ",o.createElement("br",null),"subtraction, ",o.createElement("br",null),"multiplication, ",o.createElement("br",null),"division or ",o.createElement("br",null),"modulo of the given numbers")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"round(a) floor(a) ceil(a)")),o.createElement("td",null,"number"),o.createElement("td",null,"round to nearest integer, ",o.createElement("br",null),"largest integer not greater than the argument or",o.createElement("br",null),"smallest integer not less than the argument")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",{className:"sql"},"coalesce(",o.createElement("strong",null,"value")," [, ...])")),o.createElement("td",null,"type of ",o.createElement("strong",null,"value")),o.createElement("td",null,"returns the first of its arguments that is not null or null if all arguments are null. Note that all arguments must have the same datatype.")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",{className:"sql"},"CASE WHEN ",o.createElement("strong",null,"condition")," THEN result [WHEN ...] [ELSE ",o.createElement("strong",null,"result"),"] END")),o.createElement("td",null,"type of ",o.createElement("strong",null,"result")),o.createElement("td",null,"returns the first result where the condition evaluates to true. If all conditions are false the else part is executed or null is returnt if the else part is missing. Note that all results must have the same datatype."))))),"The operator precedence is the same as used in ",o.createElement("a",{href:"https://dev.mysql.com/doc/refman/5.7/en/operator-precedence.html"},"MySQL")," (from strong to weak):",o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table"},o.createElement("thead",null,o.createElement("tr",null,o.createElement("th",null,"order of precedence"),o.createElement("th",null,"Operators"))),o.createElement("tbody",null,o.createElement("tr",null,o.createElement("td",null,"0"),o.createElement("td",null,"functions, constants, columns")),o.createElement("tr",null,o.createElement("td",null,"1"),o.createElement("td",null,"! (boolean not)")),o.createElement("tr",null,o.createElement("td",null,"2"),o.createElement("td",null,"- (unary minus)")),o.createElement("tr",null,o.createElement("td",null,"3"),o.createElement("td",null,"*, /, %")),o.createElement("tr",null,o.createElement("td",null,"4"),o.createElement("td",null,"-, +")),o.createElement("tr",null,o.createElement("td",null,"5"),o.createElement("td",null,"= (comparison), >=, >, ","<","=, ","<",", ","<",">, !=, LIKE, ILIKE")),o.createElement("tr",null,o.createElement("td",null,"6"),o.createElement("td",null,"CASE, WHEN, THEN, ELSE")),o.createElement("tr",null,o.createElement("td",null,"7"),o.createElement("td",null,"AND")),o.createElement("tr",null,o.createElement("td",null,"8"),o.createElement("td",null,"XOR")),o.createElement("tr",null,o.createElement("td",null,"9"),o.createElement("td",null,"OR, ||"))))),o.createElement("h2",{id:"sql-reference"},"Reference - SQL"),o.createElement("p",null,"The goal of the SQL mode of the relational algebra calculator is to provide a translation from SQL to relational algebra to show how they are related. It does not support all features a real database system like ",o.createElement("a",{href:"http://www.postgresql.org",target:"_blank"},"PostgreSQL")," or ",o.createElement("a",{href:"https://www.mysql.com/",target:"_blank"},"MySQL"),' does because the goal is to provide a translation into relational algebra. This means that many features like correlated-substatements are not supported because the translation into relational algebra is not trivial and modern database systems use an extended set of operators internally that do not require a one-to-one translation into "classNameical" relational algebra. Therefore the learning effect for users of this tool would not be that big.'),o.createElement("h3",{id:"sql-syntax"},"General syntax"),o.createElement("p",null,"All keywords are case insensitv."),o.createElement("p",null,"The following Synopsis is a adapted version of ",o.createElement("a",{href:"http://www.postgresql.org/docs/9.4/static/sql-select.html",target:"_blank"},"PostgreSQL")," and shows the general syntax of the supported SQL. Brackets indicate optional parts. Braces and vertical lines indicate that one of the alternatives has to be chosen. Dots mean that the preceding element can be repeated."),o.createElement("code",{className:"block sql"},"[ ",o.createElement("a",{href:"#sql-with"},"WITH")," ",o.createElement("strong",null,"with_query")," [, ...] ]",o.createElement("a",{href:"#sql-select"},"SELECT")," [ DISTINCT ] * | ",o.createElement("strong",null,"expression")," [ [ AS ] ",o.createElement("strong",null,"output_name")," ] [, ...]",o.createElement("a",{href:"#sql-from"},"FROM")," ",o.createElement("strong",null,"from_item")," [, ...] [ ",o.createElement("a",{href:"#sql-where"},"WHERE")," ",o.createElement("strong",null,"condition")," ] [ ",o.createElement("a",{href:"#sql-groupby"},"GROUP BY")," ",o.createElement("strong",null,"column")," [, ...] ] [ ",o.createElement("a",{href:"#sql-having"},"HAVING")," ",o.createElement("strong",null,"condition")," ] [ ","{"," ",o.createElement("a",{href:"#sql-setoperators"},"UNION")," | ",o.createElement("a",{href:"#sql-setoperators"},"INTERSECT")," | ",o.createElement("a",{href:"#sql-setoperators"},"EXCEPT")," } [ ALL | DISTINCT ] ",o.createElement("strong",null,"select")," ] [ ",o.createElement("a",{href:"#sql-orderby"},"ORDER BY")," ",o.createElement("strong",null,"column")," [ ASC | DESC ] [, ...] ] [ ",o.createElement("a",{href:"#sql-limit"},"LIMIT")," ","{"," ",o.createElement("strong",null,"count")," | ALL } ] [ ",o.createElement("a",{href:"#sql-limit"},"OFFSET")," ",o.createElement("strong",null,"start")," [ ROW | ROWS ] ] [ ",o.createElement("a",{href:"#sql-limit"},"FETCH")," ","{"," FIRST | NEXT } [ ",o.createElement("strong",null,"count")," ] ","{"," ROW | ROWS } ONLY ] where ",o.createElement("strong",null,"from_item")," can be one of:",o.createElement("strong",null,"table_name")," [ AS ",o.createElement("strong",null,"alias")," ]",o.createElement("strong",null,"with_query_name")," [ AS ",o.createElement("strong",null,"alias")," ] ( ",o.createElement("strong",null,"select")," ) AS ",o.createElement("strong",null,"alias"),o.createElement("strong",null,"from_item")," CROSS JOIN ",o.createElement("strong",null,"from_item"),o.createElement("strong",null,"from_item")," NATURAL JOIN ",o.createElement("strong",null,"from_item"),o.createElement("strong",null,"from_item")," [ INNER ] JOIN ",o.createElement("strong",null,"from_item")," ON join_condition",o.createElement("strong",null,"from_item")," [ INNER ] JOIN ",o.createElement("strong",null,"from_item")," NATURAL",o.createElement("strong",null,"from_item")," [ INNER ] JOIN ",o.createElement("strong",null,"from_item")," USING ( join_column [, ...] )",o.createElement("strong",null,"from_item"),o.createElement("strong",null,"from_item")," ","{"," LEFT | RIGHT | FULL } [ OUTER ] JOIN ON join_condition",o.createElement("strong",null,"from_item"),o.createElement("strong",null,"from_item")," ","{"," LEFT | RIGHT | FULL } [ OUTER ] JOIN NATURAL ",o.createElement("strong",null,"from_item"),o.createElement("strong",null,"from_item")," ","{"," LEFT | RIGHT | FULL } [ OUTER ] JOIN USING ( join_column [, ...] ) ",o.createElement("strong",null,"from_item"),"and ",o.createElement("strong",null,"with_query")," is:",o.createElement("strong",null,"with_query_name")," AS ( ",o.createElement("strong",null,"select")," )"),o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Stack)(Object(Hn.Optional)(Object(Hn.Sequence)(Object(Hn.Terminal)("WITH","#sql-with"),Object(Hn.OneOrMore)(Object(Hn.Sequence)(Object(Hn.NonTerminal)("name"),"AS","(",Object(Hn.NonTerminal)("select","#sql-select"),")"),",")),"skip"),Object(Hn.Sequence)(Object(Hn.Terminal)("SELECT","#sql-select"),Object(Hn.Optional)("DISTINCT","skip"),Object(Hn.Choice)(0,"*",Object(Hn.OneOrMore)(Object(Hn.Choice)(0,Object(Hn.Sequence)(Object(Hn.NonTerminal)("column"),Object(Hn.Optional)(Object(Hn.Sequence)("AS",Object(Hn.NonTerminal)("output_name")))),Object(Hn.Sequence)(Object(Hn.NonTerminal)("expression","#sql-valueexpr"),Object(Hn.Sequence)("AS",Object(Hn.NonTerminal)("output_name")))),",")),Object(Hn.Terminal)("FROM","#sql-from"),Object(Hn.OneOrMore)(Object(Hn.Choice)(0,Object(Hn.Sequence)(Object(Hn.NonTerminal)("table_name"),Object(Hn.Optional)(Object(Hn.Sequence)("AS",Object(Hn.NonTerminal)("alias")))),Object(Hn.Sequence)("(",Object(Hn.NonTerminal)("select"),")",Object(Hn.Sequence)("AS",Object(Hn.NonTerminal)("alias")))),",")),Object(Hn.OneOrMore)(Object(Hn.Choice)(0,Object(Hn.Skip)(),Object(Hn.Sequence)(Object(Hn.Choice)(0,Object(Hn.Sequence)(",",Object(Hn.Comment)("old syntax for cross join")),Object(Hn.Sequence)(Object(Hn.Choice)(0,"CROSS","NATURAL"),"JOIN"),Object(Hn.Sequence)(Object(Hn.Choice)(0,Object(Hn.Sequence)(Object(Hn.Optional)("INNER"),"JOIN"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"LEFT","RIGHT","FULL"),Object(Hn.Optional)("OUTER"),"JOIN")),Object(Hn.Choice)(0,Object(Hn.Sequence)("ON",Object(Hn.NonTerminal)("condition")),Object(Hn.Sequence)("USING","(",Object(Hn.OneOrMore)(Object(Hn.NonTerminal)("join_column"),","),")"),Object(Hn.Sequence)("NATURAL")))),Object(Hn.Choice)(0,Object(Hn.Sequence)(Object(Hn.NonTerminal)("table_name"),Object(Hn.Optional)(Object(Hn.Sequence)("AS",Object(Hn.NonTerminal)("alias")))),Object(Hn.Sequence)("(",Object(Hn.NonTerminal)("select"),")",Object(Hn.Sequence)("AS",Object(Hn.NonTerminal)("alias"))))))),Object(Hn.Sequence)(Object(Hn.Optional)(Object(Hn.Sequence)(Object(Hn.Terminal)("WHERE","#sql-where"),Object(Hn.NonTerminal)("condition")),"skip"),Object(Hn.Optional)(Object(Hn.Sequence)(Object(Hn.Terminal)("GROUP BY","#sql-groupby"),Object(Hn.NonTerminal)("expression","#sql-valueexpr")),"skip"),Object(Hn.Optional)(Object(Hn.Sequence)(Object(Hn.Terminal)("HAVING","#sql-having"),Object(Hn.NonTerminal)("condition")),"skip")),Object(Hn.Sequence)(Object(Hn.Optional)(Object(Hn.Sequence)(Object(Hn.Choice)(0,"UNION","INTERSECT","EXCEPT"),Object(Hn.Choice)(0,Object(Hn.Skip)(),"DISTINCT","ALL"),Object(Hn.NonTerminal)("select")),"skip"),Object(Hn.Optional)(Object(Hn.Sequence)(Object(Hn.Terminal)("ORDER BY","#sql-orderby"),Object(Hn.OneOrMore)(Object(Hn.Sequence)(Object(Hn.NonTerminal)("expression","#sql-valueexpr"),Object(Hn.Choice)(0,"ASC","DESC")),",")),"skip")),Object(Hn.Sequence)(Object(Hn.Optional)(Object(Hn.Sequence)(Object(Hn.Terminal)("LIMIT","#sql-limit"),Object(Hn.Choice)(0,Object(Hn.NonTerminal)("count"),"ALL")),"skip"),Object(Hn.Optional)(Object(Hn.Sequence)(Object(Hn.Terminal)("OFFSET","#sql-limit"),Object(Hn.NonTerminal)("start"),Object(Hn.Optional)("ROWS")),"skip")),Object(Hn.Sequence)(Object(Hn.Optional)(Object(Hn.Sequence)(Object(Hn.Terminal)("FETCH FIRST","#sql-limit"),Object(Hn.NonTerminal)("count"),Object(Hn.Optional)("ROWS"),"ONLY"),"skip"))))})),o.createElement("h3",{id:"sql-translation"},"Semantic and Translation to relational algebra"),o.createElement("h4",{id:"sql-translation-sequence"},"Sequence of execution"),o.createElement("p",null,'The SQL statement is translated directly into relational algebra. To understand some of the effects of the tool it might be helpful to understand the steps of the translation process. As mentioned before, real database systems might take a different (more complex) aproach but this should help to get an idea of how SQL could be translated into "classNameical" relational algebra.'),o.createElement("p",null,"The following list shows the translation from SQL into relational algebra starting with the inner most relational algebra expression at the top."),o.createElement("ol",null,o.createElement("li",null,"replace all usages of the temporary-tables defined in the WITH-clause with their definitions"),o.createElement("li",null,"FROM-clause is translated left associative with all joins having the same precedence (",o.createElement("code",null,","),"is a cross join)"),o.createElement("li",null,"selection with condition from where-clause is added"),o.createElement("li",null,"group by"),o.createElement("li",null,"selection with condition from having-clause"),o.createElement("li",null,"union/intersect/except"),o.createElement("li",null,"projection is added to choose the requested columns of the SELECT-clause"),o.createElement("li",null,"the columns are renamed to get the requested output-name specified in the SELECT-clause"),o.createElement("li",null,"order by"),o.createElement("li",null,"limit/offset is mapped to a selection")),o.createElement("h4",{id:"sql-select"},"SELECT"),o.createElement("p",null,"The direct translation into relational algebra with implicit duplication elimination requires the ",o.createElement("code",null,"distinct"),"keyword to be equivalent. A warning is shown if you omit it."),o.createElement("p",null,"The select-clause is translated into up to two relalg operators."),o.createElement("ul",null,o.createElement("li",null,"The most basic case is ",o.createElement("code",null,"select ",o.createElement("strong",null,"*")," ...")," where no changes are made to the schema of the result. Therefore no projection is needed. You can use the optional table-alias-prefix if the columns of a single table/relation should be returned only: ",o.createElement("code",{className:"sql"},"select distinct R.* from R inner join S")),o.createElement("li",null,"When a subset of the columns are selected and/or reordered (",o.createElement("code",null," select a, b from ..."),") then a single ",o.createElement("a",{href:"#relalg-operations-projection"},"projection")," is used."),o.createElement("li",null,"Additionally to the previous case a ",o.createElement("a",{href:"#relalg-operations-renamecolumn"},"rename-column operator")," is added after the projection if new output-names are given with ",o.createElement("code",null,"as foo"),". e.g. ",o.createElement("code",null,"select a ",o.createElement("strong",null,"as foo")," from ..."))),o.createElement("p",null,"The allowed expressions are the same as for the ",o.createElement("a",{href:"#relalg-operations-projection"},"projection"),". So it can be either the name of the column (with optional renaming using ",o.createElement("code",null,"as"),") or a complex",o.createElement("a",{href:"#sql-valueexpr"},"value expression"),". In the latter case a output-name must be given using",o.createElement("code",null,"as")," because the tool requires every column to have a name."),o.createElement("h4",{id:"sql-from"},"FROM"),o.createElement("p",null,"In its simplest form the from-clause holds a single table/relation name that is used directly in the relalg statement. If the optional table-alias is specified with ",o.createElement("code",null,"table as foo")," this is reflected by wrapping the relation in a ",o.createElement("a",{href:"#relalg-operations-renamerelation"},"rename-relation operator")," with the given output-name."),o.createElement("code",{className:"example sql"},"select distinct x.a, x.b from R as x"),o.createElement("p",null,"Joins can be expressed using the ANSI join syntax"),o.createElement("code",{className:"example sql"},"select distinct * from A, B inner join C on ... inner join D natural natural join E left outer join F on ... left outer join G natural right outer join H on ... right outer join I natural full outer join J on ... full outer join K natural where ..."),o.createElement("p",null,"The comma is part of the old join syntax and is translated into a ",o.createElement("a",{href:"#relalg-operations-crossjoin"},"cross join"),"."),o.createElement("code",{className:"example sql"},"select distinct * from R, S as s, T where s.a = R.a"),o.createElement("p",null,"Instead of the name of relation a non-correlated substatement can be used. A table alias must be provided with ",o.createElement("code",null,"(...) as foo"),".",o.createElement("br",null),"A non-correlated substatement can be directly translated into relational algebra by just translate the sub-statement into relational algebra and use the resulting operator tree instead of the relation."),o.createElement("p",null,"Non-correlated means that it must not reference/use any columns of tables defined in the outer scope.",o.createElement("br",null),'This limitation is intentionally because the translation into relational algebra is not trivial and modern database systems use an extended set of operators internally that do not require a one-to-one translation into "classNameical" relational algebra. Therefore the learning effect for users of this tool would not be that big.'),o.createElement("code",{className:"example sql"},"select distinct * from R, (select * from S where a > 0) as x where x.a = R.a"),o.createElement("h4",{id:"sql-where"},"WHERE"),o.createElement("p",null,"The boolean condition in the where-clause can be any ",o.createElement("a",{href:"#sql-valueexpr"},"expression")," evaluating to boolean."),o.createElement("p",null,"The where clause is directly translated to an ",o.createElement("a",{href:"#relalg-operations-selection"},"relational algebra selection")," with the very same condition. This selection is applied after joining relations of the from-clause therefore has to use the original column names."),o.createElement("p",null,"Subquery Expressions like ",o.createElement("code",null,"EXISTS"),", ",o.createElement("code",null,"IN"),", ",o.createElement("code",null,"ANY/SOME")," or ",o.createElement("code",null,"ALL"),"are ",o.createElement("strong",null,"not supported"),' because their translation into relational algebra is not trivial and modern database systems use an extended set of operators internally that do not require a one-to-one translation into "classNameical" relational algebra. Therefore the learning effect for users of this tool would not be that big.'),o.createElement("h4",{id:"sql-groupby"},"GROUP BY"),o.createElement("p",null,"The GROUP-BY-clause takes a list of column names only argument."),o.createElement("p",null,"The GROUP-BY-clause is directly translated to the ",o.createElement("a",{href:"#relalg-operations-groupby"},"relational algebra group-by operation")," and is executed directly after the selection built from the WHERE-clause and before the projection/renaming build from the SELECT-clause. Therefore the column names that can be used are the ones available after all joining all tables."),o.createElement("p",null,"The aggregations used in the ",o.createElement("a",{href:"#relalg-operations-groupby"},"relational algebra group-by operation")," are taken from the SELECT-clause and an output-name must be given using ",o.createElement("code",null,"as"),"because the tool requires every column to have a name."),o.createElement("p",null,"If no aggregations are present in the SELECT-clause a projection is used instead of the group-by operation because ",o.createElement("a",{href:"#relalg-operations-groupby"},"sigma")," without aggregation has the very same effect."),o.createElement("p",null,"Every non-aggregation-column in the SELECT-clause must be present in the group by clause because the would not be available after the grouping."),o.createElement("h4",{id:"sql-having"},"HAVING"),o.createElement("p",null,"The HAVING-Clause represents an optional ",o.createElement("a",{href:"#relalg-operations-selection"},"relational algebra selection"),". The boolean condition can be any ",o.createElement("a",{href:"#sql-valueexpr"},"expression")," evaluating to boolean."),o.createElement("p",null,"The resulting selection is executed directly after the ",o.createElement("a",{href:"#relalg-operations-groupby"},"relational algebra group-by operation"),"."),o.createElement("p",null,"Unlike ",o.createElement("a",{href:"http://www.postgresql.org/docs/9.4/static/sql-select.html#SQL-HAVING",target:"_blank"},"PostgreSQL"),"the HAVING-clause is only allowed when either a aggregation or grouping is present."),o.createElement("h4",{id:"sql-orderby"},"ORDER BY"),o.createElement("p",null,"Order by takes a list of column names or indices of columns (starting with 1) as its argument."),o.createElement("p",null,"It is directly translated to the ",o.createElement("a",{href:"#relalg-operations-orderby"},"extended relational algebra operation order by (tau)"),"."),o.createElement("h4",{id:"sql-limit"},"LIMIT"),o.createElement("p",null,"The LIMIT-clause can be either specified with the LIMIT-OFFSET syntax used by PostgreSQL and MySQL or the FETCH-FIRST syntax introduced in SQL:2008."),o.createElement("p",null,"It is translated into a ",o.createElement("a",{href:"#relalg-operations-selection"},"relational algebra selection")," using the",o.createElement("code",null,"rownum()"),"-function to limit the number of rows returned."),o.createElement("h4",{id:"sql-setoperators"},"UNION / INTERSECT / EXCEPT"),o.createElement("p",null,"The Set-Operators UNION, INTERSECT and EXCEPT directly map to the relational algebra operators ",o.createElement("a",{href:"#relalg-operations-union"},"union"),", ",o.createElement("a",{href:"#relalg-operations-intersection"},"intersection")," and ",o.createElement("a",{href:"#relalg-operations-subtraction"},"subtraction"),"."),o.createElement("p",null,"The keyword ",o.createElement("code",null,"DISTINCT")," is optional because it represents the default behavior. The keyword",o.createElement("code",null,"ALL")," is ignored and a warning is shown because the targeted relational algebra has a implicit elimination duplicate rows."),o.createElement("p",null,"Parentheses can be used to create more complex statements:",o.createElement("br",null),o.createElement("code",{className:"example sql"},"( select distinct * from S union select distinct * from T ) except select distinct * from T order by 1 limit 1")),o.createElement("h4",{id:"sql-with"},"WITH"),o.createElement("p",null,"The WITH-clause (also known as ",o.createElement("i",null,"common table expressions"),") provides a way to define subqueries for single or multiple use in a statement. This can be thought as defining a temporary table for that query in SQL terminology or ",o.createElement("a",{href:"#relalg-assignment"},"creating variables in relational algebra"),". Recursive evaluation is not supported."),o.createElement("p",null,"Each subquery can be referenced by the name from the WITH-clause. The subquery is automatically renamed to the name used in the WITH-clause."),o.createElement("h4",{id:"sql-valueexpr"},"Value expressions"),o.createElement("p",null,"Value expressions are used for boolean expressions for WHERE- and HAVING-clause, the boolean conditions of joins and calculated values in the SELECT-clause. The type of a expression is either ",o.createElement("i",null,"string"),", ",o.createElement("i",null,"number"),", ",o.createElement("i",null,"date")," or ",o.createElement("i",null,"boolean")," and is determined by the used operations and columns."),o.createElement("p",null,"The supported functions and operations are the same for SQL and relational algebra: ",o.createElement("a",{href:"#relalg-valueexpr"},"value expression")),o.createElement("h2",{id:"license-help"},"Licence"),o.createElement("p",null,o.createElement("a",{rel:"license",href:"http://creativecommons.org/licenses/by-sa/4.0/"},o.createElement("img",{alt:"Creative Commons License",style:{borderWidth:0},src:"https://i.creativecommons.org/l/by-sa/4.0/88x31.png"})),o.createElement("br",null),"This document by Johannes Kessler is licensed under a ",o.createElement("a",{rel:"license",href:"http://creativecommons.org/licenses/by-sa/4.0/"},"Creative Commons Attribution-ShareAlike 4.0 International License"),".")))))}}n("./src/calc2/views/landing.css");class Bn extends o.Component{componentDidMount(){In("#exec1").click((function(){In(this).addClass("hidden"),In(this).next().removeClass("hidden")}))}render(){return o.createElement("div",{className:"view-max"},o.createElement(An,null),o.createElement(Fn,null),o.createElement("div",{className:"view-content"},o.createElement("div",{className:"container"},o.createElement("div",{className:"row"},o.createElement("div",{className:"col-md-12"},o.createElement("div",{className:"jumbotron",id:"landing-header-bar"},o.createElement("div",{className:"col-md-12 ct",id:"logos"},o.createElement("a",{href:"http://dbis-informatik.uibk.ac.at/",target:"_blank"},o.createElement("img",{src:"assets/logos/Logos_blue_large.png",alt:"Databases and Information Systems (DBIS)",width:"159",height:"120"})),o.createElement("a",{href:"http://www.uibk.ac.at/",target:"_blank"},o.createElement("img",{src:"assets/logos/Logos_uni_uni_2017_rgb_transparent.png",alt:"University of Innsbruck",width:"300",height:"120"}))),o.createElement("div",{className:"col-md-12 ct"},o.createElement("h1",{id:"heading"},"RelaX - relational algebra calculator"),o.createElement("p",null,"calculates any relational algebra statement like ",o.createElement("code",null,o.createElement("span",null,"( σ ",o.createElement("sub",null,"a > 42")," ( A ) ) ",o.createElement("span",{className:"math"},"⋈")," ( π ",o.createElement("sub",null,"a,b")," ( B ) )"))," on a set of relations.")),o.createElement("div",{className:"col-md-12 ct"},o.createElement(Xe,{className:"btn btn-primary btn-lg getStartedBtn",role:"button",to:"/relax/calc"},"Get Started"))),o.createElement("h2",null,"What is the relational algebra calculator?"),o.createElement("p",null,"If you want to learn SQL you take a database system and try some queries.",o.createElement("br",null),"But if you want to learn relational algebra what do you use? Pen and paper?"),o.createElement("p",null,"The relational algebra calculator helps you learn relational algebra (RelAlg) by executing it."),o.createElement("div",{className:"example"},"Subjects =",o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-condensed table-inline"},o.createElement("thead",null,o.createElement("tr",null,o.createElement("th",null,"suId"),o.createElement("th",null,"name"))),o.createElement("tbody",null,o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"0")),o.createElement("td",null,o.createElement("span",{className:"string"},"Computing"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"1")),o.createElement("td",null,o.createElement("span",{className:"string"},"Maths"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"2")),o.createElement("td",null,o.createElement("span",{className:"string"},"English"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"3")),o.createElement("td",null,o.createElement("span",{className:"string"},"History")))))),"Students =",o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-condensed table-inline"},o.createElement("thead",null,o.createElement("tr",null,o.createElement("th",null,"stId"),o.createElement("th",null,"name"))),o.createElement("tbody",null,o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"1")),o.createElement("td",null,o.createElement("span",{className:"string"},"John"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"2")),o.createElement("td",null,o.createElement("span",{className:"string"},"Mike"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"3")),o.createElement("td",null,o.createElement("span",{className:"string"},"Lisa"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"4")),o.createElement("td",null,o.createElement("span",{className:"string"},"Julia")))))),"Marks =",o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-condensed table-inline"},o.createElement("thead",null,o.createElement("tr",null,o.createElement("th",null,"suId"),o.createElement("th",null,"stId"),o.createElement("th",null,"mark"))),o.createElement("tbody",null,o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"0")),o.createElement("td",null,o.createElement("span",{className:"number"},"1")),o.createElement("td",null,o.createElement("span",{className:"string"},"A"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"0")),o.createElement("td",null,o.createElement("span",{className:"number"},"2")),o.createElement("td",null,o.createElement("span",{className:"string"},"B"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"0")),o.createElement("td",null,o.createElement("span",{className:"number"},"3")),o.createElement("td",null,o.createElement("span",{className:"string"},"C"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"0")),o.createElement("td",null,o.createElement("span",{className:"number"},"4")),o.createElement("td",null,o.createElement("span",{className:"string"},"A"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"2")),o.createElement("td",null,o.createElement("span",{className:"number"},"2")),o.createElement("td",null,o.createElement("span",{className:"string"},"A"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"3")),o.createElement("td",null,o.createElement("span",{className:"number"},"2")),o.createElement("td",null,o.createElement("span",{className:"string"},"F"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"4")),o.createElement("td",null,o.createElement("span",{className:"number"},"1")),o.createElement("td",null,o.createElement("span",{className:"string"},"C")))))),o.createElement("br",null),o.createElement("div",null,o.createElement("span",null,o.createElement("span",{className:"math"}," π "),o.createElement("sub",null," studentName, subjectName, mark "),"( ",o.createElement("span",null,o.createElement("span",{className:"math"}," ρ "),o.createElement("sub",null," studentName←st.name, subjectName←su.name "),"( ",o.createElement("span",null,"( ",o.createElement("span",null,"( ",o.createElement("span",null,o.createElement("span",{className:"math"}," ρ "),o.createElement("sub",null," su "),"( ",o.createElement("span",null,o.createElement("span",{className:"math"},"Subjects"))," )")," )",o.createElement("span",{className:"math"}," ⨝ "),o.createElement("sub",null," "),"( ",o.createElement("span",null,o.createElement("span",{className:"math"}," σ "),o.createElement("sub",null,"mark≥'C' "),"( ",o.createElement("span",null,o.createElement("span",{className:"math"}," ρ "),o.createElement("sub",null," m "),"( ",o.createElement("span",null,o.createElement("span",{className:"math"},"Marks"))," )")," )")," )")," )",o.createElement("span",{className:"math"}," ⨝ "),o.createElement("sub",null," m.stId=st.stId "),"( ",o.createElement("span",null,o.createElement("span",{className:"math"}," ρ "),o.createElement("sub",null,"st "),"( ",o.createElement("span",null,o.createElement("span",{className:"math"},"Students"))," )")," )")," )")," )")),"=",o.createElement("button",{type:"button",className:"btn",id:"exec1"},"execute"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-condensed table-inline hidden"},o.createElement("thead",null,o.createElement("tr",null,o.createElement("th",null,"st.studentName"),o.createElement("th",null,"su.subjectName"),o.createElement("th",null,"m.mark"))),o.createElement("tbody",null,o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"string"},"Lisa")),o.createElement("td",null,o.createElement("span",{className:"string"},"Computing")),o.createElement("td",null,o.createElement("span",{className:"string"},"C"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"string"},"Mike")),o.createElement("td",null,o.createElement("span",{className:"string"},"History")),o.createElement("td",null,o.createElement("span",{className:"string"},"F"))))))),o.createElement("h2",null,"Calculator features:"),o.createElement("ul",null,o.createElement("li",null,"supports most common operators",o.createElement("ul",null,o.createElement("li",null,"projection"),o.createElement("li",null,"selection"),o.createElement("li",null,"rename relations"),o.createElement("li",null,"rename columns"),o.createElement("li",null,"group by"),o.createElement("li",null,"intersect"),o.createElement("li",null,"union"),o.createElement("li",null,"set difference"),o.createElement("li",null,"cross join"),o.createElement("li",null,"theta join"),o.createElement("li",null,"natural join"),o.createElement("li",null,"natural left outer join"),o.createElement("li",null,"natural right outer join"),o.createElement("li",null,"natural full outer join"),o.createElement("li",null,"theta left outer join"),o.createElement("li",null,"theta right outer join"),o.createElement("li",null,"theta full outer join"),o.createElement("li",null,"left semi join"),o.createElement("li",null,"right semi join"),o.createElement("li",null,"anti join join"),o.createElement("li",null,"order by"))),o.createElement("li",null,"runs in any modern browser. no plugins needed"),o.createElement("li",null,"text based approach. lets you write RelAlg as easy as SQL"),o.createElement("li",null,"code editor with syntax highlighting and code completion"),o.createElement("li",null,"pre defined sets of relations"),o.createElement("li",null,"visualize statement in a operator tree"),o.createElement("li",null,"plain text alternatives for special symbols like σ or ",o.createElement("span",{className:"math"},"⋈")),o.createElement("li",null,"variables can be used to simplify expressions"),o.createElement("li",null,"new temporal relations can be declared in the statement"),o.createElement("li",null,"sql like comments"),o.createElement("li",null,"arbitrary boolean expressions in conditions"),o.createElement("li",null,"operations keep original order for better traceability"),o.createElement("li",null,"translates simple SQL-statements to RelAlg",o.createElement("ul",null,o.createElement("li",null,"no support for correlated sub-statements")))),o.createElement("h2",null,"Available data"),"You can either use one of the following datasets or create a new one.",o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table"},o.createElement("thead",null,o.createElement("tr",null,o.createElement("th",null,"Name"),o.createElement("th",null,"Source"),o.createElement("th",null,"Language"))),o.createElement("tbody",null,o.createElement("tr",null,o.createElement("td",null,"Kemper Datenbanksysteme"),o.createElement("td",null,o.createElement("a",{href:"http://www3.in.tum.de/teaching/bookDBMSeinf/"},"Alfons Kemper, André Eickler: Datenbanksysteme: Eine Einführung 8. Auflage"),", Seite 84, Abbildung 3.8"),o.createElement("td",null,"de")),o.createElement("tr",null,o.createElement("td",null,"UIBK - KursDB"),o.createElement("td",null,"Tables from and for the lecture ",o.createElement("a",{href:"http://dbis-informatik.uibk.ac.at/249-0-VO-Datenbanksysteme.html",target:"_blank"},"Databases: Foundations, Data Models and System Concepts - University of Innsbruck")," chapter 3"),o.createElement("td",null,"de")),o.createElement("tr",null,o.createElement("td",null,"UIBK - R, S, T"),o.createElement("td",null,"Tables from and for the lecture ",o.createElement("a",{href:"http://dbis-informatik.uibk.ac.at/249-0-VO-Datenbanksysteme.html",target:"_blank"},"Databases: Foundations, Data Models and System Concepts - University of Innsbruck")," chapter 3"),o.createElement("td",null,"de")),o.createElement("tr",null,o.createElement("td",null,"The Complete Book - Exercise 2.4.1"),o.createElement("td",null,"Sample Data from",o.createElement("a",{href:"http://infolab.stanford.edu/~ullman/dscb.html"},"Database Systems The Complete Book 2nd Edition by Hector Garcia-Molina, Jeff Ullman, and Jennifer Widom"),": Exercise 2.4.1 Page 52-55"),o.createElement("td",null,"en")),o.createElement("tr",null,o.createElement("td",null,"The Complete Book - Exercise 2.4.3"),o.createElement("td",null,"Sample Data from",o.createElement("a",{href:"http://infolab.stanford.edu/~ullman/dscb.html"},"Database Systems The Complete Book 2nd Edition by Hector Garcia-Molina, Jeff Ullman, and Jennifer Widom"),": Exercise 2.4.1 Page 55-57"),o.createElement("td",null,"en"))))),o.createElement("h2",null,"What it is not:"),o.createElement("p",null,"The tool is not meant to be a full database system. The goal of the implementation was to create a tool to support people to learn RelAlg."),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-condensed"},o.createElement("thead",null,o.createElement("tr",null,o.createElement("th",null," "),o.createElement("th",null,"Pen and Paper"),o.createElement("th",null,"relational algebra calculator"),o.createElement("th",null,"MySQL"))),o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"SQL support"),o.createElement("td",null,o.createElement("span",{className:"fa fa-check"})," yes :-)"),o.createElement("td",null,o.createElement("span",{className:"fa fa-check"})," basic SQL"),o.createElement("td",null,o.createElement("span",{className:"fa fa-check"})," yes")),o.createElement("tr",null,o.createElement("th",null,"relational algebra"),o.createElement("td",null,o.createElement("span",{className:"fa fa-check"})," yes"),o.createElement("td",null,o.createElement("span",{className:"fa fa-check"})," yes"),o.createElement("td",null,o.createElement("span",{className:"fa fa-times"})," no")),o.createElement("tr",null,o.createElement("th",null,"use variables for RelAlg"),o.createElement("td",null,o.createElement("span",{className:"fa fa-check"})," yes"),o.createElement("td",null,o.createElement("span",{className:"fa fa-check"})," yes"),o.createElement("td",null,o.createElement("span",{className:"fa fa-times"})," no")),o.createElement("tr",null,o.createElement("th",null,"large datasets"),o.createElement("td",null,o.createElement("span",{className:"fa fa-times"})," no"),o.createElement("td",null,o.createElement("span",{className:"fa fa-times"})," no"),o.createElement("td",null,o.createElement("span",{className:"fa fa-check"})," yes")),o.createElement("tr",null,o.createElement("th",null,"query plan"),o.createElement("td",null,o.createElement("span",{className:"fa fa-times"})," no"),o.createElement("td",null,o.createElement("span",{className:"fa fa-check"})," yes"),o.createElement("td",null,o.createElement("span",{className:"fa fa-times"})," no")),o.createElement("tr",null,o.createElement("th",null,"intermediate results"),o.createElement("td",null,o.createElement("span",{className:"fa fa-times"})," no"),o.createElement("td",null,o.createElement("span",{className:"fa fa-check"})," yes"),o.createElement("td",null,o.createElement("span",{className:"fa fa-times"})," no")),o.createElement("tr",null,o.createElement("th",null,"iterative working"),o.createElement("td",null,o.createElement("span",{className:"fa fa-times"})," no"),o.createElement("td",null,o.createElement("span",{className:"fa fa-check"})," yes"),o.createElement("td",null,o.createElement("span",{className:"fa fa-check"})," yes"))))),o.createElement("h2",{id:"changelog"},"Changelog"),o.createElement("ul",null,o.createElement("li",null,"0.20",o.createElement("ul",null,o.createElement("li",null,"added option to automatically replace operators in relational algebra: all plaintext-syntax operators get replaced with the equivalent mathematical symbol or vice versa."))),o.createElement("li",null,"0.19",o.createElement("ul",null,o.createElement("li",null,"added datepicker to quickly insert a date literal"))),o.createElement("li",null,"0.18",o.createElement("ul",null,o.createElement("li",null,"added support for the ",o.createElement("a",{href:"/relax/help#relalg-valueexpr"},"LIKE-operator")," for SQL and relational algebra",o.createElement("br",null),"e.g. ",o.createElement("code",null,"pi 'abc' like 'a%'->x R")),o.createElement("li",null,"added translation support for the calculator using ",o.createElement("a",{href:"http://i18next.com/",target:"_blank"},"i18next"),". This allows easy translation of the main calculator into other languages."),o.createElement("li",null,"calculator is now available in ",o.createElement("a",{href:"calc.htm?lang=de"},"german")),o.createElement("li",null,"ported project to ES2015 (it now gets transpiled to ES5 and packed using ",o.createElement("a",{target:"_blank",href:"https://babeljs.io/"},"Babel.js"),"and ",o.createElement("a",{target:"_blank",href:"http://browserify.org/"},"Browserify"),")"))),o.createElement("li",null,"0.17",o.createElement("ul",null,o.createElement("li",null,"fixed bug: inline-table-editor not working"),o.createElement("li",null,"fixed bug: formula for !a was not working"))),o.createElement("li",null,"0.16",o.createElement("ul",null,o.createElement("li",null,"disallow relational algebra keywords as column-/relation-names"),o.createElement("li",null,"fixed precedence for ",o.createElement("a",{href:"/relax/help#relalg-valueexpr"},"CASE-WHEN-expressions")),o.createElement("li",null,"added support for the SQL-92 ",o.createElement("a",{href:"/relax/help#relalg-valueexpr"},o.createElement("code",null,"||"),"-concat operator")),o.createElement("li",null,"added ",o.createElement("code",null,"except")," as alternative syntax for the ",o.createElement("a",{href:"/relax/help#relalg-operations-subtraction"},"relational algebra set-difference operator")),o.createElement("li",null,"fixed bug where ",o.createElement("code",null,"A=R join S A")," was interpreted as",o.createElement("code",null,"A=(R join S A)")," instead of ",o.createElement("code",null,"A=(R join S) A"),".",o.createElement("br",null),"see ",o.createElement("a",{href:"/relax/help#relalg-operations-innerjoin"},"help page")," for more information"))),o.createElement("li",null,"0.15",o.createElement("ul",null,o.createElement("li",null,"added support for ",o.createElement("a",{href:"/relax/help#relalg-valueexpr"},"hour(), minute() and second()")),o.createElement("li",null,"added support for ",o.createElement("a",{href:"/relax/help#relalg-valueexpr"},"now()"),o.createElement("br",null),"e.g. ",o.createElement("code",null,"pi hour(now())->x, minute(now())->y, second(now())->z ( R )")),o.createElement("li",null,"added support for ",o.createElement("a",{href:"/relax/help#relalg-valueexpr"},"n-ary concat"),o.createElement("br",null),"e.g. ",o.createElement("code",null,"pi concat(b, '_', c)->x R")),o.createElement("li",null,"added support for WITH-clauses for SQL"))),o.createElement("li",null,"0.14",o.createElement("ul",null,o.createElement("li",null,"improve error message for theta-joins with conflicting columns"),o.createElement("li",null,"improve error message and added example for assignments without query error"),o.createElement("li",null,"bugfix: calculator-tour did not work correctly for Edge on Windows 10"))),o.createElement("li",null,"0.13",o.createElement("ul",null,o.createElement("li",null,'updated to CodeMirror version 5.1 with "experimental mobile support"'),o.createElement("li",null,"added support for ",o.createElement("a",{href:"/relax/help#relalg-valueexpr"},"COALESCE()"),o.createElement("br",null),"e.g. ",o.createElement("code",null,"pi coalesce(a, b, 1)->x R"),", ",o.createElement("code",null,"select coalesce(a, b, 1) as x from R")),o.createElement("li",null,"added support for ",o.createElement("a",{href:"/relax/help#relalg-valueexpr"},"CASE WHEN"),o.createElement("br",null),"e.g. ",o.createElement("code",null,"select case when a > 3 then a+1 else a end as x from R")),o.createElement("li",null,"added support for complex union/intersect/except statements for SQL",o.createElement("br",null),"e.g. ",o.createElement("code",null,"(select * from S union ( select * from T except select * from T )) order by 1")))),o.createElement("li",null,"0.12",o.createElement("ul",null,o.createElement("li",null,"added support for more complex FROM-clauses for SQL",o.createElement("br",null),"e.g. ",o.createElement("code",null,"select distinct * from R, (S natural join T)")),o.createElement("li",null,"simplify and link the syntax diagrams at the help page"))),o.createElement("li",null,"0.11",o.createElement("ul",null,o.createElement("li",null,"added a tour to explain the main features of the tool to new users (using ",o.createElement("a",{href:"http://bootstraptour.com/",target:"_blank"},"Bootstrap Tour"),")"),o.createElement("li",null,"added ",o.createElement("a",{href:"/relax/help#sql-reference"},"reference for SQL in the help section")),o.createElement("li",null,"added support for USING clause for joins for SQL"),o.createElement("li",null,"added support FETCH FIRST syntax (SQL:2008) for SQL",o.createElement("br",null),"e.g. ",o.createElement("code",null,"select * from R offset 2 rows fetch first 10 rows only")),o.createElement("li",null,"allow DISTINCT on set operators for SQL"),o.createElement("li",null,"bugfix: having should be allowed without group by if aggregation is used"))),o.createElement("li",null,"0.10",o.createElement("ul",null,o.createElement("li",null,"added support for ",o.createElement("a",{href:"/relax/help#relalg-valueexpr"},"arithmetic expressions and functions")," for SQL",o.createElement("br",null),"e.g. ",o.createElement("code",null,"select distinct a+2 as x from R where length(b) > 2")),o.createElement("li",null,"show warnings instead of errors when not using distinct or using all on set operators in SQL"))),o.createElement("li",null,"0.9",o.createElement("ul",null,o.createElement("li",null,"added support for arithmetic operators and functions in ",o.createElement("a",{href:"/relax/help#relalg-valueexpr"},"(e.g boolean) expressions")," for relational algebra"),o.createElement("li",null,"projection supports ",o.createElement("a",{href:"/relax/help#relalg-operations-projection"},"expressions")),o.createElement("li",null,"removed magic ",o.createElement("a",{href:"/relax/help#relalg-operations-projection"},"ROWNUM")," column; ",o.createElement("a",{href:"/relax/help#relalg-valueexpr"},"ROWNUM()")," is now a function"),o.createElement("li",null,"tutorials for ",o.createElement("a",{href:"/relax/help#tutorial-user"},"users")," and ",o.createElement("a",{href:"/relax/help#tutorial-maintainer"},"maintainers")),o.createElement("li",null,"new braces handling in formula generation (braces are only placed if necessary)"),o.createElement("li",null,"bugfix: rename not existent column was silently ignored"),o.createElement("li",null,"syntax of dates has changed ",o.createElement("code",null,"1970-01-01")," could not be used any more because it is ambiguous (arithmetic operaton or date). The SQL notation (",o.createElement("code",null,"date('1970-01-01')"),") is now used for the relational algebra mode."))),o.createElement("li",null,"0.8",o.createElement("ul",null,o.createElement("li",null,"grid editor for inline relations"),o.createElement("li",null,"sql-dump import (beta)"),o.createElement("li",null,"group editor"),o.createElement("li",null,"changed the basic structure of the editors (internally)"),o.createElement("li",null,"duplicate rows are removed in every step")))),o.createElement("h2",null,"Who?"),o.createElement("p",null,"The relational algebra calculator was created by Johannes Kessler BSc at ",o.createElement("a",{href:"https://dbis-informatik.uibk.ac.at/1-1-Home.html"},"Databases and Information Systems Group")," at the ",o.createElement("a",{href:"http://informatik.uibk.ac.at/"},"Institute of Computer Science")," at the ",o.createElement("a",{href:"http://www.uibk.ac.at/index.html.en"},"University of Innsbruck")," under supervision of Michael Tschuggnall PhD and Prof. Dr. Günther Specht"),o.createElement("h2",null,"External resources"),o.createElement("p",null,"This tool was not written from scratch but many different external resources/frameworks/projects/libs are used."),o.createElement("p",null,"This is a list of resources/frameworks/projects/libs used for this tool (in alphabetical order) to give credit where credit is due and guide anyone interested to them without having to look through the code."),o.createElement("ul",null,o.createElement("li",null,o.createElement("a",{target:"_blank",href:"https://babeljs.io/"},"Babel JavaScript compiler")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://blanketjs.org/"},"blanket.js")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://botmonster.com/jquery-bootpag/"},"bootpag")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://getbootstrap.com/"},"Bootstrap")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"https://bootstrap-datepicker.readthedocs.org"},"bootstrap-datepicker")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://bootstraptour.com/"},"Bootstrap Tour")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://browserify.org/"},"Browserify")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://codemirror.net/"},"CodeMirror")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://codepen.io/Pestov/pen/BLpgm"},"CSS3 family tree by Ilya Pestov")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://www.gnu.org/software/freefont/"},"FreeSans by GNU FreeFont")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://gruntjs.com/"},"Grunt")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://handlebarsjs.com/"},"handlebars")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://handsontable.com/"},"Handsontable")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://i18next.com/"},"i18next")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://jquery.com/"},"jQuery")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"https://github.com/chjj/marked"},"marked - a markdown parser")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://pegjs.org/"},"PEG.js - Parser Generator for JavaScript")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://qunitjs.com/"},"QUnit - js unit testing")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"https://github.com/tabatkins/railroad-diagrams"},"tabatkins/railroad-diagrams"))))))))}}class Un extends o.Component{componentDidMount(){}render(){return o.createElement("div",{className:"view-max"},o.createElement(An,null),o.createElement(Fn,null),o.createElement("div",{className:"view-min"},"Databases and Information System",o.createElement("br",null),"Universität Innsbruck",o.createElement("br",null),"ICT - building, second floor",o.createElement("br",null),"Technikerstrasse 21a",o.createElement("br",null),"A-6020 Innsbruck",o.createElement("br",null)))}}n("./src/calc2/style/index.scss");class zn extends o.Component{constructor(e){super(e),this.state={isNavbarOpen:!0}}componentDidMount(){var e;const t=document.getElementById("loadingScreen");null===(e=null==t?void 0:t.parentNode)||void 0===e||e.removeChild(t)}render(){const{store:e}=this.props,{isNavbarOpen:t}=this.state;return o.createElement(Ue,null,o.createElement(f,{store:e},o.createElement(r.a,null,o.createElement(Be,null,o.createElement(Re,{exact:!0,from:"/",to:"/relax/landing"}),o.createElement(Re,{exact:!0,from:"/relax",to:"/relax/landing"}),o.createElement(Pe,{path:"/relax/landing",component:Bn}),o.createElement(Pe,{path:"/relax/help",component:Wn}),o.createElement(Pe,{path:"/relax/imprint",component:Un}),o.createElement(Re,{from:"/relax/calc",to:"/relax/calc/local/uibk/local/0",exact:!0,strict:!0}),o.createElement(Pe,{path:"/relax/calc/:source/:id/:filename/:index",component:Pn}),o.createElement(Pe,{path:"/relax/calc/:source/:id",component:Pn}),o.createElement(Pe,{render:e=>o.createElement("div",{className:"view-min"},o.createElement("h1",null,"404"),o.createElement("p",null,"This route doesn't exist"),o.createElement("span",null,JSON.stringify(e)))})))))}}},"./src/calc2/style/index.scss":function(e,t,n){},"./src/calc2/utils/groupUtils.ts":function(e,t,n){"use strict";n.d(t,"a",(function(){return u})),n.d(t,"b",(function(){return c}));var r=n("./src/db/relalg.ts"),o=n("./node_modules/jquery/dist/jquery.js");const i=n("./src/calc2/data/uibk.txt"),a={uibk:i.default?i.default:""};function s(e,t,n){return u(Object(r.c)(e),t,n)}function l(e,t,n){if(0===(e=e.filter(({name:e})=>e===t)).length)return{fallback:n};let r=null;const o={};for(let t=0;t{switch(e){case"gist":o.ajax({url:`https://api.github.com/gists/${t}`,dataType:"json",success:function(o){const a=[];for(const u in o.files){if(!o.files.hasOwnProperty(u))continue;const c=null===o.owner?"anonymous":o.owner.login,d=null===o.owner?void 0:o.owner.html_url,h={source:e,id:o.id,filename:u,index:-1,maintainer:n,maintainerGroup:r},f={author:c,authorUrl:d,lastModified:new Date(o.updated_at),url:o.url};try{a.push(...s(o.files[u].content,h,f)),i(a)}catch(e){const n='could not parse given group from gist with id "'+t+'": '+e;console.error(n,t,e,u,o),l(new Error(n))}}},crossDomain:!0,statusCode:{404:function(){l(new Error("gist "+t+" not found"))}},async:!0});break;case"local":try{const o=s(a[t],{source:e,id:t,filename:"local",index:-1,maintainer:n,maintainerGroup:r},{});i(o)}catch(e){let t="cannot parse groups file: "+e.message;t+="
        see log for more information",console.error(t,e),l(new Error(t))}break;case"http":{const e="parsing groups from arbitrary urls is no longer supported; use github gists instead.";window.alert(e),l(new Error(e));break}default:l(new Error("unknown source "+e))}})}},"./src/calc2/views/help.css":function(e,t,n){},"./src/calc2/views/landing.css":function(e,t,n){},"./src/db/exec/Column.ts":function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));class r{constructor(e,t,n="null"){this._type="null",this._name=e,this._relAlias=t,this._type=n}getName(){return this._name}getRelAlias(){return this._relAlias}getType(){return this._type}setRelAlias(e){this._relAlias=e}toString(){return r.printColumn(this._name,this._relAlias)}equals(e){return this._name===e._name&&this._relAlias===e._relAlias}static printColumn(e,t){let n;return n="number"==typeof e?`[${e}]`:e,null===t?n:`${t}.${n}`}}},"./src/db/exec/ExecutionError.ts":function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));class r extends Error{constructor(e,t){super(e),this.codeInfo=t||void 0}}},"./src/db/exec/RANode.ts":function(e,t,n){"use strict";n.d(t,"b",(function(){return i})),n.d(t,"c",(function(){return a})),n.d(t,"a",(function(){return s}));var r=n("./src/db/exec/ExecutionError.ts");class o{constructor(e=""){this._codeInfo=null,this._metaData={},this._resultNumRows=-1,this._wrappedInParentheses=!1,this._warnings=[],this._functionName=e}setCodeInfoObject(e){return this._codeInfo=e,this}addWarning(e,t){const n={message:e,codeInfo:void 0};t&&(n.codeInfo=t),this._warnings||(this._warnings=[]),this._warnings.push(n)}setWrappedInParentheses(e=!0){this._wrappedInParentheses=e}throwExecutionError(e){throw new r.a(e,this._codeInfo)}setMetaData(e,t){this._metaData[e]=t}hasMetaData(e){return void 0!==this._metaData[e]}getMetaData(e){return this._metaData[e]}getResultNumRows(){if(void 0===this._resultNumRows||-1===this._resultNumRows)throw new Error("result num rows not set! call only after getResult");return this._resultNumRows}setResultNumRows(e){this._resultNumRows=e}_returnOrCreateSession(e){return void 0===e?{statement_timestamp:new Date}:e}getArgumentHtml(){return""}static foreachRecursive(e,t){t(e),e instanceof a?t(e.getChild()):e instanceof s&&(t(e.getChild()),t(e.getChild2()))}}class i extends o{getWarnings(e){return this._warnings}getFormulaHtml(e=!0,t=!0){const n=!0===this._wrappedInParentheses&&!0===t;return`${n?"(":""}\n\t\t\t\t\n\t\t\t\t\t${this._functionName}\n\t\t\t\t\n\t\t\t${n?")":""}`}}class a extends o{constructor(e,t){super(e),this._child=t}getChild(){return this._child}getWarnings(e){return!0===e?[...this._warnings,...this.getChild().getWarnings(!0)]:[...this._warnings]}getFormulaHtml(e=!0,t=!0){const n=!0===this._wrappedInParentheses&&!0===t;return`${n?"(":""}\n\n\t\t\t\t\n\t\t\t\t\t${this._functionName}\n\t\t\t\t\t${this.getArgumentHtml()}\n\t\t\t\t\t${!0===e?this.getChild().getFormulaHtml(e,!0):""}\n\t\t\t\t\n\t\t\t${n?")":""}`}}class s extends o{constructor(e,t,n){super(e),this._child=t,this._child2=n}getChild(){return this._child}getChild2(){return this._child2}getWarnings(e){return!0===e?[...this._warnings,...this.getChild().getWarnings(!0),...this.getChild2().getWarnings(!0)]:[...this._warnings]}getFormulaHtml(e=!0,t=!0){const n=!0===this._wrappedInParentheses||!0===t;return`${n?"(":""}\n\n\t\t\t\t\n\t\t\t\t\t${!0===e?this.getChild().getFormulaHtml(e,!0):""}\n\t\t\t\t\t${this._functionName}\n\t\t\t\t\t${this.getArgumentHtml()}\n\t\t\t\t\t${!0===e?this.getChild2().getFormulaHtml(e,!0):""}\n\t\t\t\t\n\t\t\t${n?")":""}`}}},"./src/db/exec/Relation.ts":function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var r=n("./src/db/exec/RANode.ts"),o=n("./src/db/exec/Table.ts");class i extends r.b{constructor(e,t){super(e),this._schema=null,void 0===t?this._table=new o.a:(t.check(),this._schema=t.getSchema(),this._table=t.getResult())}setSchema(e,t=!1){return this._schema=e.copy(),!0!==t&&this._schema.setRelAlias(this._functionName),this._table.setSchema(this._schema),this}addRow(e){this._table.addRow(e)}addRows(e){this._table.addRows(e)}getResultNumRows(){return this._resultNumRows}getResult(e){this._returnOrCreateSession(e);const t=this._table.copy();return t.eliminateDuplicateRows(),this.setResultNumRows(t.getNumRows()),t}getSchema(){return this._table.getSchema()}getName(){return this._functionName}check(){}hasChild(){return!1}copy(){if(null===this._schema)throw new Error("check not called");const e=new i(this._functionName);return e.setSchema(this._schema),e._table=this._table.copy(),e}}},"./src/db/exec/Schema.ts":function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var r=n("./node_modules/i18next/dist/es/index.js"),o=n("./src/db/exec/Column.ts");class i{constructor(){this._names=[],this._relAliases=[],this._types=[],this._size=0,this._colIndexPerName={}}getSize(){return this._size}addColumn(e,t,n){if("string"!==n&&"date"!==n&&"number"!==n&&"boolean"!==n)throw new Error("unknown type! "+n);this._names.push(e),this._relAliases.push(t),this._types.push(n);const o=this._size;if(!1===this.isUnique(o))throw new Error(r.a("db.messages.exec.error-column-not-unique",{column:t+"."+e}));return this._addColToIndex(e,o),this._size++,this}addColumn2(e){return this.addColumn(e.getName(),e.getRelAlias(),e.getType())}_addColToIndex(e,t){void 0===this._colIndexPerName[e]?this._colIndexPerName[e]=[t]:this._colIndexPerName[e].push(t)}_removeColFromIndex(e){const t=this._names[e],n=this._colIndexPerName[t];n.splice(n.indexOf(e,0),1),0===n.length&&delete this._colIndexPerName[t]}removeColumn(e){this._names.splice(e,1),this._relAliases.splice(e,1),this._types.splice(e,1),this._size--;for(let t=e;tthis._size)throw new Error(r.a("db.messages.exec.error-column-index-out-of-range",{column:o.a.printColumn(e,t),schema:this.toString()}));if(null===t)return[n];if(this._relAliases[n]===t)return[n]}return[]}getType(e){return this._types[e]}equals(e){if(!1===this.equalsTypeOnly(e))return!1;for(let t=0;t1}getName(e){return this._names[e]}getFullName(e){return(this._relAliases[e]?this._relAliases[e]+".":"")+this._names[e]}toString(){const e=[];for(let t=0;t'+Object(r.d)(n,o)+"
        "}getRows(e=0,t){if(0===e&&void 0===t)return this._rows;{const n=this._rows.length;let r=n;t&&t>0&&(r=Math.min(n,e+t)),this._rows.slice(e,r);const o=[];for(let t=e;t"+n.getName()+"":""+n.toString()+""}o+="";let i="";const a=this.getNumRows();let s=a;t&&t>0&&(s=Math.min(a,n+t));for(let e=n;e"+this.getValueHtmlAt(e,n)+"";i+=t+""}return""+o+i+"
        "}equals(e){if(e instanceof a==!1)throw new Error("can not compare");if(!1===this._schema.equals(e._schema))return!1;if(this._rows.length!==e._rows.length)return!1;for(let t=0;tn)throw new Error("invalid sort cols");for(let e=0;e=n||r[e]<0)throw new Error("invalid sort cols");const i=r.length;if(i!==o.length)throw new Error("invalid sort cols");const a=r.map(e=>this._schema.getType(e)),s=function(e,t,n,r,o){const i=e[n],a=t[n];if(null===i&&null===a)return 0;if(null===i&&null!==a)return 1*r;if(null!==i&&null===a)return-1*r;switch(o){case"number":case"date":case"boolean":return r*(i-a);case"string":return r*i.localeCompare(a);case"null":return 0}};this._rows.sort((function(e,t){let n=0;for(let l=0;l=e.length?t[this._index-e.length]:e[this._index]}toString(){return o.a.printColumn(this._name,this._relAlias)}getFormulaHtml(){const e=o.a.printColumn(this._name,this._relAlias);return!0===this._wrappedInParentheses?"("+e+")":e}static _getColumnIndex(e,t,n,r){if(!t||null===t)return e.getColumnIndex(n,r,!0);const o=e.getColumnIndex(n,r,!1);return-1===o?t.getColumnIndex(n,r,!0)+e.getSize():(t.getColumnIndex(n,r,!1),o)}static _getType(e,t,n){return n>=e.getSize()?t.getType(n-e.getSize()):e.getType(n)}}class u extends s{constructor(e,t,n){super(),this._func=t,this._dataType=e,this._dataTypeCalculated=null,this._args=n||[]}evaluate(e,t,n,r){switch(this._dataType){case"string":return this._evaluateString(e,t,n,r);case"number":return this._evaluateNumber(e,t,n,r);case"boolean":return this._evaluateBoolean(e,t,n,r);case"date":return this._evaluateDate(e,t,n,r);case"null":return this._evaluateNull(e,t,n,r);default:throw new Error("this should not happen!")}}_parseIsoDate(e){const t=/^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$/.exec(e);if(null===t)throw new r.a(i.a("db.messages.exec.error-invalid-date-format",{str:e}),this._codeInfo);const n=parseInt(t[1],10),o=parseInt(t[2],10)-1,a=parseInt(t[3],10),s=new Date(n,o,a);return s.getFullYear()===n&&s.getMonth()===o&&s.getDate()===a||this.throwExecutionError(i.a("db.messages.exec.error-invalid-date-format",{str:e})),s}_evaluateNull(e,t,n,r){switch(this._func){case"constant":return null;case"coalesce":for(let o=0;o1&&this._args[1].evaluate(e,t,n,r),null===o||this._args.length>1&&null===i)return null;switch(this._func){case"date":return this._parseIsoDate(o);case"adddate":return new Date(o.getTime()+864e5*i);case"subdate":return new Date(o.getTime()-864e5*i);default:throw new Error("this should not happen!")}}_checkDate(e,t){switch(this._func){case"transaction_timestamp":case"statement_timestamp":case"clock_timestamp":case"now":return!0;case"date":return this._checkArgsDataType(e,t,["string"]);case"adddate":case"subdate":return this._checkArgsDataType(e,t,["date","number"]);default:throw new Error("this should not happen!")}}_evaluateBoolean(e,t,n,r){let o,i,a;if("constant"===this._func)return this._args[0];switch(o=this._args[0].evaluate(e,t,n,r),i=this._args.length>1&&this._args[1].evaluate(e,t,n,r),this._func){case"not":return"unknown"===o?o:!o;case"and":return!1!==o&&!1!==i&&(!0===o&&!0===i||"unknown");case"or":return!0===o||!0===i||(!1!==o||!1!==i)&&"unknown";case"xor":return"unknown"===o||"unknown"===i?"unknown":o!==i;case"=":case">=":case"<=":case">":case"<":case"!=":return a=this._args[0].getDataType(),u._condition_compare(o,i,a,this._func);case"like":case"ilike":if(!this._regex)throw new Error("regex should have been set by check");return this._regex.test(o);default:throw new Error("this should not happen!")}}static _condition_compare(e,t,n,r){if(null===e||null===t)switch(r){case"=":case">=":case"<=":return e===t||"unknown";case"<":case">":return e!==t&&"unknown";case"!=":return e!==t;default:throw new Error("unknown operator")}switch(n){case"number":case"string":switch(r){case"=":return e===t;case">":return e>t;case"<":return e=":return e>=t;case"<=":return e<=t;case"!=":return e!==t;default:throw new Error("unknown operator")}case"date":switch(r){case"=":return e.getTime()===t.getTime();case">":return e>t;case"<":return e=":return e>=t;case"<=":return e<=t;case"!=":return e.getTime()!==t.getTime();default:throw new Error("unknown operator")}case"boolean":if("boolean"!=typeof e||"boolean"!=typeof t)throw new Error("operands have different type");switch(r){case"=":return e===t;case">":return e>t;case"<":return e=":return e>=t;case"<=":return e<=t;case"!=":return e!==t;default:throw new Error("unknown operator")}default:throw new Error("unknown type "+n)}}_checkBoolean(e,t){let n,r;switch(this._func){case"constant":return!0;case"not":return this._checkArgsDataType(e,t,["boolean"]);case"and":case"or":case"xor":return this._checkArgsDataType(e,t,["boolean","boolean"]);case"=":case">=":case"<=":case">":case"<":case"!=":return this._args[0].check(e,t),this._args[1].check(e,t),n=this._args[0].getDataType(),r=this._args[1].getDataType(),"null"===n||"null"===r?!0:n===r||(this.throwExecutionError(i.a("db.messages.exec.error-could-not-compare-different-types",{typeA:n,typeB:r})),this._checkArgsDataType(e,t,["boolean","boolean"]));case"like":case"ilike":if(this._args[0].check(e,t),"string"!==this._args[1].getDataType()||"constant"!==this._args[1]._func)return!1;const o=this._args[1]._args[0];let a=String(o).replace(/[\\^$*+?.()|[\]{}]/g,"\\$&");a=a.replace(/([^\\]?)_/g,"$1."),a=a.replace(/([^\\]?)%/g,"$1.*");const s="ilike"===this._func?"i":"";this._regex=new RegExp("^"+a+"$",s);break;default:throw new Error("this should not happen!")}}_evaluateString(e,t,n,r){switch(this._func){case"constant":return this._args[0];case"lower":case"upper":const o=this._args[0].evaluate(e,t,n,r);return null===o?null:"lower"===this._func?o.toLowerCase():o.toUpperCase();case"concat":let i="";for(let o=0;o0?this._args[0].evaluate(e,t,n,r):void 0,i=this._args.length>1?this._args[1].evaluate(e,t,n,r):void 0;switch(this._func){case"add":return null===o||null===i?null:o+i;case"sub":return null===o||null===i?null:o-i;case"mul":return null===o||null===i?null:o*i;case"div":return null===o||null===i?null:o/i;case"mod":return null===o||null===i?null:o%i;case"abs":return null===o?null:Math.abs(o);case"floor":return null===o?null:Math.floor(o);case"ceil":return null===o?null:Math.ceil(o);case"round":return null===o?null:Math.round(o);case"minus":return null===o?null:-o;case"rand":return Math.random();case"rownum":return n+1;case"strlen":return null===o?null:o.length;case"year":return null===o?null:o.getFullYear();case"month":return null===o?null:o.getMonth()+1;case"dayofmonth":return null===o?null:o.getDate();case"hour":return null===o?null:o.getHours();case"minute":return null===o?null:o.getMinutes();case"second":return null===o?null:o.getSeconds();default:throw new Error("this should not happen!")}}_checkArgsDataType(e,t,n){const r=[];if(this._args.length!==n.length)throw new Error("this should not happen: #args != #types");for(let o=0;o{let t=(e||this._func)+"(";for(let e=0;e{let t="CASE";for(let n=0;n{let t="";return t+=` ${e||this._func} `,t=this._args[0].getFormulaHtml()+t,t+=this._args[1].getFormulaHtml(),`${t}`};function r(){const{_func:r}=this;switch(r){case"constant":return a(this._args[0],this._dataTypeCalculated||this._dataType);case"rand":case"rownum":case"abs":case"ceil":case"floor":case"round":case"year":case"month":case"dayofmonth":case"hour":case"minute":case"second":case"adddate":case"subdate":case"concat":case"upper":case"lower":case"date":case"strlen":return e.call(this,"length");case"minus":return e.call(this,"-");case"not":return e.call(this,"!");case"caseWhen":case"caseWhenElse":return t.call(this,"caseWhenElse"===this._func);case"add":return n.call(this,"+");case"sub":return n.call(this,"-");case"mul":return n.call(this,"*");case"div":return n.call(this,"/");case"mod":return n.call(this,"%");case"and":case"or":case"xor":case"like":case"ilike":case"=":return n.call(this,r);case">=":return n.call(this,"≥");case"<=":return n.call(this,"≤");case">":return n.call(this,">");case"<":return n.call(this,"<");case"!=":return n.call(this,"≠")}return this.toString()}return!0===this._wrappedInParentheses?`(${r.call(this)})`:r.call(this).toString()}}},"./src/db/parser/grammar_ra.pegjs":function(e,t,n){"use strict";function r(e,t,n,o){this.message=e,this.expected=t,this.found=n,this.location=o,this.name="SyntaxError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,r)}!function(e,t){function n(){this.constructor=e}n.prototype=t.prototype,e.prototype=new n}(r,Error),r.buildMessage=function(e,t){var n={literal:function(e){return'"'+o(e.text)+'"'},class:function(e){var t,n="";for(t=0;t0){for(t=1,r=1;t",!1),re=(pr("ψ",!1),pr("psi",!0),pr("τ",!1)),oe=function(){return ri("tau")},ie=pr("tau",!0),ae=pr("γ",!1),se=function(){return ri("gamma")},le=pr("gamma",!0),ue=pr("∪",!1),ce=function(){return ri("unionOperator")},de=pr("union",!0),he=pr("∩",!1),fe=function(){return ri("intersectOperator")},me=pr("intersect",!0),pe=pr("÷",!1),ge=pr("/",!1),ye=pr("\\",!1),be=function(){return ri("differenceOperator")},ve=pr("except",!0),_e=pr("⨯",!1),we=pr("x",!1),Ee=function(){return ri("crossJoinOperator")},je=pr("cross",!0),Ce=pr("join",!0),Se=pr("⨝",!1),Oe=pr("⋈",!1),ke=function(){return ri("innerJoinOperator")},Te=pr("inner",!0),Me=function(){return ri("naturalJoinOperator")},xe=pr("natural",!0),Le=pr("⋉",!1),Re=function(){return ri("leftSemiJoinOperator")},Ae=pr("left",!0),De=pr("semi",!0),Ne=pr("⋊",!1),Pe=function(){return ri("rightSemiJoinOperator")},Ie=pr("right",!0),He=pr("▷",!1),Ye=function(){return ri("antiJoinOperator")},Fe=pr("anti",!0),We=pr("⟕",!1),Be=function(){return ri("leftOuterJoinOperator")},Ue=pr("outer",!0),ze=pr("⟖",!1),Ve=function(){return ri("rightOuterJoinOperator")},qe=pr("⟗",!1),Ge=function(){return ri("fullOuterJoinOperator")},Ke=pr("full",!0),Xe=pr(",",!1),$e=function(e,t){var n=[e];if(null!==t)for(var r in t)n.push(t[r][3]);return n},Je=function(e,t){var n=[e];if(null!==t)for(var r in t)n.push(t[r][3]);return n},Qe=pr("asc",!0),Ze=pr("desc",!0),et=pr("sum",!0),tt=pr("count",!0),nt=pr("avg",!0),rt=pr("min",!0),ot=pr("max",!0),it=pr("(",!1),at=pr(")",!1),st=pr("count(*)",!0),lt=function(e){for(var t=[],n=0;n"group"===e.name);if(!r)continue;const o=r.text;t[o]&&mr(ei("db.messages.parser.error-group-non-unique-group-name",{name:o})),t[o]=!0}}(t),{type:"groupRoot",groups:t,codeInfo:ti()}},ut=pr("en",!1),ct=pr("de",!1),dt=pr("es",!1),ht=/^[a-z@]/,ft=gr([["a","z"],"@"],!1,!1),mt=pr(":",!1),pt=/^[a-z]/,gt=gr([["a","z"]],!1,!1),yt=pr("@",!1),bt=pr("[[",!1),vt=pr("\\]]",!1),_t=pr("]]",!1),wt=function(e,t){return function(e,t){var n,r=t[0];r.child=e,r.codeInfo=ni(r.child.codeInfo,r.codeInfo);for(var o=1;o",!1),kt=pr(">=",!1),Tt=pr("≥",!1),Mt=pr(">",!1),xt=pr("<=",!1),Lt=pr("≤",!1),Rt=pr("<",!1),At=yr("logical AND"),Dt=pr("and",!0),Nt=pr("∧",!1),Pt=yr("logical XOR"),It=pr("xor",!0),Ht=pr("⊻",!1),Yt=pr("⊕",!1),Ft=yr("logical OR"),Wt=pr("or",!0),Bt=pr("∨",!1),Ut=yr("logical NOT"),zt=pr("!",!1),Vt=pr("¬",!1),qt=yr("delimiter"),Gt=pr("string",!0),Kt=pr("number",!0),Xt=pr("date",!0),$t=pr("boolean",!0),Jt=pr("null",!1),Qt=pr("NULL",!1),Zt=pr("}",!1),en=/^[\-_a-z0-9.]/i,tn=gr(["-","_",["a","z"],["0","9"],"."],!1,!0),nn=function(e){return{type:"string",value:e,quoted:!0}},rn=pr('"',!1),on=/^[^"\n]/,an=gr(['"',"\n"],!0,!1),sn=pr("{",!1),ln=yr("boolean expression"),un=pr("||",!1),cn=function(e,t){return{type:"valueExpr",datatype:"boolean",func:e,args:[void 0,t],codeInfo:ti()}},dn=pr("like",!0),hn=pr("ilike",!0),fn=pr("+",!1),mn=pr("*",!1),pn=pr("%",!1),gn=pr("coalesce",!0),yn=pr("concat",!0),bn=pr("adddate",!0),vn=pr("subdate",!0),_n=pr("mod",!0),wn=pr("add",!0),En=pr("sub",!0),jn=pr("mul",!0),Cn=pr("div",!0),Sn=pr("upper",!0),On=pr("ucase",!0),kn=pr("lower",!0),Tn=pr("lcase",!0),Mn=pr("length",!0),xn=pr("abs",!0),Ln=pr("floor",!0),Rn=pr("ceil",!0),An=pr("round",!0),Dn=pr("year",!0),Nn=pr("month",!0),Pn=pr("day",!0),In=pr("hour",!0),Hn=pr("minute",!0),Yn=pr("second",!0),Fn=pr("dayofmonth",!0),Wn=pr("rand",!0),Bn=pr("rownum",!0),Un=pr("now",!0),zn=pr("current_timestamp",!0),Vn=pr("transaction_timestamp",!0),qn=pr("statement_timestamp",!0),Gn=pr("clock_timestamp",!0),Kn=pr("sysdate",!0),Xn=pr("null",!0),$n=pr("case",!0),Jn=pr("when",!0),Qn=pr("then",!0),Zn=function(e,t){return{w:e,t:t}},er=pr("else",!0),tr=pr("end",!0),nr=function(e,t){return function(e,t){var n,r=t[0];r.args[0]=e,r.codeInfo=ti();for(var o=1;olr&&(lr=ir,ur=[]),ur.push(e))}function wr(e,t,n){return new r(r.buildMessage(e,t),e,t,n)}function Er(){var e,t,n=135*ir+0,r=dr[n];return r?(ir=r.nextPos,r.result):(e=ir,(t=function(){var e,t,n,r,i,a,s=135*ir+57,l=dr[s];if(l)return ir=l.nextPos,l.result;if(e=ir,(t=kr())!==o){for(n=[],r=ir,(i=Br())!==o&&(a=Or())!==o?r=i=[i,a]:(ir=r,r=o);r!==o;)n.push(r),r=ir,(i=Br())!==o&&(a=Or())!==o?r=i=[i,a]:(ir=r,r=o);n!==o&&(r=Br())!==o&&(i=kr())!==o?(ar=e,t=function(e,t){var n=[t];for(var r in e)n.push(e[r][0]);return oi(n),{type:"relalgRoot",assignments:n,child:null,operatorPositions:si,codeInfo:ti()}}(n,r),e=t):(ir=e,e=o)}else ir=e,e=o;if(e===o)if(e=ir,(t=kr())!==o){for(n=[],r=ir,(i=Br())!==o&&(a=Or())!==o?r=i=[i,a]:(ir=r,r=o);r!==o;)n.push(r),r=ir,(i=Br())!==o&&(a=Or())!==o?r=i=[i,a]:(ir=r,r=o);n!==o?((r=eo())===o&&(r=null),r!==o&&(i=kr())!==o?(ar=e,t=function(e,t){for(var n=[],r=0;rir?(n=e.charAt(ir),ir++):(n=o,0===cr&&_r(s)),cr--,n===o?t=void 0:(ir=t,t=o),dr[r]={nextPos:ir,result:t},t)}function Cr(){var t,n=135*ir+3,r=dr[n];return r?(ir=r.nextPos,r.result):("\r\n"===e.substr(ir,2)?(t="\r\n",ir+=2):(t=o,0===cr&&_r(l)),t===o&&(10===e.charCodeAt(ir)?(t="\n",ir++):(t=o,0===cr&&_r(u))),dr[n]={nextPos:ir,result:t},t)}function Sr(){var t,n=135*ir+4,r=dr[n];return r?(ir=r.nextPos,r.result):((t=function(){var t,n,r,i,a,l,u,m,p=135*ir+5,g=dr[p];if(g)return ir=g.nextPos,g.result;cr++,t=ir,"--"===e.substr(ir,2)?(n="--",ir+=2):(n=o,0===cr&&_r(d));n!==o?(h.test(e.charAt(ir))?(r=e.charAt(ir),ir++):(r=o,0===cr&&_r(f)),r!==o?(i=ir,cr++,(a=Cr())===o&&(a=jr()),cr--,a!==o?(ir=i,i=void 0):i=o,i!==o?(ar=t,t=n=""):(ir=t,t=o)):(ir=t,t=o)):(ir=t,t=o);if(t===o&&(t=ir,"--"===e.substr(ir,2)?(n="--",ir+=2):(n=o,0===cr&&_r(d)),n!==o?(r=ir,cr++,(i=Cr())===o&&(i=jr()),cr--,i!==o?(ir=r,r=void 0):r=o,r!==o?(ar=t,t=n=""):(ir=t,t=o)):(ir=t,t=o),t===o))if(t=ir,"--"===e.substr(ir,2)?(n="--",ir+=2):(n=o,0===cr&&_r(d)),n!==o)if(h.test(e.charAt(ir))?(r=e.charAt(ir),ir++):(r=o,0===cr&&_r(f)),r!==o){for(i=ir,a=[],l=ir,u=ir,cr++,m=Cr(),cr--,m===o?u=void 0:(ir=u,u=o),u!==o?(e.length>ir?(m=e.charAt(ir),ir++):(m=o,0===cr&&_r(s)),m!==o?l=u=[u,m]:(ir=l,l=o)):(ir=l,l=o);l!==o;)a.push(l),l=ir,u=ir,cr++,m=Cr(),cr--,m===o?u=void 0:(ir=u,u=o),u!==o?(e.length>ir?(m=e.charAt(ir),ir++):(m=o,0===cr&&_r(s)),m!==o?l=u=[u,m]:(ir=l,l=o)):(ir=l,l=o);(i=a!==o?e.substring(i,ir):a)!==o?(a=ir,cr++,(l=Cr())===o&&(l=jr()),cr--,l!==o?(ir=a,a=void 0):a=o,a!==o?(ar=t,t=n=i):(ir=t,t=o)):(ir=t,t=o)}else ir=t,t=o;else ir=t,t=o;cr--,t===o&&(n=o,0===cr&&_r(c));return dr[p]={nextPos:ir,result:t},t}())===o&&(t=function(){var t,n,r,i,a,l,u,c=135*ir+6,d=dr[c];if(d)return ir=d.nextPos,d.result;t=ir,"/*"===e.substr(ir,2)?(n="/*",ir+=2):(n=o,0===cr&&_r(m));if(n!==o){for(r=ir,i=[],a=ir,l=ir,cr++,"*/"===e.substr(ir,2)?(u="*/",ir+=2):(u=o,0===cr&&_r(p)),cr--,u===o?l=void 0:(ir=l,l=o),l!==o?(e.length>ir?(u=e.charAt(ir),ir++):(u=o,0===cr&&_r(s)),u!==o?a=l=[l,u]:(ir=a,a=o)):(ir=a,a=o);a!==o;)i.push(a),a=ir,l=ir,cr++,"*/"===e.substr(ir,2)?(u="*/",ir+=2):(u=o,0===cr&&_r(p)),cr--,u===o?l=void 0:(ir=l,l=o),l!==o?(e.length>ir?(u=e.charAt(ir),ir++):(u=o,0===cr&&_r(s)),u!==o?a=l=[l,u]:(ir=a,a=o)):(ir=a,a=o);(r=i!==o?e.substring(r,ir):i)!==o?("*/"===e.substr(ir,2)?(i="*/",ir+=2):(i=o,0===cr&&_r(p)),i!==o?(ar=t,t=n=r):(ir=t,t=o)):(ir=t,t=o)}else ir=t,t=o;return dr[c]={nextPos:ir,result:t},t}()),dr[n]={nextPos:ir,result:t},t)}function Or(){var t,n,r,i,a,s,l,u=135*ir+7,c=dr[u];if(c)return ir=c.nextPos,c.result;for(cr++,t=ir,n=[],r=ir,i=[],a=Sr();a!==o;)i.push(a),a=Sr();if(i!==o){if(a=[],y.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(b)),s!==o)for(;s!==o;)a.push(s),y.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(b));else a=o;if(a!==o){for(s=[],l=Sr();l!==o;)s.push(l),l=Sr();s!==o?r=i=[i,a,s]:(ir=r,r=o)}else ir=r,r=o}else ir=r,r=o;if(r!==o)for(;r!==o;){for(n.push(r),r=ir,i=[],a=Sr();a!==o;)i.push(a),a=Sr();if(i!==o){if(a=[],y.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(b)),s!==o)for(;s!==o;)a.push(s),y.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(b));else a=o;if(a!==o){for(s=[],l=Sr();l!==o;)s.push(l),l=Sr();s!==o?r=i=[i,a,s]:(ir=r,r=o)}else ir=r,r=o}else ir=r,r=o}else n=o;return n!==o&&(ar=t,n=""),cr--,(t=n)===o&&(n=o,0===cr&&_r(g)),dr[u]={nextPos:ir,result:t},t}function kr(){var t,n,r=135*ir+8,i=dr[r];if(i)return ir=i.nextPos,i.result;for(cr++,t=[],(n=Sr())===o&&(y.test(e.charAt(ir))?(n=e.charAt(ir),ir++):(n=o,0===cr&&_r(b)));n!==o;)t.push(n),(n=Sr())===o&&(y.test(e.charAt(ir))?(n=e.charAt(ir),ir++):(n=o,0===cr&&_r(b)));return cr--,t===o&&(n=o,0===cr&&_r(v)),dr[r]={nextPos:ir,result:t},t}function Tr(){var t,n,r=135*ir+10,i=dr[r];if(i)return ir=i.nextPos,i.result;for(cr++,t=[],_.test(e.charAt(ir))?(n=e.charAt(ir),ir++):(n=o,0===cr&&_r(w));n!==o;)t.push(n),_.test(e.charAt(ir))?(n=e.charAt(ir),ir++):(n=o,0===cr&&_r(w));return cr--,t===o&&(n=o,0===cr&&_r(E)),dr[r]={nextPos:ir,result:t},t}function Mr(){var t,n,r,i=135*ir+12,a=dr[i];if(a)return ir=a.nextPos,a.result;for(t=ir,n=[],(r=Sr())===o&&(h.test(e.charAt(ir))?(r=e.charAt(ir),ir++):(r=o,0===cr&&_r(f)));r!==o;)n.push(r),(r=Sr())===o&&(h.test(e.charAt(ir))?(r=e.charAt(ir),ir++):(r=o,0===cr&&_r(f)));return n!==o&&(ar=t,n=""),t=n,dr[i]={nextPos:ir,result:t},t}function xr(){var t,n,r,i,a,s,l=135*ir+14,u=dr[l];if(u)return ir=u.nextPos,u.result;if(t=ir,n=ir,r=ir,45===e.charCodeAt(ir)?(i="-",ir++):(i=o,0===cr&&_r(k)),i===o&&(i=null),i!==o){if(a=[],T.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(M)),s!==o)for(;s!==o;)a.push(s),T.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(M));else a=o;a!==o?r=i=[i,a]:(ir=r,r=o)}else ir=r,r=o;return(n=r!==o?e.substring(n,ir):r)!==o&&(ar=t,n=parseInt(n,10)),t=n,dr[l]={nextPos:ir,result:t},t}function Lr(){var t,n,r,i,a,s,l,u,c=135*ir+15,d=dr[c];if(d)return ir=d.nextPos,d.result;if(t=ir,n=ir,r=ir,45===e.charCodeAt(ir)?(i="-",ir++):(i=o,0===cr&&_r(k)),i===o&&(i=null),i!==o){if(a=[],T.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(M)),s!==o)for(;s!==o;)a.push(s),T.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(M));else a=o;if(a!==o)if(46===e.charCodeAt(ir)?(s=".",ir++):(s=o,0===cr&&_r(x)),s!==o){if(l=[],T.test(e.charAt(ir))?(u=e.charAt(ir),ir++):(u=o,0===cr&&_r(M)),u!==o)for(;u!==o;)l.push(u),T.test(e.charAt(ir))?(u=e.charAt(ir),ir++):(u=o,0===cr&&_r(M));else l=o;l!==o?r=i=[i,a,s,l]:(ir=r,r=o)}else ir=r,r=o;else ir=r,r=o}else ir=r,r=o;return(n=r!==o?e.substring(n,ir):r)!==o&&(ar=t,n=parseFloat(n)),t=n,dr[c]={nextPos:ir,result:t},t}function Rr(){var t,n,r,i,a,s,l,u,c,d=135*ir+17,h=dr[d];return h?(ir=h.nextPos,h.result):(cr++,t=ir,n=ir,r=ir,T.test(e.charAt(ir))?(i=e.charAt(ir),ir++):(i=o,0===cr&&_r(M)),i!==o?(T.test(e.charAt(ir))?(a=e.charAt(ir),ir++):(a=o,0===cr&&_r(M)),a!==o?(T.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(M)),s!==o?(T.test(e.charAt(ir))?(l=e.charAt(ir),ir++):(l=o,0===cr&&_r(M)),l!==o?r=i=[i,a,s,l]:(ir=r,r=o)):(ir=r,r=o)):(ir=r,r=o)):(ir=r,r=o),(n=r!==o?e.substring(n,ir):r)!==o?(45===e.charCodeAt(ir)?(r="-",ir++):(r=o,0===cr&&_r(k)),r!==o?(i=ir,a=ir,T.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(M)),s!==o?(T.test(e.charAt(ir))?(l=e.charAt(ir),ir++):(l=o,0===cr&&_r(M)),l!==o?a=s=[s,l]:(ir=a,a=o)):(ir=a,a=o),(i=a!==o?e.substring(i,ir):a)!==o?(45===e.charCodeAt(ir)?(a="-",ir++):(a=o,0===cr&&_r(k)),a!==o?(s=ir,l=ir,T.test(e.charAt(ir))?(u=e.charAt(ir),ir++):(u=o,0===cr&&_r(M)),u!==o?(T.test(e.charAt(ir))?(c=e.charAt(ir),ir++):(c=o,0===cr&&_r(M)),c!==o?l=u=[u,c]:(ir=l,l=o)):(ir=l,l=o),(s=l!==o?e.substring(s,ir):l)!==o?(ar=t,t=n=function(e,t,n){e=parseInt(e,10),t=parseInt(t,10)-1,n=parseInt(n,10);var r=new Date(e,t,n);return r.getFullYear()==e&&r.getMonth()==t&&r.getDate()==n||mr(ei("db.messages.parser.error-invalid-date-format",{str:hr()})),r}(n,i,s)):(ir=t,t=o)):(ir=t,t=o)):(ir=t,t=o)):(ir=t,t=o)):(ir=t,t=o),cr--,t===o&&(n=o,0===cr&&_r(L)),dr[d]={nextPos:ir,result:t},t)}function Ar(){var t,n,r=135*ir+18,i=dr[r];return i?(ir=i.nextPos,i.result):(t=ir,"true"===e.substr(ir,4).toLowerCase()?(n=e.substr(ir,4),ir+=4):(n=o,0===cr&&_r(R)),n!==o&&(ar=t,n=!0),(t=n)===o&&(t=ir,"false"===e.substr(ir,5).toLowerCase()?(n=e.substr(ir,5),ir+=5):(n=o,0===cr&&_r(A)),n!==o&&(ar=t,n=!1),t=n),dr[r]={nextPos:ir,result:t},t)}function Dr(){var t,n,r,i,a,s,l,u,c=135*ir+20,d=dr[c];if(d)return ir=d.nextPos,d.result;if(cr++,t=ir,n=ir,cr++,r=ir,(i=Zo())!==o){if(a=ir,cr++,s=[],P.test(e.charAt(ir))?(l=e.charAt(ir),ir++):(l=o,0===cr&&_r(I)),l!==o)for(;l!==o;)s.push(l),P.test(e.charAt(ir))?(l=e.charAt(ir),ir++):(l=o,0===cr&&_r(I));else s=o;cr--,s===o?a=void 0:(ir=a,a=o),a!==o?r=i=[i,a]:(ir=r,r=o)}else ir=r,r=o;if(cr--,r===o?n=void 0:(ir=n,n=o),n!==o){if(r=ir,i=ir,a=[],H.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(Y)),s!==o)for(;s!==o;)a.push(s),H.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(Y));else a=o;if(a!==o){for(s=ir,l=[],P.test(e.charAt(ir))?(u=e.charAt(ir),ir++):(u=o,0===cr&&_r(I));u!==o;)l.push(u),P.test(e.charAt(ir))?(u=e.charAt(ir),ir++):(u=o,0===cr&&_r(I));(s=l!==o?e.substring(s,ir):l)!==o?i=a=[a,s]:(ir=i,i=o)}else ir=i,i=o;(r=i!==o?e.substring(r,ir):i)!==o?(ar=t,t=n=r):(ir=t,t=o)}else ir=t,t=o;return cr--,t===o&&(n=o,0===cr&&_r(N)),dr[c]={nextPos:ir,result:t},t}function Nr(){var t,n,r,i,a,s,l,u,c=135*ir+21,d=dr[c];if(d)return ir=d.nextPos,d.result;if(t=ir,n=ir,cr++,r=ir,(i=Zo())!==o){if(a=ir,cr++,s=[],P.test(e.charAt(ir))?(l=e.charAt(ir),ir++):(l=o,0===cr&&_r(I)),l!==o)for(;l!==o;)s.push(l),P.test(e.charAt(ir))?(l=e.charAt(ir),ir++):(l=o,0===cr&&_r(I));else s=o;cr--,s===o?a=void 0:(ir=a,a=o),a!==o?r=i=[i,a]:(ir=r,r=o)}else ir=r,r=o;if(cr--,r===o?n=void 0:(ir=n,n=o),n!==o){if(r=ir,i=ir,a=[],H.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(Y)),s!==o)for(;s!==o;)a.push(s),H.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(Y));else a=o;if(a!==o){for(s=ir,l=[],P.test(e.charAt(ir))?(u=e.charAt(ir),ir++):(u=o,0===cr&&_r(I));u!==o;)l.push(u),P.test(e.charAt(ir))?(u=e.charAt(ir),ir++):(u=o,0===cr&&_r(I));(s=l!==o?e.substring(s,ir):l)!==o?i=a=[a,s]:(ir=i,i=o)}else ir=i,i=o;(r=i!==o?e.substring(r,ir):i)!==o?(ar=t,t=n=r):(ir=t,t=o)}else ir=t,t=o;return dr[c]={nextPos:ir,result:t},t}function Pr(){var t,n,r,i,a,s,l,u,c=135*ir+22,d=dr[c];if(d)return ir=d.nextPos,d.result;if(t=ir,n=ir,(r=Dr())!==o?(46===e.charCodeAt(ir)?(i=".",ir++):(i=o,0===cr&&_r(x)),i!==o?n=r=[r,i]:(ir=n,n=o)):(ir=n,n=o),n===o&&(n=null),n!==o&&(r=Nr())!==o?(ar=t,u=r,null!=(l=n)&&(l=l[0]),t=n={type:"columnName",name:u,relAlias:l}):(ir=t,t=o),t===o)if(t=ir,n=ir,(r=Dr())!==o?(46===e.charCodeAt(ir)?(i=".",ir++):(i=o,0===cr&&_r(x)),i!==o?n=r=[r,i]:(ir=n,n=o)):(ir=n,n=o),n===o&&(n=null),n!==o)if(91===e.charCodeAt(ir)?(r="[",ir++):(r=o,0===cr&&_r(F)),r!==o){if(i=ir,a=[],T.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(M)),s!==o)for(;s!==o;)a.push(s),T.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(M));else a=o;(i=a!==o?e.substring(i,ir):a)!==o?(93===e.charCodeAt(ir)?(a="]",ir++):(a=o,0===cr&&_r(W)),a!==o?(ar=t,t=n=function(e,t){return null!=e&&(e=e[0]),{type:"columnName",name:parseInt(t,10),relAlias:e}}(n,i)):(ir=t,t=o)):(ir=t,t=o)}else ir=t,t=o;else ir=t,t=o;return dr[c]={nextPos:ir,result:t},t}function Ir(){var t,n,r,i=135*ir+25,a=dr[i];return a?(ir=a.nextPos,a.result):(t=ir,kr()!==o?(n=ir,961===e.charCodeAt(ir)?(r="ρ",ir++):(r=o,0===cr&&_r(K)),r!==o&&(ar=n,r=X()),(n=r)!==o&&(r=kr())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o),t===o&&(t=ir,kr()!==o?(n=ir,"rho"===e.substr(ir,3).toLowerCase()?(r=e.substr(ir,3),ir+=3):(r=o,0===cr&&_r($)),r!==o&&(ar=n,r=X()),(n=r)!==o&&(r=Or())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o)),dr[i]={nextPos:ir,result:t},t)}function Hr(){var t,n,r,i=135*ir+26,a=dr[i];return a?(ir=a.nextPos,a.result):(t=ir,kr()!==o?(n=ir,8592===e.charCodeAt(ir)?(r="←",ir++):(r=o,0===cr&&_r(J)),r!==o&&(ar=n,r=Q()),(n=r)!==o&&(r=kr())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o),t===o&&(t=ir,kr()!==o?(n=ir,"<-"===e.substr(ir,2)?(r="<-",ir+=2):(r=o,0===cr&&_r(Z)),r!==o&&(ar=n,r=Q()),(n=r)!==o&&(r=kr())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o)),dr[i]={nextPos:ir,result:t},t)}function Yr(){var t,n,r,i=135*ir+27,a=dr[i];return a?(ir=a.nextPos,a.result):(t=ir,kr()!==o?(n=ir,8594===e.charCodeAt(ir)?(r="→",ir++):(r=o,0===cr&&_r(ee)),r!==o&&(ar=n,r=te()),(n=r)!==o&&(r=kr())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o),t===o&&(t=ir,kr()!==o?(n=ir,"->"===e.substr(ir,2)?(r="->",ir+=2):(r=o,0===cr&&_r(ne)),r!==o&&(ar=n,r=te()),(n=r)!==o&&(r=kr())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o)),dr[i]={nextPos:ir,result:t},t)}function Fr(){var t,n,r,i=135*ir+30,a=dr[i];return a?(ir=a.nextPos,a.result):(t=ir,kr()!==o?(n=ir,947===e.charCodeAt(ir)?(r="γ",ir++):(r=o,0===cr&&_r(ae)),r!==o&&(ar=n,r=se()),(n=r)!==o&&(r=kr())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o),t===o&&(t=ir,kr()!==o?(n=ir,"gamma"===e.substr(ir,5).toLowerCase()?(r=e.substr(ir,5),ir+=5):(r=o,0===cr&&_r(le)),r!==o&&(ar=n,r=se()),(n=r)!==o&&(r=Or())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o)),dr[i]={nextPos:ir,result:t},t)}function Wr(){var t,n,r,i=135*ir+33,a=dr[i];return a?(ir=a.nextPos,a.result):(t=ir,kr()!==o?(n=ir,247===e.charCodeAt(ir)?(r="÷",ir++):(r=o,0===cr&&_r(pe)),r===o&&(47===e.charCodeAt(ir)?(r="/",ir++):(r=o,0===cr&&_r(ge))),r!==o&&(ar=n,r=ri("divisionOperator")),(n=r)!==o&&(r=kr())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o),dr[i]={nextPos:ir,result:t},t)}function Br(){var t,n,r,i,a=135*ir+44,s=dr[a];return s?(ir=s.nextPos,s.result):(t=ir,(n=Dr())!==o?(ar=ir,i=n,(void ai.push(i)?o:void 0)!==o&&function(){var t,n,r,i,a=135*ir+19,s=dr[a];return s?(ir=s.nextPos,s.result):(t=ir,(n=kr())!==o?(61===e.charCodeAt(ir)?(r="=",ir++):(r=o,0===cr&&_r(D)),r!==o&&(i=kr())!==o?t=n=[n,r,i]:(ir=t,t=o)):(ir=t,t=o),dr[a]={nextPos:ir,result:t},t)}()!==o&&(r=eo())!==o?(ar=t,t=n=function(e,t){return t.assignmentName=e,{type:"assignment",name:e,child:t,codeInfo:ti()}}(n,r)):(ir=t,t=o)):(ir=t,t=o),dr[a]={nextPos:ir,result:t},t)}function Ur(){var e,t,n,r=135*ir+45,i=dr[r];return i?(ir=i.nextPos,i.result):(e=ir,(t=Uo())!==o&&Yr()!==o&&(n=Nr())!==o?(ar=e,e=t={type:"namedColumnExpr",name:n,relAlias:null,child:t,codeInfo:ti()}):(ir=e,e=o),e===o&&(e=ir,(t=Nr())!==o&&Hr()!==o&&(n=Uo())!==o?(ar=e,e=t=function(e,t){return{type:"namedColumnExpr",name:e,relAlias:null,child:t,codeInfo:ti()}}(t,n)):(ir=e,e=o),e===o&&(e=ir,(t=Pr())!==o&&(ar=e,t=t),e=t)),dr[r]={nextPos:ir,result:e},e)}function zr(){var e,t,n,r=135*ir+48,i=dr[r];return i?(ir=i.nextPos,i.result):(e=ir,(t=Nr())!==o&&Hr()!==o&&(n=Pr())!==o?(ar=e,e=t={type:"colAssignment",src:n,dst:t,codeInfo:ti()}):(ir=e,e=o),e===o&&(e=ir,(t=Pr())!==o&&Yr()!==o&&(n=Nr())!==o?(ar=e,e=t=function(e,t){return{type:"colAssignment",src:e,dst:t,codeInfo:ti()}}(t,n)):(ir=e,e=o)),dr[r]={nextPos:ir,result:e},e)}function Vr(){var t,n,r,i,a,s,l=135*ir+51,u=dr[l];return u?(ir=u.nextPos,u.result):(t=ir,(n=Pr())!==o?(r=ir,(i=Or())!==o&&(a=function(){var t,n,r=135*ir+50,i=dr[r];return i?(ir=i.nextPos,i.result):(t=ir,"asc"===e.substr(ir,3).toLowerCase()?(n=e.substr(ir,3),ir+=3):(n=o,0===cr&&_r(Qe)),n!==o&&(ar=t,n=!0),(t=n)===o&&(t=ir,"desc"===e.substr(ir,4).toLowerCase()?(n=e.substr(ir,4),ir+=4):(n=o,0===cr&&_r(Ze)),n!==o&&(ar=t,n=!1),t=n),dr[r]={nextPos:ir,result:t},t)}())!==o?r=i=[i,a]:(ir=r,r=o),r===o&&(r=null),r!==o?(ar=t,t=n={col:n,asc:s=null==(s=r)||s[1]}):(ir=t,t=o)):(ir=t,t=o),dr[l]={nextPos:ir,result:t},t)}function qr(){var t,n,r,i,a,s,l=135*ir+53,u=dr[l];return u?(ir=u.nextPos,u.result):(t=ir,n=ir,"sum"===e.substr(ir,3).toLowerCase()?(r=e.substr(ir,3),ir+=3):(r=o,0===cr&&_r(et)),r===o&&("count"===e.substr(ir,5).toLowerCase()?(r=e.substr(ir,5),ir+=5):(r=o,0===cr&&_r(tt)),r===o&&("avg"===e.substr(ir,3).toLowerCase()?(r=e.substr(ir,3),ir+=3):(r=o,0===cr&&_r(nt)),r===o&&("min"===e.substr(ir,3).toLowerCase()?(r=e.substr(ir,3),ir+=3):(r=o,0===cr&&_r(rt)),r===o&&("max"===e.substr(ir,3).toLowerCase()?(r=e.substr(ir,3),ir+=3):(r=o,0===cr&&_r(ot)))))),(n=r!==o?e.substring(n,ir):r)!==o?(40===e.charCodeAt(ir)?(r="(",ir++):(r=o,0===cr&&_r(it)),r!==o&&kr()!==o&&(i=Pr())!==o&&kr()!==o?(41===e.charCodeAt(ir)?(a=")",ir++):(a=o,0===cr&&_r(at)),a!==o?(ar=t,s=i,t=n={aggFunction:n.toUpperCase(),col:s}):(ir=t,t=o)):(ir=t,t=o)):(ir=t,t=o),t===o&&(t=ir,"count(*)"===e.substr(ir,8).toLowerCase()?(n=e.substr(ir,8),ir+=8):(n=o,0===cr&&_r(st)),n!==o&&(ar=t,n={aggFunction:"COUNT_ALL",col:null}),t=n),dr[l]={nextPos:ir,result:t},t)}function Gr(){var e,t,n,r,i,a=135*ir+54,s=dr[a];return s?(ir=s.nextPos,s.result):(e=ir,(t=qr())!==o&&Yr()!==o&&(n=Nr())!==o?(ar=e,i=n,(r=t).name=i,e=t=r):(ir=e,e=o),e===o&&(e=ir,(t=Nr())!==o&&Hr()!==o&&(n=qr())!==o?(ar=e,e=t=function(e,t){return t.name=e,t}(t,n)):(ir=e,e=o)),dr[a]={nextPos:ir,result:e},e)}function Kr(){var t,n,r,i,a,s,l,u,c=135*ir+55,d=dr[c];if(d)return ir=d.nextPos,d.result;if(t=ir,(n=Gr())!==o){for(r=[],i=ir,(a=kr())!==o?(44===e.charCodeAt(ir)?(s=",",ir++):(s=o,0===cr&&_r(Xe)),s!==o&&(l=kr())!==o&&(u=Gr())!==o?i=a=[a,s,l,u]:(ir=i,i=o)):(ir=i,i=o);i!==o;)r.push(i),i=ir,(a=kr())!==o?(44===e.charCodeAt(ir)?(s=",",ir++):(s=o,0===cr&&_r(Xe)),s!==o&&(l=kr())!==o&&(u=Gr())!==o?i=a=[a,s,l,u]:(ir=i,i=o)):(ir=i,i=o);r!==o?(ar=t,t=n=$e(n,r)):(ir=t,t=o)}else ir=t,t=o;return dr[c]={nextPos:ir,result:t},t}function Xr(){var e,t,n=135*ir+56,r=dr[n];return r?(ir=r.nextPos,r.result):(e=ir,(t=So())!==o&&Or()!==o?(ar=ir,(function(e){if("valueExpr"===e.type&&"columnValue"===e.func&&!e.wrappedInParentheses&&null===e.args[1]){for(var t=0;tir?(h=e.charAt(ir),ir++):(h=o,0===cr&&_r(s)),h!==o?c=d=[d,h]:(ir=c,c=o)):(ir=c,c=o);c!==o;)u.push(c),c=ir,d=ir,cr++,h=Cr(),cr--,h===o?d=void 0:(ir=d,d=o),d!==o?(e.length>ir?(h=e.charAt(ir),ir++):(h=o,0===cr&&_r(s)),h!==o?c=d=[d,h]:(ir=c,c=o)):(ir=c,c=o);(l=u!==o?e.substring(l,ir):u)!==o?(ar=t,t=n=function(e,t,n){return{name:e,lang:t?t[1]:null,text:n}}(r,i,l)):(ir=t,t=o)}else ir=t,t=o;else ir=t,t=o;else ir=t,t=o}else ir=t,t=o;if(t===o){if(t=ir,n=ir,cr++,r=ir,i=[],ht.test(e.charAt(ir))?(a=e.charAt(ir),ir++):(a=o,0===cr&&_r(ft)),a!==o)for(;a!==o;)i.push(a),ht.test(e.charAt(ir))?(a=e.charAt(ir),ir++):(a=o,0===cr&&_r(ft));else i=o;if(i!==o?("[["===e.substr(ir,2)?(a="[[",ir+=2):(a=o,0===cr&&_r(bt)),a!==o?r=i=[i,a]:(ir=r,r=o)):(ir=r,r=o),cr--,r!==o?(ir=n,n=void 0):n=o,n!==o){if(r=ir,i=[],pt.test(e.charAt(ir))?(a=e.charAt(ir),ir++):(a=o,0===cr&&_r(gt)),a!==o)for(;a!==o;)i.push(a),pt.test(e.charAt(ir))?(a=e.charAt(ir),ir++):(a=o,0===cr&&_r(gt));else i=o;if((r=i!==o?e.substring(r,ir):i)!==o)if(i=ir,64===e.charCodeAt(ir)?(a="@",ir++):(a=o,0===cr&&_r(yt)),a!==o&&(l=Jr())!==o?i=a=[a,l]:(ir=i,i=o),i===o&&(i=null),i!==o)if("[["===e.substr(ir,2)?(a="[[",ir+=2):(a=o,0===cr&&_r(bt)),a!==o){for(l=ir,u=[],"\\]]"===e.substr(ir,3)?(c="\\]]",ir+=3):(c=o,0===cr&&_r(vt)),c===o&&(c=ir,d=ir,cr++,"]]"===e.substr(ir,2)?(h="]]",ir+=2):(h=o,0===cr&&_r(_t)),cr--,h===o?d=void 0:(ir=d,d=o),d!==o?(e.length>ir?(h=e.charAt(ir),ir++):(h=o,0===cr&&_r(s)),h!==o?c=d=[d,h]:(ir=c,c=o)):(ir=c,c=o));c!==o;)u.push(c),"\\]]"===e.substr(ir,3)?(c="\\]]",ir+=3):(c=o,0===cr&&_r(vt)),c===o&&(c=ir,d=ir,cr++,"]]"===e.substr(ir,2)?(h="]]",ir+=2):(h=o,0===cr&&_r(_t)),cr--,h===o?d=void 0:(ir=d,d=o),d!==o?(e.length>ir?(h=e.charAt(ir),ir++):(h=o,0===cr&&_r(s)),h!==o?c=d=[d,h]:(ir=c,c=o)):(ir=c,c=o));(l=u!==o?e.substring(l,ir):u)!==o?("]]"===e.substr(ir,2)?(u="]]",ir+=2):(u=o,0===cr&&_r(_t)),u!==o?(ar=t,t=n=function(e,t,n){return n=(n=n.replace(/\\]]/g,"]]")).replace(/\\\\]]/g,"\\]]"),{name:e,lang:t?t[1]:null,text:n}}(r,i,l)):(ir=t,t=o)):(ir=t,t=o)}else ir=t,t=o;else ir=t,t=o;else ir=t,t=o}else ir=t,t=o}return dr[f]={nextPos:ir,result:t},t}function Zr(){var e,t,n,r,i,a,s=135*ir+62,l=dr[s];if(l)return ir=l.nextPos,l.result;if(e=ir,kr()!==o)if((t=function(){var e,t,n,r,i,a,s,l,u=135*ir+59,c=dr[u];if(c)return ir=c.nextPos,c.result;if(e=ir,(t=Qr())!==o){for(n=[],r=ir,(i=Or())!==o&&(a=Qr())!==o?r=i=[i,a]:(ir=r,r=o);r!==o;)n.push(r),r=ir,(i=Or())!==o&&(a=Qr())!==o?r=i=[i,a]:(ir=r,r=o);n!==o?(ar=e,s=n,(l=[]).push(t),s.map((function(e){var t=e[1];l.push(t)})),e=t=l):(ir=e,e=o)}else ir=e,e=o;return dr[u]={nextPos:ir,result:e},e}())!==o){if(n=[],r=ir,(i=Or())!==o&&(a=Br())!==o?r=i=[i,a]:(ir=r,r=o),r!==o)for(;r!==o;)n.push(r),r=ir,(i=Or())!==o&&(a=Br())!==o?r=i=[i,a]:(ir=r,r=o);else n=o;n!==o?(ar=e,e=function(e,t){for(var n=[],r=0;r"group"===e.name);return void 0===o?mr(ei("db.messages.parser.error-group-header-name-missing")+': "group: ..........\\n"'):0===o.text.trim().length&&mr(ei("error-group-header-name-empty")),{type:"tableGroup",headers:e,assignments:n,codeInfo:ti()}}(t,n)):(ir=e,e=o)}else ir=e,e=o;else ir=e,e=o;return dr[s]={nextPos:ir,result:e},e}function eo(){var e,t,n,r,i=135*ir+63,a=dr[i];if(a)return ir=a.nextPos,a.result;if(e=ir,(t=to())!==o){if(n=[],(r=io())===o&&(r=ao()),r!==o)for(;r!==o;)n.push(r),(r=io())===o&&(r=ao());else n=o;n!==o?(ar=e,e=t=wt(t,n)):(ir=e,e=o)}else ir=e,e=o;return e===o&&(e=to()),dr[i]={nextPos:ir,result:e},e}function to(){var e,t,n,r,i=135*ir+64,a=dr[i];if(a)return ir=a.nextPos,a.result;if(e=ir,(t=no())!==o){if(n=[],(r=oo())!==o)for(;r!==o;)n.push(r),r=oo();else n=o;n!==o?(ar=e,e=t=wt(t,n)):(ir=e,e=o)}else ir=e,e=o;return e===o&&(e=no()),dr[i]={nextPos:ir,result:e},e}function no(){var e,t,n,r,i=135*ir+65,a=dr[i];if(a)return ir=a.nextPos,a.result;if(e=ir,(t=ro())!==o){if(n=[],(r=so())===o&&(r=lo())===o&&(r=uo())===o&&(r=co())===o&&(r=ho())===o&&(r=fo())===o&&(r=mo())===o&&(r=po())===o&&(r=go())===o&&(r=yo()),r!==o)for(;r!==o;)n.push(r),(r=so())===o&&(r=lo())===o&&(r=uo())===o&&(r=co())===o&&(r=ho())===o&&(r=fo())===o&&(r=mo())===o&&(r=po())===o&&(r=go())===o&&(r=yo());else n=o;n!==o?(ar=e,e=t=wt(t,n)):(ir=e,e=o)}else ir=e,e=o;return e===o&&(e=ro()),dr[i]={nextPos:ir,result:e},e}function ro(){var t,n=135*ir+66,r=dr[n];return r?(ir=r.nextPos,r.result):((t=function(){var t,n,r,i,a=135*ir+86,s=dr[a];if(s)return ir=s.nextPos,s.result;t=ir,(n=function(){var t,n,r,i=135*ir+29,a=dr[i];return a?(ir=a.nextPos,a.result):(t=ir,kr()!==o?(n=ir,964===e.charCodeAt(ir)?(r="τ",ir++):(r=o,0===cr&&_r(re)),r!==o&&(ar=n,r=oe()),(n=r)!==o&&(r=kr())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o),t===o&&(t=ir,kr()!==o?(n=ir,"tau"===e.substr(ir,3).toLowerCase()?(r=e.substr(ir,3),ir+=3):(r=o,0===cr&&_r(ie)),r!==o&&(ar=n,r=oe()),(n=r)!==o&&(r=Or())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o)),dr[i]={nextPos:ir,result:t},t)}())!==o&&(r=function(){var t,n,r,i,a,s,l,u,c=135*ir+52,d=dr[c];if(d)return ir=d.nextPos,d.result;if(t=ir,(n=Vr())!==o){for(r=[],i=ir,(a=kr())!==o?(44===e.charCodeAt(ir)?(s=",",ir++):(s=o,0===cr&&_r(Xe)),s!==o&&(l=kr())!==o&&(u=Vr())!==o?i=a=[a,s,l,u]:(ir=i,i=o)):(ir=i,i=o);i!==o;)r.push(i),i=ir,(a=kr())!==o?(44===e.charCodeAt(ir)?(s=",",ir++):(s=o,0===cr&&_r(Xe)),s!==o&&(l=kr())!==o&&(u=Vr())!==o?i=a=[a,s,l,u]:(ir=i,i=o)):(ir=i,i=o);r!==o?(ar=t,t=n=Je(n,r)):(ir=t,t=o)}else ir=t,t=o;return dr[c]={nextPos:ir,result:t},t}())!==o&&Or()!==o&&(i=ro())!==o?(ar=t,l=n,u=r,c=i,si.push(l),n={type:"orderBy",child:c,arg:u,codeInfo:ti()},t=n):(ir=t,t=o);var l,u,c;return dr[a]={nextPos:ir,result:t},t}())===o&&(t=function(){var t,n,r,i,a,s,l,u=135*ir+85,c=dr[u];if(c)return ir=c.nextPos,c.result;t=ir,(n=Fr())!==o&&(r=function(){var t,n,r,i,a,s,l,u,c=135*ir+47,d=dr[c];if(d)return ir=d.nextPos,d.result;if(t=ir,(n=Pr())!==o){for(r=[],i=ir,(a=kr())!==o?(44===e.charCodeAt(ir)?(s=",",ir++):(s=o,0===cr&&_r(Xe)),s!==o&&(l=kr())!==o&&(u=Pr())!==o?i=a=[a,s,l,u]:(ir=i,i=o)):(ir=i,i=o);i!==o;)r.push(i),i=ir,(a=kr())!==o?(44===e.charCodeAt(ir)?(s=",",ir++):(s=o,0===cr&&_r(Xe)),s!==o&&(l=kr())!==o&&(u=Pr())!==o?i=a=[a,s,l,u]:(ir=i,i=o)):(ir=i,i=o);r!==o?(ar=t,t=n=$e(n,r)):(ir=t,t=o)}else ir=t,t=o;return dr[c]={nextPos:ir,result:t},t}())!==o&&(i=kr())!==o?(59===e.charCodeAt(ir)?(a=";",ir++):(a=o,0===cr&&_r(jt)),a!==o&&kr()!==o&&(s=Kr())!==o&&Or()!==o&&(l=ro())!==o?(ar=t,d=n,h=r,f=s,m=l,si.push(d),n={type:"groupBy",child:m,group:h,aggregate:f,codeInfo:ti()},t=n):(ir=t,t=o)):(ir=t,t=o);var d,h,f,m;t===o&&(t=ir,(n=Fr())!==o?(r=ir,(i=kr())!==o?(59===e.charCodeAt(ir)?(a=";",ir++):(a=o,0===cr&&_r(jt)),a!==o?r=i=[i,a]:(ir=r,r=o)):(ir=r,r=o),r===o&&(r=null),r!==o&&(i=kr())!==o&&(a=Kr())!==o&&Or()!==o&&(s=ro())!==o?(ar=t,n=function(e,t,n){return si.push(e),{type:"groupBy",child:n,group:[],aggregate:t,codeInfo:ti()}}(n,a,s),t=n):(ir=t,t=o)):(ir=t,t=o));return dr[u]={nextPos:ir,result:t},t}())===o&&(t=function(){var e,t,n,r,i=135*ir+84,a=dr[i];if(a)return ir=a.nextPos,a.result;e=ir,(t=Ir())!==o&&(n=Dr())!==o&&Or()!==o&&(r=ro())!==o?(ar=e,s=t,l=n,u=r,si.push(s),t={type:"renameRelation",child:u,newRelAlias:l,codeInfo:ti()},e=t):(ir=e,e=o);var s,l,u;return dr[i]={nextPos:ir,result:e},e}())===o&&(t=function(){var t,n,r,i,a=135*ir+83,s=dr[a];if(s)return ir=s.nextPos,s.result;t=ir,(n=Ir())!==o&&(r=function(){var t,n,r,i,a,s,l,u,c=135*ir+49,d=dr[c];if(d)return ir=d.nextPos,d.result;if(t=ir,(n=zr())!==o){for(r=[],i=ir,(a=kr())!==o?(44===e.charCodeAt(ir)?(s=",",ir++):(s=o,0===cr&&_r(Xe)),s!==o&&(l=kr())!==o&&(u=zr())!==o?i=a=[a,s,l,u]:(ir=i,i=o)):(ir=i,i=o);i!==o;)r.push(i),i=ir,(a=kr())!==o?(44===e.charCodeAt(ir)?(s=",",ir++):(s=o,0===cr&&_r(Xe)),s!==o&&(l=kr())!==o&&(u=zr())!==o?i=a=[a,s,l,u]:(ir=i,i=o)):(ir=i,i=o);r!==o?(ar=t,t=n=Je(n,r)):(ir=t,t=o)}else ir=t,t=o;return dr[c]={nextPos:ir,result:t},t}())!==o&&Or()!==o&&(i=ro())!==o?(ar=t,l=n,u=r,c=i,si.push(l),n={type:"renameColumns",child:c,arg:u,codeInfo:ti()},t=n):(ir=t,t=o);var l,u,c;return dr[a]={nextPos:ir,result:t},t}())===o&&(t=function(){var t,n,r,i,a=135*ir+82,s=dr[a];if(s)return ir=s.nextPos,s.result;t=ir,(n=function(){var t,n,r,i=135*ir+24,a=dr[i];return a?(ir=a.nextPos,a.result):(t=ir,kr()!==o?(n=ir,963===e.charCodeAt(ir)?(r="σ",ir++):(r=o,0===cr&&_r(V)),r!==o&&(ar=n,r=q()),(n=r)!==o&&(r=kr())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o),t===o&&(t=ir,kr()!==o?(n=ir,"sigma"===e.substr(ir,5).toLowerCase()?(r=e.substr(ir,5),ir+=5):(r=o,0===cr&&_r(G)),r!==o&&(ar=n,r=q()),(n=r)!==o&&(r=Or())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o)),dr[i]={nextPos:ir,result:t},t)}())!==o&&(r=So())!==o&&Or()!==o&&(i=ro())!==o?(ar=t,l=n,u=r,c=i,si.push(l),n={type:"selection",child:c,arg:u,codeInfo:ti()},t=n):(ir=t,t=o);var l,u,c;return dr[a]={nextPos:ir,result:t},t}())===o&&(t=function(){var t,n,r,i,a=135*ir+81,s=dr[a];if(s)return ir=s.nextPos,s.result;t=ir,(n=function(){var t,n,r,i=135*ir+23,a=dr[i];return a?(ir=a.nextPos,a.result):(t=ir,kr()!==o?(n=ir,960===e.charCodeAt(ir)?(r="π",ir++):(r=o,0===cr&&_r(B)),r!==o&&(ar=n,r=U()),(n=r)!==o&&(r=kr())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o),t===o&&(t=ir,kr()!==o?(n=ir,"pi"===e.substr(ir,2).toLowerCase()?(r=e.substr(ir,2),ir+=2):(r=o,0===cr&&_r(z)),r!==o&&(ar=n,r=U()),(n=r)!==o&&(r=Or())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o)),dr[i]={nextPos:ir,result:t},t)}())!==o&&(r=function(){var t,n,r,i,a,s,l,u,c=135*ir+46,d=dr[c];if(d)return ir=d.nextPos,d.result;if(t=ir,(n=Ur())!==o){for(r=[],i=ir,(a=kr())!==o?(44===e.charCodeAt(ir)?(s=",",ir++):(s=o,0===cr&&_r(Xe)),s!==o&&(l=kr())!==o&&(u=Ur())!==o?i=a=[a,s,l,u]:(ir=i,i=o)):(ir=i,i=o);i!==o;)r.push(i),i=ir,(a=kr())!==o?(44===e.charCodeAt(ir)?(s=",",ir++):(s=o,0===cr&&_r(Xe)),s!==o&&(l=kr())!==o&&(u=Ur())!==o?i=a=[a,s,l,u]:(ir=i,i=o)):(ir=i,i=o);r!==o?(ar=t,t=n=$e(n,r)):(ir=t,t=o)}else ir=t,t=o;return dr[c]={nextPos:ir,result:t},t}())!==o&&Or()!==o&&(i=ro())!==o?(ar=t,l=n,u=r,c=i,si.push(l),n={type:"projection",child:c,arg:u,codeInfo:ti()},t=n):(ir=t,t=o);var l,u,c;return dr[a]={nextPos:ir,result:t},t}())===o&&(t=function(){var t,n,r,i,a=135*ir+67,s=dr[a];if(s)return ir=s.nextPos,s.result;(t=function(){var t,n,r,i,a,s,l,u,c,d=135*ir+105,h=dr[d];if(h)return ir=h.nextPos,h.result;t=ir,123===e.charCodeAt(ir)?(n="{",ir++):(n=o,0===cr&&_r(sn));if(n!==o)if(kr()!==o)if((r=function(){var e,t,n,r,i,a,s=135*ir+103,l=dr[s];if(l)return ir=l.nextPos,l.result;if(e=ir,(t=Eo())!==o){for(n=[],r=ir,(i=wo())!==o&&(a=Eo())!==o?r=i=[i,a]:(ir=r,r=o);r!==o;)n.push(r),r=ir,(i=wo())!==o&&(a=Eo())!==o?r=i=[i,a]:(ir=r,r=o);n!==o?(ar=e,t=function(e,t){for(var n,r=[e],o=0;o="===e.substr(ir,2)?(n=">=",ir+=2):(n=o,0===cr&&_r(kt));n===o&&(8805===e.charCodeAt(ir)?(n="≥",ir++):(n=o,0===cr&&_r(Tt)));n!==o&&(ar=t,n=">=");return t=n,dr[r]={nextPos:ir,result:t},t}())===o&&(t=function(){var t,n,r=135*ir+94,i=dr[r];if(i)return ir=i.nextPos,i.result;t=ir,"<="===e.substr(ir,2)?(n="<=",ir+=2):(n=o,0===cr&&_r(xt));n===o&&(8804===e.charCodeAt(ir)?(n="≤",ir++):(n=o,0===cr&&_r(Lt)));n!==o&&(ar=t,n="<=");return t=n,dr[r]={nextPos:ir,result:t},t}())===o&&(t=function(){var t,n=135*ir+93,r=dr[n];if(r)return ir=r.nextPos,r.result;62===e.charCodeAt(ir)?(t=">",ir++):(t=o,0===cr&&_r(Mt));return dr[n]={nextPos:ir,result:t},t}())===o&&(t=function(){var t,n=135*ir+95,r=dr[n];if(r)return ir=r.nextPos,r.result;60===e.charCodeAt(ir)?(t="<",ir++):(t=o,0===cr&&_r(Rt));return dr[n]={nextPos:ir,result:t},t}()),dr[n]={nextPos:ir,result:t},t)}function vo(){var t,n=135*ir+90,r=dr[n];return r?(ir=r.nextPos,r.result):(61===e.charCodeAt(ir)?(t="=",ir++):(t=o,0===cr&&_r(D)),dr[n]={nextPos:ir,result:t},t)}function _o(){var t,n,r=135*ir+91,i=dr[r];return i?(ir=i.nextPos,i.result):(t=ir,"!="===e.substr(ir,2)?(n="!=",ir+=2):(n=o,0===cr&&_r(Ct)),n===o&&(8800===e.charCodeAt(ir)?(n="≠",ir++):(n=o,0===cr&&_r(St)),n===o&&("<>"===e.substr(ir,2)?(n="<>",ir+=2):(n=o,0===cr&&_r(Ot)))),n!==o&&(ar=t,n="!="),t=n,dr[r]={nextPos:ir,result:t},t)}function wo(){var t,n,r,i,a=135*ir+100,s=dr[a];return s?(ir=s.nextPos,s.result):(cr++,t=ir,(n=Mr())!==o?(44===e.charCodeAt(ir)?(r=",",ir++):(r=o,0===cr&&_r(Xe)),r!==o&&(i=Mr())!==o?t=n=[n,r,i]:(ir=t,t=o)):(ir=t,t=o),t===o&&(t=ir,(n=Mr())!==o?(59===e.charCodeAt(ir)?(r=";",ir++):(r=o,0===cr&&_r(jt)),r!==o&&(i=Mr())!==o?t=n=[n,r,i]:(ir=t,t=o)):(ir=t,t=o),t===o&&(t=function(){var t,n,r,i,a,s,l,u=135*ir+11,c=dr[u];if(c)return ir=c.nextPos,c.result;for(t=ir,n=[],r=ir,i=[],a=Sr();a!==o;)i.push(a),a=Sr();if(i!==o){if(a=[],h.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(f)),s!==o)for(;s!==o;)a.push(s),h.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(f));else a=o;if(a!==o){for(s=[],l=Sr();l!==o;)s.push(l),l=Sr();s!==o?r=i=[i,a,s]:(ir=r,r=o)}else ir=r,r=o}else ir=r,r=o;if(r!==o)for(;r!==o;){for(n.push(r),r=ir,i=[],a=Sr();a!==o;)i.push(a),a=Sr();if(i!==o){if(a=[],h.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(f)),s!==o)for(;s!==o;)a.push(s),h.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(f));else a=o;if(a!==o){for(s=[],l=Sr();l!==o;)s.push(l),l=Sr();s!==o?r=i=[i,a,s]:(ir=r,r=o)}else ir=r,r=o}else ir=r,r=o}else n=o;return n!==o&&(ar=t,n=""),t=n,dr[u]={nextPos:ir,result:t},t}())),cr--,t===o&&(n=o,0===cr&&_r(qt)),dr[a]={nextPos:ir,result:t},t)}function Eo(){var t,n,r,i,a,s,l,u=135*ir+101,c=dr[u];return c?(ir=c.nextPos,c.result):(t=ir,(n=Pr())!==o?(r=ir,58===e.charCodeAt(ir)?(i=":",ir++):(i=o,0===cr&&_r(mt)),i!==o?("string"===e.substr(ir,6).toLowerCase()?(a=e.substr(ir,6),ir+=6):(a=o,0===cr&&_r(Gt)),a===o&&("number"===e.substr(ir,6).toLowerCase()?(a=e.substr(ir,6),ir+=6):(a=o,0===cr&&_r(Kt)),a===o&&("date"===e.substr(ir,4).toLowerCase()?(a=e.substr(ir,4),ir+=4):(a=o,0===cr&&_r(Xt)),a===o&&("boolean"===e.substr(ir,7).toLowerCase()?(a=e.substr(ir,7),ir+=7):(a=o,0===cr&&_r($t))))),a!==o?r=i=[i,a]:(ir=r,r=o)):(ir=r,r=o),r===o&&(r=null),r!==o?(ar=t,l=r,t=n={name:(s=n).name,relAlias:s.relAlias,type:null===l?null:l[1].toLowerCase()}):(ir=t,t=o)):(ir=t,t=o),dr[u]={nextPos:ir,result:t},t)}function jo(){var t,n,r,i,a,s=135*ir+102,l=dr[s];if(l)return ir=l.nextPos,l.result;if(t=ir,(n=Rr())!==o&&(ar=t,n={type:"date",value:n}),(t=n)===o&&(t=ir,"null"===e.substr(ir,4)?(n="null",ir+=4):(n=o,0===cr&&_r(Jt)),n===o&&("NULL"===e.substr(ir,4)?(n="NULL",ir+=4):(n=o,0===cr&&_r(Qt))),n!==o&&(ar=t,n={type:"null",value:null}),(t=n)===o&&(t=ir,(n=Ar())!==o?(r=ir,cr++,(i=wo())===o&&(i=Cr())===o&&(125===e.charCodeAt(ir)?(i="}",ir++):(i=o,0===cr&&_r(Zt))),cr--,i!==o?(ir=r,r=void 0):r=o,r!==o?(ar=t,t=n={type:"boolean",value:n,quoted:!1}):(ir=t,t=o)):(ir=t,t=o),t===o))){if(t=ir,n=ir,r=[],en.test(e.charAt(ir))?(i=e.charAt(ir),ir++):(i=o,0===cr&&_r(tn)),i!==o)for(;i!==o;)r.push(i),en.test(e.charAt(ir))?(i=e.charAt(ir),ir++):(i=o,0===cr&&_r(tn));else r=o;if((n=r!==o?e.substring(n,ir):r)!==o&&(ar=t,n=function(e){return{type:"string",value:e,quoted:!1}}(n)),(t=n)===o){if(t=ir,39===e.charCodeAt(ir)?(n="'",ir++):(n=o,0===cr&&_r(C)),n!==o){for(r=ir,i=[],S.test(e.charAt(ir))?(a=e.charAt(ir),ir++):(a=o,0===cr&&_r(O));a!==o;)i.push(a),S.test(e.charAt(ir))?(a=e.charAt(ir),ir++):(a=o,0===cr&&_r(O));(r=i!==o?e.substring(r,ir):i)!==o?(39===e.charCodeAt(ir)?(i="'",ir++):(i=o,0===cr&&_r(C)),i!==o?(ar=t,t=n=nn(r)):(ir=t,t=o)):(ir=t,t=o)}else ir=t,t=o;if(t===o)if(t=ir,34===e.charCodeAt(ir)?(n='"',ir++):(n=o,0===cr&&_r(rn)),n!==o){for(r=ir,i=[],on.test(e.charAt(ir))?(a=e.charAt(ir),ir++):(a=o,0===cr&&_r(an));a!==o;)i.push(a),on.test(e.charAt(ir))?(a=e.charAt(ir),ir++):(a=o,0===cr&&_r(an));(r=i!==o?e.substring(r,ir):i)!==o?(34===e.charCodeAt(ir)?(i='"',ir++):(i=o,0===cr&&_r(rn)),i!==o?(ar=t,t=n=nn(r)):(ir=t,t=o)):(ir=t,t=o)}else ir=t,t=o}}return dr[s]={nextPos:ir,result:t},t}function Co(){var e,t,n,r,i,a,s=135*ir+104,l=dr[s];if(l)return ir=l.nextPos,l.result;if(e=ir,(t=jo())!==o){for(n=[],r=ir,(i=wo())!==o&&(a=jo())!==o?r=i=[i,a]:(ir=r,r=o);r!==o;)n.push(r),r=ir,(i=wo())!==o&&(a=jo())!==o?r=i=[i,a]:(ir=r,r=o);n!==o?(ar=e,e=t=function(e,t){for(var n=[e],r=0;r0){for(t=1,r=1;t",!1),qe=Qn("!=",!1),Ge=Qn(">=",!1),Ke=Qn(">",!1),Xe=Qn("<=",!1),$e=Qn("<",!1),Je=er("logical AND"),Qe=Qn("and",!0),Ze=er("logical XOR"),et=Qn("xor",!0),tt=er("logical OR"),nt=Qn("or",!0),rt=er("logical NOT"),ot=Qn("!",!1),it=(Qn("not",!1),Qn("exists",!0)),at=Qn("#",!1),st=/^[^\n]/,lt=Zn(["\n"],!0,!1),ut=Qn("`",!1),ct=Qn("drop",!0),dt=Qn("table",!0),ht=Qn("if",!0),ft=Qn("lock",!0),mt=Qn("tables",!0),pt=Qn("unlock",!0),gt=Qn("use",!0),yt=/^[a-zA-Z_0-9\-]/,bt=Zn([["a","z"],["A","Z"],"_",["0","9"],"-"],!1,!1),vt=Qn("decimal",!0),_t=Qn("tinyint",!0),wt=Qn("smallint",!0),Et=Qn("mediumint",!0),jt=Qn("bigint",!0),Ct=Qn("integer",!0),St=Qn("int",!0),Ot=Qn("float",!0),kt=Qn("double",!0),Tt=Qn("varchar",!0),Mt=Qn("char",!0),xt=Qn("text",!0),Lt=Qn("datetime",!0),Rt=/^[a-zA-Z0-9_=]/,At=Zn([["a","z"],["A","Z"],["0","9"],"_","="],!1,!1),Dt=Qn("create",!0),Nt=Qn("exists",!1),Pt=Qn("null",!0),It=Qn("insert",!0),Ht=Qn("into",!0),Yt=Qn("values",!0),Ft=er("boolean expression"),Wt=Qn("||",!1),Bt=function(e,t){return{type:"valueExpr",datatype:"boolean",func:e,args:[void 0,t],codeInfo:No()}},Ut=Qn("like",!0),zt=Qn("ilike",!0),Vt=Qn("+",!1),qt=Qn("/",!1),Gt=Qn("%",!1),Kt=Qn("coalesce",!0),Xt=Qn("concat",!0),$t=Qn("adddate",!0),Jt=Qn("subdate",!0),Qt=Qn("mod",!0),Zt=Qn("add",!0),en=Qn("sub",!0),tn=Qn("mul",!0),nn=Qn("div",!0),rn=Qn("upper",!0),on=Qn("ucase",!0),an=Qn("lower",!0),sn=Qn("lcase",!0),ln=Qn("length",!0),un=Qn("abs",!0),cn=Qn("floor",!0),dn=Qn("ceil",!0),hn=Qn("round",!0),fn=Qn("year",!0),mn=Qn("month",!0),pn=Qn("day",!0),gn=Qn("hour",!0),yn=Qn("minute",!0),bn=Qn("second",!0),vn=Qn("dayofmonth",!0),_n=Qn("rand",!0),wn=Qn("rownum",!0),En=Qn("now",!0),jn=Qn("current_timestamp",!0),Cn=Qn("transaction_timestamp",!0),Sn=Qn("statement_timestamp",!0),On=Qn("clock_timestamp",!0),kn=Qn("sysdate",!0),Tn=Qn("case",!0),Mn=Qn("when",!0),xn=Qn("then",!0),Ln=function(e,t){return{w:e,t:t}},Rn=Qn("else",!0),An=Qn("end",!0),Dn=function(e,t){return function(e,t){var n,r=t[0];r.args[0]=e,r.codeInfo=No();for(var o=1;oqn&&(qn=Un,Gn=[]),Gn.push(e))}function or(e,t,n){return new r(r.buildMessage(e,t),e,t,n)}function ir(){var e,t,n,r=113*Un+0,i=Xn[r];return i?(Un=i.nextPos,i.result):(e=Un,(t=kr())!==o&&(zn=e,t=t),(e=t)===o&&(e=Un,(t=kr())!==o&&(n=ur())!==o?(zn=e,e=t=t):(Un=e,e=o),e===o&&(e=Un,(t=ur())!==o&&(n=kr())!==o?(zn=e,e=t=n):(Un=e,e=o))),Xn[r]={nextPos:Un,result:e},e)}function ar(){var t,n,r=113*Un+2,i=Xn[r];return i?(Un=i.nextPos,i.result):(t=Un,Kn++,e.length>Un?(n=e.charAt(Un),Un++):(n=o,0===Kn&&rr(s)),Kn--,n===o?t=void 0:(Un=t,t=o),Xn[r]={nextPos:Un,result:t},t)}function sr(){var t,n=113*Un+3,r=Xn[n];return r?(Un=r.nextPos,r.result):("\r\n"===e.substr(Un,2)?(t="\r\n",Un+=2):(t=o,0===Kn&&rr(l)),t===o&&(10===e.charCodeAt(Un)?(t="\n",Un++):(t=o,0===Kn&&rr(u))),Xn[n]={nextPos:Un,result:t},t)}function lr(){var t,n=113*Un+4,r=Xn[n];return r?(Un=r.nextPos,r.result):((t=function(){var t,n,r,i,a,l,u,m,p=113*Un+5,g=Xn[p];if(g)return Un=g.nextPos,g.result;Kn++,t=Un,"--"===e.substr(Un,2)?(n="--",Un+=2):(n=o,0===Kn&&rr(d));n!==o?(h.test(e.charAt(Un))?(r=e.charAt(Un),Un++):(r=o,0===Kn&&rr(f)),r!==o?(i=Un,Kn++,(a=sr())===o&&(a=ar()),Kn--,a!==o?(Un=i,i=void 0):i=o,i!==o?t=n=[n,r,i]:(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o);if(t===o&&(t=Un,"--"===e.substr(Un,2)?(n="--",Un+=2):(n=o,0===Kn&&rr(d)),n!==o?(r=Un,Kn++,(i=sr())===o&&(i=ar()),Kn--,i!==o?(Un=r,r=void 0):r=o,r!==o?t=n=[n,r]:(Un=t,t=o)):(Un=t,t=o),t===o))if(t=Un,"--"===e.substr(Un,2)?(n="--",Un+=2):(n=o,0===Kn&&rr(d)),n!==o)if(h.test(e.charAt(Un))?(r=e.charAt(Un),Un++):(r=o,0===Kn&&rr(f)),r!==o){for(i=Un,a=[],l=Un,u=Un,Kn++,m=sr(),Kn--,m===o?u=void 0:(Un=u,u=o),u!==o?(e.length>Un?(m=e.charAt(Un),Un++):(m=o,0===Kn&&rr(s)),m!==o?l=u=[u,m]:(Un=l,l=o)):(Un=l,l=o);l!==o;)a.push(l),l=Un,u=Un,Kn++,m=sr(),Kn--,m===o?u=void 0:(Un=u,u=o),u!==o?(e.length>Un?(m=e.charAt(Un),Un++):(m=o,0===Kn&&rr(s)),m!==o?l=u=[u,m]:(Un=l,l=o)):(Un=l,l=o);(i=a!==o?e.substring(i,Un):a)!==o?(a=Un,Kn++,(l=sr())===o&&(l=ar()),Kn--,l!==o?(Un=a,a=void 0):a=o,a!==o?t=n=[n,r,i,a]:(Un=t,t=o)):(Un=t,t=o)}else Un=t,t=o;else Un=t,t=o;Kn--,t===o&&(n=o,0===Kn&&rr(c));return Xn[p]={nextPos:Un,result:t},t}())===o&&(t=function(){var t,n,r,i,a,l,u=113*Un+6,c=Xn[u];if(c)return Un=c.nextPos,c.result;t=Un,"/*"===e.substr(Un,2)?(n="/*",Un+=2):(n=o,0===Kn&&rr(m));if(n!==o){for(r=[],i=Un,a=Un,Kn++,"*/"===e.substr(Un,2)?(l="*/",Un+=2):(l=o,0===Kn&&rr(p)),Kn--,l===o?a=void 0:(Un=a,a=o),a!==o?(e.length>Un?(l=e.charAt(Un),Un++):(l=o,0===Kn&&rr(s)),l!==o?i=a=[a,l]:(Un=i,i=o)):(Un=i,i=o);i!==o;)r.push(i),i=Un,a=Un,Kn++,"*/"===e.substr(Un,2)?(l="*/",Un+=2):(l=o,0===Kn&&rr(p)),Kn--,l===o?a=void 0:(Un=a,a=o),a!==o?(e.length>Un?(l=e.charAt(Un),Un++):(l=o,0===Kn&&rr(s)),l!==o?i=a=[a,l]:(Un=i,i=o)):(Un=i,i=o);r!==o?("*/"===e.substr(Un,2)?(i="*/",Un+=2):(i=o,0===Kn&&rr(p)),i!==o?t=n=[n,r,i]:(Un=t,t=o)):(Un=t,t=o)}else Un=t,t=o;return Xn[u]={nextPos:Un,result:t},t}()),Xn[n]={nextPos:Un,result:t},t)}function ur(){var t,n,r,i,a,s,l,u=113*Un+7,c=Xn[u];if(c)return Un=c.nextPos,c.result;for(Kn++,t=Un,n=[],r=Un,i=[],a=lr();a!==o;)i.push(a),a=lr();if(i!==o){if(a=[],y.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(b)),s!==o)for(;s!==o;)a.push(s),y.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(b));else a=o;if(a!==o){for(s=[],l=lr();l!==o;)s.push(l),l=lr();s!==o?r=i=[i,a,s]:(Un=r,r=o)}else Un=r,r=o}else Un=r,r=o;if(r!==o)for(;r!==o;){for(n.push(r),r=Un,i=[],a=lr();a!==o;)i.push(a),a=lr();if(i!==o){if(a=[],y.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(b)),s!==o)for(;s!==o;)a.push(s),y.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(b));else a=o;if(a!==o){for(s=[],l=lr();l!==o;)s.push(l),l=lr();s!==o?r=i=[i,a,s]:(Un=r,r=o)}else Un=r,r=o}else Un=r,r=o}else n=o;return n!==o&&(zn=t,n=""),Kn--,(t=n)===o&&(n=o,0===Kn&&rr(g)),Xn[u]={nextPos:Un,result:t},t}function cr(){var t,n,r=113*Un+8,i=Xn[r];if(i)return Un=i.nextPos,i.result;for(Kn++,t=[],(n=lr())===o&&(y.test(e.charAt(Un))?(n=e.charAt(Un),Un++):(n=o,0===Kn&&rr(b)));n!==o;)t.push(n),(n=lr())===o&&(y.test(e.charAt(Un))?(n=e.charAt(Un),Un++):(n=o,0===Kn&&rr(b)));return Kn--,t===o&&(n=o,0===Kn&&rr(v)),Xn[r]={nextPos:Un,result:t},t}function dr(){var t,n,r=113*Un+9,i=Xn[r];if(i)return Un=i.nextPos,i.result;if(Kn++,t=[],w.test(e.charAt(Un))?(n=e.charAt(Un),Un++):(n=o,0===Kn&&rr(E)),n!==o)for(;n!==o;)t.push(n),w.test(e.charAt(Un))?(n=e.charAt(Un),Un++):(n=o,0===Kn&&rr(E));else t=o;return Kn--,t===o&&(n=o,0===Kn&&rr(_)),Xn[r]={nextPos:Un,result:t},t}function hr(){var t,n,r=113*Un+10,i=Xn[r];if(i)return Un=i.nextPos,i.result;for(Kn++,t=[],w.test(e.charAt(Un))?(n=e.charAt(Un),Un++):(n=o,0===Kn&&rr(E));n!==o;)t.push(n),w.test(e.charAt(Un))?(n=e.charAt(Un),Un++):(n=o,0===Kn&&rr(E));return Kn--,t===o&&(n=o,0===Kn&&rr(j)),Xn[r]={nextPos:Un,result:t},t}function fr(){var t,n,r,i,a,s=113*Un+11,l=Xn[s];if(l)return Un=l.nextPos,l.result;if(Kn++,t=Un,34===e.charCodeAt(Un)?(n='"',Un++):(n=o,0===Kn&&rr(S)),n!==o){for(r=[],O.test(e.charAt(Un))?(i=e.charAt(Un),Un++):(i=o,0===Kn&&rr(k));i!==o;)r.push(i),O.test(e.charAt(Un))?(i=e.charAt(Un),Un++):(i=o,0===Kn&&rr(k));r!==o?(34===e.charCodeAt(Un)?(i='"',Un++):(i=o,0===Kn&&rr(S)),i!==o?(zn=t,t=n=void Jn(i18n.t("db.messages.parser.error-sql-string-use-single-quotes"))):(Un=t,t=o)):(Un=t,t=o)}else Un=t,t=o;if(t===o)if(t=Un,39===e.charCodeAt(Un)?(n="'",Un++):(n=o,0===Kn&&rr(T)),n!==o){for(r=Un,i=[],M.test(e.charAt(Un))?(a=e.charAt(Un),Un++):(a=o,0===Kn&&rr(x));a!==o;)i.push(a),M.test(e.charAt(Un))?(a=e.charAt(Un),Un++):(a=o,0===Kn&&rr(x));(r=i!==o?e.substring(r,Un):i)!==o?(39===e.charCodeAt(Un)?(i="'",Un++):(i=o,0===Kn&&rr(T)),i!==o?(zn=t,t=n=r):(Un=t,t=o)):(Un=t,t=o)}else Un=t,t=o;return Kn--,t===o&&(n=o,0===Kn&&rr(C)),Xn[s]={nextPos:Un,result:t},t}function mr(){var t,n,r,i,a,s,l=113*Un+12,u=Xn[l];if(u)return Un=u.nextPos,u.result;if(t=Un,n=Un,r=Un,45===e.charCodeAt(Un)?(i="-",Un++):(i=o,0===Kn&&rr(L)),i===o&&(i=null),i!==o){if(a=[],R.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(A)),s!==o)for(;s!==o;)a.push(s),R.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(A));else a=o;a!==o?r=i=[i,a]:(Un=r,r=o)}else Un=r,r=o;return(n=r!==o?e.substring(n,Un):r)!==o&&(zn=t,n=parseInt(n,10)),t=n,Xn[l]={nextPos:Un,result:t},t}function pr(){var t,n,r,i,a,s,l,u,c=113*Un+13,d=Xn[c];if(d)return Un=d.nextPos,d.result;if(t=Un,n=Un,r=Un,45===e.charCodeAt(Un)?(i="-",Un++):(i=o,0===Kn&&rr(L)),i===o&&(i=null),i!==o){if(a=[],R.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(A)),s!==o)for(;s!==o;)a.push(s),R.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(A));else a=o;if(a!==o)if(46===e.charCodeAt(Un)?(s=".",Un++):(s=o,0===Kn&&rr(D)),s!==o){if(l=[],R.test(e.charAt(Un))?(u=e.charAt(Un),Un++):(u=o,0===Kn&&rr(A)),u!==o)for(;u!==o;)l.push(u),R.test(e.charAt(Un))?(u=e.charAt(Un),Un++):(u=o,0===Kn&&rr(A));else l=o;l!==o?r=i=[i,a,s,l]:(Un=r,r=o)}else Un=r,r=o;else Un=r,r=o}else Un=r,r=o;return(n=r!==o?e.substring(n,Un):r)!==o&&(zn=t,n=parseFloat(n)),t=n,Xn[c]={nextPos:Un,result:t},t}function gr(){var e,t=113*Un+14,n=Xn[t];return n?(Un=n.nextPos,n.result):((e=pr())===o&&(e=mr()),Xn[t]={nextPos:Un,result:e},e)}function yr(){var t,n,r,i,a,s,l,u,c,d,h=113*Un+16,f=Xn[h];if(f)return Un=f.nextPos,f.result;if(Kn++,t=Un,n=Un,Kn++,r=Un,(i=Do())!==o){if(a=Un,Kn++,s=[],H.test(e.charAt(Un))?(l=e.charAt(Un),Un++):(l=o,0===Kn&&rr(Y)),l!==o)for(;l!==o;)s.push(l),H.test(e.charAt(Un))?(l=e.charAt(Un),Un++):(l=o,0===Kn&&rr(Y));else s=o;Kn--,s===o?a=void 0:(Un=a,a=o),a!==o?r=i=[i,a]:(Un=r,r=o)}else Un=r,r=o;if(Kn--,r===o?n=void 0:(Un=n,n=o),n!==o){if(r=Un,i=Un,a=[],F.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(W)),s!==o)for(;s!==o;)a.push(s),F.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(W));else a=o;if(a!==o){for(s=Un,l=[],H.test(e.charAt(Un))?(u=e.charAt(Un),Un++):(u=o,0===Kn&&rr(Y));u!==o;)l.push(u),H.test(e.charAt(Un))?(u=e.charAt(Un),Un++):(u=o,0===Kn&&rr(Y));(s=l!==o?e.substring(s,Un):l)!==o?i=a=[a,s]:(Un=i,i=o)}else Un=i,i=o;(r=i!==o?e.substring(r,Un):i)!==o?(zn=t,"true"!==(d=(c=r).toLowerCase())&&"false"!==d||Jn(i18n.t("db.messages.parser.error-sql-invalid-relation-name",{str:c})),t=n=c):(Un=t,t=o)}else Un=t,t=o;return Kn--,t===o&&(n=o,0===Kn&&rr(I)),Xn[h]={nextPos:Un,result:t},t}function br(){var t,n,r,i,a,s,l,u,c,d,h=113*Un+17,f=Xn[h];if(f)return Un=f.nextPos,f.result;if(t=Un,n=Un,Kn++,r=Un,(i=Do())!==o){if(a=Un,Kn++,s=[],H.test(e.charAt(Un))?(l=e.charAt(Un),Un++):(l=o,0===Kn&&rr(Y)),l!==o)for(;l!==o;)s.push(l),H.test(e.charAt(Un))?(l=e.charAt(Un),Un++):(l=o,0===Kn&&rr(Y));else s=o;Kn--,s===o?a=void 0:(Un=a,a=o),a!==o?r=i=[i,a]:(Un=r,r=o)}else Un=r,r=o;if(Kn--,r===o?n=void 0:(Un=n,n=o),n!==o){if(r=Un,i=Un,a=[],F.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(W)),s!==o)for(;s!==o;)a.push(s),F.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(W));else a=o;if(a!==o){for(s=Un,l=[],H.test(e.charAt(Un))?(u=e.charAt(Un),Un++):(u=o,0===Kn&&rr(Y));u!==o;)l.push(u),H.test(e.charAt(Un))?(u=e.charAt(Un),Un++):(u=o,0===Kn&&rr(Y));(s=l!==o?e.substring(s,Un):l)!==o?i=a=[a,s]:(Un=i,i=o)}else Un=i,i=o;(r=i!==o?e.substring(r,Un):i)!==o?(zn=t,"true"!==(d=(c=r).toLowerCase())&&"false"!==d||Jn(i18n.t("db.messages.parser.error-sql-invalid-column-name",{str:c})),t=n=c):(Un=t,t=o)}else Un=t,t=o;return Xn[h]={nextPos:Un,result:t},t}function vr(){var t,n,r,i,a,s=113*Un+19,l=Xn[s];return l?(Un=l.nextPos,l.result):(t=Un,"date"===e.substr(Un,4).toLowerCase()?(n=e.substr(Un,4),Un+=4):(n=o,0===Kn&&rr(B)),n!==o?("('"===e.substr(Un,2)?(r="('",Un+=2):(r=o,0===Kn&&rr(U)),r!==o&&(i=function(){var t,n,r,i,a,s,l,u,c,d=113*Un+20,h=Xn[d];if(h)return Un=h.nextPos,h.result;Kn++,t=Un,n=Un,r=Un,R.test(e.charAt(Un))?(i=e.charAt(Un),Un++):(i=o,0===Kn&&rr(A));i!==o?(R.test(e.charAt(Un))?(a=e.charAt(Un),Un++):(a=o,0===Kn&&rr(A)),a!==o?(R.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(A)),s!==o?(R.test(e.charAt(Un))?(l=e.charAt(Un),Un++):(l=o,0===Kn&&rr(A)),l!==o?r=i=[i,a,s,l]:(Un=r,r=o)):(Un=r,r=o)):(Un=r,r=o)):(Un=r,r=o);n=r!==o?e.substring(n,Un):r;n!==o?(45===e.charCodeAt(Un)?(r="-",Un++):(r=o,0===Kn&&rr(L)),r!==o?(i=Un,a=Un,R.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(A)),s!==o?(R.test(e.charAt(Un))?(l=e.charAt(Un),Un++):(l=o,0===Kn&&rr(A)),l!==o?a=s=[s,l]:(Un=a,a=o)):(Un=a,a=o),(i=a!==o?e.substring(i,Un):a)!==o?(45===e.charCodeAt(Un)?(a="-",Un++):(a=o,0===Kn&&rr(L)),a!==o?(s=Un,l=Un,R.test(e.charAt(Un))?(u=e.charAt(Un),Un++):(u=o,0===Kn&&rr(A)),u!==o?(R.test(e.charAt(Un))?(c=e.charAt(Un),Un++):(c=o,0===Kn&&rr(A)),c!==o?l=u=[u,c]:(Un=l,l=o)):(Un=l,l=o),(s=l!==o?e.substring(s,Un):l)!==o?(zn=t,n=function(e,t,n){e=parseInt(e,10),t=parseInt(t,10)-1,n=parseInt(n,10);var r=new Date(e,t,n);return r.getFullYear()==e&&r.getMonth()==t&&r.getDate()==n||Jn(i18n.t("db.messages.parser.error-invalid-date-format",{str:$n()})),r}(n,i,s),t=n):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o);Kn--,t===o&&(n=o,0===Kn&&rr(V));return Xn[d]={nextPos:Un,result:t},t}())!==o?("')"===e.substr(Un,2)?(a="')",Un+=2):(a=o,0===Kn&&rr(z)),a!==o?(zn=t,t=n=i):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o),Xn[s]={nextPos:Un,result:t},t)}function _r(){var t,n,r,i,a,s=113*Un+21,l=Xn[s];return l?(Un=l.nextPos,l.result):(t=Un,n=Un,(r=yr())!==o?(46===e.charCodeAt(Un)?(i=".",Un++):(i=o,0===Kn&&rr(D)),i!==o?n=r=[r,i]:(Un=n,n=o)):(Un=n,n=o),n===o&&(n=null),n!==o&&(r=br())!==o?(zn=t,t=n={type:"column",name:r,relAlias:(a=n)?a[0]:null}):(Un=t,t=o),Xn[s]={nextPos:Un,result:t},t)}function wr(){var t,n,r,i,a=113*Un+23,s=Xn[a];if(s)return Un=s.nextPos,s.result;if(t=Un,n=Un,r=[],R.test(e.charAt(Un))?(i=e.charAt(Un),Un++):(i=o,0===Kn&&rr(A)),i!==o)for(;i!==o;)r.push(i),R.test(e.charAt(Un))?(i=e.charAt(Un),Un++):(i=o,0===Kn&&rr(A));else r=o;return(n=r!==o?e.substring(n,Un):r)!==o&&(zn=t,n={type:"column",name:parseInt(n,10),relAlias:null}),t=n,Xn[a]={nextPos:Un,result:t},t}function Er(){var t,n,r,i,a,s,l,u,c=113*Un+24,d=Xn[c];return d?(Un=d.nextPos,d.result):(t=Un,n=Un,"sum"===e.substr(Un,3).toLowerCase()?(r=e.substr(Un,3),Un+=3):(r=o,0===Kn&&rr(G)),r===o&&("count"===e.substr(Un,5).toLowerCase()?(r=e.substr(Un,5),Un+=5):(r=o,0===Kn&&rr(K)),r===o&&("avg"===e.substr(Un,3).toLowerCase()?(r=e.substr(Un,3),Un+=3):(r=o,0===Kn&&rr(X)),r===o&&("min"===e.substr(Un,3).toLowerCase()?(r=e.substr(Un,3),Un+=3):(r=o,0===Kn&&rr($)),r===o&&("max"===e.substr(Un,3).toLowerCase()?(r=e.substr(Un,3),Un+=3):(r=o,0===Kn&&rr(J)))))),(n=r!==o?e.substring(n,Un):r)!==o?(40===e.charCodeAt(Un)?(r="(",Un++):(r=o,0===Kn&&rr(Q)),r!==o&&cr()!==o?(i=Un,"all"===e.substr(Un,3).toLowerCase()?(a=e.substr(Un,3),Un+=3):(a=o,0===Kn&&rr(Z)),a!==o&&(s=ur())!==o?i=a=[a,s]:(Un=i,i=o),i===o&&(i=null),i!==o&&(a=_r())!==o&&(s=cr())!==o?(41===e.charCodeAt(Un)?(l=")",Un++):(l=o,0===Kn&&rr(ee)),l!==o?(zn=t,u=a,t=n={type:"aggFunction",aggFunction:n.toUpperCase(),col:u}):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o),t===o&&(t=Un,"count(*)"===e.substr(Un,8).toLowerCase()?(n=e.substr(Un,8),Un+=8):(n=o,0===Kn&&rr(te)),n!==o&&(zn=t,n={type:"aggFunction",aggFunction:"COUNT_ALL",col:null}),t=n),Xn[c]={nextPos:Un,result:t},t)}function jr(){var t,n,r,i,a,s,l,u,c=113*Un+25,d=Xn[c];return d?(Un=d.nextPos,d.result):(t=Un,(n=Er())!==o&&ur()!==o?("as"===e.substr(Un,2).toLowerCase()?(r=e.substr(Un,2),Un+=2):(r=o,0===Kn&&rr(ne)),r!==o&&ur()!==o&&(i=br())!==o?(zn=t,s=i,(a=n).name=s,t=n=a):(Un=t,t=o)):(Un=t,t=o),t===o&&(t=Un,(n=Er())!==o&&cr()!==o?(zn=t,t=n=void Jn("aggregation columns must be named")):(Un=t,t=o),t===o&&(t=Un,(n=function(){var t,n,r,i,a,s=113*Un+22,l=Xn[s];return l?(Un=l.nextPos,l.result):(t=Un,n=Un,(r=yr())!==o?(46===e.charCodeAt(Un)?(i=".",Un++):(i=o,0===Kn&&rr(D)),i!==o?n=r=[r,i]:(Un=n,n=o)):(Un=n,n=o),n===o&&(n=null),n!==o?(42===e.charCodeAt(Un)?(r="*",Un++):(r=o,0===Kn&&rr(q)),r!==o?(zn=t,t=n={type:"column",name:"*",relAlias:(a=n)?a[0]:null}):(Un=t,t=o)):(Un=t,t=o),Xn[s]={nextPos:Un,result:t},t)}())!==o&&(zn=t,n=re(n)),(t=n)===o&&(t=Un,(n=_r())!==o&&ur()!==o?("as"===e.substr(Un,2).toLowerCase()?(r=e.substr(Un,2),Un+=2):(r=o,0===Kn&&rr(ne)),r!==o&&ur()!==o&&(i=br())!==o?(zn=t,u=i,(l=n).alias=u,t=n=l):(Un=t,t=o)):(Un=t,t=o),t===o&&(t=Un,(n=Co())!==o&&ur()!==o?("as"===e.substr(Un,2).toLowerCase()?(r=e.substr(Un,2),Un+=2):(r=o,0===Kn&&rr(ne)),r!==o&&ur()!==o&&(i=br())!==o?(zn=t,t=n=function(e,t){return{type:"namedColumnExpr",name:t,relAlias:null,child:e,codeInfo:No()}}(n,i)):(Un=t,t=o)):(Un=t,t=o),t===o&&(t=Un,(n=_r())!==o&&(zn=t,n=re(n)),t=n))))),Xn[c]={nextPos:Un,result:t},t)}function Cr(){var t,n,r,i,a,s,l=113*Un+29,u=Xn[l];return u?(Un=u.nextPos,u.result):(t=Un,(n=_r())===o&&(n=wr()),n!==o?(r=Un,(i=ur())!==o&&(a=function(){var t,n,r=113*Un+28,i=Xn[r];return i?(Un=i.nextPos,i.result):(t=Un,"asc"===e.substr(Un,3).toLowerCase()?(n=e.substr(Un,3),Un+=3):(n=o,0===Kn&&rr(ie)),n!==o&&(zn=t,n=!0),(t=n)===o&&(t=Un,"desc"===e.substr(Un,4).toLowerCase()?(n=e.substr(Un,4),Un+=4):(n=o,0===Kn&&rr(ae)),n!==o&&(zn=t,n=!1),t=n),Xn[r]={nextPos:Un,result:t},t)}())!==o?r=i=[i,a]:(Un=r,r=o),r===o&&(r=null),r!==o?(zn=t,t=n={col:n,asc:s=null==(s=r)||s[1]}):(Un=t,t=o)):(Un=t,t=o),Xn[l]={nextPos:Un,result:t},t)}function Sr(){var t,n,r,i,a,s,l,u,c=113*Un+30,d=Xn[c];if(d)return Un=d.nextPos,d.result;if(t=Un,(n=Cr())!==o){for(r=[],i=Un,(a=cr())!==o?(44===e.charCodeAt(Un)?(s=",",Un++):(s=o,0===Kn&&rr(oe)),s!==o&&(l=cr())!==o&&(u=Cr())!==o?i=a=[a,s,l,u]:(Un=i,i=o)):(Un=i,i=o);i!==o;)r.push(i),i=Un,(a=cr())!==o?(44===e.charCodeAt(Un)?(s=",",Un++):(s=o,0===Kn&&rr(oe)),s!==o&&(l=cr())!==o&&(u=Cr())!==o?i=a=[a,s,l,u]:(Un=i,i=o)):(Un=i,i=o);r!==o?(zn=t,t=n=function(e,t){var n=[e];if(null!=t)for(var r in t)n.push(t[r][3]);return{value:n,codeInfo:No()}}(n,r)):(Un=t,t=o)}else Un=t,t=o;return Xn[c]={nextPos:Un,result:t},t}function Or(){var t,n,r,i,a,s,l,u,c=113*Un+32,d=Xn[c];return d?(Un=d.nextPos,d.result):(t=Un,(n=yr())!==o&&ur()!==o?("as"===e.substr(Un,2).toLowerCase()?(r=e.substr(Un,2),Un+=2):(r=o,0===Kn&&rr(ne)),r!==o&&cr()!==o?(40===e.charCodeAt(Un)?(i="(",Un++):(i=o,0===Kn&&rr(Q)),i!==o&&(a=xr())!==o?(41===e.charCodeAt(Un)?(s=")",Un++):(s=o,0===Kn&&rr(ee)),s!==o?(zn=t,l=n,(u=a).wrappedInParentheses=!0,t=n={type:"assignment",name:l,child:{type:"relationFromSubstatement",statement:u,relAlias:l,codeInfo:No()},codeInfo:No()}):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o),Xn[c]={nextPos:Un,result:t},t)}function kr(){var t,n,r,i,a=113*Un+33,s=Xn[a];return s?(Un=s.nextPos,s.result):(t=Un,(n=function(){var t,n,r,i,a,s,l,u,c,d=113*Un+34,h=Xn[d];if(h)return Un=h.nextPos,h.result;t=Un,"with"===e.substr(Un,4).toLowerCase()?(n=e.substr(Un,4),Un+=4):(n=o,0===Kn&&rr(ue));if(n!==o)if(ur()!==o)if((r=Or())!==o){for(i=[],a=Un,(s=cr())!==o?(44===e.charCodeAt(Un)?(l=",",Un++):(l=o,0===Kn&&rr(oe)),l!==o&&(u=cr())!==o&&(c=Or())!==o?a=s=[s,l,u,c]:(Un=a,a=o)):(Un=a,a=o);a!==o;)i.push(a),a=Un,(s=cr())!==o?(44===e.charCodeAt(Un)?(l=",",Un++):(l=o,0===Kn&&rr(oe)),l!==o&&(u=cr())!==o&&(c=Or())!==o?a=s=[s,l,u,c]:(Un=a,a=o)):(Un=a,a=o);i!==o?(zn=t,n=function(e,t){for(var n=[e],r=0;r0&&i!=e.arg.length&&null===r&&Jn(i18n.t("db.messages.parser.error-sql-group-by-missing")),o&&!r&&0===i&&Jn(i18n.t("db.messages.parser.error-sql-having-without-group-by")),{type:"statement",select:e,from:t,where:n?n[1]:null,groupBy:r?r[5]:null,having:o?o[1]:null,numAggregationColumns:i,wrappedInParentheses:!1,codeInfo:No()}}(n,i,a,s,l)):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o),t===o&&(t=Un,40===e.charCodeAt(Un)?(n="(",Un++):(n=o,0===Kn&&rr(Q)),n!==o&&cr()!==o&&(r=xr())!==o&&cr()!==o?(41===e.charCodeAt(Un)?(i=")",Un++):(i=o,0===Kn&&rr(ee)),i!==o?(zn=t,t=n=ye(r)):(Un=t,t=o)):(Un=t,t=o)),Xn[m]={nextPos:Un,result:t},t)}function Dr(){var t,n,r,i,a=113*Un+41,s=Xn[a];return s?(Un=s.nextPos,s.result):(t=Un,ur()!==o?("union"===e.substr(Un,5).toLowerCase()?(n=e.substr(Un,5),Un+=5):(n=o,0===Kn&&rr(be)),n!==o&&ur()!==o?(r=Un,"all"===e.substr(Un,3).toLowerCase()?(i=e.substr(Un,3),Un+=3):(i=o,0===Kn&&rr(ve)),i!==o&&ur()!==o?(zn=r,r=i=!0):(Un=r,r=o),r===o&&(r=Un,"distinct"===e.substr(Un,8).toLowerCase()?(i=e.substr(Un,8),Un+=8):(i=o,0===Kn&&rr(de)),i!==o&&ur()!==o?(zn=r,r=i=!1):(Un=r,r=o)),r===o&&(r=null),r!==o&&(i=Rr())!==o?(zn=t,t={type:"union",child2:i,all:r}):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o),Xn[a]={nextPos:Un,result:t},t)}function Nr(){var t,n,r,i,a=113*Un+42,s=Xn[a];return s?(Un=s.nextPos,s.result):(t=Un,ur()!==o?("except"===e.substr(Un,6).toLowerCase()?(n=e.substr(Un,6),Un+=6):(n=o,0===Kn&&rr(_e)),n!==o&&ur()!==o?(r=Un,"all"===e.substr(Un,3).toLowerCase()?(i=e.substr(Un,3),Un+=3):(i=o,0===Kn&&rr(ve)),i!==o&&ur()!==o?(zn=r,r=i=!0):(Un=r,r=o),r===o&&(r=Un,"distinct"===e.substr(Un,8).toLowerCase()?(i=e.substr(Un,8),Un+=8):(i=o,0===Kn&&rr(de)),i!==o&&ur()!==o?(zn=r,r=i=!1):(Un=r,r=o)),r===o&&(r=null),r!==o&&(i=Rr())!==o?(zn=t,t={type:"except",child2:i,all:r}):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o),Xn[a]={nextPos:Un,result:t},t)}function Pr(){var t,n,r,i,a=113*Un+43,s=Xn[a];return s?(Un=s.nextPos,s.result):(t=Un,ur()!==o?("intersect"===e.substr(Un,9).toLowerCase()?(n=e.substr(Un,9),Un+=9):(n=o,0===Kn&&rr(we)),n!==o&&ur()!==o?(r=Un,"all"===e.substr(Un,3).toLowerCase()?(i=e.substr(Un,3),Un+=3):(i=o,0===Kn&&rr(ve)),i!==o&&ur()!==o?(zn=r,r=i=!0):(Un=r,r=o),r===o&&(r=Un,"distinct"===e.substr(Un,8).toLowerCase()?(i=e.substr(Un,8),Un+=8):(i=o,0===Kn&&rr(de)),i!==o&&ur()!==o?(zn=r,r=i=!1):(Un=r,r=o)),r===o&&(r=null),r!==o&&(i=Rr())!==o?(zn=t,t={type:"intersect",child2:i,all:r}):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o),Xn[a]={nextPos:Un,result:t},t)}function Ir(){var e,t,n,r,i=113*Un+44,a=Xn[i];if(a)return Un=a.nextPos,a.result;if(e=Un,(t=Hr())!==o){if(n=[],(r=Yr())===o&&(r=Fr())===o&&(r=Wr()),r!==o)for(;r!==o;)n.push(r),(r=Yr())===o&&(r=Fr())===o&&(r=Wr());else n=o;n!==o?(zn=e,e=t=me(t,n)):(Un=e,e=o)}else Un=e,e=o;return e===o&&(e=Hr()),Xn[i]={nextPos:Un,result:e},e}function Hr(){var t,n,r,i,a,s,l,u,c,d,h,f=113*Un+45,m=Xn[f];return m?(Un=m.nextPos,m.result):(t=Un,(n=yr())!==o?(r=Un,(i=ur())!==o?("as"===e.substr(Un,2).toLowerCase()?(a=e.substr(Un,2),Un+=2):(a=o,0===Kn&&rr(ne)),a!==o&&(s=ur())!==o&&(l=yr())!==o?r=i=[i,a,s,l]:(Un=r,r=o)):(Un=r,r=o),r===o&&(r=null),r!==o?(zn=t,d=r,h={type:"relation",name:n,relAlias:null,codeInfo:No()},t=n=null!==d?{type:"renameRelation",child:h,newRelAlias:d[3],codeInfo:No()}:h):(Un=t,t=o)):(Un=t,t=o),t===o&&(t=Un,40===e.charCodeAt(Un)?(n="(",Un++):(n=o,0===Kn&&rr(Q)),n!==o&&(r=cr())!==o&&(i=xr())!==o&&(a=cr())!==o?(41===e.charCodeAt(Un)?(s=")",Un++):(s=o,0===Kn&&rr(ee)),s!==o&&(l=ur())!==o?("as"===e.substr(Un,2).toLowerCase()?(u=e.substr(Un,2),Un+=2):(u=o,0===Kn&&rr(ne)),u!==o&&ur()!==o&&(c=yr())!==o?(zn=t,t=n=function(e,t){return e.wrappedInParentheses=!0,{type:"relationFromSubstatement",statement:e,relAlias:t,codeInfo:No()}}(i,c)):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o),t===o&&(t=Un,40===e.charCodeAt(Un)?(n="(",Un++):(n=o,0===Kn&&rr(Q)),n!==o&&(r=cr())!==o&&(i=Ir())!==o&&(a=cr())!==o?(41===e.charCodeAt(Un)?(s=")",Un++):(s=o,0===Kn&&rr(ee)),s!==o?(zn=t,t=n=ye(i)):(Un=t,t=o)):(Un=t,t=o))),Xn[f]={nextPos:Un,result:t},t)}function Yr(){var t,n,r,i,a,s,l,u=113*Un+46,c=Xn[u];return c?(Un=c.nextPos,c.result):(t=Un,n=Un,(r=ur())!==o?("cross"===e.substr(Un,5).toLowerCase()?(i=e.substr(Un,5),Un+=5):(i=o,0===Kn&&rr(Ee)),i!==o&&(a=ur())!==o?("join"===e.substr(Un,4).toLowerCase()?(s=e.substr(Un,4),Un+=4):(s=o,0===Kn&&rr(je)),s!==o&&(l=ur())!==o?n=r=[r,i,a,s,l]:(Un=n,n=o)):(Un=n,n=o)):(Un=n,n=o),n===o&&(n=Un,(r=cr())!==o?(44===e.charCodeAt(Un)?(i=",",Un++):(i=o,0===Kn&&rr(oe)),i!==o&&(a=cr())!==o?n=r=[r,i,a]:(Un=n,n=o)):(Un=n,n=o)),n!==o&&(r=Hr())!==o?(zn=t,t=n={type:"crossJoin",child2:r,cond:null}):(Un=t,t=o),Xn[u]={nextPos:Un,result:t},t)}function Fr(){var t,n,r,i,a=113*Un+47,s=Xn[a];return s?(Un=s.nextPos,s.result):(t=Un,ur()!==o?("natural"===e.substr(Un,7).toLowerCase()?(n=e.substr(Un,7),Un+=7):(n=o,0===Kn&&rr(Ce)),n!==o&&ur()!==o?("join"===e.substr(Un,4).toLowerCase()?(r=e.substr(Un,4),Un+=4):(r=o,0===Kn&&rr(je)),r!==o&&ur()!==o&&(i=Hr())!==o?(zn=t,t={type:"naturalJoin",child2:i,cond:null}):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o),Xn[a]={nextPos:Un,result:t},t)}function Wr(){var t,n,r,i,a,s,l,u,c,d,h,f,m,p,g,y=113*Un+48,b=Xn[y];if(b)return Un=b.nextPos,b.result;if(t=Un,ur()!==o)if(n=Un,r=Un,"inner"===e.substr(Un,5).toLowerCase()?(i=e.substr(Un,5),Un+=5):(i=o,0===Kn&&rr(Se)),i!==o&&(a=ur())!==o?r=i=[i,a]:(Un=r,r=o),r===o&&(r=null),r!==o?("join"===e.substr(Un,4).toLowerCase()?(i=e.substr(Un,4),Un+=4):(i=o,0===Kn&&rr(je)),i!==o?(zn=n,n=r="innerJoin"):(Un=n,n=o)):(Un=n,n=o),n===o&&(n=Un,r=Un,"left"===e.substr(Un,4).toLowerCase()?(i=e.substr(Un,4),Un+=4):(i=o,0===Kn&&rr(Oe)),i!==o?(a=Un,(s=ur())!==o?("outer"===e.substr(Un,5).toLowerCase()?(l=e.substr(Un,5),Un+=5):(l=o,0===Kn&&rr(ke)),l!==o?a=s=[s,l]:(Un=a,a=o)):(Un=a,a=o),a===o&&(a=null),a!==o&&(s=ur())!==o?("join"===e.substr(Un,4).toLowerCase()?(l=e.substr(Un,4),Un+=4):(l=o,0===Kn&&rr(je)),l!==o?r=i=[i,a,s,l]:(Un=r,r=o)):(Un=r,r=o)):(Un=r,r=o),r!==o&&(zn=n,r="leftOuterJoin"),(n=r)===o&&(n=Un,r=Un,"right"===e.substr(Un,5).toLowerCase()?(i=e.substr(Un,5),Un+=5):(i=o,0===Kn&&rr(Te)),i!==o?(a=Un,(s=ur())!==o?("outer"===e.substr(Un,5).toLowerCase()?(l=e.substr(Un,5),Un+=5):(l=o,0===Kn&&rr(ke)),l!==o?a=s=[s,l]:(Un=a,a=o)):(Un=a,a=o),a===o&&(a=null),a!==o&&(s=ur())!==o?("join"===e.substr(Un,4).toLowerCase()?(l=e.substr(Un,4),Un+=4):(l=o,0===Kn&&rr(je)),l!==o?r=i=[i,a,s,l]:(Un=r,r=o)):(Un=r,r=o)):(Un=r,r=o),r!==o&&(zn=n,r="rightOuterJoin"),(n=r)===o&&(n=Un,r=Un,"full"===e.substr(Un,4).toLowerCase()?(i=e.substr(Un,4),Un+=4):(i=o,0===Kn&&rr(Me)),i!==o?(a=Un,(s=ur())!==o?("outer"===e.substr(Un,5).toLowerCase()?(l=e.substr(Un,5),Un+=5):(l=o,0===Kn&&rr(ke)),l!==o?a=s=[s,l]:(Un=a,a=o)):(Un=a,a=o),a===o&&(a=null),a!==o&&(s=ur())!==o?("join"===e.substr(Un,4).toLowerCase()?(l=e.substr(Un,4),Un+=4):(l=o,0===Kn&&rr(je)),l!==o?r=i=[i,a,s,l]:(Un=r,r=o)):(Un=r,r=o)):(Un=r,r=o),r!==o&&(zn=n,r="fullOuterJoin"),n=r))),n!==o)if((r=ur())!==o)if((i=Hr())!==o)if((a=ur())!==o){if(s=Un,"on"===e.substr(Un,2).toLowerCase()?(l=e.substr(Un,2),Un+=2):(l=o,0===Kn&&rr(xe)),l!==o&&ur()!==o&&(u=io())!==o?(zn=s,s=l=u):(Un=s,s=o),s===o){if(s=Un,"using"===e.substr(Un,5).toLowerCase()?(l=e.substr(Un,5),Un+=5):(l=o,0===Kn&&rr(Le)),l!==o)if(cr()!==o)if(40===e.charCodeAt(Un)?(u="(",Un++):(u=o,0===Kn&&rr(Q)),u!==o)if(cr()!==o)if((c=br())!==o){for(d=[],h=Un,(f=cr())!==o?(44===e.charCodeAt(Un)?(m=",",Un++):(m=o,0===Kn&&rr(oe)),m!==o&&(p=cr())!==o&&(g=br())!==o?h=f=[f,m,p,g]:(Un=h,h=o)):(Un=h,h=o);h!==o;)d.push(h),h=Un,(f=cr())!==o?(44===e.charCodeAt(Un)?(m=",",Un++):(m=o,0===Kn&&rr(oe)),m!==o&&(p=cr())!==o&&(g=br())!==o?h=f=[f,m,p,g]:(Un=h,h=o)):(Un=h,h=o);d!==o&&(h=cr())!==o?(41===e.charCodeAt(Un)?(f=")",Un++):(f=o,0===Kn&&rr(ee)),f!==o?(zn=s,s=l=function(e,t,n,r){for(var o=[n],i=0;i"===e.substr(Un,2)?(n="<>",Un+=2):(n=o,0===Kn&&rr(Ve));n===o&&("!="===e.substr(Un,2)?(n="!=",Un+=2):(n=o,0===Kn&&rr(qe)));n!==o&&(zn=t,n="!=");return t=n,Xn[r]={nextPos:Un,result:t},t}())===o&&(t=function(){var t,n,r=113*Un+60,i=Xn[r];if(i)return Un=i.nextPos,i.result;t=Un,">="===e.substr(Un,2)?(n=">=",Un+=2):(n=o,0===Kn&&rr(Ge));n!==o&&(zn=t,n=">=");return t=n,Xn[r]={nextPos:Un,result:t},t}())===o&&(t=function(){var t,n,r=113*Un+62,i=Xn[r];if(i)return Un=i.nextPos,i.result;t=Un,"<="===e.substr(Un,2)?(n="<=",Un+=2):(n=o,0===Kn&&rr(Xe));n!==o&&(zn=t,n="<=");return t=n,Xn[r]={nextPos:Un,result:t},t}())===o&&(t=function(){var t,n=113*Un+61,r=Xn[n];if(r)return Un=r.nextPos,r.result;62===e.charCodeAt(Un)?(t=">",Un++):(t=o,0===Kn&&rr(Ke));return Xn[n]={nextPos:Un,result:t},t}())===o&&(t=function(){var t,n=113*Un+63,r=Xn[n];if(r)return Un=r.nextPos,r.result;60===e.charCodeAt(Un)?(t="<",Un++):(t=o,0===Kn&&rr($e));return Xn[n]={nextPos:Un,result:t},t}()),Xn[n]={nextPos:Un,result:t},t)}function qr(){var t,n,r,i,a=113*Un+69,s=Xn[a];if(s)return Un=s.nextPos,s.result;if(t=Un,(n=hr())!==o&&lr()!==o&&(r=hr())!==o?(59===e.charCodeAt(Un)?(i=";",Un++):(i=o,0===Kn&&rr(se)),i===o&&(i=null),i!==o?(zn=t,t=n={type:"comment"}):(Un=t,t=o)):(Un=t,t=o),t===o)if(t=Un,35===e.charCodeAt(Un)?(n="#",Un++):(n=o,0===Kn&&rr(at)),n!==o)if(hr()!==o){for(r=[],st.test(e.charAt(Un))?(i=e.charAt(Un),Un++):(i=o,0===Kn&&rr(lt));i!==o;)r.push(i),st.test(e.charAt(Un))?(i=e.charAt(Un),Un++):(i=o,0===Kn&&rr(lt));r!==o?(10===e.charCodeAt(Un)?(i="\n",Un++):(i=o,0===Kn&&rr(u)),i!==o?(zn=t,t=n={type:"comment"}):(Un=t,t=o)):(Un=t,t=o)}else Un=t,t=o;else Un=t,t=o;return Xn[a]={nextPos:Un,result:t},t}function Gr(){var t,n,r,i,a=113*Un+70,s=Xn[a];return s?(Un=s.nextPos,s.result):(t=Un,96===e.charCodeAt(Un)?(n="`",Un++):(n=o,0===Kn&&rr(ut)),n!==o&&(r=yr())!==o?(96===e.charCodeAt(Un)?(i="`",Un++):(i=o,0===Kn&&rr(ut)),i!==o?(zn=t,t=n=r):(Un=t,t=o)):(Un=t,t=o),t===o&&(t=Un,(n=yr())!==o&&(zn=t,n=n),t=n),Xn[a]={nextPos:Un,result:t},t)}function Kr(){var t,n,r,i,a,s,l,u,c=113*Un+71,d=Xn[c];return d?(Un=d.nextPos,d.result):(t=Un,"drop"===e.substr(Un,4).toLowerCase()?(n=e.substr(Un,4),Un+=4):(n=o,0===Kn&&rr(ct)),n!==o&&dr()!==o?("table"===e.substr(Un,5).toLowerCase()?(r=e.substr(Un,5),Un+=5):(r=o,0===Kn&&rr(dt)),r!==o&&dr()!==o?(i=Un,"if"===e.substr(Un,2).toLowerCase()?(a=e.substr(Un,2),Un+=2):(a=o,0===Kn&&rr(ht)),a!==o&&(s=dr())!==o?("exists"===e.substr(Un,6).toLowerCase()?(l=e.substr(Un,6),Un+=6):(l=o,0===Kn&&rr(it)),l!==o&&(u=dr())!==o?i=a=[a,s,l,u]:(Un=i,i=o)):(Un=i,i=o),i===o&&(i=null),i!==o&&(a=Gr())!==o&&(s=hr())!==o?(59===e.charCodeAt(Un)?(l=";",Un++):(l=o,0===Kn&&rr(se)),l!==o?(zn=t,t=n={type:"dropTable"}):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o),Xn[c]={nextPos:Un,result:t},t)}function Xr(){var t,n,r,i,a,s,l=113*Un+72,u=Xn[l];if(u)return Un=u.nextPos,u.result;if(t=Un,"lock"===e.substr(Un,4).toLowerCase()?(n=e.substr(Un,4),Un+=4):(n=o,0===Kn&&rr(ft)),n!==o)if(dr()!==o)if("tables"===e.substr(Un,6).toLowerCase()?(r=e.substr(Un,6),Un+=6):(r=o,0===Kn&&rr(mt)),r!==o)if(dr()!==o)if(Gr()!==o)if(dr()!==o){if(i=[],F.test(e.charAt(Un))?(a=e.charAt(Un),Un++):(a=o,0===Kn&&rr(W)),a!==o)for(;a!==o;)i.push(a),F.test(e.charAt(Un))?(a=e.charAt(Un),Un++):(a=o,0===Kn&&rr(W));else i=o;i!==o&&(a=hr())!==o?(59===e.charCodeAt(Un)?(s=";",Un++):(s=o,0===Kn&&rr(se)),s!==o?(zn=t,t=n={type:"lockTable"}):(Un=t,t=o)):(Un=t,t=o)}else Un=t,t=o;else Un=t,t=o;else Un=t,t=o;else Un=t,t=o;else Un=t,t=o;else Un=t,t=o;return Xn[l]={nextPos:Un,result:t},t}function $r(){var t,n,r,i,a=113*Un+73,s=Xn[a];return s?(Un=s.nextPos,s.result):(t=Un,"unlock"===e.substr(Un,6).toLowerCase()?(n=e.substr(Un,6),Un+=6):(n=o,0===Kn&&rr(pt)),n!==o&&dr()!==o?("tables"===e.substr(Un,6).toLowerCase()?(r=e.substr(Un,6),Un+=6):(r=o,0===Kn&&rr(mt)),r!==o&&hr()!==o?(59===e.charCodeAt(Un)?(i=";",Un++):(i=o,0===Kn&&rr(se)),i!==o?(zn=t,t=n={type:"unlockTable"}):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o),Xn[a]={nextPos:Un,result:t},t)}function Jr(){var e,t,n,r,i,a=113*Un+74,s=Xn[a];if(s)return Un=s.nextPos,s.result;if(e=Un,hr()!==o){if(t=[],n=Un,(r=Qr())===o&&(r=Xr())===o&&(r=$r())===o&&(r=qr())===o&&(r=Kr())===o&&(r=to())===o&&(r=oo()),r!==o&&(i=hr())!==o?n=r=[r,i]:(Un=n,n=o),n!==o)for(;n!==o;)t.push(n),n=Un,(r=Qr())===o&&(r=Xr())===o&&(r=$r())===o&&(r=qr())===o&&(r=Kr())===o&&(r=to())===o&&(r=oo()),r!==o&&(i=hr())!==o?n=r=[r,i]:(Un=n,n=o);else t=o;t!==o&&(n=hr())!==o?(zn=e,e=function(e){var t,n,r,o,i,a,s={},l={},u="";for(n=0;n!0===n.evaluate(e,t,r,o),this._checkSchema(e,t)}_getResult(e,t){if(e=this._returnOrCreateSession(e),null===this._joinConditionEvaluator)throw new Error("check not called");const n=new c.a;return n.setSchema(this.getSchema()),p.calcNestedLoopJoin(e,this.getChild(),this.getChild2(),n,this._isRightJoin,this._isAntiJoin,this._joinConditionEvaluator,this._rowCreatorMatched,this._rowCreatorNotMatched),!0===t&&n.eliminateDuplicateRows(),this.setResultNumRows(n.getNumRows()),n}static createNullArray(e){return new Array(e).fill(null)}static getCheckedEvaluatorBooleanExpression(e,t,n,r){if(n.check(e,t),"boolean"!==n.getDataType())throw new m.a("db.messages.exec.error-condition-must-be-boolean",r);return function(e,t,r,o){return!0===n.evaluate(e,t,r,o)}}static getCheckedEvaluatorNaturalJoin(e,t,n,r){}static calcNestedLoopJoin(e,t,n,r,o,i,a,s,l){const u=t.getResult(e),c=n.getResult(e),d=u.getNumRows(),h=c.getNumRows(),f=u.getNumCols();c.getNumCols();if(!1===o){let t;null!==l&&(t=p.createNullArray(r.getSchema().getSize()-f));const n={};for(let o=0;o0&&this.throwExecutionError(s.a("db.messages.exec.error-join-would-produce-non-unique-columns",{conflicts:n.join(", ")})),this._schema=h.a.concat(this._child.getSchema(),this._child2.getSchema()),this._rowCreatorMatched=function(e,t){return e.concat(t)},this._rowCreatorNotMatched=null}catch(e){this.throwExecutionError(e.message)}}getResult(e){return super._getResult(e,!0)}getArgumentHtml(){return""}}class y extends u.c{constructor(e,t){super("π",e),this._checked=null,this._columns=t}getSchema(){if(null===this._columns)return this._child.getSchema();if(null===this._checked)throw new Error("check has not been called");return this._checked._projectedSchema}getResult(e){if(e=this._returnOrCreateSession(e),null===this._checked)throw new Error("check has not been called");const{_indices:t}=this._checked;if(null===this._columns)return this._child.getResult(e);const n=this._child.getResult(e),r=new c.a;r.setSchema(this.getSchema());const o=r.getNumCols(),i=n.getNumRows();let a,s,l,u;for(a=0;a-1&&o.removeColumn(n)}o.getSize()===n&&this.throwExecutionError(i18n.t("db.messages.exec.error-schema-a-not-part-of-schema-b",{schemaA:t,schemaB:e})),this._delegate=new d(new y(this._child,o.getColumns()).setCodeInfoObject(this._codeInfo),new y(new d(new g(new y(this._child,o.getColumns()).setCodeInfoObject(this._codeInfo),this._child2).setCodeInfoObject(this._codeInfo),this._child).setCodeInfoObject(this._codeInfo),o.getColumns()).setCodeInfoObject(this._codeInfo)),this._delegate.check()}}class v extends u.c{constructor(e,t,n){super("γ",e),this.checked=null,this.groupByCols=t,this.aggregateFunctions=n}getSchema(){if(null===this.checked)throw new Error("check not called");return this.checked.schema}check(){this._child.check();const e=this._child.getSchema(),t=new Array(this.groupByCols.length),n=Array(this.aggregateFunctions.length);for(let n=0;nl.a.printColumn(e.name,e.relAlias)),t=this.aggregateFunctions.map(e=>`${"COUNT_ALL"===e.aggFunction?"COUNT(*)":`${e.aggFunction}(${l.a.printColumn(e.col.name,e.col.relAlias)})`}→${e.name}`);return`${e.join(", ")}; ${t.join(", ")}`}getResult(e){if(e=this._returnOrCreateSession(e),null===this.checked)throw new Error("check not called");const t=this.getChild().getResult(e),n=new c.a;n.setSchema(this.checked.schema);let r,o=0;if(this.groupByCols.length>0){const e={};for(let n=0;nt?e:t};let s,l,u,d;for(let e=0;e0&&this.throwExecutionError(s.a("db.messages.exec.error-join-would-produce-non-unique-columns",{conflicts:n.join(", ")})),this._schema=h.a.concat(this._child.getSchema(),this._child2.getSchema()),this._rowCreatorMatched=function(e,t){return e.concat(t)},this._rowCreatorNotMatched=function(e,t){return e.concat(t)}}catch(e){this.throwExecutionError(e.message)}}getResult(e){if(e=this._returnOrCreateSession(e),null===this._joinConditionEvaluator||null===this._rowCreatorMatched||null===this._rowCreatorNotMatched)throw new Error("check not called");const t=new c.a;return t.setSchema(this.getSchema()),p.calcNestedLoopJoin(e,this.getChild(),this.getChild2(),t,!1,!1,this._joinConditionEvaluator,this._rowCreatorMatched,this._rowCreatorNotMatched),p.calcNestedLoopJoin(e,this.getChild(),this.getChild2(),t,!0,!1,this._joinConditionEvaluator,this._rowCreatorMatched,this._rowCreatorNotMatched),t.eliminateDuplicateRows(),this.setResultNumRows(t.getNumRows()),t}}class j extends p{constructor(e,t,n){super(e,t,"⨝",n,!1)}_checkSchema(e,t){try{if("natural"===this._joinConditionOptions.type){const n=h.a.concatNatural(e,t,!0,this._joinConditionOptions.restrictToColumns),r=n.keep;this._schema=n.schema,this._rowCreatorMatched=function(e,t){return p.createNaturalRowArray(e,t,r.size,r.keepIndicesA,r.keepIndicesB)}}else{const n=e.getConflictingColumnsArray(t);n.length>0&&this.throwExecutionError(s.a("db.messages.exec.error-join-would-produce-non-unique-columns",{conflicts:n.join(", ")})),this._schema=h.a.concat(this._child.getSchema(),this._child2.getSchema()),this._rowCreatorMatched=function(e,t){return e.concat(t)}}this._rowCreatorNotMatched=null}catch(e){this.throwExecutionError(e.message)}}getResult(e){return super._getResult(e,!0)}}class C extends p{constructor(e,t,n){super(e,t,"⟕",n,!1)}_checkSchema(e,t){try{if("natural"===this._joinConditionOptions.type){const n=h.a.concatNatural(e,t,!0,this._joinConditionOptions.restrictToColumns),r=n.keep;this._schema=n.schema,this._rowCreatorMatched=function(e,t){return p.createNaturalRowArray(e,t,r.size,r.keepIndicesA,r.keepIndicesB)}}else{const n=e.getConflictingColumnsArray(t);n.length>0&&this.throwExecutionError(s.a("db.messages.exec.error-join-would-produce-non-unique-columns",{conflicts:n.join(", ")})),this._schema=h.a.concat(this._child.getSchema(),this._child2.getSchema()),this._rowCreatorMatched=function(e,t){return e.concat(t)}}this._rowCreatorNotMatched=function(e,t){return e.concat(t)}}catch(e){this.throwExecutionError(e.message)}}getResult(e){return super._getResult(e,!0)}}class S extends p{constructor(e,t,n){super(e,t,"⟖",n,!0)}_checkSchema(e,t){try{if("natural"===this._joinConditionOptions.type){const n=h.a.concatNatural(e,t,!1,this._joinConditionOptions.restrictToColumns),r=n.keep;this._schema=n.schema,this._rowCreatorMatched=function(e,t){return p.createNaturalRowArray(e,t,r.size,r.keepIndicesA,r.keepIndicesB)}}else{const n=e.getConflictingColumnsArray(t);n.length>0&&this.throwExecutionError(s.a("db.messages.exec.error-join-would-produce-non-unique-columns",{conflicts:n.join(", ")})),this._schema=h.a.concat(this._child.getSchema(),this._child2.getSchema()),this._rowCreatorMatched=function(e,t){return e.concat(t)}}this._rowCreatorNotMatched=function(e,t){return e.concat(t)}}catch(e){this.throwExecutionError(e.message)}}getResult(e){return super._getResult(e,!0)}}class O extends p{constructor(e,t,n){super(e,t,n?"⋉":"⋊",{type:"natural",restrictToColumns:null},!n)}_checkSchema(e,t){this._isRightJoin?(this._schema=t.copy(),this._rowCreatorMatched=function(e,t){return t}):(this._schema=e.copy(),this._rowCreatorMatched=function(e,t){return e}),this._rowCreatorNotMatched=null}getResult(e){return super._getResult(e,!0)}}class k extends u.c{constructor(e,t,n){if(super("τ",e),this._orderCols=t,this._orderAsc=n,this._orderAsc.length!==this._orderCols.length)throw new Error("order cols not correct");this._orderIndices=null}getSchema(){return this._child.getSchema()}getResult(e){if(e=this._returnOrCreateSession(e),null===this._orderIndices)throw new Error("check not called");const t=this.getChild().getResult(e).copy();return t.eliminateDuplicateRows(),this.setResultNumRows(t.getNumRows()),t.sort(this._orderIndices,this._orderAsc),t}check(){this._child.check();const e=this._child.getSchema();this._orderIndices=[];for(let t=0;t0){const n=[],r=e.groupBy||[];for(let e=0;e0)a=new v(a,r,n);else{const e=[];for(let t=0;t",[new f.c("number","rownum",[]),new f.c("number","constant",[o])]);if(-1===n)a=new L(r(t.child),i);else{const e=new f.c("boolean","<=",[new f.c("number","rownum",[]),new f.c("number","constant",[n+o])]);a=new L(r(t.child),new f.c("boolean","and",[i,e]))}break}default:throw new Error(`type ${e.type} not implemented`)}if(!a)throw new Error("should not happen");return!0===e.wrappedInParentheses&&a.setWrappedInParentheses(!0),n(a,e),a}function o(e,t,n){e.check();const r=new L(e,N(t));return r.setCodeInfoObject(n),r}function i(e){return"column"===e.type&&e.alias}return r(e.child)}function N(e){let t;if("null"===e.datatype&&"columnValue"===e.func)t=new f.b(e.args[0],e.args[1]);else switch(e.datatype){case"string":case"number":case"boolean":case"date":case"null":const n=[];for(let t=0;t{"relation"!==e.type||void 0!==t&&!1!==t.has(e.name)||n.push({name:e.name,line:e.codeInfo.location.start.line,column:e.codeInfo.location.start.column})}),n}function B(e,t){const n=Y.a.isMap(t)?t:Y.a().withMutations(e=>{for(const n of Object.keys(t))e.set(n,t[n])}).asImmutable();if(0===e.assignments.length)return;const r=new Map;Y.c().withMutations(t=>{for(let n=0;n{if(!0===i.get(e))return;if(!0===o.get(e))throw new Error(s.a("db.messages.translate.error-variable-cyclic-usage",{name:e}));o.set(e,!0);const t=r.get(e);if(void 0!==t){const{childRelations:e}=t;for(let t=0;t{if("relation"===e.type&&e.name===t.name){return Object.assign(Object.assign({},t.child),{metaData:Object.assign(Object.assign({},t.child.metaData),{fromVariable:t.name})})}return e});e=Object.assign(Object.assign({},e),{child:n})}r.set(e.name,e)}for(const[,t]of r)e.assignments[t.assignmentIndex].child=t.child;if(("relalgRoot"===e.type||"sqlRoot"===e.type)&&null!==e.child&&void 0!==e.child)for(const[t,n]of r)e.child=Object(F.b)(e.child,e=>"relation"===e.type&&e.name===t?Object.assign(Object.assign({},n.child),{metaData:Object.assign(Object.assign({},n.child.metaData),{fromVariable:t})}):e)}var U=n("./src/db/translate/textFromAst.ts");function z(e,t,n,r){if("none"===r)return{query:e,cursor:n};const o={math2plain:{pi:"pi",sigma:"sigma",rho:"rho",arrowLeft:"<-",arrowRight:"->",psi:"psi",tau:"tau",gamma:"gamma",unionOperator:"union",intersectOperator:"intersect",divisionOperator:"/",differenceOperator:"-",crossJoinOperator:"cross join",innerJoinOperator:"inner join",naturalJoinOperator:"natural join",leftSemiJoinOperator:"left semi join",rightSemiJoinOperator:"right semi join",antiJoinOperator:"anti join",leftOuterJoinOperator:"left outer join",rightOuterJoinOperator:"right outer join",fullOuterJoinOperator:"full outer join"},plain2math:{pi:"π",sigma:"σ",rho:"ρ",arrowLeft:"←",arrowRight:"→",psi:"ψ",tau:"τ",gamma:"γ",unionOperator:"∪",intersectOperator:"∩",divisionOperator:"÷",differenceOperator:"-",crossJoinOperator:"⨯",innerJoinOperator:"⨝",naturalJoinOperator:"⨝",leftSemiJoinOperator:"⋉",rightSemiJoinOperator:"⋊",antiJoinOperator:"▷",leftOuterJoinOperator:"⟕",rightOuterJoinOperator:"⟖",fullOuterJoinOperator:"⟗"}};for(let i=t.length-1;i>=0;i--){const a=t[i],s=a.location,l=e.substr(0,s.start.offset),u=e.substring(s.end.offset),c=o[r][a.name];if(e.substring(s.start.offset,s.end.offset)!==c){if(n)if(n.line>=s.start.line&&n.line<=s.end.line){if(n.column>s.start.column&&n.column=s.end.column){n.line-=s.end.line-s.start.line;const e=a.location.end.offset-a.location.start.offset,t=c.length;n.column-=e-t}}else n.lines.end.line&&(n.line-=s.end.line-s.start.line);e=l+c+u}}return{query:e,cursor:n}}const V=n("./src/db/parser/grammar_sql.pegjs");function q(e){return V.parse(e,{startRule:"start",tracer:void 0,i18n:r.c})}function G(e){return V.parse(e,{startRule:"dbDumpStart",tracer:void 0})}function K(e,t={}){t=t||{};const n=i(e,Object.keys(t));B(n,t);const r=I(n,t);return r.check(),r}},"./src/db/translate/textFromAst.ts":function(e,t,n){"use strict";(function(e){function r(e){if("groupRoot"!==e.type)throw new Error("wrong ast!?");let t="";function n(e){let t="";const{headers:n}=e;for(const e of n){const{name:n,lang:r,text:o}=e;t+=n,null!==r&&(t+="@"+r),t+=":",-1!==e.text.indexOf("\n")?t+=`[[${e.text}]]\n`:t+=e.text+"\n"}t+="\n";for(let n=0;n");if(null!==t&&i.addClass(t),null!==n&&i.append(n),null!==r){const t=e("");t.append(r),i.append(" ").append(t)}return null!==o&&i.append(" ( ").append(o).append(" ) "),i.text()}function r(t,n,r,o,i){const a=e("");if(null!==t&&a.addClass(t),a.append("( ").append(o).append(" ) "),a.append(n),null!==r){const t=e("");t.append(r),a.append(t)}return a.append(" ( ").append(i).append(" ) "),a.text()}function o(e,t){return"number"==typeof e&&(e=`[${e}]`),null===t?e:`${t}.${e}`}function i(e,t){if(null===e||"null"===t)return"null";if(e instanceof Date)return function(e){const t=e.getMonth()+1<10?"0"+(e.getMonth()+1):e.getMonth()+1,n=e.getDate()<10?"0"+e.getDate():e.getDate();return`${e.getFullYear()}-${t}-${n}`}(e);if("string"==typeof e)return`'${e}'`;if("number"==typeof e)return e.toString();throw new Error("unknown type "+t)}return function e(t){switch(t.type){case"relation":return n(t.type,t.name,null,null);case"table":{const e=[];let n=[];for(let e=0;er[n])&&(r[n]=o)}let o="{\n";for(let i=0;i0){for(let e=0;e{const o=r(e.child,t);return o!==e.child?(n=!0,Object.assign(Object.assign({},e),{child:o})):e});n&&(e=Object.assign({},e,{assignments:o}))}else if("sqlRoot"===e.type){let n=!1;const o=e.assignments.map(e=>{const o=r(e.child,t);return o!==e.child?(n=!0,Object.assign(Object.assign({},e),{child:o})):e});n&&(e=Object.assign({},e,{assignments:o}))}return t(e)}function o(e,t,n=!0){if(t(e),"statement"===e.type?o(e.from,t,n):"relationFromSubstatement"===e.type&&o(e.statement,t,n),void 0!==e.child&&o(e.child,t,n),void 0!==e.child2&&o(e.child2,t,n),void 0!==e.assignments&&!0===n)for(const r of e.assignments)o(r,t,n)}n.d(t,"b",(function(){return r})),n.d(t,"a",(function(){return o}))},"./src/locales/de.json":function(e){e.exports=JSON.parse('{"db.messages.parser.error-duplicate-variable":"Variablenname wurde mehrfach definiert: {{name}}","db.messages.parser.error-invalid-date-format":"\\"{{str}}\\" ist kein gültiges Datum; erwartetes Format: YYYY-MM-DD","db.messages.parser.error-group-duplicate-header":"mehrfacher header {{name}}","db.messages.parser.error-group-unknown-header":"unbekannter header {{name}}","db.messages.parser.error-group-header-name-missing":"der Name des Datensatzes fehlt (group: ....)","db.messages.parser.error-group-header-name-empty":"der Name des Datensatzes ist leer","db.messages.parser.error-group-non-unique-attribute":"nicht eindeutiges Attribut {{name}} in Spalte {{index}}","db.messages.parser.error-group-non-unique-group-name":"Der Name der Gruppe {{name}} ist nicht eindeutig.","db.messages.parser.error-sql-string-use-single-quotes":"verwenden Sie einfache Anführungszeichen für Zeichenketten","db.messages.parser.error-sql-invalid-relation-name":"\\"{{str}}\\" darf nicht als name einer Relation verwendet werden","db.messages.parser.error-sql-invalid-column-name":"\\"{{str}}\\" darf nicht als name einer Spalte verwendet werden","db.messages.parser.error-sql-group-by-missing":"group-by-Klausel fehlt","db.messages.parser.error-sql-having-without-group-by":"having-Klausel gefunden doch \\"group by\\" or Aggregation fehlt","db.messages.parser.error-sql-negative-limit":"das Limit muss größer oder gleich 0 sein","db.messages.parser.error-sqldump-invalid-column-number":"ungültige Spaltenanzahl in Zeile {{line}}","db.messages.parser.error-sqldump-invalid-type":"ungültiger Typ in Zeile {{line}}","db.messages.parser.error-sqldump-insert-wrong-number-columns":"Anzahl der Werte != Anzahl der Spalten","db.messages.parser.error-valueexpr-like-operand-no-string":"der rechte Operand von LIKE muss ein Zeichenkettenliteral sein","db.messages.exec.error-column-not-unique":"Spalte \\"{{column}}\\" kann wegen mehrdeutigkeit nicht hinzugefügt werden","db.messages.exec.error-column-not-found-name":"Spalte \\"{{column}} wurde im Schema {{schema}} nicht gefunden","db.messages.exec.error-column-not-found-index":"Spaltenindex \\"{{column}}\\" ist ausserhalb des Gültigkeitsbereichs für Schema {{schema}}; Indizes starten mit 1","db.messages.exec.error-column-ambiguous":"Spalte \\"{{column}}\\" ist mehrdeutig im Schema {{schema}}","db.messages.exec.error-column-index-out-of-range":"Spaltenindex \\"{{column}}\\" ist ausserhalb des Gültigkeitsbereichs für Schema {{schema}}; Indizes starten mit 1","db.messages.exec.error-could-not-change-rel-alias-ambiguity":"Relations alias \\"{{alias}}\\" kann wegen Mehrdeutigkeit nicht gesetzt werden","db.messages.exec.error-could-not-rename-ambiguity":"neuer Name \\"{{newName}}\\" für \\"{{oldName}}\\" kann wegen Mehrdeutigkeit nicht gesetzt werden im Schema {{schema}}","db.messages.exec.error-schema-a-not-part-of-schema-b":"Schema {{schemaA}} ist nicht Teil von {{schemaB}}","db.messages.exec.error-schemas-not-unifiable":"Schemas sind nicht unifiable: Typen oder Anzahl der Attribute ist unterschiedlich: {{schemaA}} and {{schemaB}}","db.messages.exec.error-column-not-in-both-schemas":"Spalte \\"{{column}}\\" kann nicht in beiden Schemas des Joins gefunden werden","db.messages.exec.error-condition-must-be-boolean":"Bedingung muss ein boolscher Ausdruck sein","db.messages.exec.error-func-not-defined-for-column-type":"{{func}} ist nicht für Datentyp {{colType}} definiert","db.messages.exec.error-join-would-produce-non-unique-columns":" the following columns appear in both relations: {{conflicts}}","db.messages.exec.error-no-columns-match-alias-star":"Keine Spalten gefunden für \\"{{alias}}.*\\"","db.messages.exec.error-datatype-not-specified-for-col":"Datentype für Spalte {{index}} (\\"{{column}}\\") wurde nicht spezifiziert","db.messages.exec.error-invalid-projection-error":"ungültige Projektion \\"{{argument}}\\": {{error}}","db.messages.exec.error-function-expects-type":"Funktion \\"{{func}}\\" erwartet Argumente vom Typ \\"{{expected}}\\" aber \\"{{given}}\\" gefunden","db.messages.exec.error-could-not-compare-different-types":"Werte mit unterschiedlichen Datentypen können nicht verglichen werden: {{typeA}} != {{typeB}}","db.messages.exec.error-function-expects-arguments-of-same-type":"Funktion {{func}} erwartet, dass alle Argumente den selben Datentyp haben.","db.messages.exec.error-case-when-condition-must-be-boolean":"Die Bedingung für ein CASE WHEN muss ein boolscher Ausdruck sein","db.messages.exec.error-case-when-expects-results-of-same-type":"CASE WHEN condition THEN result END erwartet dass alle results vom selben Typ sind","db.messages.exec.error-invalid-date-format":"\\"{{str}}\\" ist kein gültiges Datum; erwartetes Format: YYYY-MM-DD","db.messages.translate.error-relation-not-found":"Relation \\"{{name}}\\" nicht gefunden","db.messages.translate.warning-distinct-missing":" relational algebra uses implicit duplicate elimination","db.messages.translate.warning-ignored-all-on-set-operators":" relational algebra uses implicit duplicate elimination","db.messages.translate.error-variable-name-conflict":"Namenskonflikt: eine Relation mit Namen \\"{{name}}\\" existiert bereits","db.messages.translate.error-variable-cyclic-usage":"Zyklische Verwendung von Variable \\"{{name}}\\" erkannt","editor.codemirror-placeholder":"Abfrage ...\\nTastatürkürzel\\n\\tAbfrage ausführen: [CTRL]+[RETURN]\\n\\tMarkierten teil der Abfrage ausführen: [CTRL]+[SHIFT]+[RETURN]\\tAutovervollständigung: [CTRL]+[SPACE]","editor.alert-message-headers.success":"Erfolg","editor.alert-message-headers.info":"Info","editor.alert-message-headers.warning":"Warnung","editor.alert-message-headers.error":"Fehler","editor.inline-relation-editor.button-ok":"ok","editor.inline-relation-editor.button-cancel":"abbrechen","editor.inline-relation-editor.placeholder-column-name-and-types":"spaltenName:datenTyp","editor.inline-relation-editor.enter-your-data":"bitte Daten eingeben","editor.inline-relation-editor.error-column-name-missing":"Spaltenname fehlt in Spalte {{index}}","editor.inline-relation-editor.error-wrong-quoted-string":"Zeichenketten dürfen keine doppelten oder einfache Anführungszeichen enthalten","editor.error-no-query-found":"keine Abfrage gefunden","editor.pegjs-error.or":"oder","editor.pegjs-error.no-input-found":"keine Eingabe gefunden","editor.pegjs-error.end-of-input":"Ende der Eingabe","editor.pegjs-error.expected-found":"Erwarte {{expected}} aber {{found}} gefunden.","editor.error-at-line-x":"in Zeile {{line}}","calc.messages.error-query-missing":"keine Abfrage gefunden","calc.messages.error-query-missing-assignments-found":"nur Zuweisungen gefunden; die eigentliche Abfrage fehlt Help - Assignments (en)","calc.messages.gist-load-success":"gist erfolgreich geladen","calc.menu.headline":"Datensätze","calc.menu.datasets":"Datensätze","calc.menu.load-gist-headline":"Datensatz aus gist laden","calc.menu.load-gist-button":"laden","calc.menu.load-gist-insert-placeholder":"gist ID","calc.menu.create-own-dataset-headline":"Eigenen Datensatz erstellen","calc.menu.create-own-dataset-text":"Sie können Ihren eigenen Datensatz erstellen und ihn mit anderen teilen. Lernen Sie mehr darüber im Maintainer Tutorial","calc.menu.create-own-dataset-text-link":"Maintainer Tutorial (en)","calc.menu.create-own-dataset-button-new":"neuen Datensatz erstellen","calc.menu.create-own-dataset-button-modify":"aktuellen Datensatz abändern","calc.navigation.take-a-tour":"Tour starten","calc.navigation.feedback":"Feedback","calc.navigation.help":"Hilfe (en)","calc.navigation.calc":"Rechner","calc.navigation.language":"Sprache","calc.maintainer-groups.misc":"Diverse","calc.maintainer-groups.temp":"Ungespeichert","calc.maintainer-groups.uibk":"Universität Innsbruck","calc.maintainer-groups.saarland":"Universität Saarland","calc.editors.button-history":"Verlauf","calc.editors.insert-relation-title":"Einfügen","calc.editors.insert-relation-tooltip":"Beziehungs- oder Spaltennamen einfügen","calc.editors.group.tab-name":"Datensatz Editor","calc.editors.group.tab-name-short":"DS","calc.editors.group.toolbar.import-sql":"SQL-dump importieren","calc.editors.group.toolbar.import-sql-content":"SQL-dump importieren","calc.editors.group.toolbar.add-new-relation":"neue Relation hinzufügen","calc.editors.group.toolbar.add-new-relation-content":"Relationseditor öffnen","calc.editors.group.button-download":"download","calc.editors.group.button-exec":"Vorschau","calc.editors.group.button-use":"Datensatz im Editor verwenden","calc.editors.group.button-use_plural":"Datensatz im Editor verwenden","calc.editors.group.sql-import-group-name-placeholder":"Name des Datensatzes (importiert)","calc.editors.group.new-group-example-group":"-- dies ist ein Beispiel\\n\\ngroup: nameDesDatensatzes \\n\\n\\nA = {\\n\\ta:string, b:number\\n\\tbeispiel, 42\\n}","calc.editors.group.modal-sqldump.modal-title":"SQL-Dump importieren","calc.editors.group.modal-sqldump.button-close":"schließen","calc.editors.group.modal-sqldump.button-cancel":"abbrechen","calc.editors.group.modal-sqldump.button-import-sql":"importieren","calc.editors.group.modal-sqldump.description":"Kopieren Sie den SQL-Dump hier her um einen Datensatz daraus zu erstellen.","calc.editors.ra.tab-name":"Relationale Algebra","calc.editors.ra.tab-name-short":"RelAlg","calc.editors.ra.button-execute-query":"Query ausführen","calc.editors.ra.button-execute-selection":"Markierung ausführen","calc.editors.ra.button-download":"download","calc.editors.ra.toolbar.projection":"Projektion","calc.editors.ra.toolbar.projection-content":"π a, b ( A )\\n
        pi a, b A","calc.editors.ra.toolbar.selection":"Selektion","calc.editors.ra.toolbar.selection-content":"σ a < b ∧ b c ( A )\\n
        sigma a < b and b != c A","calc.editors.ra.toolbar.rename":"Umbenennen (Relationen/Spalten)","calc.editors.ra.toolbar.rename-content":"
        σ x.a > 1 ( ρ x ( A ) )
        \\n
        σ A.y > 2 ( rho ya ( A ) )
        ","calc.editors.ra.toolbar.rename-columns-operator":"Umbenennung von Spalten","calc.editors.ra.toolbar.rename-columns-operator-content":"
        σ A.y > 2 ( ρ ya ( A ) )
        ","calc.editors.ra.toolbar.orderBy":"Sortieren","calc.editors.ra.toolbar.orderBy-content":"","calc.editors.ra.toolbar.groupBy":"Gruppieren","calc.editors.ra.toolbar.groupBy-content":"
        γ a, b; count(c)→c ( A )
        \\n
        gamma count(a)->x, sum(b)->y ( A )
        ","calc.editors.ra.toolbar.and":"Und","calc.editors.ra.toolbar.and-content":"
        σ a < b b c ( A )
        ","calc.editors.ra.toolbar.xor":"Xor","calc.editors.ra.toolbar.xor-content":"
        σ a < b b c ( A )
        ","calc.editors.ra.toolbar.or":"Oder","calc.editors.ra.toolbar.or-content":"
        σ a < b b c ( A )
        ","calc.editors.ra.toolbar.not":"Verneinung","calc.editors.ra.toolbar.not-content":" ¬(a < b) ( A )","calc.editors.ra.toolbar.equals":"Gleich","calc.editors.ra.toolbar.equals-content":" a = b ( A )","calc.editors.ra.toolbar.not-equals":"Ungleich","calc.editors.ra.toolbar.not-equals-content":" a \'text\' ( A )","calc.editors.ra.toolbar.greater-or-equals":"Größer-Gleich","calc.editors.ra.toolbar.greater-or-equals-content":" a 42 ( A )","calc.editors.ra.toolbar.lesser-or-equals":"Kleiner-Gleich","calc.editors.ra.toolbar.lesser-or-equals-content":" a 42 ( A )","calc.editors.ra.toolbar.intersect":"Schnittmenge","calc.editors.ra.toolbar.intersect-content":"
        ( A ) ( B )
        ","calc.editors.ra.toolbar.union":"Vereinigung","calc.editors.ra.toolbar.union-content":"
        ( A ) ( B )
        ","calc.editors.ra.toolbar.division":"Division (Relationen)","calc.editors.ra.toolbar.division-content":"
        ( A ) ÷ ( B )
        ","calc.editors.ra.toolbar.subtraction":"Mengendifferenz","calc.editors.ra.toolbar.subtraction-content":"
        ( A ) - ( B )
        \\n
        ( A ) \\n ( B )
        ","calc.editors.ra.toolbar.cross-join":"cross join (Kreuzprodukt)","calc.editors.ra.toolbar.cross-join-content":"
        ( A ) ( B )
        ","calc.editors.ra.toolbar.natural-join":"natural join / θ-join","calc.editors.ra.toolbar.natural-join-content":"
        ( A ) ( B )
        \\n
        ( A ) ⋈ A.a ≥ B.a ( B )
        ","calc.editors.ra.toolbar.left-outer-join":"left outer join","calc.editors.ra.toolbar.left-outer-join-content":"
        ( A ) ⟕ ( B )
        \\n
        ( A ) ⟕ A.a < B.a ( B )
        \\n","calc.editors.ra.toolbar.right-outer-join":"right outer join","calc.editors.ra.toolbar.right-outer-join-content":"
        ( A ) ⟖ ( B )
        \\n
        ( A ) ⟖ A.a < B.a ( B )
        \\n","calc.editors.ra.toolbar.full-outer-join":"full outer join","calc.editors.ra.toolbar.full-outer-join-content":"
        ( A ) ⟗ ( B )
        \\n
        ( A ) ⟗ A.a != B.a ( B )
        ","calc.editors.ra.toolbar.left-semi-join":"left semi join","calc.editors.ra.toolbar.left-semi-join-content":"
        ( A ) ⋉ ( B )
        ","calc.editors.ra.toolbar.right-semi-join":"right semi join","calc.editors.ra.toolbar.right-semi-join-content":"
        ( A ) ⋊ ( B )
        ","calc.editors.ra.toolbar.anti-join":"anti join","calc.editors.ra.toolbar.anti-join-content":"
        ( A ) ▷ ( B )
        ","calc.editors.ra.toolbar.assignment":"Zuweisung","calc.editors.ra.toolbar.assignment-content":"
        X = pi a ( A )\\n
        Y = pi b ( b )\\n
        ( X ) ( Y )
        ","calc.editors.ra.toolbar.single-line-comment":"Kommentar einzeilig","calc.editors.ra.toolbar.single-line-comment-content":"π a, b A -- useful comment","calc.editors.ra.toolbar.multi-line-comment":"Kommentar mehrzeilig","calc.editors.ra.toolbar.multi-line-comment-content":"/* this is a very,
        very long comment */

        π a, b A","calc.editors.ra.toolbar.inline-relation":"inline-Relation","calc.editors.ra.toolbar.inline-relation-content":"σ a = \'test\' ({
        a:string, b:number, X.c:date
        a, 1, 1970-01-01
        }
        )","calc.editors.ra.toolbar.inline-relation-editor":"inline-Relation (Editor)","calc.editors.ra.toolbar.inline-relation-editor-content":"eine neue inline-Relation mit dem Editor erstellen","calc.editors.ra.toolbar.insert-date":"Datum einfügen","calc.editors.ra.toolbar.insert-date-content":"σ a < date(\'1970-01-01\') ( A )","calc.editors.ra.toolbar.autoreplace-operators.title":"Operatoren ersetzen","calc.editors.ra.toolbar.autoreplace-operators.header":"Operatoren automatisch ersetzen","calc.editors.ra.toolbar.autoreplace-operators.none":"keine Ersetzung","calc.editors.ra.toolbar.autoreplace-operators.plain2math":"pi => π","calc.editors.ra.toolbar.autoreplace-operators.math2plain":"π => pi","calc.editors.sql.tab-name":"SQL","calc.editors.sql.tab-name-short":"SQL","calc.editors.sql.button-execute-query":"Query ausführen","calc.editors.sql.button-execute-selection":"Markierung ausführen","calc.editors.sql.button-download":"download","calc.editors.sql.toolbar.select":"select-Klausel","calc.editors.sql.toolbar.select-content":"

        SELECT * FROM A

        SELECT a, A.b, A.c FROM A
        ","calc.editors.sql.toolbar.from":"from-Klausel","calc.editors.sql.toolbar.from-content":"
        SELECT *
        FROM A, B as b
        INNER JOIN C NATURAL
        ","calc.editors.sql.toolbar.where":"where-Klausel","calc.editors.sql.toolbar.where-content":"SELECT * FROM A, B
        where A.a = B.a or false","calc.editors.sql.toolbar.group-by":"group-b-Klausel","calc.editors.sql.toolbar.group-by-content":"SELECT a, COUNT(b) as num
        FROM A
        GROUP BY a","calc.editors.sql.toolbar.having":"having-Klausel","calc.editors.sql.toolbar.having-content":"SELECT a, SUM(b) as sum
        FROM A
        GROUP BY a
        having sum > 10","calc.editors.sql.toolbar.order-by":"order-by-Klausel","calc.editors.sql.toolbar.order-by-content":"

        SELECT * FROM A ORDER BY a asc, b desc

        SELECT * FROM A ORDER BY 1, 2, 3
        ","calc.editors.sql.toolbar.limit":"limit-Klausel","calc.editors.sql.toolbar.limit-content":"SELECT * FROM A
        LIMIT 10 OFFSET 0","calc.editors.sql.toolbar.insert-date":"Datum einfügen","calc.editors.sql.toolbar.insert-date-content":"select * from A\\nwhere a < date(\\"1970-01-01\\")","calc.result.modal.title":"Ergebnis","calc.result.modal.close":"Schließen","calc.editors.ra.inline-editor.title":"Relation Editor","calc.editors.ra.inline-editor.button-download-csv":"CSV downloaden","calc.editors.ra.inline-editor.button-upload-csv":"CSV uploaden","calc.editors.ra.inline-editor.button-cancel":"Abbrechen","calc.editors.ra.inline-editor.button-ok":"Ok","calc.editors.ra.inline-editor.row-name":"Name","calc.editors.ra.inline-editor.row-type":"Typ","calc.editors.ra.inline-editor.input-relation-name":"Relations Name","calc.navigation.imprint":"Impressum"}')},"./src/locales/en.json":function(e){e.exports=JSON.parse('{"db.messages.parser.error-duplicate-variable":"duplicate variable name: {{name}}","db.messages.parser.error-invalid-date-format":"\\"{{str}}\\" is not a valid date; expected format: YYYY-MM-DD","db.messages.parser.error-group-duplicate-header":"duplicate header {{name}}","db.messages.parser.error-group-unknown-header":"unknown header {{name}}","db.messages.parser.error-group-header-name-missing":"the name of the group is missing (group: ....)","db.messages.parser.error-group-header-name-empty":"the name of the group must not be empty","db.messages.parser.error-group-non-unique-attribute":"non unique attribute {{name{{ in column }}index}}","db.messages.parser.error-group-non-unique-group-name":"duplicate group name: {{name}}","db.messages.parser.error-sql-string-use-single-quotes":"use single quotes for strings","db.messages.parser.error-sql-invalid-relation-name":"\\"{{str}}\\" must not be used as a relation-name","db.messages.parser.error-sql-invalid-column-name":"\\"{{str}}\\" must not be used as a column-name","db.messages.parser.error-sql-group-by-missing":"group by is missing","db.messages.parser.error-sql-having-without-group-by":"having found but missing \\"group by\\" or aggregation","db.messages.parser.error-sql-negative-limit":"the limit given must be >= 0","db.messages.parser.error-sqldump-invalid-column-number":"invalid number of columns in line {{line}}","db.messages.parser.error-sqldump-invalid-type":"invalid type in line {{line}}","db.messages.parser.error-sqldump-insert-wrong-number-columns":"number of values != number of columns","db.messages.parser.error-valueexpr-like-operand-no-string":"right operand of LIKE must be a string literal","db.messages.exec.error-column-not-unique":"could not add column \\"{{column}}\\" because of ambiguity","db.messages.exec.error-column-not-found-name":"could not find column \\"{{column}}\\" in schema {{schema}}","db.messages.exec.error-column-not-found-index":"column index \\"{{column}}\\" is out of range in schema {{schema}}; index starts at 1","db.messages.exec.error-column-ambiguous":"column \\"{{column}}\\" is ambiguous in {{schema}}","db.messages.exec.error-column-index-out-of-range":"column index \\"{{column}}\\" is out of range in {{schema}}; index starts at 1","db.messages.exec.error-could-not-change-rel-alias-ambiguity":"could not set relation alias \\"{{alias}}\\" because of ambiguity","db.messages.exec.error-could-not-rename-ambiguity":"could not set new name \\"{{newName}}\\" for \\"{{oldName}}\\" because of ambiguity in {{schema}}","db.messages.exec.error-schema-a-not-part-of-schema-b":"schema {{schemaA}} is not part of {{schemaB}}","db.messages.exec.error-schemas-not-unifiable":"schemas are not unifiable: types are different or size is different: {{schemaA}} and {{schemaB}}","db.messages.exec.error-column-not-in-both-schemas":"column \\"{{column}}\\" can not be found in both schemas of join","db.messages.exec.error-condition-must-be-boolean":"condition must be a boolean expression","db.messages.exec.error-func-not-defined-for-column-type":"{{func}} not defined for type {{colType}}","db.messages.exec.error-join-would-produce-non-unique-columns":"join would result in non unique column names","db.messages.exec.error-no-columns-match-alias-star":"no columns match \\"{{alias}}.*\\"","db.messages.exec.error-datatype-not-specified-for-col":"datatype for column {{index}} (\\"{{column}}\\") is not specified","db.messages.exec.error-invalid-projection-error":"invalid projection \\"{{argument}}\\": {{error}}","db.messages.exec.error-function-expects-type":"function \\"{{func}}\\" expects arguments of type \\"{{expected}}\\" but \\"{{given}}\\" given","db.messages.exec.error-could-not-compare-different-types":"could not compare value if types are different: {{typeA}} != {{typeB}}","db.messages.exec.error-function-expects-arguments-of-same-type":"{{func}} expects all arguments to be of the same type","db.messages.exec.error-case-when-condition-must-be-boolean":"the condition of a CASE WHEN must be of type boolean","db.messages.exec.error-case-when-expects-results-of-same-type":"CASE WHEN condition THEN result END expects all results to be of the same type","db.messages.exec.error-invalid-date-format":"\\"{{str}}\\" is not a valid date; expected format: YYYY-MM-DD","db.messages.translate.error-relation-not-found":"could not find relation \\"{{name}}\\"","db.messages.translate.warning-distinct-missing":"DISTINCT is missing","db.messages.translate.warning-ignored-all-on-set-operators":"ignored ALL on set operation","db.messages.translate.error-variable-name-conflict":"name conflict: relation name \\"{{name}}\\" already exists","db.messages.translate.error-variable-cyclic-usage":"cyclic usage of variable \\"{{name}}\\" detected","editor.codemirror-placeholder":"your query goes here ...\\n\\nkeyboard shortcuts:\\n\\texecute statement: [CTRL]+[RETURN]\\n\\texecute selection: [CTRL]+[SHIFT]+[RETURN]\\n\\tautocomplete: [CTRL]+[SPACE]\\n","editor.alert-message-headers.success":"Success","editor.alert-message-headers.info":"Info","editor.alert-message-headers.warning":"Warning","editor.alert-message-headers.error":"Error","editor.inline-relation-editor.button-ok":"ok","editor.inline-relation-editor.button-cancel":"cancel","editor.inline-relation-editor.placeholder-column-name-and-types":"columnName:type","editor.inline-relation-editor.enter-your-data":"please enter your data","editor.inline-relation-editor.error-column-name-missing":"column name missing in column {{index}}","editor.inline-relation-editor.error-wrong-quoted-string":"string must not contain single and double quotes","editor.error-no-query-found":"no query found","editor.pegjs-error.or":"or","editor.pegjs-error.no-input-found":"no input found","editor.pegjs-error.end-of-input":"end of input","editor.pegjs-error.expected-found":"Expected {{expected}} but {{found}} found.","editor.error-at-line-x":"at line {{line}}","calc.messages.error-query-missing":"no query found","calc.messages.error-query-missing-assignments-found":"only assignments found; query is missing Help - Assignments","calc.messages.gist-load-success":"gist loaded successfully","calc.menu.headline":"load a Dataset","calc.menu.datasets":"Datasets","calc.menu.load-gist-headline":"Load dataset stored in a gist","calc.menu.load-gist-button":"load","calc.menu.load-gist-insert-placeholder":"gist ID","calc.menu.create-own-dataset-headline":"Create your own Dataset","calc.menu.create-own-dataset-text":"You can create your own dataset and share it with others. Learn more about it in the Maintainer Tutorial","calc.menu.create-own-dataset-text-link":"Maintainer Tutorial","calc.menu.create-own-dataset-button-new":"create new Dataset","calc.menu.create-own-dataset-button-modify":"modify current Dataset","calc.navigation.take-a-tour":"Take a Tour","calc.navigation.feedback":"Feedback","calc.navigation.help":"Help","calc.navigation.calc":"Calculate","calc.navigation.language":"Language","calc.maintainer-groups.misc":"Miscellaneous","calc.maintainer-groups.temp":"Temporary","calc.maintainer-groups.uibk":"University of Innsbruck","calc.maintainer-groups.saarland":"University of Saarland","calc.editors.button-history":"history","calc.editors.insert-relation-title":"Insert","calc.editors.insert-relation-tooltip":"Insert relation or column names","calc.editors.group.tab-name":"Group Editor","calc.editors.group.tab-name-short":"GE","calc.editors.group.toolbar.import-sql":"import SQL-dump","calc.editors.group.toolbar.import-sql-content":"import SQL-dump","calc.editors.group.toolbar.add-new-relation":"add new relation","calc.editors.group.toolbar.add-new-relation-content":"open relation editor","calc.editors.group.button-download":"download","calc.editors.group.button-exec":"preview","calc.editors.group.button-use":"use Group in editor","calc.editors.group.button-use_plural":"use first Group in editor","calc.editors.group.sql-import-group-name-placeholder":"Name of the group (imported from SQL)","calc.editors.group.new-group-example-group":"-- this is an example\\n\\ngroup: nameOfTheNewGroup \\n\\n\\nA = {\\n\\ta:string, b:number\\n\\texample, 42\\n}","calc.editors.group.modal-sqldump.modal-title":"Import SQL-Dump","calc.editors.group.modal-sqldump.button-close":"Close","calc.editors.group.modal-sqldump.button-cancel":"cancel","calc.editors.group.modal-sqldump.button-import-sql":"import SQL","calc.editors.group.modal-sqldump.description":"Put your SQL-Dump here to create a group.","calc.editors.ra.tab-name":"Relational Algebra","calc.editors.ra.tab-name-short":"RelAlg","calc.editors.ra.button-execute-query":"execute query","calc.editors.ra.button-execute-selection":"execute selection","calc.editors.ra.button-download":"download","calc.editors.ra.toolbar.projection":"projection","calc.editors.ra.toolbar.projection-content":"π a, b ( A )\\n
        pi a, b A","calc.editors.ra.toolbar.selection":"selection","calc.editors.ra.toolbar.selection-content":"σ a < b ∧ b c ( A )\\n
        sigma a < b and b != c A","calc.editors.ra.toolbar.rename":"rename relation / rename columns","calc.editors.ra.toolbar.rename-content":"
        σ x.a > 1 ( ρ x ( A ) )
        \\n
        σ A.y > 2 ( rho ya ( A ) )
        ","calc.editors.ra.toolbar.rename-columns-operator":"rename columns operator","calc.editors.ra.toolbar.rename-columns-operator-content":"
        σ A.y > 2 ( ρ ya ( A ) )
        ","calc.editors.ra.toolbar.orderBy":"order by","calc.editors.ra.toolbar.orderBy-content":"
        τ a asc, [2] desc ( A )
        tau a asc, [2] desc ( A )
        ","calc.editors.ra.toolbar.groupBy":"group by","calc.editors.ra.toolbar.groupBy-content":"
        γ a, b; count(c)→c ( A )
        \\n
        gamma count(a)->x, sum(b)->y ( A )
        ","calc.editors.ra.toolbar.and":"and","calc.editors.ra.toolbar.and-content":"
        σ a < b b c ( A )
        ","calc.editors.ra.toolbar.xor":"xor","calc.editors.ra.toolbar.xor-content":"
        σ a < b b c ( A )
        ","calc.editors.ra.toolbar.or":"or","calc.editors.ra.toolbar.or-content":"
        σ a < b b c ( A )
        ","calc.editors.ra.toolbar.not":"not","calc.editors.ra.toolbar.not-content":"
        &sigma","calc.editors.ra.toolbar.equals":"equals","calc.editors.ra.toolbar.equals-content":"
        &sigma","calc.editors.ra.toolbar.not-equals":"not equals","calc.editors.ra.toolbar.not-equals-content":"
        &sigma","calc.editors.ra.toolbar.greater-or-equals":"greater or equals","calc.editors.ra.toolbar.greater-or-equals-content":"
        &sigma","calc.editors.ra.toolbar.lesser-or-equals":"lesser or equals","calc.editors.ra.toolbar.lesser-or-equals-content":"
        &sigma","calc.editors.ra.toolbar.intersect":"intersect","calc.editors.ra.toolbar.intersect-content":"
        ( A ) ( B )
        ","calc.editors.ra.toolbar.union":"union","calc.editors.ra.toolbar.union-content":"
        ( A ) ( B )
        ","calc.editors.ra.toolbar.division":"division","calc.editors.ra.toolbar.division-content":"
        ( A ) ÷ ( B )
        ","calc.editors.ra.toolbar.subtraction":"subtraction","calc.editors.ra.toolbar.subtraction-content":"
        ( A ) - ( B )
        \\n
        ( A ) \\n ( B )
        ","calc.editors.ra.toolbar.cross-join":"cross join","calc.editors.ra.toolbar.cross-join-content":"
        ( A ) ( B )
        ","calc.editors.ra.toolbar.natural-join":"natural join / θ-join","calc.editors.ra.toolbar.natural-join-content":"
        ( A ) ( B )
        \\n
        ( A ) ⋈ A.a ≥ B.a ( B )
        ","calc.editors.ra.toolbar.left-outer-join":"left outer join","calc.editors.ra.toolbar.left-outer-join-content":"
        ( A ) ⟕ ( B )
        \\n
        ( A ) ⟕ A.a < B.a ( B )
        \\n","calc.editors.ra.toolbar.right-outer-join":"right outer join","calc.editors.ra.toolbar.right-outer-join-content":"
        ( A ) ⟖ ( B )
        \\n
        ( A ) ⟖ A.a < B.a ( B )
        \\n","calc.editors.ra.toolbar.full-outer-join":"full outer join","calc.editors.ra.toolbar.full-outer-join-content":"
        ( A ) ⟗ ( B )
        \\n
        ( A ) ⟗ A.a != B.a ( B )
        ","calc.editors.ra.toolbar.left-semi-join":"left semi join","calc.editors.ra.toolbar.left-semi-join-content":"
        ( A ) ⋉ ( B )
        ","calc.editors.ra.toolbar.right-semi-join":"right semi join","calc.editors.ra.toolbar.right-semi-join-content":"
        ( A ) ⋊ ( B )
        ","calc.editors.ra.toolbar.anti-join":"anti join","calc.editors.ra.toolbar.anti-join-content":"
        ( A ) ▷ ( B )
        ","calc.editors.ra.toolbar.assignment":"assignment","calc.editors.ra.toolbar.assignment-content":"
        X = pi a ( A )\\n
        Y = pi b ( b )\\n
        ( X ) ( Y )
        ","calc.editors.ra.toolbar.single-line-comment":"single-line comment","calc.editors.ra.toolbar.single-line-comment-content":"π a, b A -- useful comment","calc.editors.ra.toolbar.multi-line-comment":"multi-line comment","calc.editors.ra.toolbar.multi-line-comment-content":"/* this is a very,
        very long comment */

        π a, b A","calc.editors.ra.toolbar.inline-relation":"inline-relation","calc.editors.ra.toolbar.inline-relation-content":"σ a = \'test\' ({
        a:string, b:number, X.c:date
        a, 1, 1970-01-01
        }
        )","calc.editors.ra.toolbar.inline-relation-editor":"inline-relation (editor)","calc.editors.ra.toolbar.inline-relation-editor-content":"create a new inline-relation using a built in editor","calc.editors.ra.toolbar.insert-date":"insert date","calc.editors.ra.toolbar.insert-date-content":"σ a < date(\'1970-01-01\') ( A )","calc.editors.ra.toolbar.autoreplace-operators.title":"operator replacement","calc.editors.ra.toolbar.autoreplace-operators.header":"automatically replace operators","calc.editors.ra.toolbar.autoreplace-operators.none":"no replacement","calc.editors.ra.toolbar.autoreplace-operators.plain2math":"pi => π","calc.editors.ra.toolbar.autoreplace-operators.math2plain":"π => pi","calc.editors.sql.tab-name":"SQL","calc.editors.sql.tab-name-short":"SQL","calc.editors.sql.button-execute-query":"execute query","calc.editors.sql.button-execute-selection":"execute selection","calc.editors.sql.button-download":"download","calc.editors.sql.toolbar.select":"select clause","calc.editors.sql.toolbar.select-content":"

        SELECT * FROM A

        SELECT a, A.b, A.c FROM A
        ","calc.editors.sql.toolbar.from":"from clause","calc.editors.sql.toolbar.from-content":"
        SELECT *
        FROM A, B as b
        INNER JOIN C NATURAL
        ","calc.editors.sql.toolbar.where":"where clause","calc.editors.sql.toolbar.where-content":"SELECT * FROM A, B
        where A.a = B.a or false","calc.editors.sql.toolbar.group-by":"group by clause","calc.editors.sql.toolbar.group-by-content":"SELECT a, COUNT(b) as num
        FROM A
        GROUP BY a","calc.editors.sql.toolbar.having":"having clause","calc.editors.sql.toolbar.having-content":"SELECT a, SUM(b) as sum
        FROM A
        GROUP BY a
        having sum > 10","calc.editors.sql.toolbar.order-by":"order by clause","calc.editors.sql.toolbar.order-by-content":"

        SELECT * FROM A ORDER BY a asc, b desc

        SELECT * FROM A ORDER BY 1, 2, 3
        ","calc.editors.sql.toolbar.limit":"limit clause","calc.editors.sql.toolbar.limit-content":"SELECT * FROM A
        LIMIT 10 OFFSET 0","calc.editors.sql.toolbar.insert-date":"insert date","calc.editors.sql.toolbar.insert-date-content":"select * from A\\nwhere a < date(\\"1970-01-01\\")","calc.result.modal.title":"Result","calc.result.modal.close":"Close","calc.editors.ra.inline-editor.title":"Relation Editor","calc.editors.ra.inline-editor.button-download-csv":"Download CSV","calc.editors.ra.inline-editor.button-upload-csv":"Upload CSV","calc.editors.ra.inline-editor.button-cancel":"Cancel","calc.editors.ra.inline-editor.button-ok":"Ok","calc.editors.ra.inline-editor.row-name":"Name","calc.editors.ra.inline-editor.row-type":"Type","calc.editors.ra.inline-editor.input-relation-name":"Relation Name","calc.navigation.imprint":"Imprint"}')},"./src/locales/es.json":function(e){e.exports=JSON.parse('{"db.messages.parser.error-duplicate-variable":"nombre de variable duplicado: {{name}}","db.messages.parser.error-invalid-date-format":"\\"{{str}}\\" no es una fecha válida; formato esperado: YYYY-MM-DD","db.messages.parser.error-group-duplicate-header":"header duplicado {{name}}","db.messages.parser.error-group-unknown-header":"header desconocido {{name}}","db.messages.parser.error-group-header-name-missing":"el nombre del grupo no se ha encontrado (group: ....)","db.messages.parser.error-group-header-name-empty":"el nombre del grupo debe ser rellenado","db.messages.parser.error-group-non-unique-attribute":"atributo no único {{name}} en columna {{index}}","db.messages.parser.error-group-non-unique-group-name":"El nombre del grupo no es único.","db.messages.parser.error-sql-string-use-single-quotes":"utiliza comillas simples para cadenas de caracteres","db.messages.parser.error-sql-invalid-relation-name":"\\"{{str}}\\" no debe ser utilizado como nombre de relacion","db.messages.parser.error-sql-invalid-column-name":"\\"{{str}}\\" no debe ser utilizado como nombre de columna","db.messages.parser.error-sql-group-by-missing":"group by no se encuentra","db.messages.parser.error-sql-having-without-group-by":"se ha encontrado pero no se encuentra \\"group by\\" ó agregación","db.messages.parser.error-sql-negative-limit":"el límite dado debe ser >= 0","db.messages.parser.error-sqldump-invalid-column-number":"número inválido de columnas en línea {{line}}","db.messages.parser.error-sqldump-invalid-type":"tipo inválido en línea {{line}}","db.messages.parser.error-sqldump-insert-wrong-number-columns":"número de valores != número de columnas","db.messages.parser.error-valueexpr-like-operand-no-string":"operando derecho de LIKE debe ser una cadena literal","db.messages.exec.error-column-not-unique":"no se pude agregar columna \\"{{column}}\\" por ambiguedad","db.messages.exec.error-column-not-found-name":"no se pude encontrar columna \\"{{column}}\\" en esquema {{schema}}","db.messages.exec.error-column-not-found-index":"índice de columna \\"{{column}}\\" está fuera de rango en equema {{schema}}; index starts at 1","db.messages.exec.error-column-ambiguous":"columna \\"{{column}}\\" es ambigua en esquema {{schema}}","db.messages.exec.error-column-index-out-of-range":"índice de columna \\"{{column}}\\" está fuera de rango en equema {{schema}}; índice comienza en 1","db.messages.exec.error-could-not-change-rel-alias-ambiguity":"no se pudo establecer relación alias \\"{{alias}}\\" por ambiguedad","db.messages.exec.error-could-not-rename-ambiguity":"no se pudo establecer nuevo nombre \\"{{newName}}\\" para \\"{{oldName}}\\" por ambiguedad en el equema {{schema}}","db.messages.exec.error-schema-a-not-part-of-schema-b":"esquema {{schemaA}} no es parte de {{schemaB}}","db.messages.exec.error-schemas-not-unifiable":"esquemas no son unificables: los tipos son diferentes ó los tamaño son diferentes: {{schemaA}} y {{schemaB}}","db.messages.exec.error-column-not-in-both-schemas":"columna \\"{{column}}\\" no se puede encontrar en ambos esquemas del join","db.messages.exec.error-condition-must-be-boolean":"condición debe ser una expresión booleana","db.messages.exec.error-func-not-defined-for-column-type":"{{func}} no está definido para {{colType}}","db.messages.exec.error-join-would-produce-non-unique-columns":"Join würde nicht eindeutige Spaltennamen erzeugen","db.messages.exec.error-no-columns-match-alias-star":"las columnas no coinciden \\"{{alias}}.*\\"","db.messages.exec.error-datatype-not-specified-for-col":"tipo de dato para columna {{index}} (\\"{{column}}\\") no está especificado","db.messages.exec.error-invalid-projection-error":"proyección inválida \\"{{argument}}\\": {{error}}","db.messages.exec.error-function-expects-type":"función \\"{{func}}\\" espera argumentos de tipo \\"{{expected}}\\" pero \\"{{given}}\\" fue dado","db.messages.exec.error-could-not-compare-different-types":"no se pudo comparar valor si tipos son diferentes: {{typeA}} != {{typeB}}","db.messages.exec.error-function-expects-arguments-of-same-type":"{{func}} espera que todos los argumentos sean del mismo tipo","db.messages.exec.error-case-when-condition-must-be-boolean":"la condición de un CASE WHEN debe ser de tipo booleano","db.messages.exec.error-case-when-expects-results-of-same-type":"CASE WHEN condition THEN result END espera todos results ser del mismo tipo","db.messages.exec.error-invalid-date-format":"\\"{{str}}\\" no es una fecha válido; formato esperado: YYYY-MM-DD","db.messages.translate.error-relation-not-found":"no se pudo encontrar relación \\"{{name}}\\"","db.messages.translate.warning-distinct-missing":"DISTINCT fehlt","db.messages.translate.warning-ignored-all-on-set-operators":"ALL bei Mengenoperatoren wurde ignoriert","db.messages.translate.error-variable-name-conflict":"conflicto de nombre: nombre de relación \\"{{name}}\\" ya existe","db.messages.translate.error-variable-cyclic-usage":"uso de variable cíclico \\"{{name}}\\" detectado","editor.codemirror-placeholder":"tu consulta va aquí ...\\n\\natajos de teclado:\\n\\tejecutar declaración: [CTRL]+[RETURN]\\n\\ttejecutar selección: [CTRL]+[SHIFT]+[RETURN]\\n\\tautocompletar: [CTRL]+[SPACE]\\n","editor.alert-message-headers.success":"Éxito","editor.alert-message-headers.info":"Info","editor.alert-message-headers.warning":"Advertencia","editor.alert-message-headers.error":"Error","editor.inline-relation-editor.button-ok":"ok","editor.inline-relation-editor.button-cancel":"cancelar","editor.inline-relation-editor.placeholder-column-name-and-types":"nombreColumna:tipo","editor.inline-relation-editor.enter-your-data":"por favor ingrese los datos","editor.inline-relation-editor.error-column-name-missing":"nombre de columna ausente en columna {{index}}","editor.inline-relation-editor.error-wrong-quoted-string":"cadena de caracteres no debe contener comillas simples y dobles","editor.error-no-query-found":"no se encontró la consulta","editor.pegjs-error.or":"ó","editor.pegjs-error.no-input-found":"no se encontró la entrada","editor.pegjs-error.end-of-input":"fin de entrada","editor.pegjs-error.expected-found":"Se esperaba {{expected}} pero se encontró {{found}} .","editor.error-at-line-x":"en la línea {{line}}","calc.messages.error-query-missing":"no se encontró la consulta","calc.messages.error-query-missing-assignments-found":"solo se encontraron asignaciones; a la consulta le falta Help - Assignments","calc.messages.gist-load-success":"gist fue cargado con éxito","calc.menu.headline":"cargar un Dataset","calc.menu.datasets":"Datasets","calc.menu.load-gist-headline":"cargar dataset guardado en un gist","calc.menu.load-gist-button":"cargar","calc.menu.load-gist-insert-placeholder":"ID de gist","calc.menu.create-own-dataset-headline":"Crear tu propio Dataset","calc.menu.create-own-dataset-text":"Puedes crear tu propio dataset y compartirlo con otras personas. \\nAprende más acerca de ésto en Maintainer Tutorial","calc.menu.create-own-dataset-text-link":"Tutorial de mantenimiento (en)","calc.menu.create-own-dataset-button-new":"crear nuevo Dataset","calc.menu.create-own-dataset-button-modify":"modificar Dataset actual","calc.navigation.take-a-tour":"Haz un recorrido","calc.navigation.feedback":"Feedback","calc.navigation.help":"Ayuda (en)","calc.navigation.calc":"Calculadora","calc.navigation.language":"Lenguaje","calc.maintainer-groups.misc":"Misceláneo","calc.maintainer-groups.temp":"Temporal","calc.maintainer-groups.uibk":"Universidad de Innsbruck","calc.maintainer-groups.saarland":"Universidad de Saarland","calc.editors.button-history":"historia","calc.editors.insert-relation-title":"Insertar","calc.editors.insert-relation-tooltip":"Insertar nombres de relaciones o columnas","calc.editors.group.tab-name":"Editor de Grupo","calc.editors.group.tab-name-short":"EG","calc.editors.group.toolbar.import-sql":"importar SQL-dump","calc.editors.group.toolbar.import-sql-content":"importar SQL-dump","calc.editors.group.toolbar.add-new-relation":"agregar nueva relación","calc.editors.group.toolbar.add-new-relation-content":"abrir editor de relaciones","calc.editors.group.button-download":"descargar","calc.editors.group.button-exec":"vista previa","calc.editors.group.button-use":"utilizar Grupo en editor","calc.editors.group.button-use_plural":"utilizar Grupos en editor","calc.editors.group.sql-import-group-name-placeholder":"Nombre del grupo (importado de SQL)","calc.editors.group.new-group-example-group":"-- éste es un ejemplo\\n\\ngroup: nombreDeNuevoGrupo \\n\\n\\nA = {\\n\\ta:string, b:number\\n\\tejemplo, 42\\n}","calc.editors.group.modal-sqldump.modal-title":"Importar SQL-Dump","calc.editors.group.modal-sqldump.button-close":"Cerrar","calc.editors.group.modal-sqldump.button-cancel":"cancelar","calc.editors.group.modal-sqldump.button-import-sql":"importar SQL","calc.editors.group.modal-sqldump.description":"Ponga su SQL-Dump aquí para crear un grupo.","calc.editors.ra.tab-name":"Álgebra Relacional","calc.editors.ra.tab-name-short":"ÁlgRel","calc.editors.ra.button-execute-query":"executar consulta","calc.editors.ra.button-execute-selection":"executar selección","calc.editors.ra.button-download":"descargar","calc.editors.ra.toolbar.projection":"proyección","calc.editors.ra.toolbar.projection-content":"π a, b ( A )\\n
        pi a, b A","calc.editors.ra.toolbar.selection":"selección","calc.editors.ra.toolbar.selection-content":"σ a < b ∧ b c ( A )\\n
        sigma a < b and b != c A","calc.editors.ra.toolbar.rename":"renombrar relación / renombrar columnas","calc.editors.ra.toolbar.rename-content":"
        σ x.a > 1 ( ρ x ( A ) )
        \\n
        σ A.y > 2 ( rho ya ( A ) )
        ","calc.editors.ra.toolbar.rename-columns-operator":"renombrar operador de columnas","calc.editors.ra.toolbar.rename-columns-operator-content":"
        σ A.y > 2 ( ρ ya ( A ) )
        ","calc.editors.ra.toolbar.orderBy":"ordenar por","calc.editors.ra.toolbar.orderBy-content":"
        τ a asc, [2] desc ( A )
        tau a asc, [2] desc ( A )
        ","calc.editors.ra.toolbar.groupBy":"agrupar por","calc.editors.ra.toolbar.groupBy-content":"
        γ a, b; count(c)→c ( A )
        \\n
        gamma count(a)->x, sum(b)->y ( A )
        ","calc.editors.ra.toolbar.and":"y","calc.editors.ra.toolbar.and-content":"
        σ a < b b c ( A )
        ","calc.editors.ra.toolbar.xor":"xor","calc.editors.ra.toolbar.xor-content":"
        σ a < b b c ( A )
        ","calc.editors.ra.toolbar.or":"ó","calc.editors.ra.toolbar.or-content":"
        σ a < b b c ( A )
        ","calc.editors.ra.toolbar.not":"no","calc.editors.ra.toolbar.not-content":"
        &sigma","calc.editors.ra.toolbar.equals":"igual","calc.editors.ra.toolbar.equals-content":"
        &sigma","calc.editors.ra.toolbar.not-equals":"no es igual","calc.editors.ra.toolbar.not-equals-content":"
        &sigma","calc.editors.ra.toolbar.greater-or-equals":"mayor ó igual","calc.editors.ra.toolbar.greater-or-equals-content":"
        &sigma","calc.editors.ra.toolbar.lesser-or-equals":"menor ó igual","calc.editors.ra.toolbar.lesser-or-equals-content":"
        &sigma","calc.editors.ra.toolbar.intersect":"intersecta","calc.editors.ra.toolbar.intersect-content":"
        ( A ) ( B )
        ","calc.editors.ra.toolbar.union":"unión","calc.editors.ra.toolbar.union-content":"
        ( A ) ( B )
        ","calc.editors.ra.toolbar.division":"división","calc.editors.ra.toolbar.division-content":"
        ( A ) ÷ ( B )
        ","calc.editors.ra.toolbar.subtraction":"resta","calc.editors.ra.toolbar.subtraction-content":"
        ( A ) - ( B )
        \\n
        ( A ) \\\\ ( B )
        \\n","calc.editors.ra.toolbar.cross-join":"cross join (cruzado)","calc.editors.ra.toolbar.cross-join-content":"
        ( A ) ( B )
        ","calc.editors.ra.toolbar.natural-join":"natural join / θ-join","calc.editors.ra.toolbar.natural-join-content":"
        ( A ) ( B )
        \\n
        ( A ) ⋈ A.a ≥ B.a ( B )
        ","calc.editors.ra.toolbar.left-outer-join":"left outer join","calc.editors.ra.toolbar.left-outer-join-content":"
        ( A ) ⟕ ( B )
        \\n
        ( A ) ⟕ A.a < B.a ( B )
        ","calc.editors.ra.toolbar.right-outer-join":"right outer join","calc.editors.ra.toolbar.right-outer-join-content":"
        ( A ) ⟖ ( B )
        \\n
        ( A ) ⟖ A.a < B.a ( B )
        ","calc.editors.ra.toolbar.full-outer-join":"full outer join","calc.editors.ra.toolbar.full-outer-join-content":"
        ( A ) ⟗ ( B )
        \\n
        ( A ) ⟗ A.a != B.a ( B )
        ","calc.editors.ra.toolbar.left-semi-join":"left semi join","calc.editors.ra.toolbar.left-semi-join-content":"
        ( A ) ⋉ ( B )
        ","calc.editors.ra.toolbar.right-semi-join":"right semi join","calc.editors.ra.toolbar.right-semi-join-content":"
        ( A ) ⋊ ( B )
        ","calc.editors.ra.toolbar.anti-join":"anti join","calc.editors.ra.toolbar.anti-join-content":"
        ( A ) ▷ ( B )
        ","calc.editors.ra.toolbar.assignment":"asignación","calc.editors.ra.toolbar.assignment-content":"
        X = pi a ( A )\\n
        Y = pi b ( b )\\n
        ( X ) ( Y )
        ","calc.editors.ra.toolbar.single-line-comment":"comentario de una línea","calc.editors.ra.toolbar.single-line-comment-content":"π a, b A -- useful comment","calc.editors.ra.toolbar.multi-line-comment":"comentario de múltiples líneas","calc.editors.ra.toolbar.multi-line-comment-content":"/* this is a very,
        very long comment */

        π a, b A","calc.editors.ra.toolbar.inline-relation":"inline-relation","calc.editors.ra.toolbar.inline-relation-content":"σ a = \'test\' ({
        a:string, b:number, X.c:date
        a, 1, 1970-01-01
        }
        )","calc.editors.ra.toolbar.inline-relation-editor":"inline-relation (editor)","calc.editors.ra.toolbar.inline-relation-editor-content":"crear nuevo inline-relation utilizando editor incorporado","calc.editors.ra.toolbar.insert-date":"insertar fecha","calc.editors.ra.toolbar.insert-date-content":"","calc.editors.ra.toolbar.autoreplace-operators.title":"","calc.editors.ra.toolbar.autoreplace-operators.header":"","calc.editors.ra.toolbar.autoreplace-operators.none":"","calc.editors.ra.toolbar.autoreplace-operators.plain2math":"","calc.editors.ra.toolbar.autoreplace-operators.math2plain":"","calc.editors.sql.tab-name":"SQL","calc.editors.sql.tab-name-short":"SQL","calc.editors.sql.button-execute-query":"ejecutar consulta","calc.editors.sql.button-execute-selection":"ejecutar selección","calc.editors.sql.button-download":"descargar","calc.editors.sql.toolbar.select":"seleccionar cláusula","calc.editors.sql.toolbar.select-content":"

        SELECT * FROM A

        SELECT a, A.b, A.c FROM A
        ","calc.editors.sql.toolbar.from":"cláusula from (desde)","calc.editors.sql.toolbar.from-content":"
        SELECT *
        FROM A, B as b
        INNER JOIN C NATURAL
        ","calc.editors.sql.toolbar.where":"cláusula where (donde)","calc.editors.sql.toolbar.where-content":"SELECT * FROM A, B
        where A.a = B.a or false","calc.editors.sql.toolbar.group-by":"cláusula agrupar por","calc.editors.sql.toolbar.group-by-content":"SELECT a, COUNT(b) as num
        FROM A
        GROUP BY a","calc.editors.sql.toolbar.having":"teniendo cláusula","calc.editors.sql.toolbar.having-content":"SELECT a, SUM(b) as sum
        FROM A
        GROUP BY a
        having sum > 10","calc.editors.sql.toolbar.order-by":"cláusula ordenar por","calc.editors.sql.toolbar.order-by-content":"

        SELECT * FROM A ORDER BY a asc, b desc

        SELECT * FROM A ORDER BY 1, 2, 3
        ","calc.editors.sql.toolbar.limit":"cláusula límite","calc.editors.sql.toolbar.limit-content":"SELECT * FROM A
        LIMIT 10 OFFSET 0","calc.editors.sql.toolbar.insert-date":"insertar fecha","calc.editors.sql.toolbar.insert-date-content":"select * from A\\nwhere a < date(\\"1970-01-01\\")","calc.result.modal.title":"Resultado","calc.result.modal.close":"Cerrar","calc.editors.ra.inline-editor.title":"Editor de relaciones","calc.editors.ra.inline-editor.button-download-csv":"Descargar CSV","calc.editors.ra.inline-editor.button-upload-csv":"Subir CSV","calc.editors.ra.inline-editor.button-cancel":"Cancelar","calc.editors.ra.inline-editor.button-ok":"Ok","calc.editors.ra.inline-editor.row-name":"Nombre","calc.editors.ra.inline-editor.row-type":"Escriba","calc.editors.ra.inline-editor.input-relation-name":"Nombre de la relación","calc.navigation.imprint":"Imprimir"}')},"./src/locales/kr.json":function(e){e.exports=JSON.parse('{"db.messages.parser.error-duplicate-variable":"변수 이름 중복: {{name}}","db.messages.parser.error-invalid-date-format":"\\"__str__\\" 유효하지 않은 날짜; 형식: YYYY-MM-DD","db.messages.parser.error-group-duplicate-header":" 헤더 중복: {{name}}","db.messages.parser.error-group-unknown-header":"알 수 없는 헤더: {{name}}","db.messages.parser.error-group-header-name-missing":"그룹 이름이 없음(group: ....)","db.messages.parser.error-group-header-name-empty":"그룹 이름은 비어있으면 안됨","db.messages.parser.error-group-non-unique-attribute":"__index__ 열에서 고유하지 않은 속성 {{name}}","db.messages.parser.error-group-non-unique-group-name":"duplicate group name: {{name}}","db.messages.parser.error-sql-string-use-single-quotes":"문자열에 작은 따음표 사용","db.messages.parser.error-sql-invalid-relation-name":"\\"__str__\\"은 관계 이름으로 사용 할 수 없음","db.messages.parser.error-sql-invalid-column-name":"\\"__str__\\"은 열 이름으로 사용할 수 없음","db.messages.parser.error-sql-group-by-missing":"group by 없음","db.messages.parser.error-sql-having-without-group-by":"\\"group by\\" 또는 집계 없음","db.messages.parser.error-sql-negative-limit":"0 이상이어야 함","db.messages.parser.error-sqldump-invalid-column-number":"__line__ 에서 유효하지 않은 열","db.messages.parser.error-sqldump-invalid-type":"__line__ 에서 유효하지 않은 타입","db.messages.parser.error-sqldump-insert-wrong-number-columns":"값의 숫자 != 열의 숫자","db.messages.parser.error-valueexpr-like-operand-no-string":"LIKE의 오른쪽 피연산자는 문자열 리터럴이어야 함","db.messages.exec.error-column-not-unique":"모호성 때문에 열 \\"__column__\\" 을 추가할 수 없음","db.messages.exec.error-column-not-found-name":"스키마 __schema__ 에서 열 \\"__column__\\" 을 찾을 수 없음","db.messages.exec.error-column-not-found-index":"열 인덱스 \\"__column__\\" 는 범위를 벗어남; 인덱스는 1에서 시작","db.messages.exec.error-column-ambiguous":"열 \\"__column__\\" 는 스키마 __schema__ 에서 모호함","db.messages.exec.error-column-index-out-of-range":"열 인덱스 \\"__column__\\" 는 범위를 벗어남; 인덱스는 1에서 시작","db.messages.exec.error-could-not-change-rel-alias-ambiguity":"모호성 때문에 릴레이션 가명 \\"__alias__\\"을 사용할 수 없음 ","db.messages.exec.error-could-not-rename-ambiguity":"스키마 __schema__ 에서의 모호성 때문에 \\"__oldName__\\"을 위한 새로운 이름 \\"__newName__\\" 을 설정 할 수 없음","db.messages.exec.error-schema-a-not-part-of-schema-b":"스키마 __schemaA__ 는 __schemaB__ 의 부분이 아님","db.messages.exec.error-schemas-not-unifiable":"스키마들은 통합될 수 없음: 타입들은 다르거나 사이즈들이 다르다: __schemaA__ 와 __schemaB__","db.messages.exec.error-column-not-in-both-schemas":"열 \\"__column__\\"은 두 스키마의 조인에서 찾을 수 없음","db.messages.exec.error-condition-must-be-boolean":"조건은 불린 대수여야만 함","db.messages.exec.error-func-not-defined-for-column-type":"__func_ _은 타입 __colType__ 을 위해 정의될 수 없음","db.messages.exec.error-join-would-produce-non-unique-columns":" Die folgenden Spalten sind teil beider Relationen: {{conflicts}}","db.messages.exec.error-no-columns-match-alias-star":"\\"__alias__.*\\"와 일치하는 열이 없음","db.messages.exec.error-datatype-not-specified-for-col":"열 __index__의 데이터 타입 (\\"__column__\\")이 구체화되지 않음","db.messages.exec.error-invalid-projection-error":"유효하지 않은 프로젝션 \\"__argument__\\": __error__","db.messages.exec.error-function-expects-type":"함수 \\"__func__\\"는 인자 타입 \\"__expected__\\" 으로 기대하지만 \\"__given__\\" 이 주어짐","db.messages.exec.error-could-not-compare-different-types":"타입이 다르면 비교할 수 없음: __typeA__ != __typeB__","db.messages.exec.error-function-expects-arguments-of-same-type":"__func__ 는 모든 인자가 같은 타입으로 기대함","db.messages.exec.error-case-when-condition-must-be-boolean":"CASE WHEN 조건은 불린 타입이어야 함","db.messages.exec.error-case-when-expects-results-of-same-type":"CASE WHEN condition THEN result END는 모든 결과가 같은 타입으로 기대함","db.messages.exec.error-invalid-date-format":"\\"__str__\\" 는 유효하지 않은 날짜; 형식: YYYY-MM-DD","db.messages.translate.error-relation-not-found":"릴레이션 \\"{{name}}\\"을 찾을 수 없음","db.messages.translate.warning-distinct-missing":" Duplikate werden in relationaler Algebra automatisch entfernt","db.messages.translate.warning-ignored-all-on-set-operators":" Duplikate werden in relationaler Algebra automatisch entfernt","db.messages.translate.error-variable-name-conflict":"이름 충돌: 릴레이션 이름 \\"{{name}}\\" 은 이미 존재함","db.messages.translate.error-variable-cyclic-usage":"변수 \\"{{name}}\\"의 순환 사용이 감지됨","editor.codemirror-placeholder":"쿼리는 이곳에 표시된다 ...\\n\\n키보드 단축키:\\n\\tstatement 실행: [CTRL]+[RETURN]\\n\\tselection 실행: [CTRL]+[SHIFT]+[RETURN]\\n\\t자동 완성: [CTRL]+[SPACE]","editor.alert-message-headers.success":"성공","editor.alert-message-headers.info":"정보","editor.alert-message-headers.warning":"경고","editor.alert-message-headers.error":" 에러 ","editor.inline-relation-editor.button-ok":"ok","editor.inline-relation-editor.button-cancel":"취소","editor.inline-relation-editor.placeholder-column-name-and-types":"열 이름:타입","editor.inline-relation-editor.enter-your-data":"데이터를 입력하라","editor.inline-relation-editor.error-column-name-missing":"열 이름이 열 __index__에 없다","editor.inline-relation-editor.error-wrong-quoted-string":"문자열은 작은따음표와 큰따음표를 포함할 수 없다.","editor.error-no-query-found":"쿼리를 찾을 수 없다","editor.pegjs-error.or":"또는","editor.pegjs-error.no-input-found":"입력을 찾을 수 없음","editor.pegjs-error.end-of-input":"입력의 끝","editor.pegjs-error.expected-found":"예상 된 __expected__이지만 __found__이 발견됨.","editor.error-at-line-x":"__line__ 줄에서","calc.messages.error-query-missing":"쿼리를 찾을 수 없음","calc.messages.error-query-missing-assignments-found":"쿼리를 찾을 수 없음 Help - Assignments","calc.messages.gist-load-success":"gist 불러오기 완료","calc.menu.headline":"데이터셋 불러오기","calc.menu.datasets":"데이터셋 불러오기","calc.menu.load-gist-headline":"gist에 저장된 데이터셋 불러오기","calc.menu.load-gist-button":"불러오기","calc.menu.load-gist-insert-placeholder":"gist 아이디","calc.menu.create-own-dataset-headline":"데이터셋 생성하기","calc.menu.create-own-dataset-text":"You can create your own dataset and share it with others. Learn more about it in the Maintainer Tutorial","calc.menu.create-own-dataset-text-link":"Maintainer Tutorial","calc.menu.create-own-dataset-button-new":"새로운 데이터셋 생성","calc.menu.create-own-dataset-button-modify":"현재 데이터셋 수정","calc.navigation.take-a-tour":"둘러보기","calc.navigation.feedback":"피드백","calc.navigation.help":"도움말","calc.navigation.calc":"Calculate","calc.navigation.language":"언어","calc.maintainer-groups.misc":"다른 종류","calc.maintainer-groups.temp":"임시","calc.maintainer-groups.uibk":"Innsbruck 대학교","calc.maintainer-groups.saarland":"Saarland 대학교","calc.editors.button-history":"기록","calc.editors.insert-relation-title":"Insert","calc.editors.insert-relation-tooltip":"Insert relation or column names","calc.editors.group.tab-name":"그룹 에디터","calc.editors.group.tab-name-short":"그룹 에디터","calc.editors.group.toolbar.import-sql":"SQL-덤프 가져오기","calc.editors.group.toolbar.import-sql-content":"SQL-컨텐트 가져오기","calc.editors.group.toolbar.add-new-relation":"새로운 릴레이션 추가","calc.editors.group.toolbar.add-new-relation-content":"릴레이션 에디터 열기","calc.editors.group.button-download":"다운로드","calc.editors.group.button-exec":"preview","calc.editors.group.button-use":"에디터에서 그룹 사용하기","calc.editors.group.button-use_plural":"에디터에서 여러 그룹 사용하기","calc.editors.group.sql-import-group-name-placeholder":"그룹 이름(SQL로부터 불러옴)","calc.editors.group.new-group-example-group":"-- 예시입니다\\n\\n그룹: nameOfTheNewGroup \\n\\n\\nA = {\\n\\ta:string, b:number\\n\\texample, 42\\n}","calc.editors.group.modal-sqldump.modal-title":"SQL-Dump 가져오기","calc.editors.group.modal-sqldump.button-close":"닫기","calc.editors.group.modal-sqldump.button-cancel":"취소","calc.editors.group.modal-sqldump.button-import-sql":"SQL 가져오기","calc.editors.group.modal-sqldump.description":"그룹을 생성하려면 SQL-Dump 이곳에 가져와라","calc.editors.ra.tab-name":"관계 대수","calc.editors.ra.tab-name-short":"관계 대수","calc.editors.ra.button-execute-query":"쿼리 실행","calc.editors.ra.button-execute-selection":"셀렉션 실행","calc.editors.ra.button-download":"다운로드","calc.editors.ra.toolbar.projection":"프로젝션","calc.editors.ra.toolbar.projection-content":"π a, b ( A )\\n
        pi a, b A","calc.editors.ra.toolbar.selection":"셀렉션","calc.editors.ra.toolbar.selection-content":"σ a < b ∧ b c ( A )\\n
        sigma a < b and b != c A","calc.editors.ra.toolbar.rename":"릴레이션 이름 변경 / 열 이름 변경","calc.editors.ra.toolbar.rename-content":"
        σ x.a > 1 ( ρ x ( A ) )
        \\n
        σ A.y > 2 ( rho ya ( A ) )
        ","calc.editors.ra.toolbar.rename-columns-operator":"열 연산자 변경","calc.editors.ra.toolbar.rename-columns-operator-content":"
        σ A.y > 2 ( ρ ya ( A ) )
        ","calc.editors.ra.toolbar.orderBy":"정렬","calc.editors.ra.toolbar.orderBy-content":"
        τ a asc, [2] desc ( A )
        tau a asc, [2] desc ( A )
        ","calc.editors.ra.toolbar.groupBy":"그룹화","calc.editors.ra.toolbar.groupBy-content":"
        γ a, b; count(c)→c ( A )
        \\n
        gamma count(a)->x, sum(b)->y ( A )
        ","calc.editors.ra.toolbar.and":"논리곱","calc.editors.ra.toolbar.and-content":"
        σ a < b b c ( A )
        ","calc.editors.ra.toolbar.xor":"배타적 논리","calc.editors.ra.toolbar.xor-content":"
        σ a < b b c ( A )
        ","calc.editors.ra.toolbar.or":"논리합","calc.editors.ra.toolbar.or-content":"
        σ a < b b c ( A )
        ","calc.editors.ra.toolbar.not":"논리적 부정","calc.editors.ra.toolbar.not-content":" ¬(a < b) ( A )
        ","calc.editors.ra.toolbar.equals":"등호","calc.editors.ra.toolbar.equals-content":" a = b ( A )
        ","calc.editors.ra.toolbar.not-equals":"부등호","calc.editors.ra.toolbar.not-equals-content":" a \'text\' ( A )
        ","calc.editors.ra.toolbar.greater-or-equals":"크거나 같다","calc.editors.ra.toolbar.greater-or-equals-content":" a 42 ( A )
        ","calc.editors.ra.toolbar.lesser-or-equals":"작거나 같다","calc.editors.ra.toolbar.lesser-or-equals-content":" a 42 ( A )
        ","calc.editors.ra.toolbar.intersect":"교집합","calc.editors.ra.toolbar.intersect-content":"
        ( A ) ( B )
        ","calc.editors.ra.toolbar.union":"합집합","calc.editors.ra.toolbar.union-content":"
        ( A ) ( B )
        ","calc.editors.ra.toolbar.division":"디비전","calc.editors.ra.toolbar.division-content":"
        ( A ) ÷ ( B )
        ","calc.editors.ra.toolbar.subtraction":"차집합","calc.editors.ra.toolbar.subtraction-content":"
        ( A ) - ( B )
        \\n
        ( A ) \\\\ ( B )
        \\n","calc.editors.ra.toolbar.cross-join":"카디션 프로덕트","calc.editors.ra.toolbar.cross-join-content":"
        ( A ) ( B )
        ","calc.editors.ra.toolbar.natural-join":"자연 조인 / θ-조인","calc.editors.ra.toolbar.natural-join-content":"
        ( A ) ( B )
        \\n
        ( A ) ⋈ A.a ≥ B.a ( B )
        ","calc.editors.ra.toolbar.left-outer-join":"왼쪽 외부 조인","calc.editors.ra.toolbar.left-outer-join-content":"
        ( A ) ⟕ ( B )
        \\n
        ( A ) ⟕ A.a < B.a ( B )
        ","calc.editors.ra.toolbar.right-outer-join":"오른쪽 외부 조인","calc.editors.ra.toolbar.right-outer-join-content":"
        ( A ) ⟖ ( B )
        \\n
        ( A ) ⟖ A.a < B.a ( B )
        ","calc.editors.ra.toolbar.full-outer-join":"완전 외부 조인","calc.editors.ra.toolbar.full-outer-join-content":"
        ( A ) ⟗ ( B )
        \\n
        ( A ) ⟗ A.a != B.a ( B )
        ","calc.editors.ra.toolbar.left-semi-join":"왼쪽 세미 조인","calc.editors.ra.toolbar.left-semi-join-content":"
        ( A ) ⋉ ( B )
        ","calc.editors.ra.toolbar.right-semi-join":"오른쪽 세미 조인","calc.editors.ra.toolbar.right-semi-join-content":"
        ( A ) ⋊ ( B )
        ","calc.editors.ra.toolbar.anti-join":"안티 조인","calc.editors.ra.toolbar.anti-join-content":"
        ( A ) ▷ ( B )
        ","calc.editors.ra.toolbar.assignment":"할당","calc.editors.ra.toolbar.assignment-content":"
        X = pi a ( A )\\n
        Y = pi b ( b )\\n
        ( X ) ( Y )
        ","calc.editors.ra.toolbar.single-line-comment":"한 줄 주석","calc.editors.ra.toolbar.single-line-comment-content":"π a, b A -- useful comment","calc.editors.ra.toolbar.multi-line-comment":"여러 줄 주석","calc.editors.ra.toolbar.multi-line-comment-content":"/* this is a very,
        very long comment */

        π a, b A","calc.editors.ra.toolbar.inline-relation":"인라인-릴레이션","calc.editors.ra.toolbar.inline-relation-content":"σ a = \'test\' ({
        a:string, b:number, X.c:date
        a, 1, 1970-01-01
        }
        )","calc.editors.ra.toolbar.inline-relation-editor":"인라인-릴레이션 (에디터)","calc.editors.ra.toolbar.inline-relation-editor-content":"create a new inline-relation using a built in editor","calc.editors.ra.toolbar.insert-date":"날짜 삽입","calc.editors.ra.toolbar.insert-date-content":"σ a < date(\'1970-01-01\') ( A )","calc.editors.ra.toolbar.autoreplace-operators.title":"operator replacement","calc.editors.ra.toolbar.autoreplace-operators.header":"automatically replace operators","calc.editors.ra.toolbar.autoreplace-operators.none":"no replacement","calc.editors.ra.toolbar.autoreplace-operators.plain2math":"pi => π","calc.editors.ra.toolbar.autoreplace-operators.math2plain":"π => pi","calc.editors.sql.tab-name":"SQL","calc.editors.sql.tab-name-short":"SQL","calc.editors.sql.button-execute-query":"쿼리 실행","calc.editors.sql.button-execute-selection":"셀렉션 실행","calc.editors.sql.button-download":"다운로드","calc.editors.sql.toolbar.select":"select 문","calc.editors.sql.toolbar.select-content":"

        SELECT * FROM A

        SELECT a, A.b, A.c FROM A
        ","calc.editors.sql.toolbar.from":"from 문","calc.editors.sql.toolbar.from-content":"
        SELECT *
        FROM A, B as b
        INNER JOIN C NATURAL
        ","calc.editors.sql.toolbar.where":"where 문","calc.editors.sql.toolbar.where-content":"SELECT * FROM A, B
        where A.a = B.a or false","calc.editors.sql.toolbar.group-by":"group by 문","calc.editors.sql.toolbar.group-by-content":"SELECT a, COUNT(b) as num
        FROM A
        GROUP BY a","calc.editors.sql.toolbar.having":"having 문","calc.editors.sql.toolbar.having-content":"SELECT a, SUM(b) as sum
        FROM A
        GROUP BY a
        having sum > 10","calc.editors.sql.toolbar.order-by":"order by 문","calc.editors.sql.toolbar.order-by-content":"

        SELECT * FROM A ORDER BY a asc, b desc

        SELECT * FROM A ORDER BY 1, 2, 3
        ","calc.editors.sql.toolbar.limit":"limit 문","calc.editors.sql.toolbar.limit-content":"SELECT * FROM A
        LIMIT 10 OFFSET 0","calc.editors.sql.toolbar.insert-date":"insert date","calc.editors.sql.toolbar.insert-date-content":"select * from A\\nwhere a < date(\\"1970-01-01\\")","calc.result.modal.title":"Result","calc.result.modal.close":"Close","calc.editors.ra.inline-editor.title":"Relation Editor","calc.editors.ra.inline-editor.button-download-csv":"Download CSV","calc.editors.ra.inline-editor.button-upload-csv":"upload CSV","calc.editors.ra.inline-editor.button-cancel":"Cancel","calc.editors.ra.inline-editor.button-ok":"Ok","calc.editors.ra.inline-editor.row-name":"Name","calc.editors.ra.inline-editor.row-type":"Type","calc.editors.ra.inline-editor.input-relation-name":"Relation Name","calc.navigation.imprint":"Imprint"}')},"./src/locales/pt.json":function(e){e.exports=JSON.parse('{"db.messages.parser.error-duplicate-variable":"nome de variável duplicado: {{name}}","db.messages.parser.error-invalid-date-format":"\\"{{str}}\\" não é uma data válida; formato esperado: YYYY-MM-DD","db.messages.parser.error-group-duplicate-header":"cabeçalho duplicado {{name}}","db.messages.parser.error-group-unknown-header":"cabeçalho desconhecido {{name}}","db.messages.parser.error-group-header-name-missing":"o nome do grupo está faltando (group: ....)","db.messages.parser.error-group-header-name-empty":"o nome do grupo não pode ser vazio","db.messages.parser.error-group-non-unique-attribute":"atributo não único {{name}} na coluna {{index}}","db.messages.parser.error-group-non-unique-group-name":"nome de grupo duplicado: {{name}}","db.messages.parser.error-sql-string-use-single-quotes":"use aspas simples para strings (caracteres/texto)","db.messages.parser.error-sql-invalid-relation-name":"\\"{{str}}\\" não pode ser usado como nome de relação","db.messages.parser.error-sql-invalid-column-name":"\\"{{str}}\\" não pode ser usado como nome de coluna","db.messages.parser.error-sql-group-by-missing":"group by está faltando","db.messages.parser.error-sql-having-without-group-by":"“having” encontrado, mas sem \\"group by\\" ou agregação","db.messages.parser.error-sql-negative-limit":"o limite dado precisa ser >= 0","db.messages.parser.error-sqldump-invalid-column-number":"número inválido de colunas na linha {{line}}","db.messages.parser.error-sqldump-invalid-type":"tipo inválido na linha {{line}}","db.messages.parser.error-sqldump-insert-wrong-number-columns":"número de valores != número de colunas","db.messages.parser.error-valueexpr-like-operand-no-string":"operando direito de LIKE deve ser uma string literal","db.messages.exec.error-column-not-unique":"não foi possível adicionar a coluna \\"{{column}}\\" devido a ambiguidade","db.messages.exec.error-column-not-found-name":"não foi possível encontrar a coluna \\"{{column}}\\" no esquema {{schema}}","db.messages.exec.error-column-not-found-index":"índice da coluna \\"{{column}}\\" está fora do intervalo no esquema {{schema}}; índice começa em 1","db.messages.exec.error-column-ambiguous":"coluna\\"{{column}}\\" é ambígua em {{schema}}","db.messages.exec.error-column-index-out-of-range":"índice da coluna \\"{{column}}\\" está fora do intervalo no esquema {{schema}}; índice começa em 1","db.messages.exec.error-could-not-change-rel-alias-ambiguity":"não foi possível definir o ”alias” da relação “{{alias}}” por causa da ambiguidade","db.messages.exec.error-could-not-rename-ambiguity":"não foi possível definir o novo nome \\"{{newName}}\\" para \\"{{oldName}}\\" devido a ambiguidade em {{schema}}","db.messages.exec.error-schema-a-not-part-of-schema-b":"esquema {{schemaA}} não é parte de {{schemaB}}","db.messages.exec.error-schemas-not-unifiable":"os esquemas não são unificáveis: os tipos ou o tamanho diferem: {{schemaA}} e {{schemaB}}","db.messages.exec.error-column-not-in-both-schemas":"coluna \\"{{column}}\\" não pode ser encontrada em ambos os esquemas de junção","db.messages.exec.error-condition-must-be-boolean":"condição deve ser uma expressão booleana","db.messages.exec.error-func-not-defined-for-column-type":"{{func}} não definida para o tipo {{colType}}","db.messages.exec.error-join-would-produce-non-unique-columns":"a junção resultaria em nomes de coluna não únicos","db.messages.exec.error-no-columns-match-alias-star":"nenhuma coluna corresponde a \\"{{alias}}.*\\"","db.messages.exec.error-datatype-not-specified-for-col":"tipo de dados para a coluna {{index}} (\\"{{column}}\\") não foi especificado","db.messages.exec.error-invalid-projection-error":"projeção inválida \\"{{argument}}\\": {{erro}}","db.messages.exec.error-function-expects-type":"a função \\"{{func}}\\" espera argumentos do tipo \\"{{expected}}\\" mas \\"{{given}}\\" foi dado","db.messages.exec.error-could-not-compare-different-types":"não foi possível comparar o valor se os tipos forem diferentes: {{typeA}}! = {{typeB}}","db.messages.exec.error-function-expects-arguments-of-same-type":"{{func}} espera que todos os argumentos sejam do mesmo tipo","db.messages.exec.error-case-when-condition-must-be-boolean":"a condição de um CASE WHEN deve ser do tipo booleano","db.messages.exec.error-case-when-expects-results-of-same-type":" CASE WHEN condição THEN resultado END espera que todos os resultados sejam do mesmo tipo","db.messages.exec.error-invalid-date-format":"\\"{{str}}\\" não é uma data válida; formato esperado: YYYY-MM-DD","db.messages.translate.error-relation-not-found":"não foi possível encontrar relação \\"{{name}}\\"","db.messages.translate.warning-distinct-missing":"DISTINCT está faltando","db.messages.translate.warning-ignored-all-on-set-operators":"ignorou ALL na operação definida","db.messages.translate.error-variable-name-conflict":"conflito de nomes: o nome da relação \\"{{name}}\\" já existe","db.messages.translate.error-variable-cyclic-usage":"uso cíclico da variável \\"{{name}}\\" detectado","editor.codemirror-placeholder":"Digite sua consulta aqui\\n\\nAtalhos do teclado:\\n\\texecutar declaraçãot: [CTRL]+[RETURN]\\n\\texecutar seleção: [CTRL]+[SHIFT]+[RETURN]\\n\\tautocompletar: [CTRL]+[SPACE]\\n","editor.alert-message-headers.success":"Sucesso","editor.alert-message-headers.info":"Info","editor.alert-message-headers.warning":"Perigo","editor.alert-message-headers.error":"Erro","editor.inline-relation-editor.button-ok":"Ok","editor.inline-relation-editor.button-cancel":"Cancelar","editor.inline-relation-editor.placeholder-column-name-and-types":"columnName:type","editor.inline-relation-editor.enter-your-data":"por favor, insira seus dados","editor.inline-relation-editor.error-column-name-missing":"nome da coluna ausente na coluna {{index}}","editor.inline-relation-editor.error-wrong-quoted-string":"string não deve conter aspas simples e duplas","editor.error-no-query-found":"nenhuma consulta encontrada","editor.pegjs-error.or":"ou","editor.pegjs-error.no-input-found":"nenhuma entrada encontrada","editor.pegjs-error.end-of-input":"fim da entrada","editor.pegjs-error.expected-found":"esperado {{expected}}, mas {{found}} encontrado.","editor.error-at-line-x":"na linha {{line}}","calc.messages.error-query-missing":"nenhuma consulta encontrada","calc.messages.error-query-missing-assignments-found":"apenas atribuições encontradas; falta a consulta Ajuda - Tarefas ","calc.messages.gist-load-success":"gist carregado com sucesso","calc.menu.headline":"Carregue um Dataset","calc.menu.datasets":"Datasets","calc.menu.load-gist-headline":"Carregar Dataset armazenado em um gist","calc.menu.load-gist-button":"Carregar","calc.menu.load-gist-insert-placeholder":"gist ID","calc.menu.create-own-dataset-headline":"Crie seu próprio Dataset","calc.menu.create-own-dataset-text":"Você pode criar seu próprio conjunto de dados e compartilhá-lo com outras pessoas. Saiba mais sobre isso no ","calc.menu.create-own-dataset-text-link":"Tutorial de manutenção","calc.menu.create-own-dataset-button-new":"Criar novo Dataset","calc.menu.create-own-dataset-button-modify":"Modificar Dataset","calc.navigation.take-a-tour":"Faça um Tour","calc.navigation.feedback":"Feedback","calc.navigation.help":"Ajuda","calc.navigation.calc":"Calcular","calc.navigation.language":"Linguagem","calc.maintainer-groups.misc":"Diversos","calc.maintainer-groups.temp":"Temporário","calc.maintainer-groups.uibk":"University of Innsbruck","calc.maintainer-groups.saarland":"University of Saarland","calc.editors.button-history":"Histórico","calc.editors.insert-relation-title":"Inserir","calc.editors.insert-relation-tooltip":"Inserir relação ou nomes de coluna","calc.editors.group.tab-name":"Editor de Grupo","calc.editors.group.tab-name-short":"EG","calc.editors.group.toolbar.import-sql":"Importar SQL-dump","calc.editors.group.toolbar.import-sql-content":"Importar SQL-dump","calc.editors.group.toolbar.add-new-relation":"+ nova relação","calc.editors.group.toolbar.add-new-relation-content":"Abrir editor de relações","calc.editors.group.button-download":"Download","calc.editors.group.button-exec":"Visualizar","calc.editors.group.button-use":"Use Grupo no Editor","calc.editors.group.button-use_plural":"Use o primeiro Grupo no Editor","calc.editors.group.sql-import-group-name-placeholder":"Nome do grupo (importado de SQL)","calc.editors.group.new-group-example-group":"– este é um exemplo\\n\\ngroup: nomeDoNovoGrupo \\n\\n\\nA = {\\n\\ta:string, b:number\\n\\texemplo, 42\\n}","calc.editors.group.modal-sqldump.modal-title":"Importar SQL-dump","calc.editors.group.modal-sqldump.button-close":"Fechar","calc.editors.group.modal-sqldump.button-cancel":"Cancelar","calc.editors.group.modal-sqldump.button-import-sql":"Importar SQL","calc.editors.group.modal-sqldump.description":"Coloque seu SQL-Dump aqui para criar um grupo.","calc.editors.ra.tab-name":"Álgebra Relacional","calc.editors.ra.tab-name-short":"AlgRel","calc.editors.ra.button-execute-query":"Executar consulta","calc.editors.ra.button-execute-selection":"Executar seleção","calc.editors.ra.button-download":"Download","calc.editors.ra.toolbar.projection":"Projeção","calc.editors.ra.toolbar.projection-content":"π a, b ( A )\\n
        pi a, b A","calc.editors.ra.toolbar.selection":"Seleção","calc.editors.ra.toolbar.selection-content":"σ a < b ∧ b c ( A )\\n
        sigma a < b and b != c A","calc.editors.ra.toolbar.rename":"renomear relação / renomear colunas","calc.editors.ra.toolbar.rename-content":"
        σ x.a > 1 ( ρ x ( A ) )
        \\n
        σ A.y > 2 ( rho ya ( A ) )
        ","calc.editors.ra.toolbar.rename-columns-operator":"operador renomear colunas","calc.editors.ra.toolbar.rename-columns-operator-content":"
        σ A.y > 2 ( ρ ya ( A ) )
        ","calc.editors.ra.toolbar.orderBy":"ordenar (order by)","calc.editors.ra.toolbar.orderBy-content":"
        τ a asc, [2] desc ( A )
        tau a asc, [2] desc ( A )
        ","calc.editors.ra.toolbar.groupBy":"agrupar (group by)","calc.editors.ra.toolbar.groupBy-content":"
        γ a, b; count(c)→c ( A )
        \\n
        gamma count(a)->x, sum(b)->y ( A )
        ","calc.editors.ra.toolbar.and":"e","calc.editors.ra.toolbar.and-content":"
        σ a < b b c ( A )
        ","calc.editors.ra.toolbar.xor":"ou exclusivo (xor)","calc.editors.ra.toolbar.xor-content":"
        σ a < b b c ( A )
        ","calc.editors.ra.toolbar.or":"ou","calc.editors.ra.toolbar.or-content":"
        σ a < b b c ( A )
        ","calc.editors.ra.toolbar.not":"não","calc.editors.ra.toolbar.not-content":"
        &sigma","calc.editors.ra.toolbar.equals":"igual","calc.editors.ra.toolbar.equals-content":"
        &sigma","calc.editors.ra.toolbar.not-equals":"não igual","calc.editors.ra.toolbar.not-equals-content":"
        &sigma","calc.editors.ra.toolbar.greater-or-equals":"maior ou igual","calc.editors.ra.toolbar.greater-or-equals-content":"
        &sigma","calc.editors.ra.toolbar.lesser-or-equals":"menor ou igual","calc.editors.ra.toolbar.lesser-or-equals-content":"
        &sigma","calc.editors.ra.toolbar.intersect":"intersecção","calc.editors.ra.toolbar.intersect-content":"
        ( A ) ( B )
        ","calc.editors.ra.toolbar.union":"união","calc.editors.ra.toolbar.union-content":"
        ( A ) ( B )
        ","calc.editors.ra.toolbar.division":"divisão","calc.editors.ra.toolbar.division-content":"
        ( A ) ÷ ( B )
        ","calc.editors.ra.toolbar.subtraction":"subtração","calc.editors.ra.toolbar.subtraction-content":"
        ( A ) - ( B )
        \\n
        ( A ) \\n ( B )
        ","calc.editors.ra.toolbar.cross-join":"junção cruzada (cross join)","calc.editors.ra.toolbar.cross-join-content":"
        ( A ) ( B )
        ","calc.editors.ra.toolbar.natural-join":"natural join / θ-join","calc.editors.ra.toolbar.natural-join-content":"
        ( A ) ( B )
        \\n
        ( A ) ⋈ A.a ≥ B.a ( B )
        ","calc.editors.ra.toolbar.left-outer-join":"left outer join","calc.editors.ra.toolbar.left-outer-join-content":"
        ( A ) ⟕ ( B )
        \\n
        ( A ) ⟕ A.a < B.a ( B )
        \\n","calc.editors.ra.toolbar.right-outer-join":"right outer join","calc.editors.ra.toolbar.right-outer-join-content":"
        ( A ) ⟖ ( B )
        \\n
        ( A ) ⟖ A.a < B.a ( B )
        \\n","calc.editors.ra.toolbar.full-outer-join":"full outer join","calc.editors.ra.toolbar.full-outer-join-content":"
        ( A ) ⟗ ( B )
        \\n
        ( A ) ⟗ A.a != B.a ( B )
        ","calc.editors.ra.toolbar.left-semi-join":"left semi join","calc.editors.ra.toolbar.left-semi-join-content":"
        ( A ) ⋉ ( B )
        ","calc.editors.ra.toolbar.right-semi-join":"right semi join","calc.editors.ra.toolbar.right-semi-join-content":"
        ( A ) ⋊ ( B )
        ","calc.editors.ra.toolbar.anti-join":"anti join","calc.editors.ra.toolbar.anti-join-content":"
        ( A ) ▷ ( B )
        ","calc.editors.ra.toolbar.assignment":"atribuição","calc.editors.ra.toolbar.assignment-content":"
        X = pi a ( A )\\n
        Y = pi b ( b )\\n
        ( X ) ( Y )
        ","calc.editors.ra.toolbar.single-line-comment":"comentário em linha","calc.editors.ra.toolbar.single-line-comment-content":"π a, b A -- comentário útil","calc.editors.ra.toolbar.multi-line-comment":"comentário multilinha","calc.editors.ra.toolbar.multi-line-comment-content":"/* este é um comentário longo,
        muito longo*/

        π a, b A","calc.editors.ra.toolbar.inline-relation":"relação aninhada","calc.editors.ra.toolbar.inline-relation-content":"σ a = \'test\' ({
        a:string, b:number, X.c:date
        a, 1, 1970-01-01
        }
        )","calc.editors.ra.toolbar.inline-relation-editor":"relação aninhada (editor)","calc.editors.ra.toolbar.inline-relation-editor-content":"criar uma nova relação aninhada usando o editor","calc.editors.ra.toolbar.insert-date":"inserir data","calc.editors.ra.toolbar.insert-date-content":"σ a < date(\'1970-01-01\') ( A )","calc.editors.ra.toolbar.autoreplace-operators.title":"substituição de operador","calc.editors.ra.toolbar.autoreplace-operators.header":"substituir operadores automaticamente","calc.editors.ra.toolbar.autoreplace-operators.none":"sem substituição","calc.editors.ra.toolbar.autoreplace-operators.plain2math":"pi => π","calc.editors.ra.toolbar.autoreplace-operators.math2plain":"π => pi","calc.editors.sql.tab-name":"SQL","calc.editors.sql.tab-name-short":"SQL","calc.editors.sql.button-execute-query":"Executar consulta","calc.editors.sql.button-execute-selection":"Executar seleção","calc.editors.sql.button-download":"Download","calc.editors.sql.toolbar.select":"cláusula select","calc.editors.sql.toolbar.select-content":"

        SELECT * FROM A

        SELECT a, A.b, A.c FROM A
        ","calc.editors.sql.toolbar.from":"cláusula from","calc.editors.sql.toolbar.from-content":"
        SELECT *
        FROM A, B as b
        INNER JOIN C NATURAL
        ","calc.editors.sql.toolbar.where":"cláusula where","calc.editors.sql.toolbar.where-content":"SELECT * FROM A, B
        where A.a = B.a or false","calc.editors.sql.toolbar.group-by":"cláusula group by","calc.editors.sql.toolbar.group-by-content":"SELECT a, COUNT(b) as num
        FROM A
        GROUP BY a","calc.editors.sql.toolbar.having":"cáusula having clause","calc.editors.sql.toolbar.having-content":"SELECT a, SUM(b) as sum
        FROM A
        GROUP BY a
        having sum > 10","calc.editors.sql.toolbar.order-by":"cláusula order by","calc.editors.sql.toolbar.order-by-content":"

        SELECT * FROM A ORDER BY a asc, b desc

        SELECT * FROM A ORDER BY 1, 2, 3
        ","calc.editors.sql.toolbar.limit":"cláusula limit","calc.editors.sql.toolbar.limit-content":"SELECT * FROM A
        LIMIT 10 OFFSET 0","calc.editors.sql.toolbar.insert-date":"inserir data","calc.editors.sql.toolbar.insert-date-content":"select * from A\\nwhere a < date(\\"1970-01-01\\")","calc.result.modal.title":"Resultado","calc.result.modal.close":"Fechar","calc.editors.ra.inline-editor.title":"Editor de Relação","calc.editors.ra.inline-editor.button-download-csv":"Download CSV","calc.editors.ra.inline-editor.button-upload-csv":"Upload CSV","calc.editors.ra.inline-editor.button-cancel":"Cancelar","calc.editors.ra.inline-editor.button-ok":"Ok","calc.editors.ra.inline-editor.row-name":"Nome","calc.editors.ra.inline-editor.row-type":"Tipo","calc.editors.ra.inline-editor.input-relation-name":"Nome da Relação","calc.navigation.imprint":"Impressão"}')},0:function(e,t,n){e.exports=n("./src/calc2/calculator.entry.tsx")}}); \ No newline at end of file + */var r,o,i,a,s;if("undefined"==typeof window||"function"!=typeof MessageChannel){var l=null,u=null,c=function(){if(null!==l)try{var e=t.unstable_now();l(!0,e),l=null}catch(e){throw setTimeout(c,0),e}},d=Date.now();t.unstable_now=function(){return Date.now()-d},r=function(e){null!==l?setTimeout(r,0,e):(l=e,setTimeout(c,0))},o=function(e,t){u=setTimeout(e,t)},i=function(){clearTimeout(u)},a=function(){return!1},s=t.unstable_forceFrameRate=function(){}}else{var h=window.performance,f=window.Date,m=window.setTimeout,p=window.clearTimeout;if("undefined"!=typeof console){var g=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),"function"!=typeof g&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")}if("object"==typeof h&&"function"==typeof h.now)t.unstable_now=function(){return h.now()};else{var y=f.now();t.unstable_now=function(){return f.now()-y}}var b=!1,v=null,_=-1,w=5,E=0;a=function(){return t.unstable_now()>=E},s=function(){},t.unstable_forceFrameRate=function(e){0>e||125>>1,o=e[r];if(!(void 0!==o&&0T(a,n))void 0!==l&&0>T(l,a)?(e[r]=l,e[s]=n,r=s):(e[r]=a,e[i]=n,r=i);else{if(!(void 0!==l&&0>T(l,n)))break e;e[r]=l,e[s]=n,r=s}}}return t}return null}function T(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var M=[],x=[],L=1,R=null,A=3,D=!1,N=!1,P=!1;function I(e){for(var t=O(x);null!==t;){if(null===t.callback)k(x);else{if(!(t.startTime<=e))break;k(x),t.sortIndex=t.expirationTime,S(M,t)}t=O(x)}}function H(e){if(P=!1,I(e),!N)if(null!==O(M))N=!0,r(Y);else{var t=O(x);null!==t&&o(H,t.startTime-e)}}function Y(e,n){N=!1,P&&(P=!1,i()),D=!0;var r=A;try{for(I(n),R=O(M);null!==R&&(!(R.expirationTime>n)||e&&!a());){var s=R.callback;if(null!==s){R.callback=null,A=R.priorityLevel;var l=s(R.expirationTime<=n);n=t.unstable_now(),"function"==typeof l?R.callback=l:R===O(M)&&k(M),I(n)}else k(M);R=O(M)}if(null!==R)var u=!0;else{var c=O(x);null!==c&&o(H,c.startTime-n),u=!1}return u}finally{R=null,A=r,D=!1}}function F(e){switch(e){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var W=s;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){N||D||(N=!0,r(Y))},t.unstable_getCurrentPriorityLevel=function(){return A},t.unstable_getFirstCallbackNode=function(){return O(M)},t.unstable_next=function(e){switch(A){case 1:case 2:case 3:var t=3;break;default:t=A}var n=A;A=t;try{return e()}finally{A=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=W,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=A;A=e;try{return t()}finally{A=n}},t.unstable_scheduleCallback=function(e,n,a){var s=t.unstable_now();if("object"==typeof a&&null!==a){var l=a.delay;l="number"==typeof l&&0s?(e.sortIndex=l,S(x,e),null===O(M)&&e===O(x)&&(P?i():P=!0,o(H,l-s))):(e.sortIndex=a,S(M,e),N||D||(N=!0,r(Y))),e},t.unstable_shouldYield=function(){var e=t.unstable_now();I(e);var n=O(M);return n!==R&&null!==R&&null!==n&&null!==n.callback&&n.startTime<=e&&n.expirationTime=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n("./node_modules/setimmediate/setImmediate.js"),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n("./node_modules/webpack/buildin/global.js"))},"./node_modules/warning/warning.js":function(e,t,n){"use strict";var r=function(){};e.exports=r},"./node_modules/webpack/buildin/global.js":function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},"./node_modules/webpack/buildin/harmony-module.js":function(e,t){e.exports=function(e){if(!e.webpackPolyfill){var t=Object.create(e);t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),Object.defineProperty(t,"exports",{enumerable:!0}),t.webpackPolyfill=1}return t}},"./node_modules/webpack/buildin/module.js":function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},"./src/calc2/calculator.entry.tsx":function(e,t,n){"use strict";n.r(t);var r=n("./src/calc2/i18n.tsx"),o=n("./src/calc2/utils/groupUtils.ts"),i=n("./node_modules/immutable/dist/immutable.es.js"),a=function(e){return"@@redux-saga/"+e},s=a("CANCEL_PROMISE"),l=a("CHANNEL_END"),u=a("IO"),c=a("MATCH"),d=a("MULTICAST"),h=a("SAGA_ACTION"),f=a("SELF_CANCELLATION"),m=a("TASK"),p=a("TASK_CANCEL"),g=a("TERMINATE"),y=a("LOCATION"),b=n("./node_modules/@babel/runtime/helpers/esm/extends.js"),v=function(e){return null==e},_=function(e){return null!=e},w=function(e){return"function"==typeof e},E=function(e){return"string"==typeof e},j=Array.isArray,C=function(e){return e&&w(e.then)},S=function(e){return e&&w(e.next)&&w(e.throw)},O=function e(t){return t&&(E(t)||M(t)||w(t)||j(t)&&t.every(e))},k=function(e){return e&&w(e.take)&&w(e.close)},T=function(e){return w(e)&&e.hasOwnProperty("toString")},M=function(e){return Boolean(e)&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype};var x=function(e){return function(){return e}}(!0),L=function(){};var R=function(e){return e};"function"==typeof Symbol&&Symbol.asyncIterator&&Symbol.asyncIterator;var A=function(e,t){Object(b.a)(e,t),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(t).forEach((function(n){e[n]=t[n]}))};function D(e,t){var n=e.indexOf(t);n>=0&&e.splice(n,1)}function N(e){var t=!1;return function(){t||(t=!0,e())}}var P=function(e){throw e},I=function(e){return{value:e,done:!0}};function H(e,t,n){void 0===t&&(t=P),void 0===n&&(n="iterator");var r={meta:{name:n},next:e,throw:t,return:I,isSagaIterator:!0};return"undefined"!=typeof Symbol&&(r[Symbol.iterator]=function(){return r}),r}function Y(e,t){var n=t.sagaStack;console.error(e),console.error(n)}var F=function(e){return Array.apply(null,new Array(e))},W=function(e){return function(t){return e(Object.defineProperty(t,h,{value:!0}))}},B=function(e){return e===g},U=function(e){return e===p},z=function(e){return B(e)||U(e)};function V(e,t){var n=Object.keys(e),r=n.length;var o,i=0,a=j(e)?F(r):{},s={};return n.forEach((function(e){var n=function(n,s){o||(s||z(n)?(t.cancel(),t(n,s)):(a[e]=n,++i===r&&(o=!0,t(a))))};n.cancel=L,s[e]=n})),t.cancel=function(){o||(o=!0,n.forEach((function(e){return s[e].cancel()})))},s}function q(e){return{name:e.name||"anonymous",location:G(e)}}function G(e){return e[y]}function K(e,t){void 0===e&&(e=10);var n=new Array(e),r=0,o=0,i=0,a=function(t){n[o]=t,o=(o+1)%e,r++},s=function(){if(0!=r){var t=n[i];return n[i]=null,r--,i=(i+1)%e,t}},l=function(){for(var e=[];r;)e.push(s());return e};return{isEmpty:function(){return 0==r},put:function(s){var u;if(r1?t-1:0),r=1;r1?t-1:0),r=1;r2?n-2:0),o=2;oe.groupInfo.source===n&&e.groupInfo.id===r&&e.groupInfo.filename===o&&e.groupInfo.index===i);return a?Object.assign(Object.assign({},e),{current:Object.assign(Object.assign({},e.current),{group:a})}):(console.error("could not find group ",a),e)}case"GROUPS_LOAD_SUCCESS":{const{loadedGroups:n}=t;let r=e;for(const e of n)r=Object.assign(Object.assign({},r),{groups:r.groups.set(le(e),e)});return r}case"GROUP_SET_DRAFT":{let{draft:n}=t;n=Object.assign(Object.assign({},n),{isDraft:!0}),e=Object.assign(Object.assign({},e),{groups:e.groups.set(le(n),n),current:Object.assign(Object.assign({},e.current),{group:n})})}default:return e}}function le(e){const{source:t,id:n,filename:r,index:o}=e.groupInfo;return`${t}/${n}/${r}/${o}`}n("./node_modules/custom-event-polyfill/polyfill.js");var ue=n("./node_modules/react/index.js"),ce=n("./node_modules/react-dom/index.js"),de=n("./node_modules/react-hot-loader/index.js"),he=(n.p,n("./src/calc2/main.hot.tsx")),fe=n("./node_modules/redux/es/redux.js"),me=n("./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js");function pe(){var e={};return e.promise=new Promise((function(t,n){e.resolve=t,e.reject=n})),e}var ge=pe,ye=[],be=0;function ve(e){try{Ee(),e()}finally{je()}}function _e(e){ye.push(e),be||(Ee(),Ce())}function we(e){try{return Ee(),e()}finally{Ce()}}function Ee(){be++}function je(){be--}function Ce(){var e;for(je();!be&&void 0!==(e=ye.shift());)ve(e)}var Se=function(e){return function(t){return e.some((function(e){return xe(e)(t)}))}},Oe=function(e){return function(t){return e(t)}},ke=function(e){return function(t){return t.type===String(e)}},Te=function(e){return function(t){return t.type===e}},Me=function(){return x};function xe(e){var t="*"===e?Me:E(e)?ke:j(e)?Se:T(e)?ke:w(e)?Oe:M(e)?Te:null;if(null===t)throw new Error("invalid pattern: "+e);return t(e)}var Le={type:l},Re=function(e){return e&&e.type===l};function Ae(e){void 0===e&&(e=X());var t=!1,n=[];return{take:function(r){t&&e.isEmpty()?r(Le):e.isEmpty()?(n.push(r),r.cancel=function(){D(n,r)}):r(e.take())},put:function(r){if(!t){if(0===n.length)return e.put(r);n.shift()(r)}},flush:function(n){t&&e.isEmpty()?n(Le):n(e.flush())},close:function(){if(!t){t=!0;var e=n;n=[];for(var r=0,o=e.length;r2?h-2:0),m=2;m2?n-2:0),o=2;o1?t-1:0),r=1;r!(e.groupInfo.source!==t||e.groupInfo.id!==n||!r||"first"!==r&&r.filename!==e.groupInfo.filename||!r||"first"!==r&&r.index!==e.groupInfo.index));if(s){const{source:e,id:t,filename:n,index:r}=s.groupInfo,o={type:"GROUP_SET_CURRENT",source:e,id:t,filename:n,index:r};yield Q(o)}else try{if("local"!==t&&"gist"!==t)throw new Error(`unsupported source-type ${t}`);const e=yield ee(o.b,t,n,i,a),s={type:"GROUPS_LOAD_SUCCESS",loadedGroups:e};if(yield Q(s),void 0!==r&&e.length>0){const{source:t,id:n,filename:r}=e[0].groupInfo,o={type:"GROUP_SET_CURRENT",source:t,id:n,filename:r,index:0};yield Q(o)}}catch(e){console.error("could not fetch group",e),window.alert("Could not fetch group!\nDefault group loaded.\n"+e)}}))})),ce.render(ue.createElement(de.AppContainer,null,ue.createElement(he.a,{store:et})),document.getElementById("root"));{const e={type:"SET_LOCALE",locale:r.c.language};et.dispatch(e)}for(const e of function(){const e=[{maintainerGroup:Object(r.d)("calc.maintainer-groups.misc"),maintainer:"",source:"local",id:"uibk"},{maintainerGroup:Object(r.d)("calc.maintainer-groups.uibk"),maintainer:'mtschu',source:"gist",id:"2923a30a474fdcb46bee"},{maintainerGroup:Object(r.d)("calc.maintainer-groups.uibk"),maintainer:'Wolfgang Gassler',source:"gist",id:"7d1871f79a8bcb4788de"},{maintainerGroup:Object(r.d)("calc.maintainer-groups.uibk"),maintainer:'Michael Rampl',source:"gist",id:"b58108eacc9c5916726b2327789204ab"},{maintainerGroup:Object(r.d)("calc.maintainer-groups.uibk"),maintainer:'Michael Rampl',source:"gist",id:"963d8b886fb468d742c71d34ba0dbbed"},{maintainerGroup:Object(r.d)("calc.maintainer-groups.saarland"),maintainer:'Jens Dittrich',source:"gist",id:"41cf5ce652756d9331eec7562644e074"},{maintainerGroup:Object(r.d)("calc.maintainer-groups.saarland"),maintainer:'Jens Dittrich',source:"gist",id:"c306ecf21c6e6d175508d3ac6b4355e7"}];let t=!0;return e.map(({source:e,id:n,maintainer:r,maintainerGroup:o})=>{const i={type:"GROUPS_LOAD_REQUEST",source:e,id:n,setCurrent:t?"first":void 0,maintainer:r,maintainerGroup:o};return t=!1,i})}())et.dispatch(e)},"./src/calc2/components/calculator.scss":function(e,t,n){},"./src/calc2/components/dropdownList.tsx":function(e,t,n){"use strict";n.d(t,"a",(function(){return h}));var r=n("./node_modules/react/index.js"),o=n("./node_modules/reactstrap/lib/Dropdown.js"),i=n.n(o),a=n("./node_modules/reactstrap/lib/DropdownItem.js"),s=n.n(a),l=n("./node_modules/reactstrap/lib/DropdownMenu.js"),u=n.n(l),c=n("./node_modules/reactstrap/lib/DropdownToggle.js"),d=n.n(c);class h extends r.Component{constructor(e){super(e),this.id=`dropdown-${Math.random().toString(36).substr(2,10)}`,this.state={isOpen:!1},this.toggle=this.toggle.bind(this)}toggle(){this.setState({isOpen:!this.state.isOpen})}render(){const{label:e,elements:t,value:n,onChange:o,disabled:a=!1}=this.props,{isOpen:l}=this.state;return r.createElement(i.a,{isOpen:l,toggle:this.toggle},r.createElement(d.a,{color:"",disabled:a||0===t.length},e),r.createElement(u.a,null,t.map((e,t)=>"separator"===e.type?r.createElement(s.a,{key:t,divider:!0}):"header"===e.type?r.createElement(s.a,{key:t,header:!0},e.label):r.createElement(s.a,{key:t,onClick:t=>{t.preventDefault(),o&&o(e.value)},active:e.active||e.value===n},e.label))))}}},"./src/calc2/components/editorBase.tsx":function(e,t,n){"use strict";(function(e){n.d(t,"a",(function(){return O})),n.d(t,"b",(function(){return k})),n.d(t,"c",(function(){return T}));var r=n("./node_modules/@fortawesome/free-solid-svg-icons/index.es.js"),o=n("./node_modules/@fortawesome/react-fontawesome/index.es.js"),i=n("./src/calc2/components/dropdownList.tsx"),a=n("./src/calc2/components/toolbar.tsx"),s=n("./src/calc2/i18n.tsx"),l=n("./node_modules/classnames/index.js"),u=n("./node_modules/codemirror/lib/codemirror.js"),c=(n("./node_modules/codemirror/addon/hint/show-hint.js"),n("./src/db/exec/RANode.ts")),d=n("./src/db/translate/utils.ts"),h=n("./node_modules/react/index.js"),f=n("./node_modules/react-dom/index.js"),m=n("./node_modules/react-toastify/esm/react-toastify.js"),p=n("./node_modules/reactstrap/es/Button.js"),g=n("./node_modules/reactstrap/es/Modal.js"),y=n("./node_modules/reactstrap/es/ModalHeader.js"),b=n("./node_modules/reactstrap/es/ModalBody.js"),v=n("./node_modules/reactstrap/es/ModalFooter.js"),_=n("./node_modules/reactstrap/es/Input.js"),w=n("./node_modules/@handsontable/react/es/react-handsontable.js");n("./node_modules/codemirror/lib/codemirror.css"),n("./node_modules/codemirror/theme/eclipse.css"),n("./node_modules/codemirror/addon/hint/show-hint.css"),n("./node_modules/codemirror/addon/lint/lint.js"),n("./node_modules/codemirror/addon/lint/lint.css"),n("./node_modules/codemirror/addon/display/placeholder.js"),n("./node_modules/codemirror/addon/display/autorefresh.js"),n("./node_modules/codemirror/mode/sql/sql.js"),n("./node_modules/handsontable/dist/handsontable.full.css"),u.defineMode("relalg",(function(){const e=["pi","sigma","rho","tau","<-","->","intersect","union","except","/","-","\\\\","x","cross join","join","inner join","natural join","left join","right join","left outer join","right outer join","left semi join","right semi join","anti join","anti semi join","and","or","xor"],t=["π","σ","ρ","τ","←","→","∩","∪","÷","-","⨯","⨝","⟕","⟖","⟗","⋉","⋊","▷"],n=["<-","->",">=","<=","=","∧","∨","⊻","⊕","≠","=","¬",">","<","≥","≤"],r=(e,t,n,r="")=>{for(let o=0;o({inBlockComment:!1}),token:(o,i)=>i.inBlockComment?(o.match(/.*?\*\//,!0)?i.inBlockComment=!1:o.match(/.*/,!0),"comment"):o.match(/\/\*.*?\*\//,!0)?"comment":!i.inBlockComment&&o.match(/^\/\*.*/,!0)?(i.inBlockComment=!0,"comment"):i.inInlineRelation?(o.match(/.*?}/,!0)?i.inInlineRelation=!1:o.match(/.*/,!0),"inlineRelation"):o.match(/^{/,!0)?(i.inInlineRelation=!0,"inlineRelation"):o.match(/^--[\t ]/,!0)?(o.skipToEnd(),"comment"):o.match(/^\/\*.*?$/,!0)?"comment":r(o,t,!0)?"keyword math":r(o,e,!0,"([\\(\\)[\\]{\\}, \\.\\t]|$)")?"keyword":r(o,n,!0)?"operator math":o.match(/^\[[0-9]+]/,!0)?"attribute":o.match(/^[0-9]+(\.[0-9]+)?/,!0)?"number":o.match(/\^'[^']*'/i,!0)?"string":o.match(/\^[a-z]+\.[a-z]*/i,!0)?"qualified-column":o.match(/^[\(\)\[]\{},]/i,!0)?"bracket":o.match(/^[a-z][a-z0-9\.]*/i,!0)?"word":(o.next(),"else")}}));const E=e=>{const{editor:t}=e,{type:n,message:r,position:o}=e.alert,i={error:Object(s.d)("editor.alert-message-headers.error"),warning:Object(s.d)("editor.alert-message-headers.warning")}[n];return h.createElement("div",{className:l("alert ",{"alert-danger":"error"===n,"alert-warning":"warning"===n})},o?h.createElement("strong",null,i,": ",h.createElement("a",{onClick:e=>{if(t)return t.focus(),t.getDoc().setCursor(o),t.scrollIntoView(null,42),e.preventDefault(),!1;console.warn("editor not initialized yet")},href:"#"},Object(s.d)("editor.error-at-line-x",{line:o.line+1})),": ",r):h.createElement("strong",null,i,": ",r))};class j{constructor(){this.name="",this.type="",this.data=[]}}class C{constructor(){this.name="",this.attributes=[]}toString(e){let t="";t=!1===e?this.name+" = {\n":"{ ";const n=new Array;for(let e=0;e<1+this.attributes[0].data.length;e++)n.push("");return this.attributes.forEach((e,t)=>{t>0&&(n[0]+=", "),n[0]+=e.name,e.data.forEach((r,o)=>{t>0&&(n[o+1]+=", "),"number"===e.type?n[o+1]+=r:n[o+1]+="'"+r+"'"})}),t+=n.join("\n"),t+="\n}\n",t}fromTableData(e){if(null==e)return;const t=new Array;t.push([]),t.push([]),e.columns.forEach(e=>{t[0].push(e.name),t[1].push(e.type)}),e.rows.forEach(e=>{t.push(e)}),this.fromData(t)}toData(){const e=new Array;if(0===this.attributes.length)return[[]];for(let t=0;t<2+this.attributes[0].data.length;t++)e.push([]);return this.attributes.forEach(t=>{e[0].push(t.name),e[1].push(t.type),t.data.forEach((t,n)=>{e[n+2].push(t)})}),e}fromData(e){for(let t=0;t{const r=new Array,i=e.split(t);-1===o&&(o=i.length),i.length===o&&(i.forEach(e=>{r.push(e)}),n.push(r))}),this.fromData(n)}toCSV(e=";"){let t="";return this.toData().forEach(n=>{t+=n.join(e)+"\n"}),t}}const S="CodeMirror-table-edit-markers";class O extends h.Component{constructor(e){super(e);const t=Object.assign({theme:"eclipse",smartdent:!0,tabSize:2,indentWithTabs:!0,lineNumbers:!0,lineWrapping:!0,matchBrackets:!0,autoCloseBrackets:!0,smartIndent:!0,autofocus:!1,autoRefresh:!0,enableInlineRelationEditor:!0,gutters:["CodeMirror-lint-markers",S],mode:e.mode,viewportMargin:1/0,extraKeys:{"Shift-Tab":"indentLess","Ctrl-Enter":e=>{this.exec(!1)},"Shift-Ctrl-Enter":e=>{const{editor:t}=this.state;t&&t.getDoc().somethingSelected()&&this.exec(!0)},"Ctrl-S":e=>{this.downloadEditorText()},"Ctrl-Space":e=>{u.showHint(e,e=>this.genericHint(e),{closeOnUnfocus:!0})}},placeholder:Object(s.d)("editor.codemirror-placeholder"),textChange:null},e.codeMirrorOptions);this.hotTableSettings={colHeaders:!1,rowHeaders:function(e){return 0===e?Object(s.d)("calc.editors.ra.inline-editor.row-name"):1===e?Object(s.d)("calc.editors.ra.inline-editor.row-type"):e-1},height:function(){return.7*document.body.clientHeight},fixedRowsTop:2,minRows:2,minCols:1,minSpareRows:1,minSpareCols:1,colWidths:"100px",contextMenu:!0,cells:function(e,t){return 1===e?{type:"dropdown",source:["number","string","date"]}:{}}},this.state={editor:null,codeMirrorOptions:t,history:[],isSelectionSelected:!1,execSuccessful:!1,execErrors:[],isExecutionDisabled:!1,execResult:null,modal:!1,inlineRelationModal:!1,relationEditorName:"",replSelStart:null,replSelEnd:null},this.toggle=this.toggle.bind(this),this.inlineRelationEditorOk=this.inlineRelationEditorOk.bind(this),this.toggleInlineRelationEditor=this.toggleInlineRelationEditor.bind(this),this.inlineRelationEditorClose=this.inlineRelationEditorClose.bind(this),this.inlineRelationEditorUpload=this.inlineRelationEditorUpload.bind(this),this.inlineRelationEditorDownload=this.inlineRelationEditorDownload.bind(this),this.hinterCache={hints:[],hintsFromLinter:[],changed:!0},this.linter=this.linter.bind(this),this.exec=this.exec.bind(this),this.applyHistory=this.applyHistory.bind(this),this.downloadEditorText=this.downloadEditorText.bind(this),this.uploadCSVRef=h.createRef()}getInlineRelationData(){return this.hotTableSettings.data}setInlineRelationData(e){this.hotTableSettings.datta=e}inlineRelationEditorOpen(e){const t=new C,{editor:n}=this.state;if(n){let r=n.getDoc().getCursor(),o=n.getDoc().getCursor();e?(t.name=e.assignmentName,t.fromTableData(e.content),r=u.Pos(e.line-1,0),o=u.Pos(e.end.line,e.end.column)):(t.attributes.push(new j),t.attributes.push(new j)),this.setState({inlineRelationModal:!0,relationEditorName:t.name,replSelStart:r,replSelEnd:o},()=>{this.hotTableSettings.data=t.toData()})}}inlineRelationEditorOk(){const e=new C;e.name=this.state.relationEditorName,e.fromData(this.getInlineRelationData());const{editor:t,replSelStart:n,replSelEnd:r}=this.state;t&&t.getDoc().replaceRange(e.toString("relalg"===this.props.tab),n,r),this.inlineRelationEditorClose()}inlineRelationEditorClose(){this.setState({inlineRelationModal:!1})}inlineRelationEditorUpload(e){const t=e.target.files;if(t.length>0){const e=new FileReader;e.onload=e=>{const n=e.target.result,r=new C;r.fromCSV(n),r.name=t[0].name.replace(".csv",""),this.setInlineRelationData(r.toData())},e.readAsText(t[0])}}inlineRelationEditorDownload(){const e=new C;e.fromData(this.getInlineRelationData());const t=e.toCSV(),n=(document.createElement("a"),document.createElement("a"));n.href=window.URL.createObjectURL(new Blob([t],{type:"text/csv"})),n.download=this.state.relationEditorName+".csv",n.click()}componentDidMount(){const e=Object(f.findDOMNode)(this).querySelector("textarea");if(!e)throw new Error("could not fid textarea");const t=u.fromTextArea(e,this.state.codeMirrorOptions);this.setState({editor:t,relationEditorName:""}),null!=this.props.linterFunction&&t.setOption("lint",{getAnnotations:this.linter}),t.on("cursorActivity",e=>{this.setState({isSelectionSelected:e.getDoc().somethingSelected()})}),t.on("change",e=>{this.props.textChange(e)})}render(){const{execErrors:e,isSelectionSelected:t,editor:n,history:u,execSuccessful:c,isExecutionDisabled:d,execResult:f}=this.state,{toolbar:m,disableHistory:j=!1,execButtonLabel:C}=this.props;return h.createElement("div",null,h.createElement("div",{className:"editor-base"},h.createElement(a.a,{groups:m}),h.createElement("textarea",null),h.createElement("div",{className:"exec-errors"},e.map((e,t)=>h.createElement(E,{key:t,alert:e,editor:n}))),h.createElement("div",{className:"input-buttons"},h.createElement("button",{type:"button",disabled:d,className:l("btn btn-primary exec-button selection",{"selection-selected":t,"btn-danger":e.length>0,"btn-success":c,disabled:d}),onClick:()=>{n?this.exec(n.getDoc().somethingSelected()):console.warn("editor not initialized yet")}},C?h.createElement("span",null,h.createElement(o.a,{icon:r.o})," ",h.createElement(s.b,{id:C})):h.createElement(h.Fragment,null,h.createElement("span",{className:"glyphicon glyphicon-play"})," ",h.createElement("span",{className:"query"},h.createElement(o.a,{icon:r.n})," ",h.createElement(s.b,{id:"calc.editors.ra.button-execute-query"})),h.createElement("span",{className:"selection"},h.createElement(s.b,{id:"calc.editors.ra.button-execute-selection"})))),h.createElement("div",{style:{float:"right"}},h.createElement(p.a,{color:"Link",type:"button",className:"hideOnSM",onClick:this.downloadEditorText},h.createElement(o.a,{icon:r.h})," ",h.createElement("span",{className:"hideOnSM"},h.createElement(s.b,{id:"calc.editors.ra.button-download"}))),j?null:h.createElement("div",{className:"btn-group history-container"},h.createElement(i.a,{label:h.createElement("span",null,h.createElement(o.a,{icon:r.k})," ",h.createElement("span",{className:"hideOnSM"},h.createElement(s.b,{id:"calc.editors.button-history"}))),elements:u.map(e=>({label:h.createElement(h.Fragment,null,h.createElement("small",{className:"muted text-muted"},e.time.toLocaleTimeString()),h.createElement("div",null,e.code)),value:e})),onChange:this.applyHistory})))),h.createElement("div",{className:"exec-result"},f),h.createElement(g.a,{isOpen:this.state.modal,toggle:this.toggle,className:"showOnSM"},h.createElement(y.a,{toggle:this.toggle},Object(s.d)("calc.result.modal.title")),h.createElement(b.a,null,h.createElement("div",null,f)),h.createElement(v.a,null,h.createElement("span",null),h.createElement(p.a,{color:"secondary",onClick:this.toggle},Object(s.d)("calc.result.modal.close")))),h.createElement(g.a,{isOpen:this.state.inlineRelationModal,toggle:this.toggleInlineRelationEditor},h.createElement(y.a,{toggle:this.toggleInlineRelationEditor},Object(s.d)("calc.editors.ra.inline-editor.title")),h.createElement(b.a,null,h.createElement("div",null,"group"===this.props.tab?h.createElement("div",null,h.createElement(_.a,{placeholder:Object(s.d)("calc.editors.ra.inline-editor.input-relation-name"),value:this.state.relationEditorName,onChange:e=>{this.setState({relationEditorName:e.target.value})}}),h.createElement("br",null)):null,h.createElement(w.a,{settings:this.hotTableSettings,licenseKey:"non-commercial-and-evaluation"}))),h.createElement(v.a,null,h.createElement(p.a,{color:"light",onClick:this.inlineRelationEditorDownload},h.createElement(o.a,{icon:r.h})," ",Object(s.d)("calc.editors.ra.inline-editor.button-download-csv")),h.createElement(p.a,{color:"light",onClick:()=>{var e;null===(e=this.uploadCSVRef.current)||void 0===e||e.click()}},h.createElement(o.a,{icon:r.s})," ",Object(s.d)("calc.editors.ra.inline-editor.button-upload-csv")),h.createElement("input",{className:"hidden",ref:this.uploadCSVRef,onChange:this.inlineRelationEditorUpload,type:"file"}),h.createElement("span",{className:"flexSpan"}),h.createElement(p.a,{color:"primary",onClick:this.inlineRelationEditorOk},h.createElement(o.a,{icon:r.e})," ",Object(s.d)("calc.editors.ra.inline-editor.button-ok")),h.createElement(p.a,{color:"secondary",onClick:this.inlineRelationEditorClose},h.createElement(o.a,{icon:r.r})," ",Object(s.d)("calc.editors.ra.inline-editor.button-cancel"))))))}isMobile(){return window.innerWidth<=992}toggleInlineRelationEditor(){this.setState({inlineRelationModal:!this.state.inlineRelationModal})}toggle(){this.isMobile()&&this.setState({modal:!this.state.modal})}applyHistory(e){this.replaceAll(e.code)}forceLinterRun(){const{editor:e}=this.state;if(!e)return void console.warn("editor not initialized yet");const t=e.getValue();e.setValue(""),e.setValue(t)}historyAddEntry(e){const{historyMaxEntries:t=10,historyMaxLabelLength:n=20}=this.props,r={time:new Date,label:e.length>n?e.substr(0,n-4)+" ...":e,code:e};this.setState({history:[r,...this.state.history].slice(-t)})}clearExecutionAlerts(){this.state.execErrors.splice(0,this.state.execErrors.length),m.b.dismiss()}addExecutionWarning(e,t){this._addExecutionAlert(e,t,"warning"),this.isMobile()&&m.b.warn(e,{className:"fancyToastWarning"})}addExecutionError(e,t){this._addExecutionAlert(e,t,"error"),this.isMobile()&&m.b.error(e,{className:"fancyToastError"})}_addExecutionAlert(e,t,n){this.isMobile();const{editor:r}=this.state,o={type:n,message:e,position:t},i=this.state.execErrors;i.push(o),this.setState({execErrors:i})}setText(e,t){const{editor:n}=this.state;n?("selection"===t?n.getDoc().replaceSelection(e,"end"):n.setValue(e),this.clearExecutionAlerts(),this.setState({execSuccessful:!1})):console.warn("editor not initialized yet")}getText(){const{editor:e}=this.state;if(e)return e.getValue();console.warn("editor not initialized yet")}focus(){const{editor:e}=this.state;e?e.focus():console.warn("editor not initialized yet")}refresh(){const{editor:e}=this.state;e?e.refresh():console.warn("editor not initialized yet")}downloadEditorText(){let e="query";const{editor:t}=this.state;if(!t)return void console.warn("editor not initialized yet");switch(t.getOption("mode")){case"sql":case"text/x-mysql":e+=".sql";break;case"ra":default:e+=".txt"}((e,t)=>{const n=document.createElement("a");n.href=window.URL.createObjectURL(new Blob([t],{type:"text/plain"})),n.download=e,n.click()})(e,t.getValue())}resetHinter(){this.hinterCache={hints:[],hintsFromLinter:[],changed:!0}}linter(t){const{editor:n}=this.state;if(!n)return console.warn("editor not initialized yet"),[];if(0===t.length||!this.props.linterFunction)return[];try{const e=this.props.linterFunction(this,n,t);return 0===e.length&&0===this.hinterCache.hintsFromLinter.length||(this.hinterCache.hintsFromLinter=e,this.hinterCache.changed=!0),[]}catch(t){const r=[];console.log(t);const o=O._generateErrorFromException(t,0,0),i=e("").append(o.message).text();if(!o.codemirrorPositions)return this.clearExecutionAlerts(),this.addExecutionError(i),[];const a=o.codemirrorPositions.from;let s=o.codemirrorPositions.to;const l=n.getTokenAt({line:a.line,ch:a.ch+1},!0),u=n.getDoc().getRange(a,s);return void 0!==l.string&&l.string.length>u.length&&(s=n.getDoc().posFromIndex(n.getDoc().indexFromPos(a)+l.string.length)),r.push({from:a,to:s,message:i,severity:"error"}),this.props.enableInlineRelationEditor&&this.clearInlineRelationMarkers(),r}}genericHint(e){const{getHintsFunction:t}=this.props,n=e.getDoc().getCursor(),r=e.getTokenAt(n),o=(e,t="unknown")=>({text:e,displayText:e,className:`hint-${t}`});let i=[];if(!0===this.hinterCache.changed){const e={},n=t?t():[];for(let t=0;t0)for(let e=0;es.length&&0===t.indexOf(s)&&a.push(i[e])}else a=i;return{list:a,from:u.Pos(n.line,r.start),to:u.Pos(n.line,r.end)}}exec(e){const{editor:t}=this.state;if(!t)throw new Error("editor not initialized yet");this.setState({execResult:h.createElement("div",{className:"spinner"},h.createElement("div",{className:"rect1"}),h.createElement("div",{className:"rect2"}),h.createElement("div",{className:"rect3"}),h.createElement("div",{className:"rect4"}),h.createElement("div",{className:"rect5"}))},()=>{this.clearExecutionAlerts();let n="",r={line:0,ch:0};!0!==e?n=t.getValue():(n=t.getDoc().getSelection(),r=t.getDoc().getCursor("from")),0===n.length&&(this.clearExecutionAlerts(),this.addExecutionError(Object(s.d)("editor.error-no-query-found"))),this.clearExecutionAlerts();try{const{result:e}=this.props.execFunction(this,n,r);this.setState({execResult:e});const t=new CustomEvent("editor.execSuccessful",{detail:{editor:this}});return document.dispatchEvent(t),this.toggle(),!0}catch(e){console.error(e,e.stack);const t=O._generateErrorFromException(e,r.line,r.ch);this.addExecutionError(t.message,t.codemirrorPositions?t.codemirrorPositions.from:void 0),this.props.enableInlineRelationEditor&&this.clearInlineRelationMarkers()}})}static _generateErrorFromException(e,t,n){let r=void 0!==e.message?e.message:e;r=r.replace(/(\\(u|x)[0-9A-F]+)/g,(e,t)=>`${String.fromCharCode(parseInt(t.substr(2),16))}`);let o=null;void 0!==e.codeInfo&&void 0!==e.codeInfo.location?o=e.codeInfo.location:void 0!==e.location&&(o=e.location);let i=null;return null!==o&&(i={from:{line:o.start.line+(t||0)-1,ch:o.start.column+(n||0)-1},to:{line:o.end.line+(t||0)-1,ch:o.end.column+(n||0)-1}}),{message:r,location:o,codemirrorPositions:i}}static buildTranslatedPegJsMessage(e,t){return null!==e&&function(e){let t=1;for(e.sort((e,t)=>e.descriptiont.description?1:0);t1?`${n.slice(0,-1).join(", ")} ${Object(s.d)("editor.pegjs-error.or")} ${n[e.length-1]}`:n[0],o=t?`"${function(e){function t(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+t(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+t(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+t(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+t(e)}))}(t)}"`:Object(s.d)("editor.pegjs-error.end-of-input");return Object(s.d)("editor.pegjs-error.expected-found",{expected:r,found:o})}(e,t)}setExecutionDisabled(e){this.setState({isExecutionDisabled:e})}replaceText(e,t){const n="string"==typeof e.label?e.label:"";this.replaceSelection(n,t)}replaceSelection(e,t){this.setText(t||e,"selection"),this.focus()}replaceAll(e,t){this.setText(t||e,"all"),this.focus()}setReadOnly(t){const{editor:n}=this.state;if(!n)throw new Error("editor not initialized yet");const r=e(n.getWrapperElement());!1===t?(n.setOption("readOnly",!1),r.removeClass("readonly")):(n.setOption("readOnly","nocursor"),r.addClass("readonly"))}addInlineRelationMarkers(e){const{editor:t}=this.state;if(!t)return void console.warn("editor not initialized yet");const n=function(e){const t=[];return Object(d.a)(e,e=>{const n=e;if(n&&"table"===n.type){const e={name:n.name,line:n.codeInfo.location.start.line-1,column:n.codeInfo.location.start.column-1,length:n.codeInfo.text.length,assignmentName:n.assignmentName?n.assignmentName:"",content:{columns:n.columns,rows:n.rows},start:n.codeInfo.location.start,end:n.codeInfo.location.end};t.push(e)}}),t}(e);this.clearInlineRelationMarkers();for(let e=0;e{this.inlineRelationEditorOpen(n[e])},f.render(h.createElement(o.a,{icon:r.q}),i,()=>{i.style.marginLeft="-15px",t.setGutterMarker(n[e].line++,S,i)})}}clearInlineRelationMarkers(){const{editor:e}=this.state;e?e.clearGutter(S):console.warn("editor not initialized yet")}}function k(e){const t=[],n=function(e){const r=e.getSchema();for(let e=0;e-1&&!this.props.autohide&&(this._hideTimeout&&this.clearHideTimeout(),this.state.isOpen&&!this.props.isOpen&&this.toggle())},n.onMouseLeaveTooltipContent=function(e){this.props.trigger.indexOf("hover")>-1&&!this.props.autohide&&(this._showTimeout&&this.clearShowTimeout(),e.persist(),this._hideTimeout=setTimeout(this.hide.bind(this,e),this.getDelay("hide")))},n.onEscKeyDown=function(e){"Escape"===e.key&&this.hide(e)},n.getRef=function(e){var t=this.props.innerRef;t&&("function"==typeof t?t(e):"object"==typeof t&&(t.current=e)),this._popover=e},n.getDelay=function(e){var t=this.props.delay;return"object"==typeof t?isNaN(t[e])?S[e]:t[e]:t},n.show=function(e){if(!this.props.isOpen){if(this.clearShowTimeout(),this.currentTargetElement=e?e.currentTarget||e.target:null,e&&e.composedPath&&"function"==typeof e.composedPath){var t=e.composedPath();this.currentTargetElement=t&&t[0]||this.currentTargetElement}this.toggle(e)}},n.showWithDelay=function(e){this._hideTimeout&&this.clearHideTimeout(),this._showTimeout=setTimeout(this.show.bind(this,e),this.getDelay("show"))},n.hide=function(e){this.props.isOpen&&(this.clearHideTimeout(),this.currentTargetElement=null,this.toggle(e))},n.hideWithDelay=function(e){this._showTimeout&&this.clearShowTimeout(),this._hideTimeout=setTimeout(this.hide.bind(this,e),this.getDelay("hide"))},n.clearShowTimeout=function(){clearTimeout(this._showTimeout),this._showTimeout=void 0},n.clearHideTimeout=function(){clearTimeout(this._hideTimeout),this._hideTimeout=void 0},n.handleDocumentClick=function(e){var t=this.props.trigger.split(" ");t.indexOf("legacy")>-1&&(this.props.isOpen||T(e.target,this._targets))?(this._hideTimeout&&this.clearHideTimeout(),this.props.isOpen&&!k(e.target,this._popover)?this.hideWithDelay(e):this.props.isOpen||this.showWithDelay(e)):t.indexOf("click")>-1&&T(e.target,this._targets)&&(this._hideTimeout&&this.clearHideTimeout(),this.props.isOpen?this.hideWithDelay(e):this.showWithDelay(e))},n.addEventOnTargets=function(e,t,n){this._targets.forEach((function(r){r.addEventListener(e,t,n)}))},n.removeEventOnTargets=function(e,t,n){this._targets.forEach((function(r){r.removeEventListener(e,t,n)}))},n.addTargetEvents=function(){if(this.props.trigger){var e=this.props.trigger.split(" ");-1===e.indexOf("manual")&&((e.indexOf("click")>-1||e.indexOf("legacy")>-1)&&document.addEventListener("click",this.handleDocumentClick,!0),this._targets&&this._targets.length&&(e.indexOf("hover")>-1&&(this.addEventOnTargets("mouseover",this.showWithDelay,!0),this.addEventOnTargets("mouseout",this.hideWithDelay,!0)),e.indexOf("focus")>-1&&(this.addEventOnTargets("focusin",this.show,!0),this.addEventOnTargets("focusout",this.hide,!0)),this.addEventOnTargets("keydown",this.onEscKeyDown,!0)))}},n.removeTargetEvents=function(){this._targets&&(this.removeEventOnTargets("mouseover",this.showWithDelay,!0),this.removeEventOnTargets("mouseout",this.hideWithDelay,!0),this.removeEventOnTargets("keydown",this.onEscKeyDown,!0),this.removeEventOnTargets("focusin",this.show,!0),this.removeEventOnTargets("focusout",this.hide,!0)),document.removeEventListener("click",this.handleDocumentClick,!0)},n.updateTarget=function(){var e=Object(b.i)(this.props.target,!0);e!==this._targets&&(this.removeTargetEvents(),this._targets=e?Array.from(e):[],this.currentTargetElement=this.currentTargetElement||this._targets[0],this.addTargetEvents())},n.toggle=function(e){return this.props.disabled||!this._isMounted?e&&e.preventDefault():this.props.toggle(e)},n.render=function(){if(!this.props.isOpen)return null;this.updateTarget();var e=this.props,t=e.className,n=e.cssModule,r=e.innerClassName,o=e.isOpen,s=e.hideArrow,l=e.boundariesElement,u=e.placement,c=e.placementPrefix,d=e.arrowClassName,h=e.popperClassName,f=e.container,m=e.modifiers,p=e.offset,g=e.fade,y=e.flip,v=Object(b.l)(this.props,Object.keys(C)),_=Object(b.k)(h,n),w=Object(b.k)(r,n);return i.a.createElement(j,{className:t,target:this.currentTargetElement||this._targets[0],isOpen:o,hideArrow:s,boundariesElement:l,placement:u,placementPrefix:c,arrowClassName:d,popperClassName:_,container:f,modifiers:m,offset:p,cssModule:n,fade:g,flip:y},i.a.createElement("div",Object(a.a)({},v,{ref:this.getRef,className:w,role:"tooltip",onMouseOver:this.onMouseOverTooltipContent,onMouseLeave:this.onMouseLeaveTooltipContent,onKeyDown:this.onEscKeyDown})))},t}(i.a.Component);M.propTypes=C,M.defaultProps=O;var x=M,L=function(e){var t=l()("popover","show",e.popperClassName),n=l()("popover-inner",e.innerClassName);return i.a.createElement(x,Object(a.a)({},e,{popperClassName:t,innerClassName:n}))};L.propTypes=C,L.defaultProps={placement:"right",placementPrefix:"bs-popover",trigger:"click"};var R=L,A={tag:b.o,className:h.a.string,cssModule:h.a.object},D=function(e){var t=e.className,n=e.cssModule,r=e.tag,o=Object(f.a)(e,["className","cssModule","tag"]),s=Object(b.k)(l()(t,"popover-header"),n);return i.a.createElement(r,Object(a.a)({},o,{className:s}))};D.propTypes=A,D.defaultProps={tag:"h3"};var N=D,P={tag:b.o,className:h.a.string,cssModule:h.a.object},I=function(e){var t=e.className,n=e.cssModule,r=e.tag,o=Object(f.a)(e,["className","cssModule","tag"]),s=Object(b.k)(l()(t,"popover-body"),n);return i.a.createElement(r,Object(a.a)({},o,{className:s}))};I.propTypes=P,I.defaultProps={tag:"div"};var H=I;class Y extends o.Component{constructor(e){super(e),this.body=Object(r.a)((e,t)=>!1===t?null:"function"==typeof e?e():e),this.state={id:"popWrapper_"+Math.random().toString(36).substr(2),isOpen:!1},this.hoverOpen=this.hoverOpen.bind(this),this.hoverClose=this.hoverClose.bind(this),this.handleClick=this.handleClick.bind(this),this.open=this.open.bind(this),this.close=this.close.bind(this)}componentWillUnmount(){this.close()}open(){this.setState({isOpen:!0}),document.addEventListener("click",this.close)}close(e){if(e){const{target:t}=e;if(t instanceof Element&&null!==t.closest(".popover__inside"))return}this.setState({isOpen:!1}),document.removeEventListener("click",this.close)}hoverOpen(){const{trigger:e}=this.props;("hover"===e||Array.isArray(e)&&e.includes("hover"))&&this.open()}hoverClose(){const{trigger:e}=this.props;("hover"===e||Array.isArray(e)&&e.includes("hover"))&&this.close()}handleClick(e){const{trigger:t,onClick:n}=this.props;if(n&&n(e),"click"===t||Array.isArray(t)&&t.includes("click")){const{isOpen:e}=this.state;e?this.close():this.open()}}render(){const{id:e,isOpen:t}=this.state,{title:n,className:r=""}=this.props,i=this.body(this.props.body,t);return o.createElement(o.Fragment,null,o.createElement("div",{onMouseEnter:this.hoverOpen,onMouseLeave:this.hoverClose,onFocus:this.hoverOpen,onBlur:this.hoverClose,onClick:this.handleClick,id:e,className:`popover__outside ${r}`},o.Children.only(this.props.children),o.createElement(R,{target:`#${e}`,isOpen:t,className:`popover__inside ${r}`},o.createElement(N,null,n),o.createElement(H,null,i))))}}},"./src/calc2/components/raTree.scss":function(e,t,n){},"./src/calc2/components/result.scss":function(e,t,n){},"./src/calc2/components/toolbar.scss":function(e,t,n){},"./src/calc2/components/toolbar.tsx":function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var r=n("./src/calc2/components/dropdownList.tsx"),o=n("./src/calc2/components/popover.tsx"),i=n("./src/calc2/i18n.tsx"),a=n("./node_modules/react/index.js");n("./src/calc2/components/toolbar.scss");class s extends a.Component{render(){const{groups:e}=this.props;return a.createElement("div",{className:"toolbar codemirror-toolbar"},e.map((e,t)=>e.items.map((e,t)=>a.createElement(o.a,{key:t,trigger:["hover","focus"],placement:"dropdown"===e.type?"top":"bottom",title:e.tooltipTitle?String(Object(i.d)(e.tooltipTitle)):"",body:a.createElement(i.b,{id:e.tooltip,html:!0}),className:("dropdown"===e.type?"toolbar__popover__dropdown":"toolbar__popover")+" "+(void 0===e.className?"":e.className)},"dropdown"===e.type?a.createElement(r.a,{label:e.label,elements:e.elements,onChange:e.onChange,value:e.value}):a.createElement("span",{onClick:t=>{t.preventDefault(),t.stopPropagation(),e.onClick(e)}},e.label)))))}}},"./src/calc2/data/uibk.txt":function(e,t,n){"use strict";n.r(t),t.default="group: UIBK - R, S, T\ndescription: Tables from and for the lecture [Databases: Foundations, Data Models and System Concepts - University of Innsbruck](http://dbis-informatik.uibk.ac.at/249-0-VO-Datenbanksysteme.html) chapter 3 \ncategory@de:Universität Innsbruck\ncategory@en:University of Innsbruck\n\nR = {\na, b, c\n\n1, 'a', 'd'\n3, 'c', 'c'\n4, 'd', 'f'\n5, 'd', 'b'\n6, 'e', 'f'\n}\n\nS = {\nb, d\n\n'a', 100\n'b', 300\n'c', 400\n'd', 200\n'e', 150\n}\n\nT = {\nb, d\n\n'a', 100\n'd', 200\n'f', 400\n'g', 120\n}\n\ngroup: Kemper Datenbanksysteme\ndescription: Source: [Alfons Kemper, André Eickler: Datenbanksysteme: Eine Einführung 8. Auflage](http://www3.in.tum.de/teaching/bookDBMSeinf/), Seite 84, Abbildung 3.8\n\nProfessoren = {\nPersNr:number\tName:string\tRang:string\tRaum:number\n2125\tSokrates\tC4\t226\n2126\tRussel\tC4\t232\n2127\tKopernikus\tC3\t310\n2133\tPopper\tC3\t52\n2134\tAugustinus\tC3\t309\n2136\tCurie\tC4\t36\n2137\tKant\tC4\t7\n}\n\nStudenten = {\nMatrNr:number\tName:string\tSemester:number\n24002\tXenokrates\t18\n25403\tJonas\t12\n26120\tFichte\t10\n26830\tAristoxenos\t8\n27550\tSchopenhauer\t6\n28106\tCarnap\t3\n29120\tTheophrastos\t2\n29555\tFeuerbach\t2\n}\n\n\nVorlesungen = {\nVorlNr:number\tTitel:string\tSWS:number\tgelesenVon:number\n5001\tGrundzuege\t4\t2137\n5041\tEthik\t4\t2125\n5043\tErkenntnistheorie\t3\t2126\n5049\tMaeeutik\t2\t2125\n4052\tLogik\t4\t2125\n5052\tWissenschaftstheorie\t3\t2126\n5216\tBioethik\t2\t2126\n5259\t'Der Wiener Kreis'\t2\t2133\n5022\t'Glaube und wissen'\t2\t2134\n4630\t'Glaube und wissen'\t4\t2137\n}\n\nvoraussetzen = {\nVorgaenger:number\tNachfolger:number\n5001\t5041\n5001\t5043\n5001\t5049\n5041\t5216\n5043\t5052\n5041\t5052\n5052\t5259\n}\n\nhoeren = {\nMatrNr:number\tVorlNr:number\n26120\t5001\n27550\t5001\n27550\t4052\n28106\t5041\n28106\t5052\n28106\t5216\n28106\t5259\n29120\t5001\n29120\t5041\n29120\t5049\n29555\t5022\n25403\t5022\n29555\t5001\n}\n\nAssistenten = {\nPersNr:number\tName:string\tFachgebiet:string\tBoss:number\n3002\tPlaton\tIdeenlehre\t2125\n3003\tAristoteles\tSyllogistik\t2125\n3004\tWittgenstein\tSprachtheorie\t2126\n3005\tRhetikus\tPlanetenbewegung\t2127\n3006\tNewton\t'Keplersche Gesetze'\t2127\n3007\tSpinoza\t'Gott und Natur'\t2134\n}\n\npruefen = {\nMatrNr:number\tVorlNr:number\tPersNr:number\tNote:number\n28106\t5001\t2126\t1\n25403\t5041\t2125\t2\n27550\t4630\t2137\t2\n}\n\n\n\ngroup: UIBK - KursDB\ndescription: Tables from and for the lecture [Databases: Foundations, Data Models and System Concepts - University of Innsbruck](http://dbis-informatik.uibk.ac.at/249-0-VO-Datenbanksysteme.html) chapter 3 \n\nKurs = {\nKursNr, Titel\n\nG08, 'Grundlagen I'\nG10, 'Grundlagen II'\nP13, 'C-Programmierung'\nI09, Datenbanken\n}\n\nKursleiter = {\nPersNr, Name, Gehalt\n\n27183, 'Meier, I.', 4300.50\n29594, 'Schulze, H.', 3890.20\n38197, 'Huber, L.', 4200.10\n43325, 'Müller, K.', 3400.80\n}\n\nVorauss = {\nVorNr, KursNr\nG08, P13\nG10, P13\nG08, I09\nG10, I09\nP13, I09\n}\n\nFuehrt_durch = {\nAngNr\tKursNr\tPersNr\n1\tG08\t38197\n2\tG08\t38197\n1\tG10\t43325\n2\tG10\t29594\n1\tP13\t27183\n2\tP13\t27183\n1\tI09\t29594\n2\tI09\t29594\n3\tI09\t29594\n}\n\nTeilnehmer = {\nTnNr, Name, Ort \n143, 'Schmidt, M.', Bremen \n145, 'Huber, Chr.', Augsburg \n146, 'Abele, I.', Senden \n149, 'Kircher, B.', Bochum \n155, 'Meier, W.', Stuttgart \n171, 'Möller, H.', Innsbruck \n173, 'Schulze, B.', Stuttgart \n177, 'Mons, F.', Essen \n185, 'Meier, K.', Heidelberg \n187, 'Karstens, L.', Hamburg \n194, 'Gerstner, M.', Innsbruck \n}\n\nNimmt_teil = {\nAngNr\tKursNr\tTnNr\n2\tG08\t143\n2\tP13\t143\n1\tG08\t145\n1\tP13\t146\n1\tI09\t146\n2\tP13\t149\n1\tI09\t155\n1\tI09\t171\n1\tI09\t173\n2\tP13\t177\n1\tI09\t185\n2\tI09\t187\n1\tP13\t194\n}\n\nAngebot = {\nAngNr\tKursNr\tDatum\tOrt\n1\tG08\t2000-10-13\t'München'\n2\tG08\t2000-11-24\tBremen\n1\tG10\t2000-12-01\t'München'\n2\tG10\t2001-02-15\tHamburg\n1\tP13\t2001-05-28\tInnsbruck\n2\tP13\t2001-07-01\tEssen\n1\tI09\t2001-03-27\tStuttgart\n2\tI09\t2001-04-23\tHamburg\n3\tI09\t2001-05-29\t'München'\n}\n\n\n\ngroup:Database Systems The Complete Book - Exercise 2.4.1\ndescription[[ Sample Data from [Database Systems The Complete Book 2nd Edition](http://infolab.stanford.edu/~ullman/dscb.html) Exercise 2.4.1 Page 52-55 ]]\n\nProduct = {\nmaker\tmodel\ttype\nA\t1001\tpc\nA\t1002\tpc\nA\t1003\tpc\nA\t2004\tlaptop\nA\t2005\tlaptop\nA\t2006\tlaptop\nB\t1004\tpc\nB\t1005\tpc\nB\t1006\tpc\nB\t2007\tpc\nC\t1007\tpc\nD\t1008\tpc\nD\t1009\tpc\nD\t1010\tpc\nD\t3004\tprinter\nD\t3005\tprinter\nE\t1011\tpc\nE\t1012\tpc\nE\t1013\tpc\nE\t2001\tlaptop\nE\t2002\tlaptop\nE\t2003\tlaptop\nE\t3001\tprinter\nE\t3002\tprinter\nE\t3003\tprinter\nF\t2008\tlaptop\nF\t2009\tlaptop\nG\t2010\tlaptop\nH\t3006\tprinter\nH\t3007\tprinter\n}\n\nPC = {\nmodel\tspeed\tram\thd\tprice\n1001\t2.66\t1024\t250\t2114\n1002\t2.1\t512\t250\t995\n1003\t1.42\t512\t80\t478\n1004\t2.8\t1024\t250\t649\n1005\t3.2\t512\t250\t630\n1006\t3.2\t1024\t320\t1049\n1007\t2.2\t1024\t200\t510\n1008\t2.2\t2048\t250\t770\n1009\t2\t1024\t250\t650\n1010\t2.8\t2048\t300\t770\n1011\t1.86\t2048\t160\t959\n1012\t2.8\t1024\t160\t649\n1013\t3.06\t512\t80\t529\n}\n\nLaptop = {\nmodel\tspeed\tram\thd\tscreen\tprice\n2001\t2\t2048\t240\t20.1\t3673\n2002\t1.73\t1024\t80\t17\t949\n2003\t1.8\t512\t60\t15.4\t549\n2004\t2\t512\t60\t13.3\t1150\n2005\t2.16\t1024\t120\t17\t2500\n2006\t2\t2048\t80\t15.4\t1700\n2007\t1.83\t1024\t120\t13.3\t1429\n2008\t1.6\t1024\t100\t15.4\t900\n2009\t1.6\t512\t80\t14.1\t680\n2010\t2\t2048\t160\t15.4\t2300\n}\n\nPrinter = {\nmodel\tcolor\ttype\tprice\n3001\ttrue\tink-jet\t99\n3002\tfalse\tlaser\t239\n3003\ttrue\tlaser\t899\n3004\ttrue\tink-jet\t120\n3005\tfalse\tlaser\t120\n3006\ttrue\tink-jet\t100\n3007\ttrue\tlaser\t200\n}\n\ngroup:Database Systems The Complete Book - Exercise 2.4.3\ndescription[[ Sample Data from [Database Systems The Complete Book 2nd Edition](http://infolab.stanford.edu/~ullman/dscb.html) Exercise 2.4.1 Page 55-57 ]]\n\nClasses = {\nclass\ttype\tcountry\tnumGuns\tbore\tdisplacement\nBismarck\tbb\tGermany\t8\t15\t42000\nIowa\tbb\tUSA\t9\t16\t46000\nKongo\tbc\tJapan\t8\t14\t32000\n'North Carolina'\tbb\tUSA\t9\t16\t37000\nRenown\tbc\t'Gt. Britan'\t6\t15\t23000\nRevenge\tbb\t'Gt. Britan'\t8\t15\t29000\nTennessee\tbb\tUSA\t12\t14\t32000\nYamato\tbb\tJapan\t9\t18\t65000\n}\n\nBattles = {\nname\tdate\n'Denmark Strait'\t1941-05-24\nGuadalcanal\t1942-11-15\n'North Cape'\t1943-12-26\n'Surigao Strait'\t1944-10-25\n}\n\nOutcomes = {\nship\tbattle\tresult\nArizona\t'Pearl Harbor'\tsunk\nBismarck\t'Denmark Strait'\tsunk\nCalifornia\t'Surigao Strait'\tok\n'Duke of York'\t'North Cape'\tok\nFuso\t'Surigao Strait'\tsunk\nHood\t'Denmark Strait'\tsunk\n'King George V'\t'Denmark Strait'\tok\nKirishima\tGuadalcanal\tsunk\n'Prince of Wales'\t'Denmark Strait'\tdamaged\nRodney\t'Denmark Strait'\tok\nScharnhorst\t'North Cape'\tsunk\n'South Dakota'\tGuadalcanal\tdamaged\nTennessee\t'Surigao Strait'\tok\nWashington\tGuadalcanal\tok\n'West Virginia'\t'Surigao Strait'\tok\nYamashiro\t'Surigao Strait'\tsunk\n}\n\nShips = {\nname\tclass\tlaunched\nCalifornia\tTennessee\t1921\nHaruna\tKongo\t1915\nHiei\tKongo\t1914\nIowa\tIowa\t1943\nKirishima\tKongo\t1915\nKongo\tKongo\t1913\nMissouri\tIowa\t1944\nMusashi\tYamato\t1942\n'New Jersey'\tIowa\t1943\n'North Carolina'\t'North Carolina'\t1941\nRamillies\tRevenge\t1917\nRenown\tRenown\t1916\nRepulse\tRenown\t1916\nResolution\tRevenge\t1916\nRevenge\tRevenge\t1916\n'Royal Oak'\tRevenge\t1916\n'Royal Sovereign'\tRevenge\t1916\nTennessee\tTennessee\t1920\nWashington\t'North Carolina'\t1941\nWisconsin\tIowa\t1944\nYamato\tYamato\t1941\n}\n\n\ngroup:Wikipedia - Relational algebra (en)\ndescription[[This are the tables from [Relational algebra - Wikipedia The Free Encyclopedia](http://en.wikipedia.org/wiki/Relational_algebra)\n\nlicense: [CC BY-SA](http://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License)]]\n\nEmployee = {\n\tName:string, EmpId:number, DeptName:string\n\t'Harry' , 3415 , 'Finance' \n\t'Sally' , 2241 , 'Sales' \n\t'George' , 3401 , 'Finance' \n\t'Harriet' , 2202 , 'Sales' \n\t'Tim' , 1123 , 'Executive' \n}\n\nDept = {\n\tDeptName:string, Manager:string\n\t'Sales' , 'Harriet' \n\t'Production' , 'Charles' \n}\n\nCompleted = {\n\tStudent:string, Task:string\n\t'Fred' , 'Database1'\n\t'Fred' , 'Database2'\n\t'Fred' , 'Compiler1'\n\t'Eugene' , 'Database1'\n\t'Eugene' , 'Compiler1'\n\t'Sarah' , 'Database1'\n\t'Sarah' , 'Database2'\n}\n\nDBProject = {\n\tTask:string\n\t'Database1'\n\t'Database2'\n}\n\nCar = {\n\tCarModel:string, CarPrice:number\n\t'CarA' , 20000 \n\t'CarB' , 30000 \n\t'CarC' , 50000 \n}\n\nBoat = {\n\tBoatModel:string, BoatPrice:number\n\t'Boat1' , 10000 \n\t'Boat2' , 40000 \n\t'Boat3' , 60000 \n}"},"./src/calc2/i18n.tsx":function(e,t,n){"use strict";n.d(t,"c",(function(){return d})),n.d(t,"d",(function(){return h})),n.d(t,"a",(function(){return p})),n.d(t,"b",(function(){return g}));var r=n("./node_modules/i18next/dist/es/index.js"),o=n("./node_modules/i18next-browser-languagedetector/index.js"),i=n("./node_modules/react/index.js"),a=n("./src/locales/de.json"),s=n("./src/locales/en.json"),l=n("./src/locales/es.json"),u=n("./src/locales/kr.json"),c=n("./src/locales/pt.json");const d=r.b(o).init({resources:{en:{translations:s},de:{translations:a},es:{translations:l},kr:{translations:u},pt:{translations:c}},fallbackLng:"en",nsSeparator:":",keySeparator:!1,defaultNS:"translations",debug:!0});function h(e,t){return String(d.t(e,t))}const{Provider:f,Consumer:m}=i.createContext(d),p=e=>i.createElement(f,{value:d},e.children),g=({id:e,html:t=!1})=>i.createElement(m,null,n=>t?i.createElement("span",{dangerouslySetInnerHTML:{__html:String(n.t(e,{interpolation:{escapeValue:!1}}))}}):i.createElement("span",null,String(n.t(e))))},"./src/calc2/main.hot.tsx":function(e,t,n){"use strict";(function(e){var r=n("./src/calc2/main.tsx"),o=n("./node_modules/react-hot-loader/index.js");t.a=Object(o.hot)(e)(r.a)}).call(this,n("./node_modules/webpack/buildin/harmony-module.js")(e))},"./src/calc2/main.tsx":function(e,t,n){"use strict";n.d(t,"a",(function(){return zn}));n("./node_modules/bootstrap/dist/css/bootstrap.css");var r=n("./src/calc2/i18n.tsx"),o=n("./node_modules/react/index.js"),i=n.n(o),a=n("./node_modules/prop-types/index.js"),s=n.n(a),l=i.a.createContext(null);var u=function(e){e()},c={notify:function(){}};function d(){var e=u,t=null,n=null;return{clear:function(){t=null,n=null},notify:function(){e((function(){for(var e=t;e;)e.callback(),e=e.next}))},get:function(){for(var e=[],n=t;n;)e.push(n),n=n.next;return e},subscribe:function(e){var r=!0,o=n={callback:e,next:null,prev:n};return o.prev?o.prev.next=o:t=o,function(){r&&null!==t&&(r=!1,o.next?o.next.prev=o.prev:n=o.prev,o.prev?o.prev.next=o.next:t=o.next)}}}}var h=function(){function e(e,t){this.store=e,this.parentSub=t,this.unsubscribe=null,this.listeners=c,this.handleChangeWrapper=this.handleChangeWrapper.bind(this)}var t=e.prototype;return t.addNestedSub=function(e){return this.trySubscribe(),this.listeners.subscribe(e)},t.notifyNestedSubs=function(){this.listeners.notify()},t.handleChangeWrapper=function(){this.onStateChange&&this.onStateChange()},t.isSubscribed=function(){return Boolean(this.unsubscribe)},t.trySubscribe=function(){this.unsubscribe||(this.unsubscribe=this.parentSub?this.parentSub.addNestedSub(this.handleChangeWrapper):this.store.subscribe(this.handleChangeWrapper),this.listeners=d())},t.tryUnsubscribe=function(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=null,this.listeners.clear(),this.listeners=c)},e}();var f=function(e){var t=e.store,n=e.context,r=e.children,a=Object(o.useMemo)((function(){var e=new h(t);return e.onStateChange=e.notifyNestedSubs,{store:t,subscription:e}}),[t]),s=Object(o.useMemo)((function(){return t.getState()}),[t]);Object(o.useEffect)((function(){var e=a.subscription;return e.trySubscribe(),s!==t.getState()&&e.notifyNestedSubs(),function(){e.tryUnsubscribe(),e.onStateChange=null}}),[a,s]);var u=n||l;return i.a.createElement(u.Provider,{value:a},r)},m=n("./node_modules/@babel/runtime/helpers/esm/extends.js"),p=n("./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js"),g=n("./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),y=n.n(g),b=n("./node_modules/react-is/index.js"),v="undefined"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement?o.useLayoutEffect:o.useEffect,_=[],w=[null,null];function E(e,t){var n=e[1];return[t.payload,n+1]}function j(e,t,n){v((function(){return e.apply(void 0,t)}),n)}function C(e,t,n,r,o,i,a){e.current=r,t.current=o,n.current=!1,i.current&&(i.current=null,a())}function S(e,t,n,r,o,i,a,s,l,u){if(e){var c=!1,d=null,h=function(){if(!c){var e,n,h=t.getState();try{e=r(h,o.current)}catch(e){n=e,d=e}n||(d=null),e===i.current?a.current||l():(i.current=e,s.current=e,a.current=!0,u({type:"STORE_UPDATED",payload:{error:n}}))}};n.onStateChange=h,n.trySubscribe(),h();return function(){if(c=!0,n.tryUnsubscribe(),n.onStateChange=null,d)throw d}}}var O=function(){return[null,0]};function k(e,t){void 0===t&&(t={});var n=t,r=n.getDisplayName,a=void 0===r?function(e){return"ConnectAdvanced("+e+")"}:r,s=n.methodName,u=void 0===s?"connectAdvanced":s,c=n.renderCountProp,d=void 0===c?void 0:c,f=n.shouldHandleStateChanges,g=void 0===f||f,v=n.storeKey,k=void 0===v?"store":v,T=(n.withRef,n.forwardRef),M=void 0!==T&&T,x=n.context,L=void 0===x?l:x,R=Object(p.a)(n,["getDisplayName","methodName","renderCountProp","shouldHandleStateChanges","storeKey","withRef","forwardRef","context"]),A=L;return function(t){var n=t.displayName||t.name||"Component",r=a(n),s=Object(m.a)({},R,{getDisplayName:a,methodName:u,renderCountProp:d,shouldHandleStateChanges:g,storeKey:k,displayName:r,wrappedComponentName:n,WrappedComponent:t}),l=R.pure;var c=l?o.useMemo:function(e){return e()};function f(n){var r=Object(o.useMemo)((function(){var e=n.forwardedRef,t=Object(p.a)(n,["forwardedRef"]);return[n.context,e,t]}),[n]),a=r[0],l=r[1],u=r[2],d=Object(o.useMemo)((function(){return a&&a.Consumer&&Object(b.isContextConsumer)(i.a.createElement(a.Consumer,null))?a:A}),[a,A]),f=Object(o.useContext)(d),y=Boolean(n.store)&&Boolean(n.store.getState)&&Boolean(n.store.dispatch);Boolean(f)&&Boolean(f.store);var v=y?n.store:f.store,k=Object(o.useMemo)((function(){return function(t){return e(t.dispatch,s)}(v)}),[v]),T=Object(o.useMemo)((function(){if(!g)return w;var e=new h(v,y?null:f.subscription),t=e.notifyNestedSubs.bind(e);return[e,t]}),[v,y,f]),M=T[0],x=T[1],L=Object(o.useMemo)((function(){return y?f:Object(m.a)({},f,{subscription:M})}),[y,f,M]),R=Object(o.useReducer)(E,_,O),D=R[0][0],N=R[1];if(D&&D.error)throw D.error;var P=Object(o.useRef)(),I=Object(o.useRef)(u),H=Object(o.useRef)(),Y=Object(o.useRef)(!1),F=c((function(){return H.current&&u===I.current?H.current:k(v.getState(),u)}),[v,D,u]);j(C,[I,P,Y,u,F,H,x]),j(S,[g,v,M,k,I,P,Y,H,x,N],[v,M,k]);var W=Object(o.useMemo)((function(){return i.a.createElement(t,Object(m.a)({},F,{ref:l}))}),[l,t,F]);return Object(o.useMemo)((function(){return g?i.a.createElement(d.Provider,{value:L},W):W}),[d,W,L])}var v=l?i.a.memo(f):f;if(v.WrappedComponent=t,v.displayName=r,M){var T=i.a.forwardRef((function(e,t){return i.a.createElement(v,Object(m.a)({},e,{forwardedRef:t}))}));return T.displayName=r,T.WrappedComponent=t,y()(T,t)}return y()(v,t)}}function T(e,t){return e===t?0!==e||0!==t||1/e==1/t:e!=e&&t!=t}function M(e,t){if(T(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(var o=0;o=0;r--){var o=t[r](e);if(o)return o}return function(t,r){throw new Error("Invalid value of type "+typeof e+" for "+n+" argument when connecting component "+r.wrappedComponentName+".")}}function B(e,t){return e===t}function U(e){var t=void 0===e?{}:e,n=t.connectHOC,r=void 0===n?k:n,o=t.mapStateToPropsFactories,i=void 0===o?N:o,a=t.mapDispatchToPropsFactories,s=void 0===a?D:a,l=t.mergePropsFactories,u=void 0===l?I:l,c=t.selectorFactory,d=void 0===c?F:c;return function(e,t,n,o){void 0===o&&(o={});var a=o,l=a.pure,c=void 0===l||l,h=a.areStatesEqual,f=void 0===h?B:h,g=a.areOwnPropsEqual,y=void 0===g?M:g,b=a.areStatePropsEqual,v=void 0===b?M:b,_=a.areMergedPropsEqual,w=void 0===_?M:_,E=Object(p.a)(a,["pure","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","areMergedPropsEqual"]),j=W(e,i,"mapStateToProps"),C=W(t,s,"mapDispatchToProps"),S=W(n,u,"mergeProps");return r(d,Object(m.a)({methodName:"connect",getDisplayName:function(e){return"Connect("+e+")"},shouldHandleStateChanges:Boolean(e),initMapStateToProps:j,initMapDispatchToProps:C,initMergeProps:S,pure:c,areStatesEqual:f,areOwnPropsEqual:y,areStatePropsEqual:v,areMergedPropsEqual:w},E))}}var z=U();var V,q=n("./node_modules/react-dom/index.js");V=q.unstable_batchedUpdates,u=V;var G=n("./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js");function K(e){return"/"===e.charAt(0)}function X(e,t){for(var n=t,r=n+1,o=e.length;r=0;c--){var d=o[c];"."===d?X(o,c):".."===d?(X(o,c),u++):u&&(X(o,c),u--)}if(!s)for(;u--;u)o.unshift("..");!s||""===o[0]||o[0]&&K(o[0])||o.unshift("");var h=o.join("/");return n&&"/"!==h.substr(-1)&&(h+="/"),h};function J(e){return e.valueOf?e.valueOf():Object.prototype.valueOf.call(e)}var Q=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every((function(t,r){return e(t,n[r])}));if("object"==typeof t||"object"==typeof n){var r=J(t),o=J(n);return r!==t||o!==n?e(r,o):Object.keys(Object.assign({},t,n)).every((function(r){return e(t[r],n[r])}))}return!1};var Z=function(e,t){if(!e)throw new Error("Invariant failed")};function ee(e){return"/"===e.charAt(0)?e:"/"+e}function te(e){return"/"===e.charAt(0)?e.substr(1):e}function ne(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function re(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function oe(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function ie(e,t,n,r){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var i=t.indexOf("?");return-1!==i&&(n=t.substr(i),t=t.substr(0,i)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e)).state=t:(void 0===(o=Object(m.a)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(e){throw e instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):e}return n&&(o.key=n),r?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=$(o.pathname,r.pathname)):o.pathname=r.pathname:o.pathname||(o.pathname="/"),o}function ae(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var i="function"==typeof e?e(t,n):e;"string"==typeof i?"function"==typeof r?r(i,o):o(!0):o(!1!==i)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,r):n.push(r),c({action:"PUSH",location:r,index:t,entries:n})}}))},replace:function(e,t){var r=ie(e,t,d(),y.location);u.confirmTransitionTo(r,"REPLACE",n,(function(e){e&&(y.entries[y.index]=r,c({action:"REPLACE",location:r}))}))},go:g,goBack:function(){g(-1)},goForward:function(){g(1)},canGo:function(e){var t=y.index+e;return t>=0&&t=0&&t<=r),active:e===t},o.createElement(ct,{onClick:()=>this.setPage(t)},t+1)));return o.createElement("ul",{className:"pagination"},o.createElement(st,{disabled:0===e},o.createElement(ct,{previous:!0,onClick:()=>this.setPage(e-1)})),i,o.createElement(st,{disabled:e+1>=r},o.createElement(ct,{next:!0,onClick:()=>this.setPage(e+1)})))}}var ht=n("./src/db/exec/ValueExpr.ts");n("./src/calc2/components/pagedTable.scss");class ft extends o.Component{constructor(e){super(e),this.state={page:0}}render(){const{table:e,maxLinesPerPage:t,showPagination:n=!0,className:r=""}=this.props,{page:i}=this.state,a=e.getSchema();return o.createElement("div",{className:"result-table pagedTable"},o.createElement("table",{className:r},o.createElement("thead",null,o.createElement("tr",null,a.getColumns().map((e,t)=>o.createElement("th",{key:t},e.toString())))),o.createElement("tbody",null,e.getRows(i*t,t).map((e,t)=>o.createElement("tr",{key:`row ${t}`},e.map((e,t)=>{const n=a.getType(t);return o.createElement("td",{key:`value ${t}`,className:`${n} ${null===e?"null":""}`},Object(ht.d)(e,n))}))))),n?o.createElement("div",{className:"pagination"},o.createElement(dt,{total:e.getNumRows(),maxLinesPerPage:t,pageChanged:e=>this.setState({page:e}),currentPage:i})):null)}}var mt=n("./src/calc2/components/popover.tsx"),pt=n("./src/db/exec/RANode.ts");n("./src/calc2/components/raTree.scss");class gt extends o.Component{constructor(e){super(e)}render(){const{root:e,numTreeLabelColors:t=0,activeNode:n,setActiveNode:r}=this.props;let i=0;const a=new Map,s=e=>{const l=e instanceof pt.c||e instanceof pt.a?s(e.getChild()):null,u=e instanceof pt.a?s(e.getChild2()):null;let c="";if(e.hasMetaData("fromVariable")){const n=e.getMetaData("fromVariable");!1===a.has(n)&&a.set(n,i++);const r=a.get(n)%t;c=o.createElement("span",null," ",o.createElement("span",{className:`label label-info label-info-${r}`},n," =")," ")}return o.createElement("li",null,o.createElement("div",{className:nt({node:!0,active:e===n}),onClick:()=>r&&r(e)},o.createElement(mt.a,{title:o.createElement("div",null,c,o.createElement("div",{dangerouslySetInnerHTML:{__html:e.getFormulaHtml(!0,!1)}})),body:()=>{e.check(),e.getResult();const t=e.getSchema(),n=e.getResultNumRows();return o.createElement("div",null,"columns:",o.createElement("ul",null,t.getColumns().map((e,n)=>o.createElement("li",{key:n},e.toString()," ",o.createElement("small",{className:"muted text-muted"},t.getType(n))))),e.hasMetaData("naturalJoinConditions")?o.createElement("div",null,"natural join conditions:",o.createElement("ul",null,e.getMetaData("naturalJoinConditions").map(e=>o.createElement("li",{dangerouslySetInnerHTML:{__html:e.getFormulaHtml()}})))):null,o.createElement("p",null,`${n} row${1===n?"":"s"}`),!0===e.getMetaData("isInlineRelation")&&e.hasMetaData("inlineRelationDefinition")?o.createElement("pre",null,e.getMetaData("inlineRelationDefinition")):null)},placement:"right",trigger:"hover"},o.createElement("a",{className:"formula"},c,o.createElement("span",{dangerouslySetInnerHTML:{__html:e.getFormulaHtml(!1,!1)}}),o.createElement("br",null),o.createElement("span",{className:"resultCountLabel"},`${e.getResultNumRows()} row${1===e.getResultNumRows()?"":"s"}`)))),l||u?o.createElement("ul",null,l,u):null)};return o.createElement("div",{className:"ra-tree"},o.createElement("div",{className:"tree"},o.createElement("ul",null,s(e))))}}var yt=n("./node_modules/memoize-one/dist/memoize-one.esm.js");n("./src/calc2/components/result.scss");class bt extends o.Component{constructor(e){super(e),this.result=Object(yt.a)(e=>{try{return e.check(),e.getResult()}catch(e){return console.error(e),null}}),this.state={activeNode:e.root,result:null},this.setActiveNode=this.setActiveNode.bind(this)}setActiveNode(e){this.setState({activeNode:e})}render(){const{root:e,numTreeLabelColors:t}=this.props,{activeNode:n}=this.state,r=this.result(n);return o.createElement("div",{className:"ra-result clearfix"},o.createElement("div",null,o.createElement(gt,{root:e,activeNode:n,numTreeLabelColors:t,setActiveNode:this.setActiveNode})),o.createElement("div",{className:"result"},o.createElement("div",null,o.createElement("h4",{className:"result-formula",dangerouslySetInnerHTML:{__html:n.getFormulaHtml(!0,!1)}}),o.createElement("div",{className:"result-table"},r?o.createElement(ft,{className:"table table-condensed",maxLinesPerPage:10,table:r,showPagination:!0}):null))))}}var vt=n("./src/db/relalg.ts");const _t=["pi","sigma","rho","tau","<-","intersect","union","/","-","\\","x","cross join","join","inner join","natural join","left join","right join","left outer join","right outer join","full outer join","left semi join","right semi join","anti join","and","or","xor","||"];class wt extends o.Component{constructor(e){super(e),this.editorBase=null,this.state={autoreplaceOperatorsMode:"none"},this.replaceText=this.replaceText.bind(this)}render(){const{group:e}=this.props,{autoreplaceOperatorsMode:t}=this.state,n={};return e.tables.forEach(e=>{n[e.tableName]=e.relation}),o.createElement(tt.a,{textChange:e=>{},ref:e=>{e&&(this.editorBase=e)},mode:"relalg",execFunction:(e,t,i)=>{const a=Object(vt.b)(t,Object.keys(n));if(Object(vt.j)(a,n),null===a.child)throw a.assignments.length>0?new Error(Object(r.d)("calc.messages.error-query-missing-assignments-found")):new Error(Object(r.d)("calc.messages.error-query-missing"));const s=Object(vt.h)(a,n);return s.check(),e.historyAddEntry(t),e.props.enableInlineRelationEditor&&e.addInlineRelationMarkers(a),{result:o.createElement(bt,{root:s,numTreeLabelColors:6})}},tab:"relalg",linterFunction:(e,o,i)=>{const a=[],s=Object(vt.b)(i,Object.keys(n));Object(vt.j)(s,n);for(let e=0;e0?new Error(Object(r.d)("calc.messages.error-query-missing-assignments-found")):new Error(Object(r.d)("calc.messages.error-query-missing"));const l=Object(vt.h)(s,n);if(l.check(),!1===o.getDoc().somethingSelected()){const e=o.getDoc().getCursor(),{query:n,cursor:r}=Object(vt.f)(i,s.operatorPositions,{line:e.line+1,column:e.ch+1},t);n!==i&&(o.setValue(n),o.getDoc().setCursor({line:r.line-1,ch:r.column-1}))}return e.props.enableInlineRelationEditor&&e.addInlineRelationMarkers(s),a.concat(Object(tt.b)(l))},getHintsFunction:()=>[..._t,...Object(tt.c)(e)],enableInlineRelationEditor:!0,toolbar:[{math:!0,items:[{label:"π",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.projection",tooltip:"calc.editors.ra.toolbar.projection-content"},{label:"σ",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.selection",tooltip:"calc.editors.ra.toolbar.selection-content"},{label:"ρ",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.rename",tooltip:"calc.editors.ra.toolbar.rename-content"},{label:"←",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.rename-columns-operator",tooltip:"calc.editors.ra.toolbar.rename-columns-operator-content"},{label:"τ",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.orderBy",tooltip:"calc.editors.ra.toolbar.orderBy-content"},{label:"γ",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.groupBy",tooltip:"calc.editors.ra.toolbar.groupBy-content"}]},{math:!0,items:[{label:"∧",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.and",tooltip:"calc.editors.ra.toolbar.and-content"},{label:"∨",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.or",tooltip:"calc.editors.ra.toolbar.or-content"},{label:"¬",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.not",tooltip:"calc.editors.ra.toolbar.not-content"},{label:"=",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.equals",tooltip:"calc.editors.ra.toolbar.equals-content"},{label:"≠",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.not-equals",tooltip:"calc.editors.ra.toolbar.not-equals-content"},{label:"≥",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.greater-or-equals",tooltip:"calc.editors.ra.toolbar.greater-or-equals-content"},{label:"≤",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.lesser-or-equals",tooltip:"calc.editors.ra.toolbar.lesser-or-equals-content"}]},{math:!0,items:[{label:"∩",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.intersect",tooltip:"calc.editors.ra.toolbar.intersect-content"},{label:"∪",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.union",tooltip:"calc.editors.ra.toolbar.union-content"},{label:"÷",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.division",tooltip:"calc.editors.ra.toolbar.division-content"},{label:"-",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.subtraction",tooltip:"calc.editors.ra.toolbar.subtraction-content"}]},{math:!0,items:[{label:"⨯",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.cross-join",tooltip:"calc.editors.ra.toolbar.cross-join-content"},{label:"⨝",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.natural-join",tooltip:"calc.editors.ra.toolbar.natural-join-content"},{label:"⟕",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.left-outer-join",tooltip:"calc.editors.ra.toolbar.left-outer-join-content"},{label:"⟖",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.right-outer-join",tooltip:"calc.editors.ra.toolbar.right-outer-join-content"},{label:"⟗",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.full-outer-join",tooltip:"calc.editors.ra.toolbar.full-outer-join-content"},{label:"⋉",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.left-semi-join",tooltip:"calc.editors.ra.toolbar.left-semi-join-content"},{label:"⋊",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.right-semi-join",tooltip:"calc.editors.ra.toolbar.right-semi-join-content"},{label:"▷",onClick:this.replaceText,tooltipTitle:"calc.editors.ra.toolbar.anti-join",tooltip:"calc.editors.ra.toolbar.anti-join-content"}]},{math:!0,items:[{label:"=",onClick:e=>this.replaceText(e,"= "),tooltipTitle:"calc.editors.ra.toolbar.assignment",tooltip:"calc.editors.ra.toolbar.assignment-content"},{label:"--",onClick:e=>this.replaceText(e,"-- "),tooltipTitle:"calc.editors.ra.toolbar.single-line-comment",tooltip:"calc.editors.ra.toolbar.single-line-comment-content"},{label:"/*",onClick:e=>this.replaceText(e,"/* */"),tooltipTitle:"calc.editors.ra.toolbar.multi-line-comment",tooltip:"calc.editors.ra.toolbar.multi-line-comment-content"},{label:"{}",onClick:e=>this.replaceText(e,"{a:string, b:number, X.c:date\n\ta, 1, 1970-01-01\n}"),tooltipTitle:"calc.editors.ra.toolbar.inline-relation",tooltip:"calc.editors.ra.toolbar.inline-relation-content"}]},{items:[{label:o.createElement(et.a,{icon:Ze.q}),onClick:()=>{this.editorBase&&this.editorBase.inlineRelationEditorOpen(null)},tooltipTitle:"calc.editors.ra.toolbar.inline-relation-editor",tooltip:"calc.editors.ra.toolbar.inline-relation-editor-content"},{label:o.createElement(et.a,{icon:Ze.d}),onClick:e=>this.replaceText(e,"date('1970-01-01')"),tooltipTitle:"calc.editors.ra.toolbar.insert-date",tooltip:"calc.editors.ra.toolbar.insert-date-content"},{className:"showOnSM",label:o.createElement(et.a,{className:"editorButtonOnSM",icon:Ze.m}),onClick:()=>{this.props.relInsertModalToggle()},tooltipTitle:"calc.editors.insert-relation-title",tooltip:"calc.editors.insert-relation-tooltip"}]},{items:[{className:"dropdownToolbarButton",type:"dropdown",label:o.createElement(et.a,{className:"editorButtonOnSM",icon:Ze.l}),tooltipTitle:"calc.editors.ra.toolbar.autoreplace-operators.title",tooltip:"calc.editors.ra.toolbar.autoreplace-operators.header",elements:[{type:"header",label:o.createElement(r.b,{id:"calc.editors.ra.toolbar.autoreplace-operators.header"})},{type:"separator"},{label:o.createElement(r.b,{id:"calc.editors.ra.toolbar.autoreplace-operators.none"}),value:"none"},{label:o.createElement(r.b,{id:"calc.editors.ra.toolbar.autoreplace-operators.plain2math"}),value:"plain2math"},{label:o.createElement(r.b,{id:"calc.editors.ra.toolbar.autoreplace-operators.math2plain"}),value:"math2plain"}],value:t,onChange:e=>{this.setState({autoreplaceOperatorsMode:e},()=>{this.editorBase&&this.editorBase.forceLinterRun()})}}]}]})}replaceText(e,t){this.editorBase&&this.editorBase.replaceText(e,t)}replaceSelection(e,t){this.editorBase&&this.editorBase.replaceSelection(e,t)}}var Et=n("./src/calc2/utils/groupUtils.ts"),jt=n("./node_modules/reactstrap/lib/Button.js"),Ct=n.n(jt);class St extends o.Component{constructor(e){super(e),this.editorBase=null,this.autoParsingTimeout=null,this.replaceSelection=this.replaceSelection.bind(this)}static generateInfo(e){return{groupInfo:{source:"local",id:"draft",filename:"draft",index:0,maintainer:"",maintainerGroup:""},sourceInfo:{}}}render(){const{group:e}=this.props,t={};return e.tables.forEach(e=>{t[e.tableName]=e.relation}),o.createElement(tt.a,{textChange:e=>{},ref:e=>{e&&(this.editorBase=e)},mode:"relalg",disableHistory:!0,execButtonLabel:"calc.editors.group.button-exec",execFunction:(e,t,n)=>{const i=Object(vt.c)(t),{groupInfo:a,sourceInfo:s}=St.generateInfo(i),l=Object(Et.a)(i,a,s),u=o.createElement(o.Fragment,null,l.map((e,t)=>o.createElement("div",{key:t},o.createElement("h4",null,e.groupName.fallback," ",o.createElement(Ct.a,{color:"link",onClick:()=>{this.props.setDraft(e)}},o.createElement(r.b,{id:"calc.editors.group.button-use"}))),o.createElement("ul",{className:"table-list"},e.tables.map((e,n)=>{const r=l[t].tables[n].relation.getResult().getHtml();return o.createElement("li",{key:n},o.createElement("h5",null,e.tableName),o.createElement("div",{dangerouslySetInnerHTML:{__html:r}}))})))));return i.groups.forEach(t=>{e.addInlineRelationMarkers(t)}),{result:u}},tab:"group",linterFunction:(e,t,n)=>{const r=Object(vt.c)(n);r.groups.forEach(t=>{e.addInlineRelationMarkers(t)});const{groupInfo:o,sourceInfo:i}=St.generateInfo(r);return Object(Et.a)(r,o,i),[]},getHintsFunction:()=>[..._t,"group","group@de","group@en","group@es","description","description@de","description@en","description@es","category","category@de","category@en","category@es",...Object(tt.c)(e)],enableInlineRelationEditor:!0,toolbar:[{math:!1,items:[{label:o.createElement("span",null,o.createElement(et.a,{icon:Ze.q})," ",o.createElement(r.b,{id:"calc.editors.group.toolbar.add-new-relation"})),onClick:()=>{this.editorBase&&this.editorBase.inlineRelationEditorOpen(null)},tooltipTitle:"calc.editors.group.toolbar.add-new-relation",tooltip:"calc.editors.group.toolbar.add-new-relation-content"}]}]})}replaceSelection(e,t){this.editorBase&&this.editorBase.replaceSelection(e,t)}}const Ot=["distinct","select distinct","from","where","order by","asc","desc","inner join","inner","join","natural","union","intersect","outer join","natural join","left join","right join","left outer join","right outer join","full outer join","group by","having","limit","offset","and","or","xor","||"];class kt extends o.Component{constructor(e){super(e),this.editorBase=null,this.replaceText=this.replaceText.bind(this)}render(){const{group:e}=this.props,t={};return e.tables.forEach(e=>{t[e.tableName]=e.relation}),o.createElement(tt.a,{textChange:e=>{},ref:e=>{e&&(this.editorBase=e)},mode:"text/x-mysql",execFunction:(e,n,i)=>{const a=Object(vt.e)(n);if(Object(vt.j)(a,t),null===a.child)throw a.assignments.length>0?new Error(Object(r.d)("calc.messages.error-query-missing-assignments-found")):new Error(Object(r.d)("calc.messages.error-query-missing"));const s=Object(vt.i)(a,t);return s.check(),e.historyAddEntry(n),{result:o.createElement(bt,{root:s,numTreeLabelColors:6})}},tab:"sql",linterFunction:(e,n,o)=>{const i=[],a=Object(vt.e)(o);Object(vt.j)(a,t);for(let e=0;e0?new Error(Object(r.d)("calc.messages.error-query-missing-assignments-found")):new Error(Object(r.d)("calc.messages.error-query-missing"));const s=Object(vt.i)(a,t);return s.check(),i.concat(Object(tt.b)(s))},getHintsFunction:()=>[...Ot,...Object(tt.c)(e)],enableInlineRelationEditor:!0,toolbar:[{math:!1,items:[{label:"select",tooltipTitle:"calc.editors.sql.toolbar.select",tooltip:"calc.editors.sql.toolbar.select",onClick:e=>this.replaceText(e,"select distinct")},{label:"from",onClick:this.replaceText,tooltipTitle:"calc.editors.sql.toolbar.from",tooltip:"calc.editors.sql.toolbar.from"},{label:"where",onClick:this.replaceText,tooltipTitle:"calc.editors.sql.toolbar.where",tooltip:"calc.editors.sql.toolbar.where"},{label:"group",tooltipTitle:"calc.editors.sql.toolbar.group-by",tooltip:"calc.editors.sql.toolbar.group-by",onClick:e=>this.replaceText(e,"group by")},{label:"having",onClick:this.replaceText,tooltipTitle:"calc.editors.sql.toolbar.having",tooltip:"calc.editors.sql.toolbar.having"},{label:"order",tooltipTitle:"calc.editors.sql.toolbar.order-by",tooltip:"calc.editors.sql.toolbar.order-by",onClick:e=>this.replaceText(e,"order by")},{label:"limit",onClick:this.replaceText,tooltipTitle:"calc.editors.sql.toolbar.limit",tooltip:"calc.editors.sql.toolbar.limit"},{label:o.createElement(et.a,{className:"showOnSM",icon:Ze.i}),onClick:e=>this.props.relInsertModalToggle,tooltipTitle:"calc.editors.insert-relation-title",tooltip:"calc.editors.insert-relation-tooltip"}]},{math:!0,items:[{label:o.createElement("i",{className:"fa fa-calendar"}),onClick:e=>this.replaceText(e,"date('1970-01-01')"),tooltipTitle:"calc.editors.sql.toolbar.insert-date",tooltip:"calc.editors.sql.toolbar.insert-date-content"}]}]})}replaceText(e,t){this.editorBase&&this.editorBase.replaceText(e,t)}replaceSelection(e,t){this.editorBase&&this.editorBase.replaceSelection(e,t)}}function Tt(e,t){return e[t]?e[t]:e.fallback}var Mt=n("./node_modules/react-toastify/esm/react-toastify.js"),xt=(n("./node_modules/react-toastify/dist/ReactToastify.css"),{tabs:s.a.bool,pills:s.a.bool,vertical:s.a.oneOfType([s.a.bool,s.a.string]),horizontal:s.a.string,justified:s.a.bool,fill:s.a.bool,navbar:s.a.bool,card:s.a.bool,tag:ot.o,className:s.a.string,cssModule:s.a.object}),Lt=function(e){var t=e.className,n=e.cssModule,r=e.tabs,o=e.pills,a=e.vertical,s=e.horizontal,l=e.justified,u=e.fill,c=e.navbar,d=e.card,h=e.tag,f=Object(p.a)(e,["className","cssModule","tabs","pills","vertical","horizontal","justified","fill","navbar","card","tag"]),g=Object(ot.k)(rt()(t,c?"navbar-nav":"nav",!!s&&"justify-content-"+s,function(e){return!1!==e&&(!0===e||"xs"===e?"flex-column":"flex-"+e+"-column")}(a),{"nav-tabs":r,"card-header-tabs":d&&r,"nav-pills":o,"card-header-pills":d&&o,"nav-justified":l,"nav-fill":u}),n);return i.a.createElement(h,Object(m.a)({},f,{className:g}))};Lt.propTypes=xt,Lt.defaultProps={tag:"ul",vertical:!1};var Rt=Lt,At=n("./node_modules/@babel/runtime/helpers/esm/objectSpread.js"),Dt=n("./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js"),Nt=n("./node_modules/react-popper/lib/esm/Manager.js"),Pt=i.a.createContext({}),It={a11y:s.a.bool,disabled:s.a.bool,direction:s.a.oneOf(["up","down","left","right"]),group:s.a.bool,isOpen:s.a.bool,nav:s.a.bool,active:s.a.bool,addonType:s.a.oneOfType([s.a.bool,s.a.oneOf(["prepend","append"])]),size:s.a.string,tag:ot.o,toggle:s.a.func,children:s.a.node,className:s.a.string,cssModule:s.a.object,inNavbar:s.a.bool,setActiveFromChild:s.a.bool},Ht=[ot.j.space,ot.j.enter,ot.j.up,ot.j.down,ot.j.end,ot.j.home],Yt=function(e){function t(t){var n;return(n=e.call(this,t)||this).addEvents=n.addEvents.bind(Object(Dt.a)(n)),n.handleDocumentClick=n.handleDocumentClick.bind(Object(Dt.a)(n)),n.handleKeyDown=n.handleKeyDown.bind(Object(Dt.a)(n)),n.removeEvents=n.removeEvents.bind(Object(Dt.a)(n)),n.toggle=n.toggle.bind(Object(Dt.a)(n)),n.containerRef=i.a.createRef(),n}Object(G.a)(t,e);var n=t.prototype;return n.getContextValue=function(){return{toggle:this.toggle,isOpen:this.props.isOpen,direction:"down"===this.props.direction&&this.props.dropup?"up":this.props.direction,inNavbar:this.props.inNavbar,disabled:this.props.disabled}},n.componentDidMount=function(){this.handleProps()},n.componentDidUpdate=function(e){this.props.isOpen!==e.isOpen&&this.handleProps()},n.componentWillUnmount=function(){this.removeEvents()},n.getContainer=function(){return this.containerRef.current},n.getMenuCtrl=function(){return this._$menuCtrl||(this._$menuCtrl=this.getContainer().querySelector("[aria-expanded]")),this._$menuCtrl},n.getMenuItems=function(){return[].slice.call(this.getContainer().querySelectorAll('[role="menuitem"]'))},n.addEvents=function(){var e=this;["click","touchstart","keyup"].forEach((function(t){return document.addEventListener(t,e.handleDocumentClick,!0)}))},n.removeEvents=function(){var e=this;["click","touchstart","keyup"].forEach((function(t){return document.removeEventListener(t,e.handleDocumentClick,!0)}))},n.handleDocumentClick=function(e){if(!e||3!==e.which&&("keyup"!==e.type||e.which===ot.j.tab)){var t=this.getContainer();(!t.contains(e.target)||t===e.target||"keyup"===e.type&&e.which!==ot.j.tab)&&this.toggle(e)}},n.handleKeyDown=function(e){var t=this;if(!/input|textarea/i.test(e.target.tagName)&&(ot.j.tab!==e.which||"menuitem"===e.target.getAttribute("role")&&this.props.a11y)&&((-1!==Ht.indexOf(e.which)||e.which>=48&&e.which<=90)&&e.preventDefault(),!this.props.disabled&&(this.getMenuCtrl()===e.target&&(!this.props.isOpen&&[ot.j.space,ot.j.enter,ot.j.up,ot.j.down].indexOf(e.which)>-1?(this.toggle(e),setTimeout((function(){return t.getMenuItems()[0].focus()}))):this.props.isOpen&&e.which===ot.j.esc&&this.toggle(e)),this.props.isOpen&&"menuitem"===e.target.getAttribute("role"))))if([ot.j.tab,ot.j.esc].indexOf(e.which)>-1)this.toggle(e),this.getMenuCtrl().focus();else if([ot.j.space,ot.j.enter].indexOf(e.which)>-1)e.target.click(),this.getMenuCtrl().focus();else if([ot.j.down,ot.j.up].indexOf(e.which)>-1||[ot.j.n,ot.j.p].indexOf(e.which)>-1&&e.ctrlKey){var n=this.getMenuItems(),r=n.indexOf(e.target);ot.j.up===e.which||ot.j.p===e.which&&e.ctrlKey?r=0!==r?r-1:n.length-1:(ot.j.down===e.which||ot.j.n===e.which&&e.ctrlKey)&&(r=r===n.length-1?0:r+1),n[r].focus()}else if(ot.j.end===e.which){var o=this.getMenuItems();o[o.length-1].focus()}else if(ot.j.home===e.which){this.getMenuItems()[0].focus()}else if(e.which>=48&&e.which<=90)for(var i=this.getMenuItems(),a=String.fromCharCode(e.which).toLowerCase(),s=0;s-1?"menuitem":void 0,n=Object(ot.l)(this.props,["toggle"]),r=n.className,o=n.cssModule,a=n.divider,s=n.tag,l=n.header,u=n.active,c=Object(p.a)(n,["className","cssModule","divider","tag","header","active"]),d=Object(ot.k)(rt()(r,{disabled:c.disabled,"dropdown-item":!a&&!l,active:u,"dropdown-header":l,"dropdown-divider":a}),o);return"button"===s&&(l?s="h6":a?s="div":c.href&&(s="a")),i.a.createElement(s,Object(m.a)({type:"button"===s&&(c.onClick||this.props.toggle)?"button":void 0},c,{tabIndex:e,role:t,className:d,onClick:this.onClick}))},t}(i.a.Component);tn.propTypes=en,tn.defaultProps={tag:"button",toggle:!0},tn.contextType=Pt;var nn=tn,rn={tag:ot.o,active:s.a.bool,className:s.a.string,cssModule:s.a.object},on=function(e){var t=e.className,n=e.cssModule,r=e.active,o=e.tag,a=Object(p.a)(e,["className","cssModule","active","tag"]),s=Object(ot.k)(rt()(t,"nav-item",!!r&&"active"),n);return i.a.createElement(o,Object(m.a)({},a,{className:s}))};on.propTypes=rn,on.defaultProps={tag:"li"};var an=on,sn={tag:ot.o,innerRef:s.a.oneOfType([s.a.object,s.a.func,s.a.string]),disabled:s.a.bool,active:s.a.bool,className:s.a.string,cssModule:s.a.object,onClick:s.a.func,href:s.a.any},ln=function(e){function t(t){var n;return(n=e.call(this,t)||this).onClick=n.onClick.bind(Object(Dt.a)(n)),n}Object(G.a)(t,e);var n=t.prototype;return n.onClick=function(e){this.props.disabled?e.preventDefault():("#"===this.props.href&&e.preventDefault(),this.props.onClick&&this.props.onClick(e))},n.render=function(){var e=this.props,t=e.className,n=e.cssModule,r=e.active,o=e.tag,a=e.innerRef,s=Object(p.a)(e,["className","cssModule","active","tag","innerRef"]),l=Object(ot.k)(rt()(t,"nav-link",{disabled:s.disabled,active:r}),n);return i.a.createElement(o,Object(m.a)({},s,{ref:a,onClick:this.onClick,className:l}))},t}(i.a.Component);ln.propTypes=sn,ln.defaultProps={tag:"a"};var un=ln,cn=n("./node_modules/react-lifecycles-compat/react-lifecycles-compat.es.js"),dn=i.a.createContext({}),hn={tag:ot.o,activeTab:s.a.any,className:s.a.string,cssModule:s.a.object},fn=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={activeTab:n.props.activeTab},n}return Object(G.a)(t,e),t.getDerivedStateFromProps=function(e,t){return t.activeTab!==e.activeTab?{activeTab:e.activeTab}:null},t.prototype.render=function(){var e=this.props,t=e.className,n=e.cssModule,r=e.tag,o=Object(ot.l)(this.props,Object.keys(hn)),a=Object(ot.k)(rt()("tab-content",t),n);return i.a.createElement(dn.Provider,{value:{activeTabId:this.state.activeTab}},i.a.createElement(r,Object(m.a)({},o,{className:a})))},t}(o.Component);Object(cn.polyfill)(fn);var mn=fn;fn.propTypes=hn,fn.defaultProps={tag:"div"};var pn={tag:ot.o,className:s.a.string,cssModule:s.a.object,tabId:s.a.any};function gn(e){var t=e.className,n=e.cssModule,r=e.tabId,o=e.tag,a=Object(p.a)(e,["className","cssModule","tabId","tag"]),s=function(e){return Object(ot.k)(rt()("tab-pane",t,{active:r===e}),n)};return i.a.createElement(dn.Consumer,null,(function(e){var t=e.activeTabId;return i.a.createElement(o,Object(m.a)({},a,{className:s(t)}))}))}gn.propTypes=pn,gn.defaultProps={tag:"div"};var yn=n("./node_modules/reactstrap/es/Modal.js"),bn=n("./node_modules/reactstrap/es/ModalHeader.js"),vn=n("./node_modules/reactstrap/es/ModalBody.js"),_n=n("./node_modules/reactstrap/es/ModalFooter.js");n("./src/calc2/components/groupRelationList.scss");const wn=({tables:e,replace:t,onElementClick:n})=>o.createElement("div",{className:"groupRelationList"},o.createElement("ul",null,e.map(e=>{const{columnNames:r,columnTypes:i,tableName:a}=e;return o.createElement("li",{key:a},o.createElement("span",{className:"clickable",onClick:()=>{t&&t(a),n&&n()}},a),o.createElement("ul",null,e.columnNames.map((e,r)=>o.createElement("li",{key:e},o.createElement("span",{className:"clickable",onClick:()=>{t&&t(e),n&&n()}},e," ",o.createElement("small",{className:"muted text-muted"},i[r]))," "))))})));var En=n("./node_modules/immutable/dist/immutable.es.js");class jn extends o.Component{constructor(e){super(e),this.getGroupsByHeadlineName=Object(yt.a)((e,t)=>{let n=En.b();const o=e=>Tt(e,t);for(const t of e.values()){let e=null;!0===t.isDraft?e=r.c.t("calc.maintainer-groups.temp"):t.category&&(e=o({lang:"",fallback:t.groupInfo.maintainerGroup}));const i=[...n.get(e)||[],t];i.sort((e,t)=>o(e.groupName).localeCompare(o(t.groupName))),n=n.set(e,i)}return n}),this.gistLink=""}render(){const{current:e,locale:t}=this.props,n=this.getGroupsByHeadlineName(this.props.groups,t);return o.createElement("div",{className:"container"},o.createElement("div",{className:"row"},o.createElement("div",{className:"col-md-6"},o.createElement("h4",null,o.createElement(r.b,{id:"calc.menu.headline"})),o.createElement("ul",{id:"groups-selector-list"},n.map((n,i)=>o.createElement("li",{key:`${i}`},i||o.createElement(r.b,{id:"calc.maintainer-groups.misc"}),o.createElement("ul",null,n.map((n,r)=>{const{groupName:i,groupInfo:a}=n,s=`/relax/calc/${a.source}/${a.id}/${a.filename}/${a.index}`;return o.createElement("li",{key:s,className:nt({active:e&&e.group.groupInfo===n.groupInfo})},o.createElement(Qe,{to:s,onClick:()=>{this.props.datasetLoaded()}},Tt(i,t)))})))).valueSeq().toArray())),o.createElement("div",{className:"col-md-6 align-text-top align-top"},o.createElement("h4",null,o.createElement(r.b,{id:"calc.menu.load-gist-headline"})),o.createElement("input",{type:"text",className:"form-control gist-load-input",placeholder:"","data-i18n":"[placeholder]calc.menu.load-gist-insert-placeholder",size:32,onChange:e=>{this.gistLink="/relax/calc/gist/"+e.target.value}}),o.createElement("button",{onClick:()=>{document.location.href=this.gistLink,this.props.datasetLoaded()},type:"button",className:"fullWidthBtn btn btn-secondary gist-load-btn"},o.createElement(r.b,{id:"calc.menu.load-gist-button"})),o.createElement("hr",null),o.createElement("h4",null,o.createElement(r.b,{id:"calc.menu.create-own-dataset-headline"})),o.createElement("p",null,o.createElement(r.b,{id:"calc.menu.create-own-dataset-text"})," ",o.createElement(Xe,{to:"/help#tutorial-maintainer"},o.createElement(r.b,{id:"calc.menu.create-own-dataset-text-link"}))),o.createElement("button",{type:"button",className:"fullWidthBtn btn btn-secondary open-group-new-btn",onClick:()=>{this.props.loadGroupTab(!1)}},o.createElement("i",{className:"fa fa-plus-square-o fa-lg"})," ",o.createElement("span",null,o.createElement(r.b,{id:"calc.menu.create-own-dataset-button-new"}))),o.createElement("button",{type:"button",className:"fullWidthBtn btn btn-secondary open-group-current-btn",onClick:()=>{this.props.loadGroupTab(!0)}},o.createElement("i",{className:"fa fa-pencil-square-o fa-lg"})," ",o.createElement("span",null,o.createElement(r.b,{id:"calc.menu.create-own-dataset-button-modify"}))))))}}const Cn=z(e=>({groups:e.groups.groups,current:e.groups.current,locale:e.session.locale}))(jn);var Sn={light:s.a.bool,dark:s.a.bool,full:s.a.bool,fixed:s.a.string,sticky:s.a.string,color:s.a.string,role:s.a.string,tag:ot.o,className:s.a.string,cssModule:s.a.object,expand:s.a.oneOfType([s.a.bool,s.a.string])},On=function(e){var t,n=e.expand,r=e.className,o=e.cssModule,a=e.light,s=e.dark,l=e.fixed,u=e.sticky,c=e.color,d=e.tag,h=Object(p.a)(e,["expand","className","cssModule","light","dark","fixed","sticky","color","tag"]),f=Object(ot.k)(rt()(r,"navbar",function(e){return!1!==e&&(!0===e||"xs"===e?"navbar-expand":"navbar-expand-"+e)}(n),((t={"navbar-light":a,"navbar-dark":s})["bg-"+c]=c,t["fixed-"+l]=l,t["sticky-"+u]=u,t)),o);return i.a.createElement(d,Object(m.a)({},h,{className:f}))};On.propTypes=Sn,On.defaultProps={tag:"nav",expand:!1};var kn=On,Tn={tag:ot.o,className:s.a.string,cssModule:s.a.object},Mn=function(e){var t=e.className,n=e.cssModule,r=e.tag,o=Object(p.a)(e,["className","cssModule","tag"]),a=Object(ot.k)(rt()(t,"navbar-brand"),n);return i.a.createElement(r,Object(m.a)({},o,{className:a}))};Mn.propTypes=Tn,Mn.defaultProps={tag:"a"};var xn=Mn,Ln=n("./node_modules/reactstrap/lib/NavLink.js"),Rn=n.n(Ln);class An extends o.Component{constructor(e){super(e),this.state={},this.changeLocale=this.changeLocale.bind(this)}changeLocale(e){r.c.language!==e&&window.confirm("Reload page to change language?")&&(r.c.changeLanguage(e),window.location.reload())}render(){return o.createElement(kn,{color:"light",light:!0,expand:"md",className:"desktopNavbar"},o.createElement(xn,{href:"/"},"RelaX"),o.createElement(Rt,{className:"ml-auto",navbar:!0},o.createElement(an,{className:"navItemSpace"},o.createElement(Rn.a,{href:"/relax/calc"},o.createElement(et.a,{icon:Ze.c})," Calculator")),o.createElement(Bt,{nav:!0,inNavbar:!0,className:"navItemSpace"},o.createElement(Gt,{nav:!0,caret:!0},o.createElement(et.a,{icon:Ze.j})," ",o.createElement(r.b,{id:"calc.navigation.language"})),o.createElement(Zt,{right:!0},o.createElement(nn,{onClick:()=>this.changeLocale("en")},"en"),o.createElement(nn,{onClick:()=>this.changeLocale("de")},"de"),o.createElement(nn,{onClick:()=>this.changeLocale("es")},"es"),o.createElement(nn,{onClick:()=>this.changeLocale("kr")},"kr"),o.createElement(nn,{onClick:()=>this.changeLocale("pt")},"pt"))),o.createElement(an,{className:"navItemSpace"},o.createElement(Rn.a,{href:"https://github.com/dbis-uibk/relax/issues"},o.createElement(et.a,{icon:Ze.f})," ",o.createElement(r.b,{id:"calc.navigation.feedback"}))),o.createElement(an,{className:"navItemSpace"},o.createElement(Rn.a,{href:"/relax/help"},o.createElement(et.a,{icon:Ze.p})," ",o.createElement(r.b,{id:"calc.navigation.help"}))),o.createElement(an,{className:"navItemSpace"},o.createElement(Rn.a,{href:"/relax/imprint"},o.createElement(et.a,{icon:Ze.a})," ",o.createElement(r.b,{id:"calc.navigation.imprint"})))))}}n("./src/calc2/components/calculator.scss");class Dn extends o.Component{constructor(e){super(e),this.refEditorRelalg=o.createRef(),this.refEditorSql=o.createRef(),this.refEditorGroup=o.createRef(),Mt.b.configure(),this.state={activeTab:"relalg",datasetModal:!1,relationModal:!1},this.getCurrentEditor=this.getCurrentEditor.bind(this),this.toggleDatasetModal=this.toggleDatasetModal.bind(this),this.insertRelationToggle=this.insertRelationToggle.bind(this),this.loadGroupEditor=this.loadGroupEditor.bind(this)}toggleDatasetModal(){this.setState({datasetModal:!this.state.datasetModal})}insertRelationToggle(){this.setState({relationModal:!this.state.relationModal})}changeLocale(e){r.c.language!==e&&window.confirm("Reload page to change language?")&&(r.c.changeLanguage(e),window.location.reload())}getCurrentEditor(){switch(this.state.activeTab){case"sql":return this.refEditorSql;case"relalg":return this.refEditorRelalg;case"group":return this.refEditorGroup}}loadGroupEditor(e){let t="-- this is an example\ngroup: nameOfTheNewGroup \n\nA = {\na:string, b:number\nexample, 42\n}";!0===e&&(t=this.props.group.definition),this.setState({activeTab:"group"},()=>{const e=this.getCurrentEditor().current;e&&e.editorBase.state.editor.setValue(t),this.toggleDatasetModal()})}render(){const{group:e,locale:t}=this.props,{activeTab:n}=this.state;return o.createElement("div",{className:"view-max"},o.createElement(An,null),o.createElement("div",{className:"calculator"},o.createElement(Mt.a,{enableMultiContainer:!0,position:Mt.b.POSITION.TOP_RIGHT}),o.createElement("div",{className:"row"},o.createElement("div",{className:"d-none d-xs-block d-sm-block d-md-block col-lg-1 col-xl-2"}),o.createElement("div",{className:"groups-container col-xs-2 col-sm-2 col-md-2 col-lg-2 col-xl-2"},o.createElement("button",{className:"btn btn-default dropdown-toggle",type:"button",id:"dropdownMenu1",onClick:this.toggleDatasetModal,style:{width:"100%",textAlign:"left",textOverflow:"ellipsis",overflow:"hidden"}},o.createElement("span",null,"Select DB (",Tt(e.groupName,t),")"),o.createElement("span",{className:"caret",style:{display:"block",position:"absolute",top:"50%",right:"10px"}})),o.createElement("div",null,o.createElement(wn,{tables:e.tables,replace:e=>{const t=this.getCurrentEditor();t&&t.current&&t.current.replaceSelection(e)},onElementClick:null}))),o.createElement("div",{className:"calculator-container col-xs-12 col-sm-12 col-md-12 col-lg-8 col-xl-6"},o.createElement(Rt,{tabs:!0},o.createElement(Bt,{nav:!0,inNavbar:!0,className:"showOnSM"},o.createElement(Gt,{nav:!0},o.createElement(et.a,{icon:Ze.b})),o.createElement(Zt,null,o.createElement(nn,{href:"/relax/calc"},o.createElement(et.a,{icon:Ze.c})," ",o.createElement(r.b,{id:"calc.navigation.calc"})),o.createElement(nn,{href:"/relax/help"},o.createElement(et.a,{icon:Ze.f})," ",o.createElement(r.b,{id:"calc.navigation.help"})),o.createElement(nn,{href:"https://github.com/dbis-uibk/relax/issues"},o.createElement(et.a,{icon:Ze.p})," ",o.createElement(r.b,{id:"calc.navigation.feedback"})),o.createElement(nn,{onClick:this.toggleDatasetModal},o.createElement(et.a,{icon:Ze.g})," ",o.createElement(r.b,{id:"calc.menu.datasets"})),o.createElement(nn,{divider:!0}),o.createElement(nn,{onClick:()=>this.changeLocale("en")},"en"),o.createElement(nn,{onClick:()=>this.changeLocale("de")},"de"),o.createElement(nn,{onClick:()=>this.changeLocale("es")},"es"),o.createElement(nn,{onClick:()=>this.changeLocale("kr")},"kr"))),o.createElement(an,null,o.createElement(un,{className:nt({active:"relalg"===n}),onClick:()=>{this.setState({activeTab:"relalg"})}},o.createElement("span",{className:"hideOnSM"},o.createElement(r.b,{id:"calc.editors.ra.tab-name"})),o.createElement("span",{className:"showOnSM"},o.createElement(r.b,{id:"calc.editors.ra.tab-name-short"})))),o.createElement(an,null,o.createElement(un,{className:nt({active:"sql"===n}),onClick:()=>{this.setState({activeTab:"sql"})}},o.createElement("span",{className:"hideOnSM"},o.createElement(r.b,{id:"calc.editors.sql.tab-name"})),o.createElement("span",{className:"showOnSM"},o.createElement(r.b,{id:"calc.editors.sql.tab-name-short"})))),o.createElement(an,null,o.createElement(un,{className:nt({active:"group"===n}),onClick:()=>{this.setState({activeTab:"group"})}},o.createElement("span",{className:"hideOnSM"},o.createElement(r.b,{id:"calc.editors.group.tab-name"})),o.createElement("span",{className:"showOnSM"},o.createElement(r.b,{id:"calc.editors.group.tab-name-short"}))))),o.createElement(mn,{activeTab:this.state.activeTab,className:"tab-content-border"},o.createElement(gn,{tabId:"relalg"},o.createElement(wt,{group:e,ref:this.refEditorRelalg,relInsertModalToggle:this.insertRelationToggle})),o.createElement(gn,{tabId:"sql"},o.createElement(kt,{group:e,ref:this.refEditorSql,relInsertModalToggle:this.insertRelationToggle})),o.createElement(gn,{tabId:"group"},o.createElement(St,{group:e,ref:this.refEditorGroup,setDraft:this.props.setDraft}))))),o.createElement(yn.a,{isOpen:this.state.datasetModal,toggle:this.toggleDatasetModal},o.createElement(bn.a,{toggle:this.toggleDatasetModal},Tt(e.groupName,t)),o.createElement(vn.a,null,o.createElement("div",null,o.createElement(Cn,{datasetLoaded:()=>{this.setState({datasetModal:!1})},loadGroupTab:e=>{this.loadGroupEditor(e)}}))),o.createElement(_n.a,null,o.createElement(zt.a,{color:"secondary",onClick:this.toggleDatasetModal},Object(r.d)("calc.result.modal.close")))),o.createElement(yn.a,{isOpen:this.state.relationModal,toggle:this.insertRelationToggle},o.createElement(bn.a,{toggle:this.insertRelationToggle},Tt(e.groupName,t)),o.createElement(vn.a,null,o.createElement(wn,{tables:e.tables,replace:e=>{const t=this.getCurrentEditor();t&&t.current&&t.current.replaceSelection(e)},onElementClick:this.insertRelationToggle})),o.createElement(_n.a,null,o.createElement(zt.a,{color:"secondary",onClick:this.insertRelationToggle},Object(r.d)("calc.result.modal.close"))))))}}class Nn extends o.Component{constructor(e){super(e),this.init=!1}componentDidUpdate(e){const{params:t}=this.props.match,{params:n}=e.match;!1!==this.init&&t.source===n.source&&t.id===n.id&&t.filename===n.filename&&t.index===n.index||(this.init=!0,this.loadGroup(this.props))}loadGroup(e){const{source:t,id:n,filename:r,index:o}=e.match.params;this.props.loadGroup(t,n,r,Number.parseInt(o,10),"","")}componentWillReceiveProps(e){const{params:t}=this.props.match,{params:n}=e.match;n.source!==t.source||n.id!==t.id||n.filename!==t.filename||(n.index,t.index)}render(){const{locale:e}=this.props,{current:t}=this.props.groups;return null!==t?o.createElement(Dn,{group:t.group,locale:e,setDraft:this.props.setDraft}):o.createElement("div",null,"loading ...")}}const Pn=z(e=>({groups:e.groups,locale:e.session.locale}),e=>({loadGroup:(t,n,r,o,i,a)=>{e({type:"GROUPS_LOAD_REQUEST",source:t,id:n,maintainer:i,maintainerGroup:a,setCurrent:{filename:r,index:o}})},setDraft:t=>{e({type:"GROUP_SET_DRAFT",draft:t})}}))(Nn);var In=n("./node_modules/jquery/dist/jquery.js"),Hn=n("./node_modules/railroad-diagrams/railroad-diagrams.js");n("./node_modules/railroad-diagrams/railroad-diagrams.css");class Yn extends o.Component{componentDidMount(){const e=q.findDOMNode(this);if(!e)throw new Error("could not find node");this.props.diagram.addTo(e)}shouldComponentUpdate(e){return this.props.diagram!==e.diagram}render(){return o.createElement("div",null)}}n("./src/calc2/views/help.css");class Fn extends o.Component{constructor(e){super(e),this.state={},this.changeLocale=this.changeLocale.bind(this)}changeLocale(e){r.c.language!==e&&window.confirm("Reload page to change language?")&&(r.c.changeLanguage(e),window.location.reload())}render(){return o.createElement(kn,{color:"light",light:!0,expand:"md",className:"mobileNavbar"},o.createElement(Bt,null,o.createElement(Gt,{nav:!0},o.createElement(et.a,{icon:Ze.b})),o.createElement(Zt,null,o.createElement(nn,{href:"/relax/calc"},o.createElement(et.a,{icon:Ze.c})," ",o.createElement(r.b,{id:"calc.navigation.calc"})),o.createElement(nn,{href:"/relax/help"},o.createElement(et.a,{icon:Ze.f})," ",o.createElement(r.b,{id:"calc.navigation.help"})),o.createElement(nn,{href:"/relax/imprint"},o.createElement(et.a,{icon:Ze.a})," ",o.createElement(r.b,{id:"calc.navigation.imprint"})),o.createElement(nn,{href:"https://github.com/dbis-uibk/relax/issues"},o.createElement(et.a,{icon:Ze.p})," ",o.createElement(r.b,{id:"calc.navigation.feedback"})),o.createElement(nn,{divider:!0}),o.createElement(nn,{onClick:()=>this.changeLocale("en")},"en"),o.createElement(nn,{onClick:()=>this.changeLocale("de")},"de"),o.createElement(nn,{onClick:()=>this.changeLocale("es")},"es"),o.createElement(nn,{onClick:()=>this.changeLocale("kr")},"kr"))),o.createElement(xn,{href:"/"},"RelaX"))}}class Wn extends o.Component{componentDidMount(){const e=In("#toc");let t=0,n=null,r=null,o=null;In("h2, h3, h4, h5, h6").each((function(){const i=In(this),a=i.attr("name")||i.attr("id")||"tocId"+t++;i.attr("name",a),i.attr("id",a);const s=''+i.text()+"";if(i.is("h2"))e.append(In(`
        ${s}
          `)),n=e.find("ul:last");else if(i.is("h3")){if(!n)throw new Error("malformed headings");n.append(In(`
        • ${s}
          • `)),r=n.find("ul:last")}else if(i.is("h4")){if(!r)throw new Error("malformed headings");r.append(In(`
          • ${s}
            • `)),o=r.find("ul:last")}else{if(!o)throw new Error("malformed headings");o.append(`
            • ${s}
            • `)}})),In("h1[id], h2[id], h3[id], h4[id], h5[id], h6[id]").each((function(){In(this).append(` `)}))}render(){return o.createElement("div",{className:"view-max"},o.createElement(An,null),o.createElement(Fn,null),o.createElement("div",{className:"view-content"},o.createElement("div",{className:"container"},o.createElement("h1",{id:"help"},"RelaX - Help"),o.createElement("div",{id:"toc"}),o.createElement("h2",{id:"tutorial-user"},"Tutorial - user"),o.createElement("h3",{id:"tutorial-user-coreconcepts"},"The core concepts"),o.createElement("p",null,"The goal of this tutorial is to give a quick introduction how to use the relational algebra calculator and its concepts. It assumes that you already know the relational algebra or are learning it from other sources."),o.createElement("p",null,"There is no real standard for the relational algebra like there is for SQL. So every book or teacher might have its slightly different interpretation and notation.",o.createElement("br",null),'The goal of this progam was to support the most commonly used "mathematical" notation used by ',o.createElement("a",{href:"http://infolab.stanford.edu/~ullman/dscb.html"},"Database Systems The Complete Book 2nd Edition by Hector Garcia-Molina, Jeff Ullman, and Jennifer Widom"),", ",o.createElement("a",{href:"http://www3.in.tum.de/teaching/bookDBMSeinf/",lang:"de"},"Datenbanksysteme: Eine Einführung by Alfons Kemper and André Eickler")," and ",o.createElement("a",{href:"http://en.wikipedia.org/wiki/Relational_algebra"},"Wikipedia - Relational Algebra")," and others."),o.createElement("h4",{id:"tutorial-user-relations"},"relations"),o.createElement("p",null,"The core element of the calculator is the relation (or table) which consists of a fixed number of attributes (or columns) in a fixed order (this is called the schema of the relation) and a set of tuples or rows containing the specific values."),o.createElement("p",null,"Each attribute has three distinct properties: its type, its position and its name."),o.createElement("p",null,"The type or domain of an attribute is either ",o.createElement("i",null,"string"),", ",o.createElement("i",null,"number"),", ",o.createElement("i",null,"date")," or ",o.createElement("i",null,"boolean"),".",o.createElement("br",null),"The type is used for example to determine if two values can be compared in a boolean expression or if two schemas are union compatible. In most cases the type of the attributes are obvious if you look at the values."),o.createElement("p",null,"The position of each attribute in a schema is fixed and can be used to adress the attributes.",o.createElement("br",null),"An example would be the projection of the first and third attribute or column of an arbitrary relation R: ",o.createElement("code",{className:"example block"},"π [1], [3] ( R )")),o.createElement("p",null,"The full qualified name of the attribute is a unique identifier of the attribute within the schema of its relation. It consists of the name itself and a relation qualifier and are written like in SQL as ",o.createElement("code",null,"R.a"),"where a is the name and R is the relation qualifier.",o.createElement("br",null),"An example would be the projectoin of the attributes a, b from a relation R: ",o.createElement("code",{className:"example block"},"π R.a, R.b ( R )"),o.createElement("br",null),"The default relation qualifier of each attribute is the name of its relation.",o.createElement("br",null),"If the attributes name without the qualifier is unique within the relation's schema, it also can be used to address a specific attribute.",o.createElement("br",null),"The previous example could also be written as ",o.createElement("code",null,"π a, b ( R )"),"."),o.createElement("p",null,"Each relation has a set of tuples (or rows). This means that there are no duplicate tuples within one relation and the duplicate-elimination is implicitly executed after every single step of the calculation.",o.createElement("br",null),"The tuples in the calculator have a defined order and unlike a normal database system all operations are implemented to preserve that order. This should help the users to see what has changed from one step to the next."),o.createElement("p",null,"so far we covered that"),o.createElement("ul",null,o.createElement("li",null,"relations are the core elements,"),o.createElement("li",null,"relations have a schema and a set of tuples,"),o.createElement("li",null,"each attribute in the schema has",o.createElement("ul",null,o.createElement("li",null,"data-type"),o.createElement("li",null,"a position"),o.createElement("li",null,"a fully qualified name (RELATION.attributename)"))),o.createElement("li",null,"and that each attribute can be addressed within an operation using",o.createElement("ul",null,o.createElement("li",null,"its position e.g. ",o.createElement("code",{className:""},"π [1], [2] ( R )"),","),o.createElement("li",null,"the attribute name e.g. ",o.createElement("code",{className:""},"π a, b ( R )")),o.createElement("li",null,"or its full quallified name if the unqualified is not unique e.g. ",o.createElement("code",{className:""},"π R.a, S.a ( R x S )"))))),o.createElement("h3",{id:"tutorial-user-plain-text-notation"},"Alternative plain text notation"),o.createElement("p",null,"Before we introduce how to use the operators this should be a quick introduction of a very handy feature of the relational algebra calculator: the alternative plain text notation"),o.createElement("p",null,'The "classNameic" mathematical notation uses greek letters like π, σ for the unary operations and special symbols like the join symbol ',o.createElement("span",{className:"math"},"⋈")," or the union symbol ",o.createElement("span",{className:"math"},"∪"),"for some binary operations.",o.createElement("br",null),"This symbols can be entered using the toolbar at the top of the editor."),o.createElement("p",null,'This calculator also supports a alternative syntax for all this symbols that follows two very simple rules: Every greek letter can be substituted with its name spelled out ("pi" for π, "gamma" for γ) and every other symbol has an equivalent name that is borrowed from SQL, programming languages like C and ',o.createElement("a",{href:"http://en.wikipedia.org/wiki/Set_theory"},"Set theory"),"."),o.createElement("p",null,"This substitutions should be easy to read and much more important very easy to write because you don't need any toolbar or mouse. The calculator also supports autocomplete: just press [CTRL]+[SPACE] to complete the current keyword.",o.createElement("br",null),"This feature should help you to write your statements more quickly and fluently."),o.createElement("code",{className:"example block"},"π R.a, S.a, S.b σ R.a = S.a ∧ ( R.a > 5 ∨ R.a ","<"," 0 ) ( R ⨯ S )"),"is equivalent to:",o.createElement("code",{className:"example block"},"pi R.a, S.a, S.b sigma R.a = S.a and ( R.a > 5 or R.a ","<"," 0 ) ( R cross join S )"),"In the following table you can see a list of all supported substitutions:",o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-condensed"},o.createElement("thead",null,o.createElement("tr",null,o.createElement("th",null,"classNameical notation"),o.createElement("th",null,"alternative notation"))),o.createElement("tbody",null,o.createElement("tr",null,o.createElement("td",{className:"math"},"π"),o.createElement("td",null,"pi")),o.createElement("tr",null,o.createElement("td",{className:"math"},"σ"),o.createElement("td",null,"sigma")),o.createElement("tr",null,o.createElement("td",{className:"math"},"ρ"),o.createElement("td",null,"rho")),o.createElement("tr",null,o.createElement("td",{className:"math"},"τ"),o.createElement("td",null,"tau")),o.createElement("tr",null,o.createElement("td",{className:"math"},"γ"),o.createElement("td",null,"gamma")),o.createElement("tr",null,o.createElement("td",{className:"math"},"∩"),o.createElement("td",null,"intersect")),o.createElement("tr",null,o.createElement("td",{className:"math"},"∪"),o.createElement("td",null,"union")),o.createElement("tr",null,o.createElement("td",{className:"math"},"-"),o.createElement("td",null,"\\")),o.createElement("tr",null,o.createElement("td",{className:"math"},"÷"),o.createElement("td",null,"/")),o.createElement("tr",null,o.createElement("td",{className:"math"},"⨯"),o.createElement("td",null,o.createElement("ul",null,o.createElement("li",null,"x"),o.createElement("li",null,"cross join")))),o.createElement("tr",null,o.createElement("td",{className:"math"},"⋈"),o.createElement("td",null,o.createElement("ul",null,o.createElement("li",null,"join"),o.createElement("li",null,"inner join"),o.createElement("li",null,"natural join")))),o.createElement("tr",null,o.createElement("td",{className:"math"},"⟕"),o.createElement("td",null,o.createElement("ul",null,o.createElement("li",null,"left join"),o.createElement("li",null,"left outer join")))),o.createElement("tr",null,o.createElement("td",{className:"math"},"⟖"),o.createElement("td",null,o.createElement("ul",null,o.createElement("li",null,"right join"),o.createElement("li",null,"right outer join")))),o.createElement("tr",null,o.createElement("td",{className:"math"},"⟗"),o.createElement("td",null,"full outer join")),o.createElement("tr",null,o.createElement("td",{className:"math"},"⋉"),o.createElement("td",null,"left semi join")),o.createElement("tr",null,o.createElement("td",{className:"math"},"⋊"),o.createElement("td",null,"right semi join")),o.createElement("tr",null,o.createElement("td",{className:"math"},"▷"),o.createElement("td",null,o.createElement("ul",null,o.createElement("li",null,"anti semi join"),o.createElement("li",null,"anti join")))),o.createElement("tr",null,o.createElement("td",{className:"math"},"←"),o.createElement("td",null,"<","-",o.createElement("code",{className:"example block"},"pi new_name ","<","- a ( R )"))),o.createElement("tr",null,o.createElement("td",{className:"math"},"→"),o.createElement("td",null,"->",o.createElement("code",{className:"example block"},"pi a -> new_name ( R )")))))),o.createElement("ul",null,o.createElement("li",null,"schema preserving operations - operations where the resulting relation has the same schema as its first argument-relation:",o.createElement("ul",null,o.createElement("li",null,"selection"),o.createElement("li",null,"union"),o.createElement("li",null,"intersection"),o.createElement("li",null,"subtraction"),o.createElement("li",null,"orderby"),o.createElement("li",null,"left outer join"),o.createElement("li",null,"left semi join"),o.createElement("li",null,"anti join")))),o.createElement("h3",{id:"tutorial-user-relalg"},"Relational algebra"),o.createElement("p",null,"For this Part we use the ",o.createElement("a",{href:"calc.htm?data=gist:2cfb981fbc5676182d64"},'"bank example" Dataset')," with 3 relations: ",o.createElement("i",null,"Customers"),", ",o.createElement("i",null,"Accounts")," and ",o.createElement("i",null,"PremiumCustomers"),". By convention relations start with a uppercase letter and attributes with a lower case letter."),o.createElement("h4",null,"Open and inspect dataset"),o.createElement("p",null,"Open the dataset used in this tutorial using the following link to the ",o.createElement("a",{href:"calc.htm?data=gist:2cfb981fbc5676182d64"},'"bank example" Dataset'),"."),o.createElement("p",null,"You find the relations and their attributes listed on the side and if you hover a relations name a preview of the first view tuples is displayed."),o.createElement("h4",{id:"tutorial-user-basic-query"},"The most basic query"),o.createElement("p",null,"After you have found the Dataset you can formulate the very first and most basic query in relational algebra: a relation without any further manipulation."),o.createElement("p",null,"Just enter the name of a relation into the code editor or click on the relation/attribute names to insert them into the code editor.",o.createElement("br",null),"Note that the editor supports auto completing the relation/attribute names of the current dataset and the operators with [CTRL]+[SPACE]"),o.createElement("p",null,"So if you want all tuples of the relation ",o.createElement("i",null,"Customer")," you should have the following statement: ",o.createElement("code",null,"Customer"),". And get all the tuples if you press the execute button or press [CTRL]+[RETURN]."),o.createElement("h4",{id:"tutorial-user-unary-operations"},"Unary operations"),o.createElement("p",null,"All unary operations have the same basic syntax ",o.createElement("code",null,o.createElement("i",null,"FUNCTION")," ARGUMENT ",o.createElement("strong",null,"("),"CHILD_EXPRESSION ",o.createElement("strong",null,")")),"."),o.createElement("p",{className:"hint"},"The braces around the ",o.createElement("code",null,"CHILD_EXPRESSION")," can be omitted. In this case the predefined ",o.createElement("a",{href:"#relalg-operator-precedence"},"operator precedence for relational algebra")," applies."),o.createElement("p",null,"A complete list of the supported relalg operations can be found here: ",o.createElement("a",{href:"#relalg-syntax"},"general syntax"),", ",o.createElement("a",{href:"#relalg-unary-operations"},"unary operations")," and ",o.createElement("a",{href:"#relalg-binary-operations"},"binary operations"),"."),o.createElement("p",null,"The projection is one of the basic operations that allow to choose which of the attributes of the parent relations should be included in the new one and in which order they should be."),o.createElement("p",null,"Renaming a relation (ρ) changes the qualifiers of all the relations attributes but does not touch the tuples."),o.createElement("p",null,"Renaming an attribute (ρ) only changes the name of a specific attribute (and leaves his relation-qualifier unchanged)."),o.createElement("p",null,"The statement ",o.createElement("code",null,"pi balance ( Accounts )")," returns a new relation with only the balance attribute."),o.createElement("p",null,"The next statement gets the balance with the account-id after renaming the relation to ",o.createElement("i",null,"A")," and renames one of the attributes."),o.createElement("code",{className:"example block"},"rho account_number ","<","- aid ( pi aid, A.balance ( rho A ( Accounts ) ) )"),o.createElement("p",{className:"hint"},"Like in SQL or most programming languages you can format your statement and use SQL like comments (with ",o.createElement("code",null,"-- ...")," or ",o.createElement("code",null,"/* ... */"),") to increase the readability."),o.createElement("p",null,"The next statement uses a selection to filter the tuples of a relation based on a boolean expression. The calculator supports complex boolean expression with functions and built in operator precedence.",o.createElement("br",null),"The attributes in the boolean expression can be given as name or numeric position like with the projection."),o.createElement("p",null,"The next statement selects all customers-ids of customers who have the same value for their firstname and lastname."),o.createElement("code",{className:"example block"},"-- this should return an relation with no tuples: pi cid ( sigma firstname=lastname ( Customers ) )"),o.createElement("p",null,"The next example uses a more complex expression to get all accounts with a balance over 100 or under -100."),o.createElement("code",{className:"example block"},"sigma balance > 100 or (balance*-1 > 100) ( Accounts ) -- (balance ","<"," -100) would also be correct"),o.createElement("p",null,"As a shorter alternative you can use a ",o.createElement("a",{href:"#relalg-valueexpr"},"function in your expression")," to get the same result:"),o.createElement("code",{className:"example block"},"sigma abs(balance) > 100 ( Accounts )"),o.createElement("h2",{id:"tutorial-maintainer"},"Tutorial - maintainer"),o.createElement("p",null,"Everybody can provide datasets that can be used in the relational algebra calculator and share them with others.",o.createElement("br",null),"We assume the scenario of a teacher wanting to provide a dataset for his/her students for this short tutorial."),o.createElement("p",null,"The datasets are specified in a simple text format and can be shared with others via ",o.createElement("a",{href:"https://gist.github.com/"},"GitHub Gists")," (a simple and free platform to share snippets).",o.createElement("br",null),"The shared gist gets an unique ID and the relational algebra calculator can load the dataset directly using this ID."),o.createElement("h3",{id:"tutorial-maintainer-create-dataset"},"Creating a dataset"),o.createElement("p",null,"The fist step is the creation of the dataset which is actually only a group of relation definitions with some additional information and is therefore refered as group in the specified format.",o.createElement("br",null),"The relations can then be used by the students to formulate the there statements.",o.createElement("br",null),"Lets assume we want to create a dataset of employees of a company."),"Every group definition starts with a simple header which (at least) contains the name of the group:",o.createElement("code",{className:"example block"},"group: bank example"),"every header field starts with the name of the field and is followed by a colon for single line values. The next (optional) header field we should specify is the description. It should contain information like who is maintaining this dataset or where to find additional information.",o.createElement("br",null),"In the description ",o.createElement("a",{href:"http://en.wikipedia.org/wiki/Markdown"},"Markdown")," can be used to format the text or set links to external resources.",o.createElement("p",null,"In our example we add a description that takes more than a single line and therefore we enclose the value in double brackets instead of using the colon."),o.createElement("code",{className:"example block"},"group: bank example description[[ the data for this dataset was generated using ","<","http://www.generatedata.com/> * the relation _Customers_ contains basic information about the customers of the bank. The relation _Accounts_ contains the basic information of a single account. Note that a customer can have any number of accounts. * the relation _PremiumCustomers_ contains the customer-ids of all customers with a total balance over 1000 ]]"),o.createElement("p",null,"The next step is to actually add the relations the students can use for their queries.",o.createElement("br",null),"The relation definitions are use the relational algebra syntax that can be used in this tool.",o.createElement("br",null),"Every relation is defined by a single variable assignment where the name of the variable is used as the relations name and the result of the expression defines the relation.",o.createElement("br",null),"The relalg expression can use all features that can be used in the tool and can also use other relations defined within the same dataset.",o.createElement("br",null),"Note that the name of the relation is used as the qualifier of each attribute/column."),o.createElement("p",null,"For the relation ",o.createElement("code",null,"Customers")," relation we use the ",o.createElement("a",{href:"#relalg-inline-relation"},"inline relation")," syntax as the most basic method to define the relation and can also be edited using the relation editor ",o.createElement("i",{className:"fa fa-table",title:"relation editor"})," which is a simple spread-sheet like editor. ",o.createElement("br",null),"The inline relations in combination with the editor should be very easy to use if you enter the data directly or if you have them as a csv/spread-sheet file."),o.createElement("code",{className:"example block"},"group: bank example\n\t\t\t\tdescription[[ the data for this dataset was generated using {'<'}http://www.generatedata.com/>\n\n\t\t\t\t* the relation _Customers_ contains basic information about the customers of the bank.\n\t\t\t\t* the relation _Accounts_ contains the basic information of a single account. Note that a customer can\n\t\t\t\thave any number of accounts.\n\t\t\t\t* the relation _PremiumCustomers_ contains the customer-ids of all customers with a total balance over\n\t\t\t\t1000\n\t\t\t\t]]\n\n\t\t\t\tCustomers = { cid firstname lastname\n\t\t\t\t1 Dexter Simpson\n\t\t\t\t2 Kaseem Gallagher\n\t\t\t\t3 Kuame Hamilton\n\t\t\t\t4 Robert Thompson\n\t\t\t\t5 Rhiannon Valentine\n\t\t\t\t6 Calvin Mays\n\t\t\t\t}\n\n\t\t\t\tAccounts = {\n\t\t\t\taid, cid, balance:number\n\t\t\t\t1, 1, 66\n\t\t\t\t2, 1, -304\n\t\t\t\t3, 2, 272\n\t\t\t\t4, 3, 3472\n\t\t\t\t5, 4, 975.7\n\t\t\t\t6, 4, 93\n\t\t\t\t7, 5, 534\n\t\t\t\t8, 5, -75.5\n\t\t\t\t}\n\t\t\t\t"),o.createElement("p",null,"As we can see the name of the relations are defined by the assignments.",o.createElement("br",null),"The inline-relations are enclosed by curly braces and contain the names of the attributes/columns in the first line and then a tuple/row per line where the values are simply separated by whitespace. You can also other seperators and can define the types explicitly as we can see at the Accounts relation. For further information can be found at ",o.createElement("a",{href:"#relalg-inline-relation"},"inline relation description"),"."),o.createElement("p",null,"Note that, unlike the variables used in a query, the definition of a new relation implicitly sets the attribute qualifier to the name of the relation. So the schema of the account relation is ",o.createElement("code",null,"(Accounts.aid, Accounts.cid, Accounts.balance)"),". This allows each attribute to be accessible with this name."),o.createElement("p",null,"The last relation we need to add in this example is the relation containing the banks premium Customers.",o.createElement("br",null),"They are specified by using the other two relations in a simple relational algebra statement that selects all customers with a total balance over 1000."),o.createElement("code",{className:"example block"},"group: bank example\n\t\t\t\tdescription[[ the data for this dataset was generated using {'<'}http://www.generatedata.com/>\n\n\t\t\t\t* the relation _Customers_ contains basic information about the customers of the bank.\n\t\t\t\t* the relation _Accounts_ contains the basic information of a single account. Note that a customer can\n\t\t\t\thave any number of accounts.\n\t\t\t\t* the relation _PremiumCustomers_ contains the customer-ids of all customers with a total balance over\n\t\t\t\t1000\n\t\t\t\t]]\n\n\t\t\t\tCustomers = { cid firstname lastname\n\t\t\t\t1 Dexter Simpson\n\t\t\t\t2 Kaseem Gallagher\n\t\t\t\t3 Kuame Hamilton\n\t\t\t\t4 Robert Thompson\n\t\t\t\t5 Rhiannon Valentine\n\t\t\t\t6 Calvin Mays\n\t\t\t\t}\n\n\t\t\t\tAccounts = {\n\t\t\t\taid, cid, balance:number\n\t\t\t\t1, 1, 66\n\t\t\t\t2, 1, -304\n\t\t\t\t3, 2, 272\n\t\t\t\t4, 3, 3472\n\t\t\t\t5, 4, 975.7\n\t\t\t\t6, 4, 93\n\t\t\t\t7, 5, 534\n\t\t\t\t8, 5, -75.5\n\t\t\t\t}\n\n\t\t\t\tPremiumCustomers =\n\t\t\t\t\tpi cid (\n\t\t\t\t\t\tsigma sum > 1000 (\n\t\t\t\t\t\t\tgamma cid; sum(balance)->sum (\n\t\t\t\t\t\t\t\tAccounts\n\t\t\t\t\t\t\t\tjoin Customers\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t"),o.createElement("p",null,"We have now seen how to define a dataset with its header containing the name and the description followed by relational algebra assignments defining the relations of the dataset."),o.createElement("p",null,"We can paste this definition directly in the ",o.createElement("i",null,"Group Editor")," to load and use it.",o.createElement("br",null),"In the next section we want to look at how we can publish this definition so that we give our students a single url or id to directly load the dataset."),o.createElement("h3",{id:"tutorial-maintainer-share-dataset"},"Share a dataset"),o.createElement("p",null,"If we want to share the definition of a dataset with other people we could simply give them the definition and they load it using the ",o.createElement("i",null,"group editor"),", but that would not be that practical for most cases."),o.createElement("p",null,"The simpler solution (for the users) is to publish the definition as a ",o.createElement("a",{href:"https://gist.github.com/"},"GitHub Gist")," and share the ID of the gist with others."),o.createElement("p",null,"Just create a gist with the definition as its content (the filename does not matter) and publish it. The ID of the Gist can now be found at the top of the page as ",o.createElement("i",null,"gist:xxxxxxxxxxxx")," or in the url after the last slash."),o.createElement("p",null,"This ID can then be shared and loaded in the interface or the calculator can be called directly with a specific ID by using using the parameter ",o.createElement("code",null,"?data=gist:xxxxxxxxxxxxxx"),"."),o.createElement("p",null,"For example the simple bank definition of this tutorial has been published as a ",o.createElement("a",{href:"https://gist.github.com/ragtime/2cfb981fbc5676182d64"},"Gist with the ID 2cfb981fbc5676182d64")," and can therefore be loaded directly with modifying the url by replacing all after ",o.createElement("code",null,"DOMAIN/relax/calc/")," with ",o.createElement("code",null,"/gist/2cfb981fbc5676182d64"),"."),o.createElement("h2",{id:"relalg-reference"},"Reference - relational algebra"),o.createElement("h3",{id:"relalg-syntax"},"General syntax"),o.createElement("div",null,o.createElement("h4",{id:"relalg-assignment"},"assignment"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"syntax"),o.createElement("td",null,o.createElement("code",null,o.createElement("i",null,"NAME")," ",o.createElement("strong",null,"=")," ",o.createElement("i",null,"EXPRESSION"))))))),o.createElement("div",null,o.createElement("p",null,"Defines a new local variable with the name ",o.createElement("i",null,"NAME"),"; its content is defined by",o.createElement("i",null,"EXPRESSION")),o.createElement("p",null,"The name of the new relation must be unique."),o.createElement("p",null,"The definition has to be executed with the statement."),o.createElement("div",{className:"example"},o.createElement("code",null,"TestA = π a,b R TestB = σ d > 0 S -- statement using the variable TestA join TestB")),o.createElement("p",null,"An assignment (= definition of a variable) is no valid relational algebra expression on its own. If you miss the acutal query a error is thrown (",o.createElement("i",null,"Error: only assignments found; query is missing"),")."),o.createElement("div",{className:"example"},o.createElement("code",null,"-- this is the definition of the variable Test = π Customer.firstname, surname ( Customer ) -- this is the actual query/statement using the variable Test")),o.createElement("p",null,"The defined variable can be used like the assigned expression could be used because every usage of the variable gets replaced with its definition before the query gets executed.",o.createElement("br",null),"This also means that the variable-name has no influence on the schema of the expression and the names of the attributes/columns are not affected by assignment:",o.createElement("code",{className:"block example"},"X = R X join S"),"The attributes of the relation R are only accessible with its original names (R.a, R.b, ..), and are not affected by the assignment."),o.createElement("p",null,"There is a known problem when the last assignment ends with a natural join and the query consists of a single relation:"),o.createElement("code",null,"A = S join R A -- this is the query"),o.createElement("p",null,"The statement is ambiguous and the parser interprets it as ",o.createElement("code",null,"A = (S join R A)"),"where R is interpreted as a column argument for the theta-join and therefore detects a cyclic usage of the variable A."),o.createElement("p",null,"Solution: To get the expected behaviour you have to set braces around the assigned expression like ",o.createElement("code",null,"A = (S join R) A")))),o.createElement("div",null,o.createElement("h4",{id:"relalg-comment-sl"},"single-line comment"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"syntax"),o.createElement("td",null,o.createElement("code",null,o.createElement("strong",null,"-- "),o.createElement("i",null,"COMMENT_TEXT"),o.createElement("i",null,"EXPRESSION"))))))),o.createElement("div",null,o.createElement("p",null,"the '--' must be followed by at least one whitespace charater! inserts a comment; its text goes until the end of the line"),o.createElement("p",null,"comments are recognized as whitespace"),o.createElement("div",{className:"example"},o.createElement("code",null,"Test =",o.createElement("b",null,"-- This is the expression that is assigned to Test:"),"π Customer.firstname, surname ( Customer )")))),o.createElement("div",null,o.createElement("h4",{id:"relalg-relation-name"},"pre defined relation"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"syntax"),o.createElement("td",null,o.createElement("code",null,o.createElement("i",null,"RELATION_NAME"))))))),o.createElement("div",null,o.createElement("p",null,"Uses a pre defined relation with the name ",o.createElement("i",null,"RELATION_NAME")),o.createElement("p",null,"The code completion only works for this relations."),o.createElement("div",{className:"example"},o.createElement("code",null,"( Customers ) cross join ( Accounts )")))),o.createElement("div",null,o.createElement("h4",{id:"relalg-comment-ml"},"multi-line comment"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"syntax"),o.createElement("td",null,o.createElement("code",null,o.createElement("strong",null,"/* "),o.createElement("i",null,"COMMENT_TEXT"),o.createElement("strong",null," */"),o.createElement("i",null,"EXPRESSION"))))))),o.createElement("div",null,o.createElement("p",null,"inserts a comment that can span multiple lines"),o.createElement("p",null,"comments are recognized as whitespace"),o.createElement("div",{className:"example"},o.createElement("code",null,o.createElement("b",null,"/* This is a very very long comment */"),"Test = π Customer.firstname, surname ( Customer )")))),o.createElement("div",null,o.createElement("h4",{id:"relalg-inline-relation"},"inline-relation"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"syntax"),o.createElement("td",null,o.createElement("code",null,o.createElement("b",null,"{"),o.createElement("i",null,"COLUMN_NAME_1"),":",o.createElement("i",null,"COLUMN_TYPE_1")," ...",o.createElement("i",null,"ROW_1"),o.createElement("i",null,"ROW_2"),"...",o.createElement("b",null,"}"))))))),o.createElement("div",null,o.createElement("p",null,"The inline-relation is a temporary relation that can be defined directly in the statement. It is only valid in the defining statement"),o.createElement("p",null,"Every inline-relation is a valid expression and thus can be used at any position a",o.createElement("i",null,"EXPRESSION")," is expected."),o.createElement("p",null,"The inline-relation is defined by a header, that specifies the schema of the relation and the rows containing the values and is surrounded by curly braces."),o.createElement("div",null,"The header is defined by a sequence of",o.createElement("code",null,o.createElement("i",null,"QUALIFIER.COLUMN_NAME"),":",o.createElement("i",null,"COLUMN_TYPE"))," ",o.createElement("b",null,"separated by any whitespace, comma or semicolon."),"The ",o.createElement("i",null,"QUALIFIER")," is optional. Also the ",o.createElement("i",null,"COLUMN_TYPE")," can be omitted if the type is well defined by the values of that column. The first non null value of a column defines its type.",o.createElement("br",null),"True and false (case insensitive without quotes) are reserved for a boolean type. They can be used as a simple string but they do not define the type of the column as string.",o.createElement("br",null),"The ",o.createElement("i",null,"COLUMN_TYPE")," can be one of the following",o.createElement("ul",null,o.createElement("li",null,"string"),o.createElement("li",null,"number"),o.createElement("li",null,"date"),o.createElement("li",null,"boolean")),o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Optional)(Object(Hn.Sequence)(Object(Hn.NonTerminal)("qualifier"),".")),Object(Hn.NonTerminal)("column-name"),Object(Hn.Optional)(Object(Hn.Sequence)(":",Object(Hn.Choice)(0,"string","number","date","boolean"))))}))),o.createElement("p",null,"The rows of the relation are defined by a list of values per row with the type of the corresponding column. The values are ",o.createElement("b",null,"separated by whitespace comma or semicolon."),o.createElement("br",null),"Simple strings only containing letters, numbers, hyphens, underlines, dots or periods ([0-9a-zA-Z\\-_\\.]+) can be written without single quotes. ",o.createElement("i",null,"NULL")," and ",o.createElement("i",null,"null")," are constant values. If null, true or false should be used as string they have te be quoted.",o.createElement("br",null),"More complex strings must be surrounded by single quotes: ",o.createElement("i",null,"'content'")," or ",o.createElement("i",null,"content"),"but '' or 'long content containing spaces and special characters like !' or 'null'.",o.createElement("br",null),"Dates are written in ISO-format: YYYY-MM-DD without single quotes",o.createElement("br",null),"A null-value can be written as ",o.createElement("i",null,"null")," or ",o.createElement("i",null,"NULL")," (without single quotes).",o.createElement("br",null),"Numbers could be integers in the form (-?[0-9]+) or floats in the form (-?[0-9]+\\.[0-9]+).",o.createElement("br",null),"Numbers in single quotes are recognized as numbers if the column type is defined as number or has been detected to be number from a previous value; otherwise it will be a string value..",o.createElement("br",null),"A boolean value is denoted as either ",o.createElement("i",null,"true")," or ",o.createElement("i",null,"false")," (case insensitive)."),o.createElement("p",null,"The header and rows can be indented if needed."),o.createElement("div",{className:"example"},o.createElement("code",null,"-- type for column b is defined by the first value\n\t\t\t\trho A {\n\t\t\t\t\ta:number, b\n\t\t\t\t\t1, 2\n\t\t\t\t\t3, 4\n\t\t\t\t}\n\t\t\t\tcross join\n\t\t\t\t{\n\t\t\t\t\ta:string X.b:date c:number\n\t\t\t\t\tAlpha 1970-01-01 1\n\t\t\t\t\t'Beta 2' 1970-01-02 3\n\t\t\t\t\t'' 1970-01-03 4\n\t\t\t\t}")))),o.createElement("div",null,o.createElement("h4",{id:"relalg-relalgexpr"},"relational algebra expression"),o.createElement("div",null,o.createElement("p",null,"A valid relational algebra expression is built by connecting ",o.createElement("i",null,"relation-name")," or ",o.createElement("i",null,"inline-relation"),"as atoms with the defined unary and binary operators."),"So a relational algebra expression is recursively defined as follows:",o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Choice)(0,Object(Hn.Sequence)("(",Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),")"),Object(Hn.NonTerminal)("relation-name","#relalg-relation-name"),Object(Hn.NonTerminal)("inline-relation","#relalg-inline-relation"),Object(Hn.Sequence)(Object(Hn.Choice)(0,Object(Hn.NonTerminal)("projection","#relalg-operations-projection"),Object(Hn.NonTerminal)("selection","#relalg-operations-selection"),Object(Hn.NonTerminal)("rename relation","#relalg-operations-renamerelation"),Object(Hn.NonTerminal)("rename column","#relalg-operations-renamecolumn"),Object(Hn.NonTerminal)("order by","#relalg-operations-orderby"),Object(Hn.NonTerminal)("group by","#relalg-operations-groupby")),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))),Object(Hn.Choice)(1,Object(Hn.Skip)(),Object(Hn.Sequence)(Object(Hn.Choice)(0,Object(Hn.NonTerminal)("intersection","#relalg-operations-intersection"),Object(Hn.NonTerminal)("union","#relalg-operations-union"),Object(Hn.NonTerminal)("division","#relalg-operations-division"),Object(Hn.NonTerminal)("subtraction","#relalg-operations-subtraction"),Object(Hn.NonTerminal)("cross product","#relalg-operations-crossjoin"),Object(Hn.NonTerminal)("θ-join","#relalg-operations-innerjoin"),Object(Hn.NonTerminal)("natural join","#relalg-operations-naturaljoin"),Object(Hn.NonTerminal)("left outer join","#relalg-operations-leftjoin"),Object(Hn.NonTerminal)("right outer join","#relalg-operations-rightjoin"),Object(Hn.NonTerminal)("full outer join","#relalg-operations-fulljoin"),Object(Hn.NonTerminal)("left semi join","#relalg-operations-leftsemijoin"),Object(Hn.NonTerminal)("right semi join","#relalg-operations-rightsemijoin"),Object(Hn.NonTerminal)("anti semi join","#relalg-operations-antijoin")),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))))})))),o.createElement("h3",{id:"relalg-unary-operations"},"Unary operations"),"Each unary operation follows the following syntax:",o.createElement("div",{className:"b-syntax"},o.createElement("code",null,o.createElement("i",null,"FUNCTION")," ARGUMENT ",o.createElement("strong",null,"(")," CHILD_EXPRESSION ",o.createElement("strong",null,")"))),"The parentheses are Optional.",o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-projection"},"projection"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"π")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"pi")),o.createElement("tr",null,o.createElement("th",null,"example"),o.createElement("td",null,o.createElement("code",{className:"relalg"},"pi a, b ( R )")))))),o.createElement("p",null,"The argument is a subset of columns of the schema of the ",o.createElement("i",null,"CHILD_EXPRESSION")," or a ",o.createElement("a",{href:"#relalg-valueexpr"},"value expression")),o.createElement("div",{className:"example"},o.createElement("code",null,"π Customer.firstname, surname ( Customer )")),o.createElement("div",{className:"example"},o.createElement("code",null,"pi c.id, [1] ( ρ c ( Customer ) )")),"Expressions can be used to create more complex statements using one or more columns of a single row.",o.createElement("div",{className:"example"},o.createElement("code",null,"pi c.id, lower(username)->user, concat(firstname, concat(' ', lastname))->fullname ( ρ c ( Customer ) )")),"The virtual column ",o.createElement("i",null,"ROWNUM")," used in previous versions is not supported any more but the ",o.createElement("code",null,"rownum()")," expression can be used to get the same information. And it can also be used directly in the boolean condition of a selection or join.",o.createElement("div",{className:"example"},"In this example the top 5 customers with the most orders are selected, where countOrders could be the result of a previous aggregation.",o.createElement("code",null,"pi firstname, lastname sigma rownum() ","<","= 5 tau countOrders desc Customer")),o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Sequence)(Object(Hn.Choice)(0,"π","pi"),Object(Hn.OneOrMore)(Object(Hn.NonTerminal)("column","#relalg-column"),",")),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))}))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-selection"},"selection"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"σ")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"pi")),o.createElement("tr",null,o.createElement("th",null,"example"),o.createElement("td",null,o.createElement("code",{className:"relalg"},"sigma a > 2 ( R )")))))),o.createElement("p",null,"The argument is a ",o.createElement("a",{href:"#relalg-valueexpr"},"boolean expression")," that each row of ",o.createElement("i",null,"CHILD_EXPRESSION"),"is checked on"),o.createElement("div",{className:"example"},o.createElement("code",null,"σ firstname = 'Bob' or firstname = 'Alice' ( Customer )")),o.createElement("div",{className:"example"},o.createElement("code",null,"σ (id > 10 and id ","<"," 100) or id = 42 ( Customer )")),o.createElement("div",{className:"example"},"Selecting all customers with a firstname that has an even length.",o.createElement("code",null,"σ mod(length(firstname),2) = 0 ( Customer )")),o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Sequence)(Object(Hn.Choice)(0,"σ","sigma"),Object(Hn.NonTerminal)("boolean-expression","#relalg-valueexpr")),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))}))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-renamerelation"},"rename relation"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"ρ")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"rho")),o.createElement("tr",null,o.createElement("th",null,"example"),o.createElement("td",null,o.createElement("code",{className:"relalg"},"( R ) join R.a = X.b (rho X ( R ))")))))),o.createElement("div",null,"The argument is the new name for the Relation returned by ",o.createElement("i",null,"CHILD_EXPRESSION"),o.createElement("div",{className:"example"},'rename the Relation from "Customer" to "a":',o.createElement("code",null,"π a.id, a.firstname ( ρ a ( Customer ) )")),o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Sequence)(Object(Hn.Choice)(0,"ρ","rho"),Object(Hn.NonTerminal)("new relation name")),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))})))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-renamecolumn"},"rename column"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"ρ")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"rho")),o.createElement("tr",null,o.createElement("th",null,"example"),o.createElement("td",null,"the old and the new column names in a list (see example) ",o.createElement("br",null),'"←" can be substituted with "',"<",'-"',o.createElement("code",{className:"relalg block"},"pi x, b rho a->x {a, b\n\t\t\t\t\t\t1, 2\n\t\t\t\t\t\t3, 4\n\t\t\t\t\t}")))))),o.createElement("div",null,"The argument is the old and the new column names in a list (see example) ",o.createElement("br",null),'"←" can be substituted with "',"<",'-"',o.createElement("div",{className:"example"},"rename the columns id and firstname to myId and foobar:",o.createElement("code",null,"ρ myId←id, foobar←firstname (π id, firstname ( Customer ) )")),o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Sequence)(Object(Hn.Choice)(0,"ρ","rho"),Object(Hn.OneOrMore)(Object(Hn.Choice)(0,Object(Hn.Sequence)(Object(Hn.NonTerminal)("new name"),Object(Hn.Choice)(0,"←","<-"),Object(Hn.NonTerminal)("column","#relalg-column")),Object(Hn.Sequence)(Object(Hn.NonTerminal)("column","#relalg-column"),Object(Hn.Choice)(0,"→","->"),Object(Hn.NonTerminal)("new name"))),",")),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))})))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-orderby"},"order by"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"τ")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"tau")),o.createElement("tr",null,o.createElement("th",null,"example"),o.createElement("td",null,o.createElement("code",{className:"relalg"},"tau a asc, b desc ( R )")))))),o.createElement("div",null,"The argument is a list of columns by which the relation should be ordered (see examples)",o.createElement("div",{className:"example"},"order the result by the first column (default is ascending) and the second column descending:",o.createElement("code",null,"τ [1], firstname desc (π id, firstname ( Customer ) )")),o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Sequence)(Object(Hn.Choice)(0,"τ","tau"),Object(Hn.OneOrMore)(Object(Hn.Sequence)(Object(Hn.NonTerminal)("column","#relalg-column"),Object(Hn.Choice)(0,Object(Hn.Skip)(),"asc","desc")),",")),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))})))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-groupby"},"group by"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"γ")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"gamma")),o.createElement("tr",null,o.createElement("th",null,"example"),o.createElement("td",null,o.createElement("code",{className:"relalg"},"gamma a, count(*)->x ( R )")))))),o.createElement("div",null,"The argument is a list of columns to group by, separated by commas followed by a semicolon",o.createElement("br",null),"and a list of aggregate functions to apply with their new name in form ",o.createElement("span",null,"AGG( COLUMN ) -> NEW_NAME"),o.createElement("div",{className:"example"},"order the result by the first column (default is ascending) and the second column descending:",o.createElement("code",null,"γ a, b ; sum(c)->x ( Customer )")),o.createElement("p",null,"If no grouping columns are provided the entire relation is the group."),o.createElement("div",null,"supported aggregate functions by type:",o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table"},o.createElement("thead",null,o.createElement("tr",null,o.createElement("td",null," "),o.createElement("th",null,"number"),o.createElement("th",null,"string"),o.createElement("th",null,"date"))),o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"COUNT( * )"),o.createElement("td",null,"yes"),o.createElement("td",null,"yes"),o.createElement("td",null,"yes")),o.createElement("tr",null,o.createElement("th",null,"COUNT( column )"),o.createElement("td",null,"yes"),o.createElement("td",null,"yes"),o.createElement("td",null,"yes")),o.createElement("tr",null,o.createElement("th",null,"MIN( column )"),o.createElement("td",null,"yes"),o.createElement("td",null,"yes"),o.createElement("td",null,"yes")),o.createElement("tr",null,o.createElement("th",null,"MAX( column )"),o.createElement("td",null,"yes"),o.createElement("td",null,"yes"),o.createElement("td",null,"yes")),o.createElement("tr",null,o.createElement("th",null,"SUM( column )"),o.createElement("td",null,"yes"),o.createElement("td",null,"no"),o.createElement("td",null,"no")),o.createElement("tr",null,o.createElement("th",null,"AVG( column )"),o.createElement("td",null,"yes"),o.createElement("td",null,"no"),o.createElement("td",null,"no")))))),o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Stack)(Object(Hn.Sequence)(Object(Hn.Choice)(0,"γ","gamma"),Object(Hn.Sequence)(Object(Hn.ZeroOrMore)(Object(Hn.NonTerminal)("column","#relalg-column"),","),";",Object(Hn.OneOrMore)(Object(Hn.Sequence)(Object(Hn.Choice)(0,"COUNT(*)",Object(Hn.Sequence)(Object(Hn.Choice)(0,"COUNT","MIN","MAX","SUM","AVG"),"(",Object(Hn.NonTerminal)("column","#relalg-column"),")")),Object(Hn.Choice)(0,"→","->"),Object(Hn.NonTerminal)("new name")),","))),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr")))})))),o.createElement("h3",{id:"relalg-binary-operations"},"Binary operations"),"Each binary operation follows the following syntax:",o.createElement("div",{className:"b-syntax"},o.createElement("code",null,o.createElement("strong",null,"(")," CHILD_EXPRESSION ",o.createElement("strong",null,")")," ",o.createElement("strong",null,"FUNCTION")," ARGUMENT ",o.createElement("strong",null,"("),"CHILD_EXPRESSION ",o.createElement("strong",null,")"))),"The parentheses are Optional.",o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-intersection"},"intersection - ∩"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"∩")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"intersect"))))),o.createElement("div",null,"no argument",o.createElement("div",{className:"example"},o.createElement("code",null,"( Customer ) ∩ ( Customer )")),"the schemas must be unifiable",o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"∩","intersect")),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))})))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-union"},"union - ∪"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"∪")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"union"))))),o.createElement("div",null,"no argument",o.createElement("div",{className:"example"},o.createElement("code",null,"( Customer ) ∪ ( Customer )")),"the schemas must be unifiable",o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"∪","union")),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))})))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-division"},"division"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"÷")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"/"))))),o.createElement("div",null,"no argument",o.createElement("div",{className:"example"},o.createElement("code",null,"( Customer ) ÷ ( Customer )")),"the schemas must be unifiable",o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"÷","/")),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))})))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-subtraction"},"subtraction / set-difference"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"-"),o.createElement("td",{className:"math"},"∪")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"\\",o.createElement("br",null),"except"))))),o.createElement("div",null,"no argument",o.createElement("div",{className:"example"},o.createElement("code",null,"( pi firstname ( Customer ) ) - ( rho test","<","-lastname ( pi lastname ( Customer ) ) )")),"the schemas must be unifiable",o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"-","\\","except")),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))})))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-crossjoin"},"cross product"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"⨯")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"cross join"))))),o.createElement("div",null,"no argument",o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"⨯",Object(Hn.Sequence)("cross","join"))),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))})))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-innerjoin"},"Theta-join / θ-join"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"⋈")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"join",o.createElement("br",null),"inner join"))))),o.createElement("div",null,"join condition",o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Stack)(Object(Hn.Sequence)(Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"⋈",Object(Hn.Sequence)(Object(Hn.Optional)("inner"),"join")),Object(Hn.NonTerminal)("boolean-expression","#relalg-valueexpr"))),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr")))}))),o.createElement("p",null,"Special case:",o.createElement("br",null),"The name of a single boolean column (like ",o.createElement("code",null,"R join a S"),") can not be used directly as a join condition due to ambiguities in the relational algebra syntax.",o.createElement("br",null),"The column must either be specified with its qualifier (",o.createElement("code",null,"R join R.a S"),") or wrapped in parentheses (",o.createElement("code",null,"R join (a) S"),").",o.createElement("br",null),"This is not necessary for more complex boolean expressions. The problem is only that the single column name can not be distinguished from a relation name: the expression ",o.createElement("code",null,"X=R join S X")," could be interpreted as ",o.createElement("code",null,"A=(R join S A)")," instead of ",o.createElement("code",null,"A=(R join S) A"),".")),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-naturaljoin"},"natural join"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"⋈")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"join",o.createElement("br",null),"natural join"))))),o.createElement("div",null,"no argument",o.createElement("div",{className:"example"},o.createElement("code",{className:"block"},"ρ a ( Customer )",o.createElement("span",{className:"math"},"⋈")," a.name ","<"," b.name ( ρ b ( Customer ) )")),o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"⋈",Object(Hn.Sequence)("natural","join"))),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))})))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-leftjoin"},"left outer join"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"⟕")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"left outer join",o.createElement("br",null),"left join"))))),o.createElement("div",null,"optional join condition; if no join condition is given it acts as a natural left outer join",o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Stack)(Object(Hn.Sequence)(Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"⟕",Object(Hn.Sequence)("left",Object(Hn.Optional)("outer"),"join")),Object(Hn.Optional)(Object(Hn.NonTerminal)("boolean-expression","#relalg-valueexpr")))),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr")))})))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-rightjoin"},"right outer join"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"⟖")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"right outer join",o.createElement("br",null),"right join"))))),o.createElement("div",null,"optional join condition; if no join condition is given it acts as a natural right outer join",o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Stack)(Object(Hn.Sequence)(Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"⟖",Object(Hn.Sequence)("right",Object(Hn.Optional)("outer"),"join")),Object(Hn.Optional)(Object(Hn.NonTerminal)("boolean-expression","#relalg-valueexpr")))),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr")))})))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-fulljoin"},"full outer join"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"⟗")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"full outer join"))))),o.createElement("div",null,"optional join condition; if no join condition is given it acts as a natural full outer join",o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Stack)(Object(Hn.Sequence)(Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"⟗",Object(Hn.Sequence)("full","outer","join")),Object(Hn.Optional)(Object(Hn.NonTerminal)("boolean-expression","#relalg-valueexpr")))),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr")))})))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-leftsemijoin"},"left semi join"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"⋉")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"left semi join"))))),o.createElement("div",null,"no argument",o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"⋉",Object(Hn.Sequence)("left","semi","join"))),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))}))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-rightsemijoin"},"right semi join"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"⋊")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"right semi join"))))),o.createElement("div",null,"no argument",o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"⋊",Object(Hn.Sequence)("right","semi","join"))),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"))})))),o.createElement("div",null,o.createElement("h4",{id:"relalg-operations-antijoin"},"anti semi join"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-nonfluid"},o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"symbol"),o.createElement("td",{className:"math"},"▷")),o.createElement("tr",null,o.createElement("th",null,"alternative syntax"),o.createElement("td",null,"anti semi join",o.createElement("br",null),"anti join"))))),o.createElement("div",null,"no argument",o.createElement("br",null),o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Stack)(Object(Hn.Sequence)(Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"▷",Object(Hn.Sequence)("anti",Object(Hn.Optional)("semi"),"join")))),Object(Hn.NonTerminal)("RA-expression","#relalg-relalgexpr")))})))),o.createElement("h3",{id:"relalg-operator-precedence"},"Operator precedence"),o.createElement("p",null,"The operator precedence allows to obmit most of braces.",o.createElement("br",null),"The used precedence is shown in the table below.",o.createElement("br",null),"All operators are left associative."),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table"},o.createElement("thead",null,o.createElement("tr",null,o.createElement("th",null,"order of precedence"),o.createElement("th",null,"Operator"))),o.createElement("tbody",null,o.createElement("tr",null,o.createElement("td",null,"0"),o.createElement("td",null,o.createElement("a",{href:"#relalg-relation-name"},"relation-name"),",",o.createElement("a",{href:"#relalg-inline-relation"},"inline-relation"))),o.createElement("tr",null,o.createElement("td",null,"1"),o.createElement("td",null,o.createElement("a",{href:"#relalg-operations-projection"},"projection"),",",o.createElement("a",{href:"#relalg-operations-selection"},"selection"),",",o.createElement("a",{href:"#relalg-operations-renamecolumn"},"rename (columns)"),",",o.createElement("a",{href:"#relalg-operations-renamerelation"},"rename (relations)"),",",o.createElement("a",{href:"#relalg-operations-groupby"},"group"),",",o.createElement("a",{href:"#relalg-operations-orderby"},"order by"))),o.createElement("tr",null,o.createElement("td",null,"2"),o.createElement("td",null,o.createElement("a",{href:"#relalg-operations-crossjoin"},"cross product"),",",o.createElement("a",{href:"#relalg-operations-innerjoin"},"theta join"),",",o.createElement("a",{href:"#relalg-operations-naturaljoin"},"natural join"),",",o.createElement("a",{href:"#relalg-operations-leftjoin"},"left outer join"),",",o.createElement("a",{href:"#relalg-operations-rightjoin"},"right outer join"),",",o.createElement("a",{href:"#relalg-operations-fulljoin"},"full outer join"),",",o.createElement("a",{href:"#relalg-operations-leftsemijoin"},"left semi-join"),",",o.createElement("a",{href:"#relalg-operations-rightsemijoin"},"right semi-join"),",",o.createElement("a",{href:"#relalg-operations-antijoin"},"anti semi-join"),",",o.createElement("a",{href:"#relalg-operations-division"},"division"))),o.createElement("tr",null,o.createElement("td",null,"3"),o.createElement("td",null,o.createElement("a",{href:"#relalg-operations-intersection"},"intersection"))),o.createElement("tr",null,o.createElement("td",null,"4"),o.createElement("td",null,o.createElement("a",{href:"#relalg-operations-union"},"union"),",",o.createElement("a",{href:"#relalg-operations-subtraction"},"subtraction")))))),o.createElement("div",{className:"example"},o.createElement("code",null,"A join B x C"),o.createElement("br",null),"is equal to",o.createElement("br",null),o.createElement("code",null,"((A join B) x C)"),o.createElement("br",null),"because the cross product and the natural join are in the same precedence className."),o.createElement("div",{className:"example"},o.createElement("code",null,"sigma true A join sigma true B"),o.createElement("br",null),"is equal to",o.createElement("br",null),o.createElement("code",null,"(sigma true (A)) join (sigma true (B))"),o.createElement("br",null),"because the unary operators have a higher precedence than the binary operators."),o.createElement("h3",{id:"relalg-misc"},"Misc"),o.createElement("h4",{id:"relalg-column"},"Column"),"column is either",o.createElement("ul",null,o.createElement("li",null,'the name of a column: "columnName"'),o.createElement("li",null,'the number of the column (starting with 1): "[column-number]"'),o.createElement("li",null,'a full qualified column: "qualifier.columnName"'),o.createElement("li",null,"a value expression (if allowed for the specific operation)")),"the qualifier is optional if the column is unique in its schema.",o.createElement("h4",{id:"relalg-valueexpr"},"Value expressions"),"With most operators you can use a value-expression which connects one or more columns of a single row to calculate a new value. This is possible for:",o.createElement("ul",null,o.createElement("li",null,"the projection creating a new column (make sure to give the column a name)"),o.createElement("li",null,"the selection any expression evaluating to boolean can be used"),o.createElement("li",null,"for the joins any expression evaluating to boolean can be used; note that the ",o.createElement("code",null,"rownum()")," expression always represents the index of the lefthand relation")),"The expressions always operate on a single row/tuple of a table/relation.",o.createElement("br",null),"If you want to calculate values vertically over all values of a specific column/attribute you need to use group by with an aggregate function. The following table lists all functions and operators that can be used in an expression. They can be combined and nested in any arbitrary order but note that they do evaluate to a single type defined by the outer most expression. The following operators can be used:",o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table"},o.createElement("thead",null,o.createElement("tr",null,o.createElement("th",null,"syntax"),o.createElement("th",null,"returns type"),o.createElement("th",null,"description"))),o.createElement("tbody",null,o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"a AND b")),o.createElement("td",null,"boolean"),o.createElement("td",null,"logical and")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"a OR b")),o.createElement("td",null,"boolean"),o.createElement("td",null,"logical or")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"a XOR b")),o.createElement("td",null,"boolean"),o.createElement("td",null,"logical exclusive or")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"NOT b")),o.createElement("td",null,"boolean"),o.createElement("td",null,"logical not")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"a = b a != b a ","<"," b a > b a ","<","= b a >= b a != b")),o.createElement("td",null,"boolean"),o.createElement("td",null,"compares two values of the same type")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"a:string LIKE 'PATTERN'")),o.createElement("td",null,"boolean"),o.createElement("td",null,"returns true if expression evaluating to a string ",o.createElement("code",null,"a")," matches the pattern given as the second operand.",o.createElement("br",null),"The pattern has to be given as a string literal;",o.createElement("p",null,"An underscore (",o.createElement("code",null,"_"),") in the pattern stands for any single character and any percent sign (",o.createElement("code",null,"%"),") stands for any sequence of zero or more characters."))),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"a:string ILIKE 'PATTERN'")),o.createElement("td",null,"boolean"),o.createElement("td",null,"same as ",o.createElement("code",null,"LIKE")," but matches case-insensitive.",o.createElement("br",null),"This is not in the SQL standard but is a PostgreSQL extension.")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"a + b a - b a * b a / b a % b")),o.createElement("td",null,"number"),o.createElement("td",null,"arithmetic addition, subtraction, multiplication, division, modulo")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"rand()")),o.createElement("td",null,"number"),o.createElement("td",null,"returns a random number in the interval [0, 1]")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"rownum()")),o.createElement("td",null,"number"),o.createElement("td",null,"returns the index of the current row (starting with 0).",o.createElement("br",null),"If the function is used in a binary relational algebra expression (e.g. a join) it always represents the index of the left operand.")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"length(a:string)")),o.createElement("td",null,"number"),o.createElement("td",null,"returns the length of the string")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"date(a:string)")),o.createElement("td",null,"date"),o.createElement("td",null,"parses the given string to a date object. The string must be in the form YYYY-MM-DD")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"adddate(a:date, b:number)")),o.createElement("td",null,"date"),o.createElement("td",null,"adds the given number of days to date ",o.createElement("code",null,"a"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"subdate(a:date, b:number)")),o.createElement("td",null,"date"),o.createElement("td",null,"subtracts the given number of days from date ",o.createElement("code",null,"a"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"now() transaction_timestamp() statement_timestamp()")),o.createElement("td",null,"date"),o.createElement("td",null,"returns a timestamp representing the start of the query execution",o.createElement("br",null),"transaction- and statement start are the very same value due to the lack of a transaction concept")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"clock_timestamp()")),o.createElement("td",null,"date"),o.createElement("td",null,"returns the current timestamp while executing the query")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"year(a:date)")),o.createElement("td",null,"number"),o.createElement("td",null,"returns the year component of a given date")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"month(a:date)")),o.createElement("td",null,"number"),o.createElement("td",null,"returns the month component of a given date as a number. (1 = Sunday, 2 = Monday, ..., 7 = Saturday)")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"day(a:date) dayofmonth(a:date)")),o.createElement("td",null,"number"),o.createElement("td",null,"returns the day component of a given date as a number in the range 1 to 31")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"hour(a:date)")),o.createElement("td",null,"number"),o.createElement("td",null,"returns the hour component of a given date as a number in the range 0 to 23")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"minute(a:date)")),o.createElement("td",null,"number"),o.createElement("td",null,"returns the minute component of a given date as a number in the range 0 to 59")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"second(a:date)")),o.createElement("td",null,"number"),o.createElement("td",null,"returns the second component of a given date as a number in the range 0 to 59")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"concat(a:string [, ...])")),o.createElement("td",null,"string"),o.createElement("td",null,"concatenates the given strings")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"upper(a:string) ucase(a:string)")),o.createElement("td",null,"string"),o.createElement("td",null,"converts the given string to upper-case")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"lower(a:string) lcase(a:string)")),o.createElement("td",null,"string"),o.createElement("td",null,"converts the given string to lower-case")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"strlen(a:string)")),o.createElement("td",null,"number"),o.createElement("td",null,"number of characters of the string")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"abs(a:number)")),o.createElement("td",null,"number"),o.createElement("td",null,"the absolute value of the given number")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"add(a, b) sub(a, b) mul(a, b) div(a, b) mod(a, b)")),o.createElement("td",null,"number"),o.createElement("td",null,"arithmetic addition, ",o.createElement("br",null),"subtraction, ",o.createElement("br",null),"multiplication, ",o.createElement("br",null),"division or ",o.createElement("br",null),"modulo of the given numbers")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",null,"round(a) floor(a) ceil(a)")),o.createElement("td",null,"number"),o.createElement("td",null,"round to nearest integer, ",o.createElement("br",null),"largest integer not greater than the argument or",o.createElement("br",null),"smallest integer not less than the argument")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",{className:"sql"},"coalesce(",o.createElement("strong",null,"value")," [, ...])")),o.createElement("td",null,"type of ",o.createElement("strong",null,"value")),o.createElement("td",null,"returns the first of its arguments that is not null or null if all arguments are null. Note that all arguments must have the same datatype.")),o.createElement("tr",null,o.createElement("td",null,o.createElement("code",{className:"sql"},"CASE WHEN ",o.createElement("strong",null,"condition")," THEN result [WHEN ...] [ELSE ",o.createElement("strong",null,"result"),"] END")),o.createElement("td",null,"type of ",o.createElement("strong",null,"result")),o.createElement("td",null,"returns the first result where the condition evaluates to true. If all conditions are false the else part is executed or null is returnt if the else part is missing. Note that all results must have the same datatype."))))),"The operator precedence is the same as used in ",o.createElement("a",{href:"https://dev.mysql.com/doc/refman/5.7/en/operator-precedence.html"},"MySQL")," (from strong to weak):",o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table"},o.createElement("thead",null,o.createElement("tr",null,o.createElement("th",null,"order of precedence"),o.createElement("th",null,"Operators"))),o.createElement("tbody",null,o.createElement("tr",null,o.createElement("td",null,"0"),o.createElement("td",null,"functions, constants, columns")),o.createElement("tr",null,o.createElement("td",null,"1"),o.createElement("td",null,"! (boolean not)")),o.createElement("tr",null,o.createElement("td",null,"2"),o.createElement("td",null,"- (unary minus)")),o.createElement("tr",null,o.createElement("td",null,"3"),o.createElement("td",null,"*, /, %")),o.createElement("tr",null,o.createElement("td",null,"4"),o.createElement("td",null,"-, +")),o.createElement("tr",null,o.createElement("td",null,"5"),o.createElement("td",null,"= (comparison), >=, >, ","<","=, ","<",", ","<",">, !=, LIKE, ILIKE")),o.createElement("tr",null,o.createElement("td",null,"6"),o.createElement("td",null,"CASE, WHEN, THEN, ELSE")),o.createElement("tr",null,o.createElement("td",null,"7"),o.createElement("td",null,"AND")),o.createElement("tr",null,o.createElement("td",null,"8"),o.createElement("td",null,"XOR")),o.createElement("tr",null,o.createElement("td",null,"9"),o.createElement("td",null,"OR, ||"))))),o.createElement("h2",{id:"sql-reference"},"Reference - SQL"),o.createElement("p",null,"The goal of the SQL mode of the relational algebra calculator is to provide a translation from SQL to relational algebra to show how they are related. It does not support all features a real database system like ",o.createElement("a",{href:"http://www.postgresql.org",target:"_blank"},"PostgreSQL")," or ",o.createElement("a",{href:"https://www.mysql.com/",target:"_blank"},"MySQL"),' does because the goal is to provide a translation into relational algebra. This means that many features like correlated-substatements are not supported because the translation into relational algebra is not trivial and modern database systems use an extended set of operators internally that do not require a one-to-one translation into "classNameical" relational algebra. Therefore the learning effect for users of this tool would not be that big.'),o.createElement("h3",{id:"sql-syntax"},"General syntax"),o.createElement("p",null,"All keywords are case insensitv."),o.createElement("p",null,"The following Synopsis is a adapted version of ",o.createElement("a",{href:"http://www.postgresql.org/docs/9.4/static/sql-select.html",target:"_blank"},"PostgreSQL")," and shows the general syntax of the supported SQL. Brackets indicate optional parts. Braces and vertical lines indicate that one of the alternatives has to be chosen. Dots mean that the preceding element can be repeated."),o.createElement("code",{className:"block sql"},"[ ",o.createElement("a",{href:"#sql-with"},"WITH")," ",o.createElement("strong",null,"with_query")," [, ...] ]",o.createElement("a",{href:"#sql-select"},"SELECT")," [ DISTINCT ] * | ",o.createElement("strong",null,"expression")," [ [ AS ] ",o.createElement("strong",null,"output_name")," ] [, ...]",o.createElement("a",{href:"#sql-from"},"FROM")," ",o.createElement("strong",null,"from_item")," [, ...] [ ",o.createElement("a",{href:"#sql-where"},"WHERE")," ",o.createElement("strong",null,"condition")," ] [ ",o.createElement("a",{href:"#sql-groupby"},"GROUP BY")," ",o.createElement("strong",null,"column")," [, ...] ] [ ",o.createElement("a",{href:"#sql-having"},"HAVING")," ",o.createElement("strong",null,"condition")," ] [ ","{"," ",o.createElement("a",{href:"#sql-setoperators"},"UNION")," | ",o.createElement("a",{href:"#sql-setoperators"},"INTERSECT")," | ",o.createElement("a",{href:"#sql-setoperators"},"EXCEPT")," } [ ALL | DISTINCT ] ",o.createElement("strong",null,"select")," ] [ ",o.createElement("a",{href:"#sql-orderby"},"ORDER BY")," ",o.createElement("strong",null,"column")," [ ASC | DESC ] [, ...] ] [ ",o.createElement("a",{href:"#sql-limit"},"LIMIT")," ","{"," ",o.createElement("strong",null,"count")," | ALL } ] [ ",o.createElement("a",{href:"#sql-limit"},"OFFSET")," ",o.createElement("strong",null,"start")," [ ROW | ROWS ] ] [ ",o.createElement("a",{href:"#sql-limit"},"FETCH")," ","{"," FIRST | NEXT } [ ",o.createElement("strong",null,"count")," ] ","{"," ROW | ROWS } ONLY ] where ",o.createElement("strong",null,"from_item")," can be one of:",o.createElement("strong",null,"table_name")," [ AS ",o.createElement("strong",null,"alias")," ]",o.createElement("strong",null,"with_query_name")," [ AS ",o.createElement("strong",null,"alias")," ] ( ",o.createElement("strong",null,"select")," ) AS ",o.createElement("strong",null,"alias"),o.createElement("strong",null,"from_item")," CROSS JOIN ",o.createElement("strong",null,"from_item"),o.createElement("strong",null,"from_item")," NATURAL JOIN ",o.createElement("strong",null,"from_item"),o.createElement("strong",null,"from_item")," [ INNER ] JOIN ",o.createElement("strong",null,"from_item")," ON join_condition",o.createElement("strong",null,"from_item")," [ INNER ] JOIN ",o.createElement("strong",null,"from_item")," NATURAL",o.createElement("strong",null,"from_item")," [ INNER ] JOIN ",o.createElement("strong",null,"from_item")," USING ( join_column [, ...] )",o.createElement("strong",null,"from_item"),o.createElement("strong",null,"from_item")," ","{"," LEFT | RIGHT | FULL } [ OUTER ] JOIN ON join_condition",o.createElement("strong",null,"from_item"),o.createElement("strong",null,"from_item")," ","{"," LEFT | RIGHT | FULL } [ OUTER ] JOIN NATURAL ",o.createElement("strong",null,"from_item"),o.createElement("strong",null,"from_item")," ","{"," LEFT | RIGHT | FULL } [ OUTER ] JOIN USING ( join_column [, ...] ) ",o.createElement("strong",null,"from_item"),"and ",o.createElement("strong",null,"with_query")," is:",o.createElement("strong",null,"with_query_name")," AS ( ",o.createElement("strong",null,"select")," )"),o.createElement("div",{className:"too-wide"},o.createElement(Yn,{diagram:Object(Hn.Diagram)(Object(Hn.Stack)(Object(Hn.Optional)(Object(Hn.Sequence)(Object(Hn.Terminal)("WITH","#sql-with"),Object(Hn.OneOrMore)(Object(Hn.Sequence)(Object(Hn.NonTerminal)("name"),"AS","(",Object(Hn.NonTerminal)("select","#sql-select"),")"),",")),"skip"),Object(Hn.Sequence)(Object(Hn.Terminal)("SELECT","#sql-select"),Object(Hn.Optional)("DISTINCT","skip"),Object(Hn.Choice)(0,"*",Object(Hn.OneOrMore)(Object(Hn.Choice)(0,Object(Hn.Sequence)(Object(Hn.NonTerminal)("column"),Object(Hn.Optional)(Object(Hn.Sequence)("AS",Object(Hn.NonTerminal)("output_name")))),Object(Hn.Sequence)(Object(Hn.NonTerminal)("expression","#sql-valueexpr"),Object(Hn.Sequence)("AS",Object(Hn.NonTerminal)("output_name")))),",")),Object(Hn.Terminal)("FROM","#sql-from"),Object(Hn.OneOrMore)(Object(Hn.Choice)(0,Object(Hn.Sequence)(Object(Hn.NonTerminal)("table_name"),Object(Hn.Optional)(Object(Hn.Sequence)("AS",Object(Hn.NonTerminal)("alias")))),Object(Hn.Sequence)("(",Object(Hn.NonTerminal)("select"),")",Object(Hn.Sequence)("AS",Object(Hn.NonTerminal)("alias")))),",")),Object(Hn.OneOrMore)(Object(Hn.Choice)(0,Object(Hn.Skip)(),Object(Hn.Sequence)(Object(Hn.Choice)(0,Object(Hn.Sequence)(",",Object(Hn.Comment)("old syntax for cross join")),Object(Hn.Sequence)(Object(Hn.Choice)(0,"CROSS","NATURAL"),"JOIN"),Object(Hn.Sequence)(Object(Hn.Choice)(0,Object(Hn.Sequence)(Object(Hn.Optional)("INNER"),"JOIN"),Object(Hn.Sequence)(Object(Hn.Choice)(0,"LEFT","RIGHT","FULL"),Object(Hn.Optional)("OUTER"),"JOIN")),Object(Hn.Choice)(0,Object(Hn.Sequence)("ON",Object(Hn.NonTerminal)("condition")),Object(Hn.Sequence)("USING","(",Object(Hn.OneOrMore)(Object(Hn.NonTerminal)("join_column"),","),")"),Object(Hn.Sequence)("NATURAL")))),Object(Hn.Choice)(0,Object(Hn.Sequence)(Object(Hn.NonTerminal)("table_name"),Object(Hn.Optional)(Object(Hn.Sequence)("AS",Object(Hn.NonTerminal)("alias")))),Object(Hn.Sequence)("(",Object(Hn.NonTerminal)("select"),")",Object(Hn.Sequence)("AS",Object(Hn.NonTerminal)("alias"))))))),Object(Hn.Sequence)(Object(Hn.Optional)(Object(Hn.Sequence)(Object(Hn.Terminal)("WHERE","#sql-where"),Object(Hn.NonTerminal)("condition")),"skip"),Object(Hn.Optional)(Object(Hn.Sequence)(Object(Hn.Terminal)("GROUP BY","#sql-groupby"),Object(Hn.NonTerminal)("expression","#sql-valueexpr")),"skip"),Object(Hn.Optional)(Object(Hn.Sequence)(Object(Hn.Terminal)("HAVING","#sql-having"),Object(Hn.NonTerminal)("condition")),"skip")),Object(Hn.Sequence)(Object(Hn.Optional)(Object(Hn.Sequence)(Object(Hn.Choice)(0,"UNION","INTERSECT","EXCEPT"),Object(Hn.Choice)(0,Object(Hn.Skip)(),"DISTINCT","ALL"),Object(Hn.NonTerminal)("select")),"skip"),Object(Hn.Optional)(Object(Hn.Sequence)(Object(Hn.Terminal)("ORDER BY","#sql-orderby"),Object(Hn.OneOrMore)(Object(Hn.Sequence)(Object(Hn.NonTerminal)("expression","#sql-valueexpr"),Object(Hn.Choice)(0,"ASC","DESC")),",")),"skip")),Object(Hn.Sequence)(Object(Hn.Optional)(Object(Hn.Sequence)(Object(Hn.Terminal)("LIMIT","#sql-limit"),Object(Hn.Choice)(0,Object(Hn.NonTerminal)("count"),"ALL")),"skip"),Object(Hn.Optional)(Object(Hn.Sequence)(Object(Hn.Terminal)("OFFSET","#sql-limit"),Object(Hn.NonTerminal)("start"),Object(Hn.Optional)("ROWS")),"skip")),Object(Hn.Sequence)(Object(Hn.Optional)(Object(Hn.Sequence)(Object(Hn.Terminal)("FETCH FIRST","#sql-limit"),Object(Hn.NonTerminal)("count"),Object(Hn.Optional)("ROWS"),"ONLY"),"skip"))))})),o.createElement("h3",{id:"sql-translation"},"Semantic and Translation to relational algebra"),o.createElement("h4",{id:"sql-translation-sequence"},"Sequence of execution"),o.createElement("p",null,'The SQL statement is translated directly into relational algebra. To understand some of the effects of the tool it might be helpful to understand the steps of the translation process. As mentioned before, real database systems might take a different (more complex) aproach but this should help to get an idea of how SQL could be translated into "classNameical" relational algebra.'),o.createElement("p",null,"The following list shows the translation from SQL into relational algebra starting with the inner most relational algebra expression at the top."),o.createElement("ol",null,o.createElement("li",null,"replace all usages of the temporary-tables defined in the WITH-clause with their definitions"),o.createElement("li",null,"FROM-clause is translated left associative with all joins having the same precedence (",o.createElement("code",null,","),"is a cross join)"),o.createElement("li",null,"selection with condition from where-clause is added"),o.createElement("li",null,"group by"),o.createElement("li",null,"selection with condition from having-clause"),o.createElement("li",null,"union/intersect/except"),o.createElement("li",null,"projection is added to choose the requested columns of the SELECT-clause"),o.createElement("li",null,"the columns are renamed to get the requested output-name specified in the SELECT-clause"),o.createElement("li",null,"order by"),o.createElement("li",null,"limit/offset is mapped to a selection")),o.createElement("h4",{id:"sql-select"},"SELECT"),o.createElement("p",null,"The direct translation into relational algebra with implicit duplication elimination requires the ",o.createElement("code",null,"distinct"),"keyword to be equivalent. A warning is shown if you omit it."),o.createElement("p",null,"The select-clause is translated into up to two relalg operators."),o.createElement("ul",null,o.createElement("li",null,"The most basic case is ",o.createElement("code",null,"select ",o.createElement("strong",null,"*")," ...")," where no changes are made to the schema of the result. Therefore no projection is needed. You can use the optional table-alias-prefix if the columns of a single table/relation should be returned only: ",o.createElement("code",{className:"sql"},"select distinct R.* from R inner join S")),o.createElement("li",null,"When a subset of the columns are selected and/or reordered (",o.createElement("code",null," select a, b from ..."),") then a single ",o.createElement("a",{href:"#relalg-operations-projection"},"projection")," is used."),o.createElement("li",null,"Additionally to the previous case a ",o.createElement("a",{href:"#relalg-operations-renamecolumn"},"rename-column operator")," is added after the projection if new output-names are given with ",o.createElement("code",null,"as foo"),". e.g. ",o.createElement("code",null,"select a ",o.createElement("strong",null,"as foo")," from ..."))),o.createElement("p",null,"The allowed expressions are the same as for the ",o.createElement("a",{href:"#relalg-operations-projection"},"projection"),". So it can be either the name of the column (with optional renaming using ",o.createElement("code",null,"as"),") or a complex",o.createElement("a",{href:"#sql-valueexpr"},"value expression"),". In the latter case a output-name must be given using",o.createElement("code",null,"as")," because the tool requires every column to have a name."),o.createElement("h4",{id:"sql-from"},"FROM"),o.createElement("p",null,"In its simplest form the from-clause holds a single table/relation name that is used directly in the relalg statement. If the optional table-alias is specified with ",o.createElement("code",null,"table as foo")," this is reflected by wrapping the relation in a ",o.createElement("a",{href:"#relalg-operations-renamerelation"},"rename-relation operator")," with the given output-name."),o.createElement("code",{className:"example sql"},"select distinct x.a, x.b from R as x"),o.createElement("p",null,"Joins can be expressed using the ANSI join syntax"),o.createElement("code",{className:"example sql"},"select distinct * from A, B inner join C on ... inner join D natural natural join E left outer join F on ... left outer join G natural right outer join H on ... right outer join I natural full outer join J on ... full outer join K natural where ..."),o.createElement("p",null,"The comma is part of the old join syntax and is translated into a ",o.createElement("a",{href:"#relalg-operations-crossjoin"},"cross join"),"."),o.createElement("code",{className:"example sql"},"select distinct * from R, S as s, T where s.a = R.a"),o.createElement("p",null,"Instead of the name of relation a non-correlated substatement can be used. A table alias must be provided with ",o.createElement("code",null,"(...) as foo"),".",o.createElement("br",null),"A non-correlated substatement can be directly translated into relational algebra by just translate the sub-statement into relational algebra and use the resulting operator tree instead of the relation."),o.createElement("p",null,"Non-correlated means that it must not reference/use any columns of tables defined in the outer scope.",o.createElement("br",null),'This limitation is intentionally because the translation into relational algebra is not trivial and modern database systems use an extended set of operators internally that do not require a one-to-one translation into "classNameical" relational algebra. Therefore the learning effect for users of this tool would not be that big.'),o.createElement("code",{className:"example sql"},"select distinct * from R, (select * from S where a > 0) as x where x.a = R.a"),o.createElement("h4",{id:"sql-where"},"WHERE"),o.createElement("p",null,"The boolean condition in the where-clause can be any ",o.createElement("a",{href:"#sql-valueexpr"},"expression")," evaluating to boolean."),o.createElement("p",null,"The where clause is directly translated to an ",o.createElement("a",{href:"#relalg-operations-selection"},"relational algebra selection")," with the very same condition. This selection is applied after joining relations of the from-clause therefore has to use the original column names."),o.createElement("p",null,"Subquery Expressions like ",o.createElement("code",null,"EXISTS"),", ",o.createElement("code",null,"IN"),", ",o.createElement("code",null,"ANY/SOME")," or ",o.createElement("code",null,"ALL"),"are ",o.createElement("strong",null,"not supported"),' because their translation into relational algebra is not trivial and modern database systems use an extended set of operators internally that do not require a one-to-one translation into "classNameical" relational algebra. Therefore the learning effect for users of this tool would not be that big.'),o.createElement("h4",{id:"sql-groupby"},"GROUP BY"),o.createElement("p",null,"The GROUP-BY-clause takes a list of column names only argument."),o.createElement("p",null,"The GROUP-BY-clause is directly translated to the ",o.createElement("a",{href:"#relalg-operations-groupby"},"relational algebra group-by operation")," and is executed directly after the selection built from the WHERE-clause and before the projection/renaming build from the SELECT-clause. Therefore the column names that can be used are the ones available after all joining all tables."),o.createElement("p",null,"The aggregations used in the ",o.createElement("a",{href:"#relalg-operations-groupby"},"relational algebra group-by operation")," are taken from the SELECT-clause and an output-name must be given using ",o.createElement("code",null,"as"),"because the tool requires every column to have a name."),o.createElement("p",null,"If no aggregations are present in the SELECT-clause a projection is used instead of the group-by operation because ",o.createElement("a",{href:"#relalg-operations-groupby"},"sigma")," without aggregation has the very same effect."),o.createElement("p",null,"Every non-aggregation-column in the SELECT-clause must be present in the group by clause because the would not be available after the grouping."),o.createElement("h4",{id:"sql-having"},"HAVING"),o.createElement("p",null,"The HAVING-Clause represents an optional ",o.createElement("a",{href:"#relalg-operations-selection"},"relational algebra selection"),". The boolean condition can be any ",o.createElement("a",{href:"#sql-valueexpr"},"expression")," evaluating to boolean."),o.createElement("p",null,"The resulting selection is executed directly after the ",o.createElement("a",{href:"#relalg-operations-groupby"},"relational algebra group-by operation"),"."),o.createElement("p",null,"Unlike ",o.createElement("a",{href:"http://www.postgresql.org/docs/9.4/static/sql-select.html#SQL-HAVING",target:"_blank"},"PostgreSQL"),"the HAVING-clause is only allowed when either a aggregation or grouping is present."),o.createElement("h4",{id:"sql-orderby"},"ORDER BY"),o.createElement("p",null,"Order by takes a list of column names or indices of columns (starting with 1) as its argument."),o.createElement("p",null,"It is directly translated to the ",o.createElement("a",{href:"#relalg-operations-orderby"},"extended relational algebra operation order by (tau)"),"."),o.createElement("h4",{id:"sql-limit"},"LIMIT"),o.createElement("p",null,"The LIMIT-clause can be either specified with the LIMIT-OFFSET syntax used by PostgreSQL and MySQL or the FETCH-FIRST syntax introduced in SQL:2008."),o.createElement("p",null,"It is translated into a ",o.createElement("a",{href:"#relalg-operations-selection"},"relational algebra selection")," using the",o.createElement("code",null,"rownum()"),"-function to limit the number of rows returned."),o.createElement("h4",{id:"sql-setoperators"},"UNION / INTERSECT / EXCEPT"),o.createElement("p",null,"The Set-Operators UNION, INTERSECT and EXCEPT directly map to the relational algebra operators ",o.createElement("a",{href:"#relalg-operations-union"},"union"),", ",o.createElement("a",{href:"#relalg-operations-intersection"},"intersection")," and ",o.createElement("a",{href:"#relalg-operations-subtraction"},"subtraction"),"."),o.createElement("p",null,"The keyword ",o.createElement("code",null,"DISTINCT")," is optional because it represents the default behavior. The keyword",o.createElement("code",null,"ALL")," is ignored and a warning is shown because the targeted relational algebra has a implicit elimination duplicate rows."),o.createElement("p",null,"Parentheses can be used to create more complex statements:",o.createElement("br",null),o.createElement("code",{className:"example sql"},"( select distinct * from S union select distinct * from T ) except select distinct * from T order by 1 limit 1")),o.createElement("h4",{id:"sql-with"},"WITH"),o.createElement("p",null,"The WITH-clause (also known as ",o.createElement("i",null,"common table expressions"),") provides a way to define subqueries for single or multiple use in a statement. This can be thought as defining a temporary table for that query in SQL terminology or ",o.createElement("a",{href:"#relalg-assignment"},"creating variables in relational algebra"),". Recursive evaluation is not supported."),o.createElement("p",null,"Each subquery can be referenced by the name from the WITH-clause. The subquery is automatically renamed to the name used in the WITH-clause."),o.createElement("h4",{id:"sql-valueexpr"},"Value expressions"),o.createElement("p",null,"Value expressions are used for boolean expressions for WHERE- and HAVING-clause, the boolean conditions of joins and calculated values in the SELECT-clause. The type of a expression is either ",o.createElement("i",null,"string"),", ",o.createElement("i",null,"number"),", ",o.createElement("i",null,"date")," or ",o.createElement("i",null,"boolean")," and is determined by the used operations and columns."),o.createElement("p",null,"The supported functions and operations are the same for SQL and relational algebra: ",o.createElement("a",{href:"#relalg-valueexpr"},"value expression")),o.createElement("h2",{id:"license-help"},"Licence"),o.createElement("p",null,o.createElement("a",{rel:"license",href:"http://creativecommons.org/licenses/by-sa/4.0/"},o.createElement("img",{alt:"Creative Commons License",style:{borderWidth:0},src:"https://i.creativecommons.org/l/by-sa/4.0/88x31.png"})),o.createElement("br",null),"This document by Johannes Kessler is licensed under a ",o.createElement("a",{rel:"license",href:"http://creativecommons.org/licenses/by-sa/4.0/"},"Creative Commons Attribution-ShareAlike 4.0 International License"),".")))))}}n("./src/calc2/views/landing.css");class Bn extends o.Component{componentDidMount(){In("#exec1").click((function(){In(this).addClass("hidden"),In(this).next().removeClass("hidden")}))}render(){return o.createElement("div",{className:"view-max"},o.createElement(An,null),o.createElement(Fn,null),o.createElement("div",{className:"view-content"},o.createElement("div",{className:"container"},o.createElement("div",{className:"row"},o.createElement("div",{className:"col-md-12"},o.createElement("div",{className:"jumbotron",id:"landing-header-bar"},o.createElement("div",{className:"col-md-12 ct",id:"logos"},o.createElement("a",{href:"http://dbis-informatik.uibk.ac.at/",target:"_blank"},o.createElement("img",{src:"assets/logos/Logos_blue_large.png",alt:"Databases and Information Systems (DBIS)",width:"159",height:"120"})),o.createElement("a",{href:"http://www.uibk.ac.at/",target:"_blank"},o.createElement("img",{src:"assets/logos/Logos_uni_uni_2017_rgb_transparent.png",alt:"University of Innsbruck",width:"300",height:"120"}))),o.createElement("div",{className:"col-md-12 ct"},o.createElement("h1",{id:"heading"},"RelaX - relational algebra calculator"),o.createElement("p",null,"calculates any relational algebra statement like ",o.createElement("code",null,o.createElement("span",null,"( σ ",o.createElement("sub",null,"a > 42")," ( A ) ) ",o.createElement("span",{className:"math"},"⋈")," ( π ",o.createElement("sub",null,"a,b")," ( B ) )"))," on a set of relations.")),o.createElement("div",{className:"col-md-12 ct"},o.createElement(Xe,{className:"btn btn-primary btn-lg getStartedBtn",role:"button",to:"/relax/calc"},"Get Started"))),o.createElement("h2",null,"What is the relational algebra calculator?"),o.createElement("p",null,"If you want to learn SQL you take a database system and try some queries.",o.createElement("br",null),"But if you want to learn relational algebra what do you use? Pen and paper?"),o.createElement("p",null,"The relational algebra calculator helps you learn relational algebra (RelAlg) by executing it."),o.createElement("div",{className:"example"},"Subjects =",o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-condensed table-inline"},o.createElement("thead",null,o.createElement("tr",null,o.createElement("th",null,"suId"),o.createElement("th",null,"name"))),o.createElement("tbody",null,o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"0")),o.createElement("td",null,o.createElement("span",{className:"string"},"Computing"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"1")),o.createElement("td",null,o.createElement("span",{className:"string"},"Maths"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"2")),o.createElement("td",null,o.createElement("span",{className:"string"},"English"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"3")),o.createElement("td",null,o.createElement("span",{className:"string"},"History")))))),"Students =",o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-condensed table-inline"},o.createElement("thead",null,o.createElement("tr",null,o.createElement("th",null,"stId"),o.createElement("th",null,"name"))),o.createElement("tbody",null,o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"1")),o.createElement("td",null,o.createElement("span",{className:"string"},"John"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"2")),o.createElement("td",null,o.createElement("span",{className:"string"},"Mike"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"3")),o.createElement("td",null,o.createElement("span",{className:"string"},"Lisa"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"4")),o.createElement("td",null,o.createElement("span",{className:"string"},"Julia")))))),"Marks =",o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-condensed table-inline"},o.createElement("thead",null,o.createElement("tr",null,o.createElement("th",null,"suId"),o.createElement("th",null,"stId"),o.createElement("th",null,"mark"))),o.createElement("tbody",null,o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"0")),o.createElement("td",null,o.createElement("span",{className:"number"},"1")),o.createElement("td",null,o.createElement("span",{className:"string"},"A"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"0")),o.createElement("td",null,o.createElement("span",{className:"number"},"2")),o.createElement("td",null,o.createElement("span",{className:"string"},"B"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"0")),o.createElement("td",null,o.createElement("span",{className:"number"},"3")),o.createElement("td",null,o.createElement("span",{className:"string"},"C"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"0")),o.createElement("td",null,o.createElement("span",{className:"number"},"4")),o.createElement("td",null,o.createElement("span",{className:"string"},"A"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"2")),o.createElement("td",null,o.createElement("span",{className:"number"},"2")),o.createElement("td",null,o.createElement("span",{className:"string"},"A"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"3")),o.createElement("td",null,o.createElement("span",{className:"number"},"2")),o.createElement("td",null,o.createElement("span",{className:"string"},"F"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"number"},"4")),o.createElement("td",null,o.createElement("span",{className:"number"},"1")),o.createElement("td",null,o.createElement("span",{className:"string"},"C")))))),o.createElement("br",null),o.createElement("div",null,o.createElement("span",null,o.createElement("span",{className:"math"}," π "),o.createElement("sub",null," studentName, subjectName, mark "),"( ",o.createElement("span",null,o.createElement("span",{className:"math"}," ρ "),o.createElement("sub",null," studentName←st.name, subjectName←su.name "),"( ",o.createElement("span",null,"( ",o.createElement("span",null,"( ",o.createElement("span",null,o.createElement("span",{className:"math"}," ρ "),o.createElement("sub",null," su "),"( ",o.createElement("span",null,o.createElement("span",{className:"math"},"Subjects"))," )")," )",o.createElement("span",{className:"math"}," ⨝ "),o.createElement("sub",null," "),"( ",o.createElement("span",null,o.createElement("span",{className:"math"}," σ "),o.createElement("sub",null,"mark≥'C' "),"( ",o.createElement("span",null,o.createElement("span",{className:"math"}," ρ "),o.createElement("sub",null," m "),"( ",o.createElement("span",null,o.createElement("span",{className:"math"},"Marks"))," )")," )")," )")," )",o.createElement("span",{className:"math"}," ⨝ "),o.createElement("sub",null," m.stId=st.stId "),"( ",o.createElement("span",null,o.createElement("span",{className:"math"}," ρ "),o.createElement("sub",null,"st "),"( ",o.createElement("span",null,o.createElement("span",{className:"math"},"Students"))," )")," )")," )")," )")),"=",o.createElement("button",{type:"button",className:"btn",id:"exec1"},"execute"),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-condensed table-inline hidden"},o.createElement("thead",null,o.createElement("tr",null,o.createElement("th",null,"st.studentName"),o.createElement("th",null,"su.subjectName"),o.createElement("th",null,"m.mark"))),o.createElement("tbody",null,o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"string"},"Lisa")),o.createElement("td",null,o.createElement("span",{className:"string"},"Computing")),o.createElement("td",null,o.createElement("span",{className:"string"},"C"))),o.createElement("tr",null,o.createElement("td",null,o.createElement("span",{className:"string"},"Mike")),o.createElement("td",null,o.createElement("span",{className:"string"},"History")),o.createElement("td",null,o.createElement("span",{className:"string"},"F"))))))),o.createElement("h2",null,"Calculator features:"),o.createElement("ul",null,o.createElement("li",null,"supports most common operators",o.createElement("ul",null,o.createElement("li",null,"projection"),o.createElement("li",null,"selection"),o.createElement("li",null,"rename relations"),o.createElement("li",null,"rename columns"),o.createElement("li",null,"group by"),o.createElement("li",null,"intersect"),o.createElement("li",null,"union"),o.createElement("li",null,"set difference"),o.createElement("li",null,"cross join"),o.createElement("li",null,"theta join"),o.createElement("li",null,"natural join"),o.createElement("li",null,"natural left outer join"),o.createElement("li",null,"natural right outer join"),o.createElement("li",null,"natural full outer join"),o.createElement("li",null,"theta left outer join"),o.createElement("li",null,"theta right outer join"),o.createElement("li",null,"theta full outer join"),o.createElement("li",null,"left semi join"),o.createElement("li",null,"right semi join"),o.createElement("li",null,"anti join join"),o.createElement("li",null,"order by"))),o.createElement("li",null,"runs in any modern browser. no plugins needed"),o.createElement("li",null,"text based approach. lets you write RelAlg as easy as SQL"),o.createElement("li",null,"code editor with syntax highlighting and code completion"),o.createElement("li",null,"pre defined sets of relations"),o.createElement("li",null,"visualize statement in a operator tree"),o.createElement("li",null,"plain text alternatives for special symbols like σ or ",o.createElement("span",{className:"math"},"⋈")),o.createElement("li",null,"variables can be used to simplify expressions"),o.createElement("li",null,"new temporal relations can be declared in the statement"),o.createElement("li",null,"sql like comments"),o.createElement("li",null,"arbitrary boolean expressions in conditions"),o.createElement("li",null,"operations keep original order for better traceability"),o.createElement("li",null,"translates simple SQL-statements to RelAlg",o.createElement("ul",null,o.createElement("li",null,"no support for correlated sub-statements")))),o.createElement("h2",null,"Available data"),"You can either use one of the following datasets or create a new one.",o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table"},o.createElement("thead",null,o.createElement("tr",null,o.createElement("th",null,"Name"),o.createElement("th",null,"Source"),o.createElement("th",null,"Language"))),o.createElement("tbody",null,o.createElement("tr",null,o.createElement("td",null,"Kemper Datenbanksysteme"),o.createElement("td",null,o.createElement("a",{href:"http://www3.in.tum.de/teaching/bookDBMSeinf/"},"Alfons Kemper, André Eickler: Datenbanksysteme: Eine Einführung 8. Auflage"),", Seite 84, Abbildung 3.8"),o.createElement("td",null,"de")),o.createElement("tr",null,o.createElement("td",null,"UIBK - KursDB"),o.createElement("td",null,"Tables from and for the lecture ",o.createElement("a",{href:"http://dbis-informatik.uibk.ac.at/249-0-VO-Datenbanksysteme.html",target:"_blank"},"Databases: Foundations, Data Models and System Concepts - University of Innsbruck")," chapter 3"),o.createElement("td",null,"de")),o.createElement("tr",null,o.createElement("td",null,"UIBK - R, S, T"),o.createElement("td",null,"Tables from and for the lecture ",o.createElement("a",{href:"http://dbis-informatik.uibk.ac.at/249-0-VO-Datenbanksysteme.html",target:"_blank"},"Databases: Foundations, Data Models and System Concepts - University of Innsbruck")," chapter 3"),o.createElement("td",null,"de")),o.createElement("tr",null,o.createElement("td",null,"The Complete Book - Exercise 2.4.1"),o.createElement("td",null,"Sample Data from",o.createElement("a",{href:"http://infolab.stanford.edu/~ullman/dscb.html"},"Database Systems The Complete Book 2nd Edition by Hector Garcia-Molina, Jeff Ullman, and Jennifer Widom"),": Exercise 2.4.1 Page 52-55"),o.createElement("td",null,"en")),o.createElement("tr",null,o.createElement("td",null,"The Complete Book - Exercise 2.4.3"),o.createElement("td",null,"Sample Data from",o.createElement("a",{href:"http://infolab.stanford.edu/~ullman/dscb.html"},"Database Systems The Complete Book 2nd Edition by Hector Garcia-Molina, Jeff Ullman, and Jennifer Widom"),": Exercise 2.4.1 Page 55-57"),o.createElement("td",null,"en"))))),o.createElement("h2",null,"What it is not:"),o.createElement("p",null,"The tool is not meant to be a full database system. The goal of the implementation was to create a tool to support people to learn RelAlg."),o.createElement("div",{className:"scroll-x"},o.createElement("table",{className:"table table-condensed"},o.createElement("thead",null,o.createElement("tr",null,o.createElement("th",null," "),o.createElement("th",null,"Pen and Paper"),o.createElement("th",null,"relational algebra calculator"),o.createElement("th",null,"MySQL"))),o.createElement("tbody",null,o.createElement("tr",null,o.createElement("th",null,"SQL support"),o.createElement("td",null,o.createElement("span",{className:"fa fa-check"})," yes :-)"),o.createElement("td",null,o.createElement("span",{className:"fa fa-check"})," basic SQL"),o.createElement("td",null,o.createElement("span",{className:"fa fa-check"})," yes")),o.createElement("tr",null,o.createElement("th",null,"relational algebra"),o.createElement("td",null,o.createElement("span",{className:"fa fa-check"})," yes"),o.createElement("td",null,o.createElement("span",{className:"fa fa-check"})," yes"),o.createElement("td",null,o.createElement("span",{className:"fa fa-times"})," no")),o.createElement("tr",null,o.createElement("th",null,"use variables for RelAlg"),o.createElement("td",null,o.createElement("span",{className:"fa fa-check"})," yes"),o.createElement("td",null,o.createElement("span",{className:"fa fa-check"})," yes"),o.createElement("td",null,o.createElement("span",{className:"fa fa-times"})," no")),o.createElement("tr",null,o.createElement("th",null,"large datasets"),o.createElement("td",null,o.createElement("span",{className:"fa fa-times"})," no"),o.createElement("td",null,o.createElement("span",{className:"fa fa-times"})," no"),o.createElement("td",null,o.createElement("span",{className:"fa fa-check"})," yes")),o.createElement("tr",null,o.createElement("th",null,"query plan"),o.createElement("td",null,o.createElement("span",{className:"fa fa-times"})," no"),o.createElement("td",null,o.createElement("span",{className:"fa fa-check"})," yes"),o.createElement("td",null,o.createElement("span",{className:"fa fa-times"})," no")),o.createElement("tr",null,o.createElement("th",null,"intermediate results"),o.createElement("td",null,o.createElement("span",{className:"fa fa-times"})," no"),o.createElement("td",null,o.createElement("span",{className:"fa fa-check"})," yes"),o.createElement("td",null,o.createElement("span",{className:"fa fa-times"})," no")),o.createElement("tr",null,o.createElement("th",null,"iterative working"),o.createElement("td",null,o.createElement("span",{className:"fa fa-times"})," no"),o.createElement("td",null,o.createElement("span",{className:"fa fa-check"})," yes"),o.createElement("td",null,o.createElement("span",{className:"fa fa-check"})," yes"))))),o.createElement("h2",{id:"changelog"},"Changelog"),o.createElement("ul",null,o.createElement("li",null,"0.20",o.createElement("ul",null,o.createElement("li",null,"added option to automatically replace operators in relational algebra: all plaintext-syntax operators get replaced with the equivalent mathematical symbol or vice versa."))),o.createElement("li",null,"0.19",o.createElement("ul",null,o.createElement("li",null,"added datepicker to quickly insert a date literal"))),o.createElement("li",null,"0.18",o.createElement("ul",null,o.createElement("li",null,"added support for the ",o.createElement("a",{href:"/relax/help#relalg-valueexpr"},"LIKE-operator")," for SQL and relational algebra",o.createElement("br",null),"e.g. ",o.createElement("code",null,"pi 'abc' like 'a%'->x R")),o.createElement("li",null,"added translation support for the calculator using ",o.createElement("a",{href:"http://i18next.com/",target:"_blank"},"i18next"),". This allows easy translation of the main calculator into other languages."),o.createElement("li",null,"calculator is now available in ",o.createElement("a",{href:"calc.htm?lang=de"},"german")),o.createElement("li",null,"ported project to ES2015 (it now gets transpiled to ES5 and packed using ",o.createElement("a",{target:"_blank",href:"https://babeljs.io/"},"Babel.js"),"and ",o.createElement("a",{target:"_blank",href:"http://browserify.org/"},"Browserify"),")"))),o.createElement("li",null,"0.17",o.createElement("ul",null,o.createElement("li",null,"fixed bug: inline-table-editor not working"),o.createElement("li",null,"fixed bug: formula for !a was not working"))),o.createElement("li",null,"0.16",o.createElement("ul",null,o.createElement("li",null,"disallow relational algebra keywords as column-/relation-names"),o.createElement("li",null,"fixed precedence for ",o.createElement("a",{href:"/relax/help#relalg-valueexpr"},"CASE-WHEN-expressions")),o.createElement("li",null,"added support for the SQL-92 ",o.createElement("a",{href:"/relax/help#relalg-valueexpr"},o.createElement("code",null,"||"),"-concat operator")),o.createElement("li",null,"added ",o.createElement("code",null,"except")," as alternative syntax for the ",o.createElement("a",{href:"/relax/help#relalg-operations-subtraction"},"relational algebra set-difference operator")),o.createElement("li",null,"fixed bug where ",o.createElement("code",null,"A=R join S A")," was interpreted as",o.createElement("code",null,"A=(R join S A)")," instead of ",o.createElement("code",null,"A=(R join S) A"),".",o.createElement("br",null),"see ",o.createElement("a",{href:"/relax/help#relalg-operations-innerjoin"},"help page")," for more information"))),o.createElement("li",null,"0.15",o.createElement("ul",null,o.createElement("li",null,"added support for ",o.createElement("a",{href:"/relax/help#relalg-valueexpr"},"hour(), minute() and second()")),o.createElement("li",null,"added support for ",o.createElement("a",{href:"/relax/help#relalg-valueexpr"},"now()"),o.createElement("br",null),"e.g. ",o.createElement("code",null,"pi hour(now())->x, minute(now())->y, second(now())->z ( R )")),o.createElement("li",null,"added support for ",o.createElement("a",{href:"/relax/help#relalg-valueexpr"},"n-ary concat"),o.createElement("br",null),"e.g. ",o.createElement("code",null,"pi concat(b, '_', c)->x R")),o.createElement("li",null,"added support for WITH-clauses for SQL"))),o.createElement("li",null,"0.14",o.createElement("ul",null,o.createElement("li",null,"improve error message for theta-joins with conflicting columns"),o.createElement("li",null,"improve error message and added example for assignments without query error"),o.createElement("li",null,"bugfix: calculator-tour did not work correctly for Edge on Windows 10"))),o.createElement("li",null,"0.13",o.createElement("ul",null,o.createElement("li",null,'updated to CodeMirror version 5.1 with "experimental mobile support"'),o.createElement("li",null,"added support for ",o.createElement("a",{href:"/relax/help#relalg-valueexpr"},"COALESCE()"),o.createElement("br",null),"e.g. ",o.createElement("code",null,"pi coalesce(a, b, 1)->x R"),", ",o.createElement("code",null,"select coalesce(a, b, 1) as x from R")),o.createElement("li",null,"added support for ",o.createElement("a",{href:"/relax/help#relalg-valueexpr"},"CASE WHEN"),o.createElement("br",null),"e.g. ",o.createElement("code",null,"select case when a > 3 then a+1 else a end as x from R")),o.createElement("li",null,"added support for complex union/intersect/except statements for SQL",o.createElement("br",null),"e.g. ",o.createElement("code",null,"(select * from S union ( select * from T except select * from T )) order by 1")))),o.createElement("li",null,"0.12",o.createElement("ul",null,o.createElement("li",null,"added support for more complex FROM-clauses for SQL",o.createElement("br",null),"e.g. ",o.createElement("code",null,"select distinct * from R, (S natural join T)")),o.createElement("li",null,"simplify and link the syntax diagrams at the help page"))),o.createElement("li",null,"0.11",o.createElement("ul",null,o.createElement("li",null,"added a tour to explain the main features of the tool to new users (using ",o.createElement("a",{href:"http://bootstraptour.com/",target:"_blank"},"Bootstrap Tour"),")"),o.createElement("li",null,"added ",o.createElement("a",{href:"/relax/help#sql-reference"},"reference for SQL in the help section")),o.createElement("li",null,"added support for USING clause for joins for SQL"),o.createElement("li",null,"added support FETCH FIRST syntax (SQL:2008) for SQL",o.createElement("br",null),"e.g. ",o.createElement("code",null,"select * from R offset 2 rows fetch first 10 rows only")),o.createElement("li",null,"allow DISTINCT on set operators for SQL"),o.createElement("li",null,"bugfix: having should be allowed without group by if aggregation is used"))),o.createElement("li",null,"0.10",o.createElement("ul",null,o.createElement("li",null,"added support for ",o.createElement("a",{href:"/relax/help#relalg-valueexpr"},"arithmetic expressions and functions")," for SQL",o.createElement("br",null),"e.g. ",o.createElement("code",null,"select distinct a+2 as x from R where length(b) > 2")),o.createElement("li",null,"show warnings instead of errors when not using distinct or using all on set operators in SQL"))),o.createElement("li",null,"0.9",o.createElement("ul",null,o.createElement("li",null,"added support for arithmetic operators and functions in ",o.createElement("a",{href:"/relax/help#relalg-valueexpr"},"(e.g boolean) expressions")," for relational algebra"),o.createElement("li",null,"projection supports ",o.createElement("a",{href:"/relax/help#relalg-operations-projection"},"expressions")),o.createElement("li",null,"removed magic ",o.createElement("a",{href:"/relax/help#relalg-operations-projection"},"ROWNUM")," column; ",o.createElement("a",{href:"/relax/help#relalg-valueexpr"},"ROWNUM()")," is now a function"),o.createElement("li",null,"tutorials for ",o.createElement("a",{href:"/relax/help#tutorial-user"},"users")," and ",o.createElement("a",{href:"/relax/help#tutorial-maintainer"},"maintainers")),o.createElement("li",null,"new braces handling in formula generation (braces are only placed if necessary)"),o.createElement("li",null,"bugfix: rename not existent column was silently ignored"),o.createElement("li",null,"syntax of dates has changed ",o.createElement("code",null,"1970-01-01")," could not be used any more because it is ambiguous (arithmetic operaton or date). The SQL notation (",o.createElement("code",null,"date('1970-01-01')"),") is now used for the relational algebra mode."))),o.createElement("li",null,"0.8",o.createElement("ul",null,o.createElement("li",null,"grid editor for inline relations"),o.createElement("li",null,"sql-dump import (beta)"),o.createElement("li",null,"group editor"),o.createElement("li",null,"changed the basic structure of the editors (internally)"),o.createElement("li",null,"duplicate rows are removed in every step")))),o.createElement("h2",null,"Who?"),o.createElement("p",null,"The relational algebra calculator was created by Johannes Kessler BSc at ",o.createElement("a",{href:"https://dbis-informatik.uibk.ac.at/1-1-Home.html"},"Databases and Information Systems Group")," at the ",o.createElement("a",{href:"http://informatik.uibk.ac.at/"},"Institute of Computer Science")," at the ",o.createElement("a",{href:"http://www.uibk.ac.at/index.html.en"},"University of Innsbruck")," under supervision of Michael Tschuggnall PhD and Prof. Dr. Günther Specht"),o.createElement("h2",null,"External resources"),o.createElement("p",null,"This tool was not written from scratch but many different external resources/frameworks/projects/libs are used."),o.createElement("p",null,"This is a list of resources/frameworks/projects/libs used for this tool (in alphabetical order) to give credit where credit is due and guide anyone interested to them without having to look through the code."),o.createElement("ul",null,o.createElement("li",null,o.createElement("a",{target:"_blank",href:"https://babeljs.io/"},"Babel JavaScript compiler")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://blanketjs.org/"},"blanket.js")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://botmonster.com/jquery-bootpag/"},"bootpag")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://getbootstrap.com/"},"Bootstrap")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"https://bootstrap-datepicker.readthedocs.org"},"bootstrap-datepicker")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://bootstraptour.com/"},"Bootstrap Tour")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://browserify.org/"},"Browserify")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://codemirror.net/"},"CodeMirror")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://codepen.io/Pestov/pen/BLpgm"},"CSS3 family tree by Ilya Pestov")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://www.gnu.org/software/freefont/"},"FreeSans by GNU FreeFont")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://gruntjs.com/"},"Grunt")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://handlebarsjs.com/"},"handlebars")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://handsontable.com/"},"Handsontable")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://i18next.com/"},"i18next")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://jquery.com/"},"jQuery")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"https://github.com/chjj/marked"},"marked - a markdown parser")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://pegjs.org/"},"PEG.js - Parser Generator for JavaScript")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"http://qunitjs.com/"},"QUnit - js unit testing")),o.createElement("li",null,o.createElement("a",{target:"_blank",href:"https://github.com/tabatkins/railroad-diagrams"},"tabatkins/railroad-diagrams"))))))))}}class Un extends o.Component{componentDidMount(){}render(){return o.createElement("div",{className:"view-max"},o.createElement(An,null),o.createElement(Fn,null),o.createElement("div",{className:"view-min"},"Databases and Information System",o.createElement("br",null),"Universität Innsbruck",o.createElement("br",null),"ICT - building, second floor",o.createElement("br",null),"Technikerstrasse 21a",o.createElement("br",null),"A-6020 Innsbruck",o.createElement("br",null)))}}n("./src/calc2/style/index.scss");class zn extends o.Component{constructor(e){super(e),this.state={isNavbarOpen:!0}}componentDidMount(){var e;const t=document.getElementById("loadingScreen");null===(e=null==t?void 0:t.parentNode)||void 0===e||e.removeChild(t)}render(){const{store:e}=this.props,{isNavbarOpen:t}=this.state;return o.createElement(Ue,null,o.createElement(f,{store:e},o.createElement(r.a,null,o.createElement(Be,null,o.createElement(Re,{exact:!0,from:"/",to:"/relax/landing"}),o.createElement(Re,{exact:!0,from:"/relax",to:"/relax/landing"}),o.createElement(Pe,{path:"/relax/landing",component:Bn}),o.createElement(Pe,{path:"/relax/help",component:Wn}),o.createElement(Pe,{path:"/relax/imprint",component:Un}),o.createElement(Re,{from:"/relax/calc",to:"/relax/calc/local/uibk/local/0",exact:!0,strict:!0}),o.createElement(Pe,{path:"/relax/calc/:source/:id/:filename/:index",component:Pn}),o.createElement(Pe,{path:"/relax/calc/:source/:id",component:Pn}),o.createElement(Pe,{render:e=>o.createElement("div",{className:"view-min"},o.createElement("h1",null,"404"),o.createElement("p",null,"This route doesn't exist"),o.createElement("span",null,JSON.stringify(e)))})))))}}},"./src/calc2/style/index.scss":function(e,t,n){},"./src/calc2/utils/groupUtils.ts":function(e,t,n){"use strict";n.d(t,"a",(function(){return u})),n.d(t,"b",(function(){return c}));var r=n("./src/db/relalg.ts"),o=n("./node_modules/jquery/dist/jquery.js");const i=n("./src/calc2/data/uibk.txt"),a={uibk:i.default?i.default:""};function s(e,t,n){return u(Object(r.c)(e),t,n)}function l(e,t,n){if(0===(e=e.filter(({name:e})=>e===t)).length)return{fallback:n};let r=null;const o={};for(let t=0;t{switch(e){case"gist":o.ajax({url:`https://api.github.com/gists/${t}`,dataType:"json",success:function(o){const a=[];for(const u in o.files){if(!o.files.hasOwnProperty(u))continue;const c=null===o.owner?"anonymous":o.owner.login,d=null===o.owner?void 0:o.owner.html_url,h={source:e,id:o.id,filename:u,index:-1,maintainer:n,maintainerGroup:r},f={author:c,authorUrl:d,lastModified:new Date(o.updated_at),url:o.url};try{a.push(...s(o.files[u].content,h,f)),i(a)}catch(e){const n='could not parse given group from gist with id "'+t+'": '+e;console.error(n,t,e,u,o),l(new Error(n))}}},crossDomain:!0,statusCode:{404:function(){l(new Error("gist "+t+" not found"))}},async:!0});break;case"local":try{const o=s(a[t],{source:e,id:t,filename:"local",index:-1,maintainer:n,maintainerGroup:r},{});i(o)}catch(e){let t="cannot parse groups file: "+e.message;t+="
              see log for more information",console.error(t,e),l(new Error(t))}break;case"http":{const e="parsing groups from arbitrary urls is no longer supported; use github gists instead.";window.alert(e),l(new Error(e));break}default:l(new Error("unknown source "+e))}})}},"./src/calc2/views/help.css":function(e,t,n){},"./src/calc2/views/landing.css":function(e,t,n){},"./src/db/exec/Column.ts":function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));class r{constructor(e,t,n="null"){this._type="null",this._name=e,this._relAlias=t,this._type=n}getName(){return this._name}getRelAlias(){return this._relAlias}getType(){return this._type}setRelAlias(e){this._relAlias=e}toString(){return r.printColumn(this._name,this._relAlias)}equals(e){return this._name===e._name&&this._relAlias===e._relAlias}static printColumn(e,t){let n;return n="number"==typeof e?`[${e}]`:e,null===t?n:`${t}.${n}`}}},"./src/db/exec/ExecutionError.ts":function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));class r extends Error{constructor(e,t){super(e),this.codeInfo=t||void 0}}},"./src/db/exec/RANode.ts":function(e,t,n){"use strict";n.d(t,"b",(function(){return i})),n.d(t,"c",(function(){return a})),n.d(t,"a",(function(){return s}));var r=n("./src/db/exec/ExecutionError.ts");class o{constructor(e=""){this._codeInfo=null,this._metaData={},this._resultNumRows=-1,this._wrappedInParentheses=!1,this._warnings=[],this._functionName=e}setCodeInfoObject(e){return this._codeInfo=e,this}addWarning(e,t){const n={message:e,codeInfo:void 0};t&&(n.codeInfo=t),this._warnings||(this._warnings=[]),this._warnings.push(n)}setWrappedInParentheses(e=!0){this._wrappedInParentheses=e}throwExecutionError(e){throw new r.a(e,this._codeInfo)}setMetaData(e,t){this._metaData[e]=t}hasMetaData(e){return void 0!==this._metaData[e]}getMetaData(e){return this._metaData[e]}getResultNumRows(){if(void 0===this._resultNumRows||-1===this._resultNumRows)throw new Error("result num rows not set! call only after getResult");return this._resultNumRows}setResultNumRows(e){this._resultNumRows=e}_returnOrCreateSession(e){return void 0===e?{statement_timestamp:new Date}:e}getArgumentHtml(){return""}static foreachRecursive(e,t){t(e),e instanceof a?t(e.getChild()):e instanceof s&&(t(e.getChild()),t(e.getChild2()))}}class i extends o{getWarnings(e){return this._warnings}getFormulaHtml(e=!0,t=!0){const n=!0===this._wrappedInParentheses&&!0===t;return`${n?"(":""}\n\t\t\t\t\n\t\t\t\t\t${this._functionName}\n\t\t\t\t\n\t\t\t${n?")":""}`}}class a extends o{constructor(e,t){super(e),this._child=t}getChild(){return this._child}getWarnings(e){return!0===e?[...this._warnings,...this.getChild().getWarnings(!0)]:[...this._warnings]}getFormulaHtml(e=!0,t=!0){const n=!0===this._wrappedInParentheses&&!0===t;return`${n?"(":""}\n\n\t\t\t\t\n\t\t\t\t\t${this._functionName}\n\t\t\t\t\t${this.getArgumentHtml()}\n\t\t\t\t\t${!0===e?this.getChild().getFormulaHtml(e,!0):""}\n\t\t\t\t\n\t\t\t${n?")":""}`}}class s extends o{constructor(e,t,n){super(e),this._child=t,this._child2=n}getChild(){return this._child}getChild2(){return this._child2}getWarnings(e){return!0===e?[...this._warnings,...this.getChild().getWarnings(!0),...this.getChild2().getWarnings(!0)]:[...this._warnings]}getFormulaHtml(e=!0,t=!0){const n=!0===this._wrappedInParentheses||!0===t;return`${n?"(":""}\n\n\t\t\t\t\n\t\t\t\t\t${!0===e?this.getChild().getFormulaHtml(e,!0):""}\n\t\t\t\t\t${this._functionName}\n\t\t\t\t\t${this.getArgumentHtml()}\n\t\t\t\t\t${!0===e?this.getChild2().getFormulaHtml(e,!0):""}\n\t\t\t\t\n\t\t\t${n?")":""}`}}},"./src/db/exec/Relation.ts":function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var r=n("./src/db/exec/RANode.ts"),o=n("./src/db/exec/Table.ts");class i extends r.b{constructor(e,t){super(e),this._schema=null,void 0===t?this._table=new o.a:(t.check(),this._schema=t.getSchema(),this._table=t.getResult())}setSchema(e,t=!1){return this._schema=e.copy(),!0!==t&&this._schema.setRelAlias(this._functionName),this._table.setSchema(this._schema),this}addRow(e){this._table.addRow(e)}addRows(e){this._table.addRows(e)}getResultNumRows(){return this._resultNumRows}getResult(e){this._returnOrCreateSession(e);const t=this._table.copy();return t.eliminateDuplicateRows(),this.setResultNumRows(t.getNumRows()),t}getSchema(){return this._table.getSchema()}getName(){return this._functionName}check(){}hasChild(){return!1}copy(){if(null===this._schema)throw new Error("check not called");const e=new i(this._functionName);return e.setSchema(this._schema),e._table=this._table.copy(),e}}},"./src/db/exec/Schema.ts":function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var r=n("./node_modules/i18next/dist/es/index.js"),o=n("./src/db/exec/Column.ts");class i{constructor(){this._names=[],this._relAliases=[],this._types=[],this._size=0,this._colIndexPerName={}}getSize(){return this._size}addColumn(e,t,n){if("string"!==n&&"date"!==n&&"number"!==n&&"boolean"!==n)throw new Error("unknown type! "+n);this._names.push(e),this._relAliases.push(t),this._types.push(n);const o=this._size;if(!1===this.isUnique(o))throw new Error(r.a("db.messages.exec.error-column-not-unique",{column:t+"."+e}));return this._addColToIndex(e,o),this._size++,this}addColumn2(e){return this.addColumn(e.getName(),e.getRelAlias(),e.getType())}_addColToIndex(e,t){void 0===this._colIndexPerName[e]?this._colIndexPerName[e]=[t]:this._colIndexPerName[e].push(t)}_removeColFromIndex(e){const t=this._names[e],n=this._colIndexPerName[t];n.splice(n.indexOf(e,0),1),0===n.length&&delete this._colIndexPerName[t]}removeColumn(e){this._names.splice(e,1),this._relAliases.splice(e,1),this._types.splice(e,1),this._size--;for(let t=e;tthis._size)throw new Error(r.a("db.messages.exec.error-column-index-out-of-range",{column:o.a.printColumn(e,t),schema:this.toString()}));if(null===t)return[n];if(this._relAliases[n]===t)return[n]}return[]}getType(e){return this._types[e]}equals(e){if(!1===this.equalsTypeOnly(e))return!1;for(let t=0;t1}getName(e){return this._names[e]}getFullName(e){return(this._relAliases[e]?this._relAliases[e]+".":"")+this._names[e]}toString(){const e=[];for(let t=0;t'+Object(r.d)(n,o)+"
              "}getRows(e=0,t){if(0===e&&void 0===t)return this._rows;{const n=this._rows.length;let r=n;t&&t>0&&(r=Math.min(n,e+t)),this._rows.slice(e,r);const o=[];for(let t=e;t"+n.getName()+"":""+n.toString()+""}o+="";let i="";const a=this.getNumRows();let s=a;t&&t>0&&(s=Math.min(a,n+t));for(let e=n;e"+this.getValueHtmlAt(e,n)+"";i+=t+""}return""+o+i+"
              "}equals(e){if(e instanceof a==!1)throw new Error("can not compare");if(!1===this._schema.equals(e._schema))return!1;if(this._rows.length!==e._rows.length)return!1;for(let t=0;tn)throw new Error("invalid sort cols");for(let e=0;e=n||r[e]<0)throw new Error("invalid sort cols");const i=r.length;if(i!==o.length)throw new Error("invalid sort cols");const a=r.map(e=>this._schema.getType(e)),s=function(e,t,n,r,o){const i=e[n],a=t[n];if(null===i&&null===a)return 0;if(null===i&&null!==a)return 1*r;if(null!==i&&null===a)return-1*r;switch(o){case"number":case"date":case"boolean":return r*(i-a);case"string":return r*i.localeCompare(a);case"null":return 0}};this._rows.sort((function(e,t){let n=0;for(let l=0;l=e.length?t[this._index-e.length]:e[this._index]}toString(){return o.a.printColumn(this._name,this._relAlias)}getFormulaHtml(){const e=o.a.printColumn(this._name,this._relAlias);return!0===this._wrappedInParentheses?"("+e+")":e}static _getColumnIndex(e,t,n,r){if(!t||null===t)return e.getColumnIndex(n,r,!0);const o=e.getColumnIndex(n,r,!1);return-1===o?t.getColumnIndex(n,r,!0)+e.getSize():(t.getColumnIndex(n,r,!1),o)}static _getType(e,t,n){return n>=e.getSize()?t.getType(n-e.getSize()):e.getType(n)}}class u extends s{constructor(e,t,n){super(),this._func=t,this._dataType=e,this._dataTypeCalculated=null,this._args=n||[]}evaluate(e,t,n,r){switch(this._dataType){case"string":return this._evaluateString(e,t,n,r);case"number":return this._evaluateNumber(e,t,n,r);case"boolean":return this._evaluateBoolean(e,t,n,r);case"date":return this._evaluateDate(e,t,n,r);case"null":return this._evaluateNull(e,t,n,r);default:throw new Error("this should not happen!")}}_parseIsoDate(e){const t=/^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$/.exec(e);if(null===t)throw new r.a(i.a("db.messages.exec.error-invalid-date-format",{str:e}),this._codeInfo);const n=parseInt(t[1],10),o=parseInt(t[2],10)-1,a=parseInt(t[3],10),s=new Date(n,o,a);return s.getFullYear()===n&&s.getMonth()===o&&s.getDate()===a||this.throwExecutionError(i.a("db.messages.exec.error-invalid-date-format",{str:e})),s}_evaluateNull(e,t,n,r){switch(this._func){case"constant":return null;case"coalesce":for(let o=0;o1&&this._args[1].evaluate(e,t,n,r),null===o||this._args.length>1&&null===i)return null;switch(this._func){case"date":return this._parseIsoDate(o);case"adddate":return new Date(o.getTime()+864e5*i);case"subdate":return new Date(o.getTime()-864e5*i);default:throw new Error("this should not happen!")}}_checkDate(e,t){switch(this._func){case"transaction_timestamp":case"statement_timestamp":case"clock_timestamp":case"now":return!0;case"date":return this._checkArgsDataType(e,t,["string"]);case"adddate":case"subdate":return this._checkArgsDataType(e,t,["date","number"]);default:throw new Error("this should not happen!")}}_evaluateBoolean(e,t,n,r){let o,i,a;if("constant"===this._func)return this._args[0];switch(o=this._args[0].evaluate(e,t,n,r),i=this._args.length>1&&this._args[1].evaluate(e,t,n,r),this._func){case"not":return"unknown"===o?o:!o;case"and":return!1!==o&&!1!==i&&(!0===o&&!0===i||"unknown");case"or":return!0===o||!0===i||(!1!==o||!1!==i)&&"unknown";case"xor":return"unknown"===o||"unknown"===i?"unknown":o!==i;case"=":case">=":case"<=":case">":case"<":case"!=":return a=this._args[0].getDataType(),u._condition_compare(o,i,a,this._func);case"like":case"ilike":if(!this._regex)throw new Error("regex should have been set by check");return this._regex.test(o);default:throw new Error("this should not happen!")}}static _condition_compare(e,t,n,r){if(null===e||null===t)switch(r){case"=":case">=":case"<=":return e===t||"unknown";case"<":case">":return e!==t&&"unknown";case"!=":return e!==t;default:throw new Error("unknown operator")}switch(n){case"number":case"string":switch(r){case"=":return e===t;case">":return e>t;case"<":return e=":return e>=t;case"<=":return e<=t;case"!=":return e!==t;default:throw new Error("unknown operator")}case"date":switch(r){case"=":return e.getTime()===t.getTime();case">":return e>t;case"<":return e=":return e>=t;case"<=":return e<=t;case"!=":return e.getTime()!==t.getTime();default:throw new Error("unknown operator")}case"boolean":if("boolean"!=typeof e||"boolean"!=typeof t)throw new Error("operands have different type");switch(r){case"=":return e===t;case">":return e>t;case"<":return e=":return e>=t;case"<=":return e<=t;case"!=":return e!==t;default:throw new Error("unknown operator")}default:throw new Error("unknown type "+n)}}_checkBoolean(e,t){let n,r;switch(this._func){case"constant":return!0;case"not":return this._checkArgsDataType(e,t,["boolean"]);case"and":case"or":case"xor":return this._checkArgsDataType(e,t,["boolean","boolean"]);case"=":case">=":case"<=":case">":case"<":case"!=":return this._args[0].check(e,t),this._args[1].check(e,t),n=this._args[0].getDataType(),r=this._args[1].getDataType(),"null"===n||"null"===r?!0:n===r||(this.throwExecutionError(i.a("db.messages.exec.error-could-not-compare-different-types",{typeA:n,typeB:r})),this._checkArgsDataType(e,t,["boolean","boolean"]));case"like":case"ilike":if(this._args[0].check(e,t),"string"!==this._args[1].getDataType()||"constant"!==this._args[1]._func)return!1;const o=this._args[1]._args[0];let a=String(o).replace(/[\\^$*+?.()|[\]{}]/g,"\\$&");a=a.replace(/([^\\]?)_/g,"$1."),a=a.replace(/([^\\]?)%/g,"$1.*");const s="ilike"===this._func?"i":"";this._regex=new RegExp("^"+a+"$",s);break;default:throw new Error("this should not happen!")}}_evaluateString(e,t,n,r){switch(this._func){case"constant":return this._args[0];case"lower":case"upper":const o=this._args[0].evaluate(e,t,n,r);return null===o?null:"lower"===this._func?o.toLowerCase():o.toUpperCase();case"concat":let i="";for(let o=0;o0?this._args[0].evaluate(e,t,n,r):void 0,i=this._args.length>1?this._args[1].evaluate(e,t,n,r):void 0;switch(this._func){case"add":return null===o||null===i?null:o+i;case"sub":return null===o||null===i?null:o-i;case"mul":return null===o||null===i?null:o*i;case"div":return null===o||null===i?null:o/i;case"mod":return null===o||null===i?null:o%i;case"abs":return null===o?null:Math.abs(o);case"floor":return null===o?null:Math.floor(o);case"ceil":return null===o?null:Math.ceil(o);case"round":return null===o?null:Math.round(o);case"minus":return null===o?null:-o;case"rand":return Math.random();case"rownum":return n+1;case"strlen":return null===o?null:o.length;case"year":return null===o?null:o.getFullYear();case"month":return null===o?null:o.getMonth()+1;case"dayofmonth":return null===o?null:o.getDate();case"hour":return null===o?null:o.getHours();case"minute":return null===o?null:o.getMinutes();case"second":return null===o?null:o.getSeconds();default:throw new Error("this should not happen!")}}_checkArgsDataType(e,t,n){const r=[];if(this._args.length!==n.length)throw new Error("this should not happen: #args != #types");for(let o=0;o{let t=(e||this._func)+"(";for(let e=0;e{let t="CASE";for(let n=0;n{let t="";return t+=` ${e||this._func} `,t=this._args[0].getFormulaHtml()+t,t+=this._args[1].getFormulaHtml(),`${t}`};function r(){const{_func:r}=this;switch(r){case"constant":return a(this._args[0],this._dataTypeCalculated||this._dataType);case"rand":case"rownum":case"abs":case"ceil":case"floor":case"round":case"year":case"month":case"dayofmonth":case"hour":case"minute":case"second":case"adddate":case"subdate":case"concat":case"upper":case"lower":case"date":case"strlen":return e.call(this,"length");case"minus":return e.call(this,"-");case"not":return e.call(this,"!");case"caseWhen":case"caseWhenElse":return t.call(this,"caseWhenElse"===this._func);case"add":return n.call(this,"+");case"sub":return n.call(this,"-");case"mul":return n.call(this,"*");case"div":return n.call(this,"/");case"mod":return n.call(this,"%");case"and":case"or":case"xor":case"like":case"ilike":case"=":return n.call(this,r);case">=":return n.call(this,"≥");case"<=":return n.call(this,"≤");case">":return n.call(this,">");case"<":return n.call(this,"<");case"!=":return n.call(this,"≠")}return this.toString()}return!0===this._wrappedInParentheses?`(${r.call(this)})`:r.call(this).toString()}}},"./src/db/parser/grammar_ra.pegjs":function(e,t,n){"use strict";function r(e,t,n,o){this.message=e,this.expected=t,this.found=n,this.location=o,this.name="SyntaxError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,r)}!function(e,t){function n(){this.constructor=e}n.prototype=t.prototype,e.prototype=new n}(r,Error),r.buildMessage=function(e,t){var n={literal:function(e){return'"'+o(e.text)+'"'},class:function(e){var t,n="";for(t=0;t0){for(t=1,r=1;t",!1),re=(pr("ψ",!1),pr("psi",!0),pr("τ",!1)),oe=function(){return ri("tau")},ie=pr("tau",!0),ae=pr("γ",!1),se=function(){return ri("gamma")},le=pr("gamma",!0),ue=pr("∪",!1),ce=function(){return ri("unionOperator")},de=pr("union",!0),he=pr("∩",!1),fe=function(){return ri("intersectOperator")},me=pr("intersect",!0),pe=pr("÷",!1),ge=pr("/",!1),ye=pr("\\",!1),be=function(){return ri("differenceOperator")},ve=pr("except",!0),_e=pr("⨯",!1),we=pr("x",!1),Ee=function(){return ri("crossJoinOperator")},je=pr("cross",!0),Ce=pr("join",!0),Se=pr("⨝",!1),Oe=pr("⋈",!1),ke=function(){return ri("innerJoinOperator")},Te=pr("inner",!0),Me=function(){return ri("naturalJoinOperator")},xe=pr("natural",!0),Le=pr("⋉",!1),Re=function(){return ri("leftSemiJoinOperator")},Ae=pr("left",!0),De=pr("semi",!0),Ne=pr("⋊",!1),Pe=function(){return ri("rightSemiJoinOperator")},Ie=pr("right",!0),He=pr("▷",!1),Ye=function(){return ri("antiJoinOperator")},Fe=pr("anti",!0),We=pr("⟕",!1),Be=function(){return ri("leftOuterJoinOperator")},Ue=pr("outer",!0),ze=pr("⟖",!1),Ve=function(){return ri("rightOuterJoinOperator")},qe=pr("⟗",!1),Ge=function(){return ri("fullOuterJoinOperator")},Ke=pr("full",!0),Xe=pr(",",!1),$e=function(e,t){var n=[e];if(null!==t)for(var r in t)n.push(t[r][3]);return n},Je=function(e,t){var n=[e];if(null!==t)for(var r in t)n.push(t[r][3]);return n},Qe=pr("asc",!0),Ze=pr("desc",!0),et=pr("sum",!0),tt=pr("count",!0),nt=pr("avg",!0),rt=pr("min",!0),ot=pr("max",!0),it=pr("(",!1),at=pr(")",!1),st=pr("count(*)",!0),lt=function(e){for(var t=[],n=0;n"group"===e.name);if(!r)continue;const o=r.text;t[o]&&mr(ei("db.messages.parser.error-group-non-unique-group-name",{name:o})),t[o]=!0}}(t),{type:"groupRoot",groups:t,codeInfo:ti()}},ut=pr("en",!1),ct=pr("de",!1),dt=pr("es",!1),ht=/^[a-z@]/,ft=gr([["a","z"],"@"],!1,!1),mt=pr(":",!1),pt=/^[a-z]/,gt=gr([["a","z"]],!1,!1),yt=pr("@",!1),bt=pr("[[",!1),vt=pr("\\]]",!1),_t=pr("]]",!1),wt=function(e,t){return function(e,t){var n,r=t[0];r.child=e,r.codeInfo=ni(r.child.codeInfo,r.codeInfo);for(var o=1;o",!1),kt=pr(">=",!1),Tt=pr("≥",!1),Mt=pr(">",!1),xt=pr("<=",!1),Lt=pr("≤",!1),Rt=pr("<",!1),At=yr("logical AND"),Dt=pr("and",!0),Nt=pr("∧",!1),Pt=yr("logical XOR"),It=pr("xor",!0),Ht=pr("⊻",!1),Yt=pr("⊕",!1),Ft=yr("logical OR"),Wt=pr("or",!0),Bt=pr("∨",!1),Ut=yr("logical NOT"),zt=pr("!",!1),Vt=pr("¬",!1),qt=yr("delimiter"),Gt=pr("string",!0),Kt=pr("number",!0),Xt=pr("date",!0),$t=pr("boolean",!0),Jt=pr("null",!1),Qt=pr("NULL",!1),Zt=pr("}",!1),en=/^[\-_a-z0-9.]/i,tn=gr(["-","_",["a","z"],["0","9"],"."],!1,!0),nn=function(e){return{type:"string",value:e,quoted:!0}},rn=pr('"',!1),on=/^[^"\n]/,an=gr(['"',"\n"],!0,!1),sn=pr("{",!1),ln=yr("boolean expression"),un=pr("||",!1),cn=function(e,t){return{type:"valueExpr",datatype:"boolean",func:e,args:[void 0,t],codeInfo:ti()}},dn=pr("like",!0),hn=pr("ilike",!0),fn=pr("+",!1),mn=pr("*",!1),pn=pr("%",!1),gn=pr("coalesce",!0),yn=pr("concat",!0),bn=pr("adddate",!0),vn=pr("subdate",!0),_n=pr("mod",!0),wn=pr("add",!0),En=pr("sub",!0),jn=pr("mul",!0),Cn=pr("div",!0),Sn=pr("upper",!0),On=pr("ucase",!0),kn=pr("lower",!0),Tn=pr("lcase",!0),Mn=pr("length",!0),xn=pr("abs",!0),Ln=pr("floor",!0),Rn=pr("ceil",!0),An=pr("round",!0),Dn=pr("year",!0),Nn=pr("month",!0),Pn=pr("day",!0),In=pr("hour",!0),Hn=pr("minute",!0),Yn=pr("second",!0),Fn=pr("dayofmonth",!0),Wn=pr("rand",!0),Bn=pr("rownum",!0),Un=pr("now",!0),zn=pr("current_timestamp",!0),Vn=pr("transaction_timestamp",!0),qn=pr("statement_timestamp",!0),Gn=pr("clock_timestamp",!0),Kn=pr("sysdate",!0),Xn=pr("null",!0),$n=pr("case",!0),Jn=pr("when",!0),Qn=pr("then",!0),Zn=function(e,t){return{w:e,t:t}},er=pr("else",!0),tr=pr("end",!0),nr=function(e,t){return function(e,t){var n,r=t[0];r.args[0]=e,r.codeInfo=ti();for(var o=1;olr&&(lr=ir,ur=[]),ur.push(e))}function wr(e,t,n){return new r(r.buildMessage(e,t),e,t,n)}function Er(){var e,t,n=135*ir+0,r=dr[n];return r?(ir=r.nextPos,r.result):(e=ir,(t=function(){var e,t,n,r,i,a,s=135*ir+57,l=dr[s];if(l)return ir=l.nextPos,l.result;if(e=ir,(t=kr())!==o){for(n=[],r=ir,(i=Br())!==o&&(a=Or())!==o?r=i=[i,a]:(ir=r,r=o);r!==o;)n.push(r),r=ir,(i=Br())!==o&&(a=Or())!==o?r=i=[i,a]:(ir=r,r=o);n!==o&&(r=Br())!==o&&(i=kr())!==o?(ar=e,t=function(e,t){var n=[t];for(var r in e)n.push(e[r][0]);return oi(n),{type:"relalgRoot",assignments:n,child:null,operatorPositions:si,codeInfo:ti()}}(n,r),e=t):(ir=e,e=o)}else ir=e,e=o;if(e===o)if(e=ir,(t=kr())!==o){for(n=[],r=ir,(i=Br())!==o&&(a=Or())!==o?r=i=[i,a]:(ir=r,r=o);r!==o;)n.push(r),r=ir,(i=Br())!==o&&(a=Or())!==o?r=i=[i,a]:(ir=r,r=o);n!==o?((r=eo())===o&&(r=null),r!==o&&(i=kr())!==o?(ar=e,t=function(e,t){for(var n=[],r=0;rir?(n=e.charAt(ir),ir++):(n=o,0===cr&&_r(s)),cr--,n===o?t=void 0:(ir=t,t=o),dr[r]={nextPos:ir,result:t},t)}function Cr(){var t,n=135*ir+3,r=dr[n];return r?(ir=r.nextPos,r.result):("\r\n"===e.substr(ir,2)?(t="\r\n",ir+=2):(t=o,0===cr&&_r(l)),t===o&&(10===e.charCodeAt(ir)?(t="\n",ir++):(t=o,0===cr&&_r(u))),dr[n]={nextPos:ir,result:t},t)}function Sr(){var t,n=135*ir+4,r=dr[n];return r?(ir=r.nextPos,r.result):((t=function(){var t,n,r,i,a,l,u,m,p=135*ir+5,g=dr[p];if(g)return ir=g.nextPos,g.result;cr++,t=ir,"--"===e.substr(ir,2)?(n="--",ir+=2):(n=o,0===cr&&_r(d));n!==o?(h.test(e.charAt(ir))?(r=e.charAt(ir),ir++):(r=o,0===cr&&_r(f)),r!==o?(i=ir,cr++,(a=Cr())===o&&(a=jr()),cr--,a!==o?(ir=i,i=void 0):i=o,i!==o?(ar=t,t=n=""):(ir=t,t=o)):(ir=t,t=o)):(ir=t,t=o);if(t===o&&(t=ir,"--"===e.substr(ir,2)?(n="--",ir+=2):(n=o,0===cr&&_r(d)),n!==o?(r=ir,cr++,(i=Cr())===o&&(i=jr()),cr--,i!==o?(ir=r,r=void 0):r=o,r!==o?(ar=t,t=n=""):(ir=t,t=o)):(ir=t,t=o),t===o))if(t=ir,"--"===e.substr(ir,2)?(n="--",ir+=2):(n=o,0===cr&&_r(d)),n!==o)if(h.test(e.charAt(ir))?(r=e.charAt(ir),ir++):(r=o,0===cr&&_r(f)),r!==o){for(i=ir,a=[],l=ir,u=ir,cr++,m=Cr(),cr--,m===o?u=void 0:(ir=u,u=o),u!==o?(e.length>ir?(m=e.charAt(ir),ir++):(m=o,0===cr&&_r(s)),m!==o?l=u=[u,m]:(ir=l,l=o)):(ir=l,l=o);l!==o;)a.push(l),l=ir,u=ir,cr++,m=Cr(),cr--,m===o?u=void 0:(ir=u,u=o),u!==o?(e.length>ir?(m=e.charAt(ir),ir++):(m=o,0===cr&&_r(s)),m!==o?l=u=[u,m]:(ir=l,l=o)):(ir=l,l=o);(i=a!==o?e.substring(i,ir):a)!==o?(a=ir,cr++,(l=Cr())===o&&(l=jr()),cr--,l!==o?(ir=a,a=void 0):a=o,a!==o?(ar=t,t=n=i):(ir=t,t=o)):(ir=t,t=o)}else ir=t,t=o;else ir=t,t=o;cr--,t===o&&(n=o,0===cr&&_r(c));return dr[p]={nextPos:ir,result:t},t}())===o&&(t=function(){var t,n,r,i,a,l,u,c=135*ir+6,d=dr[c];if(d)return ir=d.nextPos,d.result;t=ir,"/*"===e.substr(ir,2)?(n="/*",ir+=2):(n=o,0===cr&&_r(m));if(n!==o){for(r=ir,i=[],a=ir,l=ir,cr++,"*/"===e.substr(ir,2)?(u="*/",ir+=2):(u=o,0===cr&&_r(p)),cr--,u===o?l=void 0:(ir=l,l=o),l!==o?(e.length>ir?(u=e.charAt(ir),ir++):(u=o,0===cr&&_r(s)),u!==o?a=l=[l,u]:(ir=a,a=o)):(ir=a,a=o);a!==o;)i.push(a),a=ir,l=ir,cr++,"*/"===e.substr(ir,2)?(u="*/",ir+=2):(u=o,0===cr&&_r(p)),cr--,u===o?l=void 0:(ir=l,l=o),l!==o?(e.length>ir?(u=e.charAt(ir),ir++):(u=o,0===cr&&_r(s)),u!==o?a=l=[l,u]:(ir=a,a=o)):(ir=a,a=o);(r=i!==o?e.substring(r,ir):i)!==o?("*/"===e.substr(ir,2)?(i="*/",ir+=2):(i=o,0===cr&&_r(p)),i!==o?(ar=t,t=n=r):(ir=t,t=o)):(ir=t,t=o)}else ir=t,t=o;return dr[c]={nextPos:ir,result:t},t}()),dr[n]={nextPos:ir,result:t},t)}function Or(){var t,n,r,i,a,s,l,u=135*ir+7,c=dr[u];if(c)return ir=c.nextPos,c.result;for(cr++,t=ir,n=[],r=ir,i=[],a=Sr();a!==o;)i.push(a),a=Sr();if(i!==o){if(a=[],y.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(b)),s!==o)for(;s!==o;)a.push(s),y.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(b));else a=o;if(a!==o){for(s=[],l=Sr();l!==o;)s.push(l),l=Sr();s!==o?r=i=[i,a,s]:(ir=r,r=o)}else ir=r,r=o}else ir=r,r=o;if(r!==o)for(;r!==o;){for(n.push(r),r=ir,i=[],a=Sr();a!==o;)i.push(a),a=Sr();if(i!==o){if(a=[],y.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(b)),s!==o)for(;s!==o;)a.push(s),y.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(b));else a=o;if(a!==o){for(s=[],l=Sr();l!==o;)s.push(l),l=Sr();s!==o?r=i=[i,a,s]:(ir=r,r=o)}else ir=r,r=o}else ir=r,r=o}else n=o;return n!==o&&(ar=t,n=""),cr--,(t=n)===o&&(n=o,0===cr&&_r(g)),dr[u]={nextPos:ir,result:t},t}function kr(){var t,n,r=135*ir+8,i=dr[r];if(i)return ir=i.nextPos,i.result;for(cr++,t=[],(n=Sr())===o&&(y.test(e.charAt(ir))?(n=e.charAt(ir),ir++):(n=o,0===cr&&_r(b)));n!==o;)t.push(n),(n=Sr())===o&&(y.test(e.charAt(ir))?(n=e.charAt(ir),ir++):(n=o,0===cr&&_r(b)));return cr--,t===o&&(n=o,0===cr&&_r(v)),dr[r]={nextPos:ir,result:t},t}function Tr(){var t,n,r=135*ir+10,i=dr[r];if(i)return ir=i.nextPos,i.result;for(cr++,t=[],_.test(e.charAt(ir))?(n=e.charAt(ir),ir++):(n=o,0===cr&&_r(w));n!==o;)t.push(n),_.test(e.charAt(ir))?(n=e.charAt(ir),ir++):(n=o,0===cr&&_r(w));return cr--,t===o&&(n=o,0===cr&&_r(E)),dr[r]={nextPos:ir,result:t},t}function Mr(){var t,n,r,i=135*ir+12,a=dr[i];if(a)return ir=a.nextPos,a.result;for(t=ir,n=[],(r=Sr())===o&&(h.test(e.charAt(ir))?(r=e.charAt(ir),ir++):(r=o,0===cr&&_r(f)));r!==o;)n.push(r),(r=Sr())===o&&(h.test(e.charAt(ir))?(r=e.charAt(ir),ir++):(r=o,0===cr&&_r(f)));return n!==o&&(ar=t,n=""),t=n,dr[i]={nextPos:ir,result:t},t}function xr(){var t,n,r,i,a,s,l=135*ir+14,u=dr[l];if(u)return ir=u.nextPos,u.result;if(t=ir,n=ir,r=ir,45===e.charCodeAt(ir)?(i="-",ir++):(i=o,0===cr&&_r(k)),i===o&&(i=null),i!==o){if(a=[],T.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(M)),s!==o)for(;s!==o;)a.push(s),T.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(M));else a=o;a!==o?r=i=[i,a]:(ir=r,r=o)}else ir=r,r=o;return(n=r!==o?e.substring(n,ir):r)!==o&&(ar=t,n=parseInt(n,10)),t=n,dr[l]={nextPos:ir,result:t},t}function Lr(){var t,n,r,i,a,s,l,u,c=135*ir+15,d=dr[c];if(d)return ir=d.nextPos,d.result;if(t=ir,n=ir,r=ir,45===e.charCodeAt(ir)?(i="-",ir++):(i=o,0===cr&&_r(k)),i===o&&(i=null),i!==o){if(a=[],T.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(M)),s!==o)for(;s!==o;)a.push(s),T.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(M));else a=o;if(a!==o)if(46===e.charCodeAt(ir)?(s=".",ir++):(s=o,0===cr&&_r(x)),s!==o){if(l=[],T.test(e.charAt(ir))?(u=e.charAt(ir),ir++):(u=o,0===cr&&_r(M)),u!==o)for(;u!==o;)l.push(u),T.test(e.charAt(ir))?(u=e.charAt(ir),ir++):(u=o,0===cr&&_r(M));else l=o;l!==o?r=i=[i,a,s,l]:(ir=r,r=o)}else ir=r,r=o;else ir=r,r=o}else ir=r,r=o;return(n=r!==o?e.substring(n,ir):r)!==o&&(ar=t,n=parseFloat(n)),t=n,dr[c]={nextPos:ir,result:t},t}function Rr(){var t,n,r,i,a,s,l,u,c,d=135*ir+17,h=dr[d];return h?(ir=h.nextPos,h.result):(cr++,t=ir,n=ir,r=ir,T.test(e.charAt(ir))?(i=e.charAt(ir),ir++):(i=o,0===cr&&_r(M)),i!==o?(T.test(e.charAt(ir))?(a=e.charAt(ir),ir++):(a=o,0===cr&&_r(M)),a!==o?(T.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(M)),s!==o?(T.test(e.charAt(ir))?(l=e.charAt(ir),ir++):(l=o,0===cr&&_r(M)),l!==o?r=i=[i,a,s,l]:(ir=r,r=o)):(ir=r,r=o)):(ir=r,r=o)):(ir=r,r=o),(n=r!==o?e.substring(n,ir):r)!==o?(45===e.charCodeAt(ir)?(r="-",ir++):(r=o,0===cr&&_r(k)),r!==o?(i=ir,a=ir,T.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(M)),s!==o?(T.test(e.charAt(ir))?(l=e.charAt(ir),ir++):(l=o,0===cr&&_r(M)),l!==o?a=s=[s,l]:(ir=a,a=o)):(ir=a,a=o),(i=a!==o?e.substring(i,ir):a)!==o?(45===e.charCodeAt(ir)?(a="-",ir++):(a=o,0===cr&&_r(k)),a!==o?(s=ir,l=ir,T.test(e.charAt(ir))?(u=e.charAt(ir),ir++):(u=o,0===cr&&_r(M)),u!==o?(T.test(e.charAt(ir))?(c=e.charAt(ir),ir++):(c=o,0===cr&&_r(M)),c!==o?l=u=[u,c]:(ir=l,l=o)):(ir=l,l=o),(s=l!==o?e.substring(s,ir):l)!==o?(ar=t,t=n=function(e,t,n){e=parseInt(e,10),t=parseInt(t,10)-1,n=parseInt(n,10);var r=new Date(e,t,n);return r.getFullYear()==e&&r.getMonth()==t&&r.getDate()==n||mr(ei("db.messages.parser.error-invalid-date-format",{str:hr()})),r}(n,i,s)):(ir=t,t=o)):(ir=t,t=o)):(ir=t,t=o)):(ir=t,t=o)):(ir=t,t=o),cr--,t===o&&(n=o,0===cr&&_r(L)),dr[d]={nextPos:ir,result:t},t)}function Ar(){var t,n,r=135*ir+18,i=dr[r];return i?(ir=i.nextPos,i.result):(t=ir,"true"===e.substr(ir,4).toLowerCase()?(n=e.substr(ir,4),ir+=4):(n=o,0===cr&&_r(R)),n!==o&&(ar=t,n=!0),(t=n)===o&&(t=ir,"false"===e.substr(ir,5).toLowerCase()?(n=e.substr(ir,5),ir+=5):(n=o,0===cr&&_r(A)),n!==o&&(ar=t,n=!1),t=n),dr[r]={nextPos:ir,result:t},t)}function Dr(){var t,n,r,i,a,s,l,u,c=135*ir+20,d=dr[c];if(d)return ir=d.nextPos,d.result;if(cr++,t=ir,n=ir,cr++,r=ir,(i=Zo())!==o){if(a=ir,cr++,s=[],P.test(e.charAt(ir))?(l=e.charAt(ir),ir++):(l=o,0===cr&&_r(I)),l!==o)for(;l!==o;)s.push(l),P.test(e.charAt(ir))?(l=e.charAt(ir),ir++):(l=o,0===cr&&_r(I));else s=o;cr--,s===o?a=void 0:(ir=a,a=o),a!==o?r=i=[i,a]:(ir=r,r=o)}else ir=r,r=o;if(cr--,r===o?n=void 0:(ir=n,n=o),n!==o){if(r=ir,i=ir,a=[],H.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(Y)),s!==o)for(;s!==o;)a.push(s),H.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(Y));else a=o;if(a!==o){for(s=ir,l=[],P.test(e.charAt(ir))?(u=e.charAt(ir),ir++):(u=o,0===cr&&_r(I));u!==o;)l.push(u),P.test(e.charAt(ir))?(u=e.charAt(ir),ir++):(u=o,0===cr&&_r(I));(s=l!==o?e.substring(s,ir):l)!==o?i=a=[a,s]:(ir=i,i=o)}else ir=i,i=o;(r=i!==o?e.substring(r,ir):i)!==o?(ar=t,t=n=r):(ir=t,t=o)}else ir=t,t=o;return cr--,t===o&&(n=o,0===cr&&_r(N)),dr[c]={nextPos:ir,result:t},t}function Nr(){var t,n,r,i,a,s,l,u,c=135*ir+21,d=dr[c];if(d)return ir=d.nextPos,d.result;if(t=ir,n=ir,cr++,r=ir,(i=Zo())!==o){if(a=ir,cr++,s=[],P.test(e.charAt(ir))?(l=e.charAt(ir),ir++):(l=o,0===cr&&_r(I)),l!==o)for(;l!==o;)s.push(l),P.test(e.charAt(ir))?(l=e.charAt(ir),ir++):(l=o,0===cr&&_r(I));else s=o;cr--,s===o?a=void 0:(ir=a,a=o),a!==o?r=i=[i,a]:(ir=r,r=o)}else ir=r,r=o;if(cr--,r===o?n=void 0:(ir=n,n=o),n!==o){if(r=ir,i=ir,a=[],H.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(Y)),s!==o)for(;s!==o;)a.push(s),H.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(Y));else a=o;if(a!==o){for(s=ir,l=[],P.test(e.charAt(ir))?(u=e.charAt(ir),ir++):(u=o,0===cr&&_r(I));u!==o;)l.push(u),P.test(e.charAt(ir))?(u=e.charAt(ir),ir++):(u=o,0===cr&&_r(I));(s=l!==o?e.substring(s,ir):l)!==o?i=a=[a,s]:(ir=i,i=o)}else ir=i,i=o;(r=i!==o?e.substring(r,ir):i)!==o?(ar=t,t=n=r):(ir=t,t=o)}else ir=t,t=o;return dr[c]={nextPos:ir,result:t},t}function Pr(){var t,n,r,i,a,s,l,u,c=135*ir+22,d=dr[c];if(d)return ir=d.nextPos,d.result;if(t=ir,n=ir,(r=Dr())!==o?(46===e.charCodeAt(ir)?(i=".",ir++):(i=o,0===cr&&_r(x)),i!==o?n=r=[r,i]:(ir=n,n=o)):(ir=n,n=o),n===o&&(n=null),n!==o&&(r=Nr())!==o?(ar=t,u=r,null!=(l=n)&&(l=l[0]),t=n={type:"columnName",name:u,relAlias:l}):(ir=t,t=o),t===o)if(t=ir,n=ir,(r=Dr())!==o?(46===e.charCodeAt(ir)?(i=".",ir++):(i=o,0===cr&&_r(x)),i!==o?n=r=[r,i]:(ir=n,n=o)):(ir=n,n=o),n===o&&(n=null),n!==o)if(91===e.charCodeAt(ir)?(r="[",ir++):(r=o,0===cr&&_r(F)),r!==o){if(i=ir,a=[],T.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(M)),s!==o)for(;s!==o;)a.push(s),T.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(M));else a=o;(i=a!==o?e.substring(i,ir):a)!==o?(93===e.charCodeAt(ir)?(a="]",ir++):(a=o,0===cr&&_r(W)),a!==o?(ar=t,t=n=function(e,t){return null!=e&&(e=e[0]),{type:"columnName",name:parseInt(t,10),relAlias:e}}(n,i)):(ir=t,t=o)):(ir=t,t=o)}else ir=t,t=o;else ir=t,t=o;return dr[c]={nextPos:ir,result:t},t}function Ir(){var t,n,r,i=135*ir+25,a=dr[i];return a?(ir=a.nextPos,a.result):(t=ir,kr()!==o?(n=ir,961===e.charCodeAt(ir)?(r="ρ",ir++):(r=o,0===cr&&_r(K)),r!==o&&(ar=n,r=X()),(n=r)!==o&&(r=kr())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o),t===o&&(t=ir,kr()!==o?(n=ir,"rho"===e.substr(ir,3).toLowerCase()?(r=e.substr(ir,3),ir+=3):(r=o,0===cr&&_r($)),r!==o&&(ar=n,r=X()),(n=r)!==o&&(r=Or())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o)),dr[i]={nextPos:ir,result:t},t)}function Hr(){var t,n,r,i=135*ir+26,a=dr[i];return a?(ir=a.nextPos,a.result):(t=ir,kr()!==o?(n=ir,8592===e.charCodeAt(ir)?(r="←",ir++):(r=o,0===cr&&_r(J)),r!==o&&(ar=n,r=Q()),(n=r)!==o&&(r=kr())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o),t===o&&(t=ir,kr()!==o?(n=ir,"<-"===e.substr(ir,2)?(r="<-",ir+=2):(r=o,0===cr&&_r(Z)),r!==o&&(ar=n,r=Q()),(n=r)!==o&&(r=kr())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o)),dr[i]={nextPos:ir,result:t},t)}function Yr(){var t,n,r,i=135*ir+27,a=dr[i];return a?(ir=a.nextPos,a.result):(t=ir,kr()!==o?(n=ir,8594===e.charCodeAt(ir)?(r="→",ir++):(r=o,0===cr&&_r(ee)),r!==o&&(ar=n,r=te()),(n=r)!==o&&(r=kr())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o),t===o&&(t=ir,kr()!==o?(n=ir,"->"===e.substr(ir,2)?(r="->",ir+=2):(r=o,0===cr&&_r(ne)),r!==o&&(ar=n,r=te()),(n=r)!==o&&(r=kr())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o)),dr[i]={nextPos:ir,result:t},t)}function Fr(){var t,n,r,i=135*ir+30,a=dr[i];return a?(ir=a.nextPos,a.result):(t=ir,kr()!==o?(n=ir,947===e.charCodeAt(ir)?(r="γ",ir++):(r=o,0===cr&&_r(ae)),r!==o&&(ar=n,r=se()),(n=r)!==o&&(r=kr())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o),t===o&&(t=ir,kr()!==o?(n=ir,"gamma"===e.substr(ir,5).toLowerCase()?(r=e.substr(ir,5),ir+=5):(r=o,0===cr&&_r(le)),r!==o&&(ar=n,r=se()),(n=r)!==o&&(r=Or())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o)),dr[i]={nextPos:ir,result:t},t)}function Wr(){var t,n,r,i=135*ir+33,a=dr[i];return a?(ir=a.nextPos,a.result):(t=ir,kr()!==o?(n=ir,247===e.charCodeAt(ir)?(r="÷",ir++):(r=o,0===cr&&_r(pe)),r===o&&(47===e.charCodeAt(ir)?(r="/",ir++):(r=o,0===cr&&_r(ge))),r!==o&&(ar=n,r=ri("divisionOperator")),(n=r)!==o&&(r=kr())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o),dr[i]={nextPos:ir,result:t},t)}function Br(){var t,n,r,i,a=135*ir+44,s=dr[a];return s?(ir=s.nextPos,s.result):(t=ir,(n=Dr())!==o?(ar=ir,i=n,(void ai.push(i)?o:void 0)!==o&&function(){var t,n,r,i,a=135*ir+19,s=dr[a];return s?(ir=s.nextPos,s.result):(t=ir,(n=kr())!==o?(61===e.charCodeAt(ir)?(r="=",ir++):(r=o,0===cr&&_r(D)),r!==o&&(i=kr())!==o?t=n=[n,r,i]:(ir=t,t=o)):(ir=t,t=o),dr[a]={nextPos:ir,result:t},t)}()!==o&&(r=eo())!==o?(ar=t,t=n=function(e,t){return t.assignmentName=e,{type:"assignment",name:e,child:t,codeInfo:ti()}}(n,r)):(ir=t,t=o)):(ir=t,t=o),dr[a]={nextPos:ir,result:t},t)}function Ur(){var e,t,n,r=135*ir+45,i=dr[r];return i?(ir=i.nextPos,i.result):(e=ir,(t=Uo())!==o&&Yr()!==o&&(n=Nr())!==o?(ar=e,e=t={type:"namedColumnExpr",name:n,relAlias:null,child:t,codeInfo:ti()}):(ir=e,e=o),e===o&&(e=ir,(t=Nr())!==o&&Hr()!==o&&(n=Uo())!==o?(ar=e,e=t=function(e,t){return{type:"namedColumnExpr",name:e,relAlias:null,child:t,codeInfo:ti()}}(t,n)):(ir=e,e=o),e===o&&(e=ir,(t=Pr())!==o&&(ar=e,t=t),e=t)),dr[r]={nextPos:ir,result:e},e)}function zr(){var e,t,n,r=135*ir+48,i=dr[r];return i?(ir=i.nextPos,i.result):(e=ir,(t=Nr())!==o&&Hr()!==o&&(n=Pr())!==o?(ar=e,e=t={type:"colAssignment",src:n,dst:t,codeInfo:ti()}):(ir=e,e=o),e===o&&(e=ir,(t=Pr())!==o&&Yr()!==o&&(n=Nr())!==o?(ar=e,e=t=function(e,t){return{type:"colAssignment",src:e,dst:t,codeInfo:ti()}}(t,n)):(ir=e,e=o)),dr[r]={nextPos:ir,result:e},e)}function Vr(){var t,n,r,i,a,s,l=135*ir+51,u=dr[l];return u?(ir=u.nextPos,u.result):(t=ir,(n=Pr())!==o?(r=ir,(i=Or())!==o&&(a=function(){var t,n,r=135*ir+50,i=dr[r];return i?(ir=i.nextPos,i.result):(t=ir,"asc"===e.substr(ir,3).toLowerCase()?(n=e.substr(ir,3),ir+=3):(n=o,0===cr&&_r(Qe)),n!==o&&(ar=t,n=!0),(t=n)===o&&(t=ir,"desc"===e.substr(ir,4).toLowerCase()?(n=e.substr(ir,4),ir+=4):(n=o,0===cr&&_r(Ze)),n!==o&&(ar=t,n=!1),t=n),dr[r]={nextPos:ir,result:t},t)}())!==o?r=i=[i,a]:(ir=r,r=o),r===o&&(r=null),r!==o?(ar=t,t=n={col:n,asc:s=null==(s=r)||s[1]}):(ir=t,t=o)):(ir=t,t=o),dr[l]={nextPos:ir,result:t},t)}function qr(){var t,n,r,i,a,s,l=135*ir+53,u=dr[l];return u?(ir=u.nextPos,u.result):(t=ir,n=ir,"sum"===e.substr(ir,3).toLowerCase()?(r=e.substr(ir,3),ir+=3):(r=o,0===cr&&_r(et)),r===o&&("count"===e.substr(ir,5).toLowerCase()?(r=e.substr(ir,5),ir+=5):(r=o,0===cr&&_r(tt)),r===o&&("avg"===e.substr(ir,3).toLowerCase()?(r=e.substr(ir,3),ir+=3):(r=o,0===cr&&_r(nt)),r===o&&("min"===e.substr(ir,3).toLowerCase()?(r=e.substr(ir,3),ir+=3):(r=o,0===cr&&_r(rt)),r===o&&("max"===e.substr(ir,3).toLowerCase()?(r=e.substr(ir,3),ir+=3):(r=o,0===cr&&_r(ot)))))),(n=r!==o?e.substring(n,ir):r)!==o?(40===e.charCodeAt(ir)?(r="(",ir++):(r=o,0===cr&&_r(it)),r!==o&&kr()!==o&&(i=Pr())!==o&&kr()!==o?(41===e.charCodeAt(ir)?(a=")",ir++):(a=o,0===cr&&_r(at)),a!==o?(ar=t,s=i,t=n={aggFunction:n.toUpperCase(),col:s}):(ir=t,t=o)):(ir=t,t=o)):(ir=t,t=o),t===o&&(t=ir,"count(*)"===e.substr(ir,8).toLowerCase()?(n=e.substr(ir,8),ir+=8):(n=o,0===cr&&_r(st)),n!==o&&(ar=t,n={aggFunction:"COUNT_ALL",col:null}),t=n),dr[l]={nextPos:ir,result:t},t)}function Gr(){var e,t,n,r,i,a=135*ir+54,s=dr[a];return s?(ir=s.nextPos,s.result):(e=ir,(t=qr())!==o&&Yr()!==o&&(n=Nr())!==o?(ar=e,i=n,(r=t).name=i,e=t=r):(ir=e,e=o),e===o&&(e=ir,(t=Nr())!==o&&Hr()!==o&&(n=qr())!==o?(ar=e,e=t=function(e,t){return t.name=e,t}(t,n)):(ir=e,e=o)),dr[a]={nextPos:ir,result:e},e)}function Kr(){var t,n,r,i,a,s,l,u,c=135*ir+55,d=dr[c];if(d)return ir=d.nextPos,d.result;if(t=ir,(n=Gr())!==o){for(r=[],i=ir,(a=kr())!==o?(44===e.charCodeAt(ir)?(s=",",ir++):(s=o,0===cr&&_r(Xe)),s!==o&&(l=kr())!==o&&(u=Gr())!==o?i=a=[a,s,l,u]:(ir=i,i=o)):(ir=i,i=o);i!==o;)r.push(i),i=ir,(a=kr())!==o?(44===e.charCodeAt(ir)?(s=",",ir++):(s=o,0===cr&&_r(Xe)),s!==o&&(l=kr())!==o&&(u=Gr())!==o?i=a=[a,s,l,u]:(ir=i,i=o)):(ir=i,i=o);r!==o?(ar=t,t=n=$e(n,r)):(ir=t,t=o)}else ir=t,t=o;return dr[c]={nextPos:ir,result:t},t}function Xr(){var e,t,n=135*ir+56,r=dr[n];return r?(ir=r.nextPos,r.result):(e=ir,(t=So())!==o&&Or()!==o?(ar=ir,(function(e){if("valueExpr"===e.type&&"columnValue"===e.func&&!e.wrappedInParentheses&&null===e.args[1]){for(var t=0;tir?(h=e.charAt(ir),ir++):(h=o,0===cr&&_r(s)),h!==o?c=d=[d,h]:(ir=c,c=o)):(ir=c,c=o);c!==o;)u.push(c),c=ir,d=ir,cr++,h=Cr(),cr--,h===o?d=void 0:(ir=d,d=o),d!==o?(e.length>ir?(h=e.charAt(ir),ir++):(h=o,0===cr&&_r(s)),h!==o?c=d=[d,h]:(ir=c,c=o)):(ir=c,c=o);(l=u!==o?e.substring(l,ir):u)!==o?(ar=t,t=n=function(e,t,n){return{name:e,lang:t?t[1]:null,text:n}}(r,i,l)):(ir=t,t=o)}else ir=t,t=o;else ir=t,t=o;else ir=t,t=o}else ir=t,t=o;if(t===o){if(t=ir,n=ir,cr++,r=ir,i=[],ht.test(e.charAt(ir))?(a=e.charAt(ir),ir++):(a=o,0===cr&&_r(ft)),a!==o)for(;a!==o;)i.push(a),ht.test(e.charAt(ir))?(a=e.charAt(ir),ir++):(a=o,0===cr&&_r(ft));else i=o;if(i!==o?("[["===e.substr(ir,2)?(a="[[",ir+=2):(a=o,0===cr&&_r(bt)),a!==o?r=i=[i,a]:(ir=r,r=o)):(ir=r,r=o),cr--,r!==o?(ir=n,n=void 0):n=o,n!==o){if(r=ir,i=[],pt.test(e.charAt(ir))?(a=e.charAt(ir),ir++):(a=o,0===cr&&_r(gt)),a!==o)for(;a!==o;)i.push(a),pt.test(e.charAt(ir))?(a=e.charAt(ir),ir++):(a=o,0===cr&&_r(gt));else i=o;if((r=i!==o?e.substring(r,ir):i)!==o)if(i=ir,64===e.charCodeAt(ir)?(a="@",ir++):(a=o,0===cr&&_r(yt)),a!==o&&(l=Jr())!==o?i=a=[a,l]:(ir=i,i=o),i===o&&(i=null),i!==o)if("[["===e.substr(ir,2)?(a="[[",ir+=2):(a=o,0===cr&&_r(bt)),a!==o){for(l=ir,u=[],"\\]]"===e.substr(ir,3)?(c="\\]]",ir+=3):(c=o,0===cr&&_r(vt)),c===o&&(c=ir,d=ir,cr++,"]]"===e.substr(ir,2)?(h="]]",ir+=2):(h=o,0===cr&&_r(_t)),cr--,h===o?d=void 0:(ir=d,d=o),d!==o?(e.length>ir?(h=e.charAt(ir),ir++):(h=o,0===cr&&_r(s)),h!==o?c=d=[d,h]:(ir=c,c=o)):(ir=c,c=o));c!==o;)u.push(c),"\\]]"===e.substr(ir,3)?(c="\\]]",ir+=3):(c=o,0===cr&&_r(vt)),c===o&&(c=ir,d=ir,cr++,"]]"===e.substr(ir,2)?(h="]]",ir+=2):(h=o,0===cr&&_r(_t)),cr--,h===o?d=void 0:(ir=d,d=o),d!==o?(e.length>ir?(h=e.charAt(ir),ir++):(h=o,0===cr&&_r(s)),h!==o?c=d=[d,h]:(ir=c,c=o)):(ir=c,c=o));(l=u!==o?e.substring(l,ir):u)!==o?("]]"===e.substr(ir,2)?(u="]]",ir+=2):(u=o,0===cr&&_r(_t)),u!==o?(ar=t,t=n=function(e,t,n){return n=(n=n.replace(/\\]]/g,"]]")).replace(/\\\\]]/g,"\\]]"),{name:e,lang:t?t[1]:null,text:n}}(r,i,l)):(ir=t,t=o)):(ir=t,t=o)}else ir=t,t=o;else ir=t,t=o;else ir=t,t=o}else ir=t,t=o}return dr[f]={nextPos:ir,result:t},t}function Zr(){var e,t,n,r,i,a,s=135*ir+62,l=dr[s];if(l)return ir=l.nextPos,l.result;if(e=ir,kr()!==o)if((t=function(){var e,t,n,r,i,a,s,l,u=135*ir+59,c=dr[u];if(c)return ir=c.nextPos,c.result;if(e=ir,(t=Qr())!==o){for(n=[],r=ir,(i=Or())!==o&&(a=Qr())!==o?r=i=[i,a]:(ir=r,r=o);r!==o;)n.push(r),r=ir,(i=Or())!==o&&(a=Qr())!==o?r=i=[i,a]:(ir=r,r=o);n!==o?(ar=e,s=n,(l=[]).push(t),s.map((function(e){var t=e[1];l.push(t)})),e=t=l):(ir=e,e=o)}else ir=e,e=o;return dr[u]={nextPos:ir,result:e},e}())!==o){if(n=[],r=ir,(i=Or())!==o&&(a=Br())!==o?r=i=[i,a]:(ir=r,r=o),r!==o)for(;r!==o;)n.push(r),r=ir,(i=Or())!==o&&(a=Br())!==o?r=i=[i,a]:(ir=r,r=o);else n=o;n!==o?(ar=e,e=function(e,t){for(var n=[],r=0;r"group"===e.name);return void 0===o?mr(ei("db.messages.parser.error-group-header-name-missing")+': "group: ..........\\n"'):0===o.text.trim().length&&mr(ei("error-group-header-name-empty")),{type:"tableGroup",headers:e,assignments:n,codeInfo:ti()}}(t,n)):(ir=e,e=o)}else ir=e,e=o;else ir=e,e=o;return dr[s]={nextPos:ir,result:e},e}function eo(){var e,t,n,r,i=135*ir+63,a=dr[i];if(a)return ir=a.nextPos,a.result;if(e=ir,(t=to())!==o){if(n=[],(r=io())===o&&(r=ao()),r!==o)for(;r!==o;)n.push(r),(r=io())===o&&(r=ao());else n=o;n!==o?(ar=e,e=t=wt(t,n)):(ir=e,e=o)}else ir=e,e=o;return e===o&&(e=to()),dr[i]={nextPos:ir,result:e},e}function to(){var e,t,n,r,i=135*ir+64,a=dr[i];if(a)return ir=a.nextPos,a.result;if(e=ir,(t=no())!==o){if(n=[],(r=oo())!==o)for(;r!==o;)n.push(r),r=oo();else n=o;n!==o?(ar=e,e=t=wt(t,n)):(ir=e,e=o)}else ir=e,e=o;return e===o&&(e=no()),dr[i]={nextPos:ir,result:e},e}function no(){var e,t,n,r,i=135*ir+65,a=dr[i];if(a)return ir=a.nextPos,a.result;if(e=ir,(t=ro())!==o){if(n=[],(r=so())===o&&(r=lo())===o&&(r=uo())===o&&(r=co())===o&&(r=ho())===o&&(r=fo())===o&&(r=mo())===o&&(r=po())===o&&(r=go())===o&&(r=yo()),r!==o)for(;r!==o;)n.push(r),(r=so())===o&&(r=lo())===o&&(r=uo())===o&&(r=co())===o&&(r=ho())===o&&(r=fo())===o&&(r=mo())===o&&(r=po())===o&&(r=go())===o&&(r=yo());else n=o;n!==o?(ar=e,e=t=wt(t,n)):(ir=e,e=o)}else ir=e,e=o;return e===o&&(e=ro()),dr[i]={nextPos:ir,result:e},e}function ro(){var t,n=135*ir+66,r=dr[n];return r?(ir=r.nextPos,r.result):((t=function(){var t,n,r,i,a=135*ir+86,s=dr[a];if(s)return ir=s.nextPos,s.result;t=ir,(n=function(){var t,n,r,i=135*ir+29,a=dr[i];return a?(ir=a.nextPos,a.result):(t=ir,kr()!==o?(n=ir,964===e.charCodeAt(ir)?(r="τ",ir++):(r=o,0===cr&&_r(re)),r!==o&&(ar=n,r=oe()),(n=r)!==o&&(r=kr())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o),t===o&&(t=ir,kr()!==o?(n=ir,"tau"===e.substr(ir,3).toLowerCase()?(r=e.substr(ir,3),ir+=3):(r=o,0===cr&&_r(ie)),r!==o&&(ar=n,r=oe()),(n=r)!==o&&(r=Or())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o)),dr[i]={nextPos:ir,result:t},t)}())!==o&&(r=function(){var t,n,r,i,a,s,l,u,c=135*ir+52,d=dr[c];if(d)return ir=d.nextPos,d.result;if(t=ir,(n=Vr())!==o){for(r=[],i=ir,(a=kr())!==o?(44===e.charCodeAt(ir)?(s=",",ir++):(s=o,0===cr&&_r(Xe)),s!==o&&(l=kr())!==o&&(u=Vr())!==o?i=a=[a,s,l,u]:(ir=i,i=o)):(ir=i,i=o);i!==o;)r.push(i),i=ir,(a=kr())!==o?(44===e.charCodeAt(ir)?(s=",",ir++):(s=o,0===cr&&_r(Xe)),s!==o&&(l=kr())!==o&&(u=Vr())!==o?i=a=[a,s,l,u]:(ir=i,i=o)):(ir=i,i=o);r!==o?(ar=t,t=n=Je(n,r)):(ir=t,t=o)}else ir=t,t=o;return dr[c]={nextPos:ir,result:t},t}())!==o&&Or()!==o&&(i=ro())!==o?(ar=t,l=n,u=r,c=i,si.push(l),n={type:"orderBy",child:c,arg:u,codeInfo:ti()},t=n):(ir=t,t=o);var l,u,c;return dr[a]={nextPos:ir,result:t},t}())===o&&(t=function(){var t,n,r,i,a,s,l,u=135*ir+85,c=dr[u];if(c)return ir=c.nextPos,c.result;t=ir,(n=Fr())!==o&&(r=function(){var t,n,r,i,a,s,l,u,c=135*ir+47,d=dr[c];if(d)return ir=d.nextPos,d.result;if(t=ir,(n=Pr())!==o){for(r=[],i=ir,(a=kr())!==o?(44===e.charCodeAt(ir)?(s=",",ir++):(s=o,0===cr&&_r(Xe)),s!==o&&(l=kr())!==o&&(u=Pr())!==o?i=a=[a,s,l,u]:(ir=i,i=o)):(ir=i,i=o);i!==o;)r.push(i),i=ir,(a=kr())!==o?(44===e.charCodeAt(ir)?(s=",",ir++):(s=o,0===cr&&_r(Xe)),s!==o&&(l=kr())!==o&&(u=Pr())!==o?i=a=[a,s,l,u]:(ir=i,i=o)):(ir=i,i=o);r!==o?(ar=t,t=n=$e(n,r)):(ir=t,t=o)}else ir=t,t=o;return dr[c]={nextPos:ir,result:t},t}())!==o&&(i=kr())!==o?(59===e.charCodeAt(ir)?(a=";",ir++):(a=o,0===cr&&_r(jt)),a!==o&&kr()!==o&&(s=Kr())!==o&&Or()!==o&&(l=ro())!==o?(ar=t,d=n,h=r,f=s,m=l,si.push(d),n={type:"groupBy",child:m,group:h,aggregate:f,codeInfo:ti()},t=n):(ir=t,t=o)):(ir=t,t=o);var d,h,f,m;t===o&&(t=ir,(n=Fr())!==o?(r=ir,(i=kr())!==o?(59===e.charCodeAt(ir)?(a=";",ir++):(a=o,0===cr&&_r(jt)),a!==o?r=i=[i,a]:(ir=r,r=o)):(ir=r,r=o),r===o&&(r=null),r!==o&&(i=kr())!==o&&(a=Kr())!==o&&Or()!==o&&(s=ro())!==o?(ar=t,n=function(e,t,n){return si.push(e),{type:"groupBy",child:n,group:[],aggregate:t,codeInfo:ti()}}(n,a,s),t=n):(ir=t,t=o)):(ir=t,t=o));return dr[u]={nextPos:ir,result:t},t}())===o&&(t=function(){var e,t,n,r,i=135*ir+84,a=dr[i];if(a)return ir=a.nextPos,a.result;e=ir,(t=Ir())!==o&&(n=Dr())!==o&&Or()!==o&&(r=ro())!==o?(ar=e,s=t,l=n,u=r,si.push(s),t={type:"renameRelation",child:u,newRelAlias:l,codeInfo:ti()},e=t):(ir=e,e=o);var s,l,u;return dr[i]={nextPos:ir,result:e},e}())===o&&(t=function(){var t,n,r,i,a=135*ir+83,s=dr[a];if(s)return ir=s.nextPos,s.result;t=ir,(n=Ir())!==o&&(r=function(){var t,n,r,i,a,s,l,u,c=135*ir+49,d=dr[c];if(d)return ir=d.nextPos,d.result;if(t=ir,(n=zr())!==o){for(r=[],i=ir,(a=kr())!==o?(44===e.charCodeAt(ir)?(s=",",ir++):(s=o,0===cr&&_r(Xe)),s!==o&&(l=kr())!==o&&(u=zr())!==o?i=a=[a,s,l,u]:(ir=i,i=o)):(ir=i,i=o);i!==o;)r.push(i),i=ir,(a=kr())!==o?(44===e.charCodeAt(ir)?(s=",",ir++):(s=o,0===cr&&_r(Xe)),s!==o&&(l=kr())!==o&&(u=zr())!==o?i=a=[a,s,l,u]:(ir=i,i=o)):(ir=i,i=o);r!==o?(ar=t,t=n=Je(n,r)):(ir=t,t=o)}else ir=t,t=o;return dr[c]={nextPos:ir,result:t},t}())!==o&&Or()!==o&&(i=ro())!==o?(ar=t,l=n,u=r,c=i,si.push(l),n={type:"renameColumns",child:c,arg:u,codeInfo:ti()},t=n):(ir=t,t=o);var l,u,c;return dr[a]={nextPos:ir,result:t},t}())===o&&(t=function(){var t,n,r,i,a=135*ir+82,s=dr[a];if(s)return ir=s.nextPos,s.result;t=ir,(n=function(){var t,n,r,i=135*ir+24,a=dr[i];return a?(ir=a.nextPos,a.result):(t=ir,kr()!==o?(n=ir,963===e.charCodeAt(ir)?(r="σ",ir++):(r=o,0===cr&&_r(V)),r!==o&&(ar=n,r=q()),(n=r)!==o&&(r=kr())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o),t===o&&(t=ir,kr()!==o?(n=ir,"sigma"===e.substr(ir,5).toLowerCase()?(r=e.substr(ir,5),ir+=5):(r=o,0===cr&&_r(G)),r!==o&&(ar=n,r=q()),(n=r)!==o&&(r=Or())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o)),dr[i]={nextPos:ir,result:t},t)}())!==o&&(r=So())!==o&&Or()!==o&&(i=ro())!==o?(ar=t,l=n,u=r,c=i,si.push(l),n={type:"selection",child:c,arg:u,codeInfo:ti()},t=n):(ir=t,t=o);var l,u,c;return dr[a]={nextPos:ir,result:t},t}())===o&&(t=function(){var t,n,r,i,a=135*ir+81,s=dr[a];if(s)return ir=s.nextPos,s.result;t=ir,(n=function(){var t,n,r,i=135*ir+23,a=dr[i];return a?(ir=a.nextPos,a.result):(t=ir,kr()!==o?(n=ir,960===e.charCodeAt(ir)?(r="π",ir++):(r=o,0===cr&&_r(B)),r!==o&&(ar=n,r=U()),(n=r)!==o&&(r=kr())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o),t===o&&(t=ir,kr()!==o?(n=ir,"pi"===e.substr(ir,2).toLowerCase()?(r=e.substr(ir,2),ir+=2):(r=o,0===cr&&_r(z)),r!==o&&(ar=n,r=U()),(n=r)!==o&&(r=Or())!==o?(ar=t,t=n):(ir=t,t=o)):(ir=t,t=o)),dr[i]={nextPos:ir,result:t},t)}())!==o&&(r=function(){var t,n,r,i,a,s,l,u,c=135*ir+46,d=dr[c];if(d)return ir=d.nextPos,d.result;if(t=ir,(n=Ur())!==o){for(r=[],i=ir,(a=kr())!==o?(44===e.charCodeAt(ir)?(s=",",ir++):(s=o,0===cr&&_r(Xe)),s!==o&&(l=kr())!==o&&(u=Ur())!==o?i=a=[a,s,l,u]:(ir=i,i=o)):(ir=i,i=o);i!==o;)r.push(i),i=ir,(a=kr())!==o?(44===e.charCodeAt(ir)?(s=",",ir++):(s=o,0===cr&&_r(Xe)),s!==o&&(l=kr())!==o&&(u=Ur())!==o?i=a=[a,s,l,u]:(ir=i,i=o)):(ir=i,i=o);r!==o?(ar=t,t=n=$e(n,r)):(ir=t,t=o)}else ir=t,t=o;return dr[c]={nextPos:ir,result:t},t}())!==o&&Or()!==o&&(i=ro())!==o?(ar=t,l=n,u=r,c=i,si.push(l),n={type:"projection",child:c,arg:u,codeInfo:ti()},t=n):(ir=t,t=o);var l,u,c;return dr[a]={nextPos:ir,result:t},t}())===o&&(t=function(){var t,n,r,i,a=135*ir+67,s=dr[a];if(s)return ir=s.nextPos,s.result;(t=function(){var t,n,r,i,a,s,l,u,c,d=135*ir+105,h=dr[d];if(h)return ir=h.nextPos,h.result;t=ir,123===e.charCodeAt(ir)?(n="{",ir++):(n=o,0===cr&&_r(sn));if(n!==o)if(kr()!==o)if((r=function(){var e,t,n,r,i,a,s=135*ir+103,l=dr[s];if(l)return ir=l.nextPos,l.result;if(e=ir,(t=Eo())!==o){for(n=[],r=ir,(i=wo())!==o&&(a=Eo())!==o?r=i=[i,a]:(ir=r,r=o);r!==o;)n.push(r),r=ir,(i=wo())!==o&&(a=Eo())!==o?r=i=[i,a]:(ir=r,r=o);n!==o?(ar=e,t=function(e,t){for(var n,r=[e],o=0;o="===e.substr(ir,2)?(n=">=",ir+=2):(n=o,0===cr&&_r(kt));n===o&&(8805===e.charCodeAt(ir)?(n="≥",ir++):(n=o,0===cr&&_r(Tt)));n!==o&&(ar=t,n=">=");return t=n,dr[r]={nextPos:ir,result:t},t}())===o&&(t=function(){var t,n,r=135*ir+94,i=dr[r];if(i)return ir=i.nextPos,i.result;t=ir,"<="===e.substr(ir,2)?(n="<=",ir+=2):(n=o,0===cr&&_r(xt));n===o&&(8804===e.charCodeAt(ir)?(n="≤",ir++):(n=o,0===cr&&_r(Lt)));n!==o&&(ar=t,n="<=");return t=n,dr[r]={nextPos:ir,result:t},t}())===o&&(t=function(){var t,n=135*ir+93,r=dr[n];if(r)return ir=r.nextPos,r.result;62===e.charCodeAt(ir)?(t=">",ir++):(t=o,0===cr&&_r(Mt));return dr[n]={nextPos:ir,result:t},t}())===o&&(t=function(){var t,n=135*ir+95,r=dr[n];if(r)return ir=r.nextPos,r.result;60===e.charCodeAt(ir)?(t="<",ir++):(t=o,0===cr&&_r(Rt));return dr[n]={nextPos:ir,result:t},t}()),dr[n]={nextPos:ir,result:t},t)}function vo(){var t,n=135*ir+90,r=dr[n];return r?(ir=r.nextPos,r.result):(61===e.charCodeAt(ir)?(t="=",ir++):(t=o,0===cr&&_r(D)),dr[n]={nextPos:ir,result:t},t)}function _o(){var t,n,r=135*ir+91,i=dr[r];return i?(ir=i.nextPos,i.result):(t=ir,"!="===e.substr(ir,2)?(n="!=",ir+=2):(n=o,0===cr&&_r(Ct)),n===o&&(8800===e.charCodeAt(ir)?(n="≠",ir++):(n=o,0===cr&&_r(St)),n===o&&("<>"===e.substr(ir,2)?(n="<>",ir+=2):(n=o,0===cr&&_r(Ot)))),n!==o&&(ar=t,n="!="),t=n,dr[r]={nextPos:ir,result:t},t)}function wo(){var t,n,r,i,a=135*ir+100,s=dr[a];return s?(ir=s.nextPos,s.result):(cr++,t=ir,(n=Mr())!==o?(44===e.charCodeAt(ir)?(r=",",ir++):(r=o,0===cr&&_r(Xe)),r!==o&&(i=Mr())!==o?t=n=[n,r,i]:(ir=t,t=o)):(ir=t,t=o),t===o&&(t=ir,(n=Mr())!==o?(59===e.charCodeAt(ir)?(r=";",ir++):(r=o,0===cr&&_r(jt)),r!==o&&(i=Mr())!==o?t=n=[n,r,i]:(ir=t,t=o)):(ir=t,t=o),t===o&&(t=function(){var t,n,r,i,a,s,l,u=135*ir+11,c=dr[u];if(c)return ir=c.nextPos,c.result;for(t=ir,n=[],r=ir,i=[],a=Sr();a!==o;)i.push(a),a=Sr();if(i!==o){if(a=[],h.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(f)),s!==o)for(;s!==o;)a.push(s),h.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(f));else a=o;if(a!==o){for(s=[],l=Sr();l!==o;)s.push(l),l=Sr();s!==o?r=i=[i,a,s]:(ir=r,r=o)}else ir=r,r=o}else ir=r,r=o;if(r!==o)for(;r!==o;){for(n.push(r),r=ir,i=[],a=Sr();a!==o;)i.push(a),a=Sr();if(i!==o){if(a=[],h.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(f)),s!==o)for(;s!==o;)a.push(s),h.test(e.charAt(ir))?(s=e.charAt(ir),ir++):(s=o,0===cr&&_r(f));else a=o;if(a!==o){for(s=[],l=Sr();l!==o;)s.push(l),l=Sr();s!==o?r=i=[i,a,s]:(ir=r,r=o)}else ir=r,r=o}else ir=r,r=o}else n=o;return n!==o&&(ar=t,n=""),t=n,dr[u]={nextPos:ir,result:t},t}())),cr--,t===o&&(n=o,0===cr&&_r(qt)),dr[a]={nextPos:ir,result:t},t)}function Eo(){var t,n,r,i,a,s,l,u=135*ir+101,c=dr[u];return c?(ir=c.nextPos,c.result):(t=ir,(n=Pr())!==o?(r=ir,58===e.charCodeAt(ir)?(i=":",ir++):(i=o,0===cr&&_r(mt)),i!==o?("string"===e.substr(ir,6).toLowerCase()?(a=e.substr(ir,6),ir+=6):(a=o,0===cr&&_r(Gt)),a===o&&("number"===e.substr(ir,6).toLowerCase()?(a=e.substr(ir,6),ir+=6):(a=o,0===cr&&_r(Kt)),a===o&&("date"===e.substr(ir,4).toLowerCase()?(a=e.substr(ir,4),ir+=4):(a=o,0===cr&&_r(Xt)),a===o&&("boolean"===e.substr(ir,7).toLowerCase()?(a=e.substr(ir,7),ir+=7):(a=o,0===cr&&_r($t))))),a!==o?r=i=[i,a]:(ir=r,r=o)):(ir=r,r=o),r===o&&(r=null),r!==o?(ar=t,l=r,t=n={name:(s=n).name,relAlias:s.relAlias,type:null===l?null:l[1].toLowerCase()}):(ir=t,t=o)):(ir=t,t=o),dr[u]={nextPos:ir,result:t},t)}function jo(){var t,n,r,i,a,s=135*ir+102,l=dr[s];if(l)return ir=l.nextPos,l.result;if(t=ir,(n=Rr())!==o&&(ar=t,n={type:"date",value:n}),(t=n)===o&&(t=ir,"null"===e.substr(ir,4)?(n="null",ir+=4):(n=o,0===cr&&_r(Jt)),n===o&&("NULL"===e.substr(ir,4)?(n="NULL",ir+=4):(n=o,0===cr&&_r(Qt))),n!==o&&(ar=t,n={type:"null",value:null}),(t=n)===o&&(t=ir,(n=Ar())!==o?(r=ir,cr++,(i=wo())===o&&(i=Cr())===o&&(125===e.charCodeAt(ir)?(i="}",ir++):(i=o,0===cr&&_r(Zt))),cr--,i!==o?(ir=r,r=void 0):r=o,r!==o?(ar=t,t=n={type:"boolean",value:n,quoted:!1}):(ir=t,t=o)):(ir=t,t=o),t===o))){if(t=ir,n=ir,r=[],en.test(e.charAt(ir))?(i=e.charAt(ir),ir++):(i=o,0===cr&&_r(tn)),i!==o)for(;i!==o;)r.push(i),en.test(e.charAt(ir))?(i=e.charAt(ir),ir++):(i=o,0===cr&&_r(tn));else r=o;if((n=r!==o?e.substring(n,ir):r)!==o&&(ar=t,n=function(e){return{type:"string",value:e,quoted:!1}}(n)),(t=n)===o){if(t=ir,39===e.charCodeAt(ir)?(n="'",ir++):(n=o,0===cr&&_r(C)),n!==o){for(r=ir,i=[],S.test(e.charAt(ir))?(a=e.charAt(ir),ir++):(a=o,0===cr&&_r(O));a!==o;)i.push(a),S.test(e.charAt(ir))?(a=e.charAt(ir),ir++):(a=o,0===cr&&_r(O));(r=i!==o?e.substring(r,ir):i)!==o?(39===e.charCodeAt(ir)?(i="'",ir++):(i=o,0===cr&&_r(C)),i!==o?(ar=t,t=n=nn(r)):(ir=t,t=o)):(ir=t,t=o)}else ir=t,t=o;if(t===o)if(t=ir,34===e.charCodeAt(ir)?(n='"',ir++):(n=o,0===cr&&_r(rn)),n!==o){for(r=ir,i=[],on.test(e.charAt(ir))?(a=e.charAt(ir),ir++):(a=o,0===cr&&_r(an));a!==o;)i.push(a),on.test(e.charAt(ir))?(a=e.charAt(ir),ir++):(a=o,0===cr&&_r(an));(r=i!==o?e.substring(r,ir):i)!==o?(34===e.charCodeAt(ir)?(i='"',ir++):(i=o,0===cr&&_r(rn)),i!==o?(ar=t,t=n=nn(r)):(ir=t,t=o)):(ir=t,t=o)}else ir=t,t=o}}return dr[s]={nextPos:ir,result:t},t}function Co(){var e,t,n,r,i,a,s=135*ir+104,l=dr[s];if(l)return ir=l.nextPos,l.result;if(e=ir,(t=jo())!==o){for(n=[],r=ir,(i=wo())!==o&&(a=jo())!==o?r=i=[i,a]:(ir=r,r=o);r!==o;)n.push(r),r=ir,(i=wo())!==o&&(a=jo())!==o?r=i=[i,a]:(ir=r,r=o);n!==o?(ar=e,e=t=function(e,t){for(var n=[e],r=0;r0){for(t=1,r=1;t",!1),qe=Qn("!=",!1),Ge=Qn(">=",!1),Ke=Qn(">",!1),Xe=Qn("<=",!1),$e=Qn("<",!1),Je=er("logical AND"),Qe=Qn("and",!0),Ze=er("logical XOR"),et=Qn("xor",!0),tt=er("logical OR"),nt=Qn("or",!0),rt=er("logical NOT"),ot=Qn("!",!1),it=(Qn("not",!1),Qn("exists",!0)),at=Qn("#",!1),st=/^[^\n]/,lt=Zn(["\n"],!0,!1),ut=Qn("`",!1),ct=Qn("drop",!0),dt=Qn("table",!0),ht=Qn("if",!0),ft=Qn("lock",!0),mt=Qn("tables",!0),pt=Qn("unlock",!0),gt=Qn("use",!0),yt=/^[a-zA-Z_0-9\-]/,bt=Zn([["a","z"],["A","Z"],"_",["0","9"],"-"],!1,!1),vt=Qn("decimal",!0),_t=Qn("tinyint",!0),wt=Qn("smallint",!0),Et=Qn("mediumint",!0),jt=Qn("bigint",!0),Ct=Qn("integer",!0),St=Qn("int",!0),Ot=Qn("float",!0),kt=Qn("double",!0),Tt=Qn("varchar",!0),Mt=Qn("char",!0),xt=Qn("text",!0),Lt=Qn("datetime",!0),Rt=/^[a-zA-Z0-9_=]/,At=Zn([["a","z"],["A","Z"],["0","9"],"_","="],!1,!1),Dt=Qn("create",!0),Nt=Qn("exists",!1),Pt=Qn("null",!0),It=Qn("insert",!0),Ht=Qn("into",!0),Yt=Qn("values",!0),Ft=er("boolean expression"),Wt=Qn("||",!1),Bt=function(e,t){return{type:"valueExpr",datatype:"boolean",func:e,args:[void 0,t],codeInfo:No()}},Ut=Qn("like",!0),zt=Qn("ilike",!0),Vt=Qn("+",!1),qt=Qn("/",!1),Gt=Qn("%",!1),Kt=Qn("coalesce",!0),Xt=Qn("concat",!0),$t=Qn("adddate",!0),Jt=Qn("subdate",!0),Qt=Qn("mod",!0),Zt=Qn("add",!0),en=Qn("sub",!0),tn=Qn("mul",!0),nn=Qn("div",!0),rn=Qn("upper",!0),on=Qn("ucase",!0),an=Qn("lower",!0),sn=Qn("lcase",!0),ln=Qn("length",!0),un=Qn("abs",!0),cn=Qn("floor",!0),dn=Qn("ceil",!0),hn=Qn("round",!0),fn=Qn("year",!0),mn=Qn("month",!0),pn=Qn("day",!0),gn=Qn("hour",!0),yn=Qn("minute",!0),bn=Qn("second",!0),vn=Qn("dayofmonth",!0),_n=Qn("rand",!0),wn=Qn("rownum",!0),En=Qn("now",!0),jn=Qn("current_timestamp",!0),Cn=Qn("transaction_timestamp",!0),Sn=Qn("statement_timestamp",!0),On=Qn("clock_timestamp",!0),kn=Qn("sysdate",!0),Tn=Qn("case",!0),Mn=Qn("when",!0),xn=Qn("then",!0),Ln=function(e,t){return{w:e,t:t}},Rn=Qn("else",!0),An=Qn("end",!0),Dn=function(e,t){return function(e,t){var n,r=t[0];r.args[0]=e,r.codeInfo=No();for(var o=1;oqn&&(qn=Un,Gn=[]),Gn.push(e))}function or(e,t,n){return new r(r.buildMessage(e,t),e,t,n)}function ir(){var e,t,n,r=113*Un+0,i=Xn[r];return i?(Un=i.nextPos,i.result):(e=Un,(t=kr())!==o&&(zn=e,t=t),(e=t)===o&&(e=Un,(t=kr())!==o&&(n=ur())!==o?(zn=e,e=t=t):(Un=e,e=o),e===o&&(e=Un,(t=ur())!==o&&(n=kr())!==o?(zn=e,e=t=n):(Un=e,e=o))),Xn[r]={nextPos:Un,result:e},e)}function ar(){var t,n,r=113*Un+2,i=Xn[r];return i?(Un=i.nextPos,i.result):(t=Un,Kn++,e.length>Un?(n=e.charAt(Un),Un++):(n=o,0===Kn&&rr(s)),Kn--,n===o?t=void 0:(Un=t,t=o),Xn[r]={nextPos:Un,result:t},t)}function sr(){var t,n=113*Un+3,r=Xn[n];return r?(Un=r.nextPos,r.result):("\r\n"===e.substr(Un,2)?(t="\r\n",Un+=2):(t=o,0===Kn&&rr(l)),t===o&&(10===e.charCodeAt(Un)?(t="\n",Un++):(t=o,0===Kn&&rr(u))),Xn[n]={nextPos:Un,result:t},t)}function lr(){var t,n=113*Un+4,r=Xn[n];return r?(Un=r.nextPos,r.result):((t=function(){var t,n,r,i,a,l,u,m,p=113*Un+5,g=Xn[p];if(g)return Un=g.nextPos,g.result;Kn++,t=Un,"--"===e.substr(Un,2)?(n="--",Un+=2):(n=o,0===Kn&&rr(d));n!==o?(h.test(e.charAt(Un))?(r=e.charAt(Un),Un++):(r=o,0===Kn&&rr(f)),r!==o?(i=Un,Kn++,(a=sr())===o&&(a=ar()),Kn--,a!==o?(Un=i,i=void 0):i=o,i!==o?t=n=[n,r,i]:(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o);if(t===o&&(t=Un,"--"===e.substr(Un,2)?(n="--",Un+=2):(n=o,0===Kn&&rr(d)),n!==o?(r=Un,Kn++,(i=sr())===o&&(i=ar()),Kn--,i!==o?(Un=r,r=void 0):r=o,r!==o?t=n=[n,r]:(Un=t,t=o)):(Un=t,t=o),t===o))if(t=Un,"--"===e.substr(Un,2)?(n="--",Un+=2):(n=o,0===Kn&&rr(d)),n!==o)if(h.test(e.charAt(Un))?(r=e.charAt(Un),Un++):(r=o,0===Kn&&rr(f)),r!==o){for(i=Un,a=[],l=Un,u=Un,Kn++,m=sr(),Kn--,m===o?u=void 0:(Un=u,u=o),u!==o?(e.length>Un?(m=e.charAt(Un),Un++):(m=o,0===Kn&&rr(s)),m!==o?l=u=[u,m]:(Un=l,l=o)):(Un=l,l=o);l!==o;)a.push(l),l=Un,u=Un,Kn++,m=sr(),Kn--,m===o?u=void 0:(Un=u,u=o),u!==o?(e.length>Un?(m=e.charAt(Un),Un++):(m=o,0===Kn&&rr(s)),m!==o?l=u=[u,m]:(Un=l,l=o)):(Un=l,l=o);(i=a!==o?e.substring(i,Un):a)!==o?(a=Un,Kn++,(l=sr())===o&&(l=ar()),Kn--,l!==o?(Un=a,a=void 0):a=o,a!==o?t=n=[n,r,i,a]:(Un=t,t=o)):(Un=t,t=o)}else Un=t,t=o;else Un=t,t=o;Kn--,t===o&&(n=o,0===Kn&&rr(c));return Xn[p]={nextPos:Un,result:t},t}())===o&&(t=function(){var t,n,r,i,a,l,u=113*Un+6,c=Xn[u];if(c)return Un=c.nextPos,c.result;t=Un,"/*"===e.substr(Un,2)?(n="/*",Un+=2):(n=o,0===Kn&&rr(m));if(n!==o){for(r=[],i=Un,a=Un,Kn++,"*/"===e.substr(Un,2)?(l="*/",Un+=2):(l=o,0===Kn&&rr(p)),Kn--,l===o?a=void 0:(Un=a,a=o),a!==o?(e.length>Un?(l=e.charAt(Un),Un++):(l=o,0===Kn&&rr(s)),l!==o?i=a=[a,l]:(Un=i,i=o)):(Un=i,i=o);i!==o;)r.push(i),i=Un,a=Un,Kn++,"*/"===e.substr(Un,2)?(l="*/",Un+=2):(l=o,0===Kn&&rr(p)),Kn--,l===o?a=void 0:(Un=a,a=o),a!==o?(e.length>Un?(l=e.charAt(Un),Un++):(l=o,0===Kn&&rr(s)),l!==o?i=a=[a,l]:(Un=i,i=o)):(Un=i,i=o);r!==o?("*/"===e.substr(Un,2)?(i="*/",Un+=2):(i=o,0===Kn&&rr(p)),i!==o?t=n=[n,r,i]:(Un=t,t=o)):(Un=t,t=o)}else Un=t,t=o;return Xn[u]={nextPos:Un,result:t},t}()),Xn[n]={nextPos:Un,result:t},t)}function ur(){var t,n,r,i,a,s,l,u=113*Un+7,c=Xn[u];if(c)return Un=c.nextPos,c.result;for(Kn++,t=Un,n=[],r=Un,i=[],a=lr();a!==o;)i.push(a),a=lr();if(i!==o){if(a=[],y.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(b)),s!==o)for(;s!==o;)a.push(s),y.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(b));else a=o;if(a!==o){for(s=[],l=lr();l!==o;)s.push(l),l=lr();s!==o?r=i=[i,a,s]:(Un=r,r=o)}else Un=r,r=o}else Un=r,r=o;if(r!==o)for(;r!==o;){for(n.push(r),r=Un,i=[],a=lr();a!==o;)i.push(a),a=lr();if(i!==o){if(a=[],y.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(b)),s!==o)for(;s!==o;)a.push(s),y.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(b));else a=o;if(a!==o){for(s=[],l=lr();l!==o;)s.push(l),l=lr();s!==o?r=i=[i,a,s]:(Un=r,r=o)}else Un=r,r=o}else Un=r,r=o}else n=o;return n!==o&&(zn=t,n=""),Kn--,(t=n)===o&&(n=o,0===Kn&&rr(g)),Xn[u]={nextPos:Un,result:t},t}function cr(){var t,n,r=113*Un+8,i=Xn[r];if(i)return Un=i.nextPos,i.result;for(Kn++,t=[],(n=lr())===o&&(y.test(e.charAt(Un))?(n=e.charAt(Un),Un++):(n=o,0===Kn&&rr(b)));n!==o;)t.push(n),(n=lr())===o&&(y.test(e.charAt(Un))?(n=e.charAt(Un),Un++):(n=o,0===Kn&&rr(b)));return Kn--,t===o&&(n=o,0===Kn&&rr(v)),Xn[r]={nextPos:Un,result:t},t}function dr(){var t,n,r=113*Un+9,i=Xn[r];if(i)return Un=i.nextPos,i.result;if(Kn++,t=[],w.test(e.charAt(Un))?(n=e.charAt(Un),Un++):(n=o,0===Kn&&rr(E)),n!==o)for(;n!==o;)t.push(n),w.test(e.charAt(Un))?(n=e.charAt(Un),Un++):(n=o,0===Kn&&rr(E));else t=o;return Kn--,t===o&&(n=o,0===Kn&&rr(_)),Xn[r]={nextPos:Un,result:t},t}function hr(){var t,n,r=113*Un+10,i=Xn[r];if(i)return Un=i.nextPos,i.result;for(Kn++,t=[],w.test(e.charAt(Un))?(n=e.charAt(Un),Un++):(n=o,0===Kn&&rr(E));n!==o;)t.push(n),w.test(e.charAt(Un))?(n=e.charAt(Un),Un++):(n=o,0===Kn&&rr(E));return Kn--,t===o&&(n=o,0===Kn&&rr(j)),Xn[r]={nextPos:Un,result:t},t}function fr(){var t,n,r,i,a,s=113*Un+11,l=Xn[s];if(l)return Un=l.nextPos,l.result;if(Kn++,t=Un,34===e.charCodeAt(Un)?(n='"',Un++):(n=o,0===Kn&&rr(S)),n!==o){for(r=[],O.test(e.charAt(Un))?(i=e.charAt(Un),Un++):(i=o,0===Kn&&rr(k));i!==o;)r.push(i),O.test(e.charAt(Un))?(i=e.charAt(Un),Un++):(i=o,0===Kn&&rr(k));r!==o?(34===e.charCodeAt(Un)?(i='"',Un++):(i=o,0===Kn&&rr(S)),i!==o?(zn=t,t=n=void Jn(i18n.t("db.messages.parser.error-sql-string-use-single-quotes"))):(Un=t,t=o)):(Un=t,t=o)}else Un=t,t=o;if(t===o)if(t=Un,39===e.charCodeAt(Un)?(n="'",Un++):(n=o,0===Kn&&rr(T)),n!==o){for(r=Un,i=[],M.test(e.charAt(Un))?(a=e.charAt(Un),Un++):(a=o,0===Kn&&rr(x));a!==o;)i.push(a),M.test(e.charAt(Un))?(a=e.charAt(Un),Un++):(a=o,0===Kn&&rr(x));(r=i!==o?e.substring(r,Un):i)!==o?(39===e.charCodeAt(Un)?(i="'",Un++):(i=o,0===Kn&&rr(T)),i!==o?(zn=t,t=n=r):(Un=t,t=o)):(Un=t,t=o)}else Un=t,t=o;return Kn--,t===o&&(n=o,0===Kn&&rr(C)),Xn[s]={nextPos:Un,result:t},t}function mr(){var t,n,r,i,a,s,l=113*Un+12,u=Xn[l];if(u)return Un=u.nextPos,u.result;if(t=Un,n=Un,r=Un,45===e.charCodeAt(Un)?(i="-",Un++):(i=o,0===Kn&&rr(L)),i===o&&(i=null),i!==o){if(a=[],R.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(A)),s!==o)for(;s!==o;)a.push(s),R.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(A));else a=o;a!==o?r=i=[i,a]:(Un=r,r=o)}else Un=r,r=o;return(n=r!==o?e.substring(n,Un):r)!==o&&(zn=t,n=parseInt(n,10)),t=n,Xn[l]={nextPos:Un,result:t},t}function pr(){var t,n,r,i,a,s,l,u,c=113*Un+13,d=Xn[c];if(d)return Un=d.nextPos,d.result;if(t=Un,n=Un,r=Un,45===e.charCodeAt(Un)?(i="-",Un++):(i=o,0===Kn&&rr(L)),i===o&&(i=null),i!==o){if(a=[],R.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(A)),s!==o)for(;s!==o;)a.push(s),R.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(A));else a=o;if(a!==o)if(46===e.charCodeAt(Un)?(s=".",Un++):(s=o,0===Kn&&rr(D)),s!==o){if(l=[],R.test(e.charAt(Un))?(u=e.charAt(Un),Un++):(u=o,0===Kn&&rr(A)),u!==o)for(;u!==o;)l.push(u),R.test(e.charAt(Un))?(u=e.charAt(Un),Un++):(u=o,0===Kn&&rr(A));else l=o;l!==o?r=i=[i,a,s,l]:(Un=r,r=o)}else Un=r,r=o;else Un=r,r=o}else Un=r,r=o;return(n=r!==o?e.substring(n,Un):r)!==o&&(zn=t,n=parseFloat(n)),t=n,Xn[c]={nextPos:Un,result:t},t}function gr(){var e,t=113*Un+14,n=Xn[t];return n?(Un=n.nextPos,n.result):((e=pr())===o&&(e=mr()),Xn[t]={nextPos:Un,result:e},e)}function yr(){var t,n,r,i,a,s,l,u,c,d,h=113*Un+16,f=Xn[h];if(f)return Un=f.nextPos,f.result;if(Kn++,t=Un,n=Un,Kn++,r=Un,(i=Do())!==o){if(a=Un,Kn++,s=[],H.test(e.charAt(Un))?(l=e.charAt(Un),Un++):(l=o,0===Kn&&rr(Y)),l!==o)for(;l!==o;)s.push(l),H.test(e.charAt(Un))?(l=e.charAt(Un),Un++):(l=o,0===Kn&&rr(Y));else s=o;Kn--,s===o?a=void 0:(Un=a,a=o),a!==o?r=i=[i,a]:(Un=r,r=o)}else Un=r,r=o;if(Kn--,r===o?n=void 0:(Un=n,n=o),n!==o){if(r=Un,i=Un,a=[],F.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(W)),s!==o)for(;s!==o;)a.push(s),F.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(W));else a=o;if(a!==o){for(s=Un,l=[],H.test(e.charAt(Un))?(u=e.charAt(Un),Un++):(u=o,0===Kn&&rr(Y));u!==o;)l.push(u),H.test(e.charAt(Un))?(u=e.charAt(Un),Un++):(u=o,0===Kn&&rr(Y));(s=l!==o?e.substring(s,Un):l)!==o?i=a=[a,s]:(Un=i,i=o)}else Un=i,i=o;(r=i!==o?e.substring(r,Un):i)!==o?(zn=t,"true"!==(d=(c=r).toLowerCase())&&"false"!==d||Jn(i18n.t("db.messages.parser.error-sql-invalid-relation-name",{str:c})),t=n=c):(Un=t,t=o)}else Un=t,t=o;return Kn--,t===o&&(n=o,0===Kn&&rr(I)),Xn[h]={nextPos:Un,result:t},t}function br(){var t,n,r,i,a,s,l,u,c,d,h=113*Un+17,f=Xn[h];if(f)return Un=f.nextPos,f.result;if(t=Un,n=Un,Kn++,r=Un,(i=Do())!==o){if(a=Un,Kn++,s=[],H.test(e.charAt(Un))?(l=e.charAt(Un),Un++):(l=o,0===Kn&&rr(Y)),l!==o)for(;l!==o;)s.push(l),H.test(e.charAt(Un))?(l=e.charAt(Un),Un++):(l=o,0===Kn&&rr(Y));else s=o;Kn--,s===o?a=void 0:(Un=a,a=o),a!==o?r=i=[i,a]:(Un=r,r=o)}else Un=r,r=o;if(Kn--,r===o?n=void 0:(Un=n,n=o),n!==o){if(r=Un,i=Un,a=[],F.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(W)),s!==o)for(;s!==o;)a.push(s),F.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(W));else a=o;if(a!==o){for(s=Un,l=[],H.test(e.charAt(Un))?(u=e.charAt(Un),Un++):(u=o,0===Kn&&rr(Y));u!==o;)l.push(u),H.test(e.charAt(Un))?(u=e.charAt(Un),Un++):(u=o,0===Kn&&rr(Y));(s=l!==o?e.substring(s,Un):l)!==o?i=a=[a,s]:(Un=i,i=o)}else Un=i,i=o;(r=i!==o?e.substring(r,Un):i)!==o?(zn=t,"true"!==(d=(c=r).toLowerCase())&&"false"!==d||Jn(i18n.t("db.messages.parser.error-sql-invalid-column-name",{str:c})),t=n=c):(Un=t,t=o)}else Un=t,t=o;return Xn[h]={nextPos:Un,result:t},t}function vr(){var t,n,r,i,a,s=113*Un+19,l=Xn[s];return l?(Un=l.nextPos,l.result):(t=Un,"date"===e.substr(Un,4).toLowerCase()?(n=e.substr(Un,4),Un+=4):(n=o,0===Kn&&rr(B)),n!==o?("('"===e.substr(Un,2)?(r="('",Un+=2):(r=o,0===Kn&&rr(U)),r!==o&&(i=function(){var t,n,r,i,a,s,l,u,c,d=113*Un+20,h=Xn[d];if(h)return Un=h.nextPos,h.result;Kn++,t=Un,n=Un,r=Un,R.test(e.charAt(Un))?(i=e.charAt(Un),Un++):(i=o,0===Kn&&rr(A));i!==o?(R.test(e.charAt(Un))?(a=e.charAt(Un),Un++):(a=o,0===Kn&&rr(A)),a!==o?(R.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(A)),s!==o?(R.test(e.charAt(Un))?(l=e.charAt(Un),Un++):(l=o,0===Kn&&rr(A)),l!==o?r=i=[i,a,s,l]:(Un=r,r=o)):(Un=r,r=o)):(Un=r,r=o)):(Un=r,r=o);n=r!==o?e.substring(n,Un):r;n!==o?(45===e.charCodeAt(Un)?(r="-",Un++):(r=o,0===Kn&&rr(L)),r!==o?(i=Un,a=Un,R.test(e.charAt(Un))?(s=e.charAt(Un),Un++):(s=o,0===Kn&&rr(A)),s!==o?(R.test(e.charAt(Un))?(l=e.charAt(Un),Un++):(l=o,0===Kn&&rr(A)),l!==o?a=s=[s,l]:(Un=a,a=o)):(Un=a,a=o),(i=a!==o?e.substring(i,Un):a)!==o?(45===e.charCodeAt(Un)?(a="-",Un++):(a=o,0===Kn&&rr(L)),a!==o?(s=Un,l=Un,R.test(e.charAt(Un))?(u=e.charAt(Un),Un++):(u=o,0===Kn&&rr(A)),u!==o?(R.test(e.charAt(Un))?(c=e.charAt(Un),Un++):(c=o,0===Kn&&rr(A)),c!==o?l=u=[u,c]:(Un=l,l=o)):(Un=l,l=o),(s=l!==o?e.substring(s,Un):l)!==o?(zn=t,n=function(e,t,n){e=parseInt(e,10),t=parseInt(t,10)-1,n=parseInt(n,10);var r=new Date(e,t,n);return r.getFullYear()==e&&r.getMonth()==t&&r.getDate()==n||Jn(i18n.t("db.messages.parser.error-invalid-date-format",{str:$n()})),r}(n,i,s),t=n):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o);Kn--,t===o&&(n=o,0===Kn&&rr(V));return Xn[d]={nextPos:Un,result:t},t}())!==o?("')"===e.substr(Un,2)?(a="')",Un+=2):(a=o,0===Kn&&rr(z)),a!==o?(zn=t,t=n=i):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o),Xn[s]={nextPos:Un,result:t},t)}function _r(){var t,n,r,i,a,s=113*Un+21,l=Xn[s];return l?(Un=l.nextPos,l.result):(t=Un,n=Un,(r=yr())!==o?(46===e.charCodeAt(Un)?(i=".",Un++):(i=o,0===Kn&&rr(D)),i!==o?n=r=[r,i]:(Un=n,n=o)):(Un=n,n=o),n===o&&(n=null),n!==o&&(r=br())!==o?(zn=t,t=n={type:"column",name:r,relAlias:(a=n)?a[0]:null}):(Un=t,t=o),Xn[s]={nextPos:Un,result:t},t)}function wr(){var t,n,r,i,a=113*Un+23,s=Xn[a];if(s)return Un=s.nextPos,s.result;if(t=Un,n=Un,r=[],R.test(e.charAt(Un))?(i=e.charAt(Un),Un++):(i=o,0===Kn&&rr(A)),i!==o)for(;i!==o;)r.push(i),R.test(e.charAt(Un))?(i=e.charAt(Un),Un++):(i=o,0===Kn&&rr(A));else r=o;return(n=r!==o?e.substring(n,Un):r)!==o&&(zn=t,n={type:"column",name:parseInt(n,10),relAlias:null}),t=n,Xn[a]={nextPos:Un,result:t},t}function Er(){var t,n,r,i,a,s,l,u,c=113*Un+24,d=Xn[c];return d?(Un=d.nextPos,d.result):(t=Un,n=Un,"sum"===e.substr(Un,3).toLowerCase()?(r=e.substr(Un,3),Un+=3):(r=o,0===Kn&&rr(G)),r===o&&("count"===e.substr(Un,5).toLowerCase()?(r=e.substr(Un,5),Un+=5):(r=o,0===Kn&&rr(K)),r===o&&("avg"===e.substr(Un,3).toLowerCase()?(r=e.substr(Un,3),Un+=3):(r=o,0===Kn&&rr(X)),r===o&&("min"===e.substr(Un,3).toLowerCase()?(r=e.substr(Un,3),Un+=3):(r=o,0===Kn&&rr($)),r===o&&("max"===e.substr(Un,3).toLowerCase()?(r=e.substr(Un,3),Un+=3):(r=o,0===Kn&&rr(J)))))),(n=r!==o?e.substring(n,Un):r)!==o?(40===e.charCodeAt(Un)?(r="(",Un++):(r=o,0===Kn&&rr(Q)),r!==o&&cr()!==o?(i=Un,"all"===e.substr(Un,3).toLowerCase()?(a=e.substr(Un,3),Un+=3):(a=o,0===Kn&&rr(Z)),a!==o&&(s=ur())!==o?i=a=[a,s]:(Un=i,i=o),i===o&&(i=null),i!==o&&(a=_r())!==o&&(s=cr())!==o?(41===e.charCodeAt(Un)?(l=")",Un++):(l=o,0===Kn&&rr(ee)),l!==o?(zn=t,u=a,t=n={type:"aggFunction",aggFunction:n.toUpperCase(),col:u}):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o),t===o&&(t=Un,"count(*)"===e.substr(Un,8).toLowerCase()?(n=e.substr(Un,8),Un+=8):(n=o,0===Kn&&rr(te)),n!==o&&(zn=t,n={type:"aggFunction",aggFunction:"COUNT_ALL",col:null}),t=n),Xn[c]={nextPos:Un,result:t},t)}function jr(){var t,n,r,i,a,s,l,u,c=113*Un+25,d=Xn[c];return d?(Un=d.nextPos,d.result):(t=Un,(n=Er())!==o&&ur()!==o?("as"===e.substr(Un,2).toLowerCase()?(r=e.substr(Un,2),Un+=2):(r=o,0===Kn&&rr(ne)),r!==o&&ur()!==o&&(i=br())!==o?(zn=t,s=i,(a=n).name=s,t=n=a):(Un=t,t=o)):(Un=t,t=o),t===o&&(t=Un,(n=Er())!==o&&cr()!==o?(zn=t,t=n=void Jn("aggregation columns must be named")):(Un=t,t=o),t===o&&(t=Un,(n=function(){var t,n,r,i,a,s=113*Un+22,l=Xn[s];return l?(Un=l.nextPos,l.result):(t=Un,n=Un,(r=yr())!==o?(46===e.charCodeAt(Un)?(i=".",Un++):(i=o,0===Kn&&rr(D)),i!==o?n=r=[r,i]:(Un=n,n=o)):(Un=n,n=o),n===o&&(n=null),n!==o?(42===e.charCodeAt(Un)?(r="*",Un++):(r=o,0===Kn&&rr(q)),r!==o?(zn=t,t=n={type:"column",name:"*",relAlias:(a=n)?a[0]:null}):(Un=t,t=o)):(Un=t,t=o),Xn[s]={nextPos:Un,result:t},t)}())!==o&&(zn=t,n=re(n)),(t=n)===o&&(t=Un,(n=_r())!==o&&ur()!==o?("as"===e.substr(Un,2).toLowerCase()?(r=e.substr(Un,2),Un+=2):(r=o,0===Kn&&rr(ne)),r!==o&&ur()!==o&&(i=br())!==o?(zn=t,u=i,(l=n).alias=u,t=n=l):(Un=t,t=o)):(Un=t,t=o),t===o&&(t=Un,(n=Co())!==o&&ur()!==o?("as"===e.substr(Un,2).toLowerCase()?(r=e.substr(Un,2),Un+=2):(r=o,0===Kn&&rr(ne)),r!==o&&ur()!==o&&(i=br())!==o?(zn=t,t=n=function(e,t){return{type:"namedColumnExpr",name:t,relAlias:null,child:e,codeInfo:No()}}(n,i)):(Un=t,t=o)):(Un=t,t=o),t===o&&(t=Un,(n=_r())!==o&&(zn=t,n=re(n)),t=n))))),Xn[c]={nextPos:Un,result:t},t)}function Cr(){var t,n,r,i,a,s,l=113*Un+29,u=Xn[l];return u?(Un=u.nextPos,u.result):(t=Un,(n=_r())===o&&(n=wr()),n!==o?(r=Un,(i=ur())!==o&&(a=function(){var t,n,r=113*Un+28,i=Xn[r];return i?(Un=i.nextPos,i.result):(t=Un,"asc"===e.substr(Un,3).toLowerCase()?(n=e.substr(Un,3),Un+=3):(n=o,0===Kn&&rr(ie)),n!==o&&(zn=t,n=!0),(t=n)===o&&(t=Un,"desc"===e.substr(Un,4).toLowerCase()?(n=e.substr(Un,4),Un+=4):(n=o,0===Kn&&rr(ae)),n!==o&&(zn=t,n=!1),t=n),Xn[r]={nextPos:Un,result:t},t)}())!==o?r=i=[i,a]:(Un=r,r=o),r===o&&(r=null),r!==o?(zn=t,t=n={col:n,asc:s=null==(s=r)||s[1]}):(Un=t,t=o)):(Un=t,t=o),Xn[l]={nextPos:Un,result:t},t)}function Sr(){var t,n,r,i,a,s,l,u,c=113*Un+30,d=Xn[c];if(d)return Un=d.nextPos,d.result;if(t=Un,(n=Cr())!==o){for(r=[],i=Un,(a=cr())!==o?(44===e.charCodeAt(Un)?(s=",",Un++):(s=o,0===Kn&&rr(oe)),s!==o&&(l=cr())!==o&&(u=Cr())!==o?i=a=[a,s,l,u]:(Un=i,i=o)):(Un=i,i=o);i!==o;)r.push(i),i=Un,(a=cr())!==o?(44===e.charCodeAt(Un)?(s=",",Un++):(s=o,0===Kn&&rr(oe)),s!==o&&(l=cr())!==o&&(u=Cr())!==o?i=a=[a,s,l,u]:(Un=i,i=o)):(Un=i,i=o);r!==o?(zn=t,t=n=function(e,t){var n=[e];if(null!=t)for(var r in t)n.push(t[r][3]);return{value:n,codeInfo:No()}}(n,r)):(Un=t,t=o)}else Un=t,t=o;return Xn[c]={nextPos:Un,result:t},t}function Or(){var t,n,r,i,a,s,l,u,c=113*Un+32,d=Xn[c];return d?(Un=d.nextPos,d.result):(t=Un,(n=yr())!==o&&ur()!==o?("as"===e.substr(Un,2).toLowerCase()?(r=e.substr(Un,2),Un+=2):(r=o,0===Kn&&rr(ne)),r!==o&&cr()!==o?(40===e.charCodeAt(Un)?(i="(",Un++):(i=o,0===Kn&&rr(Q)),i!==o&&(a=xr())!==o?(41===e.charCodeAt(Un)?(s=")",Un++):(s=o,0===Kn&&rr(ee)),s!==o?(zn=t,l=n,(u=a).wrappedInParentheses=!0,t=n={type:"assignment",name:l,child:{type:"relationFromSubstatement",statement:u,relAlias:l,codeInfo:No()},codeInfo:No()}):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o),Xn[c]={nextPos:Un,result:t},t)}function kr(){var t,n,r,i,a=113*Un+33,s=Xn[a];return s?(Un=s.nextPos,s.result):(t=Un,(n=function(){var t,n,r,i,a,s,l,u,c,d=113*Un+34,h=Xn[d];if(h)return Un=h.nextPos,h.result;t=Un,"with"===e.substr(Un,4).toLowerCase()?(n=e.substr(Un,4),Un+=4):(n=o,0===Kn&&rr(ue));if(n!==o)if(ur()!==o)if((r=Or())!==o){for(i=[],a=Un,(s=cr())!==o?(44===e.charCodeAt(Un)?(l=",",Un++):(l=o,0===Kn&&rr(oe)),l!==o&&(u=cr())!==o&&(c=Or())!==o?a=s=[s,l,u,c]:(Un=a,a=o)):(Un=a,a=o);a!==o;)i.push(a),a=Un,(s=cr())!==o?(44===e.charCodeAt(Un)?(l=",",Un++):(l=o,0===Kn&&rr(oe)),l!==o&&(u=cr())!==o&&(c=Or())!==o?a=s=[s,l,u,c]:(Un=a,a=o)):(Un=a,a=o);i!==o?(zn=t,n=function(e,t){for(var n=[e],r=0;r0&&i!=e.arg.length&&null===r&&Jn(i18n.t("db.messages.parser.error-sql-group-by-missing")),o&&!r&&0===i&&Jn(i18n.t("db.messages.parser.error-sql-having-without-group-by")),{type:"statement",select:e,from:t,where:n?n[1]:null,groupBy:r?r[5]:null,having:o?o[1]:null,numAggregationColumns:i,wrappedInParentheses:!1,codeInfo:No()}}(n,i,a,s,l)):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o),t===o&&(t=Un,40===e.charCodeAt(Un)?(n="(",Un++):(n=o,0===Kn&&rr(Q)),n!==o&&cr()!==o&&(r=xr())!==o&&cr()!==o?(41===e.charCodeAt(Un)?(i=")",Un++):(i=o,0===Kn&&rr(ee)),i!==o?(zn=t,t=n=ye(r)):(Un=t,t=o)):(Un=t,t=o)),Xn[m]={nextPos:Un,result:t},t)}function Dr(){var t,n,r,i,a=113*Un+41,s=Xn[a];return s?(Un=s.nextPos,s.result):(t=Un,ur()!==o?("union"===e.substr(Un,5).toLowerCase()?(n=e.substr(Un,5),Un+=5):(n=o,0===Kn&&rr(be)),n!==o&&ur()!==o?(r=Un,"all"===e.substr(Un,3).toLowerCase()?(i=e.substr(Un,3),Un+=3):(i=o,0===Kn&&rr(ve)),i!==o&&ur()!==o?(zn=r,r=i=!0):(Un=r,r=o),r===o&&(r=Un,"distinct"===e.substr(Un,8).toLowerCase()?(i=e.substr(Un,8),Un+=8):(i=o,0===Kn&&rr(de)),i!==o&&ur()!==o?(zn=r,r=i=!1):(Un=r,r=o)),r===o&&(r=null),r!==o&&(i=Rr())!==o?(zn=t,t={type:"union",child2:i,all:r}):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o),Xn[a]={nextPos:Un,result:t},t)}function Nr(){var t,n,r,i,a=113*Un+42,s=Xn[a];return s?(Un=s.nextPos,s.result):(t=Un,ur()!==o?("except"===e.substr(Un,6).toLowerCase()?(n=e.substr(Un,6),Un+=6):(n=o,0===Kn&&rr(_e)),n!==o&&ur()!==o?(r=Un,"all"===e.substr(Un,3).toLowerCase()?(i=e.substr(Un,3),Un+=3):(i=o,0===Kn&&rr(ve)),i!==o&&ur()!==o?(zn=r,r=i=!0):(Un=r,r=o),r===o&&(r=Un,"distinct"===e.substr(Un,8).toLowerCase()?(i=e.substr(Un,8),Un+=8):(i=o,0===Kn&&rr(de)),i!==o&&ur()!==o?(zn=r,r=i=!1):(Un=r,r=o)),r===o&&(r=null),r!==o&&(i=Rr())!==o?(zn=t,t={type:"except",child2:i,all:r}):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o),Xn[a]={nextPos:Un,result:t},t)}function Pr(){var t,n,r,i,a=113*Un+43,s=Xn[a];return s?(Un=s.nextPos,s.result):(t=Un,ur()!==o?("intersect"===e.substr(Un,9).toLowerCase()?(n=e.substr(Un,9),Un+=9):(n=o,0===Kn&&rr(we)),n!==o&&ur()!==o?(r=Un,"all"===e.substr(Un,3).toLowerCase()?(i=e.substr(Un,3),Un+=3):(i=o,0===Kn&&rr(ve)),i!==o&&ur()!==o?(zn=r,r=i=!0):(Un=r,r=o),r===o&&(r=Un,"distinct"===e.substr(Un,8).toLowerCase()?(i=e.substr(Un,8),Un+=8):(i=o,0===Kn&&rr(de)),i!==o&&ur()!==o?(zn=r,r=i=!1):(Un=r,r=o)),r===o&&(r=null),r!==o&&(i=Rr())!==o?(zn=t,t={type:"intersect",child2:i,all:r}):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o),Xn[a]={nextPos:Un,result:t},t)}function Ir(){var e,t,n,r,i=113*Un+44,a=Xn[i];if(a)return Un=a.nextPos,a.result;if(e=Un,(t=Hr())!==o){if(n=[],(r=Yr())===o&&(r=Fr())===o&&(r=Wr()),r!==o)for(;r!==o;)n.push(r),(r=Yr())===o&&(r=Fr())===o&&(r=Wr());else n=o;n!==o?(zn=e,e=t=me(t,n)):(Un=e,e=o)}else Un=e,e=o;return e===o&&(e=Hr()),Xn[i]={nextPos:Un,result:e},e}function Hr(){var t,n,r,i,a,s,l,u,c,d,h,f=113*Un+45,m=Xn[f];return m?(Un=m.nextPos,m.result):(t=Un,(n=yr())!==o?(r=Un,(i=ur())!==o?("as"===e.substr(Un,2).toLowerCase()?(a=e.substr(Un,2),Un+=2):(a=o,0===Kn&&rr(ne)),a!==o&&(s=ur())!==o&&(l=yr())!==o?r=i=[i,a,s,l]:(Un=r,r=o)):(Un=r,r=o),r===o&&(r=null),r!==o?(zn=t,d=r,h={type:"relation",name:n,relAlias:null,codeInfo:No()},t=n=null!==d?{type:"renameRelation",child:h,newRelAlias:d[3],codeInfo:No()}:h):(Un=t,t=o)):(Un=t,t=o),t===o&&(t=Un,40===e.charCodeAt(Un)?(n="(",Un++):(n=o,0===Kn&&rr(Q)),n!==o&&(r=cr())!==o&&(i=xr())!==o&&(a=cr())!==o?(41===e.charCodeAt(Un)?(s=")",Un++):(s=o,0===Kn&&rr(ee)),s!==o&&(l=ur())!==o?("as"===e.substr(Un,2).toLowerCase()?(u=e.substr(Un,2),Un+=2):(u=o,0===Kn&&rr(ne)),u!==o&&ur()!==o&&(c=yr())!==o?(zn=t,t=n=function(e,t){return e.wrappedInParentheses=!0,{type:"relationFromSubstatement",statement:e,relAlias:t,codeInfo:No()}}(i,c)):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o),t===o&&(t=Un,40===e.charCodeAt(Un)?(n="(",Un++):(n=o,0===Kn&&rr(Q)),n!==o&&(r=cr())!==o&&(i=Ir())!==o&&(a=cr())!==o?(41===e.charCodeAt(Un)?(s=")",Un++):(s=o,0===Kn&&rr(ee)),s!==o?(zn=t,t=n=ye(i)):(Un=t,t=o)):(Un=t,t=o))),Xn[f]={nextPos:Un,result:t},t)}function Yr(){var t,n,r,i,a,s,l,u=113*Un+46,c=Xn[u];return c?(Un=c.nextPos,c.result):(t=Un,n=Un,(r=ur())!==o?("cross"===e.substr(Un,5).toLowerCase()?(i=e.substr(Un,5),Un+=5):(i=o,0===Kn&&rr(Ee)),i!==o&&(a=ur())!==o?("join"===e.substr(Un,4).toLowerCase()?(s=e.substr(Un,4),Un+=4):(s=o,0===Kn&&rr(je)),s!==o&&(l=ur())!==o?n=r=[r,i,a,s,l]:(Un=n,n=o)):(Un=n,n=o)):(Un=n,n=o),n===o&&(n=Un,(r=cr())!==o?(44===e.charCodeAt(Un)?(i=",",Un++):(i=o,0===Kn&&rr(oe)),i!==o&&(a=cr())!==o?n=r=[r,i,a]:(Un=n,n=o)):(Un=n,n=o)),n!==o&&(r=Hr())!==o?(zn=t,t=n={type:"crossJoin",child2:r,cond:null}):(Un=t,t=o),Xn[u]={nextPos:Un,result:t},t)}function Fr(){var t,n,r,i,a=113*Un+47,s=Xn[a];return s?(Un=s.nextPos,s.result):(t=Un,ur()!==o?("natural"===e.substr(Un,7).toLowerCase()?(n=e.substr(Un,7),Un+=7):(n=o,0===Kn&&rr(Ce)),n!==o&&ur()!==o?("join"===e.substr(Un,4).toLowerCase()?(r=e.substr(Un,4),Un+=4):(r=o,0===Kn&&rr(je)),r!==o&&ur()!==o&&(i=Hr())!==o?(zn=t,t={type:"naturalJoin",child2:i,cond:null}):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o),Xn[a]={nextPos:Un,result:t},t)}function Wr(){var t,n,r,i,a,s,l,u,c,d,h,f,m,p,g,y=113*Un+48,b=Xn[y];if(b)return Un=b.nextPos,b.result;if(t=Un,ur()!==o)if(n=Un,r=Un,"inner"===e.substr(Un,5).toLowerCase()?(i=e.substr(Un,5),Un+=5):(i=o,0===Kn&&rr(Se)),i!==o&&(a=ur())!==o?r=i=[i,a]:(Un=r,r=o),r===o&&(r=null),r!==o?("join"===e.substr(Un,4).toLowerCase()?(i=e.substr(Un,4),Un+=4):(i=o,0===Kn&&rr(je)),i!==o?(zn=n,n=r="innerJoin"):(Un=n,n=o)):(Un=n,n=o),n===o&&(n=Un,r=Un,"left"===e.substr(Un,4).toLowerCase()?(i=e.substr(Un,4),Un+=4):(i=o,0===Kn&&rr(Oe)),i!==o?(a=Un,(s=ur())!==o?("outer"===e.substr(Un,5).toLowerCase()?(l=e.substr(Un,5),Un+=5):(l=o,0===Kn&&rr(ke)),l!==o?a=s=[s,l]:(Un=a,a=o)):(Un=a,a=o),a===o&&(a=null),a!==o&&(s=ur())!==o?("join"===e.substr(Un,4).toLowerCase()?(l=e.substr(Un,4),Un+=4):(l=o,0===Kn&&rr(je)),l!==o?r=i=[i,a,s,l]:(Un=r,r=o)):(Un=r,r=o)):(Un=r,r=o),r!==o&&(zn=n,r="leftOuterJoin"),(n=r)===o&&(n=Un,r=Un,"right"===e.substr(Un,5).toLowerCase()?(i=e.substr(Un,5),Un+=5):(i=o,0===Kn&&rr(Te)),i!==o?(a=Un,(s=ur())!==o?("outer"===e.substr(Un,5).toLowerCase()?(l=e.substr(Un,5),Un+=5):(l=o,0===Kn&&rr(ke)),l!==o?a=s=[s,l]:(Un=a,a=o)):(Un=a,a=o),a===o&&(a=null),a!==o&&(s=ur())!==o?("join"===e.substr(Un,4).toLowerCase()?(l=e.substr(Un,4),Un+=4):(l=o,0===Kn&&rr(je)),l!==o?r=i=[i,a,s,l]:(Un=r,r=o)):(Un=r,r=o)):(Un=r,r=o),r!==o&&(zn=n,r="rightOuterJoin"),(n=r)===o&&(n=Un,r=Un,"full"===e.substr(Un,4).toLowerCase()?(i=e.substr(Un,4),Un+=4):(i=o,0===Kn&&rr(Me)),i!==o?(a=Un,(s=ur())!==o?("outer"===e.substr(Un,5).toLowerCase()?(l=e.substr(Un,5),Un+=5):(l=o,0===Kn&&rr(ke)),l!==o?a=s=[s,l]:(Un=a,a=o)):(Un=a,a=o),a===o&&(a=null),a!==o&&(s=ur())!==o?("join"===e.substr(Un,4).toLowerCase()?(l=e.substr(Un,4),Un+=4):(l=o,0===Kn&&rr(je)),l!==o?r=i=[i,a,s,l]:(Un=r,r=o)):(Un=r,r=o)):(Un=r,r=o),r!==o&&(zn=n,r="fullOuterJoin"),n=r))),n!==o)if((r=ur())!==o)if((i=Hr())!==o)if((a=ur())!==o){if(s=Un,"on"===e.substr(Un,2).toLowerCase()?(l=e.substr(Un,2),Un+=2):(l=o,0===Kn&&rr(xe)),l!==o&&ur()!==o&&(u=io())!==o?(zn=s,s=l=u):(Un=s,s=o),s===o){if(s=Un,"using"===e.substr(Un,5).toLowerCase()?(l=e.substr(Un,5),Un+=5):(l=o,0===Kn&&rr(Le)),l!==o)if(cr()!==o)if(40===e.charCodeAt(Un)?(u="(",Un++):(u=o,0===Kn&&rr(Q)),u!==o)if(cr()!==o)if((c=br())!==o){for(d=[],h=Un,(f=cr())!==o?(44===e.charCodeAt(Un)?(m=",",Un++):(m=o,0===Kn&&rr(oe)),m!==o&&(p=cr())!==o&&(g=br())!==o?h=f=[f,m,p,g]:(Un=h,h=o)):(Un=h,h=o);h!==o;)d.push(h),h=Un,(f=cr())!==o?(44===e.charCodeAt(Un)?(m=",",Un++):(m=o,0===Kn&&rr(oe)),m!==o&&(p=cr())!==o&&(g=br())!==o?h=f=[f,m,p,g]:(Un=h,h=o)):(Un=h,h=o);d!==o&&(h=cr())!==o?(41===e.charCodeAt(Un)?(f=")",Un++):(f=o,0===Kn&&rr(ee)),f!==o?(zn=s,s=l=function(e,t,n,r){for(var o=[n],i=0;i"===e.substr(Un,2)?(n="<>",Un+=2):(n=o,0===Kn&&rr(Ve));n===o&&("!="===e.substr(Un,2)?(n="!=",Un+=2):(n=o,0===Kn&&rr(qe)));n!==o&&(zn=t,n="!=");return t=n,Xn[r]={nextPos:Un,result:t},t}())===o&&(t=function(){var t,n,r=113*Un+60,i=Xn[r];if(i)return Un=i.nextPos,i.result;t=Un,">="===e.substr(Un,2)?(n=">=",Un+=2):(n=o,0===Kn&&rr(Ge));n!==o&&(zn=t,n=">=");return t=n,Xn[r]={nextPos:Un,result:t},t}())===o&&(t=function(){var t,n,r=113*Un+62,i=Xn[r];if(i)return Un=i.nextPos,i.result;t=Un,"<="===e.substr(Un,2)?(n="<=",Un+=2):(n=o,0===Kn&&rr(Xe));n!==o&&(zn=t,n="<=");return t=n,Xn[r]={nextPos:Un,result:t},t}())===o&&(t=function(){var t,n=113*Un+61,r=Xn[n];if(r)return Un=r.nextPos,r.result;62===e.charCodeAt(Un)?(t=">",Un++):(t=o,0===Kn&&rr(Ke));return Xn[n]={nextPos:Un,result:t},t}())===o&&(t=function(){var t,n=113*Un+63,r=Xn[n];if(r)return Un=r.nextPos,r.result;60===e.charCodeAt(Un)?(t="<",Un++):(t=o,0===Kn&&rr($e));return Xn[n]={nextPos:Un,result:t},t}()),Xn[n]={nextPos:Un,result:t},t)}function qr(){var t,n,r,i,a=113*Un+69,s=Xn[a];if(s)return Un=s.nextPos,s.result;if(t=Un,(n=hr())!==o&&lr()!==o&&(r=hr())!==o?(59===e.charCodeAt(Un)?(i=";",Un++):(i=o,0===Kn&&rr(se)),i===o&&(i=null),i!==o?(zn=t,t=n={type:"comment"}):(Un=t,t=o)):(Un=t,t=o),t===o)if(t=Un,35===e.charCodeAt(Un)?(n="#",Un++):(n=o,0===Kn&&rr(at)),n!==o)if(hr()!==o){for(r=[],st.test(e.charAt(Un))?(i=e.charAt(Un),Un++):(i=o,0===Kn&&rr(lt));i!==o;)r.push(i),st.test(e.charAt(Un))?(i=e.charAt(Un),Un++):(i=o,0===Kn&&rr(lt));r!==o?(10===e.charCodeAt(Un)?(i="\n",Un++):(i=o,0===Kn&&rr(u)),i!==o?(zn=t,t=n={type:"comment"}):(Un=t,t=o)):(Un=t,t=o)}else Un=t,t=o;else Un=t,t=o;return Xn[a]={nextPos:Un,result:t},t}function Gr(){var t,n,r,i,a=113*Un+70,s=Xn[a];return s?(Un=s.nextPos,s.result):(t=Un,96===e.charCodeAt(Un)?(n="`",Un++):(n=o,0===Kn&&rr(ut)),n!==o&&(r=yr())!==o?(96===e.charCodeAt(Un)?(i="`",Un++):(i=o,0===Kn&&rr(ut)),i!==o?(zn=t,t=n=r):(Un=t,t=o)):(Un=t,t=o),t===o&&(t=Un,(n=yr())!==o&&(zn=t,n=n),t=n),Xn[a]={nextPos:Un,result:t},t)}function Kr(){var t,n,r,i,a,s,l,u,c=113*Un+71,d=Xn[c];return d?(Un=d.nextPos,d.result):(t=Un,"drop"===e.substr(Un,4).toLowerCase()?(n=e.substr(Un,4),Un+=4):(n=o,0===Kn&&rr(ct)),n!==o&&dr()!==o?("table"===e.substr(Un,5).toLowerCase()?(r=e.substr(Un,5),Un+=5):(r=o,0===Kn&&rr(dt)),r!==o&&dr()!==o?(i=Un,"if"===e.substr(Un,2).toLowerCase()?(a=e.substr(Un,2),Un+=2):(a=o,0===Kn&&rr(ht)),a!==o&&(s=dr())!==o?("exists"===e.substr(Un,6).toLowerCase()?(l=e.substr(Un,6),Un+=6):(l=o,0===Kn&&rr(it)),l!==o&&(u=dr())!==o?i=a=[a,s,l,u]:(Un=i,i=o)):(Un=i,i=o),i===o&&(i=null),i!==o&&(a=Gr())!==o&&(s=hr())!==o?(59===e.charCodeAt(Un)?(l=";",Un++):(l=o,0===Kn&&rr(se)),l!==o?(zn=t,t=n={type:"dropTable"}):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o),Xn[c]={nextPos:Un,result:t},t)}function Xr(){var t,n,r,i,a,s,l=113*Un+72,u=Xn[l];if(u)return Un=u.nextPos,u.result;if(t=Un,"lock"===e.substr(Un,4).toLowerCase()?(n=e.substr(Un,4),Un+=4):(n=o,0===Kn&&rr(ft)),n!==o)if(dr()!==o)if("tables"===e.substr(Un,6).toLowerCase()?(r=e.substr(Un,6),Un+=6):(r=o,0===Kn&&rr(mt)),r!==o)if(dr()!==o)if(Gr()!==o)if(dr()!==o){if(i=[],F.test(e.charAt(Un))?(a=e.charAt(Un),Un++):(a=o,0===Kn&&rr(W)),a!==o)for(;a!==o;)i.push(a),F.test(e.charAt(Un))?(a=e.charAt(Un),Un++):(a=o,0===Kn&&rr(W));else i=o;i!==o&&(a=hr())!==o?(59===e.charCodeAt(Un)?(s=";",Un++):(s=o,0===Kn&&rr(se)),s!==o?(zn=t,t=n={type:"lockTable"}):(Un=t,t=o)):(Un=t,t=o)}else Un=t,t=o;else Un=t,t=o;else Un=t,t=o;else Un=t,t=o;else Un=t,t=o;else Un=t,t=o;return Xn[l]={nextPos:Un,result:t},t}function $r(){var t,n,r,i,a=113*Un+73,s=Xn[a];return s?(Un=s.nextPos,s.result):(t=Un,"unlock"===e.substr(Un,6).toLowerCase()?(n=e.substr(Un,6),Un+=6):(n=o,0===Kn&&rr(pt)),n!==o&&dr()!==o?("tables"===e.substr(Un,6).toLowerCase()?(r=e.substr(Un,6),Un+=6):(r=o,0===Kn&&rr(mt)),r!==o&&hr()!==o?(59===e.charCodeAt(Un)?(i=";",Un++):(i=o,0===Kn&&rr(se)),i!==o?(zn=t,t=n={type:"unlockTable"}):(Un=t,t=o)):(Un=t,t=o)):(Un=t,t=o),Xn[a]={nextPos:Un,result:t},t)}function Jr(){var e,t,n,r,i,a=113*Un+74,s=Xn[a];if(s)return Un=s.nextPos,s.result;if(e=Un,hr()!==o){if(t=[],n=Un,(r=Qr())===o&&(r=Xr())===o&&(r=$r())===o&&(r=qr())===o&&(r=Kr())===o&&(r=to())===o&&(r=oo()),r!==o&&(i=hr())!==o?n=r=[r,i]:(Un=n,n=o),n!==o)for(;n!==o;)t.push(n),n=Un,(r=Qr())===o&&(r=Xr())===o&&(r=$r())===o&&(r=qr())===o&&(r=Kr())===o&&(r=to())===o&&(r=oo()),r!==o&&(i=hr())!==o?n=r=[r,i]:(Un=n,n=o);else t=o;t!==o&&(n=hr())!==o?(zn=e,e=function(e){var t,n,r,o,i,a,s={},l={},u="";for(n=0;n!0===n.evaluate(e,t,r,o),this._checkSchema(e,t)}_getResult(e,t){if(e=this._returnOrCreateSession(e),null===this._joinConditionEvaluator)throw new Error("check not called");const n=new c.a;return n.setSchema(this.getSchema()),p.calcNestedLoopJoin(e,this.getChild(),this.getChild2(),n,this._isRightJoin,this._isAntiJoin,this._joinConditionEvaluator,this._rowCreatorMatched,this._rowCreatorNotMatched),!0===t&&n.eliminateDuplicateRows(),this.setResultNumRows(n.getNumRows()),n}static createNullArray(e){return new Array(e).fill(null)}static getCheckedEvaluatorBooleanExpression(e,t,n,r){if(n.check(e,t),"boolean"!==n.getDataType())throw new m.a("db.messages.exec.error-condition-must-be-boolean",r);return function(e,t,r,o){return!0===n.evaluate(e,t,r,o)}}static getCheckedEvaluatorNaturalJoin(e,t,n,r){}static calcNestedLoopJoin(e,t,n,r,o,i,a,s,l){const u=t.getResult(e),c=n.getResult(e),d=u.getNumRows(),h=c.getNumRows(),f=u.getNumCols();c.getNumCols();if(!1===o){let t;null!==l&&(t=p.createNullArray(r.getSchema().getSize()-f));const n={};for(let o=0;o0&&this.throwExecutionError(s.a("db.messages.exec.error-join-would-produce-non-unique-columns",{conflicts:n.join(", ")})),this._schema=h.a.concat(this._child.getSchema(),this._child2.getSchema()),this._rowCreatorMatched=function(e,t){return e.concat(t)},this._rowCreatorNotMatched=null}catch(e){this.throwExecutionError(e.message)}}getResult(e){return super._getResult(e,!0)}getArgumentHtml(){return""}}class y extends u.c{constructor(e,t){super("π",e),this._checked=null,this._columns=t}getSchema(){if(null===this._columns)return this._child.getSchema();if(null===this._checked)throw new Error("check has not been called");return this._checked._projectedSchema}getResult(e){if(e=this._returnOrCreateSession(e),null===this._checked)throw new Error("check has not been called");const{_indices:t}=this._checked;if(null===this._columns)return this._child.getResult(e);const n=this._child.getResult(e),r=new c.a;r.setSchema(this.getSchema());const o=r.getNumCols(),i=n.getNumRows();let a,s,l,u;for(a=0;a-1&&o.removeColumn(n)}o.getSize()===n&&this.throwExecutionError(i18n.t("db.messages.exec.error-schema-a-not-part-of-schema-b",{schemaA:t,schemaB:e})),this._delegate=new d(new y(this._child,o.getColumns()).setCodeInfoObject(this._codeInfo),new y(new d(new g(new y(this._child,o.getColumns()).setCodeInfoObject(this._codeInfo),this._child2).setCodeInfoObject(this._codeInfo),this._child).setCodeInfoObject(this._codeInfo),o.getColumns()).setCodeInfoObject(this._codeInfo)),this._delegate.check()}}class v extends u.c{constructor(e,t,n){super("γ",e),this.checked=null,this.groupByCols=t,this.aggregateFunctions=n}getSchema(){if(null===this.checked)throw new Error("check not called");return this.checked.schema}check(){this._child.check();const e=this._child.getSchema(),t=new Array(this.groupByCols.length),n=Array(this.aggregateFunctions.length);for(let n=0;nl.a.printColumn(e.name,e.relAlias)),t=this.aggregateFunctions.map(e=>`${"COUNT_ALL"===e.aggFunction?"COUNT(*)":`${e.aggFunction}(${l.a.printColumn(e.col.name,e.col.relAlias)})`}→${e.name}`);return`${e.join(", ")}; ${t.join(", ")}`}getResult(e){if(e=this._returnOrCreateSession(e),null===this.checked)throw new Error("check not called");const t=this.getChild().getResult(e),n=new c.a;n.setSchema(this.checked.schema);let r,o=0;if(this.groupByCols.length>0){const e={};for(let n=0;nt?e:t};let s,l,u,d;for(let e=0;e0&&this.throwExecutionError(s.a("db.messages.exec.error-join-would-produce-non-unique-columns",{conflicts:n.join(", ")})),this._schema=h.a.concat(this._child.getSchema(),this._child2.getSchema()),this._rowCreatorMatched=function(e,t){return e.concat(t)},this._rowCreatorNotMatched=function(e,t){return e.concat(t)}}catch(e){this.throwExecutionError(e.message)}}getResult(e){if(e=this._returnOrCreateSession(e),null===this._joinConditionEvaluator||null===this._rowCreatorMatched||null===this._rowCreatorNotMatched)throw new Error("check not called");const t=new c.a;return t.setSchema(this.getSchema()),p.calcNestedLoopJoin(e,this.getChild(),this.getChild2(),t,!1,!1,this._joinConditionEvaluator,this._rowCreatorMatched,this._rowCreatorNotMatched),p.calcNestedLoopJoin(e,this.getChild(),this.getChild2(),t,!0,!1,this._joinConditionEvaluator,this._rowCreatorMatched,this._rowCreatorNotMatched),t.eliminateDuplicateRows(),this.setResultNumRows(t.getNumRows()),t}}class j extends p{constructor(e,t,n){super(e,t,"⨝",n,!1)}_checkSchema(e,t){try{if("natural"===this._joinConditionOptions.type){const n=h.a.concatNatural(e,t,!0,this._joinConditionOptions.restrictToColumns),r=n.keep;this._schema=n.schema,this._rowCreatorMatched=function(e,t){return p.createNaturalRowArray(e,t,r.size,r.keepIndicesA,r.keepIndicesB)}}else{const n=e.getConflictingColumnsArray(t);n.length>0&&this.throwExecutionError(s.a("db.messages.exec.error-join-would-produce-non-unique-columns",{conflicts:n.join(", ")})),this._schema=h.a.concat(this._child.getSchema(),this._child2.getSchema()),this._rowCreatorMatched=function(e,t){return e.concat(t)}}this._rowCreatorNotMatched=null}catch(e){this.throwExecutionError(e.message)}}getResult(e){return super._getResult(e,!0)}}class C extends p{constructor(e,t,n){super(e,t,"⟕",n,!1)}_checkSchema(e,t){try{if("natural"===this._joinConditionOptions.type){const n=h.a.concatNatural(e,t,!0,this._joinConditionOptions.restrictToColumns),r=n.keep;this._schema=n.schema,this._rowCreatorMatched=function(e,t){return p.createNaturalRowArray(e,t,r.size,r.keepIndicesA,r.keepIndicesB)}}else{const n=e.getConflictingColumnsArray(t);n.length>0&&this.throwExecutionError(s.a("db.messages.exec.error-join-would-produce-non-unique-columns",{conflicts:n.join(", ")})),this._schema=h.a.concat(this._child.getSchema(),this._child2.getSchema()),this._rowCreatorMatched=function(e,t){return e.concat(t)}}this._rowCreatorNotMatched=function(e,t){return e.concat(t)}}catch(e){this.throwExecutionError(e.message)}}getResult(e){return super._getResult(e,!0)}}class S extends p{constructor(e,t,n){super(e,t,"⟖",n,!0)}_checkSchema(e,t){try{if("natural"===this._joinConditionOptions.type){const n=h.a.concatNatural(e,t,!1,this._joinConditionOptions.restrictToColumns),r=n.keep;this._schema=n.schema,this._rowCreatorMatched=function(e,t){return p.createNaturalRowArray(e,t,r.size,r.keepIndicesA,r.keepIndicesB)}}else{const n=e.getConflictingColumnsArray(t);n.length>0&&this.throwExecutionError(s.a("db.messages.exec.error-join-would-produce-non-unique-columns",{conflicts:n.join(", ")})),this._schema=h.a.concat(this._child.getSchema(),this._child2.getSchema()),this._rowCreatorMatched=function(e,t){return e.concat(t)}}this._rowCreatorNotMatched=function(e,t){return e.concat(t)}}catch(e){this.throwExecutionError(e.message)}}getResult(e){return super._getResult(e,!0)}}class O extends p{constructor(e,t,n){super(e,t,n?"⋉":"⋊",{type:"natural",restrictToColumns:null},!n)}_checkSchema(e,t){this._isRightJoin?(this._schema=t.copy(),this._rowCreatorMatched=function(e,t){return t}):(this._schema=e.copy(),this._rowCreatorMatched=function(e,t){return e}),this._rowCreatorNotMatched=null}getResult(e){return super._getResult(e,!0)}}class k extends u.c{constructor(e,t,n){if(super("τ",e),this._orderCols=t,this._orderAsc=n,this._orderAsc.length!==this._orderCols.length)throw new Error("order cols not correct");this._orderIndices=null}getSchema(){return this._child.getSchema()}getResult(e){if(e=this._returnOrCreateSession(e),null===this._orderIndices)throw new Error("check not called");const t=this.getChild().getResult(e).copy();return t.eliminateDuplicateRows(),this.setResultNumRows(t.getNumRows()),t.sort(this._orderIndices,this._orderAsc),t}check(){this._child.check();const e=this._child.getSchema();this._orderIndices=[];for(let t=0;t0){const n=[],r=e.groupBy||[];for(let e=0;e0)a=new v(a,r,n);else{const e=[];for(let t=0;t",[new f.c("number","rownum",[]),new f.c("number","constant",[o])]);if(-1===n)a=new L(r(t.child),i);else{const e=new f.c("boolean","<=",[new f.c("number","rownum",[]),new f.c("number","constant",[n+o])]);a=new L(r(t.child),new f.c("boolean","and",[i,e]))}break}default:throw new Error(`type ${e.type} not implemented`)}if(!a)throw new Error("should not happen");return!0===e.wrappedInParentheses&&a.setWrappedInParentheses(!0),n(a,e),a}function o(e,t,n){e.check();const r=new L(e,N(t));return r.setCodeInfoObject(n),r}function i(e){return"column"===e.type&&e.alias}return r(e.child)}function N(e){let t;if("null"===e.datatype&&"columnValue"===e.func)t=new f.b(e.args[0],e.args[1]);else switch(e.datatype){case"string":case"number":case"boolean":case"date":case"null":const n=[];for(let t=0;t{"relation"!==e.type||void 0!==t&&!1!==t.has(e.name)||n.push({name:e.name,line:e.codeInfo.location.start.line,column:e.codeInfo.location.start.column})}),n}function B(e,t){const n=Y.a.isMap(t)?t:Y.a().withMutations(e=>{for(const n of Object.keys(t))e.set(n,t[n])}).asImmutable();if(0===e.assignments.length)return;const r=new Map;Y.c().withMutations(t=>{for(let n=0;n{if(!0===i.get(e))return;if(!0===o.get(e))throw new Error(s.a("db.messages.translate.error-variable-cyclic-usage",{name:e}));o.set(e,!0);const t=r.get(e);if(void 0!==t){const{childRelations:e}=t;for(let t=0;t{if("relation"===e.type&&e.name===t.name){return Object.assign(Object.assign({},t.child),{metaData:Object.assign(Object.assign({},t.child.metaData),{fromVariable:t.name})})}return e});e=Object.assign(Object.assign({},e),{child:n})}r.set(e.name,e)}for(const[,t]of r)e.assignments[t.assignmentIndex].child=t.child;if(("relalgRoot"===e.type||"sqlRoot"===e.type)&&null!==e.child&&void 0!==e.child)for(const[t,n]of r)e.child=Object(F.b)(e.child,e=>"relation"===e.type&&e.name===t?Object.assign(Object.assign({},n.child),{metaData:Object.assign(Object.assign({},n.child.metaData),{fromVariable:t})}):e)}var U=n("./src/db/translate/textFromAst.ts");function z(e,t,n,r){if("none"===r)return{query:e,cursor:n};const o={math2plain:{pi:"pi",sigma:"sigma",rho:"rho",arrowLeft:"<-",arrowRight:"->",psi:"psi",tau:"tau",gamma:"gamma",unionOperator:"union",intersectOperator:"intersect",divisionOperator:"/",differenceOperator:"-",crossJoinOperator:"cross join",innerJoinOperator:"inner join",naturalJoinOperator:"natural join",leftSemiJoinOperator:"left semi join",rightSemiJoinOperator:"right semi join",antiJoinOperator:"anti join",leftOuterJoinOperator:"left outer join",rightOuterJoinOperator:"right outer join",fullOuterJoinOperator:"full outer join"},plain2math:{pi:"π",sigma:"σ",rho:"ρ",arrowLeft:"←",arrowRight:"→",psi:"ψ",tau:"τ",gamma:"γ",unionOperator:"∪",intersectOperator:"∩",divisionOperator:"÷",differenceOperator:"-",crossJoinOperator:"⨯",innerJoinOperator:"⨝",naturalJoinOperator:"⨝",leftSemiJoinOperator:"⋉",rightSemiJoinOperator:"⋊",antiJoinOperator:"▷",leftOuterJoinOperator:"⟕",rightOuterJoinOperator:"⟖",fullOuterJoinOperator:"⟗"}};for(let i=t.length-1;i>=0;i--){const a=t[i],s=a.location,l=e.substr(0,s.start.offset),u=e.substring(s.end.offset),c=o[r][a.name];if(e.substring(s.start.offset,s.end.offset)!==c){if(n)if(n.line>=s.start.line&&n.line<=s.end.line){if(n.column>s.start.column&&n.column=s.end.column){n.line-=s.end.line-s.start.line;const e=a.location.end.offset-a.location.start.offset,t=c.length;n.column-=e-t}}else n.lines.end.line&&(n.line-=s.end.line-s.start.line);e=l+c+u}}return{query:e,cursor:n}}const V=n("./src/db/parser/grammar_sql.pegjs");function q(e){return V.parse(e,{startRule:"start",tracer:void 0,i18n:r.c})}function G(e){return V.parse(e,{startRule:"dbDumpStart",tracer:void 0})}function K(e,t={}){t=t||{};const n=i(e,Object.keys(t));B(n,t);const r=I(n,t);return r.check(),r}},"./src/db/translate/textFromAst.ts":function(e,t,n){"use strict";(function(e){function r(e){if("groupRoot"!==e.type)throw new Error("wrong ast!?");let t="";function n(e){let t="";const{headers:n}=e;for(const e of n){const{name:n,lang:r,text:o}=e;t+=n,null!==r&&(t+="@"+r),t+=":",-1!==e.text.indexOf("\n")?t+=`[[${e.text}]]\n`:t+=e.text+"\n"}t+="\n";for(let n=0;n");if(null!==t&&i.addClass(t),null!==n&&i.append(n),null!==r){const t=e("");t.append(r),i.append(" ").append(t)}return null!==o&&i.append(" ( ").append(o).append(" ) "),i.text()}function r(t,n,r,o,i){const a=e("");if(null!==t&&a.addClass(t),a.append("( ").append(o).append(" ) "),a.append(n),null!==r){const t=e("");t.append(r),a.append(t)}return a.append(" ( ").append(i).append(" ) "),a.text()}function o(e,t){return"number"==typeof e&&(e=`[${e}]`),null===t?e:`${t}.${e}`}function i(e,t){if(null===e||"null"===t)return"null";if(e instanceof Date)return function(e){const t=e.getMonth()+1<10?"0"+(e.getMonth()+1):e.getMonth()+1,n=e.getDate()<10?"0"+e.getDate():e.getDate();return`${e.getFullYear()}-${t}-${n}`}(e);if("string"==typeof e)return`'${e}'`;if("number"==typeof e)return e.toString();throw new Error("unknown type "+t)}return function e(t){switch(t.type){case"relation":return n(t.type,t.name,null,null);case"table":{const e=[];let n=[];for(let e=0;er[n])&&(r[n]=o)}let o="{\n";for(let i=0;i0){for(let e=0;e{const o=r(e.child,t);return o!==e.child?(n=!0,Object.assign(Object.assign({},e),{child:o})):e});n&&(e=Object.assign({},e,{assignments:o}))}else if("sqlRoot"===e.type){let n=!1;const o=e.assignments.map(e=>{const o=r(e.child,t);return o!==e.child?(n=!0,Object.assign(Object.assign({},e),{child:o})):e});n&&(e=Object.assign({},e,{assignments:o}))}return t(e)}function o(e,t,n=!0){if(t(e),"statement"===e.type?o(e.from,t,n):"relationFromSubstatement"===e.type&&o(e.statement,t,n),void 0!==e.child&&o(e.child,t,n),void 0!==e.child2&&o(e.child2,t,n),void 0!==e.assignments&&!0===n)for(const r of e.assignments)o(r,t,n)}n.d(t,"b",(function(){return r})),n.d(t,"a",(function(){return o}))},"./src/locales/de.json":function(e){e.exports=JSON.parse('{"db.messages.parser.error-duplicate-variable":"Variablenname wurde mehrfach definiert: {{name}}","db.messages.parser.error-invalid-date-format":"\\"{{str}}\\" ist kein gültiges Datum; erwartetes Format: YYYY-MM-DD","db.messages.parser.error-group-duplicate-header":"mehrfacher header {{name}}","db.messages.parser.error-group-unknown-header":"unbekannter header {{name}}","db.messages.parser.error-group-header-name-missing":"der Name des Datensatzes fehlt (group: ....)","db.messages.parser.error-group-header-name-empty":"der Name des Datensatzes ist leer","db.messages.parser.error-group-non-unique-attribute":"nicht eindeutiges Attribut {{name}} in Spalte {{index}}","db.messages.parser.error-group-non-unique-group-name":"Der Name der Gruppe {{name}} ist nicht eindeutig.","db.messages.parser.error-sql-string-use-single-quotes":"verwenden Sie einfache Anführungszeichen für Zeichenketten","db.messages.parser.error-sql-invalid-relation-name":"\\"{{str}}\\" darf nicht als name einer Relation verwendet werden","db.messages.parser.error-sql-invalid-column-name":"\\"{{str}}\\" darf nicht als name einer Spalte verwendet werden","db.messages.parser.error-sql-group-by-missing":"group-by-Klausel fehlt","db.messages.parser.error-sql-having-without-group-by":"having-Klausel gefunden doch \\"group by\\" or Aggregation fehlt","db.messages.parser.error-sql-negative-limit":"das Limit muss größer oder gleich 0 sein","db.messages.parser.error-sqldump-invalid-column-number":"ungültige Spaltenanzahl in Zeile {{line}}","db.messages.parser.error-sqldump-invalid-type":"ungültiger Typ in Zeile {{line}}","db.messages.parser.error-sqldump-insert-wrong-number-columns":"Anzahl der Werte != Anzahl der Spalten","db.messages.parser.error-valueexpr-like-operand-no-string":"der rechte Operand von LIKE muss ein Zeichenkettenliteral sein","db.messages.exec.error-column-not-unique":"Spalte \\"{{column}}\\" kann wegen mehrdeutigkeit nicht hinzugefügt werden","db.messages.exec.error-column-not-found-name":"Spalte \\"{{column}} wurde im Schema {{schema}} nicht gefunden","db.messages.exec.error-column-not-found-index":"Spaltenindex \\"{{column}}\\" ist ausserhalb des Gültigkeitsbereichs für Schema {{schema}}; Indizes starten mit 1","db.messages.exec.error-column-ambiguous":"Spalte \\"{{column}}\\" ist mehrdeutig im Schema {{schema}}","db.messages.exec.error-column-index-out-of-range":"Spaltenindex \\"{{column}}\\" ist ausserhalb des Gültigkeitsbereichs für Schema {{schema}}; Indizes starten mit 1","db.messages.exec.error-could-not-change-rel-alias-ambiguity":"Relations alias \\"{{alias}}\\" kann wegen Mehrdeutigkeit nicht gesetzt werden","db.messages.exec.error-could-not-rename-ambiguity":"neuer Name \\"{{newName}}\\" für \\"{{oldName}}\\" kann wegen Mehrdeutigkeit nicht gesetzt werden im Schema {{schema}}","db.messages.exec.error-schema-a-not-part-of-schema-b":"Schema {{schemaA}} ist nicht Teil von {{schemaB}}","db.messages.exec.error-schemas-not-unifiable":"Schemas sind nicht unifiable: Typen oder Anzahl der Attribute ist unterschiedlich: {{schemaA}} and {{schemaB}}","db.messages.exec.error-column-not-in-both-schemas":"Spalte \\"{{column}}\\" kann nicht in beiden Schemas des Joins gefunden werden","db.messages.exec.error-condition-must-be-boolean":"Bedingung muss ein boolscher Ausdruck sein","db.messages.exec.error-func-not-defined-for-column-type":"{{func}} ist nicht für Datentyp {{colType}} definiert","db.messages.exec.error-join-would-produce-non-unique-columns":" the following columns appear in both relations: {{conflicts}}","db.messages.exec.error-no-columns-match-alias-star":"Keine Spalten gefunden für \\"{{alias}}.*\\"","db.messages.exec.error-datatype-not-specified-for-col":"Datentype für Spalte {{index}} (\\"{{column}}\\") wurde nicht spezifiziert","db.messages.exec.error-invalid-projection-error":"ungültige Projektion \\"{{argument}}\\": {{error}}","db.messages.exec.error-function-expects-type":"Funktion \\"{{func}}\\" erwartet Argumente vom Typ \\"{{expected}}\\" aber \\"{{given}}\\" gefunden","db.messages.exec.error-could-not-compare-different-types":"Werte mit unterschiedlichen Datentypen können nicht verglichen werden: {{typeA}} != {{typeB}}","db.messages.exec.error-function-expects-arguments-of-same-type":"Funktion {{func}} erwartet, dass alle Argumente den selben Datentyp haben.","db.messages.exec.error-case-when-condition-must-be-boolean":"Die Bedingung für ein CASE WHEN muss ein boolscher Ausdruck sein","db.messages.exec.error-case-when-expects-results-of-same-type":"CASE WHEN condition THEN result END erwartet dass alle results vom selben Typ sind","db.messages.exec.error-invalid-date-format":"\\"{{str}}\\" ist kein gültiges Datum; erwartetes Format: YYYY-MM-DD","db.messages.translate.error-relation-not-found":"Relation \\"{{name}}\\" nicht gefunden","db.messages.translate.warning-distinct-missing":" relational algebra uses implicit duplicate elimination","db.messages.translate.warning-ignored-all-on-set-operators":" relational algebra uses implicit duplicate elimination","db.messages.translate.error-variable-name-conflict":"Namenskonflikt: eine Relation mit Namen \\"{{name}}\\" existiert bereits","db.messages.translate.error-variable-cyclic-usage":"Zyklische Verwendung von Variable \\"{{name}}\\" erkannt","editor.codemirror-placeholder":"Abfrage ...\\nTastatürkürzel\\n\\tAbfrage ausführen: [CTRL]+[RETURN]\\n\\tMarkierten teil der Abfrage ausführen: [CTRL]+[SHIFT]+[RETURN]\\tAutovervollständigung: [CTRL]+[SPACE]","editor.alert-message-headers.success":"Erfolg","editor.alert-message-headers.info":"Info","editor.alert-message-headers.warning":"Warnung","editor.alert-message-headers.error":"Fehler","editor.inline-relation-editor.button-ok":"ok","editor.inline-relation-editor.button-cancel":"abbrechen","editor.inline-relation-editor.placeholder-column-name-and-types":"spaltenName:datenTyp","editor.inline-relation-editor.enter-your-data":"bitte Daten eingeben","editor.inline-relation-editor.error-column-name-missing":"Spaltenname fehlt in Spalte {{index}}","editor.inline-relation-editor.error-wrong-quoted-string":"Zeichenketten dürfen keine doppelten oder einfache Anführungszeichen enthalten","editor.error-no-query-found":"keine Abfrage gefunden","editor.pegjs-error.or":"oder","editor.pegjs-error.no-input-found":"keine Eingabe gefunden","editor.pegjs-error.end-of-input":"Ende der Eingabe","editor.pegjs-error.expected-found":"Erwarte {{expected}} aber {{found}} gefunden.","editor.error-at-line-x":"in Zeile {{line}}","calc.messages.error-query-missing":"keine Abfrage gefunden","calc.messages.error-query-missing-assignments-found":"nur Zuweisungen gefunden; die eigentliche Abfrage fehlt Help - Assignments (en)","calc.messages.gist-load-success":"gist erfolgreich geladen","calc.menu.headline":"Datensätze","calc.menu.datasets":"Datensätze","calc.menu.load-gist-headline":"Datensatz aus gist laden","calc.menu.load-gist-button":"laden","calc.menu.load-gist-insert-placeholder":"gist ID","calc.menu.create-own-dataset-headline":"Eigenen Datensatz erstellen","calc.menu.create-own-dataset-text":"Sie können Ihren eigenen Datensatz erstellen und ihn mit anderen teilen. Lernen Sie mehr darüber im Maintainer Tutorial","calc.menu.create-own-dataset-text-link":"Maintainer Tutorial (en)","calc.menu.create-own-dataset-button-new":"neuen Datensatz erstellen","calc.menu.create-own-dataset-button-modify":"aktuellen Datensatz abändern","calc.navigation.take-a-tour":"Tour starten","calc.navigation.feedback":"Feedback","calc.navigation.help":"Hilfe (en)","calc.navigation.calc":"Rechner","calc.navigation.language":"Sprache","calc.maintainer-groups.misc":"Diverse","calc.maintainer-groups.temp":"Ungespeichert","calc.maintainer-groups.uibk":"Universität Innsbruck","calc.maintainer-groups.saarland":"Universität Saarland","calc.editors.button-history":"Verlauf","calc.editors.insert-relation-title":"Einfügen","calc.editors.insert-relation-tooltip":"Beziehungs- oder Spaltennamen einfügen","calc.editors.group.tab-name":"Datensatz Editor","calc.editors.group.tab-name-short":"DS","calc.editors.group.toolbar.import-sql":"SQL-dump importieren","calc.editors.group.toolbar.import-sql-content":"SQL-dump importieren","calc.editors.group.toolbar.add-new-relation":"neue Relation hinzufügen","calc.editors.group.toolbar.add-new-relation-content":"Relationseditor öffnen","calc.editors.group.button-download":"download","calc.editors.group.button-exec":"Vorschau","calc.editors.group.button-use":"Datensatz im Editor verwenden","calc.editors.group.button-use_plural":"Datensatz im Editor verwenden","calc.editors.group.sql-import-group-name-placeholder":"Name des Datensatzes (importiert)","calc.editors.group.new-group-example-group":"-- dies ist ein Beispiel\\n\\ngroup: nameDesDatensatzes \\n\\n\\nA = {\\n\\ta:string, b:number\\n\\tbeispiel, 42\\n}","calc.editors.group.modal-sqldump.modal-title":"SQL-Dump importieren","calc.editors.group.modal-sqldump.button-close":"schließen","calc.editors.group.modal-sqldump.button-cancel":"abbrechen","calc.editors.group.modal-sqldump.button-import-sql":"importieren","calc.editors.group.modal-sqldump.description":"Kopieren Sie den SQL-Dump hier her um einen Datensatz daraus zu erstellen.","calc.editors.ra.tab-name":"Relationale Algebra","calc.editors.ra.tab-name-short":"RelAlg","calc.editors.ra.button-execute-query":"Query ausführen","calc.editors.ra.button-execute-selection":"Markierung ausführen","calc.editors.ra.button-download":"download","calc.editors.ra.toolbar.projection":"Projektion","calc.editors.ra.toolbar.projection-content":"π a, b ( A )\\n
              pi a, b A","calc.editors.ra.toolbar.selection":"Selektion","calc.editors.ra.toolbar.selection-content":"σ a < b ∧ b c ( A )\\n
              sigma a < b and b != c A","calc.editors.ra.toolbar.rename":"Umbenennen (Relationen/Spalten)","calc.editors.ra.toolbar.rename-content":"
              σ x.a > 1 ( ρ x ( A ) )
              \\n
              σ A.y > 2 ( rho ya ( A ) )
              ","calc.editors.ra.toolbar.rename-columns-operator":"Umbenennung von Spalten","calc.editors.ra.toolbar.rename-columns-operator-content":"
              σ A.y > 2 ( ρ ya ( A ) )
              ","calc.editors.ra.toolbar.orderBy":"Sortieren","calc.editors.ra.toolbar.orderBy-content":"","calc.editors.ra.toolbar.groupBy":"Gruppieren","calc.editors.ra.toolbar.groupBy-content":"
              γ a, b; count(c)→c ( A )
              \\n
              gamma count(a)->x, sum(b)->y ( A )
              ","calc.editors.ra.toolbar.and":"Und","calc.editors.ra.toolbar.and-content":"
              σ a < b b c ( A )
              ","calc.editors.ra.toolbar.xor":"Xor","calc.editors.ra.toolbar.xor-content":"
              σ a < b b c ( A )
              ","calc.editors.ra.toolbar.or":"Oder","calc.editors.ra.toolbar.or-content":"
              σ a < b b c ( A )
              ","calc.editors.ra.toolbar.not":"Verneinung","calc.editors.ra.toolbar.not-content":" ¬(a < b) ( A )
              ","calc.editors.ra.toolbar.equals":"Gleich","calc.editors.ra.toolbar.equals-content":" a = b ( A )
              ","calc.editors.ra.toolbar.not-equals":"Ungleich","calc.editors.ra.toolbar.not-equals-content":" a \'text\' ( A )
              ","calc.editors.ra.toolbar.greater-or-equals":"Größer-Gleich","calc.editors.ra.toolbar.greater-or-equals-content":" a 42 ( A )
              ","calc.editors.ra.toolbar.lesser-or-equals":"Kleiner-Gleich","calc.editors.ra.toolbar.lesser-or-equals-content":" a 42 ( A )
              ","calc.editors.ra.toolbar.intersect":"Schnittmenge","calc.editors.ra.toolbar.intersect-content":"
              ( A ) ( B )
              ","calc.editors.ra.toolbar.union":"Vereinigung","calc.editors.ra.toolbar.union-content":"
              ( A ) ( B )
              ","calc.editors.ra.toolbar.division":"Division (Relationen)","calc.editors.ra.toolbar.division-content":"
              ( A ) ÷ ( B )
              ","calc.editors.ra.toolbar.subtraction":"Mengendifferenz","calc.editors.ra.toolbar.subtraction-content":"
              ( A ) - ( B )
              \\n
              ( A ) \\n ( B )
              ","calc.editors.ra.toolbar.cross-join":"cross join (Kreuzprodukt)","calc.editors.ra.toolbar.cross-join-content":"
              ( A ) ( B )
              ","calc.editors.ra.toolbar.natural-join":"natural join / θ-join","calc.editors.ra.toolbar.natural-join-content":"
              ( A ) ( B )
              \\n
              ( A ) ⋈ A.a ≥ B.a ( B )
              ","calc.editors.ra.toolbar.left-outer-join":"left outer join","calc.editors.ra.toolbar.left-outer-join-content":"
              ( A ) ⟕ ( B )
              \\n
              ( A ) ⟕ A.a < B.a ( B )
              \\n","calc.editors.ra.toolbar.right-outer-join":"right outer join","calc.editors.ra.toolbar.right-outer-join-content":"
              ( A ) ⟖ ( B )
              \\n
              ( A ) ⟖ A.a < B.a ( B )
              \\n","calc.editors.ra.toolbar.full-outer-join":"full outer join","calc.editors.ra.toolbar.full-outer-join-content":"
              ( A ) ⟗ ( B )
              \\n
              ( A ) ⟗ A.a != B.a ( B )
              ","calc.editors.ra.toolbar.left-semi-join":"left semi join","calc.editors.ra.toolbar.left-semi-join-content":"
              ( A ) ⋉ ( B )
              ","calc.editors.ra.toolbar.right-semi-join":"right semi join","calc.editors.ra.toolbar.right-semi-join-content":"
              ( A ) ⋊ ( B )
              ","calc.editors.ra.toolbar.anti-join":"anti join","calc.editors.ra.toolbar.anti-join-content":"
              ( A ) ▷ ( B )
              ","calc.editors.ra.toolbar.assignment":"Zuweisung","calc.editors.ra.toolbar.assignment-content":"
              X = pi a ( A )\\n
              Y = pi b ( b )\\n
              ( X ) ( Y )
              ","calc.editors.ra.toolbar.single-line-comment":"Kommentar einzeilig","calc.editors.ra.toolbar.single-line-comment-content":"π a, b A -- useful comment","calc.editors.ra.toolbar.multi-line-comment":"Kommentar mehrzeilig","calc.editors.ra.toolbar.multi-line-comment-content":"/* this is a very,
              very long comment */

              π a, b A","calc.editors.ra.toolbar.inline-relation":"inline-Relation","calc.editors.ra.toolbar.inline-relation-content":"σ a = \'test\' ({
              a:string, b:number, X.c:date
              a, 1, 1970-01-01
              }
              )","calc.editors.ra.toolbar.inline-relation-editor":"inline-Relation (Editor)","calc.editors.ra.toolbar.inline-relation-editor-content":"eine neue inline-Relation mit dem Editor erstellen","calc.editors.ra.toolbar.insert-date":"Datum einfügen","calc.editors.ra.toolbar.insert-date-content":"σ a < date(\'1970-01-01\') ( A )","calc.editors.ra.toolbar.autoreplace-operators.title":"Operatoren ersetzen","calc.editors.ra.toolbar.autoreplace-operators.header":"Operatoren automatisch ersetzen","calc.editors.ra.toolbar.autoreplace-operators.none":"keine Ersetzung","calc.editors.ra.toolbar.autoreplace-operators.plain2math":"pi => π","calc.editors.ra.toolbar.autoreplace-operators.math2plain":"π => pi","calc.editors.sql.tab-name":"SQL","calc.editors.sql.tab-name-short":"SQL","calc.editors.sql.button-execute-query":"Query ausführen","calc.editors.sql.button-execute-selection":"Markierung ausführen","calc.editors.sql.button-download":"download","calc.editors.sql.toolbar.select":"select-Klausel","calc.editors.sql.toolbar.select-content":"

              SELECT * FROM A

              SELECT a, A.b, A.c FROM A
              ","calc.editors.sql.toolbar.from":"from-Klausel","calc.editors.sql.toolbar.from-content":"
              SELECT *
              FROM A, B as b
              INNER JOIN C NATURAL
              ","calc.editors.sql.toolbar.where":"where-Klausel","calc.editors.sql.toolbar.where-content":"SELECT * FROM A, B
              where A.a = B.a or false","calc.editors.sql.toolbar.group-by":"group-b-Klausel","calc.editors.sql.toolbar.group-by-content":"SELECT a, COUNT(b) as num
              FROM A
              GROUP BY a","calc.editors.sql.toolbar.having":"having-Klausel","calc.editors.sql.toolbar.having-content":"SELECT a, SUM(b) as sum
              FROM A
              GROUP BY a
              having sum > 10","calc.editors.sql.toolbar.order-by":"order-by-Klausel","calc.editors.sql.toolbar.order-by-content":"

              SELECT * FROM A ORDER BY a asc, b desc

              SELECT * FROM A ORDER BY 1, 2, 3
              ","calc.editors.sql.toolbar.limit":"limit-Klausel","calc.editors.sql.toolbar.limit-content":"SELECT * FROM A
              LIMIT 10 OFFSET 0","calc.editors.sql.toolbar.insert-date":"Datum einfügen","calc.editors.sql.toolbar.insert-date-content":"select * from A\\nwhere a < date(\\"1970-01-01\\")","calc.result.modal.title":"Ergebnis","calc.result.modal.close":"Schließen","calc.editors.ra.inline-editor.title":"Relation Editor","calc.editors.ra.inline-editor.button-download-csv":"CSV downloaden","calc.editors.ra.inline-editor.button-upload-csv":"CSV uploaden","calc.editors.ra.inline-editor.button-cancel":"Abbrechen","calc.editors.ra.inline-editor.button-ok":"Ok","calc.editors.ra.inline-editor.row-name":"Name","calc.editors.ra.inline-editor.row-type":"Typ","calc.editors.ra.inline-editor.input-relation-name":"Relations Name","calc.navigation.imprint":"Impressum"}')},"./src/locales/en.json":function(e){e.exports=JSON.parse('{"db.messages.parser.error-duplicate-variable":"duplicate variable name: {{name}}","db.messages.parser.error-invalid-date-format":"\\"{{str}}\\" is not a valid date; expected format: YYYY-MM-DD","db.messages.parser.error-group-duplicate-header":"duplicate header {{name}}","db.messages.parser.error-group-unknown-header":"unknown header {{name}}","db.messages.parser.error-group-header-name-missing":"the name of the group is missing (group: ....)","db.messages.parser.error-group-header-name-empty":"the name of the group must not be empty","db.messages.parser.error-group-non-unique-attribute":"non unique attribute {{name{{ in column }}index}}","db.messages.parser.error-group-non-unique-group-name":"duplicate group name: {{name}}","db.messages.parser.error-sql-string-use-single-quotes":"use single quotes for strings","db.messages.parser.error-sql-invalid-relation-name":"\\"{{str}}\\" must not be used as a relation-name","db.messages.parser.error-sql-invalid-column-name":"\\"{{str}}\\" must not be used as a column-name","db.messages.parser.error-sql-group-by-missing":"group by is missing","db.messages.parser.error-sql-having-without-group-by":"having found but missing \\"group by\\" or aggregation","db.messages.parser.error-sql-negative-limit":"the limit given must be >= 0","db.messages.parser.error-sqldump-invalid-column-number":"invalid number of columns in line {{line}}","db.messages.parser.error-sqldump-invalid-type":"invalid type in line {{line}}","db.messages.parser.error-sqldump-insert-wrong-number-columns":"number of values != number of columns","db.messages.parser.error-valueexpr-like-operand-no-string":"right operand of LIKE must be a string literal","db.messages.exec.error-column-not-unique":"could not add column \\"{{column}}\\" because of ambiguity","db.messages.exec.error-column-not-found-name":"could not find column \\"{{column}}\\" in schema {{schema}}","db.messages.exec.error-column-not-found-index":"column index \\"{{column}}\\" is out of range in schema {{schema}}; index starts at 1","db.messages.exec.error-column-ambiguous":"column \\"{{column}}\\" is ambiguous in {{schema}}","db.messages.exec.error-column-index-out-of-range":"column index \\"{{column}}\\" is out of range in {{schema}}; index starts at 1","db.messages.exec.error-could-not-change-rel-alias-ambiguity":"could not set relation alias \\"{{alias}}\\" because of ambiguity","db.messages.exec.error-could-not-rename-ambiguity":"could not set new name \\"{{newName}}\\" for \\"{{oldName}}\\" because of ambiguity in {{schema}}","db.messages.exec.error-schema-a-not-part-of-schema-b":"schema {{schemaA}} is not part of {{schemaB}}","db.messages.exec.error-schemas-not-unifiable":"schemas are not unifiable: types are different or size is different: {{schemaA}} and {{schemaB}}","db.messages.exec.error-column-not-in-both-schemas":"column \\"{{column}}\\" can not be found in both schemas of join","db.messages.exec.error-condition-must-be-boolean":"condition must be a boolean expression","db.messages.exec.error-func-not-defined-for-column-type":"{{func}} not defined for type {{colType}}","db.messages.exec.error-join-would-produce-non-unique-columns":"join would result in non unique column names","db.messages.exec.error-no-columns-match-alias-star":"no columns match \\"{{alias}}.*\\"","db.messages.exec.error-datatype-not-specified-for-col":"datatype for column {{index}} (\\"{{column}}\\") is not specified","db.messages.exec.error-invalid-projection-error":"invalid projection \\"{{argument}}\\": {{error}}","db.messages.exec.error-function-expects-type":"function \\"{{func}}\\" expects arguments of type \\"{{expected}}\\" but \\"{{given}}\\" given","db.messages.exec.error-could-not-compare-different-types":"could not compare value if types are different: {{typeA}} != {{typeB}}","db.messages.exec.error-function-expects-arguments-of-same-type":"{{func}} expects all arguments to be of the same type","db.messages.exec.error-case-when-condition-must-be-boolean":"the condition of a CASE WHEN must be of type boolean","db.messages.exec.error-case-when-expects-results-of-same-type":"CASE WHEN condition THEN result END expects all results to be of the same type","db.messages.exec.error-invalid-date-format":"\\"{{str}}\\" is not a valid date; expected format: YYYY-MM-DD","db.messages.translate.error-relation-not-found":"could not find relation \\"{{name}}\\"","db.messages.translate.warning-distinct-missing":"DISTINCT is missing","db.messages.translate.warning-ignored-all-on-set-operators":"ignored ALL on set operation","db.messages.translate.error-variable-name-conflict":"name conflict: relation name \\"{{name}}\\" already exists","db.messages.translate.error-variable-cyclic-usage":"cyclic usage of variable \\"{{name}}\\" detected","editor.codemirror-placeholder":"your query goes here ...\\n\\nkeyboard shortcuts:\\n\\texecute statement: [CTRL]+[RETURN]\\n\\texecute selection: [CTRL]+[SHIFT]+[RETURN]\\n\\tautocomplete: [CTRL]+[SPACE]\\n","editor.alert-message-headers.success":"Success","editor.alert-message-headers.info":"Info","editor.alert-message-headers.warning":"Warning","editor.alert-message-headers.error":"Error","editor.inline-relation-editor.button-ok":"ok","editor.inline-relation-editor.button-cancel":"cancel","editor.inline-relation-editor.placeholder-column-name-and-types":"columnName:type","editor.inline-relation-editor.enter-your-data":"please enter your data","editor.inline-relation-editor.error-column-name-missing":"column name missing in column {{index}}","editor.inline-relation-editor.error-wrong-quoted-string":"string must not contain single and double quotes","editor.error-no-query-found":"no query found","editor.pegjs-error.or":"or","editor.pegjs-error.no-input-found":"no input found","editor.pegjs-error.end-of-input":"end of input","editor.pegjs-error.expected-found":"Expected {{expected}} but {{found}} found.","editor.error-at-line-x":"at line {{line}}","calc.messages.error-query-missing":"no query found","calc.messages.error-query-missing-assignments-found":"only assignments found; query is missing Help - Assignments","calc.messages.gist-load-success":"gist loaded successfully","calc.menu.headline":"load a Dataset","calc.menu.datasets":"Datasets","calc.menu.load-gist-headline":"Load dataset stored in a gist","calc.menu.load-gist-button":"load","calc.menu.load-gist-insert-placeholder":"gist ID","calc.menu.create-own-dataset-headline":"Create your own Dataset","calc.menu.create-own-dataset-text":"You can create your own dataset and share it with others. Learn more about it in the Maintainer Tutorial","calc.menu.create-own-dataset-text-link":"Maintainer Tutorial","calc.menu.create-own-dataset-button-new":"create new Dataset","calc.menu.create-own-dataset-button-modify":"modify current Dataset","calc.navigation.take-a-tour":"Take a Tour","calc.navigation.feedback":"Feedback","calc.navigation.help":"Help","calc.navigation.calc":"Calculate","calc.navigation.language":"Language","calc.maintainer-groups.misc":"Miscellaneous","calc.maintainer-groups.temp":"Temporary","calc.maintainer-groups.uibk":"University of Innsbruck","calc.maintainer-groups.saarland":"University of Saarland","calc.editors.button-history":"history","calc.editors.insert-relation-title":"Insert","calc.editors.insert-relation-tooltip":"Insert relation or column names","calc.editors.group.tab-name":"Group Editor","calc.editors.group.tab-name-short":"GE","calc.editors.group.toolbar.import-sql":"import SQL-dump","calc.editors.group.toolbar.import-sql-content":"import SQL-dump","calc.editors.group.toolbar.add-new-relation":"add new relation","calc.editors.group.toolbar.add-new-relation-content":"open relation editor","calc.editors.group.button-download":"download","calc.editors.group.button-exec":"preview","calc.editors.group.button-use":"use Group in editor","calc.editors.group.button-use_plural":"use first Group in editor","calc.editors.group.sql-import-group-name-placeholder":"Name of the group (imported from SQL)","calc.editors.group.new-group-example-group":"-- this is an example\\n\\ngroup: nameOfTheNewGroup \\n\\n\\nA = {\\n\\ta:string, b:number\\n\\texample, 42\\n}","calc.editors.group.modal-sqldump.modal-title":"Import SQL-Dump","calc.editors.group.modal-sqldump.button-close":"Close","calc.editors.group.modal-sqldump.button-cancel":"cancel","calc.editors.group.modal-sqldump.button-import-sql":"import SQL","calc.editors.group.modal-sqldump.description":"Put your SQL-Dump here to create a group.","calc.editors.ra.tab-name":"Relational Algebra","calc.editors.ra.tab-name-short":"RelAlg","calc.editors.ra.button-execute-query":"execute query","calc.editors.ra.button-execute-selection":"execute selection","calc.editors.ra.button-download":"download","calc.editors.ra.toolbar.projection":"projection","calc.editors.ra.toolbar.projection-content":"π a, b ( A )\\n
              pi a, b A","calc.editors.ra.toolbar.selection":"selection","calc.editors.ra.toolbar.selection-content":"σ a < b ∧ b c ( A )\\n
              sigma a < b and b != c A","calc.editors.ra.toolbar.rename":"rename relation / rename columns","calc.editors.ra.toolbar.rename-content":"
              σ x.a > 1 ( ρ x ( A ) )
              \\n
              σ A.y > 2 ( rho ya ( A ) )
              ","calc.editors.ra.toolbar.rename-columns-operator":"rename columns operator","calc.editors.ra.toolbar.rename-columns-operator-content":"
              σ A.y > 2 ( ρ ya ( A ) )
              ","calc.editors.ra.toolbar.orderBy":"order by","calc.editors.ra.toolbar.orderBy-content":"
              τ a asc, [2] desc ( A )
              tau a asc, [2] desc ( A )
              ","calc.editors.ra.toolbar.groupBy":"group by","calc.editors.ra.toolbar.groupBy-content":"
              γ a, b; count(c)→c ( A )
              \\n
              gamma count(a)->x, sum(b)->y ( A )
              ","calc.editors.ra.toolbar.and":"and","calc.editors.ra.toolbar.and-content":"
              σ a < b b c ( A )
              ","calc.editors.ra.toolbar.xor":"xor","calc.editors.ra.toolbar.xor-content":"
              σ a < b b c ( A )
              ","calc.editors.ra.toolbar.or":"or","calc.editors.ra.toolbar.or-content":"
              σ a < b b c ( A )
              ","calc.editors.ra.toolbar.not":"not","calc.editors.ra.toolbar.not-content":"
              &sigma","calc.editors.ra.toolbar.equals":"equals","calc.editors.ra.toolbar.equals-content":"
              &sigma","calc.editors.ra.toolbar.not-equals":"not equals","calc.editors.ra.toolbar.not-equals-content":"
              &sigma","calc.editors.ra.toolbar.greater-or-equals":"greater or equals","calc.editors.ra.toolbar.greater-or-equals-content":"
              &sigma","calc.editors.ra.toolbar.lesser-or-equals":"lesser or equals","calc.editors.ra.toolbar.lesser-or-equals-content":"
              &sigma","calc.editors.ra.toolbar.intersect":"intersect","calc.editors.ra.toolbar.intersect-content":"
              ( A ) ( B )
              ","calc.editors.ra.toolbar.union":"union","calc.editors.ra.toolbar.union-content":"
              ( A ) ( B )
              ","calc.editors.ra.toolbar.division":"division","calc.editors.ra.toolbar.division-content":"
              ( A ) ÷ ( B )
              ","calc.editors.ra.toolbar.subtraction":"subtraction","calc.editors.ra.toolbar.subtraction-content":"
              ( A ) - ( B )
              \\n
              ( A ) \\n ( B )
              ","calc.editors.ra.toolbar.cross-join":"cross join","calc.editors.ra.toolbar.cross-join-content":"
              ( A ) ( B )
              ","calc.editors.ra.toolbar.natural-join":"natural join / θ-join","calc.editors.ra.toolbar.natural-join-content":"
              ( A ) ( B )
              \\n
              ( A ) ⋈ A.a ≥ B.a ( B )
              ","calc.editors.ra.toolbar.left-outer-join":"left outer join","calc.editors.ra.toolbar.left-outer-join-content":"
              ( A ) ⟕ ( B )
              \\n
              ( A ) ⟕ A.a < B.a ( B )
              \\n","calc.editors.ra.toolbar.right-outer-join":"right outer join","calc.editors.ra.toolbar.right-outer-join-content":"
              ( A ) ⟖ ( B )
              \\n
              ( A ) ⟖ A.a < B.a ( B )
              \\n","calc.editors.ra.toolbar.full-outer-join":"full outer join","calc.editors.ra.toolbar.full-outer-join-content":"
              ( A ) ⟗ ( B )
              \\n
              ( A ) ⟗ A.a != B.a ( B )
              ","calc.editors.ra.toolbar.left-semi-join":"left semi join","calc.editors.ra.toolbar.left-semi-join-content":"
              ( A ) ⋉ ( B )
              ","calc.editors.ra.toolbar.right-semi-join":"right semi join","calc.editors.ra.toolbar.right-semi-join-content":"
              ( A ) ⋊ ( B )
              ","calc.editors.ra.toolbar.anti-join":"anti join","calc.editors.ra.toolbar.anti-join-content":"
              ( A ) ▷ ( B )
              ","calc.editors.ra.toolbar.assignment":"assignment","calc.editors.ra.toolbar.assignment-content":"
              X = pi a ( A )\\n
              Y = pi b ( b )\\n
              ( X ) ( Y )
              ","calc.editors.ra.toolbar.single-line-comment":"single-line comment","calc.editors.ra.toolbar.single-line-comment-content":"π a, b A -- useful comment","calc.editors.ra.toolbar.multi-line-comment":"multi-line comment","calc.editors.ra.toolbar.multi-line-comment-content":"/* this is a very,
              very long comment */

              π a, b A","calc.editors.ra.toolbar.inline-relation":"inline-relation","calc.editors.ra.toolbar.inline-relation-content":"σ a = \'test\' ({
              a:string, b:number, X.c:date
              a, 1, 1970-01-01
              }
              )","calc.editors.ra.toolbar.inline-relation-editor":"inline-relation (editor)","calc.editors.ra.toolbar.inline-relation-editor-content":"create a new inline-relation using a built in editor","calc.editors.ra.toolbar.insert-date":"insert date","calc.editors.ra.toolbar.insert-date-content":"σ a < date(\'1970-01-01\') ( A )","calc.editors.ra.toolbar.autoreplace-operators.title":"operator replacement","calc.editors.ra.toolbar.autoreplace-operators.header":"automatically replace operators","calc.editors.ra.toolbar.autoreplace-operators.none":"no replacement","calc.editors.ra.toolbar.autoreplace-operators.plain2math":"pi => π","calc.editors.ra.toolbar.autoreplace-operators.math2plain":"π => pi","calc.editors.sql.tab-name":"SQL","calc.editors.sql.tab-name-short":"SQL","calc.editors.sql.button-execute-query":"execute query","calc.editors.sql.button-execute-selection":"execute selection","calc.editors.sql.button-download":"download","calc.editors.sql.toolbar.select":"select clause","calc.editors.sql.toolbar.select-content":"

              SELECT * FROM A

              SELECT a, A.b, A.c FROM A
              ","calc.editors.sql.toolbar.from":"from clause","calc.editors.sql.toolbar.from-content":"
              SELECT *
              FROM A, B as b
              INNER JOIN C NATURAL
              ","calc.editors.sql.toolbar.where":"where clause","calc.editors.sql.toolbar.where-content":"SELECT * FROM A, B
              where A.a = B.a or false","calc.editors.sql.toolbar.group-by":"group by clause","calc.editors.sql.toolbar.group-by-content":"SELECT a, COUNT(b) as num
              FROM A
              GROUP BY a","calc.editors.sql.toolbar.having":"having clause","calc.editors.sql.toolbar.having-content":"SELECT a, SUM(b) as sum
              FROM A
              GROUP BY a
              having sum > 10","calc.editors.sql.toolbar.order-by":"order by clause","calc.editors.sql.toolbar.order-by-content":"

              SELECT * FROM A ORDER BY a asc, b desc

              SELECT * FROM A ORDER BY 1, 2, 3
              ","calc.editors.sql.toolbar.limit":"limit clause","calc.editors.sql.toolbar.limit-content":"SELECT * FROM A
              LIMIT 10 OFFSET 0","calc.editors.sql.toolbar.insert-date":"insert date","calc.editors.sql.toolbar.insert-date-content":"select * from A\\nwhere a < date(\\"1970-01-01\\")","calc.result.modal.title":"Result","calc.result.modal.close":"Close","calc.editors.ra.inline-editor.title":"Relation Editor","calc.editors.ra.inline-editor.button-download-csv":"Download CSV","calc.editors.ra.inline-editor.button-upload-csv":"Upload CSV","calc.editors.ra.inline-editor.button-cancel":"Cancel","calc.editors.ra.inline-editor.button-ok":"Ok","calc.editors.ra.inline-editor.row-name":"Name","calc.editors.ra.inline-editor.row-type":"Type","calc.editors.ra.inline-editor.input-relation-name":"Relation Name","calc.navigation.imprint":"Imprint"}')},"./src/locales/es.json":function(e){e.exports=JSON.parse('{"db.messages.parser.error-duplicate-variable":"nombre de variable duplicado: {{name}}","db.messages.parser.error-invalid-date-format":"\\"{{str}}\\" no es una fecha válida; formato esperado: YYYY-MM-DD","db.messages.parser.error-group-duplicate-header":"header duplicado {{name}}","db.messages.parser.error-group-unknown-header":"header desconocido {{name}}","db.messages.parser.error-group-header-name-missing":"el nombre del grupo no se ha encontrado (group: ....)","db.messages.parser.error-group-header-name-empty":"el nombre del grupo debe ser rellenado","db.messages.parser.error-group-non-unique-attribute":"atributo no único {{name}} en columna {{index}}","db.messages.parser.error-group-non-unique-group-name":"El nombre del grupo no es único.","db.messages.parser.error-sql-string-use-single-quotes":"utiliza comillas simples para cadenas de caracteres","db.messages.parser.error-sql-invalid-relation-name":"\\"{{str}}\\" no debe ser utilizado como nombre de relacion","db.messages.parser.error-sql-invalid-column-name":"\\"{{str}}\\" no debe ser utilizado como nombre de columna","db.messages.parser.error-sql-group-by-missing":"group by no se encuentra","db.messages.parser.error-sql-having-without-group-by":"se ha encontrado pero no se encuentra \\"group by\\" ó agregación","db.messages.parser.error-sql-negative-limit":"el límite dado debe ser >= 0","db.messages.parser.error-sqldump-invalid-column-number":"número inválido de columnas en línea {{line}}","db.messages.parser.error-sqldump-invalid-type":"tipo inválido en línea {{line}}","db.messages.parser.error-sqldump-insert-wrong-number-columns":"número de valores != número de columnas","db.messages.parser.error-valueexpr-like-operand-no-string":"operando derecho de LIKE debe ser una cadena literal","db.messages.exec.error-column-not-unique":"no se pude agregar columna \\"{{column}}\\" por ambiguedad","db.messages.exec.error-column-not-found-name":"no se pude encontrar columna \\"{{column}}\\" en esquema {{schema}}","db.messages.exec.error-column-not-found-index":"índice de columna \\"{{column}}\\" está fuera de rango en equema {{schema}}; index starts at 1","db.messages.exec.error-column-ambiguous":"columna \\"{{column}}\\" es ambigua en esquema {{schema}}","db.messages.exec.error-column-index-out-of-range":"índice de columna \\"{{column}}\\" está fuera de rango en equema {{schema}}; índice comienza en 1","db.messages.exec.error-could-not-change-rel-alias-ambiguity":"no se pudo establecer relación alias \\"{{alias}}\\" por ambiguedad","db.messages.exec.error-could-not-rename-ambiguity":"no se pudo establecer nuevo nombre \\"{{newName}}\\" para \\"{{oldName}}\\" por ambiguedad en el equema {{schema}}","db.messages.exec.error-schema-a-not-part-of-schema-b":"esquema {{schemaA}} no es parte de {{schemaB}}","db.messages.exec.error-schemas-not-unifiable":"esquemas no son unificables: los tipos son diferentes ó los tamaño son diferentes: {{schemaA}} y {{schemaB}}","db.messages.exec.error-column-not-in-both-schemas":"columna \\"{{column}}\\" no se puede encontrar en ambos esquemas del join","db.messages.exec.error-condition-must-be-boolean":"condición debe ser una expresión booleana","db.messages.exec.error-func-not-defined-for-column-type":"{{func}} no está definido para {{colType}}","db.messages.exec.error-join-would-produce-non-unique-columns":"Join würde nicht eindeutige Spaltennamen erzeugen","db.messages.exec.error-no-columns-match-alias-star":"las columnas no coinciden \\"{{alias}}.*\\"","db.messages.exec.error-datatype-not-specified-for-col":"tipo de dato para columna {{index}} (\\"{{column}}\\") no está especificado","db.messages.exec.error-invalid-projection-error":"proyección inválida \\"{{argument}}\\": {{error}}","db.messages.exec.error-function-expects-type":"función \\"{{func}}\\" espera argumentos de tipo \\"{{expected}}\\" pero \\"{{given}}\\" fue dado","db.messages.exec.error-could-not-compare-different-types":"no se pudo comparar valor si tipos son diferentes: {{typeA}} != {{typeB}}","db.messages.exec.error-function-expects-arguments-of-same-type":"{{func}} espera que todos los argumentos sean del mismo tipo","db.messages.exec.error-case-when-condition-must-be-boolean":"la condición de un CASE WHEN debe ser de tipo booleano","db.messages.exec.error-case-when-expects-results-of-same-type":"CASE WHEN condition THEN result END espera todos results ser del mismo tipo","db.messages.exec.error-invalid-date-format":"\\"{{str}}\\" no es una fecha válido; formato esperado: YYYY-MM-DD","db.messages.translate.error-relation-not-found":"no se pudo encontrar relación \\"{{name}}\\"","db.messages.translate.warning-distinct-missing":"DISTINCT fehlt","db.messages.translate.warning-ignored-all-on-set-operators":"ALL bei Mengenoperatoren wurde ignoriert","db.messages.translate.error-variable-name-conflict":"conflicto de nombre: nombre de relación \\"{{name}}\\" ya existe","db.messages.translate.error-variable-cyclic-usage":"uso de variable cíclico \\"{{name}}\\" detectado","editor.codemirror-placeholder":"tu consulta va aquí ...\\n\\natajos de teclado:\\n\\tejecutar declaración: [CTRL]+[RETURN]\\n\\ttejecutar selección: [CTRL]+[SHIFT]+[RETURN]\\n\\tautocompletar: [CTRL]+[SPACE]\\n","editor.alert-message-headers.success":"Éxito","editor.alert-message-headers.info":"Info","editor.alert-message-headers.warning":"Advertencia","editor.alert-message-headers.error":"Error","editor.inline-relation-editor.button-ok":"ok","editor.inline-relation-editor.button-cancel":"cancelar","editor.inline-relation-editor.placeholder-column-name-and-types":"nombreColumna:tipo","editor.inline-relation-editor.enter-your-data":"por favor ingrese los datos","editor.inline-relation-editor.error-column-name-missing":"nombre de columna ausente en columna {{index}}","editor.inline-relation-editor.error-wrong-quoted-string":"cadena de caracteres no debe contener comillas simples y dobles","editor.error-no-query-found":"no se encontró la consulta","editor.pegjs-error.or":"ó","editor.pegjs-error.no-input-found":"no se encontró la entrada","editor.pegjs-error.end-of-input":"fin de entrada","editor.pegjs-error.expected-found":"Se esperaba {{expected}} pero se encontró {{found}} .","editor.error-at-line-x":"en la línea {{line}}","calc.messages.error-query-missing":"no se encontró la consulta","calc.messages.error-query-missing-assignments-found":"solo se encontraron asignaciones; a la consulta le falta Help - Assignments","calc.messages.gist-load-success":"gist fue cargado con éxito","calc.menu.headline":"cargar un Dataset","calc.menu.datasets":"Datasets","calc.menu.load-gist-headline":"cargar dataset guardado en un gist","calc.menu.load-gist-button":"cargar","calc.menu.load-gist-insert-placeholder":"ID de gist","calc.menu.create-own-dataset-headline":"Crear tu propio Dataset","calc.menu.create-own-dataset-text":"Puedes crear tu propio dataset y compartirlo con otras personas. \\nAprende más acerca de ésto en Maintainer Tutorial","calc.menu.create-own-dataset-text-link":"Tutorial de mantenimiento (en)","calc.menu.create-own-dataset-button-new":"crear nuevo Dataset","calc.menu.create-own-dataset-button-modify":"modificar Dataset actual","calc.navigation.take-a-tour":"Haz un recorrido","calc.navigation.feedback":"Feedback","calc.navigation.help":"Ayuda (en)","calc.navigation.calc":"Calculadora","calc.navigation.language":"Lenguaje","calc.maintainer-groups.misc":"Misceláneo","calc.maintainer-groups.temp":"Temporal","calc.maintainer-groups.uibk":"Universidad de Innsbruck","calc.maintainer-groups.saarland":"Universidad de Saarland","calc.editors.button-history":"historia","calc.editors.insert-relation-title":"Insertar","calc.editors.insert-relation-tooltip":"Insertar nombres de relaciones o columnas","calc.editors.group.tab-name":"Editor de Grupo","calc.editors.group.tab-name-short":"EG","calc.editors.group.toolbar.import-sql":"importar SQL-dump","calc.editors.group.toolbar.import-sql-content":"importar SQL-dump","calc.editors.group.toolbar.add-new-relation":"agregar nueva relación","calc.editors.group.toolbar.add-new-relation-content":"abrir editor de relaciones","calc.editors.group.button-download":"descargar","calc.editors.group.button-exec":"vista previa","calc.editors.group.button-use":"utilizar Grupo en editor","calc.editors.group.button-use_plural":"utilizar Grupos en editor","calc.editors.group.sql-import-group-name-placeholder":"Nombre del grupo (importado de SQL)","calc.editors.group.new-group-example-group":"-- éste es un ejemplo\\n\\ngroup: nombreDeNuevoGrupo \\n\\n\\nA = {\\n\\ta:string, b:number\\n\\tejemplo, 42\\n}","calc.editors.group.modal-sqldump.modal-title":"Importar SQL-Dump","calc.editors.group.modal-sqldump.button-close":"Cerrar","calc.editors.group.modal-sqldump.button-cancel":"cancelar","calc.editors.group.modal-sqldump.button-import-sql":"importar SQL","calc.editors.group.modal-sqldump.description":"Ponga su SQL-Dump aquí para crear un grupo.","calc.editors.ra.tab-name":"Álgebra Relacional","calc.editors.ra.tab-name-short":"ÁlgRel","calc.editors.ra.button-execute-query":"executar consulta","calc.editors.ra.button-execute-selection":"executar selección","calc.editors.ra.button-download":"descargar","calc.editors.ra.toolbar.projection":"proyección","calc.editors.ra.toolbar.projection-content":"π a, b ( A )\\n
              pi a, b A","calc.editors.ra.toolbar.selection":"selección","calc.editors.ra.toolbar.selection-content":"σ a < b ∧ b c ( A )\\n
              sigma a < b and b != c A","calc.editors.ra.toolbar.rename":"renombrar relación / renombrar columnas","calc.editors.ra.toolbar.rename-content":"
              σ x.a > 1 ( ρ x ( A ) )
              \\n
              σ A.y > 2 ( rho ya ( A ) )
              ","calc.editors.ra.toolbar.rename-columns-operator":"renombrar operador de columnas","calc.editors.ra.toolbar.rename-columns-operator-content":"
              σ A.y > 2 ( ρ ya ( A ) )
              ","calc.editors.ra.toolbar.orderBy":"ordenar por","calc.editors.ra.toolbar.orderBy-content":"
              τ a asc, [2] desc ( A )
              tau a asc, [2] desc ( A )
              ","calc.editors.ra.toolbar.groupBy":"agrupar por","calc.editors.ra.toolbar.groupBy-content":"
              γ a, b; count(c)→c ( A )
              \\n
              gamma count(a)->x, sum(b)->y ( A )
              ","calc.editors.ra.toolbar.and":"y","calc.editors.ra.toolbar.and-content":"
              σ a < b b c ( A )
              ","calc.editors.ra.toolbar.xor":"xor","calc.editors.ra.toolbar.xor-content":"
              σ a < b b c ( A )
              ","calc.editors.ra.toolbar.or":"ó","calc.editors.ra.toolbar.or-content":"
              σ a < b b c ( A )
              ","calc.editors.ra.toolbar.not":"no","calc.editors.ra.toolbar.not-content":"
              &sigma","calc.editors.ra.toolbar.equals":"igual","calc.editors.ra.toolbar.equals-content":"
              &sigma","calc.editors.ra.toolbar.not-equals":"no es igual","calc.editors.ra.toolbar.not-equals-content":"
              &sigma","calc.editors.ra.toolbar.greater-or-equals":"mayor ó igual","calc.editors.ra.toolbar.greater-or-equals-content":"
              &sigma","calc.editors.ra.toolbar.lesser-or-equals":"menor ó igual","calc.editors.ra.toolbar.lesser-or-equals-content":"
              &sigma","calc.editors.ra.toolbar.intersect":"intersecta","calc.editors.ra.toolbar.intersect-content":"
              ( A ) ( B )
              ","calc.editors.ra.toolbar.union":"unión","calc.editors.ra.toolbar.union-content":"
              ( A ) ( B )
              ","calc.editors.ra.toolbar.division":"división","calc.editors.ra.toolbar.division-content":"
              ( A ) ÷ ( B )
              ","calc.editors.ra.toolbar.subtraction":"resta","calc.editors.ra.toolbar.subtraction-content":"
              ( A ) - ( B )
              \\n
              ( A ) \\\\ ( B )
              \\n","calc.editors.ra.toolbar.cross-join":"cross join (cruzado)","calc.editors.ra.toolbar.cross-join-content":"
              ( A ) ( B )
              ","calc.editors.ra.toolbar.natural-join":"natural join / θ-join","calc.editors.ra.toolbar.natural-join-content":"
              ( A ) ( B )
              \\n
              ( A ) ⋈ A.a ≥ B.a ( B )
              ","calc.editors.ra.toolbar.left-outer-join":"left outer join","calc.editors.ra.toolbar.left-outer-join-content":"
              ( A ) ⟕ ( B )
              \\n
              ( A ) ⟕ A.a < B.a ( B )
              ","calc.editors.ra.toolbar.right-outer-join":"right outer join","calc.editors.ra.toolbar.right-outer-join-content":"
              ( A ) ⟖ ( B )
              \\n
              ( A ) ⟖ A.a < B.a ( B )
              ","calc.editors.ra.toolbar.full-outer-join":"full outer join","calc.editors.ra.toolbar.full-outer-join-content":"
              ( A ) ⟗ ( B )
              \\n
              ( A ) ⟗ A.a != B.a ( B )
              ","calc.editors.ra.toolbar.left-semi-join":"left semi join","calc.editors.ra.toolbar.left-semi-join-content":"
              ( A ) ⋉ ( B )
              ","calc.editors.ra.toolbar.right-semi-join":"right semi join","calc.editors.ra.toolbar.right-semi-join-content":"
              ( A ) ⋊ ( B )
              ","calc.editors.ra.toolbar.anti-join":"anti join","calc.editors.ra.toolbar.anti-join-content":"
              ( A ) ▷ ( B )
              ","calc.editors.ra.toolbar.assignment":"asignación","calc.editors.ra.toolbar.assignment-content":"
              X = pi a ( A )\\n
              Y = pi b ( b )\\n
              ( X ) ( Y )
              ","calc.editors.ra.toolbar.single-line-comment":"comentario de una línea","calc.editors.ra.toolbar.single-line-comment-content":"π a, b A -- useful comment","calc.editors.ra.toolbar.multi-line-comment":"comentario de múltiples líneas","calc.editors.ra.toolbar.multi-line-comment-content":"/* this is a very,
              very long comment */

              π a, b A","calc.editors.ra.toolbar.inline-relation":"inline-relation","calc.editors.ra.toolbar.inline-relation-content":"σ a = \'test\' ({
              a:string, b:number, X.c:date
              a, 1, 1970-01-01
              }
              )","calc.editors.ra.toolbar.inline-relation-editor":"inline-relation (editor)","calc.editors.ra.toolbar.inline-relation-editor-content":"crear nuevo inline-relation utilizando editor incorporado","calc.editors.ra.toolbar.insert-date":"insertar fecha","calc.editors.ra.toolbar.insert-date-content":"","calc.editors.ra.toolbar.autoreplace-operators.title":"","calc.editors.ra.toolbar.autoreplace-operators.header":"","calc.editors.ra.toolbar.autoreplace-operators.none":"","calc.editors.ra.toolbar.autoreplace-operators.plain2math":"","calc.editors.ra.toolbar.autoreplace-operators.math2plain":"","calc.editors.sql.tab-name":"SQL","calc.editors.sql.tab-name-short":"SQL","calc.editors.sql.button-execute-query":"ejecutar consulta","calc.editors.sql.button-execute-selection":"ejecutar selección","calc.editors.sql.button-download":"descargar","calc.editors.sql.toolbar.select":"seleccionar cláusula","calc.editors.sql.toolbar.select-content":"

              SELECT * FROM A

              SELECT a, A.b, A.c FROM A
              ","calc.editors.sql.toolbar.from":"cláusula from (desde)","calc.editors.sql.toolbar.from-content":"
              SELECT *
              FROM A, B as b
              INNER JOIN C NATURAL
              ","calc.editors.sql.toolbar.where":"cláusula where (donde)","calc.editors.sql.toolbar.where-content":"SELECT * FROM A, B
              where A.a = B.a or false","calc.editors.sql.toolbar.group-by":"cláusula agrupar por","calc.editors.sql.toolbar.group-by-content":"SELECT a, COUNT(b) as num
              FROM A
              GROUP BY a","calc.editors.sql.toolbar.having":"teniendo cláusula","calc.editors.sql.toolbar.having-content":"SELECT a, SUM(b) as sum
              FROM A
              GROUP BY a
              having sum > 10","calc.editors.sql.toolbar.order-by":"cláusula ordenar por","calc.editors.sql.toolbar.order-by-content":"

              SELECT * FROM A ORDER BY a asc, b desc

              SELECT * FROM A ORDER BY 1, 2, 3
              ","calc.editors.sql.toolbar.limit":"cláusula límite","calc.editors.sql.toolbar.limit-content":"SELECT * FROM A
              LIMIT 10 OFFSET 0","calc.editors.sql.toolbar.insert-date":"insertar fecha","calc.editors.sql.toolbar.insert-date-content":"select * from A\\nwhere a < date(\\"1970-01-01\\")","calc.result.modal.title":"Resultado","calc.result.modal.close":"Cerrar","calc.editors.ra.inline-editor.title":"Editor de relaciones","calc.editors.ra.inline-editor.button-download-csv":"Descargar CSV","calc.editors.ra.inline-editor.button-upload-csv":"Subir CSV","calc.editors.ra.inline-editor.button-cancel":"Cancelar","calc.editors.ra.inline-editor.button-ok":"Ok","calc.editors.ra.inline-editor.row-name":"Nombre","calc.editors.ra.inline-editor.row-type":"Escriba","calc.editors.ra.inline-editor.input-relation-name":"Nombre de la relación","calc.navigation.imprint":"Imprimir"}')},"./src/locales/kr.json":function(e){e.exports=JSON.parse('{"db.messages.parser.error-duplicate-variable":"변수 이름 중복: {{name}}","db.messages.parser.error-invalid-date-format":"\\"__str__\\" 유효하지 않은 날짜; 형식: YYYY-MM-DD","db.messages.parser.error-group-duplicate-header":" 헤더 중복: {{name}}","db.messages.parser.error-group-unknown-header":"알 수 없는 헤더: {{name}}","db.messages.parser.error-group-header-name-missing":"그룹 이름이 없음(group: ....)","db.messages.parser.error-group-header-name-empty":"그룹 이름은 비어있으면 안됨","db.messages.parser.error-group-non-unique-attribute":"__index__ 열에서 고유하지 않은 속성 {{name}}","db.messages.parser.error-group-non-unique-group-name":"duplicate group name: {{name}}","db.messages.parser.error-sql-string-use-single-quotes":"문자열에 작은 따음표 사용","db.messages.parser.error-sql-invalid-relation-name":"\\"__str__\\"은 관계 이름으로 사용 할 수 없음","db.messages.parser.error-sql-invalid-column-name":"\\"__str__\\"은 열 이름으로 사용할 수 없음","db.messages.parser.error-sql-group-by-missing":"group by 없음","db.messages.parser.error-sql-having-without-group-by":"\\"group by\\" 또는 집계 없음","db.messages.parser.error-sql-negative-limit":"0 이상이어야 함","db.messages.parser.error-sqldump-invalid-column-number":"__line__ 에서 유효하지 않은 열","db.messages.parser.error-sqldump-invalid-type":"__line__ 에서 유효하지 않은 타입","db.messages.parser.error-sqldump-insert-wrong-number-columns":"값의 숫자 != 열의 숫자","db.messages.parser.error-valueexpr-like-operand-no-string":"LIKE의 오른쪽 피연산자는 문자열 리터럴이어야 함","db.messages.exec.error-column-not-unique":"모호성 때문에 열 \\"__column__\\" 을 추가할 수 없음","db.messages.exec.error-column-not-found-name":"스키마 __schema__ 에서 열 \\"__column__\\" 을 찾을 수 없음","db.messages.exec.error-column-not-found-index":"열 인덱스 \\"__column__\\" 는 범위를 벗어남; 인덱스는 1에서 시작","db.messages.exec.error-column-ambiguous":"열 \\"__column__\\" 는 스키마 __schema__ 에서 모호함","db.messages.exec.error-column-index-out-of-range":"열 인덱스 \\"__column__\\" 는 범위를 벗어남; 인덱스는 1에서 시작","db.messages.exec.error-could-not-change-rel-alias-ambiguity":"모호성 때문에 릴레이션 가명 \\"__alias__\\"을 사용할 수 없음 ","db.messages.exec.error-could-not-rename-ambiguity":"스키마 __schema__ 에서의 모호성 때문에 \\"__oldName__\\"을 위한 새로운 이름 \\"__newName__\\" 을 설정 할 수 없음","db.messages.exec.error-schema-a-not-part-of-schema-b":"스키마 __schemaA__ 는 __schemaB__ 의 부분이 아님","db.messages.exec.error-schemas-not-unifiable":"스키마들은 통합될 수 없음: 타입들은 다르거나 사이즈들이 다르다: __schemaA__ 와 __schemaB__","db.messages.exec.error-column-not-in-both-schemas":"열 \\"__column__\\"은 두 스키마의 조인에서 찾을 수 없음","db.messages.exec.error-condition-must-be-boolean":"조건은 불린 대수여야만 함","db.messages.exec.error-func-not-defined-for-column-type":"__func_ _은 타입 __colType__ 을 위해 정의될 수 없음","db.messages.exec.error-join-would-produce-non-unique-columns":" Die folgenden Spalten sind teil beider Relationen: {{conflicts}}","db.messages.exec.error-no-columns-match-alias-star":"\\"__alias__.*\\"와 일치하는 열이 없음","db.messages.exec.error-datatype-not-specified-for-col":"열 __index__의 데이터 타입 (\\"__column__\\")이 구체화되지 않음","db.messages.exec.error-invalid-projection-error":"유효하지 않은 프로젝션 \\"__argument__\\": __error__","db.messages.exec.error-function-expects-type":"함수 \\"__func__\\"는 인자 타입 \\"__expected__\\" 으로 기대하지만 \\"__given__\\" 이 주어짐","db.messages.exec.error-could-not-compare-different-types":"타입이 다르면 비교할 수 없음: __typeA__ != __typeB__","db.messages.exec.error-function-expects-arguments-of-same-type":"__func__ 는 모든 인자가 같은 타입으로 기대함","db.messages.exec.error-case-when-condition-must-be-boolean":"CASE WHEN 조건은 불린 타입이어야 함","db.messages.exec.error-case-when-expects-results-of-same-type":"CASE WHEN condition THEN result END는 모든 결과가 같은 타입으로 기대함","db.messages.exec.error-invalid-date-format":"\\"__str__\\" 는 유효하지 않은 날짜; 형식: YYYY-MM-DD","db.messages.translate.error-relation-not-found":"릴레이션 \\"{{name}}\\"을 찾을 수 없음","db.messages.translate.warning-distinct-missing":" Duplikate werden in relationaler Algebra automatisch entfernt","db.messages.translate.warning-ignored-all-on-set-operators":" Duplikate werden in relationaler Algebra automatisch entfernt","db.messages.translate.error-variable-name-conflict":"이름 충돌: 릴레이션 이름 \\"{{name}}\\" 은 이미 존재함","db.messages.translate.error-variable-cyclic-usage":"변수 \\"{{name}}\\"의 순환 사용이 감지됨","editor.codemirror-placeholder":"쿼리는 이곳에 표시된다 ...\\n\\n키보드 단축키:\\n\\tstatement 실행: [CTRL]+[RETURN]\\n\\tselection 실행: [CTRL]+[SHIFT]+[RETURN]\\n\\t자동 완성: [CTRL]+[SPACE]","editor.alert-message-headers.success":"성공","editor.alert-message-headers.info":"정보","editor.alert-message-headers.warning":"경고","editor.alert-message-headers.error":" 에러 ","editor.inline-relation-editor.button-ok":"ok","editor.inline-relation-editor.button-cancel":"취소","editor.inline-relation-editor.placeholder-column-name-and-types":"열 이름:타입","editor.inline-relation-editor.enter-your-data":"데이터를 입력하라","editor.inline-relation-editor.error-column-name-missing":"열 이름이 열 __index__에 없다","editor.inline-relation-editor.error-wrong-quoted-string":"문자열은 작은따음표와 큰따음표를 포함할 수 없다.","editor.error-no-query-found":"쿼리를 찾을 수 없다","editor.pegjs-error.or":"또는","editor.pegjs-error.no-input-found":"입력을 찾을 수 없음","editor.pegjs-error.end-of-input":"입력의 끝","editor.pegjs-error.expected-found":"예상 된 __expected__이지만 __found__이 발견됨.","editor.error-at-line-x":"__line__ 줄에서","calc.messages.error-query-missing":"쿼리를 찾을 수 없음","calc.messages.error-query-missing-assignments-found":"쿼리를 찾을 수 없음 Help - Assignments","calc.messages.gist-load-success":"gist 불러오기 완료","calc.menu.headline":"데이터셋 불러오기","calc.menu.datasets":"데이터셋 불러오기","calc.menu.load-gist-headline":"gist에 저장된 데이터셋 불러오기","calc.menu.load-gist-button":"불러오기","calc.menu.load-gist-insert-placeholder":"gist 아이디","calc.menu.create-own-dataset-headline":"데이터셋 생성하기","calc.menu.create-own-dataset-text":"You can create your own dataset and share it with others. Learn more about it in the Maintainer Tutorial","calc.menu.create-own-dataset-text-link":"Maintainer Tutorial","calc.menu.create-own-dataset-button-new":"새로운 데이터셋 생성","calc.menu.create-own-dataset-button-modify":"현재 데이터셋 수정","calc.navigation.take-a-tour":"둘러보기","calc.navigation.feedback":"피드백","calc.navigation.help":"도움말","calc.navigation.calc":"Calculate","calc.navigation.language":"언어","calc.maintainer-groups.misc":"다른 종류","calc.maintainer-groups.temp":"임시","calc.maintainer-groups.uibk":"Innsbruck 대학교","calc.maintainer-groups.saarland":"Saarland 대학교","calc.editors.button-history":"기록","calc.editors.insert-relation-title":"Insert","calc.editors.insert-relation-tooltip":"Insert relation or column names","calc.editors.group.tab-name":"그룹 에디터","calc.editors.group.tab-name-short":"그룹 에디터","calc.editors.group.toolbar.import-sql":"SQL-덤프 가져오기","calc.editors.group.toolbar.import-sql-content":"SQL-컨텐트 가져오기","calc.editors.group.toolbar.add-new-relation":"새로운 릴레이션 추가","calc.editors.group.toolbar.add-new-relation-content":"릴레이션 에디터 열기","calc.editors.group.button-download":"다운로드","calc.editors.group.button-exec":"preview","calc.editors.group.button-use":"에디터에서 그룹 사용하기","calc.editors.group.button-use_plural":"에디터에서 여러 그룹 사용하기","calc.editors.group.sql-import-group-name-placeholder":"그룹 이름(SQL로부터 불러옴)","calc.editors.group.new-group-example-group":"-- 예시입니다\\n\\n그룹: nameOfTheNewGroup \\n\\n\\nA = {\\n\\ta:string, b:number\\n\\texample, 42\\n}","calc.editors.group.modal-sqldump.modal-title":"SQL-Dump 가져오기","calc.editors.group.modal-sqldump.button-close":"닫기","calc.editors.group.modal-sqldump.button-cancel":"취소","calc.editors.group.modal-sqldump.button-import-sql":"SQL 가져오기","calc.editors.group.modal-sqldump.description":"그룹을 생성하려면 SQL-Dump 이곳에 가져와라","calc.editors.ra.tab-name":"관계 대수","calc.editors.ra.tab-name-short":"관계 대수","calc.editors.ra.button-execute-query":"쿼리 실행","calc.editors.ra.button-execute-selection":"셀렉션 실행","calc.editors.ra.button-download":"다운로드","calc.editors.ra.toolbar.projection":"프로젝션","calc.editors.ra.toolbar.projection-content":"π a, b ( A )\\n
              pi a, b A","calc.editors.ra.toolbar.selection":"셀렉션","calc.editors.ra.toolbar.selection-content":"σ a < b ∧ b c ( A )\\n
              sigma a < b and b != c A","calc.editors.ra.toolbar.rename":"릴레이션 이름 변경 / 열 이름 변경","calc.editors.ra.toolbar.rename-content":"
              σ x.a > 1 ( ρ x ( A ) )
              \\n
              σ A.y > 2 ( rho ya ( A ) )
              ","calc.editors.ra.toolbar.rename-columns-operator":"열 연산자 변경","calc.editors.ra.toolbar.rename-columns-operator-content":"
              σ A.y > 2 ( ρ ya ( A ) )
              ","calc.editors.ra.toolbar.orderBy":"정렬","calc.editors.ra.toolbar.orderBy-content":"
              τ a asc, [2] desc ( A )
              tau a asc, [2] desc ( A )
              ","calc.editors.ra.toolbar.groupBy":"그룹화","calc.editors.ra.toolbar.groupBy-content":"
              γ a, b; count(c)→c ( A )
              \\n
              gamma count(a)->x, sum(b)->y ( A )
              ","calc.editors.ra.toolbar.and":"논리곱","calc.editors.ra.toolbar.and-content":"
              σ a < b b c ( A )
              ","calc.editors.ra.toolbar.xor":"배타적 논리","calc.editors.ra.toolbar.xor-content":"
              σ a < b b c ( A )
              ","calc.editors.ra.toolbar.or":"논리합","calc.editors.ra.toolbar.or-content":"
              σ a < b b c ( A )
              ","calc.editors.ra.toolbar.not":"논리적 부정","calc.editors.ra.toolbar.not-content":" ¬(a < b) ( A )
              ","calc.editors.ra.toolbar.equals":"등호","calc.editors.ra.toolbar.equals-content":" a = b ( A )
              ","calc.editors.ra.toolbar.not-equals":"부등호","calc.editors.ra.toolbar.not-equals-content":" a \'text\' ( A )
              ","calc.editors.ra.toolbar.greater-or-equals":"크거나 같다","calc.editors.ra.toolbar.greater-or-equals-content":" a 42 ( A )
              ","calc.editors.ra.toolbar.lesser-or-equals":"작거나 같다","calc.editors.ra.toolbar.lesser-or-equals-content":" a 42 ( A )
              ","calc.editors.ra.toolbar.intersect":"교집합","calc.editors.ra.toolbar.intersect-content":"
              ( A ) ( B )
              ","calc.editors.ra.toolbar.union":"합집합","calc.editors.ra.toolbar.union-content":"
              ( A ) ( B )
              ","calc.editors.ra.toolbar.division":"디비전","calc.editors.ra.toolbar.division-content":"
              ( A ) ÷ ( B )
              ","calc.editors.ra.toolbar.subtraction":"차집합","calc.editors.ra.toolbar.subtraction-content":"
              ( A ) - ( B )
              \\n
              ( A ) \\\\ ( B )
              \\n","calc.editors.ra.toolbar.cross-join":"카디션 프로덕트","calc.editors.ra.toolbar.cross-join-content":"
              ( A ) ( B )
              ","calc.editors.ra.toolbar.natural-join":"자연 조인 / θ-조인","calc.editors.ra.toolbar.natural-join-content":"
              ( A ) ( B )
              \\n
              ( A ) ⋈ A.a ≥ B.a ( B )
              ","calc.editors.ra.toolbar.left-outer-join":"왼쪽 외부 조인","calc.editors.ra.toolbar.left-outer-join-content":"
              ( A ) ⟕ ( B )
              \\n
              ( A ) ⟕ A.a < B.a ( B )
              ","calc.editors.ra.toolbar.right-outer-join":"오른쪽 외부 조인","calc.editors.ra.toolbar.right-outer-join-content":"
              ( A ) ⟖ ( B )
              \\n
              ( A ) ⟖ A.a < B.a ( B )
              ","calc.editors.ra.toolbar.full-outer-join":"완전 외부 조인","calc.editors.ra.toolbar.full-outer-join-content":"
              ( A ) ⟗ ( B )
              \\n
              ( A ) ⟗ A.a != B.a ( B )
              ","calc.editors.ra.toolbar.left-semi-join":"왼쪽 세미 조인","calc.editors.ra.toolbar.left-semi-join-content":"
              ( A ) ⋉ ( B )
              ","calc.editors.ra.toolbar.right-semi-join":"오른쪽 세미 조인","calc.editors.ra.toolbar.right-semi-join-content":"
              ( A ) ⋊ ( B )
              ","calc.editors.ra.toolbar.anti-join":"안티 조인","calc.editors.ra.toolbar.anti-join-content":"
              ( A ) ▷ ( B )
              ","calc.editors.ra.toolbar.assignment":"할당","calc.editors.ra.toolbar.assignment-content":"
              X = pi a ( A )\\n
              Y = pi b ( b )\\n
              ( X ) ( Y )
              ","calc.editors.ra.toolbar.single-line-comment":"한 줄 주석","calc.editors.ra.toolbar.single-line-comment-content":"π a, b A -- useful comment","calc.editors.ra.toolbar.multi-line-comment":"여러 줄 주석","calc.editors.ra.toolbar.multi-line-comment-content":"/* this is a very,
              very long comment */

              π a, b A","calc.editors.ra.toolbar.inline-relation":"인라인-릴레이션","calc.editors.ra.toolbar.inline-relation-content":"σ a = \'test\' ({
              a:string, b:number, X.c:date
              a, 1, 1970-01-01
              }
              )","calc.editors.ra.toolbar.inline-relation-editor":"인라인-릴레이션 (에디터)","calc.editors.ra.toolbar.inline-relation-editor-content":"create a new inline-relation using a built in editor","calc.editors.ra.toolbar.insert-date":"날짜 삽입","calc.editors.ra.toolbar.insert-date-content":"σ a < date(\'1970-01-01\') ( A )","calc.editors.ra.toolbar.autoreplace-operators.title":"operator replacement","calc.editors.ra.toolbar.autoreplace-operators.header":"automatically replace operators","calc.editors.ra.toolbar.autoreplace-operators.none":"no replacement","calc.editors.ra.toolbar.autoreplace-operators.plain2math":"pi => π","calc.editors.ra.toolbar.autoreplace-operators.math2plain":"π => pi","calc.editors.sql.tab-name":"SQL","calc.editors.sql.tab-name-short":"SQL","calc.editors.sql.button-execute-query":"쿼리 실행","calc.editors.sql.button-execute-selection":"셀렉션 실행","calc.editors.sql.button-download":"다운로드","calc.editors.sql.toolbar.select":"select 문","calc.editors.sql.toolbar.select-content":"

              SELECT * FROM A

              SELECT a, A.b, A.c FROM A
              ","calc.editors.sql.toolbar.from":"from 문","calc.editors.sql.toolbar.from-content":"
              SELECT *
              FROM A, B as b
              INNER JOIN C NATURAL
              ","calc.editors.sql.toolbar.where":"where 문","calc.editors.sql.toolbar.where-content":"SELECT * FROM A, B
              where A.a = B.a or false","calc.editors.sql.toolbar.group-by":"group by 문","calc.editors.sql.toolbar.group-by-content":"SELECT a, COUNT(b) as num
              FROM A
              GROUP BY a","calc.editors.sql.toolbar.having":"having 문","calc.editors.sql.toolbar.having-content":"SELECT a, SUM(b) as sum
              FROM A
              GROUP BY a
              having sum > 10","calc.editors.sql.toolbar.order-by":"order by 문","calc.editors.sql.toolbar.order-by-content":"

              SELECT * FROM A ORDER BY a asc, b desc

              SELECT * FROM A ORDER BY 1, 2, 3
              ","calc.editors.sql.toolbar.limit":"limit 문","calc.editors.sql.toolbar.limit-content":"SELECT * FROM A
              LIMIT 10 OFFSET 0","calc.editors.sql.toolbar.insert-date":"insert date","calc.editors.sql.toolbar.insert-date-content":"select * from A\\nwhere a < date(\\"1970-01-01\\")","calc.result.modal.title":"Result","calc.result.modal.close":"Close","calc.editors.ra.inline-editor.title":"Relation Editor","calc.editors.ra.inline-editor.button-download-csv":"Download CSV","calc.editors.ra.inline-editor.button-upload-csv":"upload CSV","calc.editors.ra.inline-editor.button-cancel":"Cancel","calc.editors.ra.inline-editor.button-ok":"Ok","calc.editors.ra.inline-editor.row-name":"Name","calc.editors.ra.inline-editor.row-type":"Type","calc.editors.ra.inline-editor.input-relation-name":"Relation Name","calc.navigation.imprint":"Imprint"}')},"./src/locales/pt.json":function(e){e.exports=JSON.parse('{"db.messages.parser.error-duplicate-variable":"nome de variável duplicado: {{name}}","db.messages.parser.error-invalid-date-format":"\\"{{str}}\\" não é uma data válida; formato esperado: YYYY-MM-DD","db.messages.parser.error-group-duplicate-header":"cabeçalho duplicado {{name}}","db.messages.parser.error-group-unknown-header":"cabeçalho desconhecido {{name}}","db.messages.parser.error-group-header-name-missing":"o nome do grupo está faltando (group: ....)","db.messages.parser.error-group-header-name-empty":"o nome do grupo não pode ser vazio","db.messages.parser.error-group-non-unique-attribute":"atributo não único {{name}} na coluna {{index}}","db.messages.parser.error-group-non-unique-group-name":"nome de grupo duplicado: {{name}}","db.messages.parser.error-sql-string-use-single-quotes":"use aspas simples para strings (caracteres/texto)","db.messages.parser.error-sql-invalid-relation-name":"\\"{{str}}\\" não pode ser usado como nome de relação","db.messages.parser.error-sql-invalid-column-name":"\\"{{str}}\\" não pode ser usado como nome de coluna","db.messages.parser.error-sql-group-by-missing":"group by está faltando","db.messages.parser.error-sql-having-without-group-by":"“having” encontrado, mas sem \\"group by\\" ou agregação","db.messages.parser.error-sql-negative-limit":"o limite dado precisa ser >= 0","db.messages.parser.error-sqldump-invalid-column-number":"número inválido de colunas na linha {{line}}","db.messages.parser.error-sqldump-invalid-type":"tipo inválido na linha {{line}}","db.messages.parser.error-sqldump-insert-wrong-number-columns":"número de valores != número de colunas","db.messages.parser.error-valueexpr-like-operand-no-string":"operando direito de LIKE deve ser uma string literal","db.messages.exec.error-column-not-unique":"não foi possível adicionar a coluna \\"{{column}}\\" devido a ambiguidade","db.messages.exec.error-column-not-found-name":"não foi possível encontrar a coluna \\"{{column}}\\" no esquema {{schema}}","db.messages.exec.error-column-not-found-index":"índice da coluna \\"{{column}}\\" está fora do intervalo no esquema {{schema}}; índice começa em 1","db.messages.exec.error-column-ambiguous":"coluna\\"{{column}}\\" é ambígua em {{schema}}","db.messages.exec.error-column-index-out-of-range":"índice da coluna \\"{{column}}\\" está fora do intervalo no esquema {{schema}}; índice começa em 1","db.messages.exec.error-could-not-change-rel-alias-ambiguity":"não foi possível definir o ”alias” da relação “{{alias}}” por causa da ambiguidade","db.messages.exec.error-could-not-rename-ambiguity":"não foi possível definir o novo nome \\"{{newName}}\\" para \\"{{oldName}}\\" devido a ambiguidade em {{schema}}","db.messages.exec.error-schema-a-not-part-of-schema-b":"esquema {{schemaA}} não é parte de {{schemaB}}","db.messages.exec.error-schemas-not-unifiable":"os esquemas não são unificáveis: os tipos ou o tamanho diferem: {{schemaA}} e {{schemaB}}","db.messages.exec.error-column-not-in-both-schemas":"coluna \\"{{column}}\\" não pode ser encontrada em ambos os esquemas de junção","db.messages.exec.error-condition-must-be-boolean":"condição deve ser uma expressão booleana","db.messages.exec.error-func-not-defined-for-column-type":"{{func}} não definida para o tipo {{colType}}","db.messages.exec.error-join-would-produce-non-unique-columns":"a junção resultaria em nomes de coluna não únicos","db.messages.exec.error-no-columns-match-alias-star":"nenhuma coluna corresponde a \\"{{alias}}.*\\"","db.messages.exec.error-datatype-not-specified-for-col":"tipo de dados para a coluna {{index}} (\\"{{column}}\\") não foi especificado","db.messages.exec.error-invalid-projection-error":"projeção inválida \\"{{argument}}\\": {{erro}}","db.messages.exec.error-function-expects-type":"a função \\"{{func}}\\" espera argumentos do tipo \\"{{expected}}\\" mas \\"{{given}}\\" foi dado","db.messages.exec.error-could-not-compare-different-types":"não foi possível comparar o valor se os tipos forem diferentes: {{typeA}}! = {{typeB}}","db.messages.exec.error-function-expects-arguments-of-same-type":"{{func}} espera que todos os argumentos sejam do mesmo tipo","db.messages.exec.error-case-when-condition-must-be-boolean":"a condição de um CASE WHEN deve ser do tipo booleano","db.messages.exec.error-case-when-expects-results-of-same-type":" CASE WHEN condição THEN resultado END espera que todos os resultados sejam do mesmo tipo","db.messages.exec.error-invalid-date-format":"\\"{{str}}\\" não é uma data válida; formato esperado: YYYY-MM-DD","db.messages.translate.error-relation-not-found":"não foi possível encontrar relação \\"{{name}}\\"","db.messages.translate.warning-distinct-missing":"DISTINCT está faltando","db.messages.translate.warning-ignored-all-on-set-operators":"ignorou ALL na operação definida","db.messages.translate.error-variable-name-conflict":"conflito de nomes: o nome da relação \\"{{name}}\\" já existe","db.messages.translate.error-variable-cyclic-usage":"uso cíclico da variável \\"{{name}}\\" detectado","editor.codemirror-placeholder":"Digite sua consulta aqui\\n\\nAtalhos do teclado:\\n\\texecutar declaraçãot: [CTRL]+[RETURN]\\n\\texecutar seleção: [CTRL]+[SHIFT]+[RETURN]\\n\\tautocompletar: [CTRL]+[SPACE]\\n","editor.alert-message-headers.success":"Sucesso","editor.alert-message-headers.info":"Info","editor.alert-message-headers.warning":"Perigo","editor.alert-message-headers.error":"Erro","editor.inline-relation-editor.button-ok":"Ok","editor.inline-relation-editor.button-cancel":"Cancelar","editor.inline-relation-editor.placeholder-column-name-and-types":"columnName:type","editor.inline-relation-editor.enter-your-data":"por favor, insira seus dados","editor.inline-relation-editor.error-column-name-missing":"nome da coluna ausente na coluna {{index}}","editor.inline-relation-editor.error-wrong-quoted-string":"string não deve conter aspas simples e duplas","editor.error-no-query-found":"nenhuma consulta encontrada","editor.pegjs-error.or":"ou","editor.pegjs-error.no-input-found":"nenhuma entrada encontrada","editor.pegjs-error.end-of-input":"fim da entrada","editor.pegjs-error.expected-found":"esperado {{expected}}, mas {{found}} encontrado.","editor.error-at-line-x":"na linha {{line}}","calc.messages.error-query-missing":"nenhuma consulta encontrada","calc.messages.error-query-missing-assignments-found":"apenas atribuições encontradas; falta a consulta Ajuda - Tarefas ","calc.messages.gist-load-success":"gist carregado com sucesso","calc.menu.headline":"Carregue um Dataset","calc.menu.datasets":"Datasets","calc.menu.load-gist-headline":"Carregar Dataset armazenado em um gist","calc.menu.load-gist-button":"Carregar","calc.menu.load-gist-insert-placeholder":"gist ID","calc.menu.create-own-dataset-headline":"Crie seu próprio Dataset","calc.menu.create-own-dataset-text":"Você pode criar seu próprio conjunto de dados e compartilhá-lo com outras pessoas. Saiba mais sobre isso no ","calc.menu.create-own-dataset-text-link":"Tutorial de manutenção","calc.menu.create-own-dataset-button-new":"Criar novo Dataset","calc.menu.create-own-dataset-button-modify":"Modificar Dataset","calc.navigation.take-a-tour":"Faça um Tour","calc.navigation.feedback":"Feedback","calc.navigation.help":"Ajuda","calc.navigation.calc":"Calcular","calc.navigation.language":"Linguagem","calc.maintainer-groups.misc":"Diversos","calc.maintainer-groups.temp":"Temporário","calc.maintainer-groups.uibk":"University of Innsbruck","calc.maintainer-groups.saarland":"University of Saarland","calc.editors.button-history":"Histórico","calc.editors.insert-relation-title":"Inserir","calc.editors.insert-relation-tooltip":"Inserir relação ou nomes de coluna","calc.editors.group.tab-name":"Editor de Grupo","calc.editors.group.tab-name-short":"EG","calc.editors.group.toolbar.import-sql":"Importar SQL-dump","calc.editors.group.toolbar.import-sql-content":"Importar SQL-dump","calc.editors.group.toolbar.add-new-relation":"+ nova relação","calc.editors.group.toolbar.add-new-relation-content":"Abrir editor de relações","calc.editors.group.button-download":"Download","calc.editors.group.button-exec":"Visualizar","calc.editors.group.button-use":"Use Grupo no Editor","calc.editors.group.button-use_plural":"Use o primeiro Grupo no Editor","calc.editors.group.sql-import-group-name-placeholder":"Nome do grupo (importado de SQL)","calc.editors.group.new-group-example-group":"– este é um exemplo\\n\\ngroup: nomeDoNovoGrupo \\n\\n\\nA = {\\n\\ta:string, b:number\\n\\texemplo, 42\\n}","calc.editors.group.modal-sqldump.modal-title":"Importar SQL-dump","calc.editors.group.modal-sqldump.button-close":"Fechar","calc.editors.group.modal-sqldump.button-cancel":"Cancelar","calc.editors.group.modal-sqldump.button-import-sql":"Importar SQL","calc.editors.group.modal-sqldump.description":"Coloque seu SQL-Dump aqui para criar um grupo.","calc.editors.ra.tab-name":"Álgebra Relacional","calc.editors.ra.tab-name-short":"AlgRel","calc.editors.ra.button-execute-query":"Executar consulta","calc.editors.ra.button-execute-selection":"Executar seleção","calc.editors.ra.button-download":"Download","calc.editors.ra.toolbar.projection":"Projeção","calc.editors.ra.toolbar.projection-content":"π a, b ( A )\\n
              pi a, b A","calc.editors.ra.toolbar.selection":"Seleção","calc.editors.ra.toolbar.selection-content":"σ a < b ∧ b c ( A )\\n
              sigma a < b and b != c A","calc.editors.ra.toolbar.rename":"renomear relação / renomear colunas","calc.editors.ra.toolbar.rename-content":"
              σ x.a > 1 ( ρ x ( A ) )
              \\n
              σ A.y > 2 ( rho ya ( A ) )
              ","calc.editors.ra.toolbar.rename-columns-operator":"operador renomear colunas","calc.editors.ra.toolbar.rename-columns-operator-content":"
              σ A.y > 2 ( ρ ya ( A ) )
              ","calc.editors.ra.toolbar.orderBy":"ordenar (order by)","calc.editors.ra.toolbar.orderBy-content":"
              τ a asc, [2] desc ( A )
              tau a asc, [2] desc ( A )
              ","calc.editors.ra.toolbar.groupBy":"agrupar (group by)","calc.editors.ra.toolbar.groupBy-content":"
              γ a, b; count(c)→c ( A )
              \\n
              gamma count(a)->x, sum(b)->y ( A )
              ","calc.editors.ra.toolbar.and":"e","calc.editors.ra.toolbar.and-content":"
              σ a < b b c ( A )
              ","calc.editors.ra.toolbar.xor":"ou exclusivo (xor)","calc.editors.ra.toolbar.xor-content":"
              σ a < b b c ( A )
              ","calc.editors.ra.toolbar.or":"ou","calc.editors.ra.toolbar.or-content":"
              σ a < b b c ( A )
              ","calc.editors.ra.toolbar.not":"não","calc.editors.ra.toolbar.not-content":"
              &sigma","calc.editors.ra.toolbar.equals":"igual","calc.editors.ra.toolbar.equals-content":"
              &sigma","calc.editors.ra.toolbar.not-equals":"não igual","calc.editors.ra.toolbar.not-equals-content":"
              &sigma","calc.editors.ra.toolbar.greater-or-equals":"maior ou igual","calc.editors.ra.toolbar.greater-or-equals-content":"
              &sigma","calc.editors.ra.toolbar.lesser-or-equals":"menor ou igual","calc.editors.ra.toolbar.lesser-or-equals-content":"
              &sigma","calc.editors.ra.toolbar.intersect":"intersecção","calc.editors.ra.toolbar.intersect-content":"
              ( A ) ( B )
              ","calc.editors.ra.toolbar.union":"união","calc.editors.ra.toolbar.union-content":"
              ( A ) ( B )
              ","calc.editors.ra.toolbar.division":"divisão","calc.editors.ra.toolbar.division-content":"
              ( A ) ÷ ( B )
              ","calc.editors.ra.toolbar.subtraction":"subtração","calc.editors.ra.toolbar.subtraction-content":"
              ( A ) - ( B )
              \\n
              ( A ) \\n ( B )
              ","calc.editors.ra.toolbar.cross-join":"junção cruzada (cross join)","calc.editors.ra.toolbar.cross-join-content":"
              ( A ) ( B )
              ","calc.editors.ra.toolbar.natural-join":"natural join / θ-join","calc.editors.ra.toolbar.natural-join-content":"
              ( A ) ( B )
              \\n
              ( A ) ⋈ A.a ≥ B.a ( B )
              ","calc.editors.ra.toolbar.left-outer-join":"left outer join","calc.editors.ra.toolbar.left-outer-join-content":"
              ( A ) ⟕ ( B )
              \\n
              ( A ) ⟕ A.a < B.a ( B )
              \\n","calc.editors.ra.toolbar.right-outer-join":"right outer join","calc.editors.ra.toolbar.right-outer-join-content":"
              ( A ) ⟖ ( B )
              \\n
              ( A ) ⟖ A.a < B.a ( B )
              \\n","calc.editors.ra.toolbar.full-outer-join":"full outer join","calc.editors.ra.toolbar.full-outer-join-content":"
              ( A ) ⟗ ( B )
              \\n
              ( A ) ⟗ A.a != B.a ( B )
              ","calc.editors.ra.toolbar.left-semi-join":"left semi join","calc.editors.ra.toolbar.left-semi-join-content":"
              ( A ) ⋉ ( B )
              ","calc.editors.ra.toolbar.right-semi-join":"right semi join","calc.editors.ra.toolbar.right-semi-join-content":"
              ( A ) ⋊ ( B )
              ","calc.editors.ra.toolbar.anti-join":"anti join","calc.editors.ra.toolbar.anti-join-content":"
              ( A ) ▷ ( B )
              ","calc.editors.ra.toolbar.assignment":"atribuição","calc.editors.ra.toolbar.assignment-content":"
              X = pi a ( A )\\n
              Y = pi b ( b )\\n
              ( X ) ( Y )
              ","calc.editors.ra.toolbar.single-line-comment":"comentário em linha","calc.editors.ra.toolbar.single-line-comment-content":"π a, b A -- comentário útil","calc.editors.ra.toolbar.multi-line-comment":"comentário multilinha","calc.editors.ra.toolbar.multi-line-comment-content":"/* este é um comentário longo,
              muito longo*/

              π a, b A","calc.editors.ra.toolbar.inline-relation":"relação aninhada","calc.editors.ra.toolbar.inline-relation-content":"σ a = \'test\' ({
              a:string, b:number, X.c:date
              a, 1, 1970-01-01
              }
              )","calc.editors.ra.toolbar.inline-relation-editor":"relação aninhada (editor)","calc.editors.ra.toolbar.inline-relation-editor-content":"criar uma nova relação aninhada usando o editor","calc.editors.ra.toolbar.insert-date":"inserir data","calc.editors.ra.toolbar.insert-date-content":"σ a < date(\'1970-01-01\') ( A )","calc.editors.ra.toolbar.autoreplace-operators.title":"substituição de operador","calc.editors.ra.toolbar.autoreplace-operators.header":"substituir operadores automaticamente","calc.editors.ra.toolbar.autoreplace-operators.none":"sem substituição","calc.editors.ra.toolbar.autoreplace-operators.plain2math":"pi => π","calc.editors.ra.toolbar.autoreplace-operators.math2plain":"π => pi","calc.editors.sql.tab-name":"SQL","calc.editors.sql.tab-name-short":"SQL","calc.editors.sql.button-execute-query":"Executar consulta","calc.editors.sql.button-execute-selection":"Executar seleção","calc.editors.sql.button-download":"Download","calc.editors.sql.toolbar.select":"cláusula select","calc.editors.sql.toolbar.select-content":"

              SELECT * FROM A

              SELECT a, A.b, A.c FROM A
              ","calc.editors.sql.toolbar.from":"cláusula from","calc.editors.sql.toolbar.from-content":"
              SELECT *
              FROM A, B as b
              INNER JOIN C NATURAL
              ","calc.editors.sql.toolbar.where":"cláusula where","calc.editors.sql.toolbar.where-content":"SELECT * FROM A, B
              where A.a = B.a or false","calc.editors.sql.toolbar.group-by":"cláusula group by","calc.editors.sql.toolbar.group-by-content":"SELECT a, COUNT(b) as num
              FROM A
              GROUP BY a","calc.editors.sql.toolbar.having":"cáusula having clause","calc.editors.sql.toolbar.having-content":"SELECT a, SUM(b) as sum
              FROM A
              GROUP BY a
              having sum > 10","calc.editors.sql.toolbar.order-by":"cláusula order by","calc.editors.sql.toolbar.order-by-content":"

              SELECT * FROM A ORDER BY a asc, b desc

              SELECT * FROM A ORDER BY 1, 2, 3
              ","calc.editors.sql.toolbar.limit":"cláusula limit","calc.editors.sql.toolbar.limit-content":"SELECT * FROM A
              LIMIT 10 OFFSET 0","calc.editors.sql.toolbar.insert-date":"inserir data","calc.editors.sql.toolbar.insert-date-content":"select * from A\\nwhere a < date(\\"1970-01-01\\")","calc.result.modal.title":"Resultado","calc.result.modal.close":"Fechar","calc.editors.ra.inline-editor.title":"Editor de Relação","calc.editors.ra.inline-editor.button-download-csv":"Download CSV","calc.editors.ra.inline-editor.button-upload-csv":"Upload CSV","calc.editors.ra.inline-editor.button-cancel":"Cancelar","calc.editors.ra.inline-editor.button-ok":"Ok","calc.editors.ra.inline-editor.row-name":"Nome","calc.editors.ra.inline-editor.row-type":"Tipo","calc.editors.ra.inline-editor.input-relation-name":"Nome da Relação","calc.navigation.imprint":"Impressão"}')},0:function(e,t,n){e.exports=n("./src/calc2/calculator.entry.tsx")}}); \ No newline at end of file diff --git a/js/calc.b61e25e429566c9e70cd.bundle.js.gz b/js/calc.75808e4b525444cf6e03.bundle.js.gz similarity index 88% rename from js/calc.b61e25e429566c9e70cd.bundle.js.gz rename to js/calc.75808e4b525444cf6e03.bundle.js.gz index 30ae90674382f0c76a8299d576b6e3a0315650e6..16f2128db8c33554a011f1e39ce90a7087da87b9 100644 GIT binary patch delta 85387 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 diff --git a/js/tests.b61e25e429566c9e70cd.bundle.js b/js/tests.75808e4b525444cf6e03.bundle.js similarity index 100% rename from js/tests.b61e25e429566c9e70cd.bundle.js rename to js/tests.75808e4b525444cf6e03.bundle.js diff --git a/js/tests.b61e25e429566c9e70cd.bundle.js.gz b/js/tests.75808e4b525444cf6e03.bundle.js.gz similarity index 100% rename from js/tests.b61e25e429566c9e70cd.bundle.js.gz rename to js/tests.75808e4b525444cf6e03.bundle.js.gz diff --git a/test.html b/test.html index a6a672534..e1de4aad9 100644 --- a/test.html +++ b/test.html @@ -11,9 +11,9 @@ License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - +

              - + diff --git a/test.html.gz b/test.html.gz index 23f80adc3cb1997fa64b8424e7a1321adefcf8d3..b008496fcdb97557ec98fd9e0606455c037cf623 100644 GIT binary patch delta 408 zcmV;J0cZZD1EvFz7=KxobirollC8kD4hyjC(4#EVwK7>sMLJFP^<(TdmjMF=P<$dE z$ww78pMGq158Kbsa_866;?8UIOJ!qV44m=# zfC^r`QZb%bU+6x9ZA~KN^4IPzTd9GC9eZ3e5>uf^N6?!rgMaB{vWbUta*r*;eD?Mh zzQ)#sfCS%=$YYWSIlI;o{EU6F2%A_V+{M&^VANN8v~-D z)&z(Z8z&|p7=Iq5`k-|;R?cI3)IzDHn9gO`EEBoC3%_4wPUy`^56a~4m#f(d7u9mU zTr3v0xy9ML+!85}s8SK1JyMIvYF+4YXGIn3^F_Gf zAe-Dl#FJ&d>~L?6W<(WGvey>(^uI2vKGYubJzc2BbP>6X%@un5W`6-O!3~6d0ssJ` C4#*$? delta 407 zcmV;I0cifF1Em9y7=LN7X6t6>lC8kD4hyjC(4#EVwK7F=MLLc5^<(TdmjMF=P<$dE z$ww7epMGq158Kbs^1-j?#j8P6ujjL(GKA13Y)YjS=reRcHWJNUhEKgamdeJ!7&zmh zLj^BhsTfbJ&vYNbwk8pB`D=HVy;ma(JNCF{B&I@7j-Xdr27mL}Y!ka7xyP1axwu}z z*Vvj6kl-5a2Edxj37J)Gx2x2oj-{T+Wy@73C zd1r;?-dPNUZ{V22GGFBIr2!*Dbi*ZOdk@csAVh}R5hqvmj5RzvZY98xur$sK#Y61D zngFq4Y*2`}#j z+2lGAPnP+z!@W702~|MJURvDK|GKRDP