@malloydata/malloy-filter 0.0.237-dev250222025222 → 0.0.237-dev250222205057
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/a_simple_parser.js +12 -9
- package/dist/a_simple_parser.js.map +1 -1
- package/dist/base_parser.d.ts +0 -2
- package/dist/base_parser.js.map +1 -1
- package/dist/boolean_parser.d.ts +2 -2
- package/dist/boolean_parser.js +3 -1
- package/dist/boolean_parser.js.map +1 -1
- package/dist/boolean_serializer.d.ts +4 -4
- package/dist/boolean_serializer.js +12 -4
- package/dist/boolean_serializer.js.map +1 -1
- package/dist/clause_types.d.ts +40 -47
- package/dist/date_parser.d.ts +13 -11
- package/dist/date_parser.js +192 -131
- package/dist/date_parser.js.map +1 -1
- package/dist/date_serializer.d.ts +6 -5
- package/dist/date_serializer.js +65 -77
- package/dist/date_serializer.js.map +1 -1
- package/dist/date_types.d.ts +75 -0
- package/dist/{filter_types.js → date_types.js} +1 -1
- package/dist/date_types.js.map +1 -0
- package/dist/generate_samples.js +162 -87
- package/dist/generate_samples.js.map +1 -1
- package/dist/number_parser.d.ts +2 -5
- package/dist/number_parser.js +10 -51
- package/dist/number_parser.js.map +1 -1
- package/dist/number_serializer.d.ts +4 -4
- package/dist/number_serializer.js +17 -14
- package/dist/number_serializer.js.map +1 -1
- package/dist/string_parser.d.ts +2 -2
- package/dist/string_parser.js +21 -21
- package/dist/string_parser.js.map +1 -1
- package/dist/string_serializer.d.ts +6 -5
- package/dist/string_serializer.js +38 -24
- package/dist/string_serializer.js.map +1 -1
- package/package.json +1 -2
- package/src/DEVELOPING.md +2 -5
- package/src/a_simple_parser.ts +12 -9
- package/src/base_parser.ts +0 -3
- package/src/boolean_parser.ts +10 -5
- package/src/boolean_serializer.ts +14 -7
- package/src/clause_types.ts +65 -108
- package/src/date_parser.ts +229 -192
- package/src/date_serializer.ts +59 -87
- package/src/date_types.ts +159 -0
- package/src/generate_samples.ts +178 -109
- package/src/number_parser.ts +14 -63
- package/src/number_serializer.ts +19 -20
- package/src/string_parser.ts +40 -27
- package/src/string_serializer.ts +58 -32
- package/tsconfig.json +1 -6
- package/dist/a_simple_serializer.d.ts +0 -1
- package/dist/a_simple_serializer.js +0 -31
- package/dist/a_simple_serializer.js.map +0 -1
- package/dist/base_serializer.d.ts +0 -6
- package/dist/base_serializer.js +0 -11
- package/dist/base_serializer.js.map +0 -1
- package/dist/filter_parser.d.ts +0 -12
- package/dist/filter_parser.js +0 -66
- package/dist/filter_parser.js.map +0 -1
- package/dist/filter_serializer.d.ts +0 -13
- package/dist/filter_serializer.js +0 -43
- package/dist/filter_serializer.js.map +0 -1
- package/dist/filter_types.d.ts +0 -10
- package/dist/filter_types.js.map +0 -1
- package/src/a_simple_serializer.ts +0 -40
- package/src/base_serializer.ts +0 -9
- package/src/filter_parser.ts +0 -68
- package/src/filter_serializer.ts +0 -49
- package/src/filter_types.ts +0 -12
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
constructor(clauses:
|
|
1
|
+
import { NumberClause } from './clause_types';
|
|
2
|
+
export declare class NumberSerializer {
|
|
3
|
+
private clauses;
|
|
4
|
+
constructor(clauses: NumberClause[]);
|
|
5
5
|
serialize(): string;
|
|
6
6
|
private static numberConditionToString;
|
|
7
7
|
private static getNegatedType;
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.NumberSerializer = void 0;
|
|
4
|
-
|
|
5
|
-
class NumberSerializer extends base_serializer_1.BaseSerializer {
|
|
4
|
+
class NumberSerializer {
|
|
6
5
|
constructor(clauses) {
|
|
7
|
-
|
|
6
|
+
this.clauses = clauses;
|
|
7
|
+
this.clauses = clauses;
|
|
8
8
|
}
|
|
9
9
|
serialize() {
|
|
10
10
|
const result = NumberSerializer.clauseToString(this.clauses);
|
|
11
11
|
return result.trim().replace(/,$/, '');
|
|
12
12
|
}
|
|
13
|
-
// NumberOperator = '<=' | '>=' | '!=' | '=' | '>' | '<'
|
|
13
|
+
// NumberOperator = '<=' | '>=' | '!=' | '=' | '>' | '<'
|
|
14
14
|
static numberConditionToString(operator, value) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
const operatorString = operator === '=' ? '' : operator; // Remove operator for eg "5, 7, 9"
|
|
15
|
+
// Remove operator for eg "5, 7, 9".
|
|
16
|
+
const operatorString = operator === '=' ? '' : operator;
|
|
19
17
|
return operatorString + value;
|
|
20
18
|
}
|
|
21
19
|
static getNegatedType(operator) {
|
|
@@ -53,21 +51,26 @@ class NumberSerializer extends base_serializer_1.BaseSerializer {
|
|
|
53
51
|
static clauseToString(clauses) {
|
|
54
52
|
let result = '';
|
|
55
53
|
for (const clause of clauses) {
|
|
56
|
-
if ('operator' in clause
|
|
54
|
+
if (!('operator' in clause)) {
|
|
55
|
+
throw new Error('Invalid number clause ' + JSON.stringify(clause));
|
|
56
|
+
}
|
|
57
|
+
if (clause.operator === 'range') {
|
|
57
58
|
result += NumberSerializer.rangeToString(clause);
|
|
58
59
|
result += ', ';
|
|
59
60
|
}
|
|
60
|
-
else if (
|
|
61
|
-
|
|
61
|
+
else if (clause.operator === 'NULL') {
|
|
62
|
+
result += 'NULL, ';
|
|
63
|
+
}
|
|
64
|
+
else if (clause.operator === 'NOTNULL') {
|
|
65
|
+
result += '-NULL, ';
|
|
66
|
+
}
|
|
67
|
+
else if (NumberSerializer.isNumberOperator(clause.operator)) {
|
|
62
68
|
const numberClause = clause;
|
|
63
69
|
for (const value of numberClause.values) {
|
|
64
70
|
result += NumberSerializer.numberConditionToString(numberClause.operator, value);
|
|
65
71
|
result += ', ';
|
|
66
72
|
}
|
|
67
73
|
}
|
|
68
|
-
else {
|
|
69
|
-
throw new Error('Invalid number clause ' + JSON.stringify(clause));
|
|
70
|
-
}
|
|
71
74
|
}
|
|
72
75
|
return result;
|
|
73
76
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"number_serializer.js","sourceRoot":"","sources":["../src/number_serializer.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"number_serializer.js","sourceRoot":"","sources":["../src/number_serializer.ts"],"names":[],"mappings":"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"}
|
package/dist/string_parser.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { StringParserResponse } from './clause_types';
|
|
1
2
|
import { BaseParser } from './base_parser';
|
|
2
|
-
import { FilterParserResponse } from './filter_types';
|
|
3
3
|
export declare class StringParser extends BaseParser {
|
|
4
4
|
private static readonly percentRegex;
|
|
5
5
|
private static readonly underscoreRegex;
|
|
@@ -9,7 +9,7 @@ export declare class StringParser extends BaseParser {
|
|
|
9
9
|
private static readonly singleBackslashRegex;
|
|
10
10
|
constructor(input: string);
|
|
11
11
|
private tokenize;
|
|
12
|
-
parse():
|
|
12
|
+
parse(): StringParserResponse;
|
|
13
13
|
private static findQuotes;
|
|
14
14
|
private static groupClauses;
|
|
15
15
|
private static percentInMiddle;
|
package/dist/string_parser.js
CHANGED
|
@@ -35,20 +35,11 @@ class StringParser extends base_parser_1.BaseParser {
|
|
|
35
35
|
if (token.type === ',') {
|
|
36
36
|
this.index++;
|
|
37
37
|
}
|
|
38
|
-
else if (token.type === 'NULL'
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
clauses.push({ operator: 'EMPTY', values: [null] });
|
|
44
|
-
this.index++;
|
|
45
|
-
}
|
|
46
|
-
else if (token.type === 'NOTNULL') {
|
|
47
|
-
clauses.push({ operator: '!=', values: [null] });
|
|
48
|
-
this.index++;
|
|
49
|
-
}
|
|
50
|
-
else if (token.type === 'NOTEMPTY') {
|
|
51
|
-
clauses.push({ operator: 'NOTEMPTY', values: [null] });
|
|
38
|
+
else if (token.type === 'NULL' ||
|
|
39
|
+
token.type === 'NOTNULL' ||
|
|
40
|
+
token.type === 'EMPTY' ||
|
|
41
|
+
token.type === 'NOTEMPTY') {
|
|
42
|
+
clauses.push({ operator: token.type });
|
|
52
43
|
this.index++;
|
|
53
44
|
}
|
|
54
45
|
else if (this.checkSimpleWord(clauses)) {
|
|
@@ -63,7 +54,15 @@ class StringParser extends base_parser_1.BaseParser {
|
|
|
63
54
|
this.index++;
|
|
64
55
|
}
|
|
65
56
|
}
|
|
66
|
-
|
|
57
|
+
const response = {
|
|
58
|
+
clauses: StringParser.groupClauses(clauses),
|
|
59
|
+
errors,
|
|
60
|
+
};
|
|
61
|
+
const quotes = StringParser.findQuotes(this.inputString);
|
|
62
|
+
if (quotes.length > 0) {
|
|
63
|
+
response.quotes = quotes;
|
|
64
|
+
}
|
|
65
|
+
return response;
|
|
67
66
|
}
|
|
68
67
|
static findQuotes(str) {
|
|
69
68
|
const quotes = new Set();
|
|
@@ -123,12 +122,15 @@ class StringParser extends base_parser_1.BaseParser {
|
|
|
123
122
|
let previous = clauses[0];
|
|
124
123
|
const outputs = [previous];
|
|
125
124
|
for (let i = 1; i < clauses.length; i++) {
|
|
126
|
-
|
|
127
|
-
|
|
125
|
+
const current = clauses[i];
|
|
126
|
+
if (previous.operator === current.operator &&
|
|
127
|
+
'values' in previous &&
|
|
128
|
+
'values' in current) {
|
|
129
|
+
previous.values.push(...current.values);
|
|
128
130
|
}
|
|
129
131
|
else {
|
|
130
|
-
previous =
|
|
131
|
-
outputs.push(
|
|
132
|
+
previous = current;
|
|
133
|
+
outputs.push(current);
|
|
132
134
|
}
|
|
133
135
|
}
|
|
134
136
|
return outputs;
|
|
@@ -182,8 +184,6 @@ class StringParser extends base_parser_1.BaseParser {
|
|
|
182
184
|
return false;
|
|
183
185
|
}
|
|
184
186
|
const clause = { operator: operator, values: [word] };
|
|
185
|
-
//const quotes: QuoteType[] = StringParser.findQuotes(word);
|
|
186
|
-
//if (quotes.length > 0) { clause.quotes = quotes; }
|
|
187
187
|
clauses.push(clause);
|
|
188
188
|
return true;
|
|
189
189
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string_parser.js","sourceRoot":"","sources":["../src/string_parser.ts"],"names":[],"mappings":";;;AAAA,2CAAqE;
|
|
1
|
+
{"version":3,"file":"string_parser.js","sourceRoot":"","sources":["../src/string_parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
constructor(clauses:
|
|
1
|
+
import { StringClause } from './clause_types';
|
|
2
|
+
export declare class StringSerializer {
|
|
3
|
+
private clauses;
|
|
4
|
+
constructor(clauses: StringClause[]);
|
|
5
5
|
serialize(): string;
|
|
6
6
|
private static isNegated;
|
|
7
7
|
private static escapeSpecialCharacters;
|
|
8
8
|
private static escapeWildcardCharacters;
|
|
9
|
-
private static
|
|
9
|
+
private static StringConditionWordToString;
|
|
10
|
+
private static StringClauseToString;
|
|
10
11
|
private static clauseToString;
|
|
11
12
|
}
|
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.StringSerializer = void 0;
|
|
4
|
-
|
|
5
|
-
class StringSerializer extends base_serializer_1.BaseSerializer {
|
|
4
|
+
class StringSerializer {
|
|
6
5
|
constructor(clauses) {
|
|
7
|
-
|
|
6
|
+
this.clauses = clauses;
|
|
7
|
+
this.clauses = clauses;
|
|
8
8
|
}
|
|
9
9
|
serialize() {
|
|
10
10
|
const result = StringSerializer.clauseToString(this.clauses);
|
|
11
11
|
return result.trim().replace(/,$/, '');
|
|
12
12
|
}
|
|
13
13
|
static isNegated(operator) {
|
|
14
|
-
return (operator === '
|
|
15
|
-
operator === '!~' ||
|
|
14
|
+
return (operator === '!~' ||
|
|
16
15
|
operator === '!=' ||
|
|
17
16
|
operator === 'notStarts' ||
|
|
18
17
|
operator === 'notEnds' ||
|
|
@@ -24,19 +23,11 @@ class StringSerializer extends base_serializer_1.BaseSerializer {
|
|
|
24
23
|
static escapeWildcardCharacters(input) {
|
|
25
24
|
return input.replace(/[_%]/g, match => `\\${match}`);
|
|
26
25
|
}
|
|
27
|
-
// export type StringOperator =
|
|
28
|
-
// '
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
return 'EMPTY';
|
|
32
|
-
}
|
|
33
|
-
else if (operator === 'NOTEMPTY') {
|
|
34
|
-
return '-EMPTY';
|
|
35
|
-
}
|
|
26
|
+
// export type StringOperator =
|
|
27
|
+
// | 'starts' | 'ends' | 'contains' | 'notStarts' | 'notEnds' | 'notContains'
|
|
28
|
+
// | '~' | '=' | '!~' | '!=';
|
|
29
|
+
static StringConditionWordToString(operator, value) {
|
|
36
30
|
const negated = StringSerializer.isNegated(operator);
|
|
37
|
-
if (value === null) {
|
|
38
|
-
return negated ? '-NULL' : 'NULL';
|
|
39
|
-
}
|
|
40
31
|
if (value === 'NULL' || value === '-NULL') {
|
|
41
32
|
return (negated ? '-' : '') + '\\' + value;
|
|
42
33
|
}
|
|
@@ -59,15 +50,38 @@ class StringSerializer extends base_serializer_1.BaseSerializer {
|
|
|
59
50
|
}
|
|
60
51
|
return (negated ? '-' : '') + value;
|
|
61
52
|
}
|
|
53
|
+
static StringClauseToString(operator, clause) {
|
|
54
|
+
if (operator === 'EMPTY') {
|
|
55
|
+
return 'EMPTY';
|
|
56
|
+
}
|
|
57
|
+
else if (operator === 'NOTEMPTY') {
|
|
58
|
+
return '-EMPTY';
|
|
59
|
+
}
|
|
60
|
+
else if (operator === 'NULL') {
|
|
61
|
+
return 'NULL';
|
|
62
|
+
}
|
|
63
|
+
else if (operator === 'NOTNULL') {
|
|
64
|
+
return '-NULL';
|
|
65
|
+
}
|
|
66
|
+
if (!('values' in clause) || clause.values.length === 0) {
|
|
67
|
+
return '';
|
|
68
|
+
}
|
|
69
|
+
let result = '';
|
|
70
|
+
const condition = clause;
|
|
71
|
+
for (const value of condition.values) {
|
|
72
|
+
const word = StringSerializer.StringConditionWordToString(condition.operator, value);
|
|
73
|
+
if (word) {
|
|
74
|
+
result += word + ', ';
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
62
79
|
static clauseToString(clauses) {
|
|
63
80
|
let result = '';
|
|
64
|
-
for (const
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if (word) {
|
|
69
|
-
result += word + ', ';
|
|
70
|
-
}
|
|
81
|
+
for (const clause of clauses) {
|
|
82
|
+
const words = StringSerializer.StringClauseToString(clause.operator, clause);
|
|
83
|
+
if (words) {
|
|
84
|
+
result += words + ', ';
|
|
71
85
|
}
|
|
72
86
|
}
|
|
73
87
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string_serializer.js","sourceRoot":"","sources":["../src/string_serializer.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"string_serializer.js","sourceRoot":"","sources":["../src/string_serializer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@malloydata/malloy-filter",
|
|
3
|
-
"version": "0.0.237-
|
|
3
|
+
"version": "0.0.237-dev250222205057",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "",
|
|
6
6
|
"main": "dist/string_parser.js",
|
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
"build": "tsc --build",
|
|
16
16
|
"samples": "node dist/generate_samples.js",
|
|
17
17
|
"asimpleparser": "node dist/a_simple_parser.js",
|
|
18
|
-
"asimpleserializer": "node dist/a_simple_serializer.js",
|
|
19
18
|
"test": "jest --runInBand",
|
|
20
19
|
"test:tokenizer": "jest tokenizer.spec.ts"
|
|
21
20
|
},
|
package/src/DEVELOPING.md
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
# Testing
|
|
2
2
|
|
|
3
|
-
The `malloy-filter` tests use Jest.
|
|
4
|
-
|
|
5
|
-
```bash
|
|
6
|
-
npm install --save-dev jest @types/jest ts-jest
|
|
7
|
-
```
|
|
3
|
+
The `malloy-filter` tests use Jest.
|
|
8
4
|
|
|
9
5
|
## Tokenizer Testing
|
|
10
6
|
|
|
11
7
|
```bash
|
|
8
|
+
npm run build
|
|
12
9
|
npm run test:tokenizer
|
|
13
10
|
```
|
|
14
11
|
|
package/src/a_simple_parser.ts
CHANGED
|
@@ -1,22 +1,25 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {BooleanParser} from './boolean_parser';
|
|
2
|
+
import {StringParser} from './string_parser';
|
|
3
|
+
import {NumberParser} from './number_parser';
|
|
4
|
+
import {DateParser} from './date_parser';
|
|
2
5
|
|
|
3
6
|
/* eslint-disable no-console */
|
|
4
7
|
function aSimpleParser() {
|
|
5
8
|
let str = 'CAT,DOG';
|
|
6
|
-
|
|
7
|
-
console.log(str, '\n', ...
|
|
9
|
+
const stringResponse = new StringParser(str).parse();
|
|
10
|
+
console.log(str, '\n', ...stringResponse.clauses, '\n');
|
|
8
11
|
|
|
9
12
|
str = '-5.5, 10, 2.3e7';
|
|
10
|
-
|
|
11
|
-
console.log(str, '\n', ...
|
|
13
|
+
const numberResponse = new NumberParser(str).parse();
|
|
14
|
+
console.log(str, '\n', ...numberResponse.clauses, '\n');
|
|
12
15
|
|
|
13
16
|
str = 'null, false';
|
|
14
|
-
|
|
15
|
-
console.log(str, '\n', ...
|
|
17
|
+
const booleanResponse = new BooleanParser(str).parse();
|
|
18
|
+
console.log(str, '\n', ...booleanResponse.clauses, '\n');
|
|
16
19
|
|
|
17
20
|
str = 'after 2025-10-05';
|
|
18
|
-
|
|
19
|
-
console.log(str, '\n', ...
|
|
21
|
+
const dateResponse = new DateParser(str).parse();
|
|
22
|
+
console.log(str, '\n', ...dateResponse.clauses, '\n');
|
|
20
23
|
}
|
|
21
24
|
|
|
22
25
|
aSimpleParser();
|
package/src/base_parser.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import {Token} from './token_types';
|
|
2
|
-
import {FilterParserResponse} from './filter_types';
|
|
3
2
|
|
|
4
3
|
export abstract class BaseParser {
|
|
5
4
|
protected inputString: string;
|
|
@@ -16,8 +15,6 @@ export abstract class BaseParser {
|
|
|
16
15
|
return this.tokens;
|
|
17
16
|
}
|
|
18
17
|
|
|
19
|
-
public abstract parse(): FilterParserResponse;
|
|
20
|
-
|
|
21
18
|
protected getAt(index: number): Token {
|
|
22
19
|
return this.tokens[index];
|
|
23
20
|
}
|
package/src/boolean_parser.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import {SpecialToken, Tokenizer, TokenizerParams} from './tokenizer';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
BooleanClause,
|
|
4
|
+
BooleanParserResponse,
|
|
5
|
+
FilterError,
|
|
6
|
+
} from './clause_types';
|
|
3
7
|
import {BaseParser} from './base_parser';
|
|
4
|
-
import {FilterParserResponse, FilterError} from './filter_types';
|
|
5
8
|
|
|
6
9
|
export class BooleanParser extends BaseParser {
|
|
7
10
|
constructor(input: string) {
|
|
@@ -14,7 +17,8 @@ export class BooleanParser extends BaseParser {
|
|
|
14
17
|
{type: 'NULL', value: 'null', ignoreCase: true},
|
|
15
18
|
{type: 'NOTNULL', value: '-null', ignoreCase: true},
|
|
16
19
|
{type: 'TRUE', value: 'true', ignoreCase: true},
|
|
17
|
-
{type: 'FALSE', value: 'false', ignoreCase: true},
|
|
20
|
+
{type: 'FALSE', value: '=false', ignoreCase: true},
|
|
21
|
+
{type: 'FALSEORNULL', value: 'false', ignoreCase: true},
|
|
18
22
|
];
|
|
19
23
|
const params: TokenizerParams = {
|
|
20
24
|
trimWordWhitespace: true,
|
|
@@ -28,7 +32,7 @@ export class BooleanParser extends BaseParser {
|
|
|
28
32
|
this.tokens = Tokenizer.convertSpecialWords(this.tokens, specialWords);
|
|
29
33
|
}
|
|
30
34
|
|
|
31
|
-
public parse():
|
|
35
|
+
public parse(): BooleanParserResponse {
|
|
32
36
|
this.index = 0;
|
|
33
37
|
this.tokenize();
|
|
34
38
|
const clauses: BooleanClause[] = [];
|
|
@@ -41,9 +45,10 @@ export class BooleanParser extends BaseParser {
|
|
|
41
45
|
token.type === 'NULL' ||
|
|
42
46
|
token.type === 'TRUE' ||
|
|
43
47
|
token.type === 'FALSE' ||
|
|
48
|
+
token.type === 'FALSEORNULL' ||
|
|
44
49
|
token.type === 'NOTNULL'
|
|
45
50
|
) {
|
|
46
|
-
const clause: BooleanClause = {operator: token.type
|
|
51
|
+
const clause: BooleanClause = {operator: token.type};
|
|
47
52
|
clauses.push(clause);
|
|
48
53
|
this.index++;
|
|
49
54
|
} else {
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import {BooleanClause
|
|
2
|
-
import {BaseSerializer} from './base_serializer';
|
|
1
|
+
import {BooleanClause} from './clause_types';
|
|
3
2
|
|
|
4
|
-
export class BooleanSerializer
|
|
5
|
-
constructor(clauses:
|
|
6
|
-
|
|
3
|
+
export class BooleanSerializer {
|
|
4
|
+
constructor(private clauses: BooleanClause[]) {
|
|
5
|
+
this.clauses = clauses;
|
|
7
6
|
}
|
|
8
7
|
|
|
9
8
|
public serialize(): string {
|
|
@@ -12,10 +11,18 @@ export class BooleanSerializer extends BaseSerializer {
|
|
|
12
11
|
}
|
|
13
12
|
|
|
14
13
|
private static booleanClauseToString(clause: BooleanClause): string {
|
|
15
|
-
|
|
14
|
+
switch (clause.operator) {
|
|
15
|
+
case 'NOTNULL':
|
|
16
|
+
return '-NULL';
|
|
17
|
+
case 'FALSEORNULL':
|
|
18
|
+
return 'FALSE';
|
|
19
|
+
case 'FALSE':
|
|
20
|
+
return '=FALSE';
|
|
21
|
+
}
|
|
22
|
+
return clause.operator;
|
|
16
23
|
}
|
|
17
24
|
|
|
18
|
-
private static clauseToString(clauses:
|
|
25
|
+
private static clauseToString(clauses: BooleanClause[]): string {
|
|
19
26
|
let result = '';
|
|
20
27
|
for (const clause of clauses) {
|
|
21
28
|
if ('operator' in clause) {
|