@ -3,7 +3,7 @@
*
* Copyright ( c ) 2000 - 2006 , PostgreSQL Global Development Group
*
* $ PostgreSQL : pgsql / src / bin / psql / startup . c , v 1.135 2006 / 07 / 14 14 : 52 : 26 momjian Exp $
* $ PostgreSQL : pgsql / src / bin / psql / startup . c , v 1.136 2006 / 08 / 29 15 : 19 : 51 tgl Exp $
*/
# include "postgres_fe.h"
@ -84,14 +84,14 @@ static void parse_psql_options(int argc, char *argv[],
static void process_psqlrc ( char * argv0 ) ;
static void process_psqlrc_file ( char * filename ) ;
static void showVersion ( void ) ;
static void EstablishVariableSpace ( void ) ;
# ifdef USE_SSL
static void printSSLInfo ( void ) ;
# endif
# ifdef WIN32
static void
checkWin32Codepage ( void ) ;
static void checkWin32Codepage ( void ) ;
# endif
/*
@ -134,34 +134,19 @@ main(int argc, char *argv[])
pset . progname = get_progname ( argv [ 0 ] ) ;
pset . db = NULL ;
setDecimalLocale ( ) ;
pset . encoding = PQenv2encoding ( ) ;
pset . queryFout = stdout ;
pset . queryFoutPipe = false ;
pset . cur_cmd_source = stdin ;
pset . cur_cmd_interactive = false ;
pset . encoding = PQenv2encoding ( ) ;
pset . vars = CreateVariableSpace ( ) ;
if ( ! pset . vars )
{
fprintf ( stderr , _ ( " %s: out of memory \n " ) , pset . progname ) ;
exit ( EXIT_FAILURE ) ;
}
pset . popt . topt . format = PRINT_ALIGNED ;
pset . queryFout = stdout ;
pset . popt . topt . border = 1 ;
pset . popt . topt . pager = 1 ;
pset . popt . default_footer = true ;
SetVariable ( pset . vars , " VERSION " , PG_VERSION_STR ) ;
/* Default values for variables */
SetVariableBool ( pset . vars , " AUTOCOMMIT " ) ;
SetVariable ( pset . vars , " VERBOSITY " , " default " ) ;
SetVariable ( pset . vars , " PROMPT1 " , DEFAULT_PROMPT1 ) ;
SetVariable ( pset . vars , " PROMPT2 " , DEFAULT_PROMPT2 ) ;
SetVariable ( pset . vars , " PROMPT3 " , DEFAULT_PROMPT3 ) ;
pset . verbosity = PQERRORS_DEFAULT ;
pset . notty = ( ! isatty ( fileno ( stdin ) ) | | ! isatty ( fileno ( stdout ) ) ) ;
/* This is obsolete and should be removed sometime. */
@ -171,6 +156,17 @@ main(int argc, char *argv[])
pset . getPassword = false ;
# endif
EstablishVariableSpace ( ) ;
SetVariable ( pset . vars , " VERSION " , PG_VERSION_STR ) ;
/* Default values for variables */
SetVariableBool ( pset . vars , " AUTOCOMMIT " ) ;
SetVariable ( pset . vars , " VERBOSITY " , " default " ) ;
SetVariable ( pset . vars , " PROMPT1 " , DEFAULT_PROMPT1 ) ;
SetVariable ( pset . vars , " PROMPT2 " , DEFAULT_PROMPT2 ) ;
SetVariable ( pset . vars , " PROMPT3 " , DEFAULT_PROMPT3 ) ;
parse_psql_options ( argc , argv , & options ) ;
if ( ! pset . popt . topt . fieldSep )
@ -239,9 +235,6 @@ main(int argc, char *argv[])
SyncVariables ( ) ;
/* Grab the backend server version */
pset . sversion = PQserverVersion ( pset . db ) ;
if ( options . action = = ACT_LIST_DB )
{
int success = listAllDbs ( false ) ;
@ -280,7 +273,7 @@ main(int argc, char *argv[])
{
PsqlScanState scan_state ;
if ( VariableEquals ( pset . vars , " ECHO " , " all " ) )
if ( pset . echo = = PSQL_ECHO_ALL )
puts ( options . action_string ) ;
scan_state = psql_scan_create ( ) ;
@ -299,7 +292,7 @@ main(int argc, char *argv[])
*/
else if ( options . action = = ACT_SINGLE_QUERY )
{
if ( VariableEquals ( pset . vars , " ECHO " , " all " ) )
if ( pset . echo = = PSQL_ECHO_ALL )
puts ( options . action_string ) ;
successResult = SendQuery ( options . action_string )
@ -314,7 +307,7 @@ main(int argc, char *argv[])
if ( ! options . no_psqlrc )
process_psqlrc ( argv [ 0 ] ) ;
if ( ! QUIET ( ) & & ! pset . notty )
if ( ! pset . quiet & & ! pset . notty )
{
int client_ver = parse_version ( PG_VERSION ) ;
@ -644,14 +637,14 @@ parse_psql_options(int argc, char *argv[], struct adhoc_opts * options)
options - > dbname = argv [ optind ] ;
else if ( ! options - > username )
options - > username = argv [ optind ] ;
else if ( ! QUIET ( ) )
else if ( ! pset . quiet )
fprintf ( stderr , _ ( " %s: warning: extra command-line argument \" %s \" ignored \n " ) ,
pset . progname , argv [ optind ] ) ;
optind + + ;
}
if ( used_old_u_option & & ! QUIET ( ) )
if ( used_old_u_option & & ! pset . quiet )
fprintf ( stderr , _ ( " %s: Warning: The -u option is deprecated. Use -U. \n " ) , pset . progname ) ;
}
@ -743,7 +736,6 @@ printSSLInfo(void)
# endif
/*
* checkWin32Codepage
*
@ -768,3 +760,151 @@ checkWin32Codepage(void)
}
# endif
/*
* Assign hooks for psql variables .
*
* This isn ' t an amazingly good place for them , but neither is anywhere else .
*/
static void
autocommit_hook ( const char * newval )
{
pset . autocommit = ParseVariableBool ( newval ) ;
}
static void
on_error_stop_hook ( const char * newval )
{
pset . on_error_stop = ParseVariableBool ( newval ) ;
}
static void
quiet_hook ( const char * newval )
{
pset . quiet = ParseVariableBool ( newval ) ;
}
static void
singleline_hook ( const char * newval )
{
pset . singleline = ParseVariableBool ( newval ) ;
}
static void
singlestep_hook ( const char * newval )
{
pset . singlestep = ParseVariableBool ( newval ) ;
}
static void
echo_hook ( const char * newval )
{
if ( newval = = NULL )
pset . echo = PSQL_ECHO_NONE ;
else if ( strcmp ( newval , " queries " ) = = 0 )
pset . echo = PSQL_ECHO_QUERIES ;
else if ( strcmp ( newval , " all " ) = = 0 )
pset . echo = PSQL_ECHO_ALL ;
else
pset . echo = PSQL_ECHO_NONE ;
}
static void
echo_hidden_hook ( const char * newval )
{
if ( newval = = NULL )
pset . echo_hidden = PSQL_ECHO_HIDDEN_OFF ;
else if ( strcmp ( newval , " noexec " ) = = 0 )
pset . echo_hidden = PSQL_ECHO_HIDDEN_NOEXEC ;
else if ( pg_strcasecmp ( newval , " off " ) = = 0 )
pset . echo_hidden = PSQL_ECHO_HIDDEN_OFF ;
else
pset . echo_hidden = PSQL_ECHO_HIDDEN_ON ;
}
static void
on_error_rollback_hook ( const char * newval )
{
if ( newval = = NULL )
pset . on_error_rollback = PSQL_ERROR_ROLLBACK_OFF ;
else if ( pg_strcasecmp ( newval , " interactive " ) = = 0 )
pset . on_error_rollback = PSQL_ERROR_ROLLBACK_INTERACTIVE ;
else if ( pg_strcasecmp ( newval , " off " ) = = 0 )
pset . on_error_rollback = PSQL_ERROR_ROLLBACK_OFF ;
else
pset . on_error_rollback = PSQL_ERROR_ROLLBACK_ON ;
}
static void
histcontrol_hook ( const char * newval )
{
if ( newval = = NULL )
pset . histcontrol = hctl_none ;
else if ( strcmp ( newval , " ignorespace " ) = = 0 )
pset . histcontrol = hctl_ignorespace ;
else if ( strcmp ( newval , " ignoredups " ) = = 0 )
pset . histcontrol = hctl_ignoredups ;
else if ( strcmp ( newval , " ignoreboth " ) = = 0 )
pset . histcontrol = hctl_ignoreboth ;
else
pset . histcontrol = hctl_none ;
}
static void
prompt1_hook ( const char * newval )
{
pset . prompt1 = newval ? newval : " " ;
}
static void
prompt2_hook ( const char * newval )
{
pset . prompt2 = newval ? newval : " " ;
}
static void
prompt3_hook ( const char * newval )
{
pset . prompt3 = newval ? newval : " " ;
}
static void
verbosity_hook ( const char * newval )
{
if ( newval = = NULL )
pset . verbosity = PQERRORS_DEFAULT ;
else if ( strcmp ( newval , " default " ) = = 0 )
pset . verbosity = PQERRORS_DEFAULT ;
else if ( strcmp ( newval , " terse " ) = = 0 )
pset . verbosity = PQERRORS_TERSE ;
else if ( strcmp ( newval , " verbose " ) = = 0 )
pset . verbosity = PQERRORS_VERBOSE ;
else
pset . verbosity = PQERRORS_DEFAULT ;
if ( pset . db )
PQsetErrorVerbosity ( pset . db , pset . verbosity ) ;
}
static void
EstablishVariableSpace ( void )
{
pset . vars = CreateVariableSpace ( ) ;
SetVariableAssignHook ( pset . vars , " AUTOCOMMIT " , autocommit_hook ) ;
SetVariableAssignHook ( pset . vars , " ON_ERROR_STOP " , on_error_stop_hook ) ;
SetVariableAssignHook ( pset . vars , " QUIET " , quiet_hook ) ;
SetVariableAssignHook ( pset . vars , " SINGLELINE " , singleline_hook ) ;
SetVariableAssignHook ( pset . vars , " SINGLESTEP " , singlestep_hook ) ;
SetVariableAssignHook ( pset . vars , " ECHO " , echo_hook ) ;
SetVariableAssignHook ( pset . vars , " ECHO_HIDDEN " , echo_hidden_hook ) ;
SetVariableAssignHook ( pset . vars , " ON_ERROR_ROLLBACK " , on_error_rollback_hook ) ;
SetVariableAssignHook ( pset . vars , " HISTCONTROL " , histcontrol_hook ) ;
SetVariableAssignHook ( pset . vars , " PROMPT1 " , prompt1_hook ) ;
SetVariableAssignHook ( pset . vars , " PROMPT2 " , prompt2_hook ) ;
SetVariableAssignHook ( pset . vars , " PROMPT3 " , prompt3_hook ) ;
SetVariableAssignHook ( pset . vars , " VERBOSITY " , verbosity_hook ) ;
}