SQLGrammarException with PostgreSQL for with "getHotWeblogs" with SQL patch
---------------------------------------------------------------------------

                 Key: ROL-1584
                 URL: 
http://opensource.atlassian.com/projects/roller/browse/ROL-1584
             Project: Roller
          Issue Type: Bug
          Components: Database Access & Data Model
    Affects Versions: 3.1
         Environment: postgresql
            Reporter: Nouguier Olivier
            Assignee: Roller Unassigned


When asking for getHotWeblogs, a "native" sql query is used in the 
Object.method : package 
org.apache.roller.business.hibernate.HibernateWeblogManagerImpl

### BEGIN JAVA CODE ###
Query query = session.createQuery(
                    "from HitCountData hcd " +
                    "where hcd.weblog.enabled=true " +
                    "and hcd.weblog.active=true " +
                    "and hcd.weblog.lastModified > :startDate " +
                    "and hcd.dailyHits > 0 " +
                    "order by hcd.dailyHits desc");
            query.setParameter("startDate", startDate);
### END JAVA CODE ###
With postgreql it result to a sql query:
### BEGIN SQL DUMP ###
select hitcountda0_.id as id17_, hitcountda0_.websiteid as websiteid17_, 
hitcountda0_.dailyhits as dailyhits17_
from roller_hitcounts hitcountda0_, website websitedat1_ where 
hitcountda0_.websiteid=websitedat1_.id and
websitedat1_.isenabled=1 and websitedat1_.isactive=1 and 
websitedat1_.lastmodified>'2006-10-23 19:54:06.298000+02' and
hitcountda0_.dailyhits>0 order by hitcountda0_.dailyhits desc limit 25
### END SQL DUMP ###
Then to an: 
ERROR:  operator does not exist: boolean = integer

I don't hnow if it a Roller, mapping or an hibernate issue, but adding the 
following to the postgresql sql creation script made it work for me.

It's just add the missing operator.

### BEGIN SQL PATCH ###
CREATE FUNCTION boolean_integer_compare(boolean,integer) RETURNS boolean AS $$
        SELECT ($2 = 1 AND $1) OR ($2 = 0 AND NOT $1);
$$ LANGUAGE SQL;

CREATE OPERATOR = (
    leftarg = boolean,
    rightarg = integer,
    procedure = boolean_integer_compare,
    commutator = =
);
### END SQL PATCH ###





-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://opensource.atlassian.com/projects/roller/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to