You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by "Dave Dombrosky (JIRA)" <ji...@apache.org> on 2009/10/30 11:36:59 UTC

[jira] Created: (CAY-1298) String no longer works in query when column type is Integer

String no longer works in query when column type is Integer
-----------------------------------------------------------

                 Key: CAY-1298
                 URL: https://issues.apache.org/jira/browse/CAY-1298
             Project: Cayenne
          Issue Type: Bug
          Components: Cayenne Core Library
    Affects Versions: 3.0 beta 1
         Environment: IcedTea6 1.6.1
PostgreSQL 8.3
JDBC 8.3-603.jdbc4
            Reporter: Dave Dombrosky
            Priority: Minor


I have queries that no longer work in 3.0B1, because of a change that was made in revision 813661.  For example, a query like this used to work:

DataObjectUtils.objectForPK(db, Artist.class, "1");

But now, I get the following error:

org.postgresql.util.PSQLException: ERROR: operator does not exist: smallint = character varying
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
	at org.apache.cayenne.access.jdbc.SelectAction.performAction(SelectAction.java:71)
	at org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:87)
	at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:274)
	at org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:418)
	at org.apache.cayenne.access.DataDomainQueryAction.access$000(DataDomainQueryAction.java:65)
	at org.apache.cayenne.access.DataDomainQueryAction$2.transform(DataDomainQueryAction.java:391)
	at org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:850)
	at org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:388)
	at org.apache.cayenne.access.DataDomainQueryAction.interceptOIDQuery(DataDomainQueryAction.java:155)
	at org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:112)
	at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:743)
	at org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:333)
	at org.apache.cayenne.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:96)
	at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:1278)
	at org.apache.cayenne.access.DataContext.performQuery(DataContext.java:1267)
	at org.apache.cayenne.DataObjectUtils.objectForQuery(DataObjectUtils.java:273)
	at org.apache.cayenne.DataObjectUtils.objectForPK(DataObjectUtils.java:259)
	at org.apache.cayenne.DataObjectUtils.objectForPK(DataObjectUtils.java:170)
	at Test.main(Test.java:9)
Exception in thread "main" org.apache.cayenne.CayenneRuntimeException: [v.3.0-SNAPSHOT Oct 30 2009 10:19:35] Query exception.
	at org.apache.cayenne.access.DataDomainQueryAction.nextQueryException(DataDomainQueryAction.java:545)
	at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:281)
	at org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:418)
	at org.apache.cayenne.access.DataDomainQueryAction.access$000(DataDomainQueryAction.java:65)
	at org.apache.cayenne.access.DataDomainQueryAction$2.transform(DataDomainQueryAction.java:391)
	at org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:850)
	at org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:388)
	at org.apache.cayenne.access.DataDomainQueryAction.interceptOIDQuery(DataDomainQueryAction.java:155)
	at org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:112)
	at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:743)
	at org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:333)
	at org.apache.cayenne.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:96)
	at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:1278)
	at org.apache.cayenne.access.DataContext.performQuery(DataContext.java:1267)
	at org.apache.cayenne.DataObjectUtils.objectForQuery(DataObjectUtils.java:273)
	at org.apache.cayenne.DataObjectUtils.objectForPK(DataObjectUtils.java:259)
	at org.apache.cayenne.DataObjectUtils.objectForPK(DataObjectUtils.java:170)
	at Test.main(Test.java:9)
Caused by: org.postgresql.util.PSQLException: ERROR: operator does not exist: smallint = character varying
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
	at org.apache.cayenne.access.jdbc.SelectAction.performAction(SelectAction.java:71)
	at org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:87)
	at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:274)
	... 16 more

The strange part is that the logger shows the query as SELECT t0.name, t0.id FROM lookup.color t0 WHERE t0.id = ? [bind: 1->id:'1'], both before and after the change.  Postgres can usually deal with using a character type to match on an integer column.  Something must have changed with the JDBC binding that is not showing up in the textual representation of the query.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Updated: (CAY-1298) String no longer works in query when column type is Integer

Posted by "Dave Dombrosky (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/CAY-1298?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Dave Dombrosky updated CAY-1298:
--------------------------------

    Attachment: CharType.diff

This patch will revert the code to a working state.  It is not the correct fix though, because the old types code is deprecated.

> String no longer works in query when column type is Integer
> -----------------------------------------------------------
>
>                 Key: CAY-1298
>                 URL: https://issues.apache.org/jira/browse/CAY-1298
>             Project: Cayenne
>          Issue Type: Bug
>          Components: Cayenne Core Library
>    Affects Versions: 3.0 beta 1
>         Environment: IcedTea6 1.6.1
> PostgreSQL 8.3
> JDBC 8.3-603.jdbc4
>            Reporter: Dave Dombrosky
>            Priority: Minor
>         Attachments: CharType.diff
>
>
> I have queries that no longer work in 3.0B1, because of a change that was made in revision 813661.  For example, a query like this used to work:
> DataObjectUtils.objectForPK(db, Artist.class, "1");
> But now, I get the following error:
> org.postgresql.util.PSQLException: ERROR: operator does not exist: smallint = character varying
> 	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592)
> 	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327)
> 	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
> 	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
> 	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
> 	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
> 	at org.apache.cayenne.access.jdbc.SelectAction.performAction(SelectAction.java:71)
> 	at org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:87)
> 	at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:274)
> 	at org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:418)
> 	at org.apache.cayenne.access.DataDomainQueryAction.access$000(DataDomainQueryAction.java:65)
> 	at org.apache.cayenne.access.DataDomainQueryAction$2.transform(DataDomainQueryAction.java:391)
> 	at org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:850)
> 	at org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:388)
> 	at org.apache.cayenne.access.DataDomainQueryAction.interceptOIDQuery(DataDomainQueryAction.java:155)
> 	at org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:112)
> 	at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:743)
> 	at org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:333)
> 	at org.apache.cayenne.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:96)
> 	at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:1278)
> 	at org.apache.cayenne.access.DataContext.performQuery(DataContext.java:1267)
> 	at org.apache.cayenne.DataObjectUtils.objectForQuery(DataObjectUtils.java:273)
> 	at org.apache.cayenne.DataObjectUtils.objectForPK(DataObjectUtils.java:259)
> 	at org.apache.cayenne.DataObjectUtils.objectForPK(DataObjectUtils.java:170)
> 	at Test.main(Test.java:9)
> Exception in thread "main" org.apache.cayenne.CayenneRuntimeException: [v.3.0-SNAPSHOT Oct 30 2009 10:19:35] Query exception.
> 	at org.apache.cayenne.access.DataDomainQueryAction.nextQueryException(DataDomainQueryAction.java:545)
> 	at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:281)
> 	at org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:418)
> 	at org.apache.cayenne.access.DataDomainQueryAction.access$000(DataDomainQueryAction.java:65)
> 	at org.apache.cayenne.access.DataDomainQueryAction$2.transform(DataDomainQueryAction.java:391)
> 	at org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:850)
> 	at org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:388)
> 	at org.apache.cayenne.access.DataDomainQueryAction.interceptOIDQuery(DataDomainQueryAction.java:155)
> 	at org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:112)
> 	at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:743)
> 	at org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:333)
> 	at org.apache.cayenne.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:96)
> 	at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:1278)
> 	at org.apache.cayenne.access.DataContext.performQuery(DataContext.java:1267)
> 	at org.apache.cayenne.DataObjectUtils.objectForQuery(DataObjectUtils.java:273)
> 	at org.apache.cayenne.DataObjectUtils.objectForPK(DataObjectUtils.java:259)
> 	at org.apache.cayenne.DataObjectUtils.objectForPK(DataObjectUtils.java:170)
> 	at Test.main(Test.java:9)
> Caused by: org.postgresql.util.PSQLException: ERROR: operator does not exist: smallint = character varying
> 	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592)
> 	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327)
> 	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
> 	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
> 	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
> 	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
> 	at org.apache.cayenne.access.jdbc.SelectAction.performAction(SelectAction.java:71)
> 	at org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:87)
> 	at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:274)
> 	... 16 more
> The strange part is that the logger shows the query as SELECT t0.name, t0.id FROM lookup.color t0 WHERE t0.id = ? [bind: 1->id:'1'], both before and after the change.  Postgres can usually deal with using a character type to match on an integer column.  Something must have changed with the JDBC binding that is not showing up in the textual representation of the query.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Closed: (CAY-1298) String no longer works in query when column type is Integer

Posted by "Andrus Adamchik (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/CAY-1298?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Andrus Adamchik closed CAY-1298.
--------------------------------

    Resolution: Fixed

> String no longer works in query when column type is Integer
> -----------------------------------------------------------
>
>                 Key: CAY-1298
>                 URL: https://issues.apache.org/jira/browse/CAY-1298
>             Project: Cayenne
>          Issue Type: Bug
>          Components: Core Library
>    Affects Versions: 3.0 beta 1
>         Environment: IcedTea6 1.6.1
> PostgreSQL 8.3
> JDBC 8.3-603.jdbc4
>            Reporter: Dave Dombrosky
>            Priority: Minor
>             Fix For: 3.0RC2
>
>         Attachments: CharType.diff
>
>
> I have queries that no longer work in 3.0B1, because of a change that was made in revision 813661.  For example, a query like this used to work:
> DataObjectUtils.objectForPK(db, Artist.class, "1");
> But now, I get the following error:
> org.postgresql.util.PSQLException: ERROR: operator does not exist: smallint = character varying
> 	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592)
> 	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327)
> 	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
> 	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
> 	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
> 	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
> 	at org.apache.cayenne.access.jdbc.SelectAction.performAction(SelectAction.java:71)
> 	at org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:87)
> 	at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:274)
> 	at org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:418)
> 	at org.apache.cayenne.access.DataDomainQueryAction.access$000(DataDomainQueryAction.java:65)
> 	at org.apache.cayenne.access.DataDomainQueryAction$2.transform(DataDomainQueryAction.java:391)
> 	at org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:850)
> 	at org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:388)
> 	at org.apache.cayenne.access.DataDomainQueryAction.interceptOIDQuery(DataDomainQueryAction.java:155)
> 	at org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:112)
> 	at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:743)
> 	at org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:333)
> 	at org.apache.cayenne.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:96)
> 	at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:1278)
> 	at org.apache.cayenne.access.DataContext.performQuery(DataContext.java:1267)
> 	at org.apache.cayenne.DataObjectUtils.objectForQuery(DataObjectUtils.java:273)
> 	at org.apache.cayenne.DataObjectUtils.objectForPK(DataObjectUtils.java:259)
> 	at org.apache.cayenne.DataObjectUtils.objectForPK(DataObjectUtils.java:170)
> 	at Test.main(Test.java:9)
> Exception in thread "main" org.apache.cayenne.CayenneRuntimeException: [v.3.0-SNAPSHOT Oct 30 2009 10:19:35] Query exception.
> 	at org.apache.cayenne.access.DataDomainQueryAction.nextQueryException(DataDomainQueryAction.java:545)
> 	at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:281)
> 	at org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:418)
> 	at org.apache.cayenne.access.DataDomainQueryAction.access$000(DataDomainQueryAction.java:65)
> 	at org.apache.cayenne.access.DataDomainQueryAction$2.transform(DataDomainQueryAction.java:391)
> 	at org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:850)
> 	at org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:388)
> 	at org.apache.cayenne.access.DataDomainQueryAction.interceptOIDQuery(DataDomainQueryAction.java:155)
> 	at org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:112)
> 	at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:743)
> 	at org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:333)
> 	at org.apache.cayenne.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:96)
> 	at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:1278)
> 	at org.apache.cayenne.access.DataContext.performQuery(DataContext.java:1267)
> 	at org.apache.cayenne.DataObjectUtils.objectForQuery(DataObjectUtils.java:273)
> 	at org.apache.cayenne.DataObjectUtils.objectForPK(DataObjectUtils.java:259)
> 	at org.apache.cayenne.DataObjectUtils.objectForPK(DataObjectUtils.java:170)
> 	at Test.main(Test.java:9)
> Caused by: org.postgresql.util.PSQLException: ERROR: operator does not exist: smallint = character varying
> 	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592)
> 	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327)
> 	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
> 	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
> 	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
> 	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
> 	at org.apache.cayenne.access.jdbc.SelectAction.performAction(SelectAction.java:71)
> 	at org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:87)
> 	at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:274)
> 	... 16 more
> The strange part is that the logger shows the query as SELECT t0.name, t0.id FROM lookup.color t0 WHERE t0.id = ? [bind: 1->id:'1'], both before and after the change.  Postgres can usually deal with using a character type to match on an integer column.  Something must have changed with the JDBC binding that is not showing up in the textual representation of the query.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Re: [jira] Updated: (CAY-1298) String no longer works in query when column type is Integer

Posted by Andrus Adamchik <an...@objectstyle.org>.
On Jan 12, 2010, at 12:07 PM, Andrey Razumovsky wrote:

> 2010/1/11 Andrus Adamchik <an...@objectstyle.org>
>
>> -        st.setString(pos, (String) val);
>> +        // if this is a CLOB column, set the value as "String"
>> +        // instead. This should work with most drivers
>> +        if (type == Types.CLOB) {
>> +            st.setString(pos, (String) val);
>> +        }
>> +        else {
>> +            super.setJdbcObject(st, val, pos, type, precision);
>> +        }
>>
>>
>
> Since I'm not aware why this change was introduced, could you please  
> check
> (or remember) consequences of reverting it?

I was actually going to commit this myself. All we need to do  
afterwards is just general regression testing across DBs.

Andrus

Re: [jira] Updated: (CAY-1298) String no longer works in query when column type is Integer

Posted by Andrey Razumovsky <ra...@gmail.com>.
2010/1/11 Andrus Adamchik <an...@objectstyle.org>

> -        st.setString(pos, (String) val);
> +        // if this is a CLOB column, set the value as "String"
> +        // instead. This should work with most drivers
> +        if (type == Types.CLOB) {
> +            st.setString(pos, (String) val);
> +        }
> +        else {
> +            super.setJdbcObject(st, val, pos, type, precision);
> +        }
>
>

Since I'm not aware why this change was introduced, could you please check
(or remember) consequences of reverting it?

Re: [jira] Updated: (CAY-1298) String no longer works in query when column type is Integer

Posted by Andrus Adamchik <an...@objectstyle.org>.
On the other hand 813661 is a pretty recent commit done on September  
11, 2009. So probably changing it won't cause new regression bugs. My  
only issue with the patch is this:

-public class CharType implements ExtendedType {
+public class CharType extends AbstractType {



But this part of it can probably be restored:

@@ -157,7 +164,14 @@
              int type,
              int precision) throws Exception {

-        st.setString(pos, (String) val);
+        // if this is a CLOB column, set the value as "String"
+        // instead. This should work with most drivers
+        if (type == Types.CLOB) {
+            st.setString(pos, (String) val);
+        }
+        else {
+            super.setJdbcObject(st, val, pos, type, precision);
+        }
      }



Andrus

On Jan 11, 2010, at 9:53 PM, Andrus Adamchik wrote:

>
> On Jan 11, 2010, at 9:39 PM, Andrey Razumovsky wrote:
>
>> Actually I've been using such syntax myself (we also talked about  
>> that when
>> discussing generified expressions).
>
> yes, but I wish we define an explicit set of allowed conversions  
> that work the same across DB's (by virtue of Cayenne doing those  
> conversions). E.g. we'd require format string for Date conversions,  
> etc.
>
>> I really want this ability to stay in
>> some way, since it saves time and unnecessary code. Currently it  
>> works for
>> me in MySQL when id column is BIGINT (and I'm searching by a  
>> string). Most
>> DBMS allow comparing string to an int, why shouldn't we?
>
> My problem with this is consistency. The patch will work or fail  
> depending on a specific driver (or a driver version - something I  
> observed on postgresql in the past), and a specific type of String  
> to X conversion. Actually the current 'setString' approach is prone  
> to the same problem, but changing it now opens possibility of new  
> regression issues. So we'll be likely fixing a subset of cases and  
> breaking some other subset, and that won't be clear immediately.
>
> Andrus
>
>


Re: [jira] Updated: (CAY-1298) String no longer works in query when column type is Integer

Posted by Andrus Adamchik <an...@objectstyle.org>.
On Jan 11, 2010, at 9:39 PM, Andrey Razumovsky wrote:

> Actually I've been using such syntax myself (we also talked about  
> that when
> discussing generified expressions).

yes, but I wish we define an explicit set of allowed conversions that  
work the same across DB's (by virtue of Cayenne doing those  
conversions). E.g. we'd require format string for Date conversions, etc.

> I really want this ability to stay in
> some way, since it saves time and unnecessary code. Currently it  
> works for
> me in MySQL when id column is BIGINT (and I'm searching by a  
> string). Most
> DBMS allow comparing string to an int, why shouldn't we?

My problem with this is consistency. The patch will work or fail  
depending on a specific driver (or a driver version - something I  
observed on postgresql in the past), and a specific type of String to  
X conversion. Actually the current 'setString' approach is prone to  
the same problem, but changing it now opens possibility of new  
regression issues. So we'll be likely fixing a subset of cases and  
breaking some other subset, and that won't be clear immediately.

Andrus


Re: [jira] Updated: (CAY-1298) String no longer works in query when column type is Integer

Posted by Andrey Razumovsky <ra...@gmail.com>.
Actually I've been using such syntax myself (we also talked about that when
discussing generified expressions). I really want this ability to stay in
some way, since it saves time and unnecessary code. Currently it works for
me in MySQL when id column is BIGINT (and I'm searching by a string). Most
DBMS allow comparing string to an int, why shouldn't we?

2010/1/11 Andrus Adamchik <an...@objectstyle.org>

> I think this is working as advertised now, and was working purely by
> accident before. E.g.:
>
> http://cayenne.apache.org/doc/path-expressions.html
>
> "As described in the following chapters a path expression is usually
> matched against some value (see for example ExpressionFactory API - the
> first argument to each method is a path, and a second - an object value that
> is matched against the path). A type of such value must be compatible with
> the type of the property pointed to by the path. E.g. toArtist.artistName
> can only be matched against a String, and toArtist - against instances of
> Artist."
>
> Andrus
>
>
> On Jan 11, 2010, at 8:38 PM, Andrey Razumovsky (JIRA) wrote:
>
>
>>   [
>> https://issues.apache.org/jira/browse/CAY-1298?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
>>  ]
>>
>> Andrey Razumovsky updated CAY-1298:
>> -----------------------------------
>>
>>  Fix Version/s: 3.0RC2
>>
>> This is a regression and should be addressed before final release
>>
>>  String no longer works in query when column type is Integer
>>> -----------------------------------------------------------
>>>
>>>              Key: CAY-1298
>>>              URL: https://issues.apache.org/jira/browse/CAY-1298
>>>          Project: Cayenne
>>>       Issue Type: Bug
>>>       Components: Core Library
>>>  Affects Versions: 3.0 beta 1
>>>      Environment: IcedTea6 1.6.1
>>> PostgreSQL 8.3
>>> JDBC 8.3-603.jdbc4
>>>         Reporter: Dave Dombrosky
>>>         Priority: Minor
>>>          Fix For: 3.0RC2
>>>
>>>      Attachments: CharType.diff
>>>
>>>
>>> I have queries that no longer work in 3.0B1, because of a change that was
>>> made in revision 813661.  For example, a query like this used to work:
>>> DataObjectUtils.objectForPK(db, Artist.class, "1");
>>> But now, I get the following error:
>>> org.postgresql.util.PSQLException: ERROR: operator does not exist:
>>> smallint = character varying
>>>        at
>>> org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592)
>>>        at
>>> org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327)
>>>        at
>>> org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
>>>        at
>>> org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
>>>        at
>>> org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
>>>        at
>>> org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
>>>        at
>>> org.apache.cayenne.access.jdbc.SelectAction.performAction(SelectAction.java:71)
>>>        at
>>> org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:87)
>>>        at
>>> org.apache.cayenne.access.DataNode.performQueries(DataNode.java:274)
>>>        at
>>> org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:418)
>>>        at
>>> org.apache.cayenne.access.DataDomainQueryAction.access$000(DataDomainQueryAction.java:65)
>>>        at
>>> org.apache.cayenne.access.DataDomainQueryAction$2.transform(DataDomainQueryAction.java:391)
>>>        at
>>> org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:850)
>>>        at
>>> org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:388)
>>>        at
>>> org.apache.cayenne.access.DataDomainQueryAction.interceptOIDQuery(DataDomainQueryAction.java:155)
>>>        at
>>> org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:112)
>>>        at
>>> org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:743)
>>>        at
>>> org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:333)
>>>        at
>>> org.apache.cayenne.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:96)
>>>        at
>>> org.apache.cayenne.access.DataContext.onQuery(DataContext.java:1278)
>>>        at
>>> org.apache.cayenne.access.DataContext.performQuery(DataContext.java:1267)
>>>        at
>>> org.apache.cayenne.DataObjectUtils.objectForQuery(DataObjectUtils.java:273)
>>>        at
>>> org.apache.cayenne.DataObjectUtils.objectForPK(DataObjectUtils.java:259)
>>>        at
>>> org.apache.cayenne.DataObjectUtils.objectForPK(DataObjectUtils.java:170)
>>>        at Test.main(Test.java:9)
>>> Exception in thread "main" org.apache.cayenne.CayenneRuntimeException:
>>> [v.3.0-SNAPSHOT Oct 30 2009 10:19:35] Query exception.
>>>        at
>>> org.apache.cayenne.access.DataDomainQueryAction.nextQueryException(DataDomainQueryAction.java:545)
>>>        at
>>> org.apache.cayenne.access.DataNode.performQueries(DataNode.java:281)
>>>        at
>>> org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:418)
>>>        at
>>> org.apache.cayenne.access.DataDomainQueryAction.access$000(DataDomainQueryAction.java:65)
>>>        at
>>> org.apache.cayenne.access.DataDomainQueryAction$2.transform(DataDomainQueryAction.java:391)
>>>        at
>>> org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:850)
>>>        at
>>> org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:388)
>>>        at
>>> org.apache.cayenne.access.DataDomainQueryAction.interceptOIDQuery(DataDomainQueryAction.java:155)
>>>        at
>>> org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:112)
>>>        at
>>> org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:743)
>>>        at
>>> org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:333)
>>>        at
>>> org.apache.cayenne.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:96)
>>>        at
>>> org.apache.cayenne.access.DataContext.onQuery(DataContext.java:1278)
>>>        at
>>> org.apache.cayenne.access.DataContext.performQuery(DataContext.java:1267)
>>>        at
>>> org.apache.cayenne.DataObjectUtils.objectForQuery(DataObjectUtils.java:273)
>>>        at
>>> org.apache.cayenne.DataObjectUtils.objectForPK(DataObjectUtils.java:259)
>>>        at
>>> org.apache.cayenne.DataObjectUtils.objectForPK(DataObjectUtils.java:170)
>>>        at Test.main(Test.java:9)
>>> Caused by: org.postgresql.util.PSQLException: ERROR: operator does not
>>> exist: smallint = character varying
>>>        at
>>> org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592)
>>>        at
>>> org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327)
>>>        at
>>> org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
>>>        at
>>> org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
>>>        at
>>> org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
>>>        at
>>> org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
>>>        at
>>> org.apache.cayenne.access.jdbc.SelectAction.performAction(SelectAction.java:71)
>>>        at
>>> org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:87)
>>>        at
>>> org.apache.cayenne.access.DataNode.performQueries(DataNode.java:274)
>>>        ... 16 more
>>> The strange part is that the logger shows the query as SELECT t0.name,
>>> t0.id FROM lookup.color t0 WHERE t0.id = ? [bind: 1->id:'1'], both
>>> before and after the change.  Postgres can usually deal with using a
>>> character type to match on an integer column.  Something must have changed
>>> with the JDBC binding that is not showing up in the textual representation
>>> of the query.
>>>
>>
>> --
>> This message is automatically generated by JIRA.
>> -
>> You can reply to this email to add a comment to the issue online.
>>
>>
>>
>


-- 
Andrey

Re: [jira] Updated: (CAY-1298) String no longer works in query when column type is Integer

Posted by Andrus Adamchik <an...@objectstyle.org>.
I think this is working as advertised now, and was working purely by  
accident before. E.g.:

http://cayenne.apache.org/doc/path-expressions.html

"As described in the following chapters a path expression is usually  
matched against some value (see for example ExpressionFactory API -  
the first argument to each method is a path, and a second - an object  
value that is matched against the path). A type of such value must be  
compatible with the type of the property pointed to by the path. E.g.  
toArtist.artistName can only be matched against a String, and toArtist  
- against instances of Artist."

Andrus

On Jan 11, 2010, at 8:38 PM, Andrey Razumovsky (JIRA) wrote:

>
>    [ https://issues.apache.org/jira/browse/CAY-1298?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel 
>  ]
>
> Andrey Razumovsky updated CAY-1298:
> -----------------------------------
>
>   Fix Version/s: 3.0RC2
>
> This is a regression and should be addressed before final release
>
>> String no longer works in query when column type is Integer
>> -----------------------------------------------------------
>>
>>               Key: CAY-1298
>>               URL: https://issues.apache.org/jira/browse/CAY-1298
>>           Project: Cayenne
>>        Issue Type: Bug
>>        Components: Core Library
>>  Affects Versions: 3.0 beta 1
>>       Environment: IcedTea6 1.6.1
>> PostgreSQL 8.3
>> JDBC 8.3-603.jdbc4
>>          Reporter: Dave Dombrosky
>>          Priority: Minor
>>           Fix For: 3.0RC2
>>
>>       Attachments: CharType.diff
>>
>>
>> I have queries that no longer work in 3.0B1, because of a change  
>> that was made in revision 813661.  For example, a query like this  
>> used to work:
>> DataObjectUtils.objectForPK(db, Artist.class, "1");
>> But now, I get the following error:
>> org.postgresql.util.PSQLException: ERROR: operator does not exist:  
>> smallint = character varying
>> 	at  
>> org 
>> .postgresql 
>> .core 
>> .v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java: 
>> 1592)
>> 	at  
>> org 
>> .postgresql 
>> .core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java: 
>> 1327)
>> 	at  
>> org 
>> .postgresql 
>> .core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
>> 	at  
>> org 
>> .postgresql 
>> .jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java: 
>> 451)
>> 	at  
>> org 
>> .postgresql 
>> .jdbc2 
>> .AbstractJdbc2Statement 
>> .executeWithFlags(AbstractJdbc2Statement.java:350)
>> 	at  
>> org 
>> .postgresql 
>> .jdbc2 
>> .AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
>> 	at  
>> org 
>> .apache 
>> .cayenne.access.jdbc.SelectAction.performAction(SelectAction.java:71)
>> 	at  
>> org 
>> .apache 
>> .cayenne 
>> .access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:87)
>> 	at org.apache.cayenne.access.DataNode.performQueries(DataNode.java: 
>> 274)
>> 	at  
>> org 
>> .apache 
>> .cayenne 
>> .access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java: 
>> 418)
>> 	at org.apache.cayenne.access.DataDomainQueryAction.access 
>> $000(DataDomainQueryAction.java:65)
>> 	at org.apache.cayenne.access.DataDomainQueryAction 
>> $2.transform(DataDomainQueryAction.java:391)
>> 	at  
>> org 
>> .apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java: 
>> 850)
>> 	at  
>> org 
>> .apache 
>> .cayenne 
>> .access 
>> .DataDomainQueryAction 
>> .runQueryInTransaction(DataDomainQueryAction.java:388)
>> 	at  
>> org 
>> .apache 
>> .cayenne 
>> .access 
>> .DataDomainQueryAction.interceptOIDQuery(DataDomainQueryAction.java: 
>> 155)
>> 	at  
>> org 
>> .apache 
>> .cayenne 
>> .access.DataDomainQueryAction.execute(DataDomainQueryAction.java:112)
>> 	at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:743)
>> 	at  
>> org 
>> .apache 
>> .cayenne 
>> .util 
>> .ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:333)
>> 	at  
>> org 
>> .apache 
>> .cayenne 
>> .util 
>> .ObjectContextQueryAction.execute(ObjectContextQueryAction.java:96)
>> 	at org.apache.cayenne.access.DataContext.onQuery(DataContext.java: 
>> 1278)
>> 	at  
>> org.apache.cayenne.access.DataContext.performQuery(DataContext.java: 
>> 1267)
>> 	at  
>> org 
>> .apache.cayenne.DataObjectUtils.objectForQuery(DataObjectUtils.java: 
>> 273)
>> 	at  
>> org.apache.cayenne.DataObjectUtils.objectForPK(DataObjectUtils.java: 
>> 259)
>> 	at  
>> org.apache.cayenne.DataObjectUtils.objectForPK(DataObjectUtils.java: 
>> 170)
>> 	at Test.main(Test.java:9)
>> Exception in thread "main"  
>> org.apache.cayenne.CayenneRuntimeException: [v.3.0-SNAPSHOT Oct 30  
>> 2009 10:19:35] Query exception.
>> 	at  
>> org 
>> .apache 
>> .cayenne 
>> .access 
>> .DataDomainQueryAction 
>> .nextQueryException(DataDomainQueryAction.java:545)
>> 	at org.apache.cayenne.access.DataNode.performQueries(DataNode.java: 
>> 281)
>> 	at  
>> org 
>> .apache 
>> .cayenne 
>> .access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java: 
>> 418)
>> 	at org.apache.cayenne.access.DataDomainQueryAction.access 
>> $000(DataDomainQueryAction.java:65)
>> 	at org.apache.cayenne.access.DataDomainQueryAction 
>> $2.transform(DataDomainQueryAction.java:391)
>> 	at  
>> org 
>> .apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java: 
>> 850)
>> 	at  
>> org 
>> .apache 
>> .cayenne 
>> .access 
>> .DataDomainQueryAction 
>> .runQueryInTransaction(DataDomainQueryAction.java:388)
>> 	at  
>> org 
>> .apache 
>> .cayenne 
>> .access 
>> .DataDomainQueryAction.interceptOIDQuery(DataDomainQueryAction.java: 
>> 155)
>> 	at  
>> org 
>> .apache 
>> .cayenne 
>> .access.DataDomainQueryAction.execute(DataDomainQueryAction.java:112)
>> 	at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:743)
>> 	at  
>> org 
>> .apache 
>> .cayenne 
>> .util 
>> .ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:333)
>> 	at  
>> org 
>> .apache 
>> .cayenne 
>> .util 
>> .ObjectContextQueryAction.execute(ObjectContextQueryAction.java:96)
>> 	at org.apache.cayenne.access.DataContext.onQuery(DataContext.java: 
>> 1278)
>> 	at  
>> org.apache.cayenne.access.DataContext.performQuery(DataContext.java: 
>> 1267)
>> 	at  
>> org 
>> .apache.cayenne.DataObjectUtils.objectForQuery(DataObjectUtils.java: 
>> 273)
>> 	at  
>> org.apache.cayenne.DataObjectUtils.objectForPK(DataObjectUtils.java: 
>> 259)
>> 	at  
>> org.apache.cayenne.DataObjectUtils.objectForPK(DataObjectUtils.java: 
>> 170)
>> 	at Test.main(Test.java:9)
>> Caused by: org.postgresql.util.PSQLException: ERROR: operator does  
>> not exist: smallint = character varying
>> 	at  
>> org 
>> .postgresql 
>> .core 
>> .v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java: 
>> 1592)
>> 	at  
>> org 
>> .postgresql 
>> .core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java: 
>> 1327)
>> 	at  
>> org 
>> .postgresql 
>> .core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
>> 	at  
>> org 
>> .postgresql 
>> .jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java: 
>> 451)
>> 	at  
>> org 
>> .postgresql 
>> .jdbc2 
>> .AbstractJdbc2Statement 
>> .executeWithFlags(AbstractJdbc2Statement.java:350)
>> 	at  
>> org 
>> .postgresql 
>> .jdbc2 
>> .AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
>> 	at  
>> org 
>> .apache 
>> .cayenne.access.jdbc.SelectAction.performAction(SelectAction.java:71)
>> 	at  
>> org 
>> .apache 
>> .cayenne 
>> .access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:87)
>> 	at org.apache.cayenne.access.DataNode.performQueries(DataNode.java: 
>> 274)
>> 	... 16 more
>> The strange part is that the logger shows the query as SELECT  
>> t0.name, t0.id FROM lookup.color t0 WHERE t0.id = ? [bind: 1- 
>> >id:'1'], both before and after the change.  Postgres can usually  
>> deal with using a character type to match on an integer column.   
>> Something must have changed with the JDBC binding that is not  
>> showing up in the textual representation of the query.
>
> -- 
> This message is automatically generated by JIRA.
> -
> You can reply to this email to add a comment to the issue online.
>
>


[jira] Updated: (CAY-1298) String no longer works in query when column type is Integer

Posted by "Andrey Razumovsky (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/CAY-1298?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Andrey Razumovsky updated CAY-1298:
-----------------------------------

    Fix Version/s: 3.0RC2

This is a regression and should be addressed before final release

> String no longer works in query when column type is Integer
> -----------------------------------------------------------
>
>                 Key: CAY-1298
>                 URL: https://issues.apache.org/jira/browse/CAY-1298
>             Project: Cayenne
>          Issue Type: Bug
>          Components: Core Library
>    Affects Versions: 3.0 beta 1
>         Environment: IcedTea6 1.6.1
> PostgreSQL 8.3
> JDBC 8.3-603.jdbc4
>            Reporter: Dave Dombrosky
>            Priority: Minor
>             Fix For: 3.0RC2
>
>         Attachments: CharType.diff
>
>
> I have queries that no longer work in 3.0B1, because of a change that was made in revision 813661.  For example, a query like this used to work:
> DataObjectUtils.objectForPK(db, Artist.class, "1");
> But now, I get the following error:
> org.postgresql.util.PSQLException: ERROR: operator does not exist: smallint = character varying
> 	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592)
> 	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327)
> 	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
> 	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
> 	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
> 	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
> 	at org.apache.cayenne.access.jdbc.SelectAction.performAction(SelectAction.java:71)
> 	at org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:87)
> 	at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:274)
> 	at org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:418)
> 	at org.apache.cayenne.access.DataDomainQueryAction.access$000(DataDomainQueryAction.java:65)
> 	at org.apache.cayenne.access.DataDomainQueryAction$2.transform(DataDomainQueryAction.java:391)
> 	at org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:850)
> 	at org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:388)
> 	at org.apache.cayenne.access.DataDomainQueryAction.interceptOIDQuery(DataDomainQueryAction.java:155)
> 	at org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:112)
> 	at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:743)
> 	at org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:333)
> 	at org.apache.cayenne.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:96)
> 	at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:1278)
> 	at org.apache.cayenne.access.DataContext.performQuery(DataContext.java:1267)
> 	at org.apache.cayenne.DataObjectUtils.objectForQuery(DataObjectUtils.java:273)
> 	at org.apache.cayenne.DataObjectUtils.objectForPK(DataObjectUtils.java:259)
> 	at org.apache.cayenne.DataObjectUtils.objectForPK(DataObjectUtils.java:170)
> 	at Test.main(Test.java:9)
> Exception in thread "main" org.apache.cayenne.CayenneRuntimeException: [v.3.0-SNAPSHOT Oct 30 2009 10:19:35] Query exception.
> 	at org.apache.cayenne.access.DataDomainQueryAction.nextQueryException(DataDomainQueryAction.java:545)
> 	at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:281)
> 	at org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:418)
> 	at org.apache.cayenne.access.DataDomainQueryAction.access$000(DataDomainQueryAction.java:65)
> 	at org.apache.cayenne.access.DataDomainQueryAction$2.transform(DataDomainQueryAction.java:391)
> 	at org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:850)
> 	at org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:388)
> 	at org.apache.cayenne.access.DataDomainQueryAction.interceptOIDQuery(DataDomainQueryAction.java:155)
> 	at org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:112)
> 	at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:743)
> 	at org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:333)
> 	at org.apache.cayenne.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:96)
> 	at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:1278)
> 	at org.apache.cayenne.access.DataContext.performQuery(DataContext.java:1267)
> 	at org.apache.cayenne.DataObjectUtils.objectForQuery(DataObjectUtils.java:273)
> 	at org.apache.cayenne.DataObjectUtils.objectForPK(DataObjectUtils.java:259)
> 	at org.apache.cayenne.DataObjectUtils.objectForPK(DataObjectUtils.java:170)
> 	at Test.main(Test.java:9)
> Caused by: org.postgresql.util.PSQLException: ERROR: operator does not exist: smallint = character varying
> 	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592)
> 	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327)
> 	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
> 	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
> 	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
> 	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
> 	at org.apache.cayenne.access.jdbc.SelectAction.performAction(SelectAction.java:71)
> 	at org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:87)
> 	at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:274)
> 	... 16 more
> The strange part is that the logger shows the query as SELECT t0.name, t0.id FROM lookup.color t0 WHERE t0.id = ? [bind: 1->id:'1'], both before and after the change.  Postgres can usually deal with using a character type to match on an integer column.  Something must have changed with the JDBC binding that is not showing up in the textual representation of the query.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.