Kasper, I agree with your updates on the patch.I have a doubt regarding the SalesforceDataContextTest.testRewriteWhereItem. This test is failing as time returned is something different from the assert value. Thats why I had to update the assert values in updated patch. Please provide your inputs on this.
Thanks, Balendra On 7 August 2013 15:06, Kasper Sørensen <[email protected]>wrote: > I checked the updated patch and it looks good. I did make a few minor > changes, the primary one is to check against the ColumnType in the > rewriteFilterItem(...) method, instead of checking against the operand > type. The reason is that a java.util.Date can be passed as both a DATE > or as a TIMESTAMP value. Even as a TIME value. So the evaluation of > which date format to use should be on the basis of the column metadata > instead of the object that is passed in by the user. > > Uploaded the patch with my additions to JIRA as well. Please let me > know if you agree to the adjustments. > > 2013/8/7 Balendra Singh <[email protected]>: > > Hi Kasper, > > > > * In SalesforceDataSet, replaced tabs by spaces. > > * In the test SalesforceDataContextTest.testRewriteWhereItem - I changed > > the timezone to previous GMT+1 but with this also, it was failing so I > had > > to change dateTime value to *2013-01-22T18:30:00+0000.* > > Added the updated patch on the issue. > > Please provide your inputs. > > > > > > Thanks, > > Balendra > > * > > * > > * > > * > > > > > > On 7 August 2013 12:56, Kasper Sørensen <[email protected] > >wrote: > > > >> Sorry for the late reply Balendra, I just now realized the new JIRA > >> ticket with the patch [1]. > >> > >> I looked at the patch and it looks good except for two small doubts > >> from my side: > >> > >> * In the SalesforceDataSet all the spaces have been replaced by tabs. > >> We do use spaces in MM, and changing it makes it harder to see the > >> diff. > >> * In the test SalesforceDataContextTest.testRewriteWhereItem you've > >> changed the example input timezone from GMT+1 to UTC. Is there a > >> reason for this? I see you also changed the subsequent assertions, but > >> I doubt why this was necesary at all? > >> > >> If you can maybe fix/answer these points, then I am good to give it my > +1. > >> > >> And a remark for everyone: The patch is made against the org.eobjects > >> codebase. Obviously we will apply it to both codebases. Since this is > >> a bugfix, I imagine it will also go into a bugfix release of the old > >> MetaModel. > >> > >> [1] https://issues.apache.org/jira/browse/METAMODEL-9 > >> > >> 2013/8/2 Kasper Sørensen <[email protected]>: > >> > Hi Balendra, > >> > > >> > Is it possible for you to post it as a patch file. Either upload it to > >> > the MM JIRA [1] or simply make a gist [2] or so. > >> > > >> > [1] https://issues.apache.org/jira/browse/METAMODEL > >> > [2] https://gist.github.com/ > >> > > >> > 2013/8/2 Balendra Singh <[email protected]>: > >> >> Hi, > >> >> > >> >> In my case field type is date. SalesforceTable is returning > >> ColumnType.DATE > >> >> for date, datetime and time. In SalesforceDataSet, it is using a > >> datetime > >> >> format to format my date value field and was throwing exception. > >> >> > >> >> I made the following fixes for this issue - > >> >> > >> >> 1. In SalesforceDataSet.convert(Object value, ColumnType columnType) > >> >> > >> >> private Object convert(Object value, ColumnType columnType) { > >> >> if (value instanceof String && !columnType.isLiteral()) { > >> >> if (columnType.isBoolean()) { > >> >> return BooleanComparator.toBoolean(value); > >> >> } > >> >> if (columnType.isNumber()) { > >> >> return NumberComparator.toNumber(columnType.isNumber()); > >> >> } > >> >> if (columnType.isTimeBased()) { > >> >> > >> >> SimpleDateFormat format; > >> >> *if (columnType == ColumnType.DATE) {* > >> >> * > >> >> * > >> >> * format = new SimpleDateFormat(* > >> >> * SalesforceDataContext.SOQL_DATE_FORMAT_IN);* > >> >> * } else if (columnType == ColumnType.TIMESTAMP) {* > >> >> * format = new SimpleDateFormat(* > >> >> * SalesforceDataContext.SOQL_DATE_TIME_FORMAT_IN);* > >> >> * } else {* > >> >> * format = new SimpleDateFormat(* > >> >> * SalesforceDataContext.SOQL_TIME_FORMAT_IN);* > >> >> * }* > >> >> format.setTimeZone(SalesforceDataContext.SOQL_TIMEZONE); > >> >> try { > >> >> return format.parse(value.toString()); > >> >> } catch (ParseException e) { > >> >> throw new IllegalStateException( > >> >> "Unable to parse date/time value: " + value); > >> >> } > >> >> } > >> >> } > >> >> return value; > >> >> } > >> >> > >> >> > >> >> 2. In SalesforceDataContext added the following date format strings - > >> >> > >> >> 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"; > >> >> > >> >> 3. In SalesforceTable.toColumnType - I have returned specific date > >> >> datatypes > >> >> > >> >> > >> >> protected static ColumnType toColumnType(FieldType type) { > >> >> switch (type) { > >> >> case _boolean: > >> >> return ColumnType.BOOLEAN; > >> >> case _int: > >> >> return ColumnType.INTEGER; > >> >> case _double: > >> >> return ColumnType.DOUBLE; > >> >> * case date:* > >> >> * return ColumnType.DATE;* > >> >> * case datetime:* > >> >> * return ColumnType.TIMESTAMP;* > >> >> * case time:* > >> >> * return ColumnType.TIME;* > >> >> case string: > >> >> case email: > >> >> case url: > >> >> case phone: > >> >> case reference: > >> >> case textarea: > >> >> case encryptedstring: > >> >> case base64: > >> >> case currency: > >> >> case id: > >> >> case picklist: > >> >> return ColumnType.VARCHAR; > >> >> } > >> >> return ColumnType.OTHER; > >> >> } > >> >> > >> >> Please validate the code changes for the issue. > >> >> > >> >> > >> >> Thanks, > >> >> Balendra > >> >> > >> >> > >> >> > >> >> > >> >> > >> >> On 1 August 2013 18:41, Kasper Sørensen < > [email protected] > >> >wrote: > >> >> > >> >>> Strange, it seems that Salesforce sends dates back in not just a > >> >>> single, but various formats. Usually we have seen the format > >> >>> "yyyy-MM-dd'T'HH:mm:ss.SSS" (Represented by > >> >>> SalesforceDataContext.SOQL_DATE_FORMAT_IN). In your case it seems it > >> >>> simply sent a date in the format yyyy-MM-dd. Do you happen to know > >> >>> what field this failed for, and what datatype it had? Maybe this is > a > >> >>> simple case that we need to distinguish in a more detailed manner > for > >> >>> e.g. DATE vs DATETIME vs TIMESTAMP types... > >> >>> > >> >>> Anyways, the fix shouldn't be too hard. Simplest solution would be > to > >> >>> simply make a "convertToDate(String)" method in SalesforceUtils and > >> >>> probe the incoming string to select a proper date format. > >> >>> > >> >>> 2013/8/1 Balendra Singh <[email protected]>: > >> >>> > While using metamodel in our project we found the following > >> exception - > >> >>> > > >> >>> > In salesforce, if date value is provided then > >> >>> > SalesforceDataSet<http://eobjects.org/trac/wiki/SalesforceDataSet > > > >> is > >> >>> > throwing following exception while inserting this record to some > >> other > >> >>> > database. > >> >>> > > >> >>> > *Stacktrace* > >> >>> > > >> >>> > Job execution FAILURE - Unable to parse date/time value: > 2012-08-02 ( > >> >>> > IllegalStateException < > >> >>> http://eobjects.org/trac/wiki/IllegalStateException>) > >> >>> > - Exception stacktrace of failure condition: > >> >>> > java.lang.IllegalStateException< > >> >>> http://eobjects.org/trac/wiki/IllegalStateException>: > >> >>> > Unable to parse date/time value: 2012-08-02 at > >> >>> > org.eobjects.metamodel.salesforce.SalesforceDataSet< > >> >>> http://eobjects.org/trac/wiki/SalesforceDataSet>. > >> >>> > convert(SalesforceDataSet > >> >>> > <http://eobjects.org/trac/wiki/SalesforceDataSet>.java:119) > >> >>> > at org.eobjects.metamodel.salesforce.SalesforceDataSet< > >> >>> http://eobjects.org/trac/wiki/SalesforceDataSet> > >> >>> > .getRow(SalesforceDataSet > >> >>> > <http://eobjects.org/trac/wiki/SalesforceDataSet>.java:98) > >> >>> > at org.eobjects.analyzer.job.runner. > >> >>> > RowProcessingPublisher< > >> >>> http://eobjects.org/trac/wiki/RowProcessingPublisher> > >> >>> > .processRows(RowProcessingPublisher< > >> >>> http://eobjects.org/trac/wiki/RowProcessingPublisher>.java:295) > >> >>> > at org.eobjects.analyzer.job.tasks.RunRowProcessingPublisherTask?< > >> >>> http://eobjects.org/trac/wiki/RunRowProcessingPublisherTask> > >> >>> > .execute(RunRowProcessingPublisherTask?< > >> >>> http://eobjects.org/trac/wiki/RunRowProcessingPublisherTask> > >> >>> > .java:43) > >> >>> > > >> >>> > at org.eobjects.analyzer.job.concurrent.TaskRunnable< > >> >>> http://eobjects.org/trac/wiki/TaskRunnable> > >> >>> > .run(TaskRunnable <http://eobjects.org/trac/wiki/TaskRunnable > >> >.java:63) > >> >>> at > >> >>> > java.util.concurrent.ThreadPoolExecutor< > >> >>> http://eobjects.org/trac/wiki/ThreadPoolExecutor> > >> >>> > $Worker.runTask(ThreadPoolExecutor< > >> >>> http://eobjects.org/trac/wiki/ThreadPoolExecutor>.java:886) > >> >>> > at java.util.concurrent.ThreadPoolExecutor< > >> >>> http://eobjects.org/trac/wiki/ThreadPoolExecutor> > >> >>> > $Worker.run(ThreadPoolExecutor?< > >> >>> http://eobjects.org/trac/wiki/ThreadPoolExecutor>.java:908) > >> >>> > at java.lang.Thread.run(Thread.java:662) > >> >>> > >> >
