CHAPTER 7 ■ TRAITS AND TYPES AND GNARLY STUFF FOR ARCHITECTS
195
abstract class MyTuple2[TableType <: Table[TableType],
A1, A2](a1: A1, a2: A2)
extends Tuple2[A1, A2](a1, a2) with FieldProduct[TableType] {
def fieldProduct: (BasicColumn[TableType, A1],
BasicColumn[TableType, A2])
type ReturnType = (A1, A2)
def buildResult(rs: ResultSet): ReturnType =
(fieldProduct._1.getField(rs),
fieldProduct._2.getField(rs))
def ~[OT](p: BasicColumn[TableType, OT]):
MyTuple3[TableType, A1, A2, OT] ={
val f = fields
val fp = fieldProduct
new MyTuple3[TableType, A1, A2, OT](this._1, this._2, p.default) {
val fields = f ::: List(p)
val fieldProduct = (fp._1, fp._2, p)
}
}
}
abstract class MyTuple3[TableType <: Table[TableType],
A1, A2, A3]
(a1: A1, a2: A2, a3: A3) extends
Tuple3[A1, A2, A3](a1, a2, a3) with FieldProduct[TableType] {
def buildResult(rs: ResultSet): ReturnType =
(fieldProduct._1.getField(rs),
fieldProduct._2.getField(rs),
fieldProduct._3.getField(rs))
type ReturnType = (A1, A2, A3)
def fieldProduct: (BasicColumn[TableType, A1],
BasicColumn[TableType, A2],
BasicColumn[TableType, A3])
def ~[OT](p: BasicColumn[TableType, OT]):
19897ch07.fm Page 195 Monday, April 20, 2009 4:36 PM