UNPKG

ng-tql

Version:

A domain specific language that extends SQL and allows visual metaprogramming

1 lines 14 kB
"use strict";function peg$subclass(e,r){function t(){this.constructor=e}t.prototype=r.prototype;e.prototype=new t}function peg$SyntaxError(e,r,t,i){this.message=e;this.expected=r;this.found=t;this.location=i;this.name="SyntaxError";if(typeof Error.captureStackTrace==="function"){Error.captureStackTrace(this,peg$SyntaxError)}}peg$subclass(peg$SyntaxError,Error);peg$SyntaxError.buildMessage=function(e,r){var t={literal:function(e){return'"'+n(e.text)+'"'},"class":function(e){var r="",t;for(t=0;t<e.parts.length;t++){r+=e.parts[t]instanceof Array?f(e.parts[t][0])+"-"+f(e.parts[t][1]):f(e.parts[t])}return"["+(e.inverted?"^":"")+r+"]"},any:function(e){return"any character"},end:function(e){return"end of input"},other:function(e){return e.description}};function i(e){return e.charCodeAt(0).toString(16).toUpperCase()}function n(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,function(e){return"\\x0"+i(e)}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(e){return"\\x"+i(e)})}function f(e){return e.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,function(e){return"\\x0"+i(e)}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(e){return"\\x"+i(e)})}function s(e){return t[e.type](e)}function u(e){var r=new Array(e.length),t,i;for(t=0;t<e.length;t++){r[t]=s(e[t])}r.sort();if(r.length>0){for(t=1,i=1;t<r.length;t++){if(r[t-1]!==r[t]){r[i]=r[t];i++}}r.length=i}switch(r.length){case 1:return r[0];case 2:return r[0]+" or "+r[1];default:return r.slice(0,-1).join(", ")+", or "+r[r.length-1]}}function l(e){return e?'"'+n(e)+'"':"end of input"}return"Expected "+u(e)+" but "+l(r)+" found."};function peg$parse(e,r){r=r!==void 0?r:{};var t={},i={TQLCode:lr},n=lr,f=tr("TQL code"),s=function(e){var r=e.map(Lr);Cr(r);return r},u=tr("field declaration"),l="declare",a=Ye("declare",true),o=function(e,r,t,i,n){return{kind:"FieldDecl",name:e,type:r,picture:t,value:i,description:n}},c=tr("identifier"),p=/^[_a-z]/i,h=Ze(["_",["a","z"]],false,true),g=/^[_a-z0-9]/i,v=Ze(["_",["a","z"],["0","9"]],false,true),b=function(e,r){return[e].concat(r).join("")},y=tr("assignment"),d=":=",w=Ye(":=",false),A=function(e){return e},m=tr("type declaration"),C=":",x=Ye(":",false),E=function(e){return e},L=tr("type"),S="int",k=Ye("int",true),$=function(){return["int"]},F="varchar",z=Ye("varchar",true),T=function(){return["varchar"]},j="date",R=Ye("date",true),_=function(){return["date"]},M="nat",Q=Ye("nat",true),D=function(){return["nat"]},I="bool",O=Ye("bool",true),U=function(){return["bool"]},V="symbol",q=Ye("symbol",true),B=function(){return["symbol"]},G="char",H=Ye("char",true),J="(",K=Ye("(",false),N=")",P=Ye(")",false),W=function(e){return["char",{size:e}]},X="range",Y=Ye("range",true),Z=",",ee=Ye(",",false),re=function(e,r){return["range",{from:e,to:r}]},te=tr("picture"),ie="picture",ne=Ye("picture",true),fe=function(e){return e},se=tr("value"),ue=function(e){return{type:"number",value:e}},le=function(e){return{type:"symbol",value:e}},ae=function(e){return{type:"string",value:e}},oe=function(e){return{type:"bool",value:e}},ce=tr("number"),pe=/^[+\-]/,he=Ze(["+","-"],false,false),ge=/^[0-9]/,ve=Ze([["0","9"]],false,false),be=function(e,r){return parseInt((e||"")+r.join(""),10)},ye=tr("string"),de="'",we=Ye("'",false),Ae=er(),me=function(e){return e},Ce=function(e){return e.join("")},xe=tr("bool"),Ee=".t.",Le=Ye(".t.",true),Se=function(){return true},ke=".f.",$e=Ye(".f.",true),Fe=function(){return false},ze=tr("description"),Te="{",je=Ye("{",false),Re="}",_e=Ye("}",false),Me=function(e){return e},Qe=function(e){return e.join("").trim()},De=tr("optional whitespace"),Ie=/^[ \t\r\n]/,Oe=Ze([" "," ","\r","\n"],false,false),Ue=tr("obligatory whitespace"),Ve=0,qe=0,Be=[{line:1,column:1}],Ge=0,He=[],Je=0,Ke;if("startRule"in r){if(!(r.startRule in i)){throw new Error("Can't start parsing from rule \""+r.startRule+'".')}n=i[r.startRule]}function Ne(){return e.substring(qe,Ve)}function Pe(){return nr(qe,Ve)}function We(r,t){t=t!==void 0?t:nr(qe,Ve);throw ur([tr(r)],e.substring(qe,Ve),t)}function Xe(e,r){r=r!==void 0?r:nr(qe,Ve);throw sr(e,r)}function Ye(e,r){return{type:"literal",text:e,ignoreCase:r}}function Ze(e,r,t){return{type:"class",parts:e,inverted:r,ignoreCase:t}}function er(){return{type:"any"}}function rr(){return{type:"end"}}function tr(e){return{type:"other",description:e}}function ir(r){var t=Be[r],i;if(t){return t}else{i=r-1;while(!Be[i]){i--}t=Be[i];t={line:t.line,column:t.column};while(i<r){if(e.charCodeAt(i)===10){t.line++;t.column=1}else{t.column++}i++}Be[r]=t;return t}}function nr(e,r){var t=ir(e),i=ir(r);return{start:{offset:e,line:t.line,column:t.column},end:{offset:r,line:i.line,column:i.column}}}function fr(e){if(Ve<Ge){return}if(Ve>Ge){Ge=Ve;He=[]}He.push(e)}function sr(e,r){return new peg$SyntaxError(e,null,null,r)}function ur(e,r,t){return new peg$SyntaxError(peg$SyntaxError.buildMessage(e,r),e,r,t)}function lr(){var e,r,i;Je++;e=Ve;r=[];i=ar();while(i!==t){r.push(i);i=ar()}if(r!==t){i=Ar();if(i!==t){qe=e;r=s(r);e=r}else{Ve=e;e=t}}else{Ve=e;e=t}Je--;if(e===t){r=t;if(Je===0){fr(f)}}return e}function ar(){var r,i,n,f,s,c,p,h,g;Je++;r=Ve;i=Ar();if(i!==t){if(e.substr(Ve,7).toLowerCase()===l){n=e.substr(Ve,7);Ve+=7}else{n=t;if(Je===0){fr(a)}}if(n!==t){f=mr();if(f!==t){s=or();if(s!==t){c=pr();if(c===t){c=null}if(c!==t){p=gr();if(p===t){p=null}if(p!==t){h=cr();if(h===t){h=null}if(h!==t){g=wr();if(g===t){g=null}if(g!==t){qe=r;i=o(s,c,p,h,g);r=i}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}Je--;if(r===t){i=t;if(Je===0){fr(u)}}return r}function or(){var r,i,n,f;Je++;r=Ve;if(p.test(e.charAt(Ve))){i=e.charAt(Ve);Ve++}else{i=t;if(Je===0){fr(h)}}if(i!==t){n=[];if(g.test(e.charAt(Ve))){f=e.charAt(Ve);Ve++}else{f=t;if(Je===0){fr(v)}}while(f!==t){n.push(f);if(g.test(e.charAt(Ve))){f=e.charAt(Ve);Ve++}else{f=t;if(Je===0){fr(v)}}}if(n!==t){qe=r;i=b(i,n);r=i}else{Ve=r;r=t}}else{Ve=r;r=t}Je--;if(r===t){i=t;if(Je===0){fr(c)}}return r}function cr(){var r,i,n,f,s;Je++;r=Ve;i=Ar();if(i!==t){if(e.substr(Ve,2)===d){n=d;Ve+=2}else{n=t;if(Je===0){fr(w)}}if(n!==t){f=Ar();if(f!==t){s=vr();if(s!==t){qe=r;i=A(s);r=i}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}Je--;if(r===t){i=t;if(Je===0){fr(y)}}return r}function pr(){var r,i,n,f,s;Je++;r=Ve;i=Ar();if(i!==t){if(e.charCodeAt(Ve)===58){n=C;Ve++}else{n=t;if(Je===0){fr(x)}}if(n!==t){f=Ar();if(f!==t){s=hr();if(s!==t){qe=r;i=E(s);r=i}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}Je--;if(r===t){i=t;if(Je===0){fr(m)}}return r}function hr(){var r,i,n,f,s,u,l,a,o,c,p,h;Je++;r=Ve;if(e.substr(Ve,3).toLowerCase()===S){i=e.substr(Ve,3);Ve+=3}else{i=t;if(Je===0){fr(k)}}if(i!==t){qe=r;i=$()}r=i;if(r===t){r=Ve;if(e.substr(Ve,7).toLowerCase()===F){i=e.substr(Ve,7);Ve+=7}else{i=t;if(Je===0){fr(z)}}if(i!==t){qe=r;i=T()}r=i;if(r===t){r=Ve;if(e.substr(Ve,4).toLowerCase()===j){i=e.substr(Ve,4);Ve+=4}else{i=t;if(Je===0){fr(R)}}if(i!==t){qe=r;i=_()}r=i;if(r===t){r=Ve;if(e.substr(Ve,3).toLowerCase()===M){i=e.substr(Ve,3);Ve+=3}else{i=t;if(Je===0){fr(Q)}}if(i!==t){qe=r;i=D()}r=i;if(r===t){r=Ve;if(e.substr(Ve,4).toLowerCase()===I){i=e.substr(Ve,4);Ve+=4}else{i=t;if(Je===0){fr(O)}}if(i!==t){qe=r;i=U()}r=i;if(r===t){r=Ve;if(e.substr(Ve,6).toLowerCase()===V){i=e.substr(Ve,6);Ve+=6}else{i=t;if(Je===0){fr(q)}}if(i!==t){qe=r;i=B()}r=i;if(r===t){r=Ve;if(e.substr(Ve,4).toLowerCase()===G){i=e.substr(Ve,4);Ve+=4}else{i=t;if(Je===0){fr(H)}}if(i!==t){n=Ar();if(n!==t){if(e.charCodeAt(Ve)===40){f=J;Ve++}else{f=t;if(Je===0){fr(K)}}if(f!==t){s=Ar();if(s!==t){u=br();if(u!==t){l=Ar();if(l!==t){if(e.charCodeAt(Ve)===41){a=N;Ve++}else{a=t;if(Je===0){fr(P)}}if(a!==t){qe=r;i=W(u);r=i}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}if(r===t){r=Ve;if(e.substr(Ve,5).toLowerCase()===X){i=e.substr(Ve,5);Ve+=5}else{i=t;if(Je===0){fr(Y)}}if(i!==t){n=Ar();if(n!==t){if(e.charCodeAt(Ve)===40){f=J;Ve++}else{f=t;if(Je===0){fr(K)}}if(f!==t){s=Ar();if(s!==t){u=br();if(u!==t){l=Ar();if(l!==t){if(e.charCodeAt(Ve)===44){a=Z;Ve++}else{a=t;if(Je===0){fr(ee)}}if(a!==t){o=Ar();if(o!==t){c=br();if(c!==t){p=Ar();if(p!==t){if(e.charCodeAt(Ve)===41){h=N;Ve++}else{h=t;if(Je===0){fr(P)}}if(h!==t){qe=r;i=re(u,c);r=i}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}}}}}}}}Je--;if(r===t){i=t;if(Je===0){fr(L)}}return r}function gr(){var r,i,n,f,s;Je++;r=Ve;i=Ar();if(i!==t){if(e.substr(Ve,7).toLowerCase()===ie){n=e.substr(Ve,7);Ve+=7}else{n=t;if(Je===0){fr(ne)}}if(n!==t){f=mr();if(f!==t){s=yr();if(s!==t){qe=r;i=fe(s);r=i}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}Je--;if(r===t){i=t;if(Je===0){fr(te)}}return r}function vr(){var e,r;Je++;e=Ve;r=br();if(r!==t){qe=e;r=ue(r)}e=r;if(e===t){e=Ve;r=or();if(r!==t){qe=e;r=le(r)}e=r;if(e===t){e=Ve;r=yr();if(r!==t){qe=e;r=ae(r)}e=r;if(e===t){e=Ve;r=dr();if(r!==t){qe=e;r=oe(r)}e=r}}}Je--;if(e===t){r=t;if(Je===0){fr(se)}}return e}function br(){var r,i,n,f;Je++;r=Ve;if(pe.test(e.charAt(Ve))){i=e.charAt(Ve);Ve++}else{i=t;if(Je===0){fr(he)}}if(i===t){i=null}if(i!==t){n=[];if(ge.test(e.charAt(Ve))){f=e.charAt(Ve);Ve++}else{f=t;if(Je===0){fr(ve)}}if(f!==t){while(f!==t){n.push(f);if(ge.test(e.charAt(Ve))){f=e.charAt(Ve);Ve++}else{f=t;if(Je===0){fr(ve)}}}}else{n=t}if(n!==t){qe=r;i=be(i,n);r=i}else{Ve=r;r=t}}else{Ve=r;r=t}Je--;if(r===t){i=t;if(Je===0){fr(ce)}}return r}function yr(){var r,i,n,f,s,u;Je++;r=Ve;if(e.charCodeAt(Ve)===39){i=de;Ve++}else{i=t;if(Je===0){fr(we)}}if(i!==t){n=[];f=Ve;s=Ve;Je++;if(e.charCodeAt(Ve)===39){u=de;Ve++}else{u=t;if(Je===0){fr(we)}}Je--;if(u===t){s=void 0}else{Ve=s;s=t}if(s!==t){if(e.length>Ve){u=e.charAt(Ve);Ve++}else{u=t;if(Je===0){fr(Ae)}}if(u!==t){qe=f;s=me(u);f=s}else{Ve=f;f=t}}else{Ve=f;f=t}while(f!==t){n.push(f);f=Ve;s=Ve;Je++;if(e.charCodeAt(Ve)===39){u=de;Ve++}else{u=t;if(Je===0){fr(we)}}Je--;if(u===t){s=void 0}else{Ve=s;s=t}if(s!==t){if(e.length>Ve){u=e.charAt(Ve);Ve++}else{u=t;if(Je===0){fr(Ae)}}if(u!==t){qe=f;s=me(u);f=s}else{Ve=f;f=t}}else{Ve=f;f=t}}if(n!==t){if(e.charCodeAt(Ve)===39){f=de;Ve++}else{f=t;if(Je===0){fr(we)}}if(f!==t){qe=r;i=Ce(n);r=i}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}Je--;if(r===t){i=t;if(Je===0){fr(ye)}}return r}function dr(){var r,i;Je++;r=Ve;if(e.substr(Ve,3).toLowerCase()===Ee){i=e.substr(Ve,3);Ve+=3}else{i=t;if(Je===0){fr(Le)}}if(i!==t){qe=r;i=Se()}r=i;if(r===t){r=Ve;if(e.substr(Ve,3).toLowerCase()===ke){i=e.substr(Ve,3);Ve+=3}else{i=t;if(Je===0){fr($e)}}if(i!==t){qe=r;i=Fe()}r=i}Je--;if(r===t){i=t;if(Je===0){fr(xe)}}return r}function wr(){var r,i,n,f,s,u,l;Je++;r=Ve;i=Ar();if(i!==t){if(e.charCodeAt(Ve)===123){n=Te;Ve++}else{n=t;if(Je===0){fr(je)}}if(n!==t){f=[];s=Ve;u=Ve;Je++;if(e.charCodeAt(Ve)===125){l=Re;Ve++}else{l=t;if(Je===0){fr(_e)}}Je--;if(l===t){u=void 0}else{Ve=u;u=t}if(u!==t){if(e.length>Ve){l=e.charAt(Ve);Ve++}else{l=t;if(Je===0){fr(Ae)}}if(l!==t){qe=s;u=Me(l);s=u}else{Ve=s;s=t}}else{Ve=s;s=t}while(s!==t){f.push(s);s=Ve;u=Ve;Je++;if(e.charCodeAt(Ve)===125){l=Re;Ve++}else{l=t;if(Je===0){fr(_e)}}Je--;if(l===t){u=void 0}else{Ve=u;u=t}if(u!==t){if(e.length>Ve){l=e.charAt(Ve);Ve++}else{l=t;if(Je===0){fr(Ae)}}if(l!==t){qe=s;u=Me(l);s=u}else{Ve=s;s=t}}else{Ve=s;s=t}}if(f!==t){if(e.charCodeAt(Ve)===125){s=Re;Ve++}else{s=t;if(Je===0){fr(_e)}}if(s!==t){u=Ar();if(u!==t){qe=r;i=Qe(f);r=i}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}}else{Ve=r;r=t}Je--;if(r===t){i=t;if(Je===0){fr(ze)}}return r}function Ar(){var r,i;Je++;r=[];if(Ie.test(e.charAt(Ve))){i=e.charAt(Ve);Ve++}else{i=t;if(Je===0){fr(Oe)}}while(i!==t){r.push(i);if(Ie.test(e.charAt(Ve))){i=e.charAt(Ve);Ve++}else{i=t;if(Je===0){fr(Oe)}}}Je--;if(r===t){i=t;if(Je===0){fr(De)}}return r}function mr(){var r,i;Je++;r=[];if(Ie.test(e.charAt(Ve))){i=e.charAt(Ve);Ve++}else{i=t;if(Je===0){fr(Oe)}}if(i!==t){while(i!==t){r.push(i);if(Ie.test(e.charAt(Ve))){i=e.charAt(Ve);Ve++}else{i=t;if(Je===0){fr(Oe)}}}}else{r=t}Je--;if(r===t){i=t;if(Je===0){fr(Ue)}}return r}var Cr=function(e){var r=[];e.forEach(function(e){if(r.indexOf(e.name)!==-1){throw new Error("Field `"+e.name+"' declared twice")}r.push(e.name)});return e};var xr=function(e){switch(e.value.type){case"number":return"number("+e.value.value+")";case"string":return"string("+e.value.value.length+")";default:return e.value.value.toString()}};var Er=function(e){switch(e[0]){case"char":return"varchar("+e[1].size+")";case"range":return"range("+e[1].from+", "+e[1].to+")";default:return e[0]}};var Lr=function(e){if(null===e.type&&null===e.value){throw new TypeError("Cannot infer type of free variable "+e.name)}if(null===e.value&&null!==e.type){return e}if(null===e.type&&null!==e.value){switch(e.value.type){case"number":e.type=["int"];break;case"symbol":e.type=["symbol"];break;case"string":e.type=["varchar"];break;case"bool":e.type=["bool"];break}return e}switch(e.type[0]){case"int":if("number"===e.value.type){return e}break;case"varchar":if("string"===e.value.type){return e}break;case"nat":if("number"===e.value.type&&e.value.value>=0){return e}break;case"bool":if("bool"===e.value.type){return e}break;case"symbol":if("symbol"===e.value.type){return e}break;case"char":if("string"===e.value.type&&e.value.value.length<=e.type[1].size){return e}break;case"range":if("number"===e.value.type&&e.value.value>=e.type[1].from&&e.value.value<=e.type[1].to){return e}}throw new TypeError("Value of type `"+xr(e)+"' is not "+"assignable to field of type `"+Er(e.type)+"'")};Ke=n();if(Ke!==t&&Ve===e.length){return Ke}else{if(Ke!==t&&Ve<e.length){fr(rr())}throw ur(He,Ge<e.length?e.charAt(Ge):null,Ge<e.length?nr(Ge,Ge+1):nr(Ge,Ge))}}module.exports={SyntaxError:peg$SyntaxError,parse:peg$parse};