trait RecordBaseMeta[T <: RecordBase[T]] {
def tableName = getClass.getName.replaceFirst("\\$+$", "").replaceFirst(".*[\\$\\.]", "")
def findAll: List[T] = {
var list: List[T] = Nil
val results = conn.createStatement.executeQuery("select * from " + tableName)
while (results.next) {
var data = Map[String, AnyRef]()
val metaData = results.getMetaData
for (column <- 1 to metaData.getColumnCount) {
val obj = results.getObject(column)
data = data + (metaData.getColumnName(column) ->
(if (metaData.isNullable(column) == ResultSetMetaData.columnNoNulls)
obj
else {
if (obj == null) None else Some(obj)
}))
}
list = (getClass.getSuperclass.newInstance.asInstanceOf[T]).withData(data) :: list
}
list
}
}