1

I have shifted to jooq 3.14 and facing code generation error.
Context : I am using mysql 5.7. In my DB information_schema.COLUMNS.DATETIME_PRECISION is missing. My question is the codegen used to work with jooq 3.10. But with jooq 3.14 its throwing the below error. Am I missing some setting to maybe make non-strict?

Below exception seen:

     [java][main] ERROR org.jooq.meta.AbstractElementContainerDefinition - Error while initialising type
     [java] org.jooq.exception.DataAccessException: SQL [select information_schema.COLUMNS.ORDINAL_POSITION, information_schema.COLUMNS.COLUMN_NAME, information_schema.COLUMNS.COLUMN_COMMENT, information_schema.COLUMNS.COLUMN_TYPE, information_schema.COLUMNS.DATA_TYPE, information_schema.COLUMNS.IS_NULLABLE, information_schema.COLUMNS.COLUMN_DEFAULT, information_schema.COLUMNS.CHARACTER_MAXIMUM_LENGTH, coalesce(information_schema.COLUMNS.NUMERIC_PRECISION, information_schema.COLUMNS.DATETIME_PRECISION) as NUMERIC_PRECISION, information_schema.COLUMNS.NUMERIC_SCALE, information_schema.COLUMNS.EXTRA from information_schema.COLUMNS where (information_schema.COLUMNS.TABLE_SCHEMA in (?, ?) and information_schema.COLUMNS.TABLE_NAME = ?) order by information_schema.COLUMNS.ORDINAL_POSITION]; Unknown column 'information_schema.COLUMNS.DATETIME_PRECISION' in 'field list'
     [java]     at org.jooq_3.14.0.MYSQL.debug(Unknown Source) ~[?:?]
     [java]     at org.jooq.impl.Tools.translate(Tools.java:2898) ~[jooq-3.14.0.jar:?]
     [java]     at org.jooq.impl.DefaultExecuteContext.sqlException(DefaultExecuteContext.java:757) ~[jooq-3.14.0.jar:?]
     [java]     at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:389) ~[jooq-3.14.0.jar:?]
     [java]     at org.jooq.impl.AbstractResultQuery.fetch(AbstractResultQuery.java:333) ~[jooq-3.14.0.jar:?]
     [java]     at org.jooq.impl.AbstractResultQuery.iterator(AbstractResultQuery.java:344) ~[jooq-3.14.0.jar:?]
     [java]     at org.jooq.impl.SelectImpl.iterator(SelectImpl.java:2890) ~[jooq-3.14.0.jar:?]
     [java]     at org.jooq.meta.mysql.MySQLTableDefinition.getElements0(MySQLTableDefinition.java:80) ~[jooq-meta-3.14.0.jar:?]
     [java]     at org.jooq.meta.AbstractElementContainerDefinition.getElements(AbstractElementContainerDefinition.java:88) [jooq-meta-3.14.0.jar:?]
     [java]     at org.jooq.meta.AbstractElementContainerDefinition.getElement(AbstractElementContainerDefinition.java:132) [jooq-meta-3.14.0.jar:?]
     [java]     at org.jooq.meta.AbstractElementContainerDefinition.getElement(AbstractElementContainerDefinition.java:128) [jooq-meta-3.14.0.jar:?]
     [java]     at org.jooq.meta.AbstractTableDefinition.getColumn(AbstractTableDefinition.java:177) [jooq-meta-3.14.0.jar:?]
     [java]     at org.jooq.meta.mysql.MySQLDatabase.getEnums0(MySQLDatabase.java:496) [jooq-meta-3.14.0.jar:?]
     [java]     at org.jooq.meta.AbstractDatabase$8.run(AbstractDatabase.java:1723) [jooq-meta-3.14.0.jar:?]
     [java]     at org.jooq.meta.AbstractDatabase.onError(AbstractDatabase.java:3094) [jooq-meta-3.14.0.jar:?]
     [java]     at org.jooq.meta.AbstractDatabase.getEnums(AbstractDatabase.java:1720) [jooq-meta-3.14.0.jar:?]
     [java]     at org.jooq.codegen.JavaGenerator.generateSchemaIfEmpty(JavaGenerator.java:495) [jooq-codegen-3.14.0.jar:?]
     [java]     at org.jooq.codegen.JavaGenerator.generateCatalogIfEmpty(JavaGenerator.java:482) [jooq-codegen-3.14.0.jar:?]
     [java]     at org.jooq.codegen.JavaGenerator.generate(JavaGenerator.java:436) [jooq-codegen-3.14.0.jar:?]
     [java]     at org.jooq.codegen.GenerationTool.run0(GenerationTool.java:879) [jooq-codegen-3.14.0.jar:?]
     [java]     at org.jooq.codegen.GenerationTool.run(GenerationTool.java:233) [jooq-codegen-3.14.0.jar:?]
     [java]     at org.jooq.codegen.GenerationTool.generate(GenerationTool.java:228) [jooq-codegen-3.14.0.jar:?]
     [java]     at com.project.annotations.CodeGenerator.run(Unknown Source) [classes/:?]
     [java]     at com.project.annotations.CodeGenerator.main(Unknown Source) [classes/:?]
     [java] Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'information_schema.COLUMNS.DATETIME_PRECISION' in 'field list'
     [java]     at sun.reflect.GeneratedConstructorAccessor19.newInstance(Unknown Source) ~[?:?]
     [java]     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_265]
     [java]     at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_265]
     [java]     at com.mysql.jdbc.Util.handleNewInstance(Util.java:409) ~[perfios-database-migrator.jar:?]
     [java]     at com.mysql.jdbc.Util.getInstance(Util.java:384) ~[perfios-database-migrator.jar:?]
     [java]     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054) ~[perfios-database-migrator.jar:?]
     [java]     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3566) ~[perfios-database-migrator.jar:?]
     [java]     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498) ~[perfios-database-migrator.jar:?]
     [java]     at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959) ~[perfios-database-migrator.jar:?]
     [java]     at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113) ~[perfios-database-migrator.jar:?]
     [java]     at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568) ~[perfios-database-migrator.jar:?]
     [java]     at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2113) ~[perfios-database-migrator.jar:?]
     [java]     at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1364) ~[perfios-database-migrator.jar:?]
     [java]     at org.jooq.tools.jdbc.DefaultPreparedStatement.execute(DefaultPreparedStatement.java:214) ~[jooq-3.14.0.jar:?]
     [java]     at org.jooq.impl.Tools.executeStatementAndGetFirstResultSet(Tools.java:4186) ~[jooq-3.14.0.jar:?]
     [java]     at org.jooq.impl.AbstractResultQuery.execute(AbstractResultQuery.java:279) ~[jooq-3.14.0.jar:?]
     [java]     at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:375) ~[jooq-3.14.0.jar:?]
     [java]     ... 20 more

Thanks in advance!

bitsobits
  • 104
  • 11
  • What exact version of MySQL is this about? The column is there in [MySQL 5.7.32](https://dev.mysql.com/doc/refman/5.7/en/information-schema-columns-table.html)... – Lukas Eder Nov 04 '20 at 12:51
  • @LukasEder The mysql version is 5.7.31 – bitsobits Nov 05 '20 at 10:29
  • That's very interesting. I tried with `docker pull mysql:5.7.31` and the column is there. I mean, [it's been there in 5.6 as well](https://dev.mysql.com/doc/refman/5.6/en/information-schema-columns-table.html). What do you see when you query the `information_schema.columns` table manually? – Lukas Eder Nov 05 '20 at 10:46
  • @LukasEder Thanks for swift reply. When I query manually as well, I dont see the column `DATETIME_PRECISION`. Is something changed in jooq 3.14, that its breaking but working for previous version 3.10. – bitsobits Nov 06 '20 at 07:11
  • Well, the thing that has changed is that we now query this column, which you cannot see. The column should be there as per the MySQL documentation, so something is wrong with your installation. How can this be reproduced? Are you using a third party build of MySQL? Or some very specific set of privileges? We can, of course, try not to query the column if it's not visible (this patch will ship with 3.14.2: https://github.com/jOOQ/jOOQ/issues/10856), but it would still be interesting to learn why your installation doesn't produce the behaviour as per the documentation – Lukas Eder Nov 06 '20 at 08:42
  • 1
    @LukasEder Thanks for taking this forward. Will check the installation and revert with findings as well. – bitsobits Nov 06 '20 at 10:08

0 Answers0