/*
 * uri-regress.c
 *		A test program for libpq URI format
 *
 * This is a helper for libpq conninfo regression testing.  It takes a single
 * conninfo string as a parameter, parses it using PQconninfoParse, and then
 * prints out the values from the parsed PQconninfoOption struct that differ
 * from the defaults (obtained from PQconndefaults).
 *
 * Portions Copyright (c) 2012-2020, PostgreSQL Global Development Group
 *
 * IDENTIFICATION
 *		src/interfaces/libpq/test/uri-regress.c
 */

#include "postgres_fe.h"

#include "libpq-fe.h"

int
main(int argc, char *argv[])
{
	PQconninfoOption *opts;
	PQconninfoOption *defs;
	PQconninfoOption *opt;
	PQconninfoOption *def;
	char	   *errmsg = NULL;
	bool		local = true;

	if (argc != 2)
		return 1;

	opts = PQconninfoParse(argv[1], &errmsg);
	if (opts == NULL)
	{
		fprintf(stderr, "uri-regress: %s", errmsg);
		return 1;
	}

	defs = PQconndefaults();
	if (defs == NULL)
	{
		fprintf(stderr, "uri-regress: cannot fetch default options\n");
		return 1;
	}

	/*
	 * Loop on the options, and print the value of each if not the default.
	 *
	 * XXX this coding assumes that PQconninfoOption structs always have the
	 * keywords in the same order.
	 */
	for (opt = opts, def = defs; opt->keyword; ++opt, ++def)
	{
		if (opt->val != NULL)
		{
			if (def->val == NULL || strcmp(opt->val, def->val) != 0)
				printf("%s='%s' ", opt->keyword, opt->val);

			/*
			 * Try to detect if this is a Unix-domain socket or inet.  This is
			 * a bit grotty but it's the same thing that libpq itself does.
			 *
			 * Note that we directly test for '/' instead of using
			 * is_absolute_path, as that would be considerably more messy.
			 * This would fail on Windows, but that platform doesn't have
			 * Unix-domain sockets anyway.
			 */
			if (*opt->val &&
				(strcmp(opt->keyword, "hostaddr") == 0 ||
				 (strcmp(opt->keyword, "host") == 0 && *opt->val != '/')))
			{
				local = false;
			}
		}
	}

	if (local)
		printf("(local)\n");
	else
		printf("(inet)\n");

	return 0;
}
