X-Git-Url: http://git.indexdata.com/?p=cql-js-moved-to-github.git;a=blobdiff_plain;f=cql.js;fp=cql.js;h=ebd878e71de519ce95f0fe9e0ff312cd950754a4;hp=3e4f6d177cb399db8f714f1684119fabc187c0f1;hb=549d7685dd4fe9ac422f0cbfdee3d0c604ad7173;hpb=cd76a02fa7708af69ae855ec0e036e9c49ea78bd 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" && (