get the longer string filters working
This commit is contained in:
@@ -23,34 +23,35 @@ export class OrderByParser {
|
||||
}
|
||||
|
||||
parse(orderBy: string) {
|
||||
const output = []
|
||||
let holding = []
|
||||
this.lexer
|
||||
.input(orderBy)
|
||||
.tokens()
|
||||
.forEach((token) => {
|
||||
switch (token.type) {
|
||||
case 'spacer':
|
||||
output.push(holding)
|
||||
holding = []
|
||||
break
|
||||
case 'column':
|
||||
case 'direction':
|
||||
holding.push(token.value)
|
||||
break
|
||||
}
|
||||
})
|
||||
if (holding) {
|
||||
output.push(holding)
|
||||
}
|
||||
return output
|
||||
const output = []
|
||||
let holding = []
|
||||
this.lexer
|
||||
.input(orderBy)
|
||||
.tokens()
|
||||
.forEach((token) => {
|
||||
switch (token.type) {
|
||||
case 'spacer':
|
||||
output.push(holding)
|
||||
holding = []
|
||||
break
|
||||
case 'column':
|
||||
case 'direction':
|
||||
holding.push(token.value)
|
||||
break
|
||||
}
|
||||
})
|
||||
if (holding) {
|
||||
output.push(holding)
|
||||
}
|
||||
return output
|
||||
}
|
||||
}
|
||||
|
||||
const openGroupRegex = /\(/
|
||||
const closeGroupRegex = /\)/
|
||||
const conjunctinoRegex = /AND|OR/
|
||||
const equalityRegex = /([a-zA-Z]+)\s?(=|!=|<|>|<=|>=|:)\s?([a-zA-Z\d"']+)/
|
||||
const equalityRegex = /([a-zA-Z]+)\s?(=|!=|<|>|<=|>=|:)\s?([a-zA-Z\d]+)/
|
||||
const stringEqualityRegex = /([a-zA-Z]+)\s?(=|!=|<|>|<=|>=|:)\s?\"([a-zA-Z\d\s]*)\"/
|
||||
const spacerRegex = /\s/
|
||||
|
||||
const opperatorMap = {
|
||||
@@ -89,6 +90,12 @@ export class FilterParser {
|
||||
ctx.accept('value', m[3])
|
||||
})
|
||||
|
||||
this.lexer.rule(stringEqualityRegex, (ctx, m) => {
|
||||
ctx.accept('column', m[1])
|
||||
ctx.accept('opperator', m[2])
|
||||
ctx.accept('value', m[3])
|
||||
})
|
||||
|
||||
this.lexer.rule(spacerRegex, (ctx, m) => {
|
||||
ctx.ignore()
|
||||
})
|
||||
@@ -141,18 +148,18 @@ export class FilterParser {
|
||||
let opperatorToken = this.lexer.consume('opperator')
|
||||
let valueToken = this.lexer.consume('value')
|
||||
|
||||
if (opperatorToken.value === ":") {
|
||||
|
||||
return {
|
||||
[columnToken.value]: { [opperatorMap[opperatorToken.value]]: `%${valueToken.value.toString()}%` }
|
||||
}
|
||||
if (opperatorToken.value === ':') {
|
||||
return {
|
||||
[columnToken.value]: {
|
||||
[opperatorMap[opperatorToken.value]]: `%${valueToken.value.toString()}%`
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
return {
|
||||
[columnToken.value]: { [opperatorMap[opperatorToken.value]]: valueToken.value.toString() }
|
||||
return {
|
||||
[columnToken.value]: { [opperatorMap[opperatorToken.value]]: valueToken.value.toString() }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private parseGroup() {
|
||||
this.lexer.consume('opengroup')
|
||||
|
||||
Reference in New Issue
Block a user