conninfo->gssauth_use_gssapi = -1;
conninfo->keepalive_idle = -1;
conninfo->keepalive_interval = -1;
+ conninfo->prefer_libpq = -1;
#ifdef _HANDLE_ENLIST_IN_DTC_
conninfo->xa_opt = -1;
#endif /* _HANDLE_ENLIST_IN_DTC_ */
CORR_STRCPY(translation_dll);
CORR_STRCPY(translation_option);
CORR_VALCPY(focus_password);
+ CORR_VALCPY(prefer_libpq);
NAME_TO_NAME(ci->conn_settings, sci->conn_settings);
CORR_VALCPY(disallow_premature);
CORR_VALCPY(allow_keyset);
mylog("sslmode=%s\n", self->connInfo.sslmode);
#ifdef USE_LIBPQ
+ if (0 < ci->prefer_libpq)
+ call_libpq = TRUE;
+ else if (0 == ci->prefer_libpq)
+ call_libpq = FALSE;
+ else
#ifdef USE_SSPI
if (0 != self->svcs_allowed)
;
return target;
}
+static char *
+makePreferLibpqConnectString(char *target, const ConnInfo *ci, BOOL abbrev)
+{
+ char *buf = target;
+ *buf = '\0';
+
+ if (ci->prefer_libpq < 0)
+ return target;
+
+ if (abbrev)
+ sprintf(buf, ABBR_PREFERLIBPQ "=%u;", ci->prefer_libpq);
+ else
+ sprintf(buf, INI_PREFERLIBPQ "=%u;", ci->prefer_libpq);
+ return target;
+}
+
void
makeConnectString(char *connect_string, const ConnInfo *ci, UWORD len)
{
char got_dsn = (ci->dsn[0] != '\0');
- char encoded_item[LARGE_REGISTRY_LEN], keepaliveStr[64];
+ char encoded_item[LARGE_REGISTRY_LEN], keepaliveStr[64], preferLibpqStr[64];
ssize_t hlen, nlen, olen;
/*BOOL abbrev = (len <= 400);*/
BOOL abbrev = (len < 1024) || 0 < ci->force_abbrev_connstr;
INI_USESERVERSIDEPREPARE "=%d;"
INI_LOWERCASEIDENTIFIER "=%d;"
"%s"
+ "%s"
#ifdef WIN32
INI_GSSAUTHUSEGSSAPI "=%d;"
#endif /* WIN32 */
,ci->use_server_side_prepare
,ci->lower_case_identifier
,makeKeepaliveConnectString(keepaliveStr, ci, FALSE)
+ ,makePreferLibpqConnectString(preferLibpqStr, ci, FALSE)
#ifdef WIN32
,ci->gssauth_use_gssapi
#endif /* WIN32 */
INI_INT8AS "=%d;"
ABBR_EXTRASYSTABLEPREFIXES "=%s;"
"%s"
+ "%s"
INI_ABBREVIATE "=%02x%x",
encoded_item,
ci->drivers.fetch_max,
ci->int8_as,
ci->drivers.extra_systable_prefixes,
makeKeepaliveConnectString(keepaliveStr, ci, TRUE),
+ makePreferLibpqConnectString(preferLibpqStr, ci, TRUE),
EFFECTIVE_BIT_COUNT, flag);
if (olen < nlen && (PROTOCOL_74(ci) || ci->rollback_on_error >= 0))
{
ci->keepalive_idle = atoi(value);
else if (stricmp(attribute, INI_KEEPALIVEINTERVAL) == 0 || stricmp(attribute, ABBR_KEEPALIVEINTERVAL) == 0)
ci->keepalive_interval = atoi(value);
+ else if (stricmp(attribute, INI_PREFERLIBPQ) == 0 || stricmp(attribute, ABBR_PREFERLIBPQ) == 0)
+ ci->prefer_libpq = atoi(value);
else if (stricmp(attribute, INI_SSLMODE) == 0 || stricmp(attribute, ABBR_SSLMODE) == 0)
{
switch (value[0])
if (0 == (ci->keepalive_interval = atoi(temp)))
ci->keepalive_interval = -1;
}
+ if (ci->prefer_libpq < 0 || overwrite)
+ {
+ SQLGetPrivateProfileString(DSN, INI_PREFERLIBPQ, "-1", temp, sizeof(temp), ODBC_INI);
+ if (temp[0])
+ ci->prefer_libpq = atoi(temp);
+ }
if (ci->sslmode[0] == '\0' || overwrite)
SQLGetPrivateProfileString(DSN, INI_SSLMODE, "", ci->sslmode, sizeof(ci->sslmode), ODBC_INI);
INI_KEEPALIVEINTERVAL,
temp,
ODBC_INI);
+ sprintf(temp, "%d", ci->prefer_libpq);
+ SQLWritePrivateProfileString(DSN,
+ INI_PREFERLIBPQ,
+ temp,
+ ODBC_INI);
#ifdef _HANDLE_ENLIST_IN_DTC_
sprintf(temp, "%d", ci->xa_opt);
SQLWritePrivateProfileString(DSN, INI_XAOPT, temp, ODBC_INI);