Re: [HACKERS] Patch for BUG #6480, psql incorrect indent for inherited tables names with UTF-8 NLS

2012-02-25 Thread Sergey Burladyan
Alvaro Herrera alvhe...@commandprompt.com writes:

 I'm sorry, but the releases are already tagged :-(  So they will contain
 the buggy output for a while yet.

Ah, I see, ok, wait next! :)

-- 
Sergey Burladyan

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


[HACKERS] Patch for BUG #6480, psql incorrect indent for inherited tables names with UTF-8 NLS

2012-02-24 Thread Sergey Burladyan

See http://archives.postgresql.org/pgsql-bugs/2012-02/msg00164.php

This need function for count characters, not bytes. I find this pg_wcswidth but
it is not used anywhere and broken. So, I fix it and also change it prototype
for remove type casting.

PS: Please help, next week release will be with Russian translation again 
(thank you,
Alexander!) and this tiny bug is slightly annoying.

From aaa828e05691ca58067d74cea43dabe8863ccdf7 Mon Sep 17 00:00:00 2001
From: Sergey Burladyan eshkin...@gmail.com
Date: Thu, 23 Feb 2012 04:09:10 +0400
Subject: [PATCH] Fix NLS text width and pg_wcswidth function

---
 src/bin/psql/describe.c |4 ++--
 src/bin/psql/mbprint.c  |7 ---
 src/bin/psql/mbprint.h  |2 +-
 3 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
index b2c54b5..2b63df4 100644
*** a/src/bin/psql/describe.c
--- b/src/bin/psql/describe.c
*** describeOneTableDetails(const char *sche
*** 2068,2074 
  			if (i == 0)
  printfPQExpBuffer(buf, %s: %s, s, PQgetvalue(result, i, 0));
  			else
! printfPQExpBuffer(buf, %*s  %s, (int) strlen(s), , PQgetvalue(result, i, 0));
  			if (i  tuples - 1)
  appendPQExpBuffer(buf, ,);
  
--- 2068,2074 
  			if (i == 0)
  printfPQExpBuffer(buf, %s: %s, s, PQgetvalue(result, i, 0));
  			else
! printfPQExpBuffer(buf, %*s  %s, pg_wcswidth(s, strlen(s), pset.encoding), , PQgetvalue(result, i, 0));
  			if (i  tuples - 1)
  appendPQExpBuffer(buf, ,);
  
*** describeOneTableDetails(const char *sche
*** 2109,2115 
  	  ct, PQgetvalue(result, i, 0));
  else
  	printfPQExpBuffer(buf, %*s  %s,
! 	  (int) strlen(ct), ,
  	  PQgetvalue(result, i, 0));
  if (i  tuples - 1)
  	appendPQExpBuffer(buf, ,);
--- 2109,2115 
  	  ct, PQgetvalue(result, i, 0));
  else
  	printfPQExpBuffer(buf, %*s  %s,
! 	  pg_wcswidth(ct, strlen(ct), pset.encoding), ,
  	  PQgetvalue(result, i, 0));
  if (i  tuples - 1)
  	appendPQExpBuffer(buf, ,);
diff --git a/src/bin/psql/mbprint.c b/src/bin/psql/mbprint.c
index 248a4db..477e35d 100644
*** a/src/bin/psql/mbprint.c
--- b/src/bin/psql/mbprint.c
*** mb_utf_validate(unsigned char *pwcs)
*** 173,179 
   * only appear on one line. OTOH it is easier to use if this applies to you.
   */
  int
! pg_wcswidth(const unsigned char *pwcs, size_t len, int encoding)
  {
  	int			width = 0;
  
--- 173,179 
   * only appear on one line. OTOH it is easier to use if this applies to you.
   */
  int
! pg_wcswidth(const char *pwcs, size_t len, int encoding)
  {
  	int			width = 0;
  
*** pg_wcswidth(const unsigned char *pwcs, s
*** 182,196 
  		int			chlen,
  	chwidth;
  
! 		chlen = PQmblen((const char *) pwcs, encoding);
  		if (chlen  len)
  			break;/* Invalid string */
  
! 		chwidth = PQdsplen((const char *) pwcs, encoding);
  
  		if (chwidth  0)
  			width += chwidth;
  		pwcs += chlen;
  	}
  	return width;
  }
--- 182,197 
  		int			chlen,
  	chwidth;
  
! 		chlen = PQmblen(pwcs, encoding);
  		if (chlen  len)
  			break;/* Invalid string */
  
! 		chwidth = PQdsplen(pwcs, encoding);
  
  		if (chwidth  0)
  			width += chwidth;
  		pwcs += chlen;
+ 		len -= chlen;
  	}
  	return width;
  }
diff --git a/src/bin/psql/mbprint.h b/src/bin/psql/mbprint.h
index f729ef0..5c13d97 100644
*** a/src/bin/psql/mbprint.h
--- b/src/bin/psql/mbprint.h
*** struct lineptr
*** 10,16 
  };
  
  extern unsigned char *mbvalidate(unsigned char *pwcs, int encoding);
! extern int	pg_wcswidth(const unsigned char *pwcs, size_t len, int encoding);
  extern void pg_wcsformat(unsigned char *pwcs, size_t len, int encoding, struct lineptr * lines, int count);
  extern void pg_wcssize(unsigned char *pwcs, size_t len, int encoding,
  		   int *width, int *height, int *format_size);
--- 10,16 
  };
  
  extern unsigned char *mbvalidate(unsigned char *pwcs, int encoding);
! extern int	pg_wcswidth(const char *pwcs, size_t len, int encoding);
  extern void pg_wcsformat(unsigned char *pwcs, size_t len, int encoding, struct lineptr * lines, int count);
  extern void pg_wcssize(unsigned char *pwcs, size_t len, int encoding,
  		   int *width, int *height, int *format_size);
-- 
1.7.9


-- 
Sergey Burladyan

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Patch for BUG #6480, psql incorrect indent for inherited tables names with UTF-8 NLS

2012-02-24 Thread Alvaro Herrera

Excerpts from Sergey Burladyan's message of vie feb 24 19:43:10 -0300 2012:
 
 See http://archives.postgresql.org/pgsql-bugs/2012-02/msg00164.php
 
 This need function for count characters, not bytes. I find this pg_wcswidth 
 but
 it is not used anywhere and broken. So, I fix it and also change it prototype
 for remove type casting.
 
 PS: Please help, next week release will be with Russian translation again 
 (thank you,
 Alexander!) and this tiny bug is slightly annoying.

I'm sorry, but the releases are already tagged :-(  So they will contain
the buggy output for a while yet.

-- 
Álvaro Herrera alvhe...@commandprompt.com
The PostgreSQL Company - Command Prompt, Inc.
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers