Thread: New patch (was: tough bug)

New patch (was: tough bug)

From
Goran Thyni
Date:
OK I found it,
I search in the planner for the '\xFF' appending.
Finally I found in MakeIndexable() in gram.y

Attach a patch which removes the "<=" test in USE_LOCALE,
might make some queries a bit slower for us "locale-heads",
BUT correct result is more important.

    regards,
--
-----------------
Göran Thyni
This is Penguin Country. On a quiet night you can hear Windows NT
reboot!diff -c pgsql/src/backend/parser/gram.y.orig pgsql/src/backend/parser/gram.y
*** pgsql/src/backend/parser/gram.y.orig    Tue Jan 26 07:02:32 1999
--- pgsql/src/backend/parser/gram.y    Mon Feb  1 21:16:56 1999
***************
*** 5249,5259 ****
--- 5249,5265 ----
                  least->val.val.str = match_least;
                  most->val.type = T_String;
                  most->val.val.str = match_most;
+ #ifdef USE_LOCALE
+                 result = makeA_Expr(AND, NULL,
+                         makeA_Expr(OP, "~", lexpr, rexpr),
+                         makeA_Expr(OP, ">=", lexpr, (Node *)least));
+ #else
                  result = makeA_Expr(AND, NULL,
                          makeA_Expr(OP, "~", lexpr, rexpr),
                          makeA_Expr(AND, NULL,
                              makeA_Expr(OP, ">=", lexpr, (Node *)least),
                              makeA_Expr(OP, "<=", lexpr, (Node *)most)));
+ #endif
              }
          }
      }
***************
*** 5296,5306 ****
--- 5302,5318 ----
                  least->val.val.str = match_least;
                  most->val.type = T_String;
                  most->val.val.str = match_most;
+ #ifdef USE_LOCALE
+                 result = makeA_Expr(AND, NULL,
+                         makeA_Expr(OP, "~~", lexpr, rexpr),
+                         makeA_Expr(OP, ">=", lexpr, (Node *)least));
+ #else
                  result = makeA_Expr(AND, NULL,
                          makeA_Expr(OP, "~~", lexpr, rexpr),
                          makeA_Expr(AND, NULL,
                              makeA_Expr(OP, ">=", lexpr, (Node *)least),
                              makeA_Expr(OP, "<=", lexpr, (Node *)most)));
+ #endif
              }
          }
      }







Re: [HACKERS] New patch (was: tough bug)

From
Oleg Broytmann
Date:
Hi!

On Mon, 1 Feb 1999, Goran Thyni wrote:
> Attach a patch which removes the "<=" test in USE_LOCALE,
> might make some queries a bit slower for us "locale-heads",
> BUT correct result is more important.
  I've applied your patch and tested on Debian 2.0, Postgres 6.4.2.
Applied cleanly, compiled. Test for koi8 locale passed well.

Oleg.
----    Oleg Broytmann  National Research Surgery Centre  http://sun.med.ru/~phd/          Programmers don't die, they
justGOSUB without RETURN.
 



Re: New patch (was: tough bug)

From
Bruce Momjian
Date:
Applied.


[Charset iso-8859-1 unsupported, filtering to ASCII...]
> 
> OK I found it,
> I search in the planner for the '\xFF' appending.
> Finally I found in MakeIndexable() in gram.y
> 
> Attach a patch which removes the "<=" test in USE_LOCALE,
> might make some queries a bit slower for us "locale-heads",
> BUT correct result is more important.
> 
>     regards,
> -- 
> -----------------
> G_ran Thyni
> This is Penguin Country. On a quiet night you can hear Windows NT
> reboot!

> diff -c pgsql/src/backend/parser/gram.y.orig pgsql/src/backend/parser/gram.y
> *** pgsql/src/backend/parser/gram.y.orig    Tue Jan 26 07:02:32 1999
> --- pgsql/src/backend/parser/gram.y    Mon Feb  1 21:16:56 1999
> ***************
> *** 5249,5259 ****
> --- 5249,5265 ----
>                   least->val.val.str = match_least;
>                   most->val.type = T_String;
>                   most->val.val.str = match_most;
> + #ifdef USE_LOCALE
> +                 result = makeA_Expr(AND, NULL,
> +                         makeA_Expr(OP, "~", lexpr, rexpr),
> +                         makeA_Expr(OP, ">=", lexpr, (Node *)least));
> + #else
>                   result = makeA_Expr(AND, NULL,
>                           makeA_Expr(OP, "~", lexpr, rexpr),
>                           makeA_Expr(AND, NULL,
>                               makeA_Expr(OP, ">=", lexpr, (Node *)least),
>                               makeA_Expr(OP, "<=", lexpr, (Node *)most)));
> + #endif
>               }
>           }
>       }
> ***************
> *** 5296,5306 ****
> --- 5302,5318 ----
>                   least->val.val.str = match_least;
>                   most->val.type = T_String;
>                   most->val.val.str = match_most;
> + #ifdef USE_LOCALE
> +                 result = makeA_Expr(AND, NULL,
> +                         makeA_Expr(OP, "~~", lexpr, rexpr),
> +                         makeA_Expr(OP, ">=", lexpr, (Node *)least));
> + #else
>                   result = makeA_Expr(AND, NULL,
>                           makeA_Expr(OP, "~~", lexpr, rexpr),
>                           makeA_Expr(AND, NULL,
>                               makeA_Expr(OP, ">=", lexpr, (Node *)least),
>                               makeA_Expr(OP, "<=", lexpr, (Node *)most)));
> + #endif
>               }
>           }
>       }
> 
> 
> 
> 
> 
> 


--  Bruce Momjian                        |  http://www.op.net/~candle maillist@candle.pha.pa.us            |  (610)
853-3000+  If your life is a hard drive,     |  830 Blythe Avenue +  Christ can be your backup.        |  Drexel Hill,
Pennsylvania19026