mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-30 00:04:49 -04:00 
			
		
		
		
	libpq: Remove PQservice()
This routine has been introduced as a shortcut to be able to retrieve a service name from an active connection, for psql. Per discussion, and as it is only used by psql, let's remove it to not clutter the libpq API more than necessary. The logic in psql is replaced by lookups of PQconninfoOption for the active connection, instead, updated each time the variables are synced by psql, the prompt shortcut relying on the variable synced. Reported-by: Noah Misch <noah@leadboat.com> Discussion: https://postgr.es/m/20250706161319.c1.nmisch@google.com Backpatch-through: 18
This commit is contained in:
		
							parent
							
								
									93001888d8
								
							
						
					
					
						commit
						fef6da9e9c
					
				| @ -2740,26 +2740,6 @@ char *PQport(const PGconn *conn); | |||||||
|      </listitem> |      </listitem> | ||||||
|     </varlistentry> |     </varlistentry> | ||||||
| 
 | 
 | ||||||
|     <varlistentry id="libpq-PQservice"> |  | ||||||
|      <term><function>PQservice</function><indexterm><primary>PQservice</primary></indexterm></term> |  | ||||||
| 
 |  | ||||||
|      <listitem> |  | ||||||
|       <para> |  | ||||||
|        Returns the service of the active connection. |  | ||||||
| 
 |  | ||||||
| <synopsis> |  | ||||||
| char *PQservice(const PGconn *conn); |  | ||||||
| </synopsis> |  | ||||||
|       </para> |  | ||||||
| 
 |  | ||||||
|       <para> |  | ||||||
|        <xref linkend="libpq-PQservice"/> returns <symbol>NULL</symbol> if the |  | ||||||
|        <parameter>conn</parameter> argument is <symbol>NULL</symbol>. |  | ||||||
|        Otherwise, if there was no service provided, it returns an empty string. |  | ||||||
|       </para> |  | ||||||
|      </listitem> |  | ||||||
|     </varlistentry> |  | ||||||
| 
 |  | ||||||
|     <varlistentry id="libpq-PQtty"> |     <varlistentry id="libpq-PQtty"> | ||||||
|      <term><function>PQtty</function><indexterm><primary>PQtty</primary></indexterm></term> |      <term><function>PQtty</function><indexterm><primary>PQtty</primary></indexterm></term> | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -4480,6 +4480,7 @@ SyncVariables(void) | |||||||
| { | { | ||||||
| 	char		vbuf[32]; | 	char		vbuf[32]; | ||||||
| 	const char *server_version; | 	const char *server_version; | ||||||
|  | 	char	   *service_name; | ||||||
| 
 | 
 | ||||||
| 	/* get stuff from connection */ | 	/* get stuff from connection */ | ||||||
| 	pset.encoding = PQclientEncoding(pset.db); | 	pset.encoding = PQclientEncoding(pset.db); | ||||||
| @ -4489,12 +4490,16 @@ SyncVariables(void) | |||||||
| 	setFmtEncoding(pset.encoding); | 	setFmtEncoding(pset.encoding); | ||||||
| 
 | 
 | ||||||
| 	SetVariable(pset.vars, "DBNAME", PQdb(pset.db)); | 	SetVariable(pset.vars, "DBNAME", PQdb(pset.db)); | ||||||
| 	SetVariable(pset.vars, "SERVICE", PQservice(pset.db)); |  | ||||||
| 	SetVariable(pset.vars, "USER", PQuser(pset.db)); | 	SetVariable(pset.vars, "USER", PQuser(pset.db)); | ||||||
| 	SetVariable(pset.vars, "HOST", PQhost(pset.db)); | 	SetVariable(pset.vars, "HOST", PQhost(pset.db)); | ||||||
| 	SetVariable(pset.vars, "PORT", PQport(pset.db)); | 	SetVariable(pset.vars, "PORT", PQport(pset.db)); | ||||||
| 	SetVariable(pset.vars, "ENCODING", pg_encoding_to_char(pset.encoding)); | 	SetVariable(pset.vars, "ENCODING", pg_encoding_to_char(pset.encoding)); | ||||||
| 
 | 
 | ||||||
|  | 	service_name = get_conninfo_value("service"); | ||||||
|  | 	SetVariable(pset.vars, "SERVICE", service_name); | ||||||
|  | 	if (service_name) | ||||||
|  | 		pg_free(service_name); | ||||||
|  | 
 | ||||||
| 	/* this bit should match connection_warnings(): */ | 	/* this bit should match connection_warnings(): */ | ||||||
| 	/* Try to get full text form of version, might include "devel" etc */ | 	/* Try to get full text form of version, might include "devel" etc */ | ||||||
| 	server_version = PQparameterStatus(pset.db, "server_version"); | 	server_version = PQparameterStatus(pset.db, "server_version"); | ||||||
|  | |||||||
| @ -2531,6 +2531,41 @@ session_username(void) | |||||||
| 		return PQuser(pset.db); | 		return PQuser(pset.db); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /*
 | ||||||
|  |  * Return the value of option for keyword in the current connection. | ||||||
|  |  * | ||||||
|  |  * The caller is responsible for freeing the result value allocated. | ||||||
|  |  */ | ||||||
|  | char * | ||||||
|  | get_conninfo_value(const char *keyword) | ||||||
|  | { | ||||||
|  | 	PQconninfoOption *opts; | ||||||
|  | 	PQconninfoOption *serviceopt = NULL; | ||||||
|  | 	char	   *res = NULL; | ||||||
|  | 
 | ||||||
|  | 	if (pset.db == NULL) | ||||||
|  | 		return NULL; | ||||||
|  | 
 | ||||||
|  | 	opts = PQconninfo(pset.db); | ||||||
|  | 	if (opts == NULL) | ||||||
|  | 		return NULL; | ||||||
|  | 
 | ||||||
|  | 	for (PQconninfoOption *opt = opts; opt->keyword != NULL; ++opt) | ||||||
|  | 	{ | ||||||
|  | 		if (strcmp(opt->keyword, keyword) == 0) | ||||||
|  | 		{ | ||||||
|  | 			serviceopt = opt; | ||||||
|  | 			break; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/* Take a copy of the value, as it is freed by PQconninfoFree(). */ | ||||||
|  | 	if (serviceopt && serviceopt->val != NULL) | ||||||
|  | 		res = pg_strdup(serviceopt->val); | ||||||
|  | 	PQconninfoFree(opts); | ||||||
|  | 
 | ||||||
|  | 	return res; | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| /* expand_tilde
 | /* expand_tilde
 | ||||||
|  * |  * | ||||||
|  | |||||||
| @ -39,6 +39,7 @@ extern bool SendQuery(const char *query); | |||||||
| extern bool is_superuser(void); | extern bool is_superuser(void); | ||||||
| extern bool standard_strings(void); | extern bool standard_strings(void); | ||||||
| extern const char *session_username(void); | extern const char *session_username(void); | ||||||
|  | extern char *get_conninfo_value(const char *keyword); | ||||||
| 
 | 
 | ||||||
| extern void expand_tilde(char **filename); | extern void expand_tilde(char **filename); | ||||||
| extern void clean_extended_state(void); | extern void clean_extended_state(void); | ||||||
|  | |||||||
| @ -169,8 +169,12 @@ get_prompt(promptStatus_t status, ConditionalStack cstack) | |||||||
| 					break; | 					break; | ||||||
| 					/* service name */ | 					/* service name */ | ||||||
| 				case 's': | 				case 's': | ||||||
| 					if (pset.db && PQservice(pset.db)) | 					{ | ||||||
| 						strlcpy(buf, PQservice(pset.db), sizeof(buf)); | 						const char *service_name = GetVariable(pset.vars, "SERVICE"); | ||||||
|  | 
 | ||||||
|  | 						if (service_name) | ||||||
|  | 							strlcpy(buf, service_name, sizeof(buf)); | ||||||
|  | 					} | ||||||
| 					break; | 					break; | ||||||
| 					/* backend pid */ | 					/* backend pid */ | ||||||
| 				case 'p': | 				case 'p': | ||||||
|  | |||||||
| @ -205,9 +205,8 @@ PQcancelFinish            202 | |||||||
| PQsocketPoll              203 | PQsocketPoll              203 | ||||||
| PQsetChunkedRowsMode      204 | PQsetChunkedRowsMode      204 | ||||||
| PQgetCurrentTimeUSec      205 | PQgetCurrentTimeUSec      205 | ||||||
| PQservice                 206 | PQsetAuthDataHook         206 | ||||||
| PQsetAuthDataHook         207 | PQgetAuthDataHook         207 | ||||||
| PQgetAuthDataHook         208 | PQdefaultAuthDataHook     208 | ||||||
| PQdefaultAuthDataHook     209 | PQfullProtocolVersion     209 | ||||||
| PQfullProtocolVersion     210 | appendPQExpBufferVA       210 | ||||||
| appendPQExpBufferVA       211 |  | ||||||
|  | |||||||
| @ -7461,14 +7461,6 @@ PQdb(const PGconn *conn) | |||||||
| 	return conn->dbName; | 	return conn->dbName; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| char * |  | ||||||
| PQservice(const PGconn *conn) |  | ||||||
| { |  | ||||||
| 	if (!conn) |  | ||||||
| 		return NULL; |  | ||||||
| 	return conn->pgservice; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| char * | char * | ||||||
| PQuser(const PGconn *conn) | PQuser(const PGconn *conn) | ||||||
| { | { | ||||||
|  | |||||||
| @ -400,7 +400,6 @@ extern int	PQrequestCancel(PGconn *conn); | |||||||
| 
 | 
 | ||||||
| /* Accessor functions for PGconn objects */ | /* Accessor functions for PGconn objects */ | ||||||
| extern char *PQdb(const PGconn *conn); | extern char *PQdb(const PGconn *conn); | ||||||
| extern char *PQservice(const PGconn *conn); |  | ||||||
| extern char *PQuser(const PGconn *conn); | extern char *PQuser(const PGconn *conn); | ||||||
| extern char *PQpass(const PGconn *conn); | extern char *PQpass(const PGconn *conn); | ||||||
| extern char *PQhost(const PGconn *conn); | extern char *PQhost(const PGconn *conn); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user