diff --git a/querydsl-apt/pom.xml b/querydsl-apt/pom.xml
index 8c923ad0e..bbc1eefff 100644
--- a/querydsl-apt/pom.xml
+++ b/querydsl-apt/pom.xml
@@ -5,7 +5,7 @@
com.mysema.querydsl
querydsl-root
- 1.3.13-SNAPSHOT
+ 1.3.14
com.mysema.querydsl
diff --git a/querydsl-collections/pom.xml b/querydsl-collections/pom.xml
index 6578a8bf6..66ed5fe5f 100644
--- a/querydsl-collections/pom.xml
+++ b/querydsl-collections/pom.xml
@@ -5,7 +5,7 @@
com.mysema.querydsl
querydsl-root
- 1.3.13-SNAPSHOT
+ 1.3.14
com.mysema.querydsl
diff --git a/querydsl-core/pom.xml b/querydsl-core/pom.xml
index 882bbd736..ca0af87d6 100644
--- a/querydsl-core/pom.xml
+++ b/querydsl-core/pom.xml
@@ -5,7 +5,7 @@
com.mysema.querydsl
querydsl-root
- 1.3.13-SNAPSHOT
+ 1.3.14
com.mysema.querydsl
diff --git a/querydsl-core/src/main/java/com/mysema/query/DefaultQueryMetadata.java b/querydsl-core/src/main/java/com/mysema/query/DefaultQueryMetadata.java
index 9463a4336..1db65bef4 100644
--- a/querydsl-core/src/main/java/com/mysema/query/DefaultQueryMetadata.java
+++ b/querydsl-core/src/main/java/com/mysema/query/DefaultQueryMetadata.java
@@ -121,6 +121,18 @@ public class DefaultQueryMetadata implements QueryMetadata, Cloneable {
}
}
+ public void clearOrderBy(){
+ orderBy.clear();
+ }
+
+ public void clearProjection(){
+ projection.clear();
+ }
+
+ public void clearWhere(){
+ where = new BooleanBuilder();
+ }
+
@Override
public QueryMetadata clone(){
try {
diff --git a/querydsl-core/src/main/java/com/mysema/query/QueryMetadata.java b/querydsl-core/src/main/java/com/mysema/query/QueryMetadata.java
index b861d268b..293a16da1 100644
--- a/querydsl-core/src/main/java/com/mysema/query/QueryMetadata.java
+++ b/querydsl-core/src/main/java/com/mysema/query/QueryMetadata.java
@@ -64,6 +64,26 @@ public interface QueryMetadata extends Serializable {
*/
void addWhere(EBoolean... o);
+ /**
+ *
+ */
+ void clearOrderBy();
+
+ /**
+ *
+ */
+ void clearProjection();
+
+ /**
+ *
+ */
+ void clearWhere();
+
+ /**
+ * @return
+ */
+ QueryMetadata clone();
+
/**
* @return
*/
@@ -79,29 +99,29 @@ public interface QueryMetadata extends Serializable {
* @return
*/
List getJoins();
-
+
/**
* @return
*/
@Nullable
QueryModifiers getModifiers();
-
+
/**
* @return
*/
List> getOrderBy();
-
+
/**
* @return
*/
List extends Expr>> getProjection();
-
+
/**
* @return
*/
@Nullable
EBoolean getWhere();
-
+
/**
* @return
*/
@@ -112,16 +132,21 @@ public interface QueryMetadata extends Serializable {
*/
boolean isUnique();
+ /**
+ *
+ */
+ void reset();
+
/**
* @param distinct
*/
void setDistinct(boolean distinct);
-
+
/**
* @param limit
*/
void setLimit(@Nullable Long limit);
-
+
/**
* @param restriction
*/
@@ -136,14 +161,4 @@ public interface QueryMetadata extends Serializable {
* @param unique
*/
void setUnique(boolean unique);
-
- /**
- *
- */
- void reset();
-
- /**
- * @return
- */
- QueryMetadata clone();
}
\ No newline at end of file
diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/EConstructor.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/EConstructor.java
index 369c5870b..3a79d4ce4 100644
--- a/querydsl-core/src/main/java/com/mysema/query/types/expr/EConstructor.java
+++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/EConstructor.java
@@ -25,18 +25,22 @@ import com.mysema.query.types.Visitor;
public class EConstructor extends Expr {
private static final long serialVersionUID = -602747921848073175L;
+
+ private static Class> normalize(Class> clazz){
+ if (clazz.isPrimitive()){
+ return ClassUtils.primitiveToWrapper(clazz);
+ }else{
+ return clazz;
+ }
+ }
public static EConstructor create(Class type, Expr>... args){
for (Constructor> c : type.getConstructors()){
Class>[] paramTypes = c.getParameterTypes();
if (paramTypes.length == args.length){
boolean found = true;
- for (int i = 0; i < paramTypes.length; i++){
- Class> paramType = paramTypes[i];
- if (paramType.isPrimitive()){
- paramType = ClassUtils.primitiveToWrapper(paramType);
- }
- if (!paramType.isAssignableFrom(args[i].getType())){
+ for (int i = 0; i < paramTypes.length; i++){
+ if (!normalize(paramTypes[i]).isAssignableFrom(args[i].getType())){
found = false;
break;
}
diff --git a/querydsl-core/src/test/java/com/mysema/query/Filters.java b/querydsl-core/src/test/java/com/mysema/query/Filters.java
index 9eb5169dd..4303088cc 100644
--- a/querydsl-core/src/test/java/com/mysema/query/Filters.java
+++ b/querydsl-core/src/test/java/com/mysema/query/Filters.java
@@ -242,7 +242,9 @@ public class Filters {
rv.add(expr.like("%"+knownValue.substring(1)));
rv.add(expr.like("%"+knownValue.substring(1,2)+"%"));
- if (!target.equals(Target.DERBY) && !target.equals(Target.HSQLDB)){
+ if (!target.equals(Target.DERBY)
+ && !target.equals(Target.HSQLDB)
+ && !target.equals(Target.SQLSERVER)){
rv.add(expr.matches(knownValue.substring(0,1)+".*"));
rv.add(expr.matches(".*"+knownValue.substring(1)));
rv.add(expr.matches(".*"+knownValue.substring(1,2)+".*"));
diff --git a/querydsl-core/src/test/java/com/mysema/query/MatchingFilters.java b/querydsl-core/src/test/java/com/mysema/query/MatchingFilters.java
index 16e209d15..85d6e86e3 100644
--- a/querydsl-core/src/test/java/com/mysema/query/MatchingFilters.java
+++ b/querydsl-core/src/test/java/com/mysema/query/MatchingFilters.java
@@ -75,7 +75,9 @@ public class MatchingFilters {
if (!target.equals(Target.DERBY) && !module.equals(Module.JDOQL)){
rv.add(expr.dayOfWeek().eq(other.dayOfWeek ()));
rv.add(expr.dayOfYear().eq(other.dayOfYear()));
- rv.add(expr.week().eq(other.week()));
+ if (!target.equals(Target.SQLSERVER)){
+ rv.add(expr.week().eq(other.week()));
+ }
}
rv.add(expr.month().eq(other.month()));
@@ -103,7 +105,9 @@ public class MatchingFilters {
if (!target.equals(Target.DERBY) && !module.equals(Module.JDOQL)){
rv.add(expr.dayOfWeek().eq(other.dayOfWeek ()));
rv.add(expr.dayOfYear().eq(other.dayOfYear()));
- rv.add(expr.week().eq(other.week()));
+ if (!target.equals(Target.SQLSERVER)){
+ rv.add(expr.week().eq(other.week()));
+ }
}
rv.add(expr.month().eq(other.month()));
@@ -212,7 +216,8 @@ public class MatchingFilters {
rv.add(expr.lower().eq(other.lower()));
- if (!module.equals(Module.SQL) || (!target.equals(Target.HSQLDB) && !target.equals(Target.DERBY))){
+ if (!module.equals(Module.SQL)
+ || (!target.equals(Target.HSQLDB) && !target.equals(Target.DERBY) && !target.equals(Target.SQLSERVER))){
rv.add(expr.matches(other.substring(0,1).append(".*")));
rv.add(expr.matches(other.substring(0,1).append(".").append(other.substring(2))));
rv.add(expr.matches(other.substring(1).prepend(".*")));
diff --git a/querydsl-hql/pom.xml b/querydsl-hql/pom.xml
index 2f808d21f..6d35b8d52 100644
--- a/querydsl-hql/pom.xml
+++ b/querydsl-hql/pom.xml
@@ -5,7 +5,7 @@
com.mysema.querydsl
querydsl-root
- 1.3.13-SNAPSHOT
+ 1.3.14
com.mysema.querydsl
@@ -87,12 +87,12 @@
mysql-connector-java
5.1.6
test
-
-
- net.sourceforge.jtds
- jtds
- 1.2.4
- test
+
+
+ net.sourceforge.jtds
+ jtds
+ 1.2.4
+ test
com.mysema.querydsl
diff --git a/querydsl-jdoql/pom.xml b/querydsl-jdoql/pom.xml
index 39a886f61..b63c38983 100644
--- a/querydsl-jdoql/pom.xml
+++ b/querydsl-jdoql/pom.xml
@@ -5,7 +5,7 @@
com.mysema.querydsl
querydsl-root
- 1.3.13-SNAPSHOT
+ 1.3.14
com.mysema.querydsl
diff --git a/querydsl-maven-plugin/pom.xml b/querydsl-maven-plugin/pom.xml
index 362dcbc8a..4f644d187 100644
--- a/querydsl-maven-plugin/pom.xml
+++ b/querydsl-maven-plugin/pom.xml
@@ -5,7 +5,7 @@
com.mysema.querydsl
querydsl-root
- 1.3.13-SNAPSHOT
+ 1.3.14
com.mysema.querydsl
diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml
index c2f665d66..2206a6317 100644
--- a/querydsl-root/pom.xml
+++ b/querydsl-root/pom.xml
@@ -4,7 +4,7 @@
4.0.0
com.mysema.querydsl
querydsl-root
- 1.3.13-SNAPSHOT
+ 1.3.14
Querydsl
parent project for querydsl modules
http://source.mysema.com/display/querydsl
diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml
index 3645a271b..bb9ff3957 100644
--- a/querydsl-sql/pom.xml
+++ b/querydsl-sql/pom.xml
@@ -5,7 +5,7 @@
com.mysema.querydsl
querydsl-root
- 1.3.13-SNAPSHOT
+ 1.3.14
com.mysema.querydsl
diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/DerbyTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/DerbyTemplates.java
index db68acc60..27bda10b4 100644
--- a/querydsl-sql/src/main/java/com/mysema/query/sql/DerbyTemplates.java
+++ b/querydsl-sql/src/main/java/com/mysema/query/sql/DerbyTemplates.java
@@ -5,6 +5,8 @@
*/
package com.mysema.query.sql;
+import com.mysema.query.QueryMetadata;
+import com.mysema.query.QueryModifiers;
import com.mysema.query.types.operation.Ops;
/**
@@ -14,6 +16,13 @@ import com.mysema.query.types.operation.Ops;
*
*/
public class DerbyTemplates extends SQLTemplates {
+
+ private String limitOffsetTemplate = "\noffset {1s} rows fetch next {0s} rows only";
+
+ private String limitTemplate = "\nfetch first {0s} rows only";
+
+ private String offsetTemplate = "\noffset {0s} rows";
+
{
addClass2TypeMappings("smallint", Byte.class);
@@ -26,9 +35,21 @@ public class DerbyTemplates extends SQLTemplates {
add(Ops.CASE_EQ_WHEN, "when {0} = {1} then {2} {3}");
add(Ops.CASE_EQ_ELSE, "else {0}");
- setLimitAndOffsetSymbols(false);
- setLimitTemplate("fetch first {0s} rows only");
- setOffsetTemplate("offset {0s} rows");
- setLimitOffsetTemplate("offset {1s} rows fetch next {0s} rows only");
+// setLimitAndOffsetSymbols(false);
+// setLimitTemplate("fetch first {0s} rows only");
+// setOffsetTemplate("offset {0s} rows");
+// setLimitOffsetTemplate("offset {1s} rows fetch next {0s} rows only");
}
+
+ protected void serializeModifiers(QueryMetadata metadata, SerializationContext context) {
+ QueryModifiers mod = metadata.getModifiers();
+ if (mod.getLimit() == null){
+ context.handle(offsetTemplate, mod.getOffset());
+ }else if (mod.getOffset() == null){
+ context.handle(limitTemplate, mod.getLimit());
+ }else{
+ context.handle(limitOffsetTemplate, mod.getLimit(), mod.getOffset());
+ }
+ }
+
}
\ No newline at end of file
diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/OracleTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/OracleTemplates.java
index 8048a4cbb..0b4afa4d9 100644
--- a/querydsl-sql/src/main/java/com/mysema/query/sql/OracleTemplates.java
+++ b/querydsl-sql/src/main/java/com/mysema/query/sql/OracleTemplates.java
@@ -7,6 +7,8 @@ package com.mysema.query.sql;
import java.math.BigInteger;
+import com.mysema.query.QueryMetadata;
+import com.mysema.query.QueryModifiers;
import com.mysema.query.types.operation.Ops;
/**
@@ -19,6 +21,12 @@ import com.mysema.query.types.operation.Ops;
*/
public class OracleTemplates extends SQLTemplates {
+ private String limitOffsetTemplate = "rn > {0s} and rn <= {1s}";
+
+ private String limitTemplate = "rn <= {0}";
+
+ private String offsetTemplate = "rn > {0}";
+
public OracleTemplates(){
// type mappings
addClass2TypeMappings("number(3,0)", Byte.class);
@@ -54,10 +62,40 @@ public class OracleTemplates extends SQLTemplates {
add(Ops.DateTimeOps.MINUTE, "to_number(to_char({0},'MI'))");
add(Ops.DateTimeOps.SECOND, "to_number(to_char({0},'SS'))");
- setLimitAndOffsetSymbols(false);
- setRequiresWhereForPagingSymbols(true);
- setLimitTemplate("rownum < {0}");
- setOffsetTemplate("rownum > {0}");
- setLimitOffsetTemplate("rownum between {0} and {2}");
+// setLimitAndOffsetSymbols(false);
+// setRequiresWhereForPagingSymbols(true);
+// setLimitTemplate("rownum < {0}");
+// setOffsetTemplate("rownum > {0}");
+// setLimitOffsetTemplate("rownum between {0} and {2}");
}
+
+ @Override
+ public void serialize(QueryMetadata metadata, boolean forCountRow, SerializationContext context) {
+ if (!forCountRow && metadata.getModifiers().isRestricting()){
+ QueryModifiers mod = metadata.getModifiers();
+
+ if (mod.getOffset() == null){
+ context.append("select * from (\n ");
+ context.serialize(metadata, forCountRow);
+ context.handle("\n) where rownum <= {0}", mod.getLimit());
+ }else{
+ context.append("select * from (\n");
+ context.append(" select a.*, rownum rn from (\n ");
+ context.serialize(metadata, forCountRow);
+ context.append("\n ) a) where ");
+
+ if (mod.getLimit() == null){
+ context.handle(offsetTemplate, mod.getOffset());
+ }else if (mod.getOffset() == null){
+ context.handle(limitTemplate, mod.getLimit());
+ }else{
+ context.handle(limitOffsetTemplate, mod.getOffset(), mod.getLimit() + mod.getOffset());
+ }
+ }
+
+ }else{
+ context.serialize(metadata, forCountRow);
+ }
+ }
+
}
\ No newline at end of file
diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java
index 650d3da88..8fdfc64eb 100644
--- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java
+++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java
@@ -20,6 +20,7 @@ import com.mysema.query.QueryMetadata;
import com.mysema.query.serialization.SerializerBase;
import com.mysema.query.types.Order;
import com.mysema.query.types.OrderSpecifier;
+import com.mysema.query.types.custom.CSimple;
import com.mysema.query.types.expr.Constant;
import com.mysema.query.types.expr.EBoolean;
import com.mysema.query.types.expr.EConstructor;
@@ -39,7 +40,30 @@ import com.mysema.query.types.query.SubQuery;
*/
public class SQLSerializer extends SerializerBase {
- // TODO : improved table and column serialization
+ private final SerializationContext context = new SerializationContext(){
+
+ @Override
+ public void serialize(QueryMetadata metadata, boolean forCountRow) {
+ SQLSerializer.this.serializeForQuery(metadata, forCountRow);
+ }
+
+ @Override
+ public SerializationContext append(String str) {
+ SQLSerializer.this.append(str);
+ return this;
+ }
+
+ @Override
+ public void handle(String template, Object... args) {
+ Expr>[] exprs = new Expr[args.length];
+ for (int i = 0; i < args.length; i++){
+ exprs[i] = ExprConst.create(args[i]);
+ }
+ SQLSerializer.this.handle(CSimple.create(Object.class, template, exprs));
+
+ }
+
+ };
private static final String COMMA = ", ";
@@ -115,8 +139,12 @@ public class SQLSerializer extends SerializerBase {
handle(je.getTarget());
}
+ public void serialize(QueryMetadata metadata, boolean forCountRow){
+ templates.serialize(metadata, forCountRow, context);
+ }
+
@SuppressWarnings("unchecked")
- public void serialize(QueryMetadata metadata, boolean forCountRow) {
+ private void serializeForQuery(QueryMetadata metadata, boolean forCountRow) {
List extends Expr>> select = metadata.getProjection();
List joins = metadata.getJoins();
EBoolean where = metadata.getWhere();
@@ -155,13 +183,7 @@ public class SQLSerializer extends SerializerBase {
append(templates.getSelect());
} else {
append(templates.getSelectDistinct());
- }
- if (metadata.getModifiers().isRestricting() && !forCountRow && !templates.isPagingAfterOrder()){
- Long limit = metadata.getModifiers().getLimit();
- Long offset = metadata.getModifiers().getOffset();
- serializeModifiers(where, limit, offset);
- }
-
+ }
handle(COMMA, sqlSelect);
}
@@ -193,13 +215,6 @@ public class SQLSerializer extends SerializerBase {
serializeOrderBy(orderBy);
}
- // limit & offset
- if (metadata.getModifiers().isRestricting() && !forCountRow && templates.isPagingAfterOrder()){
- Long limit = metadata.getModifiers().getLimit();
- Long offset = metadata.getModifiers().getOffset();
- serializeModifiers(where, limit, offset);
- }
-
}
public void serializeForDelete(PEntity> entity, EBoolean where) {
@@ -267,24 +282,6 @@ public class SQLSerializer extends SerializerBase {
}
}
- private void serializeModifiers(@Nullable EBoolean where, Long limit, Long offset) {
- if (!templates.isLimitAndOffsetSymbols()){
- if (where == null && templates.isRequiresWhereForPagingSymbols()){
- append(templates.getWhere());
- }else if (templates.isPagingAfterOrder()){
- append(" ");
- }
- handle(templates.getLimitOffsetCondition(limit, offset));
- }else{
- if (limit != null) {
- append(templates.getLimit()).append(String.valueOf(limit));
- }
- if (offset != null) {
- append(templates.getOffset()).append(String.valueOf(offset));
- }
- }
- }
-
private void serializeOrderBy(List> orderBy) {
append(templates.getOrderBy());
boolean first = true;
diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java
index 52644b13a..acd97b9d1 100644
--- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java
+++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java
@@ -5,7 +5,12 @@
*/
package com.mysema.query.sql;
+import com.mysema.query.QueryMetadata;
+import com.mysema.query.QueryModifiers;
+import com.mysema.query.sql.mssql.RowNumber;
+import com.mysema.query.types.OrderSpecifier;
import com.mysema.query.types.operation.Ops;
+import com.mysema.query.types.path.PNumber;
/**
* SQLServerTemplates is an SQL dialect for Microsoft SQL Server
@@ -15,8 +20,16 @@ import com.mysema.query.types.operation.Ops;
* @author tiwe
*
*/
-// NOTE : under construction
public class SQLServerTemplates extends SQLTemplates{
+
+ private static final PNumber rowNumber = new PNumber(Long.class, "row_number");
+
+ private String limitOffsetTemplate = "row_number > {0} and row_number <= {1}";
+
+ private String limitTemplate = "row_number <= {0}";
+
+ private String offsetTemplate = "row_number > {0}";
+
{
addClass2TypeMappings("decimal", Double.class);
@@ -44,10 +57,44 @@ public class SQLServerTemplates extends SQLTemplates{
add(Ops.DateTimeOps.SECOND, "datepart(second, {0})");
add(Ops.DateTimeOps.MILLISECOND, "datepart(millisecond, {0})");
- setLimitAndOffsetSymbols(false);
- setPagingAfterOrder(false);
- setLimitTemplate("top {0s} ");
- setOffsetTemplate(""); // FIXME
- setLimitOffsetTemplate("top {2s} "); // FIXME
+// setLimitAndOffsetSymbols(false);
+// setPagingAfterOrder(false);
+// setLimitTemplate("top {0s} ");
+// setOffsetTemplate(""); // FIXME
+// setLimitOffsetTemplate("top {2s} "); // FIXME
+ }
+
+ @Override
+ public void serialize(QueryMetadata metadata, boolean forCountRow, SerializationContext context) {
+ if (!forCountRow && metadata.getModifiers().isRestricting()){
+ context.append("with inner_query as \n");
+ context.append("(\n ");
+
+ metadata = metadata.clone();
+ RowNumber rn = new RowNumber();
+ for (OrderSpecifier> os : metadata.getOrderBy()){
+ rn.orderBy(os);
+ }
+ metadata.addProjection(rn.as(rowNumber));
+ metadata.clearOrderBy();
+ context.serialize(metadata, forCountRow);
+
+ context.append("\n)\n");
+ context.append("select * \n");
+ context.append("from inner_query\n");
+ context.append("where ");
+
+ QueryModifiers mod = metadata.getModifiers();
+ if (mod.getLimit() == null){
+ context.handle(offsetTemplate, mod.getOffset());
+ }else if (mod.getOffset() == null){
+ context.handle(limitTemplate, mod.getLimit());
+ }else{
+ context.handle(limitOffsetTemplate, mod.getOffset(), mod.getLimit() + mod.getOffset());
+ }
+
+ }else{
+ context.serialize(metadata, forCountRow);
+ }
}
}
diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java
index 96300ebd7..96f68a9df 100644
--- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java
+++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java
@@ -10,14 +10,11 @@ import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
-import javax.annotation.Nullable;
-
import com.mysema.query.JoinType;
import com.mysema.query.QueryException;
+import com.mysema.query.QueryMetadata;
+import com.mysema.query.QueryModifiers;
import com.mysema.query.types.Templates;
-import com.mysema.query.types.custom.CSimple;
-import com.mysema.query.types.expr.ENumberConst;
-import com.mysema.query.types.expr.Expr;
import com.mysema.query.types.operation.Ops;
/**
@@ -28,12 +25,12 @@ import com.mysema.query.types.operation.Ops;
* @version $Id$
*/
public class SQLTemplates extends Templates {
-
+
public static final SQLTemplates DEFAULT = new SQLTemplates();
- private final Map, String> class2type = new HashMap, String>();
-
private String asc = " asc";
+
+ private final Map, String> class2type = new HashMap, String>();
private String columnAlias = " ";
@@ -41,14 +38,14 @@ public class SQLTemplates extends Templates {
private String countStar = "count(*)";
- private String distinctCountStart = "count(distinct ";
-
- private String distinctCountEnd = ")";
-
private String deleteFrom = "delete from ";
private String desc = " desc";
+ private String distinctCountEnd = ")";
+
+ private String distinctCountStart = "count(distinct ";
+
private String dummyTable = "dual";
private String from = "\nfrom ";
@@ -59,26 +56,18 @@ public class SQLTemplates extends Templates {
private String having = "\nhaving ";
- private String insertInto = "insert into ";
-
private String innerJoin = "\ninner join ";
+ private String insertInto = "insert into ";
+
private String join = "\njoin ";
private String leftJoin = "\nleft join ";
- private String limit = "\nlimit ";
+ private String limitTemplate = "\nlimit {0}";
- private boolean limitAndOffsetSymbols = true;
+ private String offsetTemplate = "\noffset {0}";
- private String limitOffsetTemplate = "";
-
- private String limitTemplate = "";
-
- private String offset = "\noffset ";
-
- private String offsetTemplate = "";
-
private String on = "\non ";
private String orderBy = "\norder by ";
@@ -97,10 +86,6 @@ public class SQLTemplates extends Templates {
private String where = "\nwhere ";
- private boolean requiresWhereForPagingSymbols = false;
-
- private boolean pagingAfterOrder = true;
-
protected SQLTemplates() {
// boolean
add(Ops.AND, "{0} and {1}", 36);
@@ -148,17 +133,95 @@ public class SQLTemplates extends Templates {
class2type.put(String.class, "varchar");
}
- public final Map, String> getClass2Type() {
- return class2type;
- }
-
- public final void addClass2TypeMappings(String type, Class>... classes) {
+ public void addClass2TypeMappings(String type, Class>... classes) {
for (Class> cl : classes) {
class2type.put(cl, type);
}
}
- public final SQLTemplates newLineToSingleSpace() {
+ public String getAsc() {
+ return asc;
+ }
+
+ public Map, String> getClass2Type() {
+ return class2type;
+ }
+
+ public String getColumnAlias() {
+ return columnAlias;
+ }
+
+ public String getCount() {
+ return count;
+ }
+
+ public String getCountStar() {
+ return countStar;
+ }
+
+ public String getDeleteFrom() {
+ return deleteFrom;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public String getDistinctCountEnd() {
+ return distinctCountEnd;
+ }
+
+ public String getDistinctCountStart() {
+ return distinctCountStart;
+ }
+
+ public String getDummyTable() {
+ return dummyTable;
+ }
+
+ public String getFrom() {
+ return from;
+ }
+
+ public String getFullJoin() {
+ return fullJoin;
+ }
+
+ public String getGroupBy() {
+ return groupBy;
+ }
+
+ public String getHaving() {
+ return having;
+ }
+
+ public String getInnerJoin() {
+ return innerJoin;
+ }
+
+ public String getInsertInto() {
+ return insertInto;
+ }
+
+ public String getJoin() {
+ return join;
+ }
+
+ public String getJoinSymbol(JoinType joinType){
+ switch (joinType) {
+ case FULLJOIN: return fullJoin;
+ case INNERJOIN: return innerJoin;
+ case JOIN: return join;
+ case LEFTJOIN: return leftJoin;
+ }
+ return ", ";
+ }
+
+ public boolean isSupportsAlias() {
+ return true;
+ }
+
+ public SQLTemplates newLineToSingleSpace() {
for (Field field : SQLTemplates.class.getDeclaredFields()) {
try {
if (field.getType().equals(String.class)) {
@@ -170,305 +233,183 @@ public class SQLTemplates extends Templates {
}
return this;
}
-
- public final Expr