New patch (was: tough bug)
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!
Attachments:
pg.difftext/plain; charset=us-ascii; name=pg.diffDownload
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
}
}
}
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 just GOSUB without RETURN.
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.yAttach 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, Pennsylvania 19026