Created
August 15, 2011 17:07
-
-
Save kmizu/1147209 to your computer and use it in GitHub Desktop.
Result of diff -u applied to SqlManager.scala in mirage-scala.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- SqlManager.scala.orig 2011-08-16 01:40:50.603000000 +0900 | |
+++ SqlManager.scala 2011-08-16 02:04:16.069118600 +0900 | |
@@ -8,10 +8,7 @@ | |
/** | |
* SqlManager wrapper for Scala. | |
*/ | |
-class SqlManager(sqlManager: jp.sf.amateras.mirage.SqlManagerImpl) { | |
- | |
- // TODO もう少しいい初期化の方法はないかなぁ | |
- BeanDescFactoryInitializer.initialize() | |
+class SqlManager private(sqlManager: SqlManagerImpl) { | |
def getSingleResult[T](clazz: Class[T], sql: SqlProvider, param: AnyRef = null): Option[T] = { | |
val node: Node = new SqlParserImpl(sql.getSql()).parse() | |
@@ -35,9 +32,7 @@ | |
} | |
} | |
- def iterate[T, R](clazz: Class[T], sql: SqlProvider) (callback: (T) => R): R = iterate(clazz, sql, null) (callback) | |
- | |
- def iterate[T, R](clazz: Class[T], sql: SqlProvider, param: AnyRef) (callback: (T) => R): R = { | |
+ def iterate[T, R](clazz: Class[T], sql: SqlProvider, param: AnyRef = null) (callback: (T) => R): R = { | |
val node: Node = new SqlParserImpl(sql.getSql()).parse() | |
val context: SqlContext = prepareSqlContext(convertParam(param)) | |
node.accept(context) | |
@@ -48,11 +43,11 @@ | |
def iterate[T, R](clazz: Class[T], sql: SqlProvider, context: R) (callback: (T, R) => R): R = iterate(clazz, sql, null, context) (callback) | |
def iterate[T, R](clazz: Class[T], sql: SqlProvider, param: AnyRef, context: R) (callback: (T, R) => R): R = { | |
- val node: Node = new SqlParserImpl(sql.getSql()).parse() | |
- val sqlContext: SqlContext = prepareSqlContext(convertParam(param)) | |
- node.accept(sqlContext) | |
- | |
- getSqlExecutor.iterate(clazz, new IterationCallbackAdapterWithContext(callback, context), sqlContext.getSql, sqlContext.getBindVariables) | |
+ var result = context | |
+ iterate(clazz, sql, param){t => | |
+ result = callback(t, result) | |
+ result | |
+ } | |
} | |
def executeUpdate(sql: SqlProvider, param: AnyRef = null): Int = { | |
@@ -69,7 +64,7 @@ | |
node.accept(context) | |
val countSql: String = sqlManager.getDialect.getCountSql(context.getSql); | |
- getSqlExecutor.getSingleResult(classOf[java.lang.Integer], countSql, context.getBindVariables).intValue | |
+ getSqlExecutor.getSingleResult(classOf[java.lang.Integer], countSql, context.getBindVariables).intValue | |
} | |
// TODO AnyじゃなくてObject? | |
@@ -80,7 +75,7 @@ | |
* @return the entity. If the entity which corresponds to the given primary key is not found, this method returns None. | |
*/ | |
def findEntity[T](clazz: Class[T], id: Any*): Option[T] = { | |
- Option(sqlManager.findEntity(clazz, id.map {e => e.asInstanceOf[java.lang.Object]}: _*)) | |
+ Option(sqlManager.findEntity(clazz, id.map {_.asInstanceOf[AnyRef]}: _*)) | |
} | |
/** | |
@@ -107,13 +102,10 @@ | |
/** | |
* パラメータがScalaのMapだったらjava.util.Mapに変換します。 | |
*/ | |
- private def convertParam(param: AnyRef): AnyRef = | |
- if(param.isInstanceOf[Map[String, _]]){ | |
- val map: java.util.Map[String, _] = param.asInstanceOf[Map[String, _]] | |
- map | |
- } else { | |
- param | |
- } | |
+ private def convertParam(param: AnyRef): AnyRef = param match { | |
+ case map: Map[String, _] => (map:java.util.Map[String, _]) | |
+ case params => params | |
+ } | |
// TODO リフレクション以外に方法はない?? | |
private def getSqlExecutor: SqlExecutor = { | |
@@ -123,7 +115,7 @@ | |
} | |
// TODO やるならここもリフレクションにしたほうがいいかも | |
- // TODO SqlManagerImplを継承すればprepareSqlContext()を直接呼び出せるけど… | |
+ // TODO SqlManagerImplを継承すればprepareSqlContext()を直接呼び出せるけど… | |
private def prepareSqlContext(param: AnyRef): SqlContext = { | |
val method = classOf[SqlManagerImpl].getDeclaredMethod("prepareSqlContext", classOf[Object]) | |
method.setAccessible(true) | |
@@ -136,15 +128,10 @@ | |
private class IterationCallbackAdapter[T, R](val callback: (T) => R) extends IterationCallback[T, R] { | |
def iterate(entity: T): R = callback(entity) | |
} | |
+} | |
- /** | |
- * イテレーション検索で使用するコールバック関数のアダプタ(引数あり)。 | |
- */ | |
- private class IterationCallbackAdapterWithContext[T, R](val callback: (T, R) => R, var context: R) extends IterationCallback[T, R] { | |
- def iterate(entity: T): R = { | |
- context = callback(entity, context) | |
- return context | |
- } | |
- } | |
+object SqlManager { | |
+ BeanDescFactoryInitializer.initialize() //It is called only once. | |
+ def apply(sqlManager: SqlManagerImpl): SqlManager = new SqlManager(sqlManager) | |
+} | |
-} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment