diff options
author | Zach Smith <zach@driver.xyz> | 2017-01-20 10:44:50 -0800 |
---|---|---|
committer | Zach Smith <zach@driver.xyz> | 2017-01-20 11:34:54 -0800 |
commit | 1f140b4936dc6a33b1aa87a1860ce054bd18b045 (patch) | |
tree | d30546c02e3f13e3f59aa3da5558f48bec11940a | |
parent | e216e81c05331c671aa7e34e04c54de1b96075a8 (diff) | |
download | driver-core-1f140b4936dc6a33b1aa87a1860ce054bd18b045.tar.gz driver-core-1f140b4936dc6a33b1aa87a1860ce054bd18b045.tar.bz2 driver-core-1f140b4936dc6a33b1aa87a1860ce054bd18b045.zip |
Switch to supporting both primitive and sql.Timestamp column types via inherited traits
-rw-r--r-- | src/main/scala/xyz/driver/core/database/database.scala | 65 |
1 files changed, 53 insertions, 12 deletions
diff --git a/src/main/scala/xyz/driver/core/database/database.scala b/src/main/scala/xyz/driver/core/database/database.scala index c4cf180..308c391 100644 --- a/src/main/scala/xyz/driver/core/database/database.scala +++ b/src/main/scala/xyz/driver/core/database/database.scala @@ -28,36 +28,55 @@ package database { trait ColumnTypes { val profile: JdbcProfile + } + + trait NameColumnTypes extends ColumnTypes { import profile.api._ + implicit def `xyz.driver.core.Name.columnType`[T]: BaseColumnType[Name[T]] + } - implicit def `xyz.driver.core.Id.columnType`[T]: BaseColumnType[Id[T]] + object NameColumnTypes { + trait StringName extends NameColumnTypes { + import profile.api._ - implicit def `xyz.driver.core.Name.columnType`[T]: BaseColumnType[Name[T]] = - MappedColumnType.base[Name[T], String](_.value, Name[T](_)) + override implicit def `xyz.driver.core.Name.columnType`[T]: BaseColumnType[Name[T]] = + MappedColumnType.base[Name[T], String](_.value, Name[T]) + } + } - implicit def `xyz.driver.core.time.Time.columnType`: BaseColumnType[Time] = - MappedColumnType.base[Time, java.sql.Timestamp](time => new java.sql.Timestamp(time.millis), - timestamp => Time(timestamp.getTime)) + trait DateColumnTypes extends ColumnTypes { + import profile.api._ + implicit def `xyz.driver.core.time.Date.columnType`: BaseColumnType[Date] + } - implicit def `xyz.driver.core.time.Date.columnType`: BaseColumnType[Date] = - MappedColumnType.base[Date, java.sql.Date](dateToSqlDate(_), sqlDateToDate(_)) + object DateColumnTypes { + trait SqlDate extends DateColumnTypes { + import profile.api._ + override implicit def `xyz.driver.core.time.Date.columnType`: BaseColumnType[Date] = + MappedColumnType.base[Date, java.sql.Date](dateToSqlDate, sqlDateToDate) + } } - object ColumnTypes { - trait UUID extends ColumnTypes { + trait IdColumnTypes extends ColumnTypes { + import profile.api._ + implicit def `xyz.driver.core.Id.columnType`[T]: BaseColumnType[Id[T]] + } + + object IdColumnTypes { + trait UUID extends IdColumnTypes { import profile.api._ override implicit def `xyz.driver.core.Id.columnType`[T] = MappedColumnType .base[Id[T], java.util.UUID](id => java.util.UUID.fromString(id.value), uuid => Id[T](uuid.toString)) } - trait SerialId extends ColumnTypes { + trait SerialId extends IdColumnTypes { import profile.api._ override implicit def `xyz.driver.core.Id.columnType`[T] = MappedColumnType.base[Id[T], Long](_.value.toLong, serialId => Id[T](serialId.toString)) } - trait NaturalId extends ColumnTypes { + trait NaturalId extends IdColumnTypes { import profile.api._ override implicit def `xyz.driver.core.Id.columnType`[T] = @@ -65,6 +84,28 @@ package database { } } + trait TimestampColumnTypes extends ColumnTypes { + import profile.api._ + implicit def `xyz.driver.core.time.Time.columnType`: BaseColumnType[Time] + } + + object TimestampColumnTypes { + trait SqlTimestamp extends TimestampColumnTypes { + import profile.api._ + + override implicit def `xyz.driver.core.time.Time.columnType`: BaseColumnType[Time] = + MappedColumnType.base[Time, java.sql.Timestamp](time => new java.sql.Timestamp(time.millis), + timestamp => Time(timestamp.getTime)) + } + + trait PrimitiveTimestamp extends TimestampColumnTypes { + import profile.api._ + + override implicit def `xyz.driver.core.time.Time.columnType`: BaseColumnType[Time] = + MappedColumnType.base[Time, Long](_.millis, Time(_)) + } + } + trait DatabaseObject extends ColumnTypes { def createTables(): Future[Unit] def disconnect(): Unit |