Re: patch (for 9.1) string functions

Itagaki Takahiro <itagaki.takahiro@gmail.com>

From: Itagaki Takahiro <itagaki.takahiro@gmail.com>
To: Pavel Stehule <pavel.stehule@gmail.com>
Cc: Takahiro Itagaki <itagaki.takahiro@oss.ntt.co.jp>, Merlin Moncure <mmoncure@gmail.com>, PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2010-07-12T02:30:40Z
Lists: pgsql-hackers
2010/7/9 Pavel Stehule <pavel.stehule@gmail.com>:
> I am sending a actualised patch
> * removed concat_json
> * renamed function rvsr to reverse
> * functions format, sprintf and concat* are stable now (as to_char for example)

I'd like to move all proposed functions into the core, and not to add
contrib/stringfunc.
I think those functions are very useful and worth adding in core.
* concat(), concat_ws(), reverse(), left() and right() are ready to commit.
* format() is almost ready, except consensus of NULL representation.
* sprintf() is also useful, but we cannot use swprintf() in it because
  there are many problems in converting to wide chars. We should
  develop mbchar-aware version of %s formatter.
* IMHO, concat_sql() has very limited use cases. Boolean  and numeric
  values are not quoted, but still need product-specific conversions because
  some DBs prefer 1/0 instead of true/false.
  Also, dblink_build_sql_insert() provides similar functionality. Will
we have both?


> it worked on my station :( - Fedora 64bit
Still failed :-(  I used UTF8 database with *locale=C* on 64bit Linux.
char2wchar() doesn't seem to work on C locale. We should avoid
using the function and converting mb chars to wide chars.

  select sprintf('>>>%10s %10d<<<', 'hello', 10);
! server closed the connection unexpectedly
TRAP: FailedAssertion("!(!lc_ctype_is_c())", File: "mbutils.c", Line: 715)

#0  0x00000038c0c332f5 in raise () from /lib64/libc.so.6
#1  0x00000038c0c34b20 in abort () from /lib64/libc.so.6
#2  0x00000000006e951d in ExceptionalCondition (conditionName=<value
optimized out>, errorType=<value optimized out>, fileName=<value
optimized out>,
    lineNumber=<value optimized out>) at assert.c:57
#3  0x00000000006fa8bf in char2wchar (to=0x1daf188 L"", tolen=16,
from=0x1da95b0 "%*s", fromlen=3) at mbutils.c:715
#4  0x00007f8e8c436d37 in stringfunc_sprintf (fcinfo=0x7fff9bdcd4b0)
at stringfunc.c:463

-- 
Itagaki Takahiro