diff --git a/querydsl-scala/pom.xml b/querydsl-scala/pom.xml index 3ddab6449..a2ca1e832 100644 --- a/querydsl-scala/pom.xml +++ b/querydsl-scala/pom.xml @@ -97,6 +97,12 @@ hsqldb ${hsqldb.version} test + + + com.h2database + h2 + 1.2.133 + test diff --git a/querydsl-scala/src/test/scala/com/mysema/query/scala/sql/JDBCIntegrationTest.scala b/querydsl-scala/src/test/scala/com/mysema/query/scala/sql/JDBCIntegrationTest.scala index 0689de524..0c265820a 100644 --- a/querydsl-scala/src/test/scala/com/mysema/query/scala/sql/JDBCIntegrationTest.scala +++ b/querydsl-scala/src/test/scala/com/mysema/query/scala/sql/JDBCIntegrationTest.scala @@ -18,7 +18,12 @@ import java.util.Arrays import com.mysema.query.scala.ScalaBeanSerializer import com.mysema.query.scala.ScalaTypeMappings +import com.mysema.query.sql.dml._ + class JDBCIntegrationTest { + + val survey = new QSurvey("survey") + val employee = new QEmployee("employee") val templates = new HSQLDBTemplates() @@ -30,6 +35,7 @@ class JDBCIntegrationTest { def setUp() { Class.forName("org.hsqldb.jdbcDriver") val url = "jdbc:hsqldb:mem:testdb" + connection = DriverManager.getConnection(url, "sa", "") statement = connection.createStatement() statement.execute("drop table employee if exists") @@ -38,23 +44,24 @@ class JDBCIntegrationTest { statement.execute("drop table date_time_test if exists") statement.execute("create table survey (" - + "id int, " - + "name varchar(30), " - + "CONSTRAINT PK_survey PRIMARY KEY (id, name))") + + "id int identity, " + + "name varchar(30))") - statement.execute("insert into survey values (1, 'abc')") - statement.execute("insert into survey values (2, 'def')") + statement.execute("insert into survey (name) values ('abc')") + statement.execute("insert into survey (name) values ('def')") statement.execute("create table employee(" - + "id INT, " + + "id INT identity, " + "firstname VARCHAR(50), " + "lastname VARCHAR(50), " + "superior_id int, " + "CONSTRAINT PK_employee PRIMARY KEY (id), " + "CONSTRAINT FK_superior FOREIGN KEY (superior_id) REFERENCES employee(id))") - statement.execute("insert into employee values (1, 'Bob', 'Smith', null)") - statement.execute("insert into employee values (2, 'John', 'Doe', null)") + statement.execute("insert into employee (firstname, lastname) values ('Bob', 'Smith')") + statement.execute("insert into employee (firstname, lastname) values ('John', 'Doe')") + + // TODO : create table with multi column primary key } @Test @@ -68,6 +75,8 @@ class JDBCIntegrationTest { exporter.setCreateScalaSources(true) exporter.setTypeMappings(ScalaTypeMappings.create) exporter.export(connection.getMetaData) + + // TODO : compile sources } @Test @@ -83,29 +92,65 @@ class JDBCIntegrationTest { exporter.setCreateScalaSources(true) exporter.setTypeMappings(ScalaTypeMappings.create) exporter.export(connection.getMetaData) + + // TODO : compile sources } @Test - def Querying() { - val survey = new QSurvey("survey") - val employee = new QEmployee("employee") - + def List() { assertEquals(2, query from (survey) list (survey) size ()) - - // list assertEquals(2, query from (survey) list (survey.id) size ()) assertEquals(2, query from (employee) list (employee.firstname) size ()) - - // count + } + + @Test + def Count() { assertEquals(2, query from (survey) count) assertEquals(2, query from (employee) count) - - // uniqueResult - assertEquals("abc", query from survey where (survey.id eq 1) uniqueResult survey.name) - assertEquals("def", query from survey where (survey.id eq 2) uniqueResult survey.name) + } + + @Test + def UniqueResult() { + assertEquals("abc", query from survey where (survey.id eq 0) uniqueResult survey.name) + assertEquals("def", query from survey where (survey.id eq 1) uniqueResult survey.name) assertEquals("Bob", query from employee where (employee.lastname eq "Smith") uniqueResult employee.firstname) assertEquals("John", query from employee where (employee.lastname eq "Doe") uniqueResult employee.firstname) + } + + @Test + def Insert() { + val s = new Survey() + s.name = "XXX" + + val count = insert(survey) populate(s) execute() + assertTrue(count > 0) } + + @Test + @Ignore // executeWithKey is not supported with HSQLDB + def Update() { + val s = new Survey() + s.name = "XXX" + + val id = insert(survey) populate(s) executeWithKey(survey.id) + s.id = id + s.name = "YYY" + + val count = update(survey) populate(s) execute() + assertTrue(count > 0) + } + + @Test + @Ignore // executeWithKey is not supported with HSQLDB + def Delete() { + val s = new Survey() + s.name = "XXX" + + val id = insert(survey) populate(s) executeWithKey(survey.id) + val count = delete(survey) where(survey.id === id) execute() + assertTrue(count > 0) + } + @After def tearDown() { @@ -118,4 +163,10 @@ class JDBCIntegrationTest { def query = new SQLQueryImpl(connection, templates) + def delete(path: RelationalPath[_]) = new SQLDeleteClause(connection, templates, path) + + def insert(path: RelationalPath[_]) = new SQLInsertClause(connection, templates, path) + + def update(path: RelationalPath[_]) = new SQLUpdateClause(connection, templates, path) + } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java index 99c505db7..247c3aa67 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java @@ -5,6 +5,7 @@ */ package com.mysema.query.sql.dml; +import java.lang.reflect.Field; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -354,7 +355,9 @@ public class SQLInsertClause extends AbstractSQLClause implements InsertClause) entity.getClass().getField(property).get(entity); + Field field = entity.getClass().getDeclaredField(property); + field.setAccessible(true); + Path path = (Path) field.get(entity); if (entry.getValue() != null) { set(path, entry.getValue()); } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java index 55d36f8e9..a307d1a23 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java @@ -5,6 +5,7 @@ */ package com.mysema.query.sql.dml; +import java.lang.reflect.Field; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -231,7 +232,9 @@ public class SQLUpdateClause extends AbstractSQLClause implements UpdateClause< for (Map.Entry entry : map.entrySet()){ String property = entry.getKey().toString(); if (!property.equals("class")){ - Path path = (Path) entity.getClass().getField(property).get(entity); + Field field = entity.getClass().getDeclaredField(property); + field.setAccessible(true); + Path path = (Path) field.get(entity); if (!primaryKeyColumns.contains(path)){ set(path, entry.getValue()); }