def test_like(): # allow reduction result = optimize(parse("'This is a test' LIKE 'This is %' AND attr = 1")) assert result == ast.Equal( ast.Attribute('attr'), 1 ) result = optimize( parse("'This is a test' LIKE 'This is . test' AND attr = 1") ) assert result == ast.Equal( ast.Attribute('attr'), 1 ) # don't reduction when an attribute is referenced result = optimize(parse("attr LIKE 'This is %'")) assert result == ast.Like( ast.Attribute('attr'), 'This is %', False, '%', '.', '\\', False )
def test_is_like(): result = parse(''' <fes:Filter xmlns:fes="http://www.opengis.net/fes/2.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema-datatypes"> <fes:PropertyIsLike wildCard="%" singleChar="." escapeChar="\\" matchCase="true"> <fes:ValueReference>attr</fes:ValueReference> <fes:Literal type="xsd:string">some%</fes:Literal> </fes:PropertyIsLike> </fes:Filter> ''') assert result == ast.Like( ast.Attribute('attr'), 'some%', nocase=False, not_=False, wildcard='%', singlechar='.', escapechar='\\', ) # case insensitive result = parse(''' <fes:Filter xmlns:fes="http://www.opengis.net/fes/2.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema-datatypes"> <fes:PropertyIsLike wildCard="%" singleChar="." escapeChar="\\" matchCase="false"> <fes:ValueReference>attr</fes:ValueReference> <fes:Literal type="xsd:string">some%</fes:Literal> </fes:PropertyIsLike> </fes:Filter> ''') assert result == ast.Like( ast.Attribute('attr'), 'some%', nocase=True, not_=False, wildcard='%', singlechar='.', escapechar='\\', )
def test_string_not_ilike(): result = parse('attr NOT ILIKE \'some%\'') assert result == ast.Like( ast.Attribute('attr'), 'some%', nocase=True, not_=True, wildcard='%', singlechar='.', escapechar='\\', )
def test_string_like(): result = parse(['like', ['get', 'attr'], 'some%']) assert result == ast.Like( ast.Attribute('attr'), 'some%', nocase=False, wildcard='%', singlechar='.', escapechar='\\', not_=False, )
def test_string_ilike(): result = parse({ "like": { "like": [ {"property": "attr"}, "some%", ], "nocase": True, } }) assert result == ast.Like( ast.Attribute('attr'), 'some%', nocase=True, not_=False, wildcard='%', singlechar='.', escapechar='\\', )
def test_string_like(): result = parse( { "op": "like", "args": [ {"property": "attr"}, "some%", ], } ) assert result == ast.Like( ast.Attribute("attr"), "some%", nocase=False, not_=False, wildcard="%", singlechar=".", escapechar="\\", )