2016-09-19 50 views
0

我試圖通過編譯使用compileEPL()方法來修改epl,並添加更多的例如where子句,但我很難得到它的工作。EPStatmentObject模型不工作?

比方說這是我的EPL:

select * from event where A = 1 

,我想使用AND

再添加一個WHERE條件和我編譯使用compileEPL()英超

model.getWhereClause().getChildren().add(Expressions.and() 
         .add(Expressions.eq("B",))); 

代替給我的:

select * from event where A = 1 and B = 2 it just gives ..where A = 1 and not adding the new where clause. 

我做錯了嗎? EPStatementObjectModel適用於從頭構建對象EPL,但在編譯和添加或修改對象時不起作用。

有誰知道嗎?謝謝。

回答

0

自「A = 1」開始,where子句植根於EQ中。

Expression equalsExpr = model.getWhereClause(); 

因此,構建一個AND子句,它包含舊的EQ和新的EQ。

Expression and = Expressions.and().add(equalsExpr).add(Expressions.eq("B", ...)); 

最後設置「和」作爲新的where子句:

model.setWhereClause(and); 

綜上所述,修改表達式時添加「和」:老時表達本身不是,你應該建立AND節點並添加舊的表達式和新的表達式。

+0

謝謝!這工作。對於像選擇屬性和屬性這樣的其他子句,它是一樣的嗎?與此同時,我現在會嘗試。 – wandapong

+0

上下文如何?這更令人困惑。文檔劑量說明如何使用EPStmtObj創建一個。但是對於使用crontabs的上下文,使用字符串變量手動創建它可能更容易? – wandapong

+0

還有一件事。當我嘗試getWhereClause並將其打印爲字符串時,它顯示的值只是client.soda包的一個路徑 – wandapong