Hi there,
On 05/08/2008, at 6:49 AM, Andrus Adamchik wrote:
> Andrey, you are spot on with the UNSUPPORTED_DISTINCT_TYPES.
Any objections to adding (or making) isUnsupportedForDistinct non-
static? i.e., assuming that SelectTranslator can be overridden.
> Here is one caveat (and hopefully a workaround). "text" is a SQL
> Server native type; UNSUPPORTED_DISTINCT_TYPES stores abstract JDBC
> types. So I think Matthias can simply map his "text" column as a
> CLOB in Cayenne, and Cayenne will know to stop using DISTINCT.
>
> On a side note, DISTINCT is added implicitly for to-many qualifiers
> when Cayenne assumes that duplicates may be returned.
>
> Andrus
>
>
>
> On Aug 4, 2008, at 4:24 AM, Andrey Razumovsky wrote:
>
>> I've looked at the code a bit. Turns out there're some
>> UNSUPPORTED_DISTINCT_TYPES in SelectTranslator class. Probably if
>> "text"
>> type will be added there, this would let go the exceptions. I'll
>> advice to
>> open a JIRA issue about it.
>> By now you could try use SQLTemplate. It will not generate any
>> "distinct"
>> modifiers.
>>
>> By the way, it seems quite strange to me, that Cayenne adds
>> ''distinct'
>> modifiers automatically e.g. when selecting prefetches, even if
>> SelectQuery.isDistinct returns false (and it does by default).
>>
>> 2008/8/4, Matthias Moeser <matthia..sh.com.au>:
>>>
>>> Hi,
>>>
>>> On 04/08/2008, at 5:49 PM, Lachlan Deck wrote:
>>>
>>> On 04/08/2008, at 5:39 PM, Andrey Razumovsky wrote:
>>>>
>>>> This is definitely MS SQL's issue, not Cayenne's. Only thing I can
>>>>> recommend, if you can allow that, select all rows and then seed
>>>>> out duplicate rows manually
>>>>>
>>>>
>>>> AFAIK we are not purposely turning on the flag for obtaining
>>>> distinct
>>>> rows. (Well to be fair - we don't have the root stack trace from
>>>> ROP so
>>>> can't be certain if we are or not).
>>>>
>>>> But AFAIK Cayenne does turn certain queries into select distinct
>>>> (e.g.,
>>>> joins). Is that right?
>>>>
>>>
>>> The following, for example, is when trying to delete a record an
>>> commit the
>>> context.
>>>
>>> 17:49:47,728 [AWT-EventQueue-0] ERROR ish.view.components.Button :
>>> 165 -
>>> Failed to perform action
>>> [java] org.apache.cayenne.CayenneRuntimeException: [v.3.0-
>>> SNAPSHOT Jul
>>> 09 2008 01:28:38] Remote error. URL - http://localhost:8181/angel-server-cayenne
>>> ;
>>> CAUSE - class com.microsoft.sqlserver.jdbc.SQLServerException The
>>> text data
>>> type cannot be selected as DISTINCT because it is not comparable.
>>> [java] at
>>> org
>>> .apache
>>> .cayenne
>>> .remote
>>> .hessian.HessianConnection.doSendMessage(HessianConnection.java:151)
>>> [java] at
>>> org
>>> .apache
>>> .cayenne.remote.BaseConnection.sendMessage(BaseConnection.java:73)
>>> [java] at
>>> org.apache.cayenne.remote.ClientChannel.send(ClientChannel.java:281)
>>> [java] at
>>> org.apache.cayenne.remote.ClientChannel.onQuery(ClientChannel.java:
>>> 113)
>>> [java] at
>>> org
>>> .apache
>>> .cayenne
>>> .util
>>> .ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:
>>> 317)
>>> [java] at
>>> org
>>> .apache
>>> .cayenne
>>> .util
>>> .ObjectContextQueryAction.execute(ObjectContextQueryAction.java:96)
>>> [java] at
>>> org.apache.cayenne.CayenneContext.onQuery(CayenneContext.java:340)
>>> [java] at
>>> org.apache.cayenne.CayenneContext.performQuery(CayenneContext.java:
>>> 328)
>>> [java] at
>>> ish
>>> .oncourse.cayenne.CayenneContext.performQuery(CayenneContext.java:
>>> 294)
>>> [java] at
>>> org
>>> .apache
>>> .cayenne
>>> .util.RelationshipFault.resolveFromDB(RelationshipFault.java:90)
>>> [java] at
>>> org
>>> .apache
>>> .cayenne
>>> .util
>>> .PersistentObjectList.resolvedObjectList(PersistentObjectList.java:
>>> 301)
>>> [java] at
>>> org
>>> .apache
>>> .cayenne
>>> .util.PersistentObjectList.isEmpty(PersistentObjectList.java:207)
>>> [java] at
>>> org
>>> .apache
>>> .cayenne
>>> .ObjectContextDeleteAction
>>> .relatedObjects(ObjectContextDeleteAction.java:204)
>>> [java] at
>>> org
>>> .apache
>>> .cayenne
>>> .ObjectContextDeleteAction
>>> .processRules(ObjectContextDeleteAction.java:138)
>>> [java] at
>>> org.apache.cayenne.ObjectContextDeleteAction.access
>>> $0(ObjectContextDeleteAction.java:128)
>>> [java] at
>>> org.apache.cayenne.ObjectContextDeleteAction
>>> $1.visitToMany(ObjectContextDeleteAction.java:110)
>>> [java] at
>>> org
>>> .apache
>>> .cayenne.reflect.BaseToManyProperty.visit(BaseToManyProperty.java:
>>> 102)
>>> [java] at
>>> org
>>> .apache
>>> .cayenne
>>> .reflect
>>> .PersistentDescriptor
>>> .visitDeclaredProperties(PersistentDescriptor.java:338)
>>> [java] at
>>> org
>>> .apache
>>> .cayenne
>>> .reflect
>>> .PersistentDescriptor.visitProperties(PersistentDescriptor.java:371)
>>> [java] at
>>> org
>>> .apache
>>> .cayenne
>>> .reflect
>>> .LazyClassDescriptorDecorator
>>> .visitProperties(LazyClassDescriptorDecorator.java:161)
>>> [java] at
>>> org
>>> .apache
>>> .cayenne
>>> .ObjectContextDeleteAction
>>> .processDeleteRules(ObjectContextDeleteAction.java:104)
>>> [java] at
>>> org
>>> .apache
>>> .cayenne
>>> .ObjectContextDeleteAction
>>> .deletePersistent(ObjectContextDeleteAction.java:93)
>>> [java] at
>>> org
>>> .apache
>>> .cayenne
>>> .ObjectContextDeleteAction
>>> .performDelete(ObjectContextDeleteAction.java:78)
>>> [java] at
>>> org.apache.cayenne.CayenneContext.deleteObject(CayenneContext.java:
>>> 282)
>>>
>>>
>>>
>
with regards,
--Lachlan Deck
This archive was generated by hypermail 2.0.0 : Tue Aug 05 2008 - 20:27:58 EDT