mirror of
https://github.com/pocketbase/pocketbase.git
synced 2024-11-28 10:03:42 +02:00
normalize number filter literals
Always cast number literals to provide consistent eq/neq behavior when combined with COALESCE, because '1' = 1 is TRUE but COALESCE('1', '') = COALESCE(1, '') will result to FALSE.
This commit is contained in:
parent
086b992c7d
commit
686198a22e
@ -147,11 +147,17 @@ func (f FilterData) resolveToken(token fexpr.Token, fieldResolver FieldResolver)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return name, params, err
|
return name, params, err
|
||||||
case fexpr.TokenNumber, fexpr.TokenText:
|
case fexpr.TokenText:
|
||||||
placeholder := "t" + security.RandomString(7)
|
placeholder := "t" + security.RandomString(7)
|
||||||
name := fmt.Sprintf("{:%s}", placeholder)
|
name := fmt.Sprintf("{:%s}", placeholder)
|
||||||
params := dbx.Params{placeholder: token.Literal}
|
params := dbx.Params{placeholder: token.Literal}
|
||||||
|
|
||||||
|
return name, params, nil
|
||||||
|
case fexpr.TokenNumber:
|
||||||
|
placeholder := "t" + security.RandomString(7)
|
||||||
|
name := fmt.Sprintf("{:%s}", placeholder)
|
||||||
|
params := dbx.Params{placeholder: cast.ToFloat64(token.Literal)}
|
||||||
|
|
||||||
return name, params, nil
|
return name, params, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -288,8 +288,8 @@ func TestProviderExecNonEmptyQuery(t *testing.T) {
|
|||||||
false,
|
false,
|
||||||
`{"page":1,"perPage":` + fmt.Sprint(MaxPerPage) + `,"totalItems":1,"items":[{"test1":2,"test2":"test2.2","test3":""}]}`,
|
`{"page":1,"perPage":` + fmt.Sprint(MaxPerPage) + `,"totalItems":1,"items":[{"test1":2,"test2":"test2.2","test3":""}]}`,
|
||||||
[]string{
|
[]string{
|
||||||
"SELECT COUNT(*) FROM `test` WHERE ((NOT (`test1` IS NULL)) AND (COALESCE(test2, '') != COALESCE(null, ''))) AND (test1 >= '2') ORDER BY `test1` ASC, `test2` DESC",
|
"SELECT COUNT(*) FROM `test` WHERE ((NOT (`test1` IS NULL)) AND (COALESCE(test2, '') != COALESCE(null, ''))) AND (test1 >= 2) ORDER BY `test1` ASC, `test2` DESC",
|
||||||
"SELECT * FROM `test` WHERE ((NOT (`test1` IS NULL)) AND (COALESCE(test2, '') != COALESCE(null, ''))) AND (test1 >= '2') ORDER BY `test1` ASC, `test2` DESC LIMIT 200",
|
"SELECT * FROM `test` WHERE ((NOT (`test1` IS NULL)) AND (COALESCE(test2, '') != COALESCE(null, ''))) AND (test1 >= 2) ORDER BY `test1` ASC, `test2` DESC LIMIT 200",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// valid sort and filter fields (zero results)
|
// valid sort and filter fields (zero results)
|
||||||
|
Loading…
Reference in New Issue
Block a user