S2Pluginの名称
S2Pluginの形も見えてきたとおもうので、
そろそろ名前を付けておこうと思います。
一番多く名前のあがった(?)kijimuna(キジムナー)でいきたいと
おもうのですがどうでしょうか。
id:masataka_kさん、id:agtさん。
S2Unit
S2Unitを使って各テストメソッドが実行されるとき、どーいう順番で何が動くのかS2.0.8のソースを追っかけて纏めてみました。ソース追っかけたと言っても、S2TestCase#runBare()メソッドを読んだだけですけど(;^_^A
なんでこんなの書く気になったかというと、setUp()メソッドでreadXlsAllReplaceDb()メソッドを呼び出したら例外が発生したため、その原因を探ってたからだったりする。
マニュアルにreadXlsXxx()を呼び出すタイミングの記述がないですね。m(_ _)m
心より恥じる。
以下マニュアルに追加予定。
readXlsWriteDb()、readXlsAllReplaceDb()はテスト後に
ロールバックしてデータが元に戻るようにtestXxxTx()の
最初に実行してください。
SQLの解析
SQLの解析は、SqlParserが行い、解析結果は、Nodeのツリーになってます。
public interface Node {
public int getChildSize();
public Node getChild(int index);
public void addChild(Node node);
public void accept(QueryContext ctx);
}
Nodeの具象クラスには、SqlNode(SQLの断片)、
public interface SqlParser {
public Node parse(String sql);
}
BindVariableNode(バインド変数用)、IfNode(if文)、
BlockNode(BEGINからENDコメントまでを管理)などがあります。
実際の使い方は、
のような感じです。id:masataka_kさん。
SqlParser parser = new SqlParserImpl();
Node root = parser.parse(sql);
QueryContext ctx = new QueryContextImpl();
//引数の設定
ctx.addArg(...);
root.accept(ctx);
//QueryContextからSQL文とバインド変数を取り出しS2JDBCで実行