add support for OpenLayers.Filter.Comparison.IS_NULL in OpenLayers.Format.CQL
This commit is contained in:
@@ -28,6 +28,7 @@ OpenLayers.Format.CQL = (function() {
|
||||
patterns = {
|
||||
PROPERTY: /^[_a-zA-Z]\w*/,
|
||||
COMPARISON: /^(=|<>|<=|<|>=|>|LIKE)/i,
|
||||
IS_NULL: /^IS NULL/i,
|
||||
COMMA: /^,/,
|
||||
LOGICAL: /^(AND|OR)/i,
|
||||
VALUE: /^('\w+'|\d+(\.\d*)?|\.\d+)/,
|
||||
@@ -66,8 +67,9 @@ OpenLayers.Format.CQL = (function() {
|
||||
follows = {
|
||||
LPAREN: ['GEOMETRY', 'SPATIAL', 'PROPERTY', 'VALUE', 'LPAREN'],
|
||||
RPAREN: ['NOT', 'LOGICAL', 'END', 'RPAREN'],
|
||||
PROPERTY: ['COMPARISON', 'BETWEEN', 'COMMA'],
|
||||
PROPERTY: ['COMPARISON', 'BETWEEN', 'COMMA', 'IS_NULL'],
|
||||
BETWEEN: ['VALUE'],
|
||||
IS_NULL: ['END'],
|
||||
COMPARISON: ['VALUE'],
|
||||
COMMA: ['GEOMETRY', 'VALUE', 'PROPERTY'],
|
||||
VALUE: ['LOGICAL', 'COMMA', 'RPAREN', 'END'],
|
||||
@@ -85,7 +87,8 @@ OpenLayers.Format.CQL = (function() {
|
||||
'>': OpenLayers.Filter.Comparison.GREATER_THAN,
|
||||
'>=': OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO,
|
||||
'LIKE': OpenLayers.Filter.Comparison.LIKE,
|
||||
'BETWEEN': OpenLayers.Filter.Comparison.BETWEEN
|
||||
'BETWEEN': OpenLayers.Filter.Comparison.BETWEEN,
|
||||
'IS NULL': OpenLayers.Filter.Comparison.IS_NULL
|
||||
},
|
||||
|
||||
operatorReverse = {},
|
||||
@@ -181,6 +184,7 @@ OpenLayers.Format.CQL = (function() {
|
||||
break;
|
||||
case "COMPARISON":
|
||||
case "BETWEEN":
|
||||
case "IS_NULL":
|
||||
case "LOGICAL":
|
||||
var p = precedence[tok.type];
|
||||
|
||||
@@ -257,6 +261,12 @@ OpenLayers.Format.CQL = (function() {
|
||||
value: value,
|
||||
type: operators[tok.text.toUpperCase()]
|
||||
});
|
||||
case "IS_NULL":
|
||||
var property = buildTree();
|
||||
return new OpenLayers.Filter.Comparison({
|
||||
property: property,
|
||||
type: operators[tok.text.toUpperCase()]
|
||||
});
|
||||
case "VALUE":
|
||||
if ((/^'.*'$/).test(tok.text)) {
|
||||
return tok.text.substr(1, tok.text.length - 2);
|
||||
@@ -418,10 +428,10 @@ OpenLayers.Format.CQL = (function() {
|
||||
this.write(filter.lowerBoundary) + " AND " +
|
||||
this.write(filter.upperBoundary);
|
||||
} else {
|
||||
|
||||
return filter.property +
|
||||
return (filter.value !== null) ? filter.property +
|
||||
" " + operatorReverse[filter.type] + " " +
|
||||
this.write(filter.value);
|
||||
this.write(filter.value) : filter.property +
|
||||
" " + operatorReverse[filter.type];
|
||||
}
|
||||
case undefined:
|
||||
if (typeof filter === "string") {
|
||||
|
||||
Reference in New Issue
Block a user