Skip to content

Instantly share code, notes, and snippets.

@tomykaira
Created August 28, 2019 19:33
Show Gist options
  • Save tomykaira/8aefc0e7a34f7f31b1336d2c36ad7baf to your computer and use it in GitHub Desktop.
Save tomykaira/8aefc0e7a34f7f31b1336d2c36ad7baf to your computer and use it in GitHub Desktop.
Silly example case to reproduce "Unknown column" error on mysql 5.6, but not on mysql 8.0+
Unknown column 'x6.z' in 'where clause'
java.sql.SQLSyntaxErrorException: Unknown column 'x6.z' in 'where clause'
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:970)
at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:387)
at com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44)
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java)
at slick.jdbc.StatementInvoker.results(StatementInvoker.scala:38)
at slick.jdbc.StatementInvoker.iteratorTo(StatementInvoker.scala:21)
at slick.jdbc.Invoker.foreach(Invoker.scala:47)
at slick.jdbc.Invoker.foreach$(Invoker.scala:46)
at slick.jdbc.StatementInvoker.foreach(StatementInvoker.scala:15)
at slick.jdbc.StreamingInvokerAction.run(StreamingInvokerAction.scala:22)
at slick.jdbc.StreamingInvokerAction.run$(StreamingInvokerAction.scala:20)
at slick.jdbc.JdbcActionComponent$QueryActionExtensionMethodsImpl$$anon$2.run(JdbcActionComponent.scala:216)
at slick.jdbc.JdbcActionComponent$QueryActionExtensionMethodsImpl$$anon$2.run(JdbcActionComponent.scala:216)
at slick.basic.BasicBackend$DatabaseDef$$anon$3.liftedTree1$1(BasicBackend.scala:275)
at slick.basic.BasicBackend$DatabaseDef$$anon$3.run(BasicBackend.scala:275)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Process finished with exit code 0
package sillyexample
import org.scalatest.FunSuite
import slick.jdbc.MySQLProfile.api._
import scala.concurrent.{Await, ExecutionContext, ExecutionContextExecutor}
import scala.concurrent.duration.Duration
class ReproTest extends FunSuite {
class ATable(tag: Tag) extends Table[(String, String)](tag, "a") {
def x = column[String]("x", O.Length(100))
def y = column[String]("y", O.Length(100))
override def * = (x, y)
}
class BTable(tag: Tag) extends Table[(String, String)](tag, "b") {
def x = column[String]("x", O.Length(100))
def z = column[String]("z", O.Length(100))
override def * = (x, z)
}
class CTable(tag: Tag) extends Table[(String, String)](tag, "c") {
def z = column[String]("z", O.Length(100))
def w = column[String]("w", O.Length(100))
override def * = (z, w)
}
class DTable(tag: Tag) extends Table[(String)](tag, "d") {
def w = column[String]("w", O.Length(100))
override def * = (w)
}
implicit val ec: ExecutionContextExecutor = ExecutionContext.global
val db: Database = Database.forConfig("mysql_test")
val a = TableQuery(tag => new ATable(tag))
val b = TableQuery(tag => new BTable(tag))
val c = TableQuery(tag => new CTable(tag))
val d = TableQuery(tag => new DTable(tag))
test("query") {
Await.result(
db.run {
for {
_ <- sqlu"""
drop database if exists test;
create database test default character set utf8mb4 collate utf8mb4_bin;
use test;
"""
_ <- a.schema.dropIfExists
_ <- b.schema.dropIfExists
_ <- c.schema.dropIfExists
_ <- d.schema.dropIfExists
_ <- a.schema.create
_ <- b.schema.create
_ <- c.schema.create
_ <- d.schema.create
x <- a
.join(b.filter { bt =>
c.filter(_.z === bt.z)
.join(d)
.on(_.w === _.w)
.exists
})
.on(_.x === _.x)
.result
} yield println(x)
},
Duration.Inf,
)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment