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

From: Andrus Adamchik (andru..bjectstyle.org)
Date: Mon Jan 11 2010 - 14:11:26 EST

  • Next message: Andrey Razumovsky: "Re: [jira] Updated: (CAY-1298) String no longer works in query when column type is Integer"

    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.
    >
    >



    This archive was generated by hypermail 2.0.0 : Mon Jan 11 2010 - 14:12:06 EST