From: Jakub Skoczen Date: Wed, 17 Oct 2012 13:30:39 +0000 (+0200) Subject: Generate fullquery represenation X-Git-Url: http://git.indexdata.com/?p=cql-js-moved-to-github.git;a=commitdiff_plain;h=549d7685dd4fe9ac422f0cbfdee3d0c604ad7173;hp=cd76a02fa7708af69ae855ec0e036e9c49ea78bd Generate fullquery represenation FQ representation is lossy and used only for rendering a subset of CQL --- diff --git a/cql.js b/cql.js index 3e4f6d1..ebd878e 100644 --- a/cql.js +++ b/cql.js @@ -23,8 +23,17 @@ CQLModifier.prototype = { + "" + this.value +"\n"; s = s + indent(n+1) + "\n"; return s; + }, + + toFQ: function () { + //we ignore modifier relation symbol, for value-less modifiers + //we assume 'true' + var value = this.value.length > 0 ? this.value : "true"; + var s = '"'+this.name+'": "'+value+'"'; + return s; } } + // CQLSearchClause var CQLSearchClause = function (field, fielduri, relation, relationuri, modifiers, term) { @@ -65,7 +74,38 @@ CQLSearchClause.prototype = { s = s + indent(n+1) + "" + this.term + "\n"; s = s + indent(n) + "\n"; return s; + }, + + toFQ: function () { + var s = '{ "term": "'+this.term+'"'; + if (this.field.length > 0 && this.field != 'cql.serverChoice') + s+= ', "field": "'+this.field+'"'; + if (this.relation.length > 0 && this.relation != 'scr') + s+= ', "relation": "'+this._mapRelation(this.relation)+'"'; + for (var i = 0; i < this.modifiers.length; i++) { + //since modifiers are mapped to keys, ignore the reserved ones + if (this.modifiers[i].name == "term" + ||this.modifiers[i].name == "field" + ||this.modifiers[i].name == "relation") + continue; + s += ', ' + this.modifiers[i].toFQ(); + } + s += ' }'; + return s; + }, + + _mapRelation: function (rel) { + switch(rel) { + case "<" : return "lt"; + case ">" : return "gt"; + case "=" : return "eq"; + case "<>" : return "ne"; + case ">=" : return "ge"; + case "<=" : return "le"; + default: return rel; + } } + } // CQLBoolean var CQLBoolean = function() { @@ -94,7 +134,19 @@ CQLBoolean.prototype = { this.right.toXCQL(n+2) + indent(n+1) + "\n"; s = s + indent(n) + "\n"; return s; + }, + + toFQ: function () { + var s = ' { "op": "'+this.op+'"'; + //proximity modifiers + for (var i = 0; i < this.modifiers.length; i++) + s += ', ' + this.modifiers[i].toFQ(); + s += ', "s1": '+this.left.toFQ(); + s += ', "s2": '+this.right.toFQ(); + s += ' }' + return s; } + } // CQLParser var CQLParser = function () { @@ -124,6 +176,9 @@ CQLParser.prototype = { toXCQL: function () { return this.tree.toXCQL(); }, + toFQ: function () { + return this.tree.toFQ(); + }, _parseQuery: function(field, relation, modifiers) { var left = this._parseSearchClause(field, relation, modifiers); while (this.look == "s" && ( diff --git a/index.html b/index.html index 0e2e883..1024e5b 100644 --- a/index.html +++ b/index.html @@ -8,8 +8,11 @@ try { cp.parse(query); document.getElementById("output").value = cp.toXCQL(); + document.getElementById("output2").value = cp.toFQ(); } catch (e) { document.getElementById("output").value = e.message; + document.getElementById("output2").value = e.message; + throw e; } } @@ -26,6 +29,7 @@
+