/* * Workaround for access to session_timezone on WIN32, * * session timezone isn't accessed directly, but taken by show_timezone, * and reparsed. For better performance, the result is cached in fn_extra. * */ static pg_tz * get_session_timezone(FunctionCallInfo fcinfo) { #if defined(WIN32) pg_tz *result = (pg_tz *) fcinfo->flinfo->fn_extra; if (result == NULL) { const char *tzn = show_timezone(); void *extra; if (!check_timezone(((char **) &tzn), &extra, PGC_S_CLIENT)) elog(ERROR, "cannot to parse timezone \"%s\"", tzn); result = *((pg_tz **) extra); fcinfo->flinfo->fn_extra = result; /* * check_timezone allocates small block of pg_tz * size. This block * should be released by free(extra), but I cannot release memory * allocated by application in library on MS platform. So I have to * accept small memory leak - elsewhere exception - broken heap :( * * * cannot be called free( extra ); */ } return result; #else return session_timezone; #endif }
Datum orafce_sessiontimezone(PG_FUNCTION_ARGS) { PG_RETURN_TEXT_P(cstring_to_text(show_timezone())); }
static PGconn * connect_to_localhost(void) { PGconn *conn; char sql[1024]; char *host; char dbName[1024]; /* Also ensure backend isn't confused by this environment var. */ setenv("PGCLIENTENCODING", GetDatabaseEncodingName(), 1); #ifdef HAVE_UNIX_SOCKETS host = (UnixSocketDir == NULL || UnixSocketDir[0] == '\0') ? DEFAULT_PGSOCKET_DIR : UnixSocketDir; #else host = "localhost"; #endif /* set dbname and disable hostaddr */ snprintf(dbName, lengthof(dbName), "dbname='%s' hostaddr=''", escape_param_str(get_database_name(MyDatabaseId))); conn = PQsetdbLogin( host, GetConfigOption("port", false, false), NULL, NULL, dbName, GetUserNameFromId(GetUserId()), NULL); if (PQstatus(conn) == CONNECTION_BAD) { ParallelWriter wr; wr.conn = conn; ereport(ERROR, (errcode(ERRCODE_SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION), errmsg("could not establish connection to parallel writer"), errdetail("%s", finish_and_get_message(&wr)), errhint("Refer to the following if it is an authentication " "error. Specifies the authentication method to " "without the need for a password in pg_hba.conf (ex. " "trust or ident), or specify the password to the " "password file of the operating system user who ran " "PostgreSQL server. If cannot use these solution, " "specify WRITER=DIRECT."))); } /* attempt to set default datestyle */ snprintf(sql, lengthof(sql), "SET datestyle = '%s'", GetConfigOption("datestyle", false, false)); PQexec(conn, sql); /* attempt to set default datestyle */ snprintf(sql, lengthof(sql), "SET timezone = '%s'", show_timezone()); PQexec(conn, sql); /* set message receiver */ PQsetNoticeReceiver(conn, transfer_message, NULL); return conn; }