2

I would like to analyze a legacy mysql database (myisam engine) using latest Slick (3.1.1).

However, running slick.codegen.SourceCodeGenerator on that database results in an error:

slick.SlickException: Could not parse default value Some(0000-00-00 00:00:00) for column foo.bar.baz of type java.sql.Timestamp, meta data: MColumn(MQName(foo.bar),baz,93,DATETIME,Some(19),None,10,Some(false),Some(),Some(0000-00-00 00:00:00),0,1,Some(false),None,None,Some(false))
    at slick.jdbc.JdbcModelBuilder$ColumnBuilder.convenientDefault(JdbcModelBuilder.scala:270)
    at slick.jdbc.JdbcModelBuilder$ColumnBuilder.model(JdbcModelBuilder.scala:279)
    at slick.jdbc.JdbcModelBuilder$TableBuilder$$anonfun$columns$1.apply(JdbcModelBuilder.scala:161)
    ...
Caused by: scala.MatchError: (0000-00-00 00:00:00,java.sql.Timestamp) (of class scala.Tuple2)
    at slick.jdbc.JdbcModelBuilder$ColumnBuilder$$anonfun$default$1.apply(JdbcModelBuilder.scala:215)
    at slick.jdbc.JdbcModelBuilder$ColumnBuilder$$anonfun$default$1.apply(JdbcModelBuilder.scala:212)
    at scala.Option.map(Option.scala:146)
    at slick.jdbc.JdbcModelBuilder$ColumnBuilder.default(JdbcModelBuilder.scala:212)
    at slick.driver.MySQLDriver$ModelBuilder$$anon$4.slick$driver$MySQLDriver$ModelBuilder$$anon$$super$default(MySQLDriver.scala:71)
    at slick.driver.MySQLDriver$ModelBuilder$$anon$4$$anonfun$default$3.apply(MySQLDriver.scala:71)
    at slick.driver.MySQLDriver$ModelBuilder$$anon$4$$anonfun$default$3.apply(MySQLDriver.scala:70)
    at scala.Option.getOrElse(Option.scala:121)
    at slick.driver.MySQLDriver$ModelBuilder$$anon$4.default(MySQLDriver.scala:70)
    at slick.jdbc.JdbcModelBuilder$ColumnBuilder$$anonfun$defaultColumnOption$3.apply(JdbcModelBuilder.scala:252)
    at slick.jdbc.JdbcModelBuilder$ColumnBuilder$$anonfun$defaultColumnOption$3.apply(JdbcModelBuilder.scala:252)
    at scala.Option.getOrElse(Option.scala:121)
    at slick.jdbc.JdbcModelBuilder$ColumnBuilder.defaultColumnOption(JdbcModelBuilder.scala:251)
    at slick.jdbc.JdbcModelBuilder$ColumnBuilder.convenientDefault(JdbcModelBuilder.scala:261)
    at slick.jdbc.JdbcModelBuilder$ColumnBuilder.model(JdbcModelBuilder.scala:279)
    at slick.jdbc.JdbcModelBuilder$TableBuilder$$anonfun$columns$1.apply(JdbcModelBuilder.scala:161)
    ...

The concerned table (DDL code) looks like this:

CREATE TABLE `bar` (`baz` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00') ENGINE=MyISAM

What went wrong? How to fix?

Marcus
  • 1,857
  • 4
  • 22
  • 44
  • please see if this can help: http://stackoverflow.com/a/17196386/833073 – fthiella Dec 18 '15 at 09:51
  • I tried adding `&zeroDateTimeBehavior=convertToNull` to the JDBC URL, but that did not help. I guess SourceCodeGenerator operates on the structure, not the data. That's why. – Marcus Dec 18 '15 at 10:18
  • As a temporary workaround, I created a local copy of the database and removed that default value there. I rather want to fix this though. – Marcus Dec 18 '15 at 11:35
  • 2
    I believe this is the issue tracked [here](https://github.com/slick/slick/issues/1146) and that `MySQLDriver.createModel(..., ignoreInvalidDefaults = true)` is the workaround in the meantime: [docs](http://slick.typesafe.com/doc/3.1.1/api/index.html#slick.driver.MySQLDriver) – dmarwick Apr 27 '16 at 00:23

0 Answers0