Skip to content

Commit 929c138

Browse files
authored
Merge pull request #25 from hwbllmnn/fix-write
Fixes a couple of filter writing issues
2 parents ac83514 + 83e970d commit 929c138

2 files changed

Lines changed: 41 additions & 16 deletions

File tree

src/CqlParser.spec.ts

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ describe('CqlParser', () => {
2727
const got = cqlParser.read(cqlFilter);
2828
expect(got).toEqual(['==', 'Name', 'Peter']);
2929
});
30+
it('can read number Comparison Filters', () => {
31+
const cqlFilter = 'Age = 12.3';
32+
const got = cqlParser.read(cqlFilter);
33+
expect(got).toEqual(['==', 'Age', 12.3]);
34+
});
3035
it('can read Strings with quotation marks Comparison Filters', () => {
3136
const cqlFilter1 = `Name = "Peter"`;
3237
const cqlFilter2 = `Name = 'Peter'`;
@@ -63,6 +68,26 @@ describe('CqlParser', () => {
6368
]
6469
);
6570
});
71+
it('can read Combination Filters with parens', () => {
72+
const cqlFilter1 = '( Age = 12 AND Name = Peter )';
73+
const cqlFilter2 = '( Name = "Peter Schmidt" OR Height = 1.75 )';
74+
const got1 = cqlParser.read(cqlFilter1);
75+
const got2 = cqlParser.read(cqlFilter2);
76+
expect(got1).toEqual(
77+
[
78+
'&&',
79+
['==', 'Age', 12],
80+
['==', 'Name', 'Peter']
81+
]
82+
);
83+
expect(got2).toEqual(
84+
[
85+
'||',
86+
['==', 'Name', 'Peter Schmidt'],
87+
['==', 'Height', 1.75]
88+
]
89+
);
90+
});
6691
});
6792

6893
describe('#write', () => {
@@ -80,7 +105,7 @@ describe('CqlParser', () => {
80105
it('can write String Comparison Filters', () => {
81106
const geoStylerFilter = ['==', 'Name', 'Peter'];
82107
const got = cqlParser.write(geoStylerFilter);
83-
expect(got).toEqual('Name = Peter');
108+
expect(got).toEqual('Name = \'Peter\'');
84109
});
85110
it('can write Number Comparison Filters', () => {
86111
const geoStylerFilter1 = ['==', 'Age', 12];
@@ -102,12 +127,23 @@ describe('CqlParser', () => {
102127
['==', 'Name', 'Peter Schmidt'],
103128
['==', 'Height', 1.75]
104129
];
105-
const cqlFilter1 = 'Age = 12 AND Name = Peter';
130+
const cqlFilter1 = 'Age = 12 AND Name = \'Peter\'';
106131
const cqlFilter2 = 'Name = \'Peter Schmidt\' OR Height = 1.75';
107132
const got1 = cqlParser.write(geoStylerFilter1);
108133
const got2 = cqlParser.write(geoStylerFilter2);
109134
expect(got1).toEqual(cqlFilter1);
110135
expect(got2).toEqual(cqlFilter2);
111136
});
137+
it('can write multiple Combination Filters', () => {
138+
const geoStylerFilter1 = [
139+
'&&',
140+
['==', 'Age', 12],
141+
['==', 'Name', 'Peter'],
142+
['==', 'Car', 'Bentley']
143+
];
144+
const cqlFilter1 = 'Age = 12 AND Name = \'Peter\' AND Car = \'Bentley\'';
145+
const got1 = cqlParser.write(geoStylerFilter1);
146+
expect(got1).toEqual(cqlFilter1);
147+
});
112148
});
113149
});

src/CqlParser.ts

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ export class CqlParser {
150150
tryToken(text: any, pattern: Pattern) {
151151
if (pattern instanceof RegExp) {
152152
return pattern.exec(text);
153-
} else {
153+
} else if (pattern) {
154154
return pattern(text);
155155
}
156156
}
@@ -360,15 +360,7 @@ export class CqlParser {
360360
case '||':
361361
let cqlFilter: string = '';
362362
const cqlCombinationOperator = combinationOperatorsReverseMap[operator];
363-
filter.forEach((filterElement, index: number) => {
364-
if (index > 0) {
365-
if (index === 1) {
366-
cqlFilter += `${write(filter[index])} `;
367-
} else {
368-
cqlFilter += `${cqlCombinationOperator} ${write(filter[index])}`;
369-
}
370-
}
371-
});
363+
cqlFilter += filter.slice(1).map(write).join(` ${cqlCombinationOperator} `);
372364
return cqlFilter;
373365
case '==':
374366
case '*=':
@@ -380,10 +372,7 @@ export class CqlParser {
380372
const valueIsString = _isString(filter[2]);
381373
let value = filter[2];
382374
if (valueIsString) {
383-
const containWhiteSpaces = value.includes(' ');
384-
if (containWhiteSpaces) {
385-
value = `'${value}'`;
386-
}
375+
value = `'${value}'`;
387376
}
388377
return `${filter[1]} ${cqlOperator} ${value}`;
389378
case undefined:

0 commit comments

Comments
 (0)