Обсуждение: Re: A mb problem in PostgreSQL
Chih-Chang,
> Do you remember the mb problem about Big5?
Sure.
> Now I have tested all Big5 chars (with ETen extension -- some chars in
> CNS 11643-1992 Plane 3) by the program in the attachment on
> PostgreSQL 7.0.3 with patches from you show me.
> The execution result is also in the attachment.
> The first two insertion fails are normal, because these two chars are
> duplicated in Big5.
> But the 3rd Big5 char (0xF9DC <- > CNS Plane3 0x4B5C) insertion
> is failed. I have no idea about why it is a "Unterminated quoted
> string".
> Could you see where the problem is?
Thanks for the testing effort!
Please apply following one-line-patch and test it again. If it's ok, I
will commit it to both current and stable trees.
--
Tatsuo Ishii
*** postgresql-7.0.3/src/backend/utils/mb/big5.c~ Thu May 27 00:19:54 1999
--- postgresql-7.0.3/src/backend/utils/mb/big5.c Thu Dec 7 13:39:01 2000
***************
*** 322,328 **** if (b2c3[i][0] == big5) { *lc = LC_CNS11643_3;
! return (b2c3[i][1]); } }
--- 322,328 ---- if (b2c3[i][0] == big5) { *lc = LC_CNS11643_3;
! return (b2c3[i][1] | 0x8080U); } }
Tatsuo, Tatsuo Ishii 寫道: > Please apply following one-line-patch and test it again. If it's ok, I > will commit it to both current and stable trees. > > ! return (b2c3[i][1] | 0x8080U); Yes, it's OK. Thank you! But I wonder why we need to "| 0x8080U"? b2c3[][] and BIG5toCNS()'s return value are both unsigned short, aren't they? -- Chih-Chang Hsieh
> > Please apply following one-line-patch and test it again. If it's ok, I > > will commit it to both current and stable trees. > > > > ! return (b2c3[i][1] | 0x8080U); > > Yes, it's OK. Thank you! > But I wonder why we need to "| 0x8080U"? > b2c3[][] and BIG5toCNS()'s return value are both unsigned short, aren't they? b2c3 has CNS 11643-1992 value. That is, we need to add 0x8080 to convert to EUC_TW. -- Tatsuo Ishii
> > Please apply following one-line-patch and test it again. If it's ok, I > > will commit it to both current and stable trees. > > > > ! return (b2c3[i][1] | 0x8080U); > > Yes, it's OK. Thank you! Thanks for the testings. I will commit soon. > But I wonder why we need to "| 0x8080U"? > b2c3[][] and BIG5toCNS()'s return value are both unsigned short, aren't they? Since the function returns EUC_TW. In b2c3[] we have CNS 11643-1992 value, and we need to add 0x8080 to convert from CNS 11643-1992 to EUC. -- Tatsuo Ishii