diff --git a/querydsl-hql/pom.xml b/querydsl-hql/pom.xml
index ee803b6c8..a353d8a95 100644
--- a/querydsl-hql/pom.xml
+++ b/querydsl-hql/pom.xml
@@ -71,7 +71,7 @@
org.eclipse.persistence
eclipselink
- 2.1.0-M7
+ 2.1.0-SNAPSHOT
test
@@ -81,7 +81,14 @@
${hsqldb.version}
test
-
+
+
+ com.h2database
+ h2
+ 1.2.133
+ test
+
+
org.apache.derby
derby
diff --git a/querydsl-hql/src/main/java/com/mysema/query/hql/HQLSerializer.java b/querydsl-hql/src/main/java/com/mysema/query/hql/HQLSerializer.java
index 152bf52e3..c45b5ce80 100644
--- a/querydsl-hql/src/main/java/com/mysema/query/hql/HQLSerializer.java
+++ b/querydsl-hql/src/main/java/com/mysema/query/hql/HQLSerializer.java
@@ -281,6 +281,7 @@ public class HQLSerializer extends SerializerBase {
}
private void visitCast(Expr> source, Class> targetType) {
+ // NOT : this is not supported in JPQL, only HQL
append("cast(").handle(source);
append(AS);
append(targetType.getSimpleName().toLowerCase(Locale.ENGLISH)).append(")");
diff --git a/querydsl-hql/src/main/java/com/mysema/query/hql/HQLTemplates.java b/querydsl-hql/src/main/java/com/mysema/query/hql/HQLTemplates.java
index ee311b04e..c6123de02 100644
--- a/querydsl-hql/src/main/java/com/mysema/query/hql/HQLTemplates.java
+++ b/querydsl-hql/src/main/java/com/mysema/query/hql/HQLTemplates.java
@@ -65,7 +65,8 @@ public class HQLTemplates extends Templates {
add(Ops.ARRAY_SIZE, "size({0})");
// string
- add(Ops.CONCAT, "concat({0},{1})", 0);
+ add(Ops.LIKE, "{0} like {1}",1);
+ add(Ops.CONCAT, "concat({0},{1})",0);
add(Ops.MATCHES, "{0} like {1}", 27); // TODO : support real regexes
add(Ops.LOWER, "lower({0})");
add(Ops.SUBSTR_1ARG, "substring({0},{1}+1)");
@@ -82,8 +83,8 @@ public class HQLTemplates extends Templates {
add(Ops.ENDS_WITH_IC, "{0l} like {%%1}");
add(Ops.STARTS_WITH, "{0} like {1%}");
add(Ops.STARTS_WITH_IC, "{0l} like {1%%}");
- add(Ops.INDEX_OF, "locate({1},{0})-1");
- add(Ops.INDEX_OF_2ARGS, "locate({1},{0},{2}+1)-1");
+ add(Ops.INDEX_OF, "locate({1},{0}) - 1");
+ add(Ops.INDEX_OF_2ARGS, "locate({1},{0},{2}+1) - 1");
// date time
add(Ops.DateTimeOps.SYSDATE, "sysdate");
diff --git a/querydsl-hql/src/test/java/com/mysema/query/AbstractJPATest.java b/querydsl-hql/src/test/java/com/mysema/query/AbstractJPATest.java
index 5dee3b30f..af6e82393 100644
--- a/querydsl-hql/src/test/java/com/mysema/query/AbstractJPATest.java
+++ b/querydsl-hql/src/test/java/com/mysema/query/AbstractJPATest.java
@@ -54,6 +54,32 @@ public abstract class AbstractJPATest extends AbstractStandardTest{
assertFalse(results.isEmpty());
}
+// @Test
+// public void testQuery(){
+// String queryStr = "select cat.name, otherCat.name " +
+// "from Cat cat, Cat otherCat " +
+// "where length(cat.name) > :a1 and length(otherCat.name) > :a1 and locate(otherCat.name,cat.name) - 1 > :a1";
+//
+// javax.persistence.Query query = entityManager.createQuery(queryStr);
+// query.setParameter("a1", 1);
+// query.getResultList();
+// }
+
+// @Test
+// public void testQuery2(){
+// String queryStr = "select cat.name, otherCat.name " +
+// "from Cat cat, Cat otherCat " +
+// "where length(cat.name) > :a1 and length(otherCat.name) > :a1 and " +
+// "cat.name like concat(:a2,concat(substring(otherCat.name,:a3+1,:a4),:a2))";
+//
+// javax.persistence.Query query = entityManager.createQuery(queryStr);
+// query.setParameter("a1", 0);
+// query.setParameter("a2", "XXX");
+// query.setParameter("a3",0);
+// query.setParameter("a4",0);
+// query.getResultList();
+// }
+
@Test
@Override
public void tupleProjection(){
diff --git a/querydsl-hql/src/test/java/com/mysema/query/EclipseLinkTemplates.java b/querydsl-hql/src/test/java/com/mysema/query/EclipseLinkTemplates.java
index eac660a3c..33748704d 100644
--- a/querydsl-hql/src/test/java/com/mysema/query/EclipseLinkTemplates.java
+++ b/querydsl-hql/src/test/java/com/mysema/query/EclipseLinkTemplates.java
@@ -31,14 +31,18 @@ public class EclipseLinkTemplates extends HQLTemplates{
add(Ops.STARTS_WITH, "locate({1},{0})=1");
add(Ops.STARTS_WITH_IC, "locate({1l},{0l})=1");
- // EclipseLink specific
+ // EclipseLink specific (works at least with Derby, HSQLDB and H2)
add(Ops.DateTimeOps.SECOND, "func('second',{0})");
add(Ops.DateTimeOps.MINUTE, "func('minute',{0})");
add(Ops.DateTimeOps.HOUR, "func('hour',{0})");
+ add(Ops.DateTimeOps.DAY_OF_WEEK, "func('dayofweek',{0})");
add(Ops.DateTimeOps.DAY_OF_MONTH, "func('day',{0})");
+ add(Ops.DateTimeOps.DAY_OF_YEAR, "func('dayofyear',{0})");
add(Ops.DateTimeOps.MONTH, "func('month',{0})");
+ add(Ops.DateTimeOps.WEEK, "func('week',{0})");
add(Ops.DateTimeOps.YEAR, "func('year',{0})");
add(Ops.DateTimeOps.YEAR_MONTH, "func('year',{0}) * 100 + func('month',{0})");
+
}
public boolean wrapElements(Operator> operator){
@@ -50,6 +54,7 @@ public class EclipseLinkTemplates extends HQLTemplates{
}
public boolean isTypeAsString() {
+ // TODO : get rid of this when Hibernate supports type(alias)
return false;
}
diff --git a/querydsl-hql/src/test/java/com/mysema/query/_h2/H2JPAEclipseLinkTest.java b/querydsl-hql/src/test/java/com/mysema/query/_h2/H2JPAEclipseLinkTest.java
new file mode 100644
index 000000000..8e58d348b
--- /dev/null
+++ b/querydsl-hql/src/test/java/com/mysema/query/_h2/H2JPAEclipseLinkTest.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2009 Mysema Ltd.
+ * All rights reserved.
+ *
+ */
+package com.mysema.query._h2;
+
+import org.junit.runner.RunWith;
+
+import com.mysema.query.AbstractJPATest;
+import com.mysema.query.EclipseLinkTemplates;
+import com.mysema.query.Target;
+import com.mysema.query.hql.HQLTemplates;
+import com.mysema.testutil.JPAConfig;
+import com.mysema.testutil.JPATestRunner;
+
+/**
+ * @author tiwe
+ *
+ */
+@RunWith(JPATestRunner.class)
+@JPAConfig("h2-eclipselink")
+public abstract class H2JPAEclipseLinkTest extends AbstractJPATest{
+
+ protected HQLTemplates getTemplates(){
+ return EclipseLinkTemplates.DEFAULT;
+ }
+
+ @Override
+ protected Target getTarget() {
+ return Target.H2;
+ }
+
+}
diff --git a/querydsl-hql/src/test/java/com/mysema/query/_hsqldb/HSQLDBJPAEclipseLinkStandardTest.java b/querydsl-hql/src/test/java/com/mysema/query/_hsqldb/HSQLDBJPAEclipseLinkStandardTest.java
new file mode 100644
index 000000000..7774bee3a
--- /dev/null
+++ b/querydsl-hql/src/test/java/com/mysema/query/_hsqldb/HSQLDBJPAEclipseLinkStandardTest.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2009 Mysema Ltd.
+ * All rights reserved.
+ *
+ */
+package com.mysema.query._hsqldb;
+
+import org.junit.runner.RunWith;
+
+import com.mysema.query.AbstractJPATest;
+import com.mysema.query.EclipseLinkTemplates;
+import com.mysema.query.Target;
+import com.mysema.query.hql.HQLTemplates;
+import com.mysema.testutil.JPAConfig;
+import com.mysema.testutil.JPATestRunner;
+
+
+
+/**
+ * @author tiwe
+ *
+ */
+@RunWith(JPATestRunner.class)
+@JPAConfig("hsqldb-eclipselink")
+public abstract class HSQLDBJPAEclipseLinkStandardTest extends AbstractJPATest{
+
+ protected HQLTemplates getTemplates(){
+ return EclipseLinkTemplates.DEFAULT;
+ }
+
+ @Override
+ protected Target getTarget() {
+ return Target.HSQLDB;
+ }
+
+
+}
diff --git a/querydsl-hql/src/test/resources/META-INF/persistence.xml b/querydsl-hql/src/test/resources/META-INF/persistence.xml
index d0a842859..fb1d6c47c 100644
--- a/querydsl-hql/src/test/resources/META-INF/persistence.xml
+++ b/querydsl-hql/src/test/resources/META-INF/persistence.xml
@@ -40,13 +40,39 @@
-
+
+
+ org.eclipse.persistence.jpa.PersistenceProvider
+ false
+
+
+
+
+
+
+
+
+
+
+
+ org.eclipse.persistence.jpa.PersistenceProvider
+ false
+
+
+
+
+
+
+
+
+
+
diff --git a/querydsl-hql/src/test/resources/com/mysema/testutil/mysql.properties b/querydsl-hql/src/test/resources/com/mysema/testutil/mysql.properties
index 5b2a9f9e5..6e4c9b162 100644
--- a/querydsl-hql/src/test/resources/com/mysema/testutil/mysql.properties
+++ b/querydsl-hql/src/test/resources/com/mysema/testutil/mysql.properties
@@ -2,8 +2,8 @@
hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/querydsl
-hibernate.connection.username=root
-hibernate.connection.password=
+hibernate.connection.username=querydsl
+hibernate.connection.password=querydsl
## Common properties
hibernate.show_sql=true
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 f45d0b2b2..101397130 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
@@ -52,8 +52,7 @@ public class SQLInsertClause implements InsertClause {
private final List> values = new ArrayList>();
- public SQLInsertClause(Connection connection, SQLTemplates templates,
- PEntity> entity) {
+ public SQLInsertClause(Connection connection, SQLTemplates templates, PEntity> entity) {
this.connection = connection;
this.templates = templates;
this.entity = entity;
diff --git a/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java b/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java
index 9f5d03b98..a7ab998f6 100644
--- a/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java
+++ b/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java
@@ -17,6 +17,10 @@ import com.mysema.query.sql.SQLQuery;
import com.mysema.query.sql.SQLQueryImpl;
import com.mysema.query.sql.SQLSubQuery;
import com.mysema.query.sql.SQLTemplates;
+import com.mysema.query.sql.dml.SQLDeleteClause;
+import com.mysema.query.sql.dml.SQLInsertClause;
+import com.mysema.query.sql.dml.SQLUpdateClause;
+import com.mysema.query.types.path.PEntity;
public abstract class AbstractBaseTest {
@@ -29,7 +33,19 @@ public abstract class AbstractBaseTest {
@Nullable
protected String expectedQuery;
-
+
+ protected SQLUpdateClause update(PEntity> e){
+ return new SQLUpdateClause(Connections.getConnection(), dialect, e);
+ }
+
+ protected SQLInsertClause insert(PEntity> e){
+ return new SQLInsertClause(Connections.getConnection(), dialect, e);
+ }
+
+ protected SQLDeleteClause delete(PEntity> e){
+ return new SQLDeleteClause(Connections.getConnection(), dialect, e);
+ }
+
protected SQLQuery query() {
return new SQLQueryImpl(Connections.getConnection(), dialect) {
@Override
diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java
index 113c83f57..7e5f907d0 100644
--- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java
+++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java
@@ -85,7 +85,7 @@ public final class Connections {
private static Connection getMySQL() throws SQLException, ClassNotFoundException {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/querydsl";
- return DriverManager.getConnection(url, "root", "");
+ return DriverManager.getConnection(url, "querydsl", "querydsl");
}
private static Connection getOracle() throws SQLException, ClassNotFoundException{
diff --git a/querydsl-sql/src/test/java/com/mysema/query/InsertBaseTest.java b/querydsl-sql/src/test/java/com/mysema/query/InsertBaseTest.java
index 0045ab8aa..37bcaecb2 100644
--- a/querydsl-sql/src/test/java/com/mysema/query/InsertBaseTest.java
+++ b/querydsl-sql/src/test/java/com/mysema/query/InsertBaseTest.java
@@ -5,7 +5,6 @@
*/
package com.mysema.query;
-import static com.mysema.query.Connections.getConnection;
import static com.mysema.query.Constants.survey;
import static com.mysema.query.Constants.survey2;
@@ -16,25 +15,15 @@ import org.junit.Before;
import org.junit.Test;
import com.mysema.query.sql.SQLSubQuery;
-import com.mysema.query.sql.dml.SQLDeleteClause;
import com.mysema.query.sql.dml.SQLInsertClause;
import com.mysema.query.sql.domain.QEmployee;
import com.mysema.query.sql.domain.QSurvey;
-import com.mysema.query.types.path.PEntity;
public abstract class InsertBaseTest extends AbstractBaseTest{
-
- protected SQLInsertClause insert(PEntity> e){
- return new SQLInsertClause(getConnection(), dialect, e);
- }
-
- protected SQLDeleteClause delete(PEntity> e){
- return new SQLDeleteClause(Connections.getConnection(), dialect, e);
- }
private void reset() throws SQLException{
delete(survey).where(survey.name.isNotNull()).execute();
- Connections.getStatement().execute("insert into survey values (1, 'Hello World')");
+ insert(survey).values(1, "Hello World").execute();
}
@Before
diff --git a/querydsl-sql/src/test/java/com/mysema/query/UpdateBaseTest.java b/querydsl-sql/src/test/java/com/mysema/query/UpdateBaseTest.java
index ac757c918..9aa63738a 100644
--- a/querydsl-sql/src/test/java/com/mysema/query/UpdateBaseTest.java
+++ b/querydsl-sql/src/test/java/com/mysema/query/UpdateBaseTest.java
@@ -9,7 +9,6 @@ import static com.mysema.query.Constants.survey;
import static org.junit.Assert.assertEquals;
import java.sql.SQLException;
-import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -17,24 +16,13 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
-import com.mysema.query.sql.dml.SQLDeleteClause;
-import com.mysema.query.sql.dml.SQLUpdateClause;
import com.mysema.query.types.Path;
-import com.mysema.query.types.path.PEntity;
public abstract class UpdateBaseTest extends AbstractBaseTest{
- protected SQLUpdateClause update(PEntity> e){
- return new SQLUpdateClause(Connections.getConnection(), dialect, e);
- }
-
- protected SQLDeleteClause delete(PEntity> e){
- return new SQLDeleteClause(Connections.getConnection(), dialect, e);
- }
-
- private void reset() throws SQLException{
+ protected void reset() throws SQLException{
delete(survey).where(survey.name.isNotNull()).execute();
- Connections.getStatement().execute("insert into survey values (1, 'Hello World')");
+ insert(survey).values(1, "Hello World").execute();
}
@Before
diff --git a/querydsl-sql/src/test/java/com/mysema/testutil/FilteringTestRunner.java b/querydsl-sql/src/test/java/com/mysema/testutil/FilteringTestRunner.java
index bf069e3f3..45eca4889 100644
--- a/querydsl-sql/src/test/java/com/mysema/testutil/FilteringTestRunner.java
+++ b/querydsl-sql/src/test/java/com/mysema/testutil/FilteringTestRunner.java
@@ -45,8 +45,9 @@ public class FilteringTestRunner extends JUnit4ClassRunner {
@Override
public void run(final RunNotifier notifier) {
- if (run)
+ if (run){
super.run(notifier);
+ }
}
protected TestMethod wrapMethod(Method method) {