2017-05-06 163 views
0

我查詢簡單的功能型架構: r:Long:index=join,*g:Point:srid=4326,di:Integer:index=join,al:Float,s:Float,b:Float,an:Float,he:Float,ve:Float,t:Float,m:Boolean,i:Boolean,ts:Long;geomesa.table.sharing='true',geomesa.indices='attr:4:3,records:2:3,z2:3:3',geomesa.table.sharing.prefix='\\u0001'geotools過濾CQLException:遇到 「T」

與查詢表達式:r = 31 AND di = 5 AND BBOX(g, -38.857822, -76.111145, -74.64091, -38.61907) AND al <= 39.407307 AND s <= 1.6442835 AND b <= 83.14717 AND an <= 87.0774 AND he <= 40.89476 AND ve <= 88.761566 AND t <= 44.786507 AND m = true AND i = true.

但它拋出一個異常說Encountered "t" at line 1, column 195.

這裏是我的例外日誌詳細信息:

org.geotools.filter.text.cql2.CQLException: Encountered "t" at line 1, column 195. 
Was expecting one of: 
    <NOT> ... 
    <IDENTIFIER> ... 
    "include" ... 
    "exclude" ... 
    "(" ... 
    "[" ... 
    Parsing : r = 31 AND di = 5 AND BBOX(g, -38.857822, -76.111145, -74.64091, -38.61907) AND al <= 39.407307 AND s <= 1.6442835 AND b <= 83.14717 AND an <= 87.0774 AND he <= 40.89476 AND ve <= 88.761566 AND t <= 44.786507 AND m = true AND i = true. 
    at org.geotools.filter.text.cql2.CQLCompiler.compileFilter(CQLCompiler.java:106) 
    at org.geotools.filter.text.commons.CompilerUtil.parseFilter(CompilerUtil.java:196) 
    at org.geotools.filter.text.cql2.CQL.toFilter(CQL.java:134) 
    at org.geotools.filter.text.cql2.CQL.toFilter(CQL.java:113) 
    at com.hps.GeomesaClient.query(GeomesaClient.java:134) 
    at com.hps.Reader.run(Reader.java:69) 
    at java.lang.Thread.run(Thread.java:745) 

我無法確定,爲什麼它是在使用名爲t的屬性查詢時拋出異常。而如果我從查詢中刪除屬性t,它會按預期工作。 t是保留鍵嗎?或者我失去了一些東西。

+0

我剛試過這個ECQL.toFilter(「t = 44.786507」),它引發基本上相同的異常。 (E)CQL解析器中可能存在一個錯誤... – GeoMesaJim

回答

1

好的,這是ECQL查詢解析器的限制。本身的字母't'(忽略大小寫)是UTC標記。

https://github.com/geotools/geotools/blob/master/modules/library/cql/src/main/jjtree/ECQLGrammar.jjt#L180-L187

的選擇都與GeoTools團隊合作來解決這個角落的情況下,也可以選擇不同的屬性名稱。很好找!

+0

或放在引號中,所以'「t」'工作 –

+0

我已經提交了一個錯誤報告,所以這不會丟失https:// osgeo -org.atlassian.net/browse/GEOT-5722 –

+0

@iant感謝您填寫錯誤報告。雙引號是將t作爲屬性還是文字?我只是想用單引號(這會做錯誤的事情)。 – GeoMesaJim