Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit6f0d6a5

Browse files
committed
Rethink \crosstabview's argument parsing logic.
\crosstabview interpreted its arguments in an unusual way, includingdoing case-insensitive matching of unquoted column names, which issurely not the right thing. Rip that out in favor of doing somethingequivalent to the dequoting/case-folding rules used by other psqlcommands. To keep it simple, change the syntax so that the optionalsort column is specified as a separate argument, instead of thealso-quite-unusual syntax that attached it to the colH argument witha colon.Also, rework the error messages to be closer to project style.
1 parent4b74c6a commit6f0d6a5

File tree

7 files changed

+156
-291
lines changed

7 files changed

+156
-291
lines changed

‎doc/src/sgml/ref/psql-ref.sgml

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -993,9 +993,10 @@ testdb=>
993993
<varlistentry id="APP-PSQL-meta-commands-crosstabview">
994994
<term><literal>\crosstabview [
995995
<replaceable class="parameter">colV</replaceable>
996-
<replaceable class="parameter">colH</replaceable>[:<replaceable class="parameter">scolH</replaceable>]
997-
[<replaceable class="parameter">colD</replaceable>]
998-
] </literal></term>
996+
[ <replaceable class="parameter">colH</replaceable>
997+
[ <replaceable class="parameter">colD</replaceable>
998+
[ <replaceable class="parameter">sortcolH</replaceable>
999+
] ] ] ] </literal></term>
9991000
<listitem>
10001001
<para>
10011002
Executes the current query buffer (like <literal>\g</literal>) and
@@ -1004,16 +1005,11 @@ testdb=&gt;
10041005
The output column identified by <replaceable class="parameter">colV</>
10051006
becomes a vertical header and the output column identified by
10061007
<replaceable class="parameter">colH</replaceable>
1007-
becomes a horizontal header, optionally sorted by ranking data obtained
1008-
from column <replaceable class="parameter">scolH</replaceable>.
1008+
becomes a horizontal header.
10091009
<replaceable class="parameter">colD</replaceable> identifies
10101010
the output column to display within the grid.
1011-
If <replaceable class="parameter">colD</replaceable> is not
1012-
specified and there are exactly three columns in the result set,
1013-
the column that is neither
1014-
<replaceable class="parameter">colV</replaceable> nor
1015-
<replaceable class="parameter">colH</replaceable>
1016-
is displayed; if there are more columns, an error is reported.
1011+
<replaceable class="parameter">sortcolH</replaceable> identifies
1012+
an optional sort column for the horizontal header.
10171013
</para>
10181014

10191015
<para>
@@ -1024,6 +1020,12 @@ testdb=&gt;
10241020
and <replaceable class="parameter">colH</replaceable> as column 2.
10251021
<replaceable class="parameter">colH</replaceable> must differ from
10261022
<replaceable class="parameter">colV</replaceable>.
1023+
If <replaceable class="parameter">colD</replaceable> is not
1024+
specified, then there must be exactly three columns in the query
1025+
result, and the column that is neither
1026+
<replaceable class="parameter">colV</replaceable> nor
1027+
<replaceable class="parameter">colH</replaceable>
1028+
is taken to be <replaceable class="parameter">colD</replaceable>.
10271029
</para>
10281030

10291031
<para>
@@ -1037,11 +1039,11 @@ testdb=&gt;
10371039
found in column <replaceable class="parameter">colH</replaceable>,
10381040
with duplicates removed. By default, these appear in the same order
10391041
as in the query results. But if the
1040-
optional <replaceable class="parameter">scolH</> argument is given, it
1041-
identifies a column whose values must be integer numbers, and the
1042+
optional <replaceable class="parameter">sortcolH</> argument is given,
1043+
itidentifies a column whose values must be integer numbers, and the
10421044
values from <replaceable class="parameter">colH</replaceable> will
10431045
appear in the horizontal header sorted according to the
1044-
corresponding <replaceable class="parameter">scolH</> values.
1046+
corresponding <replaceable class="parameter">sortcolH</> values.
10451047
</para>
10461048

10471049
<para>

‎src/bin/psql/command.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -368,13 +368,11 @@ exec_command(const char *cmd,
368368
/* \crosstabview -- execute a query and display results in crosstab */
369369
elseif (strcmp(cmd,"crosstabview")==0)
370370
{
371-
pset.ctv_col_V=psql_scan_slash_option(scan_state,
372-
OT_NORMAL,NULL, false);
373-
pset.ctv_col_H=psql_scan_slash_option(scan_state,
374-
OT_NORMAL,NULL, false);
375-
pset.ctv_col_D=psql_scan_slash_option(scan_state,
376-
OT_NORMAL,NULL, false);
371+
inti;
377372

373+
for (i=0;i<lengthof(pset.ctv_args);i++)
374+
pset.ctv_args[i]=psql_scan_slash_option(scan_state,
375+
OT_NORMAL,NULL, true);
378376
pset.crosstab_flag= true;
379377
status=PSQL_CMD_SEND;
380378
}

‎src/bin/psql/common.c

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1130,6 +1130,7 @@ SendQuery(const char *query)
11301130
PGTransactionStatusTypetransaction_status;
11311131
doubleelapsed_msec=0;
11321132
boolOK= false;
1133+
inti;
11331134
boolon_error_rollback_savepoint= false;
11341135
staticboolon_error_rollback_warning= false;
11351136

@@ -1362,20 +1363,10 @@ SendQuery(const char *query)
13621363

13631364
/* reset \crosstabview trigger */
13641365
pset.crosstab_flag= false;
1365-
if (pset.ctv_col_V)
1366+
for (i=0;i<lengthof(pset.ctv_args);i++)
13661367
{
1367-
free(pset.ctv_col_V);
1368-
pset.ctv_col_V=NULL;
1369-
}
1370-
if (pset.ctv_col_H)
1371-
{
1372-
free(pset.ctv_col_H);
1373-
pset.ctv_col_H=NULL;
1374-
}
1375-
if (pset.ctv_col_D)
1376-
{
1377-
free(pset.ctv_col_D);
1378-
pset.ctv_col_D=NULL;
1368+
pg_free(pset.ctv_args[i]);
1369+
pset.ctv_args[i]=NULL;
13791370
}
13801371

13811372
returnOK;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp