![JAR search and dependency download from the Maven repository](/logo.png)
scray.jdbc.rows.JDBCRowMapper.scala Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of scray-jdbc Show documentation
Show all versions of scray-jdbc Show documentation
scray adapter to r/w JDBC tables
The newest version!
package scray.jdbc.rows
import java.sql.ResultSet
import scray.querying.description.Row
import java.sql.ResultSetMetaData
import scala.annotation.tailrec
import scray.querying.description.RowColumn
import scray.querying.description.TableIdentifier
import scray.querying.description.Column
import scray.querying.description.SimpleRow
import scala.collection.mutable.ArrayBuffer
import scray.querying.description.RowColumn
import scray.querying.description.TableIdentifier
import scray.querying.description.SimpleRow
import com.typesafe.scalalogging.LazyLogging
import scray.jdbc.extractors.JDBCSpecialColumnHandling
/**
* simple Row-Mapper for JDBC columns from JDBC ResultSets
* TODO: use new type system for mappings
*/
class JDBCRowMapper(ti: TableIdentifier) extends Function1[ResultSet, Row] with LazyLogging {
@tailrec private def walkColumns(rsMetadata: ResultSetMetaData, rs: ResultSet, counter: Int, colAgg: ArrayBuffer[RowColumn[_]]): ArrayBuffer[RowColumn[_]] = {
def typesafeAdd[T](newValue: T): Unit = {
colAgg += JDBCSpecialColumnHandling.getColumnFromValue(Column(rsMetadata.getColumnName(counter), ti), newValue)
}
if(counter > 0) {
Option(rs.getObject(counter)).map { _ =>
typesafeAdd(rs.getObject(counter))
}
walkColumns(rsMetadata, rs, counter - 1, colAgg)
} else {
colAgg
}
}
override def apply(rs: ResultSet): Row = {
val rsMetadata = rs.getMetaData
val columns = walkColumns(rsMetadata, rs, rsMetadata.getColumnCount, new ArrayBuffer[RowColumn[_]])
SimpleRow(columns)
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy