Hi,
I've played around and got something for the archives. The following
seems to work and has
been serving me well. As ever comments are appreciated.
object implicits {
implicit val InetMapper = new InetMapperImpl
implicit def toInet(x: NamedColumn[Inet]) = new InetFuncs(x)
}
case class Inet(s: String) {
def cidr = s
}
class InetMapperImpl extends BaseTypeMapper[Inet] with
TypeMapperDelegate[Inet] {
override val sqlTypeName = "inet"
override def valueToSQLLiteral(value: Inet) =
"'%s'".format(value.cidr)
def nextValue(r: PositionedResult): Inet = Inet(r.nextString)
def sqlType: Int = java.sql.Types.OTHER
def updateValue(v: Inet, r: PositionedResult): Unit =
r.updateObject(v.s)
def setValue(v: Inet, p: PositionedParameters): Unit =
p.setObject(v.s, sqlType)
def zero: Inet = Inet("
0.0.0.0/0")
def apply(p: BasicProfile) = this
def setOption(v: Option[Inet], p: PositionedParameters): Unit = {
if (v eq None) p.setObjectOption(None, sqlType) else
p.setObjectOption(Some(v.get.cidr), sqlType)
}
}
class InetFuncs(x: NamedColumn[Inet]) {
import implicits._
def contains(y: NamedColumn[Inet]): OperatorColumn[Boolean] =
SimpleBinaryOperator[Boolean](">>=").apply(x, y)
def family = SimpleFunction[Int]("family").apply(Seq(x))
def host = SimpleFunction[String]("host").apply(Seq(x))
def masklen = SimpleFunction[Int]("masklen").apply(Seq(x))
def netmask = SimpleFunction[Inet]("netmask").apply(Seq(x))
}
Pete