204
CHAPTER 7
■ TRAITS AND TYPES AND GNARLY STUFF FOR ARCHITECTS
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]):
MyTuple4[TableType, A1, A2, A3, OT] = {
val f = fields
val fp = fieldProduct
new MyTuple4[TableType, A1, A2, A3,
OT](
this._1, this._2, this._3, p.default) {
val fields = f ::: List(p)
val fieldProduct = (fp._1, fp._2, fp._3, p)
}
}
}
abstract class MyTuple4[TableType <: Table[TableType],
A1, A2, A3, A4]
(a1: A1, a2: A2, a3: A3, a4: A4) extends
19897ch07.fm Page 204 Monday, April 20, 2009 4:36 PM