Line data Source code
1 : /*------------------------------------------------------------------------- 2 : * 3 : * pg_config.c 4 : * Expose same output as pg_config except as an SRF 5 : * 6 : * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group 7 : * Portions Copyright (c) 1994, Regents of the University of California 8 : * 9 : * IDENTIFICATION 10 : * src/backend/utils/misc/pg_config.c 11 : * 12 : *------------------------------------------------------------------------- 13 : */ 14 : 15 : #include "postgres.h" 16 : 17 : #include "catalog/pg_type.h" 18 : #include "common/config_info.h" 19 : #include "funcapi.h" 20 : #include "miscadmin.h" 21 : #include "port.h" 22 : #include "utils/builtins.h" 23 : 24 : Datum 25 6 : pg_config(PG_FUNCTION_ARGS) 26 : { 27 6 : ReturnSetInfo *rsinfo = (ReturnSetInfo *) fcinfo->resultinfo; 28 : ConfigData *configdata; 29 : size_t configdata_len; 30 6 : int i = 0; 31 : 32 : /* initialize our tuplestore */ 33 6 : InitMaterializedSRF(fcinfo, 0); 34 : 35 6 : configdata = get_configdata(my_exec_path, &configdata_len); 36 144 : for (i = 0; i < configdata_len; i++) 37 : { 38 : Datum values[2]; 39 : bool nulls[2]; 40 : 41 138 : memset(values, 0, sizeof(values)); 42 138 : memset(nulls, 0, sizeof(nulls)); 43 : 44 138 : values[0] = CStringGetTextDatum(configdata[i].name); 45 138 : values[1] = CStringGetTextDatum(configdata[i].setting); 46 : 47 138 : tuplestore_putvalues(rsinfo->setResult, rsinfo->setDesc, values, nulls); 48 : } 49 : 50 6 : return (Datum) 0; 51 : }