metamodel-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Kasper Sørensen <i.am.kasper.soren...@gmail.com>
Subject Re: SalesforceDataSet is throwing exception for insert sql of record having date/time.
Date Wed, 07 Aug 2013 09:36:34 GMT
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 <balendrasingh@gmail.com>:
> 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 <i.am.kasper.sorensen@gmail.com>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 <i.am.kasper.sorensen@gmail.com>:
>> > 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 <balendrasingh@gmail.com>:
>> >> 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 <i.am.kasper.sorensen@gmail.com
>> >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 <balendrasingh@gmail.com>:
>> >>> > 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)
>> >>>
>>

Mime
View raw message