2015-03-12 1 views
0

Я использую Oracle в производстве и H2 в своих модульных тестах. Поскольку мы используем Oracle Spatial, мне нужно каким-то образом представлять объекты геометрии, которые будут отличаться в Oracle и H2. Мне не нужно работать с типами геометрии в базе данных (или, по крайней мере, у меня нет ожиданий, чтобы это сделать :-)). Поэтому я просто буду отображать геометрию в текстовое поле в H2, чтобы я мог поддерживать ввод/вывод.Как я могу проверить динамику базы данных/тип в Slick

Я полагаю, отображение столбца геометрии следующим образом:

def shape = if (<database is oracle) 
    column[Geometry]("SHAPE") (geometry2SdoGeometryMapper(TmcGeometry.srid)) 
    else if (<database is oracle>) 
    column[Geometry]("SHAPE", O.DBType("text")) (geometry2TextMapper) 
    else 
    sys.error(s"Unimplemented database type $<database type>) 

ответ

0

Одним из способов являются абстрактным этим методом shape, в Slick компоненту высшего порядка, который принимает параметр типа, с соответствующими подтипами. Нечто подобное может работать:

trait DBtype { 
    val GeometryMapper: {the expected type} 
    val Driver: Driver 
} 
GeometryRepository[B <: DBType] { 
    def shape = B.GeometryMapper 
} 
trait Oracle extends DBtype { 
    override val GeometryMapper = column[Geometry]("SHAPE") (geometry2SdoGeometryMapper(TmcGeometry.srid)) 
    override val Driver = OracleDriver 
} 

См this example для типа базы данных параметрирования в пятне.

0

Вы можете сделать driver.isInstanceOf[OracleDriver] и driver.isInstanceOf[H2Driver]