1 /* 2 * psql - the PostgreSQL interactive terminal 3 * 4 * Copyright (c) 2000-2016, PostgreSQL Global Development Group 5 * 6 * src/bin/psql/settings.h 7 */ 8 #ifndef SETTINGS_H 9 #define SETTINGS_H 10 11 12 #include "variables.h" 13 #include "fe_utils/print.h" 14 15 #define DEFAULT_FIELD_SEP "|" 16 #define DEFAULT_RECORD_SEP "\n" 17 18 #if defined(WIN32) || defined(__CYGWIN__) 19 #define DEFAULT_EDITOR "notepad.exe" 20 /* no DEFAULT_EDITOR_LINENUMBER_ARG for Notepad */ 21 #else 22 #define DEFAULT_EDITOR "vi" 23 #define DEFAULT_EDITOR_LINENUMBER_ARG "+" 24 #endif 25 26 #define DEFAULT_PROMPT1 "%/%R%# " 27 #define DEFAULT_PROMPT2 "%/%R%# " 28 #define DEFAULT_PROMPT3 ">> " 29 30 /* 31 * Note: these enums should generally be chosen so that zero corresponds 32 * to the default behavior. 33 */ 34 35 typedef enum 36 { 37 PSQL_ECHO_NONE, 38 PSQL_ECHO_QUERIES, 39 PSQL_ECHO_ERRORS, 40 PSQL_ECHO_ALL 41 } PSQL_ECHO; 42 43 typedef enum 44 { 45 PSQL_ECHO_HIDDEN_OFF, 46 PSQL_ECHO_HIDDEN_ON, 47 PSQL_ECHO_HIDDEN_NOEXEC 48 } PSQL_ECHO_HIDDEN; 49 50 typedef enum 51 { 52 PSQL_ERROR_ROLLBACK_OFF, 53 PSQL_ERROR_ROLLBACK_INTERACTIVE, 54 PSQL_ERROR_ROLLBACK_ON 55 } PSQL_ERROR_ROLLBACK; 56 57 typedef enum 58 { 59 PSQL_COMP_CASE_PRESERVE_UPPER, 60 PSQL_COMP_CASE_PRESERVE_LOWER, 61 PSQL_COMP_CASE_UPPER, 62 PSQL_COMP_CASE_LOWER 63 } PSQL_COMP_CASE; 64 65 typedef enum 66 { 67 hctl_none = 0, 68 hctl_ignorespace = 1, 69 hctl_ignoredups = 2, 70 hctl_ignoreboth = hctl_ignorespace | hctl_ignoredups 71 } HistControl; 72 73 enum trivalue 74 { 75 TRI_DEFAULT, 76 TRI_NO, 77 TRI_YES 78 }; 79 80 typedef struct _psqlSettings 81 { 82 PGconn *db; /* connection to backend */ 83 int encoding; /* client_encoding */ 84 FILE *queryFout; /* where to send the query results */ 85 bool queryFoutPipe; /* queryFout is from a popen() */ 86 87 FILE *copyStream; /* Stream to read/write for \copy command */ 88 89 PGresult *last_error_result; /* most recent error result, if any */ 90 91 printQueryOpt popt; 92 93 char *gfname; /* one-shot file output argument for \g */ 94 char *gset_prefix; /* one-shot prefix argument for \gset */ 95 bool gexec_flag; /* one-shot flag to execute query's results */ 96 bool crosstab_flag; /* one-shot request to crosstab results */ 97 char *ctv_args[4]; /* \crosstabview arguments */ 98 99 bool notty; /* stdin or stdout is not a tty (as determined 100 * on startup) */ 101 enum trivalue getPassword; /* prompt the user for a username and password */ 102 FILE *cur_cmd_source; /* describe the status of the current main 103 * loop */ 104 bool cur_cmd_interactive; 105 int sversion; /* backend server version */ 106 const char *progname; /* in case you renamed psql */ 107 char *inputfile; /* file being currently processed, if any */ 108 uint64 lineno; /* also for error reporting */ 109 uint64 stmt_lineno; /* line number inside the current statement */ 110 111 bool timing; /* enable timing of all queries */ 112 113 FILE *logfile; /* session log file handle */ 114 115 VariableSpace vars; /* "shell variable" repository */ 116 117 /* 118 * The remaining fields are set by assign hooks associated with entries in 119 * "vars". They should not be set directly except by those hook 120 * functions. 121 */ 122 bool autocommit; 123 bool on_error_stop; 124 bool quiet; 125 bool singleline; 126 bool singlestep; 127 int fetch_count; 128 PSQL_ECHO echo; 129 PSQL_ECHO_HIDDEN echo_hidden; 130 PSQL_ERROR_ROLLBACK on_error_rollback; 131 PSQL_COMP_CASE comp_case; 132 HistControl histcontrol; 133 const char *prompt1; 134 const char *prompt2; 135 const char *prompt3; 136 PGVerbosity verbosity; /* current error verbosity level */ 137 PGContextVisibility show_context; /* current context display level */ 138 } PsqlSettings; 139 140 extern PsqlSettings pset; 141 142 143 #ifndef EXIT_SUCCESS 144 #define EXIT_SUCCESS 0 145 #endif 146 147 #ifndef EXIT_FAILURE 148 #define EXIT_FAILURE 1 149 #endif 150 151 #define EXIT_BADCONN 2 152 153 #define EXIT_USER 3 154 155 #endif 156