implements RelationalPath
}
public Path>[] all() {
- Path>[] all = new Path[columns.size()];
- columns.toArray(all);
+ Path>[] all = new Path[columnMetadata.size()];
+ columnMetadata.keySet().toArray(all);
return all;
}
@Override
protected > P add(P path) {
- columns.add(path);
return path;
}
@Override
public List> getColumns() {
- return columns;
+ return Lists.newArrayList(this.columnMetadata.keySet());
}
@Override
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 122b66fb0..e13315ef1 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
@@ -537,11 +537,15 @@ public class SQLSerializer extends SerializerBase {
}
}
- // values
- append(templates.getValues());
- append("(");
- handle(COMMA, values);
- append(")");
+ if (!values.isEmpty()) {
+ // values
+ append(templates.getValues());
+ append("(");
+ handle(COMMA, values);
+ append(")");
+ } else {
+ append(templates.getDefaultValues());
+ }
}
}
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 a1f31f650..b7cc5dbf2 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
@@ -53,6 +53,7 @@ public class SQLServerTemplates extends SQLTemplates {
setDummyTable("");
setNullsFirst(null);
setNullsLast(null);
+ setDefaultValues("\ndefault values");
// String
add(Ops.CONCAT, "{0} + {1}", 13);
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 ede19e38d..e73db54e8 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
@@ -176,6 +176,8 @@ public class SQLTemplates extends Templates {
private String values = "\nvalues ";
+ private String defaultValues = "\nvalues ()";
+
private String where = "\nwhere ";
private String with = "with ";
@@ -584,6 +586,10 @@ public class SQLTemplates extends Templates {
return values;
}
+ public final String getDefaultValues() {
+ return defaultValues;
+ }
+
public final String getWhere() {
return where;
}
@@ -946,6 +952,10 @@ public class SQLTemplates extends Templates {
this.values = values;
}
+ protected void setDefaultValues(String defaultValues) {
+ this.defaultValues = defaultValues;
+ }
+
protected void setWhere(String where) {
this.where = where;
}
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 a69ff9d63..6c390ba38 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
@@ -50,6 +50,7 @@ public class SQLiteTemplates extends SQLTemplates {
setLimitRequired(true);
setNullsFirst(null);
setNullsLast(null);
+ setDefaultValues("\ndefault values");
add(Ops.MOD, "{0} % {1}");
add(Ops.INDEX_OF, "charindex({1},{0},1)-1");
diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/TeradataTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/TeradataTemplates.java
index e97cdd7eb..17217e9fe 100644
--- a/querydsl-sql/src/main/java/com/mysema/query/sql/TeradataTemplates.java
+++ b/querydsl-sql/src/main/java/com/mysema/query/sql/TeradataTemplates.java
@@ -57,6 +57,7 @@ public class TeradataTemplates extends SQLTemplates {
setNullsLast(null);
setDummyTable(null);
setCountViaAnalytics(true);
+ setDefaultValues("\ndefault values");
addClass2TypeMappings("byteint", Byte.class);
addClass2TypeMappings("double precision", Double.class);
diff --git a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java
index d7f7dc923..0c64ddc16 100644
--- a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java
+++ b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java
@@ -28,6 +28,9 @@ import static org.junit.Assert.assertTrue;
import java.sql.ResultSet;
import java.sql.SQLException;
+import com.mysema.query.sql.domain.QDateTest;
+import org.joda.time.DateTime;
+import org.joda.time.LocalDate;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
@@ -53,6 +56,8 @@ public class InsertBase extends AbstractBaseTest {
private void reset() throws SQLException{
delete(survey).execute();
insert(survey).values(1, "Hello World", "Hello").execute();
+
+ delete(QDateTest.qDateTest).execute();
}
@Before
@@ -65,6 +70,30 @@ public class InsertBase extends AbstractBaseTest {
reset();
}
+ @Test
+ public void Insert_Dates() {
+ QDateTest dateTest = QDateTest.qDateTest;
+ LocalDate localDate = new LocalDate(1978, 1, 2);
+
+ Path localDateProperty = new PathImpl(LocalDate.class, "DATE_TEST");
+ Path dateTimeProperty = new PathImpl(DateTime.class, "DATE_TEST");
+ SQLInsertClause insert = insert(dateTest);
+ insert.set(localDateProperty, localDate);
+ insert.execute();
+
+ Tuple result = query().from(dateTest).singleResult(
+ dateTest.dateTest.year(),
+ dateTest.dateTest.month(),
+ dateTest.dateTest.dayOfMonth(),
+ dateTimeProperty);
+ assertEquals(Integer.valueOf(1978), result.get(0, Integer.class));
+ assertEquals(Integer.valueOf(1), result.get(1, Integer.class));
+ assertEquals(Integer.valueOf(2), result.get(2, Integer.class));
+
+ DateTime dateTime = result.get(dateTimeProperty);
+ assertEquals(dateTime, localDate.toDateTimeAtStartOfDay());
+ }
+
@Test
public void Complex1() {
// related to #584795
@@ -137,6 +166,12 @@ public class InsertBase extends AbstractBaseTest {
.values(4, null, null).execute());
}
+ @Test
+ @ExcludeIn({HSQLDB, DERBY})
+ public void Insert_Without_Values() {
+ assertEquals(1, insert(survey).execute());
+ }
+
@Test
@ExcludeIn(ORACLE)
public void Insert_Nulls_In_Batch() {
diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java
index 31e463c3d..947663e22 100644
--- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java
+++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java
@@ -50,6 +50,13 @@ import java.util.Collections;
import java.util.List;
import java.util.Map;
+import com.mysema.query.types.*;
+import com.google.common.collect.Maps;
+import junit.framework.Assert;
+import org.joda.time.DateTime;
+import org.joda.time.LocalDate;
+import org.joda.time.LocalDateTime;
+import org.joda.time.LocalTime;
import org.junit.Ignore;
import org.junit.Test;
@@ -70,19 +77,6 @@ import com.mysema.query.sql.domain.QEmployee;
import com.mysema.query.sql.domain.QEmployeeNoPK;
import com.mysema.query.sql.domain.QIdName;
import com.mysema.query.support.Expressions;
-import com.mysema.query.types.ArrayConstructorExpression;
-import com.mysema.query.types.Concatenation;
-import com.mysema.query.types.ConstantImpl;
-import com.mysema.query.types.ConstructorExpression;
-import com.mysema.query.types.Expression;
-import com.mysema.query.types.MappingProjection;
-import com.mysema.query.types.ParamNotSetException;
-import com.mysema.query.types.Path;
-import com.mysema.query.types.PathImpl;
-import com.mysema.query.types.Predicate;
-import com.mysema.query.types.QBean;
-import com.mysema.query.types.QTuple;
-import com.mysema.query.types.SubQueryExpression;
import com.mysema.query.types.expr.BooleanExpression;
import com.mysema.query.types.expr.Coalesce;
import com.mysema.query.types.expr.DateExpression;
@@ -370,6 +364,56 @@ public class SelectBase extends AbstractBaseTest {
}
}
+ @Test
+ @IncludeIn({H2, SQLSERVER, MYSQL, ORACLE, SQLITE, TERADATA}) // TODO fix postgres
+ public void Dates() {
+ long ts = ((long)Math.floor(System.currentTimeMillis() / 1000)) * 1000;
+ long tsDate = new org.joda.time.LocalDate(ts).toDateMidnight().getMillis();
+ long tsTime = new org.joda.time.LocalTime(ts).getMillisOfDay();
+
+ List