Re: Tables params in extra()

2008-05-13 Thread Dave Lowe

I can't tell you how grateful I am that you posted this workaround,
Barry! Just in time for a site launch.

Like you said, I wonder if the multiple calls to to_tsquery() are
acceptable or if there's a more graceful solution here for the long-
term.



On May 13, 9:01 pm, Barry Pederson <[EMAIL PROTECTED]> wrote:
> Dave Lowe wrote:
> > It worked prior to qsrf-merge. I have tried adding the quotes though,
> > without success.
>
> > On May 13, 9:59 am, David Cramer <[EMAIL PROTECTED]> wrote:
> >> The database engine usually can't fill that in anyways, you should
> >> probably quote it yourself (correct me if I'm wrong).
>
> >> On May 13, 9:15 am, Dave Lowe <[EMAIL PROTECTED]> wrote:
>
> >>> Ever since the querset-refactor merge, params in the 'tables' argument
> >>> don't seem to be filled. The documentation describes the arguments
> >>> 'params' and 'select_params' as being for where and select statements,
> >>> respectively. Do we need a "tables_params" argument as well?
> >>> Here's a code sample of where I'm using tables params (it's for full-
> >>> text searching in postgres):
> >>> results = Product.objects.extra(
> >>>                             select={
> >>>                                 'rank': "rank_cd(textsearchable,
> >>> query, 32)",
> >>>                                 },
> >>>                             tables=["to_tsquery(%s) as query"],
> >>>                             where=["textsearchable @@ query"],
> >>>                             params=[terms],
> >>>                             order_by=('-rank',)
> >>>                     )
> >>> The error message by the way is: ProgrammingError: relation
> >>> "to_tsquery(2) as query" does not exist.
>
> I've seen this too, also trying to do PgSQL FTS, and posted about it in
> django-users
>
> http://groups.google.com/group/django-users/browse_thread/thread/ef17...
>
> it seems that two things are changed from pre-QSRF:  params aren't
> processed for the 'tables=' argument, and the tables= arguments are
> quoted now, so you end up with something like
>
>    SELECT ... FROM "to_tsquery(%s) as query" ...
>
> where before QSRF it would have executed
>
>    SELECT ... FROM to_tsquery('value of terms') as query ...
>
> as a workaround, you can repeat the call to to_tsquery() and use
> select_params=, as in:
>
> 
>
>    results = Product.objects.extra(
>       select={
>              'rank': "rank_cd(textsearchable,to_tsquery(%s), 32)",
>              },
>       where=["textsearchable @@ to_tsquery(%s)"],
>       params=[terms],
>       select_params=[terms],
>       order_by=('-rank',)
>       )
>
> -
>
> Don't know how big of a hit it is to have to call to_tsquery() multiple
> times even with the same args.  But this isn't really just a fulltext
> search issue, it could come up with other PgSQL functions that are more
> heavyweight.
>
>         Barry
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-developers@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en
-~--~~~~--~~--~--~---



Re: Tables params in extra()

2008-05-13 Thread Barry Pederson

Dave Lowe wrote:
> It worked prior to qsrf-merge. I have tried adding the quotes though,
> without success.
> 
> On May 13, 9:59 am, David Cramer <[EMAIL PROTECTED]> wrote:
>> The database engine usually can't fill that in anyways, you should
>> probably quote it yourself (correct me if I'm wrong).
>>
>> On May 13, 9:15 am, Dave Lowe <[EMAIL PROTECTED]> wrote:
>>
>>> Ever since the querset-refactor merge, params in the 'tables' argument
>>> don't seem to be filled. The documentation describes the arguments
>>> 'params' and 'select_params' as being for where and select statements,
>>> respectively. Do we need a "tables_params" argument as well?
>>> Here's a code sample of where I'm using tables params (it's for full-
>>> text searching in postgres):
>>> results = Product.objects.extra(
>>> select={
>>> 'rank': "rank_cd(textsearchable,
>>> query, 32)",
>>> },
>>> tables=["to_tsquery(%s) as query"],
>>> where=["textsearchable @@ query"],
>>> params=[terms],
>>> order_by=('-rank',)
>>> )
>>> The error message by the way is: ProgrammingError: relation
>>> "to_tsquery(2) as query" does not exist.

I've seen this too, also trying to do PgSQL FTS, and posted about it in 
django-users

http://groups.google.com/group/django-users/browse_thread/thread/ef17cb9fff6d0391

it seems that two things are changed from pre-QSRF:  params aren't 
processed for the 'tables=' argument, and the tables= arguments are 
quoted now, so you end up with something like

   SELECT ... FROM "to_tsquery(%s) as query" ...

where before QSRF it would have executed

   SELECT ... FROM to_tsquery('value of terms') as query ...

as a workaround, you can repeat the call to to_tsquery() and use 
select_params=, as in:



   results = Product.objects.extra(
  select={
 'rank': "rank_cd(textsearchable,to_tsquery(%s), 32)",
 },
  where=["textsearchable @@ to_tsquery(%s)"],
  params=[terms],
  select_params=[terms],
  order_by=('-rank',)
  )

-

Don't know how big of a hit it is to have to call to_tsquery() multiple 
times even with the same args.  But this isn't really just a fulltext 
search issue, it could come up with other PgSQL functions that are more 
heavyweight.

Barry

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-developers@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en
-~--~~~~--~~--~--~---



Re: Tables params in extra()

2008-05-13 Thread Dave Lowe

It worked prior to qsrf-merge. I have tried adding the quotes though,
without success.

On May 13, 9:59 am, David Cramer <[EMAIL PROTECTED]> wrote:
> The database engine usually can't fill that in anyways, you should
> probably quote it yourself (correct me if I'm wrong).
>
> On May 13, 9:15 am, Dave Lowe <[EMAIL PROTECTED]> wrote:
>
> > Ever since the querset-refactor merge, params in the 'tables' argument
> > don't seem to be filled. The documentation describes the arguments
> > 'params' and 'select_params' as being for where and select statements,
> > respectively. Do we need a "tables_params" argument as well?
>
> > Here's a code sample of where I'm using tables params (it's for full-
> > text searching in postgres):
>
> > results = Product.objects.extra(
> >                             select={
> >                                 'rank': "rank_cd(textsearchable,
> > query, 32)",
> >                                 },
> >                             tables=["to_tsquery(%s) as query"],
> >                             where=["textsearchable @@ query"],
> >                             params=[terms],
> >                             order_by=('-rank',)
> >                     )
>
> > The error message by the way is: ProgrammingError: relation
> > "to_tsquery(2) as query" does not exist.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-developers@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en
-~--~~~~--~~--~--~---



Re: Tables params in extra()

2008-05-13 Thread David Cramer

The database engine usually can't fill that in anyways, you should
probably quote it yourself (correct me if I'm wrong).

On May 13, 9:15 am, Dave Lowe <[EMAIL PROTECTED]> wrote:
> Ever since the querset-refactor merge, params in the 'tables' argument
> don't seem to be filled. The documentation describes the arguments
> 'params' and 'select_params' as being for where and select statements,
> respectively. Do we need a "tables_params" argument as well?
>
> Here's a code sample of where I'm using tables params (it's for full-
> text searching in postgres):
>
> results = Product.objects.extra(
>                             select={
>                                 'rank': "rank_cd(textsearchable,
> query, 32)",
>                                 },
>                             tables=["to_tsquery(%s) as query"],
>                             where=["textsearchable @@ query"],
>                             params=[terms],
>                             order_by=('-rank',)
>                     )
>
> The error message by the way is: ProgrammingError: relation
> "to_tsquery(2) as query" does not exist.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-developers@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en
-~--~~~~--~~--~--~---



Tables params in extra()

2008-05-13 Thread Dave Lowe

Ever since the querset-refactor merge, params in the 'tables' argument
don't seem to be filled. The documentation describes the arguments
'params' and 'select_params' as being for where and select statements,
respectively. Do we need a "tables_params" argument as well?

Here's a code sample of where I'm using tables params (it's for full-
text searching in postgres):

results = Product.objects.extra(
select={
'rank': "rank_cd(textsearchable,
query, 32)",
},
tables=["to_tsquery(%s) as query"],
where=["textsearchable @@ query"],
params=[terms],
order_by=('-rank',)
)

The error message by the way is: ProgrammingError: relation
"to_tsquery(2) as query" does not exist.


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-developers@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en
-~--~~~~--~~--~--~---