You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metamodel.apache.org by ka...@apache.org on 2013/08/08 15:15:58 UTC
[4/4] git commit: METAMODEL-9: SalesforceDataSet is throwing
exception for insert sql of record having date/time.
METAMODEL-9: SalesforceDataSet is throwing exception for insert sql of
record having date/time.
Project: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/commit/c65307da
Tree: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/tree/c65307da
Diff: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/diff/c65307da
Branch: refs/heads/master
Commit: c65307da9c8736c41892016acb24f7a611e521ca
Parents: 5d9e9ba
Author: Balendra Singh <ba...@gmail.com>
Authored: Thu Aug 8 15:15:34 2013 +0200
Committer: Kasper Sørensen <i....@gmail.com>
Committed: Thu Aug 8 15:15:34 2013 +0200
----------------------------------------------------------------------
.../salesforce/SalesforceDataContext.java | 29 +++++++++++++----
.../metamodel/salesforce/SalesforceDataSet.java | 19 +++++++++--
.../metamodel/salesforce/SalesforceTable.java | 7 +++--
.../salesforce/SalesforceDataContextTest.java | 33 +++++++++++++++-----
4 files changed, 69 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/c65307da/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataContext.java
----------------------------------------------------------------------
diff --git a/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataContext.java b/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataContext.java
index 1075114..f5e9340 100644
--- a/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataContext.java
+++ b/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataContext.java
@@ -59,8 +59,12 @@ import com.sforce.ws.ConnectionException;
public class SalesforceDataContext extends QueryPostprocessDataContext implements UpdateableDataContext {
public static final TimeZone SOQL_TIMEZONE = TimeZone.getTimeZone("UTC");
- public static final String SOQL_DATE_FORMAT_IN = "yyyy-MM-dd'T'HH:mm:ss.SSS";
- public static final String SOQL_DATE_FORMAT_OUT = "yyyy-MM-dd'T'HH:mm:ssZZZ";
+ public static final String SOQL_DATE_FORMAT_IN = "yyyy-MM-dd";
+ public static final String SOQL_DATE_FORMAT_OUT = "yyyy-MM-dd";
+ public static final String SOQL_DATE_TIME_FORMAT_IN = "yyyy-MM-dd'T'HH:mm:ss.SSS";
+ public static final String SOQL_DATE_TIME_FORMAT_OUT = "yyyy-MM-dd'T'HH:mm:ssZZZ";
+ public static final String SOQL_TIME_FORMAT_IN = "HH:mm:ss.SSS";
+ public static final String SOQL_TIME_FORMAT_OUT = "HH:mm:ssZZZ";
private static final Logger logger = LoggerFactory.getLogger(SalesforceDataContext.class);
@@ -273,10 +277,23 @@ public class SalesforceDataContext extends QueryPostprocessDataContext implement
} else if (operand instanceof Number) {
sb.append(operand);
} else if (operand instanceof Date) {
- SimpleDateFormat dateFormat = new SimpleDateFormat(SOQL_DATE_FORMAT_OUT);
- dateFormat.setTimeZone(SOQL_TIMEZONE);
+ final SimpleDateFormat dateFormat;
+ switch (selectItem.getExpectedColumnType()) {
+ case TIME:
+ dateFormat = new SimpleDateFormat(SOQL_TIME_FORMAT_OUT);
+ break;
+ case DATE:
+ dateFormat = new SimpleDateFormat(SOQL_DATE_FORMAT_OUT);
+ break;
+ case TIMESTAMP:
+ default:
+ dateFormat = new SimpleDateFormat(SOQL_DATE_TIME_FORMAT_OUT);
+ break;
+ }
+
+ dateFormat.setTimeZone(SOQL_TIMEZONE);
String str = dateFormat.format((Date) operand);
- logger.debug("Date '{}' formatted as: {}", operand, str);
+ logger.debug("Date '{}' formatted as: {}", operand, str);
sb.append(str);
} else if (operand instanceof Column) {
sb.append(((Column) operand).getName());
@@ -320,7 +337,7 @@ public class SalesforceDataContext extends QueryPostprocessDataContext implement
}
private QueryResult executeSoqlQuery(String query) {
- logger.info("Executing SOQL query: {}", query);
+ logger.info("Executing SOQL query: {}", query);
try {
QueryResult queryResult = _connection.query(query);
return queryResult;
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/c65307da/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataSet.java
----------------------------------------------------------------------
diff --git a/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataSet.java b/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataSet.java
index d44bb47..0070296 100644
--- a/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataSet.java
+++ b/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataSet.java
@@ -110,10 +110,23 @@ final class SalesforceDataSet extends AbstractDataSet {
return NumberComparator.toNumber(columnType.isNumber());
}
if (columnType.isTimeBased()) {
- SimpleDateFormat format = new SimpleDateFormat(SalesforceDataContext.SOQL_DATE_FORMAT_IN);
- format.setTimeZone(SalesforceDataContext.SOQL_TIMEZONE);
+ final SimpleDateFormat dateFormat;
+ switch (columnType) {
+ case TIME:
+ dateFormat = new SimpleDateFormat(SalesforceDataContext.SOQL_TIME_FORMAT_IN);
+ break;
+ case DATE:
+ dateFormat = new SimpleDateFormat(SalesforceDataContext.SOQL_DATE_FORMAT_IN);
+ break;
+ case TIMESTAMP:
+ default:
+ dateFormat = new SimpleDateFormat(SalesforceDataContext.SOQL_DATE_TIME_FORMAT_IN);
+ break;
+ }
+
+ dateFormat.setTimeZone(SalesforceDataContext.SOQL_TIMEZONE);
try {
- return format.parse(value.toString());
+ return dateFormat.parse(value.toString());
} catch (ParseException e) {
throw new IllegalStateException("Unable to parse date/time value: " + value);
}
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/c65307da/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceTable.java
----------------------------------------------------------------------
diff --git a/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceTable.java b/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceTable.java
index 5983e7f..2df17cc 100644
--- a/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceTable.java
+++ b/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceTable.java
@@ -107,9 +107,11 @@ final class SalesforceTable extends AbstractTable {
case _double:
return ColumnType.DOUBLE;
case date:
+ return ColumnType.DATE;
case datetime:
+ return ColumnType.TIMESTAMP;
case time:
- return ColumnType.DATE;
+ return ColumnType.TIME;
case string:
case email:
case url:
@@ -122,8 +124,9 @@ final class SalesforceTable extends AbstractTable {
case id:
case picklist:
return ColumnType.VARCHAR;
+ default:
+ return ColumnType.OTHER;
}
- return ColumnType.OTHER;
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/c65307da/salesforce/src/test/java/org/apache/metamodel/salesforce/SalesforceDataContextTest.java
----------------------------------------------------------------------
diff --git a/salesforce/src/test/java/org/apache/metamodel/salesforce/SalesforceDataContextTest.java b/salesforce/src/test/java/org/apache/metamodel/salesforce/SalesforceDataContextTest.java
index 361174b..4bd3954 100644
--- a/salesforce/src/test/java/org/apache/metamodel/salesforce/SalesforceDataContextTest.java
+++ b/salesforce/src/test/java/org/apache/metamodel/salesforce/SalesforceDataContextTest.java
@@ -18,6 +18,7 @@
*/
package org.apache.metamodel.salesforce;
+import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
@@ -38,8 +39,6 @@ import org.apache.metamodel.schema.ColumnType;
import org.apache.metamodel.schema.MutableColumn;
import org.apache.metamodel.schema.Schema;
import org.apache.metamodel.schema.Table;
-import org.apache.metamodel.util.DateUtils;
-import org.apache.metamodel.util.Month;
public class SalesforceDataContextTest extends SalesforceTestCase {
@@ -244,13 +243,14 @@ public class SalesforceDataContextTest extends SalesforceTestCase {
assertEquals("Another test value", ds.getRow().getValue(0));
assertFalse(ds.next());
ds.close();
-
+
// UPDATE (a record that does not exist)
-
+
dc.executeUpdate(new UpdateScript() {
@Override
public void run(UpdateCallback callback) {
- callback.update(tableName).where("id").eq("fooooooobaaaaaaaar").value("name", "A test value that should never occur").execute();
+ callback.update(tableName).where("id").eq("fooooooobaaaaaaaar")
+ .value("name", "A test value that should never occur").execute();
}
});
@@ -274,19 +274,36 @@ public class SalesforceDataContextTest extends SalesforceTestCase {
final StringBuilder sb = new StringBuilder("FOOBAR: ");
final Calendar cal = Calendar.getInstance();
- cal.setTime(DateUtils.get(2013, Month.JANUARY, 23));
cal.setTimeZone(TimeZone.getTimeZone("GMT+1"));
+ cal.setTimeInMillis(0);
+ cal.set(Calendar.HOUR, 0);
+ cal.set(Calendar.MINUTE, 0);
+ cal.set(Calendar.SECOND, 0);
+ cal.set(Calendar.MILLISECOND, 0);
+ cal.set(Calendar.HOUR, 0);
+ cal.set(Calendar.MINUTE, 0);
+ cal.set(Calendar.YEAR, 2013);
+ cal.set(Calendar.MONTH, Calendar.JANUARY);
+ cal.set(Calendar.DAY_OF_MONTH, 23);
final Date date = cal.getTime();
+ final Timestamp dateTime = new Timestamp(date.getTime());
final List<FilterItem> children = new ArrayList<FilterItem>();
children.add(new FilterItem(new SelectItem(new MutableColumn("foo")), OperatorType.EQUALS_TO, "hello\n 'world'"));
children.add(new FilterItem(new SelectItem(new MutableColumn("bar")), OperatorType.EQUALS_TO, 123));
- children.add(new FilterItem(new SelectItem(new MutableColumn("baz")), OperatorType.EQUALS_TO, date));
+ children.add(new FilterItem(new SelectItem(new MutableColumn("baz").setType(ColumnType.DATE)),
+ OperatorType.EQUALS_TO, date));
+ children.add(new FilterItem(new SelectItem(new MutableColumn("zaz").setType(ColumnType.TIMESTAMP)),
+ OperatorType.EQUALS_TO, date));
+ children.add(new FilterItem(new SelectItem(new MutableColumn("saz").setType(ColumnType.TIMESTAMP)),
+ OperatorType.EQUALS_TO, dateTime));
+
final FilterItem filterItem = new FilterItem(children);
SalesforceDataContext.rewriteFilterItem(sb, filterItem);
- assertEquals("FOOBAR: (foo = 'hello\\n \\'world\\'' OR bar = 123 OR baz = 2013-01-22T23:00:00+0000)",
+ assertEquals(
+ "FOOBAR: (foo = 'hello\\n \\'world\\'' OR bar = 123 OR baz = 2013-01-22 OR zaz = 2013-01-22T23:00:00+0000 OR saz = 2013-01-22T23:00:00+0000)",
sb.toString());
}
}