mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-08-28 10:54:59 +00:00
more tests and fix range
This commit is contained in:
parent
23bca175ae
commit
a6b6442ef4
4 changed files with 1277 additions and 1135 deletions
|
|
@ -63,6 +63,10 @@ func (q *Query) addPosStr(key, value string) {
|
|||
|
||||
func (q *Query) startConditional() {
|
||||
q.conditional = make([]string, 0)
|
||||
call := q.callStack[len(q.callStack)-1]
|
||||
if call.Args == nil {
|
||||
call.Args = make(map[string]interface{})
|
||||
}
|
||||
}
|
||||
|
||||
func (q *Query) condAdd(val string) {
|
||||
|
|
|
|||
|
|
@ -26,7 +26,11 @@ COND <- ( '><' { p.addBTWN() }
|
|||
/ '<' { p.addLT() }
|
||||
/ '>' { p.addGT() }
|
||||
)
|
||||
conditional <- {p.startConditional()} int ('<=' / '<') fieldExpr ('<=' / '<') int {p.endConditional()}
|
||||
conditional <- {p.startConditional()} condint condLT condfield condLT condint {p.endConditional()}
|
||||
condint <- <'-'? [1-9] [0-9]* / '0'> sp {p.condAdd(buffer[begin:end])}
|
||||
condLT <- <('<=' / '<')> sp {p.condAdd(buffer[begin:end])}
|
||||
condfield <- <fieldExpr> sp {p.condAdd(buffer[begin:end])}
|
||||
|
||||
value <- ( item
|
||||
/ lbrack { p.startList() } list rbrack { p.endList() }
|
||||
)
|
||||
|
|
@ -48,7 +52,6 @@ fieldExpr <- [[A-Z]] ( [[A-Z]] / [0-9] / '_' )*
|
|||
field <- <fieldExpr> { p.addField(buffer[begin:end]) }
|
||||
posfield <- <fieldExpr> { p.addPosStr("_field", buffer[begin:end]) }
|
||||
uint <- [1-9] [0-9]* / '0'
|
||||
int <- '-'? [1-9] [0-9]* / '0'
|
||||
uintrow <- <uint>{p.addPosNum("_row", buffer[begin:end])}
|
||||
uintcol <- <uint>{p.addPosNum("_col", buffer[begin:end])}
|
||||
|
||||
|
|
|
|||
2323
pql/pql.peg.go
2323
pql/pql.peg.go
File diff suppressed because it is too large
Load diff
|
|
@ -132,6 +132,78 @@ func TestPEGWorking(t *testing.T) {
|
|||
name: "single quoted args",
|
||||
input: `B(a='zm""e')`,
|
||||
ncalls: 1},
|
||||
{
|
||||
name: "SetRowAttrs",
|
||||
input: "SetRowAttrs(blah, 9, a=47)",
|
||||
ncalls: 1},
|
||||
{
|
||||
name: "SetRowAttrs2args",
|
||||
input: "SetRowAttrs(blah, 9, a=47, b=bval)",
|
||||
ncalls: 1},
|
||||
{
|
||||
name: "SetColAttrs",
|
||||
input: "SetColAttrs(blah, 9, a=47)",
|
||||
ncalls: 1},
|
||||
{
|
||||
name: "SetColAttrs2args",
|
||||
input: "SetColAttrs(blah, 9, a=47, b=bval)",
|
||||
ncalls: 1},
|
||||
{
|
||||
name: "Clear",
|
||||
input: "Clear(1, a=53)",
|
||||
ncalls: 1},
|
||||
{
|
||||
name: "Clear2args",
|
||||
input: "Clear(1, a=53, b=33)",
|
||||
ncalls: 1},
|
||||
{
|
||||
name: "TopN",
|
||||
input: "TopN(myfield, n=44)",
|
||||
ncalls: 1},
|
||||
{
|
||||
name: "TopNBitmap",
|
||||
input: "TopN(myfield, Row(a=47), n=10)",
|
||||
ncalls: 1},
|
||||
{
|
||||
name: "RangeLT",
|
||||
input: "Range(a < 4)",
|
||||
ncalls: 1},
|
||||
{
|
||||
name: "RangeGT",
|
||||
input: "Range(a > 4)",
|
||||
ncalls: 1},
|
||||
{
|
||||
name: "RangeLTE",
|
||||
input: "Range(a <= 4)",
|
||||
ncalls: 1},
|
||||
{
|
||||
name: "RangeGTE",
|
||||
input: "Range(a >= 4)",
|
||||
ncalls: 1},
|
||||
{
|
||||
name: "RangeEQ",
|
||||
input: "Range(a == 4)",
|
||||
ncalls: 1},
|
||||
{
|
||||
name: "RangeNEQ",
|
||||
input: "Range(a != null)",
|
||||
ncalls: 1},
|
||||
{
|
||||
name: "RangeLTLT",
|
||||
input: "Range(4 < a < 9)",
|
||||
ncalls: 1},
|
||||
{
|
||||
name: "RangeLTLTE",
|
||||
input: "Range(4 < a <= 9)",
|
||||
ncalls: 1},
|
||||
{
|
||||
name: "RangeLTELT",
|
||||
input: "Range(4 <= a < 9)",
|
||||
ncalls: 1},
|
||||
{
|
||||
name: "RangeLTELTE",
|
||||
input: "Range(4 <= a <= 9)",
|
||||
ncalls: 1},
|
||||
}
|
||||
|
||||
for i, test := range tests {
|
||||
|
|
@ -185,6 +257,12 @@ func TestPEGErrors(t *testing.T) {
|
|||
{
|
||||
name: "TopN No Field",
|
||||
input: "TopN(a=77)"},
|
||||
{
|
||||
name: "SetRowAttrs0args",
|
||||
input: "SetRowAttrs(blah, 9)"},
|
||||
{
|
||||
name: "Clear0args",
|
||||
input: "Clear(9)"},
|
||||
}
|
||||
|
||||
for i, test := range tests {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue