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

Commit2da2d34

Browse files
committed
Clean up version comparison/display code, per gripe from Michael Fuhr.
1 parent0372894 commit2da2d34

File tree

1 file changed

+51
-33
lines changed

1 file changed

+51
-33
lines changed

‎src/bin/psql/startup.c

Lines changed: 51 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
*
44
* Copyright (c) 2000-2005, PostgreSQL Global Development Group
55
*
6-
* $PostgreSQL: pgsql/src/bin/psql/startup.c,v 1.121 2005/09/0513:59:08 momjian Exp $
6+
* $PostgreSQL: pgsql/src/bin/psql/startup.c,v 1.122 2005/09/0518:05:13 tgl Exp $
77
*/
88
#include"postgres_fe.h"
99

@@ -78,6 +78,7 @@ struct adhoc_opts
7878
boolno_psqlrc;
7979
};
8080

81+
staticintparse_version(constchar*versionString);
8182
staticvoidparse_psql_options(intargc,char*argv[],
8283
structadhoc_opts*options);
8384
staticvoidprocess_psqlrc(char*argv0);
@@ -312,51 +313,46 @@ main(int argc, char *argv[])
312313

313314
if (!QUIET()&& !pset.notty)
314315
{
315-
/*
316-
*Server value for 8.12 is 80102.
317-
*This code does not handle release numbers like
318-
*8.112. (Is that 8.1, version 12, or 8.11, version 2?
319-
*/
320-
intclient_ver_major_int=atoi(PG_VERSION)*100+
321-
strchr(PG_VERSION,'.')[1]-'0';
322-
intclient_ver_int=atoi(PG_VERSION)*10000+
323-
(strchr(PG_VERSION,'.')[1]-'0')*100+
324-
(isdigit(strchr(PG_VERSION,'.')[2]) ?
325-
strchr(PG_VERSION,'.')[2]-'0' :'\0');
326-
327-
if (pset.sversion /100!=client_ver_major_int)
328-
{
329-
printf(_("WARNING: You are connected to a server with major version %d.%d,\n"
330-
"but your %s client is major version %d.%d. Informational backslash\n"
331-
"commands, like \\d, might not work properly.\n\n"),
332-
pset.sversion /10000, (pset.sversion /100) %10,
333-
pset.progname,atoi(PG_VERSION),strchr(PG_VERSION,'.')[1]-'0');
334-
}
316+
intclient_ver=parse_version(PG_VERSION);
335317

336-
if (pset.sversion!=client_ver_int)
318+
if (pset.sversion!=client_ver)
337319
{
320+
constchar*server_version;
338321
charserver_ver_str[16];
339322

340-
snprintf(server_ver_str,16,"%d.%c%c",pset.sversion /10000,
341-
(pset.sversion /100) %10+'0',
342-
/* print last digit? */
343-
(pset.sversion %10!=0) ?
344-
pset.sversion %10+'0' :'\0');
345-
346-
printf(_("Welcome to %s, the PostgreSQL interactive terminal.\n"),
347-
pset.progname);
348-
printf(_("%s version %s, server version %s\n\n"),
349-
pset.progname,PG_VERSION,server_ver_str);
323+
/* Try to get full text form, might include "devel" etc */
324+
server_version=PQparameterStatus(pset.db,"server_version");
325+
if (!server_version)
326+
{
327+
snprintf(server_ver_str,sizeof(server_ver_str),
328+
"%d.%d.%d",
329+
pset.sversion /10000,
330+
(pset.sversion /100) %100,
331+
pset.sversion %100);
332+
server_version=server_ver_str;
333+
}
334+
335+
printf(_("Welcome to %s %s (server %s), the PostgreSQL interactive terminal.\n\n"),
336+
pset.progname,PG_VERSION,server_version);
350337
}
351338
else
352339
printf(_("Welcome to %s %s, the PostgreSQL interactive terminal.\n\n"),
353-
pset.progname,PG_VERSION);
340+
pset.progname,PG_VERSION);
354341

355342
printf(_("Type: \\copyright for distribution terms\n"
356343
" \\h for help with SQL commands\n"
357344
" \\? for help with psql commands\n"
358345
" \\g or terminate with semicolon to execute query\n"
359346
" \\q to quit\n\n"));
347+
348+
if (pset.sversion /100!=client_ver /100)
349+
printf(_("WARNING: You are connected to a server with major version %d.%d,\n"
350+
"but your %s client is major version %d.%d. Some backslash commands,\n"
351+
"such as \\d, might not work properly.\n\n"),
352+
pset.sversion /10000, (pset.sversion /100) %100,
353+
pset.progname,
354+
client_ver /10000, (client_ver /100) %100);
355+
360356
#ifdefUSE_SSL
361357
printSSLInfo();
362358
#endif
@@ -383,6 +379,28 @@ main(int argc, char *argv[])
383379
}
384380

385381

382+
/*
383+
* Convert a version string into a number.
384+
*/
385+
staticint
386+
parse_version(constchar*versionString)
387+
{
388+
intcnt;
389+
intvmaj,
390+
vmin,
391+
vrev;
392+
393+
cnt=sscanf(versionString,"%d.%d.%d",&vmaj,&vmin,&vrev);
394+
395+
if (cnt<2)
396+
return-1;
397+
398+
if (cnt==2)
399+
vrev=0;
400+
401+
return (100*vmaj+vmin)*100+vrev;
402+
}
403+
386404

387405
/*
388406
* Parse command line options

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp