山名 洋平
キャスレーコンサルティング
@vertical_blank
github.com/yohei224
$ gitql 'select * from branches'
|---------------------------------------------------------------------------------------|
| Name | Full_name | Hash |
|---------------------------------------------------------------------------------------|
| master | refs/heads/master | d4d223d31992af2a92adc2e7b4ca63c383380c4c |
|---------------------------------------------------------------------------------------|
| polyglot-maven | refs/heads/polyglot-maven | 925cfbfe29823665f2067dbe37cb487a2b4f9b3e |
|---------------------------------------------------------------------------------------|
https://github.com/cloudson/gitql
String sql = "SELECT a,b,c FROM PIYO WHERE ID = 9 ORDER BY HOGE DESC, FUGA";
Select selectStatement = (Select) CCJSqlParserUtil.parse(sql);
PlainSelect select = (PlainSelect) selectStatement.getSelectBody();
select.getFromItem().toString(); // => PIYO
List<SelectItem> selectItems = select.getSelectItems();
foreach(SelectItem selectItem: selectItems){
selectItem.toString(); // => a,b,c
}
// VisitorPattern 各条件要素について、型や演算子に応じたvisitがコールバックされる
Expression where = select.getWhere();
where.visit(ExpressionVisitor);
List<OrderByElement> orderByElements = select.getOrderByElements();
foreach(OrderByElement orderByElement: orderByElements){
orderByElement.getExpression().toString(); // => HOGE, FUGA
orderByElement.getExpression().isAsc(); // => false, true
}
単純なselectならこんな感じ
java.sql.
Driver
Connection
Statement
DataBaseMetaData
ResultSet
ResultSetMetaData
// これを呼ぶか、META-INF/services/java.sql.Driverに
// このクラスの完全修飾名を書いておく必要がある
Class.forName("jgitdbc.Driver");
DriverManager.getConnection("jdbc:jgitql:....");
// static初期化子の中で自分自身のインスタンスをregisterしておく
static {
try {
register();
} catch (SQLException e) {
throw new ExceptionInInitializerError(e);
}
}
public static void register() throws SQLException {
if (isRegistered()) {
...
}
Driver registeredDriver = new Driver();
DriverManager.registerDriver(registeredDriver);
Driver.registeredDriver = registeredDriver;
}
https://github.com/yohei224/turqey
でも今回のJDBCドライバ使ってません...