diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index fc38f06b1..e834564a2 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -232,4 +232,4 @@ - + \ No newline at end of file diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java index 0cdbe03d8..0b508def3 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java @@ -73,6 +73,21 @@ public final class Configuration { } } + /** + * Get the literal representation of the given constant + * + * @param o + * @return + */ + public String asLiteral(Object o) { + Type type = javaTypeMapping.getType(o.getClass()); + if (type != null) { + return templates.serialize(type.getLiteral(o), type.getSQLTypes()[0]); + } else { + throw new IllegalArgumentException("Unsupported literal type " + o.getClass().getName()); + } + } + public SQLTemplates getTemplates() { return templates; } 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 513aa0b3e..17c53fd73 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 @@ -17,6 +17,8 @@ import com.mysema.query.QueryMetadata; import com.mysema.query.QueryModifiers; import com.mysema.query.types.Ops; +import java.sql.Types; + /** * DerbyTemplates is an SQL dialect for Derby * @@ -107,15 +109,16 @@ public class DerbyTemplates extends SQLTemplates { } @Override - public String asLiteral(DateTimeType type, String literal) { - // JDBC escape syntax - String keyword = "ts"; - if (type == DateTimeType.DATE) { - keyword = "d"; - } else if (type == DateTimeType.TIME) { - keyword = "t"; + public String serialize(String literal, int jdbcType) { + if (jdbcType == Types.TIMESTAMP) { + return "{ts '" + literal + "'}"; + } else if (jdbcType == Types.DATE) { + return "{d '" + literal + "'}"; + } else if (jdbcType == Types.TIME) { + return "{t '" + literal + "'}"; + } else { + return super.serialize(literal, jdbcType); } - return "{" + keyword + " '" + literal + "'}"; } @Override 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 2d5199d36..92988d5ce 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 @@ -13,9 +13,6 @@ */ package com.mysema.query.sql; -import java.math.BigInteger; -import java.util.List; - import com.mysema.commons.lang.Pair; import com.mysema.query.QueryFlag.Position; import com.mysema.query.QueryMetadata; @@ -24,6 +21,10 @@ import com.mysema.query.types.Expression; import com.mysema.query.types.Ops; import com.mysema.query.types.Path; +import java.math.BigInteger; +import java.sql.Types; +import java.util.List; + /** * OracleTemplates is an SQL dialect for Oracle * @@ -134,12 +135,11 @@ public class OracleTemplates extends SQLTemplates { } @Override - public String asLiteral(DateTimeType type, String literal) { - if (type == DateTimeType.TIME) { - // Oracle doesn't support the time type - return "(timestamp '1970-01-01 " + literal + "')"; + public String serialize(String literal, int jdbcType) { + if (jdbcType == Types.TIME) { + return "(timestamp '1970-01-01 " + literal + "'}"; } else { - return super.asLiteral(type, literal); + return super.serialize(literal, jdbcType); } } 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 e13315ef1..7a0b65808 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 @@ -13,15 +13,6 @@ */ package com.mysema.query.sql; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Set; - -import javax.annotation.Nullable; - import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; @@ -32,24 +23,11 @@ import com.mysema.query.QueryFlag; import com.mysema.query.QueryFlag.Position; import com.mysema.query.QueryMetadata; import com.mysema.query.support.SerializerBase; -import com.mysema.query.types.Constant; -import com.mysema.query.types.ConstantImpl; -import com.mysema.query.types.Expression; -import com.mysema.query.types.ExpressionUtils; -import com.mysema.query.types.FactoryExpression; -import com.mysema.query.types.Operator; -import com.mysema.query.types.Ops; -import com.mysema.query.types.Order; -import com.mysema.query.types.OrderSpecifier; -import com.mysema.query.types.ParamExpression; -import com.mysema.query.types.Path; -import com.mysema.query.types.PathMetadata; -import com.mysema.query.types.Predicate; -import com.mysema.query.types.SubQueryExpression; -import com.mysema.query.types.Template; +import com.mysema.query.types.*; import com.mysema.query.types.Template.Element; -import com.mysema.query.types.TemplateExpression; -import com.mysema.query.types.TemplateFactory; + +import javax.annotation.Nullable; +import java.util.*; /** * SqlSerializer serializes Querydsl queries into SQL @@ -705,12 +683,12 @@ public class SQLSerializer extends SerializerBase { if (!first) { append(COMMA); } - append(templates.asLiteral(o)); + append(configuration.asLiteral(o)); first = false; } append(")"); } else { - append(templates.asLiteral(constant)); + append(configuration.asLiteral(constant)); } } else if (constant instanceof Collection) { append("("); 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 b7cc5dbf2..a0af71a05 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 @@ -20,6 +20,8 @@ import com.mysema.query.QueryModifiers; import com.mysema.query.support.Expressions; import com.mysema.query.types.Ops; +import java.sql.Types; + /** * SQLServerTemplates is an SQL dialect for Microsoft SQL Server * @@ -115,15 +117,16 @@ public class SQLServerTemplates extends SQLTemplates { } @Override - public String asLiteral(DateTimeType type, String literal) { - // JDBC escape syntax - String keyword = "ts"; - if (type == DateTimeType.DATE) { - keyword = "d"; - } else if (type == DateTimeType.TIME) { - keyword = "t"; + public String serialize(String literal, int jdbcType) { + if (jdbcType == Types.TIMESTAMP) { + return "{ts '" + literal + "'}"; + } else if (jdbcType == Types.DATE) { + return "{d '" + literal + "'}"; + } else if (jdbcType == Types.TIME) { + return "{t '" + literal + "'}"; + } else { + return super.serialize(literal, jdbcType); } - return "{" + keyword + " '" + literal + "'}"; } @Override 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 e73db54e8..818c71fbd 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 @@ -13,20 +13,6 @@ */ package com.mysema.query.sql; -import java.lang.reflect.Field; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; - -import org.joda.time.LocalDate; -import org.joda.time.LocalTime; -import org.joda.time.ReadableInstant; -import org.joda.time.ReadablePartial; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; - import com.google.common.primitives.Primitives; import com.mysema.commons.lang.Pair; import com.mysema.query.JoinType; @@ -34,12 +20,11 @@ import com.mysema.query.QueryException; import com.mysema.query.QueryFlag.Position; import com.mysema.query.QueryMetadata; import com.mysema.query.QueryModifiers; -import com.mysema.query.types.Expression; -import com.mysema.query.types.Ops; -import com.mysema.query.types.Path; -import com.mysema.query.types.SubQueryExpression; -import com.mysema.query.types.TemplateExpressionImpl; -import com.mysema.query.types.Templates; +import com.mysema.query.types.*; + +import java.lang.reflect.Field; +import java.sql.Types; +import java.util.*; /** * SQLTemplates extends Templates to provides SQL specific extensions @@ -49,8 +34,6 @@ import com.mysema.query.types.Templates; */ public class SQLTemplates extends Templates { - enum DateTimeType {DATE, TIME, DATETIME}; - public static final Expression RECURSIVE = TemplateExpressionImpl.create(Object.class, ""); public static final SQLTemplates DEFAULT = new SQLTemplates("\"",'\\',false); @@ -94,12 +77,6 @@ public class SQLTemplates extends Templates { } - private static final DateTimeFormatter dateFormatter = DateTimeFormat.forPattern("yyyy-MM-dd"); - - private static final DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); - - private static final DateTimeFormatter timeFormatter = DateTimeFormat.forPattern("HH:mm:ss"); - private final Map, String> class2type = new HashMap, String>(); private final String quoteStr; @@ -365,35 +342,25 @@ public class SQLTemplates extends Templates { class2type.put(java.sql.Timestamp.class, "timestamp"); } - public String asLiteral(Object o) { - if (o instanceof Character) { - return "'" + escapeLiteral(o.toString()) + "'"; - } else if (o instanceof String) { - return "'" + escapeLiteral(o.toString()) + "'"; - // java.util.Date - } else if (o instanceof java.util.Date) { - java.util.Date date = (java.util.Date)o; - if (o instanceof java.sql.Date) { - return asLiteral(DateTimeType.DATE, dateFormatter.print(date.getTime())); - } else if (o instanceof java.sql.Time) { - return asLiteral(DateTimeType.TIME, timeFormatter.print(date.getTime())); - } else { - return asLiteral(DateTimeType.DATETIME, dateTimeFormatter.print(date.getTime())); - } - // Joda time - } else if (o instanceof ReadablePartial) { - ReadablePartial partial = (ReadablePartial)o; - if (o instanceof LocalDate) { - return asLiteral(DateTimeType.DATE, dateFormatter.print(partial)); - } else if (o instanceof LocalTime) { - return asLiteral(DateTimeType.TIME, timeFormatter.print(partial)); - } else { - return asLiteral(DateTimeType.DATETIME, dateTimeFormatter.print(partial)); - } - } else if (o instanceof ReadableInstant) { - return asLiteral(DateTimeType.DATETIME, dateTimeFormatter.print((ReadableInstant)o)); - } else { - return o.toString(); + public String serialize(String literal, int jdbcType) { + switch (jdbcType) { + case Types.TIMESTAMP: + return "(timestamp '" + literal + "')"; + case Types.DATE: + return "(date '" + literal + "')"; + case Types.TIME: + return "(time '" + literal + "')"; + case Types.CHAR: + case Types.CLOB: + case Types.LONGNVARCHAR: + case Types.LONGVARCHAR: + case Types.NCHAR: + case Types.NCLOB: + case Types.NVARCHAR: + case Types.VARCHAR: + return "'" + escapeLiteral(literal) + "'"; + default: + return literal; } } @@ -417,17 +384,6 @@ public class SQLTemplates extends Templates { return builder.toString(); } - public String asLiteral(DateTimeType type, String literal) { - // SQL 92 standard - String keyword = "timestamp"; - if (type == DateTimeType.DATE) { - keyword = "date"; - } else if (type == DateTimeType.TIME) { - keyword = "time"; - } - return "(" + keyword + " '" + literal + "')"; - } - protected void addClass2TypeMappings(String type, Class... classes) { for (Class cl : classes) { class2type.put(cl, type); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLiteTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLiteTemplates.java index 734760d67..77d264ce9 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLiteTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLiteTemplates.java @@ -14,7 +14,10 @@ package com.mysema.query.sql; import com.mysema.query.types.Ops; -import org.joda.time.*; +import org.joda.time.format.DateTimeFormat; +import org.joda.time.format.DateTimeFormatter; + +import java.sql.Types; /** * SQLiteTemplates is a SQL dialect for SQLite @@ -24,6 +27,12 @@ import org.joda.time.*; */ public class SQLiteTemplates extends SQLTemplates { + private static final DateTimeFormatter dateFormatter = DateTimeFormat.forPattern("yyyy-MM-dd"); + + private static final DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); + + private static final DateTimeFormatter timeFormatter = DateTimeFormat.forPattern("HH:mm:ss"); + public static Builder builder() { return new Builder() { @Override @@ -87,19 +96,16 @@ public class SQLiteTemplates extends SQLTemplates { } @Override - public String asLiteral(Object o) { - if (o instanceof java.util.Date) { - return String.valueOf(((java.util.Date)o).getTime()); - } else if (o instanceof ReadableInstant) { - return String.valueOf(((ReadableInstant) o).getMillis()); - } else if (o instanceof LocalDate) { - return String.valueOf(((LocalDate) o).toDateTimeAtStartOfDay(DateTimeZone.UTC).getMillis()); - } else if (o instanceof LocalDateTime) { - return String.valueOf(((LocalDateTime) o).toDateTime(DateTimeZone.UTC).getMillis()); - } else if (o instanceof LocalTime) { - return String.valueOf(((LocalTime) o).getMillisOfDay()); + public String serialize(String literal, int jdbcType) { + // XXX doesn't work with LocalDate, LocalDateTime and LocalTime + if (jdbcType == Types.TIMESTAMP) { + return String.valueOf(dateTimeFormatter.parseDateTime(literal).getMillis()); + } else if (jdbcType == Types.DATE) { + return String.valueOf(dateFormatter.parseDateTime(literal).getMillis()); + } else if (jdbcType == Types.TIME) { + return String.valueOf(timeFormatter.parseDateTime(literal).getMillis()); } else { - return super.asLiteral(o); + return super.serialize(literal, jdbcType); } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/teradata/SetQueryBandClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/teradata/SetQueryBandClause.java index 4fb090deb..8e7e11fbc 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/teradata/SetQueryBandClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/teradata/SetQueryBandClause.java @@ -13,12 +13,6 @@ */ package com.mysema.query.sql.teradata; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.SQLException; -import java.util.List; -import java.util.Map; - import com.google.common.collect.ImmutableList; import com.google.common.collect.Maps; import com.mysema.query.sql.Configuration; @@ -26,6 +20,12 @@ import com.mysema.query.sql.SQLBindings; import com.mysema.query.sql.SQLTemplates; import com.mysema.query.sql.dml.AbstractSQLClause; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + /** * SetQueryBandClause provides support for Teradata specific set query_band executions. * @@ -116,9 +116,9 @@ public class SetQueryBandClause extends AbstractSQLClause { builder.append(";"); } if (configuration.getUseLiterals() || forSession) { - queryString = "set query_band=" - + configuration.getTemplates().asLiteral(builder.toString()) - + (forSession ? " for session" : " for transaction"); + queryString = "set query_band='" + + configuration.getTemplates().escapeLiteral(builder.toString()) + + (forSession ? "' for session" : "' for transaction"); parameter = null; } else { queryString = "set query_band=?" + (forSession ? " for session" : " for transaction"); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/AbstractDateTimeType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/AbstractDateTimeType.java new file mode 100644 index 000000000..7e0ec7e3c --- /dev/null +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/AbstractDateTimeType.java @@ -0,0 +1,51 @@ +/* + * Copyright 2014, Mysema Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.mysema.query.sql.types; + +import org.joda.time.format.DateTimeFormat; +import org.joda.time.format.DateTimeFormatter; + +import java.util.Calendar; +import java.util.TimeZone; + +/** + * Common abstract superclass for Type implementations + * + * @author tiwe + * + * @param + */ +public abstract class AbstractDateTimeType extends AbstractType { + + private static final Calendar UTC = Calendar.getInstance(TimeZone.getTimeZone("UTC")); + + static { + UTC.setTimeInMillis(0); + } + + protected static Calendar utc() { + return (Calendar) UTC.clone(); + } + + protected static final DateTimeFormatter dateFormatter = DateTimeFormat.forPattern("yyyy-MM-dd"); + + protected static final DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); + + protected static final DateTimeFormatter timeFormatter = DateTimeFormat.forPattern("HH:mm:ss"); + + public AbstractDateTimeType(int type) { + super(type); + } + +} diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/AbstractType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/AbstractType.java index 46d0ca506..e248a472d 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/types/AbstractType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/AbstractType.java @@ -13,9 +13,6 @@ */ package com.mysema.query.sql.types; -import java.util.Calendar; -import java.util.TimeZone; - /** * Common abstract superclass for Type implementations * @@ -25,16 +22,6 @@ import java.util.TimeZone; */ public abstract class AbstractType implements Type { - private static final Calendar UTC = Calendar.getInstance(TimeZone.getTimeZone("UTC")); - - static { - UTC.setTimeInMillis(0); - } - - protected static Calendar utc() { - return (Calendar) UTC.clone(); - } - private final int type; public AbstractType(int type) { @@ -46,4 +33,8 @@ public abstract class AbstractType implements Type { return new int[]{type}; } + public String getLiteral(T value) { + return value.toString(); + } + } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/CalendarType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/CalendarType.java index a726d5c15..3dd628942 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/types/CalendarType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/CalendarType.java @@ -26,7 +26,7 @@ import java.util.Calendar; * @author tiwe * */ -public class CalendarType extends AbstractType { +public class CalendarType extends AbstractDateTimeType { public CalendarType() { super(Types.TIMESTAMP); @@ -36,6 +36,11 @@ public class CalendarType extends AbstractType { super(type); } + @Override + public String getLiteral(Calendar value) { + return dateTimeFormatter.print(value.getTimeInMillis()); + } + @Override public Calendar getValue(ResultSet rs, int startIndex) throws SQLException { Timestamp ts = rs.getTimestamp(startIndex); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/DateTimeType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/DateTimeType.java index fdb720971..3b004681e 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/types/DateTimeType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/DateTimeType.java @@ -13,21 +13,17 @@ */ package com.mysema.query.sql.types; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Timestamp; -import java.sql.Types; - import org.joda.time.DateTime; +import java.sql.*; + /** * DateTimeType maps DateTime to Timestamp on the JDBC level * * @author tiwe * */ -public class DateTimeType extends AbstractType { +public class DateTimeType extends AbstractDateTimeType { public DateTimeType() { super(Types.TIMESTAMP); @@ -37,6 +33,11 @@ public class DateTimeType extends AbstractType { super(type); } + @Override + public String getLiteral(DateTime value) { + return dateTimeFormatter.print(value); + } + @Override public Class getReturnedClass() { return DateTime.class; diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/DateType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/DateType.java index 2d1fdadf2..e2dd345f7 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/types/DateType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/DateType.java @@ -13,11 +13,7 @@ */ package com.mysema.query.sql.types; -import java.sql.Date; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Types; +import java.sql.*; /** * DateType maps Date to Date on the JDBC level @@ -25,7 +21,7 @@ import java.sql.Types; * @author tiwe * */ -public class DateType extends AbstractType { +public class DateType extends AbstractDateTimeType { public DateType() { super(Types.DATE); @@ -35,6 +31,11 @@ public class DateType extends AbstractType { super(type); } + @Override + public String getLiteral(Date value) { + return dateFormatter.print(value.getTime()); + } + @Override public Date getValue(ResultSet rs, int startIndex) throws SQLException { return rs.getDate(startIndex); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/LocalDateTimeType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/LocalDateTimeType.java index b8c67d788..89827c478 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/types/LocalDateTimeType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/LocalDateTimeType.java @@ -13,23 +13,19 @@ */ package com.mysema.query.sql.types; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Timestamp; -import java.sql.Types; - import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.joda.time.LocalDateTime; +import java.sql.*; + /** * LocalDateTimeType maps LocalDateTime to Timestamp on the JDBC level * * @author tiwe * */ -public class LocalDateTimeType extends AbstractType { +public class LocalDateTimeType extends AbstractDateTimeType { public LocalDateTimeType() { super(Types.TIMESTAMP); @@ -39,6 +35,11 @@ public class LocalDateTimeType extends AbstractType { super(type); } + @Override + public String getLiteral(LocalDateTime value) { + return dateTimeFormatter.print(value); + } + @Override public Class getReturnedClass() { return LocalDateTime.class; diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/LocalDateType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/LocalDateType.java index f8247cd39..ff2a6e87d 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/types/LocalDateType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/LocalDateType.java @@ -13,22 +13,18 @@ */ package com.mysema.query.sql.types; -import java.sql.Date; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Types; - import org.joda.time.DateTimeZone; import org.joda.time.LocalDate; +import java.sql.*; + /** * LocalDateType maps LocalDate to Date on the JDBC level * * @author tiwe * */ -public class LocalDateType extends AbstractType { +public class LocalDateType extends AbstractDateTimeType { public LocalDateType() { super(Types.DATE); @@ -38,6 +34,11 @@ public class LocalDateType extends AbstractType { super(type); } + @Override + public String getLiteral(LocalDate value) { + return dateFormatter.print(value); + } + @Override public Class getReturnedClass() { return LocalDate.class; diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/LocalTimeType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/LocalTimeType.java index 4eae179e8..ec7ea96ce 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/types/LocalTimeType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/LocalTimeType.java @@ -13,22 +13,18 @@ */ package com.mysema.query.sql.types; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Time; -import java.sql.Types; - import org.joda.time.DateTimeZone; import org.joda.time.LocalTime; +import java.sql.*; + /** * LocalTimeType maps LocalTime to Time on the JDBC level * * @author tiwe * */ -public class LocalTimeType extends AbstractType { +public class LocalTimeType extends AbstractDateTimeType { public LocalTimeType() { super(Types.TIME); @@ -38,6 +34,11 @@ public class LocalTimeType extends AbstractType { super(type); } + @Override + public String getLiteral(LocalTime value) { + return timeFormatter.print(value); + } + @Override public Class getReturnedClass() { return LocalTime.class; diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/TimeType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/TimeType.java index 040096b53..cee289505 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/types/TimeType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/TimeType.java @@ -13,11 +13,7 @@ */ package com.mysema.query.sql.types; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Time; -import java.sql.Types; +import java.sql.*; /** * TimeType maps Time to Time on the JDBC level @@ -25,7 +21,7 @@ import java.sql.Types; * @author tiwe * */ -public class TimeType extends AbstractType