Thread: The escape clause in the SELECT statement in PostgreSQL 8.4
Hello group,
The following is a Hibernate generated statement,
select count(*) as y0_
from view_localized_task this_
inner join TASKS nonlocaliz1_ on this_.non_localized_task_id=nonlocaliz1_.TASK_ID
where (this_.ended>=? or this_.state=? or this_.state=? or this_.state=?)
and this_.submitted<=?
and (nonlocaliz1_.TASK_ID in (select distinct this_.TASK_ID as y0_
from TASKS this_
left outer join TASK_OBJECT_HANDLES taskobject3_ on this_.TASK_ID=taskobject3_.TASK_ID
left outer join OBJECT_HANDLE taskobject1_ on taskobject3_.OBJECT_HANDLE_ID=taskobject1_.ID
where taskobject1_.ID in (select distinct this_.objecthandle_id as y0_
from OBJECT_VISIBILITY_CONTEXT this_
where this_.context_handle_id in (?)))
or nonlocaliz1_.globalTask=?
or lower(this_.userId) like ?
escape '\')
It works with PostgreSQL 8.2. But it fails after I upgrade the database to PostgreSQL 8.4, nothing else is changed.
The jdbc driver is 8.4 build 701.
Here is the error message from the code:
2010-06-07 10:31:35,541 [WARN ] JDBCExceptionReporter - SQL Error: 0, SQLState: 42601
2010-06-07 10:31:35,541 [ERROR] JDBCExceptionReporter - ERROR: unterminated quoted string at or near "'\')"
Position: 718
The value for the last parameter is "superuser".
Thanks in advance for your help.
Harry
Your Photo on Bing.ca: You Could WIN on Canada Day! Submit a Photo Now!
There have been some changes with that. SQL is going to change, too. Backslash is the default character, no need to specify that. scott=# select empno from emp where ename='KING'; empno ------- 7839 (1 row) Time: 18.793 ms scott=# update emp set ename='K\x09ING' where empno=7839; UPDATE 1 Time: 32.694 ms scott=# select ename from emp where empno=7839; ename ------------- K ING (1 row) Time: 0.440 ms scott=# select ename from emp where ename like 'K\x09%'; ename ------------- K ING (1 row) Time: 0.418 ms scott=# I have no idea how to instruct Hibernate how to generate SQL without the escape clause. This opens some interesting possibilities. Did you see this: http://xkcd.com/327/ ? Sheng Hui wrote: > > Hello group, > > The following is a Hibernate generated statement, > > select count(*) as y0_ > from view_localized_task this_ > inner join TASKS nonlocaliz1_ on > this_.non_localized_task_id=nonlocaliz1_.TASK_ID > where (this_.ended>=? or this_.state=? or this_.state=? or this_.state=?) > and this_.submitted<=? > and (nonlocaliz1_.TASK_ID in (select distinct this_.TASK_ID as y0_ > from TASKS this_ > left outer join TASK_OBJECT_HANDLES > taskobject3_ on this_.TASK_ID=taskobject3_.TASK_ID > left outer join OBJECT_HANDLE > taskobject1_ on taskobject3_.OBJECT_HANDLE_ID=taskobject1_.ID > where taskobject1_.ID in (select > distinct this_.objecthandle_id as y0_ > from > OBJECT_VISIBILITY_CONTEXT this_ > where > this_.context_handle_id in (?))) > or nonlocaliz1_.globalTask=? > or lower(this_.userId) like ? > escape '\') > > It works with PostgreSQL 8.2. But it fails after I upgrade the > database to PostgreSQL 8.4, nothing else is changed. > The jdbc driver is 8.4 build 701. > > Here is the error message from the code: > > 2010-06-07 10:31:35,541 [WARN ] JDBCExceptionReporter - SQL Error: 0, > SQLState: 42601 > 2010-06-07 10:31:35,541 [ERROR] JDBCExceptionReporter - ERROR: > unterminated quoted string at or near "'\')" > Position: 718 > > The value for the last parameter is "superuser". > > Thanks in advance for your help. > > Harry > > <http://go.microsoft.com/?linkid=9734381> > ------------------------------------------------------------------------ > Your Photo on Bing.ca: You Could WIN on Canada Day! Submit a Photo > Now! <http://go.microsoft.com/?linkid=9734380> -- Mladen Gogala Sr. Oracle DBA 1500 Broadway New York, NY 10036 (212) 329-5251 http://www.vmsinfo.com The Leader in Integrated Media Intelligence Solutions
Mladen Gogala <mgogala@vmsinfo.com> writes: > There have been some changes with that. Not since 8.2. It looks to me like the OP had standard_conforming_strings turned on in his 8.2 installation and forgot to duplicate that setting in 8.4. regards, tom lane
Tom Lane wrote: Mladen Gogala <mgogala@vmsinfo.com> writes: There have been some changes with that. Not since 8.2. It looks to me like the OP had standard_conforming_strings turned on in his 8.2 installation and forgot to duplicate that setting in 8.4. regards, tom lane Yup, you're right: scott=# set standard_conforming_strings=true; SET Time: 0.689 ms scott=# select * from emp where ename like '%' escape '\'; empno | ename | job | mgr | hiredate | sal | comm | deptno -------+--------+-----------+------+---------------------+------+------+-------- 7369 | SMITH | CLERK | 7902 | 1980-12-17 00:00:00 | 800 | | 20 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 00:00:00 | 1600 | 300 | 30 7521 | WARD | SALESMAN | 7698 | 1981-02-22 00:00:00 | 1250 | 500 | 30 7566 | JONES | MANAGER | 7839 | 1981-04-02 00:00:00 | 2975 | | 20 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 00:00:00 | 1250 | 1400 | 30 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 00:00:00 | 2850 | | 30 7782 | CLARK | MANAGER | 7839 | 1981-06-09 00:00:00 | 2450 | | 10 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 00:00:00 | 3000 | | 20 7839 | KING | PRESIDENT | | 1981-11-17 00:00:00 | 5000 | | 10 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 00:00:00 | 1500 | 0 | 30 7876 | ADAMS | CLERK | 7788 | 1987-05-23 00:00:00 | 1100 | | 20 7900 | JAMES | CLERK | 7698 | 1981-12-03 00:00:00 | 950 | | 30 7902 | FORD | ANALYST | 7566 | 1981-12-03 00:00:00 | 3000 | | 20 7934 | MILLER | CLERK | 7782 | 1982-01-23 00:00:00 | 1300 | | 10 (14 rows) Time: 1.197 ms scott=# select version(); version -------------------------------------------------------------------------------- -------------------------------- PostgreSQL 8.4.4 on i686-redhat-linux-gnu, compiled by GCC gcc (GCC) 4.1.2 2008 0704 (Red Hat 4.1.2-46), 32-bit (1 row) Time: 0.736 ms scott=# -- Mladen Gogala Sr. Oracle DBA 1500 Broadway New York, NY 10036 (212) 329-5251 www.vmsinfo.com