Re: [HACKERS] proposal (9.5) : psql unicode border line styles

2014-09-22 Thread Stephen Frost
Pavel,

* Pavel Stehule (pavel.steh...@gmail.com) wrote:
 true, sorry, I have a different wording in first design
 
 fixed

Pushed, thanks!

Stephen


signature.asc
Description: Digital signature


Re: [HACKERS] proposal (9.5) : psql unicode border line styles

2014-09-18 Thread Pavel Stehule
Hi Stephen

I forgot to fix new enhanced pset help

fix attached

Regards

Pavel



2014-09-12 18:15 GMT+02:00 Pavel Stehule pavel.steh...@gmail.com:



 2014-09-12 18:09 GMT+02:00 Stephen Frost sfr...@snowman.net:

 * Stephen Frost (sfr...@snowman.net) wrote:
  * Pavel Stehule (pavel.steh...@gmail.com) wrote:
   I though about it, and we cannot to drop it now. These symbols are
   necessary, because we don't support line between rows.
  
   I am thinking so 05 patch should be final
 
  Ok.  I'm going to play with it a bit more but barring issues, should get
  it committed today.

 Alright, pushed with some additional cleanup, and also cleaned up the
 border documentation a bit.


 Thank you very much

 Regards

 Pavel



 Thanks!

 Stephen



commit aec4a03babdbed49d80253112b0d31108761e860
Author: Pavel Stehule pavel.steh...@gooddata.com
Date:   Thu Sep 18 12:45:27 2014 +0200

initial

diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c
index 6035a77..d323a14 100644
--- a/src/bin/psql/help.c
+++ b/src/bin/psql/help.c
@@ -305,7 +305,7 @@ helpVariables(unsigned short int pager)
 {
 	FILE	   *output;
 
-	output = PageOutput(81, pager);
+	output = PageOutput(87, pager);
 
 	fprintf(output, _(List of specially treated variables.\n));
 
@@ -364,6 +364,10 @@ helpVariables(unsigned short int pager)
 	  column width of left aligned data type in latex format\n));
 	fprintf(output, _(  title  set the table title for any subsequently printed tables\n));
 	fprintf(output, _(  tuples_onlyif set, only actual table data is shown\n));
+	fprintf(output, _(  unicode_border_linestyle\n));
+	fprintf(output, _(  unicode_column_linestyle\n));
+	fprintf(output, _(  unicode_header_linestyle\n
+	  set the style of unicode line drawing [single, double]\n));
 
 	fprintf(output, _(\nEnvironment variables:\n));
 	fprintf(output, _(Usage:\n));

-- 
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] proposal (9.5) : psql unicode border line styles

2014-09-18 Thread Andres Freund
On 2014-09-18 12:47:25 +0200, Pavel Stehule wrote:
 - output = PageOutput(81, pager);
 + output = PageOutput(87, pager);
  
   fprintf(output, _(List of specially treated variables.\n));
  
 @@ -364,6 +364,10 @@ helpVariables(unsigned short int pager)
 column width of 
 left aligned data type in latex format\n));
   fprintf(output, _(  title  set the table title for any 
 subsequently printed tables\n));
   fprintf(output, _(  tuples_onlyif set, only actual table data 
 is shown\n));
 + fprintf(output, _(  unicode_border_linestyle\n));
 + fprintf(output, _(  unicode_column_linestyle\n));
 + fprintf(output, _(  unicode_header_linestyle\n
 +   set the style of 
 unicode line drawing [single, double]\n));
  
   fprintf(output, _(\nEnvironment variables:\n));
   fprintf(output, _(Usage:\n));

Either the current line count is wrong, or you added the wrong number of
new lines to PageOutput(). Your patch only adds four \n, while you
increased from 81 to 87.

Greetings,

Andres Freund

-- 
 Andres Freund http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training  Services


-- 
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] proposal (9.5) : psql unicode border line styles

2014-09-18 Thread Pavel Stehule
2014-09-18 12:51 GMT+02:00 Andres Freund and...@2ndquadrant.com:

 On 2014-09-18 12:47:25 +0200, Pavel Stehule wrote:
  - output = PageOutput(81, pager);
  + output = PageOutput(87, pager);
 
fprintf(output, _(List of specially treated variables.\n));
 
  @@ -364,6 +364,10 @@ helpVariables(unsigned short int pager)
  column
 width of left aligned data type in latex format\n));
fprintf(output, _(  title  set the table title for
 any subsequently printed tables\n));
fprintf(output, _(  tuples_onlyif set, only actual table
 data is shown\n));
  + fprintf(output, _(  unicode_border_linestyle\n));
  + fprintf(output, _(  unicode_column_linestyle\n));
  + fprintf(output, _(  unicode_header_linestyle\n
  +   set the
 style of unicode line drawing [single, double]\n));
 
fprintf(output, _(\nEnvironment variables:\n));
fprintf(output, _(Usage:\n));

 Either the current line count is wrong, or you added the wrong number of
 new lines to PageOutput(). Your patch only adds four \n, while you
 increased from 81 to 87.


true, sorry, I have a different wording in first design

fixed

Regards

Pavel



 Greetings,

 Andres Freund

 --
  Andres Freund http://www.2ndQuadrant.com/
  PostgreSQL Development, 24x7 Support, Training  Services

commit aec4a03babdbed49d80253112b0d31108761e860
Author: Pavel Stehule pavel.steh...@gooddata.com
Date:   Thu Sep 18 12:45:27 2014 +0200

initial

diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c
index 6035a77..d323a14 100644
--- a/src/bin/psql/help.c
+++ b/src/bin/psql/help.c
@@ -305,7 +305,7 @@ helpVariables(unsigned short int pager)
 {
 	FILE	   *output;
 
-	output = PageOutput(81, pager);
+	output = PageOutput(85, pager);
 
 	fprintf(output, _(List of specially treated variables.\n));
 
@@ -364,6 +364,10 @@ helpVariables(unsigned short int pager)
 	  column width of left aligned data type in latex format\n));
 	fprintf(output, _(  title  set the table title for any subsequently printed tables\n));
 	fprintf(output, _(  tuples_onlyif set, only actual table data is shown\n));
+	fprintf(output, _(  unicode_border_linestyle\n));
+	fprintf(output, _(  unicode_column_linestyle\n));
+	fprintf(output, _(  unicode_header_linestyle\n
+	  set the style of unicode line drawing [single, double]\n));
 
 	fprintf(output, _(\nEnvironment variables:\n));
 	fprintf(output, _(Usage:\n));

-- 
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] proposal (9.5) : psql unicode border line styles

2014-09-12 Thread Pavel Stehule
2014-09-12 5:14 GMT+02:00 Stephen Frost sfr...@snowman.net:

 Pavel,

 * Pavel Stehule (pavel.steh...@gmail.com) wrote:
  Any idea, tip how to it?

 Attached is what I had been thinking.

 Thoughts?


yes, it is better. I didn't understand before.

I though about it because it allows to design multiline end style in future.

I am not a fan of ↵ and … in resulted tables, and can be nice if I can
to optionally change it.

With your change we can design other pure style against current rich
style. But I don't have a idea, how to name it.

Regards

Pavel



 Thanks!

 Stephen



Re: [HACKERS] proposal (9.5) : psql unicode border line styles

2014-09-12 Thread Pavel Stehule
2014-09-12 8:19 GMT+02:00 Pavel Stehule pavel.steh...@gmail.com:



 2014-09-12 5:14 GMT+02:00 Stephen Frost sfr...@snowman.net:

 Pavel,

 * Pavel Stehule (pavel.steh...@gmail.com) wrote:
  Any idea, tip how to it?

 Attached is what I had been thinking.

 Thoughts?


 yes, it is better. I didn't understand before.

 I though about it because it allows to design multiline end style in
 future.

 I am not a fan of ↵ and … in resulted tables, and can be nice if I can
 to optionally change it.


I though about it, and we cannot to drop it now. These symbols are
necessary, because we don't support line between rows.

I am thinking so 05 patch should be final

Regards

Pavel



 With your change we can design other pure style against current rich
 style. But I don't have a idea, how to name it.

 Regards

 Pavel



 Thanks!

 Stephen





Re: [HACKERS] proposal (9.5) : psql unicode border line styles

2014-09-12 Thread Stephen Frost
* Pavel Stehule (pavel.steh...@gmail.com) wrote:
 I though about it, and we cannot to drop it now. These symbols are
 necessary, because we don't support line between rows.
 
 I am thinking so 05 patch should be final

Ok.  I'm going to play with it a bit more but barring issues, should get
it committed today.

Thanks!

Stephen


signature.asc
Description: Digital signature


Re: [HACKERS] proposal (9.5) : psql unicode border line styles

2014-09-12 Thread Stephen Frost
* Stephen Frost (sfr...@snowman.net) wrote:
 * Pavel Stehule (pavel.steh...@gmail.com) wrote:
  I though about it, and we cannot to drop it now. These symbols are
  necessary, because we don't support line between rows.
  
  I am thinking so 05 patch should be final
 
 Ok.  I'm going to play with it a bit more but barring issues, should get
 it committed today.

Alright, pushed with some additional cleanup, and also cleaned up the
border documentation a bit.

Thanks!

Stephen


signature.asc
Description: Digital signature


Re: [HACKERS] proposal (9.5) : psql unicode border line styles

2014-09-12 Thread Pavel Stehule
2014-09-12 18:09 GMT+02:00 Stephen Frost sfr...@snowman.net:

 * Stephen Frost (sfr...@snowman.net) wrote:
  * Pavel Stehule (pavel.steh...@gmail.com) wrote:
   I though about it, and we cannot to drop it now. These symbols are
   necessary, because we don't support line between rows.
  
   I am thinking so 05 patch should be final
 
  Ok.  I'm going to play with it a bit more but barring issues, should get
  it committed today.

 Alright, pushed with some additional cleanup, and also cleaned up the
 border documentation a bit.


Thank you very much

Regards

Pavel



 Thanks!

 Stephen



Re: [HACKERS] proposal (9.5) : psql unicode border line styles

2014-09-11 Thread Stephen Frost
Pavel,

* Pavel Stehule (pavel.steh...@gmail.com) wrote:
 I removed dynamic allocation  and reduced patch size.

This is certainly better, imv, though there are a couple of minor
issues (extra semi-colons, extraneous whitespace, get_line_style was
still changed to non-const, even though it doesn't need to be now).

 What I tested a old unicode style is same as new unicode style. There
 nothing was changed .. some fields are specified in refresh_utf8format
 function

I don't particularly like this (having these fields set in
refresh_utf8format to hard-coded strings in the function), why not have
those handled the same as the rest, where the strings themselves are in
the unicode_style structure?

The rest looks pretty good.  Need to step out for a bit but I'll look at
making the above changes when I get back if I don't hear anything.

Thanks,

Stephen


signature.asc
Description: Digital signature


Re: [HACKERS] proposal (9.5) : psql unicode border line styles

2014-09-11 Thread Pavel Stehule
Hi

2014-09-11 16:42 GMT+02:00 Stephen Frost sfr...@snowman.net:

 Pavel,

 * Pavel Stehule (pavel.steh...@gmail.com) wrote:
  I removed dynamic allocation  and reduced patch size.

 This is certainly better, imv, though there are a couple of minor
 issues (extra semi-colons, extraneous whitespace, get_line_style was
 still changed to non-const, even though it doesn't need to be now).


fixed non-const -- other, I am sorry, I am blind



  What I tested a old unicode style is same as new unicode style. There
  nothing was changed .. some fields are specified in refresh_utf8format
  function

 I don't particularly like this (having these fields set in
 refresh_utf8format to hard-coded strings in the function), why not have
 those handled the same as the rest, where the strings themselves are in
 the unicode_style structure?


I am not sure if I understand well.

With refresh_utf8format I can do shortly 6 possible combinations - or more
(when it will be requested)

I have no idea how to write as rest without repeating all 6 combinations -
what was one noticed issue of some older variant, where I designed
unicode1, unicode2, ...

Any idea, tip how to it?

Regards

Pavel




 The rest looks pretty good.  Need to step out for a bit but I'll look at
 making the above changes when I get back if I don't hear anything.

 Thanks,

 Stephen

diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
new file mode 100644
index aa71674..1d59dce
*** a/doc/src/sgml/ref/psql-ref.sgml
--- b/doc/src/sgml/ref/psql-ref.sgml
*** lo_import 152801
*** 2306,2311 
--- 2306,2347 
/para
/listitem
/varlistentry
+ 
+   varlistentry
+   termliteralunicode_border_style/literal/term
+   listitem
+   para
+   Sets the border line drawing style to one
+   of literalsingle/literal or  literaldouble/literal
+   This option only affects the literalunicode/
+   linestyle
+   /para
+   /listitem
+   /varlistentry
+ 
+   varlistentry
+   termliteralunicode_column_style/literal/term
+   listitem
+   para
+   Sets the column line drawing style to one
+   of literalsingle/literal or  literaldouble/literal
+   This option only affects the literalunicode/
+   linestyle
+   /para
+   /listitem
+   /varlistentry
+ 
+   varlistentry
+   termliteralunicode_header_style/literal/term
+   listitem
+   para
+   Sets the header line drawing style to one
+   of literalsingle/literal or  literaldouble/literal
+   This option only affects the literalunicode/
+   linestyle
+   /para
+   /listitem
+   /varlistentry
  /variablelist
  /para
  
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
new file mode 100644
index 5d90ca2..94d8f45
*** a/src/bin/psql/command.c
--- b/src/bin/psql/command.c
*** exec_command(const char *cmd,
*** 1054,1059 
--- 1054,1062 
  footer, format, linestyle, null,
  numericlocale, pager, recordsep,
  tableattr, title, tuples_only,
+ unicode_border_linestyle,
+ unicode_column_linestyle,
+ unicode_header_linestyle,
  NULL
  			};
  
*** _align2string(enum printFormat in)
*** 2248,2253 
--- 2251,2290 
  	return unknown;
  }
  
+ /*
+  * Parse entered unicode linestyle. Returns true, when entered string is
+  * known linestyle: single, double else returns false.
+  */
+ static bool 
+ set_unicode_line_style(printQueryOpt *popt, const char *value, size_t vallen, unicode_linestyle *linestyle)
+ {
+ 	if (pg_strncasecmp(single, value, vallen) == 0)
+ 		*linestyle = UNICODE_LINESTYLE_SINGLE;
+ 	else if (pg_strncasecmp(double, value, vallen) == 0)
+ 		*linestyle = UNICODE_LINESTYLE_DOUBLE;
+ 	else
+ 		return false;
+ 
+ 	/* input is ok, generate new unicode style */
+ 	refresh_utf8format((popt-topt));
+ 
+ 	return true;
+ }
+ 
+ static const char *
+ _unicode_linestyle2string(int linestyle)
+ {
+ 	switch (linestyle)
+ 	{
+ 		case UNICODE_LINESTYLE_SINGLE:
+ 			return single;
+ 			break;
+ 		case UNICODE_LINESTYLE_DOUBLE:
+ 			return double;
+ 			break;
+ 	}
+ 	return unknown;
+ }
  
  bool
  do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet)
*** do_pset(const char *param, const char *v
*** 2305,2310 
--- 2342,2383 
  
  	}
  
+ 	/* set unicode border line style */
+ 	else if (strcmp(param, unicode_border_linestyle) == 0)
+ 	{
+ 		if (!value)
+ 			;
+ 		else if (!set_unicode_line_style(popt, value, vallen, popt-topt.unicode_border_linestyle))
+ 		{
+ 			psql_error(\\pset: allowed unicode border linestyle are single, double\n);
+ 			return false;
+ 		}
+ 	}
+ 
+ 	/* set unicode column line style */
+ 	else if (strcmp(param, unicode_column_linestyle) == 0)

Re: [HACKERS] proposal (9.5) : psql unicode border line styles

2014-09-11 Thread Stephen Frost
* Pavel Stehule (pavel.steh...@gmail.com) wrote:
 2014-09-11 16:42 GMT+02:00 Stephen Frost sfr...@snowman.net:
  I don't particularly like this (having these fields set in
  refresh_utf8format to hard-coded strings in the function), why not have
  those handled the same as the rest, where the strings themselves are in
  the unicode_style structure?
 
 
 I am not sure if I understand well.
 
 With refresh_utf8format I can do shortly 6 possible combinations - or more
 (when it will be requested)
 
 I have no idea how to write as rest without repeating all 6 combinations -
 what was one noticed issue of some older variant, where I designed
 unicode1, unicode2, ...
 
 Any idea, tip how to it?

All I was suggesting was pulling these strings out of the function:

+   /* ↵ */
+   popt-header_nl_right = \342\206\265;
+
+   popt-nl_left =  ;
+
+   /* ↵ */
+   popt-nl_right = \342\206\265;
+
+   /* … */
+   popt-wrap_left = \342\200\246;
+   popt-wrap_right = \342\200\246;

and adding them to unicode_style and then referencing them there,
similar to how the rest of printTextFormat popt (by the way- don't
really like that variable name, particularly as it's used elsewhere with
a very different meaning..  why not 'format' or 'ptf'?) is
set up in refresh_utf8format, that's all.

Thanks,

Stephen


signature.asc
Description: Digital signature


Re: [HACKERS] proposal (9.5) : psql unicode border line styles

2014-09-11 Thread Stephen Frost
Pavel,

* Pavel Stehule (pavel.steh...@gmail.com) wrote:
 Any idea, tip how to it?

Attached is what I had been thinking.

Thoughts?

Thanks!

Stephen
diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
index aa71674..1d59dce 100644
--- a/doc/src/sgml/ref/psql-ref.sgml
+++ b/doc/src/sgml/ref/psql-ref.sgml
@@ -2306,6 +2306,42 @@ lo_import 152801
   /para
   /listitem
   /varlistentry
+
+  varlistentry
+  termliteralunicode_border_style/literal/term
+  listitem
+  para
+  Sets the border line drawing style to one
+  of literalsingle/literal or  literaldouble/literal
+  This option only affects the literalunicode/
+  linestyle
+  /para
+  /listitem
+  /varlistentry
+
+  varlistentry
+  termliteralunicode_column_style/literal/term
+  listitem
+  para
+  Sets the column line drawing style to one
+  of literalsingle/literal or  literaldouble/literal
+  This option only affects the literalunicode/
+  linestyle
+  /para
+  /listitem
+  /varlistentry
+
+  varlistentry
+  termliteralunicode_header_style/literal/term
+  listitem
+  para
+  Sets the header line drawing style to one
+  of literalsingle/literal or  literaldouble/literal
+  This option only affects the literalunicode/
+  linestyle
+  /para
+  /listitem
+  /varlistentry
 /variablelist
 /para
 
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index 5d90ca2..d14d72a 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -1054,6 +1054,9 @@ exec_command(const char *cmd,
 footer, format, linestyle, null,
 numericlocale, pager, recordsep,
 tableattr, title, tuples_only,
+unicode_border_linestyle,
+unicode_column_linestyle,
+unicode_header_linestyle,
 NULL
 			};
 
@@ -2248,6 +2251,40 @@ _align2string(enum printFormat in)
 	return unknown;
 }
 
+/*
+ * Parse entered unicode linestyle. Returns true, when entered string is
+ * known linestyle: single, double else returns false.
+ */
+static bool
+set_unicode_line_style(printQueryOpt *popt, const char *value, size_t vallen, unicode_linestyle *linestyle)
+{
+	if (pg_strncasecmp(single, value, vallen) == 0)
+		*linestyle = UNICODE_LINESTYLE_SINGLE;
+	else if (pg_strncasecmp(double, value, vallen) == 0)
+		*linestyle = UNICODE_LINESTYLE_DOUBLE;
+	else
+		return false;
+
+	/* input is ok, generate new unicode style */
+	refresh_utf8format((popt-topt));
+
+	return true;
+}
+
+static const char *
+_unicode_linestyle2string(int linestyle)
+{
+	switch (linestyle)
+	{
+		case UNICODE_LINESTYLE_SINGLE:
+			return single;
+			break;
+		case UNICODE_LINESTYLE_DOUBLE:
+			return double;
+			break;
+	}
+	return unknown;
+}
 
 bool
 do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet)
@@ -2305,6 +2342,42 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet)
 
 	}
 
+	/* set unicode border line style */
+	else if (strcmp(param, unicode_border_linestyle) == 0)
+	{
+		if (!value)
+			;
+		else if (!set_unicode_line_style(popt, value, vallen, popt-topt.unicode_border_linestyle))
+		{
+			psql_error(\\pset: allowed unicode border linestyle are single, double\n);
+			return false;
+		}
+	}
+
+	/* set unicode column line style */
+	else if (strcmp(param, unicode_column_linestyle) == 0)
+	{
+		if (!value)
+			;
+		else if (!set_unicode_line_style(popt, value, vallen, popt-topt.unicode_column_linestyle))
+		{
+			psql_error(\\pset: allowed unicode column linestyle are single, double\n);
+			return false;
+		}
+	}
+
+	/* set unicode header line style */
+	else if (strcmp(param, unicode_header_linestyle) == 0)
+	{
+		if (!value)
+			;
+		else if (!set_unicode_line_style(popt, value, vallen, popt-topt.unicode_header_linestyle))
+		{
+			psql_error(\\pset: allowed unicode header linestyle are single, double\n);
+			return false;
+		}
+	}
+
 	/* set border style/width */
 	else if (strcmp(param, border) == 0)
 	{
@@ -2601,6 +2674,25 @@ printPsetInfo(const char *param, struct printQueryOpt *popt)
 			printf(_(Tuples only (%s) is off.\n), param);
 	}
 
+	/* unicode style formatting */
+	else if (strcmp(param, unicode_border_linestyle) == 0)
+	{
+		printf(_(Unicode border linestyle is \%s\.\n),
+_unicode_linestyle2string(popt-topt.unicode_border_linestyle));
+	}
+
+	else if (strcmp(param, unicode_column_linestyle) == 0)
+	{
+		printf(_(Unicode column linestyle is \%s\.\n),
+_unicode_linestyle2string(popt-topt.unicode_column_linestyle));
+	}
+
+	else if (strcmp(param, unicode_header_linestyle) == 0)
+	{
+		printf(_(Unicode border linestyle is \%s\.\n),
+_unicode_linestyle2string(popt-topt.unicode_header_linestyle));
+	}
+
 	else
 	{
 		psql_error(\\pset: unknown option: %s\n, param);

Re: [HACKERS] proposal (9.5) : psql unicode border line styles

2014-09-08 Thread Pavel Stehule
Hi

I removed dynamic allocation  and reduced patch size.

What I tested a old unicode style is same as new unicode style. There
nothing was changed .. some fields are specified in refresh_utf8format
function

Regards

Pavel




2014-09-08 4:44 GMT+02:00 Stephen Frost sfr...@snowman.net:

 Pavel,

 * Pavel Stehule (pavel.steh...@gmail.com) wrote:
  2014-07-23 8:38 GMT+02:00 Tomas Vondra t...@fuzzy.cz:
   OK, thanks. The new version seems OK to me.
 
  Thank you

 I've started looking over the patch and went back through the previous
 thread about it.  For my part, I'm in favor of adding this capability,
 but I'm not terribly happy about how it was done.  In particular,
 get_line_style() seems pretty badly hacked around, and I don't really
 like having the prepare_unicode_format call underneath it allocating
 memory and then passing back up the need to free that memory via a new
 field in the structure.  Also, on a quick glance, are you sure that the
 new 'unicode' output matches the same as the old 'unicode' did (with
 pg_utf8format)?

 I would think we'd simply set up a structure which is updated when the
 linestyle is changed, which is surely going to be much less frequently
 than the request for which linestyle to use happens, and handle all of
 the line styles in more-or-less the same way rather than doing something
 completely different for unicode than for the others.

 Thanks,

 Stephen

commit 509f8a92525889651653a75356d3fa57b58f3141
Author: Pavel Stehule pavel.steh...@gooddata.com
Date:   Mon Sep 8 17:18:43 2014 +0200

remove palloc

diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
index db314c3..84233d0 100644
--- a/doc/src/sgml/ref/psql-ref.sgml
+++ b/doc/src/sgml/ref/psql-ref.sgml
@@ -2299,6 +2299,42 @@ lo_import 152801
   /para
   /listitem
   /varlistentry
+
+  varlistentry
+  termliteralunicode_border_style/literal/term
+  listitem
+  para
+  Sets the border line drawing style to one
+  of literalsingle/literal or  literaldouble/literal
+  This option only affects the literalunicode/
+  linestyle
+  /para
+  /listitem
+  /varlistentry
+
+  varlistentry
+  termliteralunicode_column_style/literal/term
+  listitem
+  para
+  Sets the column line drawing style to one
+  of literalsingle/literal or  literaldouble/literal
+  This option only affects the literalunicode/
+  linestyle
+  /para
+  /listitem
+  /varlistentry
+
+  varlistentry
+  termliteralunicode_header_style/literal/term
+  listitem
+  para
+  Sets the header line drawing style to one
+  of literalsingle/literal or  literaldouble/literal
+  This option only affects the literalunicode/
+  linestyle
+  /para
+  /listitem
+  /varlistentry
 /variablelist
 /para
 
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index a66093a..fd05aae 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -1054,6 +1054,9 @@ exec_command(const char *cmd,
 footer, format, linestyle, null,
 numericlocale, pager, recordsep,
 tableattr, title, tuples_only,
+unicode_border_linestyle,
+unicode_column_linestyle,
+unicode_header_linestyle,
 NULL
 			};
 
@@ -2248,6 +2251,40 @@ _align2string(enum printFormat in)
 	return unknown;
 }
 
+/*
+ * Parse entered unicode linestyle. Returns true, when entered string is
+ * known linestyle: single, double else returns false.
+ */
+static bool 
+set_unicode_line_style(printQueryOpt *popt, const char *value, size_t vallen, unicode_linestyle *linestyle)
+{
+	if (pg_strncasecmp(single, value, vallen) == 0)
+		*linestyle = UNICODE_LINESTYLE_SINGLE;
+	else if (pg_strncasecmp(double, value, vallen) == 0)
+		*linestyle = UNICODE_LINESTYLE_DOUBLE;
+	else
+		return false;
+
+	/* input is ok, generate new unicode style */
+	refresh_utf8format((popt-topt));
+
+	return true;
+}
+
+static const char *
+_unicode_linestyle2string(int linestyle)
+{
+	switch (linestyle)
+	{
+		case UNICODE_LINESTYLE_SINGLE:
+			return single;
+			break;
+		case UNICODE_LINESTYLE_DOUBLE:
+			return double;
+			break;
+	}
+	return unknown;
+}
 
 bool
 do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet)
@@ -2305,6 +2342,42 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet)
 
 	}
 
+	/* set unicode border line style */
+	else if (strcmp(param, unicode_border_linestyle) == 0)
+	{
+		if (!value)
+			;
+		else if (!set_unicode_line_style(popt, value, vallen, popt-topt.unicode_border_linestyle))
+		{
+			psql_error(\\pset: allowed unicode border linestyle are single, double\n);
+			return false;
+		}
+	}
+
+	/* set unicode column line style */
+	else if (strcmp(param, unicode_column_linestyle) == 0)
+	{

Re: [HACKERS] proposal (9.5) : psql unicode border line styles

2014-09-07 Thread Stephen Frost
Pavel,

* Pavel Stehule (pavel.steh...@gmail.com) wrote:
 2014-07-23 8:38 GMT+02:00 Tomas Vondra t...@fuzzy.cz:
  OK, thanks. The new version seems OK to me.
 
 Thank you

I've started looking over the patch and went back through the previous
thread about it.  For my part, I'm in favor of adding this capability,
but I'm not terribly happy about how it was done.  In particular,
get_line_style() seems pretty badly hacked around, and I don't really
like having the prepare_unicode_format call underneath it allocating
memory and then passing back up the need to free that memory via a new
field in the structure.  Also, on a quick glance, are you sure that the
new 'unicode' output matches the same as the old 'unicode' did (with
pg_utf8format)?

I would think we'd simply set up a structure which is updated when the
linestyle is changed, which is surely going to be much less frequently
than the request for which linestyle to use happens, and handle all of
the line styles in more-or-less the same way rather than doing something
completely different for unicode than for the others.

Thanks,

Stephen


signature.asc
Description: Digital signature


Re: [HACKERS] proposal (9.5) : psql unicode border line styles

2014-07-23 Thread Tomas Vondra
On 23 Červenec 2014, 7:36, Pavel Stehule wrote:

 updated version is in attachment

OK, thanks. The new version seems OK to me.

Tomas



-- 
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] proposal (9.5) : psql unicode border line styles

2014-07-23 Thread Pavel Stehule
2014-07-23 8:38 GMT+02:00 Tomas Vondra t...@fuzzy.cz:

 On 23 Červenec 2014, 7:36, Pavel Stehule wrote:
 
  updated version is in attachment

 OK, thanks. The new version seems OK to me.


Thank you

Pavel



 Tomas




Re: [HACKERS] proposal (9.5) : psql unicode border line styles

2014-07-22 Thread Tomas Vondra
On 28.6.2014 21:29, Pavel Stehule wrote:
 Hello
 
 rebase for 9.5
 
 test:
 \pset linestyle unicode \pset border 2
 \pset unicode_header_linestyle double
 
 \l
 
 Regards
 
 Pavel

I did a quick review of the patch today:

* it applies cleanly to current HEAD (no failures, small offsets)
* compiles and generally seems to work just fine

Two questions:

(1) Shouldn't the new options be listed in '\?' (as possible names for
pset)? I mean, here:

  \pset [NAME [VALUE]] set table output option
 (NAME :=
{format|border|expanded|fieldsep|fieldsep_zero|footer|null|
numericlocale|recordsep|recordsep_zero|tuples_only|title|tableattr|pager})


(2) I noticed this piece of code:

+typedef enum unicode_linestyle
+{
+   UNICODE_LINESTYLE_SINGLE = 0, /* to make sure someone initializes this 
*/
+   UNICODE_LINESTYLE_DOUBLE = 1
+} unicode_linestyle;

Why are the values defined explicitly? These values are set by the
compiled automatically, so why set them manually? Only a few of the
other enums are defined explicitly, and most of them have to do that to
define different values (e.g. 0x01, 0x02, 0x04, ...).

I don't understand how the comment to make sure someone initializes
this explains the purpose?


regards
Tomas


-- 
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] proposal (9.5) : psql unicode border line styles

2014-07-22 Thread Pavel Stehule
Hi Tomas

2014-07-22 23:20 GMT+02:00 Tomas Vondra t...@fuzzy.cz:

 On 28.6.2014 21:29, Pavel Stehule wrote:
  Hello
 
  rebase for 9.5
 
  test:
  \pset linestyle unicode \pset border 2
  \pset unicode_header_linestyle double
 
  \l
 
  Regards
 
  Pavel

 I did a quick review of the patch today:

 * it applies cleanly to current HEAD (no failures, small offsets)
 * compiles and generally seems to work just fine

 Two questions:

 (1) Shouldn't the new options be listed in '\?' (as possible names for
 pset)? I mean, here:

   \pset [NAME [VALUE]] set table output option
  (NAME :=
 {format|border|expanded|fieldsep|fieldsep_zero|footer|null|
 numericlocale|recordsep|recordsep_zero|tuples_only|title|tableattr|pager})


fixed



 (2) I noticed this piece of code:

 +typedef enum unicode_linestyle
 +{
 +   UNICODE_LINESTYLE_SINGLE = 0, /* to make sure someone initializes
 this */
 +   UNICODE_LINESTYLE_DOUBLE = 1
 +} unicode_linestyle;

 Why are the values defined explicitly? These values are set by the
 compiled automatically, so why set them manually? Only a few of the
 other enums are defined explicitly, and most of them have to do that to
 define different values (e.g. 0x01, 0x02, 0x04, ...).


this is useless - I removed it.



 I don't understand how the comment to make sure someone initializes
 this explains the purpose?


copy/paste error :( - removed

updated version is in attachment

Regards

Pavel




 regards
 Tomas


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

commit fb99f3b1e12d7dfb203b70187e63647e5d0a674d
Author: Pavel Stehule pavel.steh...@gooddata.com
Date:   Wed Jul 23 07:30:46 2014 +0200

second version - minor changes: help, remove bogus comment and not necessary exact enum specification

diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
index fa0d6f2..fc8a503 100644
--- a/doc/src/sgml/ref/psql-ref.sgml
+++ b/doc/src/sgml/ref/psql-ref.sgml
@@ -2294,6 +2294,42 @@ lo_import 152801
   /para
   /listitem
   /varlistentry
+
+  varlistentry
+  termliteralunicode_border_style/literal/term
+  listitem
+  para
+  Sets the border line drawing style to one
+  of literalsingle/literal or  literaldouble/literal
+  This option only affects the literalunicode/
+  linestyle
+  /para
+  /listitem
+  /varlistentry
+
+  varlistentry
+  termliteralunicode_column_style/literal/term
+  listitem
+  para
+  Sets the column line drawing style to one
+  of literalsingle/literal or  literaldouble/literal
+  This option only affects the literalunicode/
+  linestyle
+  /para
+  /listitem
+  /varlistentry
+
+  varlistentry
+  termliteralunicode_header_style/literal/term
+  listitem
+  para
+  Sets the header line drawing style to one
+  of literalsingle/literal or  literaldouble/literal
+  This option only affects the literalunicode/
+  linestyle
+  /para
+  /listitem
+  /varlistentry
 /variablelist
 /para
 
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index 161de75..c0a09b1 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -1054,6 +1054,9 @@ exec_command(const char *cmd,
 footer, format, linestyle, null,
 numericlocale, pager, recordsep,
 tableattr, title, tuples_only,
+unicode_border_linestyle,
+unicode_column_linestyle,
+unicode_header_linestyle,
 NULL
 			};
 
@@ -2248,6 +2251,55 @@ _align2string(enum printFormat in)
 	return unknown;
 }
 
+/*
+ * Parse entered unicode linestyle. Returns true, when entered string is
+ * known linestyle: single, double else returns false.
+ */
+static bool 
+set_unicode_line_style(const char *value, size_t vallen, unicode_linestyle *linestyle)
+{
+	if (pg_strncasecmp(single, value, vallen) == 0)
+		*linestyle = UNICODE_LINESTYLE_SINGLE;
+	else if (pg_strncasecmp(double, value, vallen) == 0)
+		*linestyle = UNICODE_LINESTYLE_DOUBLE;
+	else
+		return false;
+
+	return true;
+}
+
+static const char *
+_unicode_linestyle2string(int linestyle)
+{
+	switch (linestyle)
+	{
+		case UNICODE_LINESTYLE_SINGLE:
+			return single;
+			break;
+		case UNICODE_LINESTYLE_DOUBLE:
+			return double;
+			break;
+	}
+	return unknown;
+}
+
+static const char *
+_linestyle2string(linestyle_type line_style)
+{
+	switch (line_style)
+	{
+		case LINESTYLE_ASCII:
+			return ascii;
+			break;
+		case LINESTYLE_OLD_ASCII:
+			return old-ascii;
+			break;
+		case LINESTYLE_UNICODE:
+			return unicode;
+			break;
+	}
+	return unknown;
+}
 
 bool
 do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet)
@@ -2292,11 +2344,11 @@ do_pset(const char 

Re: [HACKERS] proposal (9.5) : psql unicode border line styles

2014-06-28 Thread Pavel Stehule
Hello

rebase for 9.5

test:
\pset linestyle unicode \pset border 2
\pset unicode_header_linestyle double

\l

Regards

Pavel




2014-03-11 21:17 GMT+01:00 Pavel Stehule pavel.steh...@gmail.com:

 Hello

 I had to reduce allowed line style to single or double, because unicode
 allows only combination single,double or single,thick

 postgres=# \l
   List of databases
Name|  Owner   | Encoding |   Collate   |Ctype|   Access
 privileges

 ---+--+--+-+-+---
  postgres  | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
  template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
 =c/postgres  +
|  |  | | |
 postgres=CTc/postgres
  template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
 =c/postgres  +
|  |  | | |
 postgres=CTc/postgres
 (3 rows)

 postgres=# \pset border 2
 Border style (border) is 2.
 postgres=# \pset linestyle unicode
 Line style (linestyle) is unicode.
 postgres=# \l
List of databases

 ┌───┬──┬──┬─┬─┬───┐
 │   Name│  Owner   │ Encoding │   Collate   │Ctype│   Access
 privileges   │

 ├───┼──┼──┼─┼─┼───┤
 │ postgres  │ postgres │ UTF8 │ en_US.UTF-8 │ en_US.UTF-8
 │   │
 │ template0 │ postgres │ UTF8 │ en_US.UTF-8 │ en_US.UTF-8 │
 =c/postgres  ↵│
 │   │  │  │ │ │
 postgres=CTc/postgres │
 │ template1 │ postgres │ UTF8 │ en_US.UTF-8 │ en_US.UTF-8 │
 =c/postgres  ↵│
 │   │  │  │ │ │
 postgres=CTc/postgres │

 └───┴──┴──┴─┴─┴───┘
 (3 rows)

 postgres=# \pset unicode_header_linestyle double
 Unicode border linestyle is double.
 postgres=# \l
List of databases

 ┌───┬──┬──┬─┬─┬───┐
 │   Name│  Owner   │ Encoding │   Collate   │Ctype│   Access
 privileges   │

 ╞═══╪══╪══╪═╪═╪═══╡
 │ postgres  │ postgres │ UTF8 │ en_US.UTF-8 │ en_US.UTF-8
 │   │
 │ template0 │ postgres │ UTF8 │ en_US.UTF-8 │ en_US.UTF-8 │
 =c/postgres  ↵│
 │   │  │  │ │ │
 postgres=CTc/postgres │
 │ template1 │ postgres │ UTF8 │ en_US.UTF-8 │ en_US.UTF-8 │
 =c/postgres  ↵│
 │   │  │  │ │ │
 postgres=CTc/postgres │

 └───┴──┴──┴─┴─┴───┘
 (3 rows)

 postgres=#

 Regards

 Pavel



 2014-03-07 19:24 GMT+01:00 Pavel Stehule pavel.steh...@gmail.com:

 Hello

 I am returning back to this topic. Last time I proposed styles:


 http://www.postgresql.org/message-id/cafj8prclgoktryjpbtoncpgyftrcz-zgfowdc1jqulb+ede...@mail.gmail.com

 http://postgres.cz/wiki/Pretty_borders_in_psql

 This experiment fails, but there are some interesting tips in discuss.

 So I propose little bit different proposal - choose one predefined style
 for any table lines elements. These styles are active only when linestyle
 is unicode.

 So possible line elements are:

 * border,
 * header_separator,
 * row_separator,
 * column_separator,

 Possible styles (for each element)

 * none,
  * single,
 * double,
 * thick,

 It should to have enough variability to define all styles proposed early.
 I hope, so this proposal is secure and simple for usage. Styles should be
 persistently saved in .psqlrc file - and some examples can be in
 documentation.

 Usage:

 \pset linestyle_border double
 \pset linestyle_header_separator single
 \pset linestyle_row_separator single
 \pset linestyle_column_separator single

 \pset linestyle unicode

 ╔═══╤╤═══╗
 ║ a │ b  │   c   ║
 ╟───┼┼───╢
 ║ 1 │ 2012-05-24 │ Hello ║
 ╟───┼┼───╢
 ║ 2 │ 2012-05-25 │ Hello ║
 ║   ││ World ║
 ╚═══╧╧═══╝
 (2 rows)


 Comments, ideas ?

 Regards

 Pavel









commit 8f0918a42b095df6a8e5fc981a2947cc54b14404
Author: Pavel Stehule pavel.steh...@gooddata.com
Date:   Sat Jun 28 21:25:45 2014 +0200

rebase for 9.5 and clean warnings

diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
index ee6ec3a..671259f 100644
--- a/doc/src/sgml/ref/psql-ref.sgml
+++ b/doc/src/sgml/ref/psql-ref.sgml
@@ -2281,6 +2281,42 @@ lo_import 152801
   /para
   /listitem
   /varlistentry
+
+  varlistentry
+  termliteralunicode_border_style/literal/term
+   

Re: [HACKERS] proposal (9.5) : psql unicode border line styles

2014-03-11 Thread Pavel Stehule
Hello

I had to reduce allowed line style to single or double, because unicode
allows only combination single,double or single,thick

postgres=# \l
  List of databases
   Name|  Owner   | Encoding |   Collate   |Ctype|   Access
privileges
---+--+--+-+-+---
 postgres  | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
=c/postgres  +
   |  |  | | |
postgres=CTc/postgres
 template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
=c/postgres  +
   |  |  | | |
postgres=CTc/postgres
(3 rows)

postgres=# \pset border 2
Border style (border) is 2.
postgres=# \pset linestyle unicode
Line style (linestyle) is unicode.
postgres=# \l
   List of databases
┌───┬──┬──┬─┬─┬───┐
│   Name│  Owner   │ Encoding │   Collate   │Ctype│   Access
privileges   │
├───┼──┼──┼─┼─┼───┤
│ postgres  │ postgres │ UTF8 │ en_US.UTF-8 │ en_US.UTF-8
│   │
│ template0 │ postgres │ UTF8 │ en_US.UTF-8 │ en_US.UTF-8 │
=c/postgres  ↵│
│   │  │  │ │ │
postgres=CTc/postgres │
│ template1 │ postgres │ UTF8 │ en_US.UTF-8 │ en_US.UTF-8 │
=c/postgres  ↵│
│   │  │  │ │ │
postgres=CTc/postgres │
└───┴──┴──┴─┴─┴───┘
(3 rows)

postgres=# \pset unicode_header_linestyle double
Unicode border linestyle is double.
postgres=# \l
   List of databases
┌───┬──┬──┬─┬─┬───┐
│   Name│  Owner   │ Encoding │   Collate   │Ctype│   Access
privileges   │
╞═══╪══╪══╪═╪═╪═══╡
│ postgres  │ postgres │ UTF8 │ en_US.UTF-8 │ en_US.UTF-8
│   │
│ template0 │ postgres │ UTF8 │ en_US.UTF-8 │ en_US.UTF-8 │
=c/postgres  ↵│
│   │  │  │ │ │
postgres=CTc/postgres │
│ template1 │ postgres │ UTF8 │ en_US.UTF-8 │ en_US.UTF-8 │
=c/postgres  ↵│
│   │  │  │ │ │
postgres=CTc/postgres │
└───┴──┴──┴─┴─┴───┘
(3 rows)

postgres=#

Regards

Pavel



2014-03-07 19:24 GMT+01:00 Pavel Stehule pavel.steh...@gmail.com:

 Hello

 I am returning back to this topic. Last time I proposed styles:


 http://www.postgresql.org/message-id/cafj8prclgoktryjpbtoncpgyftrcz-zgfowdc1jqulb+ede...@mail.gmail.com

 http://postgres.cz/wiki/Pretty_borders_in_psql

 This experiment fails, but there are some interesting tips in discuss.

 So I propose little bit different proposal - choose one predefined style
 for any table lines elements. These styles are active only when linestyle
 is unicode.

 So possible line elements are:

 * border,
 * header_separator,
 * row_separator,
 * column_separator,

 Possible styles (for each element)

 * none,
  * single,
 * double,
 * thick,

 It should to have enough variability to define all styles proposed early.
 I hope, so this proposal is secure and simple for usage. Styles should be
 persistently saved in .psqlrc file - and some examples can be in
 documentation.

 Usage:

 \pset linestyle_border double
 \pset linestyle_header_separator single
 \pset linestyle_row_separator single
 \pset linestyle_column_separator single

 \pset linestyle unicode

 ╔═══╤╤═══╗
 ║ a │ b  │   c   ║
 ╟───┼┼───╢
 ║ 1 │ 2012-05-24 │ Hello ║
 ╟───┼┼───╢
 ║ 2 │ 2012-05-25 │ Hello ║
 ║   ││ World ║
 ╚═══╧╧═══╝
 (2 rows)


 Comments, ideas ?

 Regards

 Pavel








From ea7a046afbd6f517b37606f3e52bd2e401d1fad2 Mon Sep 17 00:00:00 2001
From: Pavel Stehule pavel.steh...@gooddata.com
Date: Tue, 11 Mar 2014 20:57:08 +0100
Subject: [PATCH] initial

---
 doc/src/sgml/ref/psql-ref.sgml |  36 
 src/bin/psql/command.c | 118 +++-
 src/bin/psql/print.c   | 199 -
 src/bin/psql/print.h   |  22 -
 src/bin/psql/startup.c |   5 ++
 src/bin/psql/tab-complete.c|  13 ++-
 6 files changed, 345 insertions(+), 48 deletions(-)

diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
index 8813be8..3e7e748 100644
--- a/doc/src/sgml/ref/psql-ref.sgml
+++ b/doc/src/sgml/ref/psql-ref.sgml
@@ -2273,6 +2273,42 @@ lo_import 152801
   /para
   /listitem
   

[HACKERS] proposal (9.5) : psql unicode border line styles

2014-03-07 Thread Pavel Stehule
Hello

I am returning back to this topic. Last time I proposed styles:

http://www.postgresql.org/message-id/cafj8prclgoktryjpbtoncpgyftrcz-zgfowdc1jqulb+ede...@mail.gmail.com

http://postgres.cz/wiki/Pretty_borders_in_psql

This experiment fails, but there are some interesting tips in discuss.

So I propose little bit different proposal - choose one predefined style
for any table lines elements. These styles are active only when linestyle
is unicode.

So possible line elements are:

* border,
* header_separator,
* row_separator,
* column_separator,

Possible styles (for each element)

* none,
* single,
* double,
* thick,

It should to have enough variability to define all styles proposed early. I
hope, so this proposal is secure and simple for usage. Styles should be
persistently saved in .psqlrc file - and some examples can be in
documentation.

Usage:

\pset linestyle_border double
\pset linestyle_header_separator single
\pset linestyle_row_separator single
\pset linestyle_column_separator single

\pset linestyle unicode

╔═══╤╤═══╗
║ a │ b  │   c   ║
╟───┼┼───╢
║ 1 │ 2012-05-24 │ Hello ║
╟───┼┼───╢
║ 2 │ 2012-05-25 │ Hello ║
║   ││ World ║
╚═══╧╧═══╝
(2 rows)


Comments, ideas ?

Regards

Pavel