/src/postgres/src/backend/utils/misc/pg_config.c
Line | Count | Source (jump to first uncovered line) |
1 | | /*------------------------------------------------------------------------- |
2 | | * |
3 | | * pg_config.c |
4 | | * Expose same output as pg_config except as an SRF |
5 | | * |
6 | | * Portions Copyright (c) 1996-2025, 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 "common/config_info.h" |
18 | | #include "funcapi.h" |
19 | | #include "miscadmin.h" |
20 | | #include "utils/builtins.h" |
21 | | |
22 | | Datum |
23 | | pg_config(PG_FUNCTION_ARGS) |
24 | 0 | { |
25 | 0 | ReturnSetInfo *rsinfo = (ReturnSetInfo *) fcinfo->resultinfo; |
26 | 0 | ConfigData *configdata; |
27 | 0 | size_t configdata_len; |
28 | 0 | int i = 0; |
29 | | |
30 | | /* initialize our tuplestore */ |
31 | 0 | InitMaterializedSRF(fcinfo, 0); |
32 | |
|
33 | 0 | configdata = get_configdata(my_exec_path, &configdata_len); |
34 | 0 | for (i = 0; i < configdata_len; i++) |
35 | 0 | { |
36 | 0 | Datum values[2]; |
37 | 0 | bool nulls[2]; |
38 | |
|
39 | 0 | memset(values, 0, sizeof(values)); |
40 | 0 | memset(nulls, 0, sizeof(nulls)); |
41 | |
|
42 | 0 | values[0] = CStringGetTextDatum(configdata[i].name); |
43 | 0 | values[1] = CStringGetTextDatum(configdata[i].setting); |
44 | |
|
45 | 0 | tuplestore_putvalues(rsinfo->setResult, rsinfo->setDesc, values, nulls); |
46 | 0 | } |
47 | |
|
48 | 0 | return (Datum) 0; |
49 | 0 | } |