From: Wez Furlong Date: Thu, 13 Jan 2005 02:06:39 +0000 (+0000) Subject: Add support for ODBCRouter X-Git-Tag: RELEASE_0_2~317 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f17311c9ddd882fd3e3774ac8b2d05ad722c9461;p=php Add support for ODBCRouter --- diff --git a/ext/odbc/config.m4 b/ext/odbc/config.m4 index b97fc6d856..7e0f320477 100644 --- a/ext/odbc/config.m4 +++ b/ext/odbc/config.m4 @@ -209,6 +209,33 @@ AC_ARG_WITH(ibm-db2, ]) fi +if test -z "$ODBC_TYPE"; then +AC_MSG_CHECKING(for ODBCRouter.com support) +AC_ARG_WITH(ODBCRouter, +[ --with-ODBCRouter[=DIR] Include ODBCRouter.com support. DIR is ODBCRouter base + install directory, defaults to /usr.], +[ + PHP_WITH_SHARED + if test "$withval" = "yes"; then + withval=/usr + fi + if test "$withval" != "no"; then + ODBC_INCDIR=$withval/include + ODBC_LIBDIR=$withval/lib + ODBC_LFLAGS=-L$ODBC_LIBDIR + ODBC_INCLUDE=-I$ODBC_INCDIR + ODBC_LIBS=-lodbcsdk + ODBC_TYPE=ODBCRouter + AC_DEFINE(HAVE_ODBC_ROUTER,1,[ ]) + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no) + fi +],[ + AC_MSG_RESULT(no) +]) +fi + if test -z "$ODBC_TYPE"; then AC_MSG_CHECKING(for Empress support) AC_ARG_WITH(empress, diff --git a/ext/odbc/php_odbc.c b/ext/odbc/php_odbc.c index c7eedc5c84..438204f21c 100644 --- a/ext/odbc/php_odbc.c +++ b/ext/odbc/php_odbc.c @@ -2073,6 +2073,47 @@ int odbc_sqlconnect(odbc_connection **conn, char *db, char *uid, char *pwd, int SQLSetConnectOption((*conn)->hdbc, SQL_TRANSLATE_OPTION, SQL_SOLID_XLATOPT_NOCNV); #endif +#ifdef HAVE_ODBC_ROUTER + { +#define CONNSTRSIZE 2048 + char *lpszConnStr = emalloc(CONNSTRSIZE); + if (lpszConnStr && db) { + short cbszConnStr; + if (strstr(db, ";")) { + /* the caller has apparently passed a connection-string */ + if (strstr(db, "uid") || strstr(db, "UID")) { + uid = NULL; + } + if (strstr(db, "pwd") || strstr(db, "PWD")) { + pwd = NULL; + } + strncpy( lpszConnStr, db, CONNSTRSIZE); + } + else { + strcpy(lpszConnStr, "DSN="); + strcat(lpszConnStr, db); + } + if (uid) { + if (uid[0]) { + strcat(lpszConnStr, ";UID="); + strcat(lpszConnStr, uid); + strcat(lpszConnStr, ";"); + } + if (pwd) { + if (pwd[0]) { + strcat(lpszConnStr, "PWD="); + strcat(lpszConnStr, pwd); + strcat(lpszConnStr, ";"); + } + } + } + rc = SQLDriverConnect((*conn)->hdbc, NULL, lpszConnStr, SQL_NTS, + lpszConnStr, CONNSTRSIZE, &cbszConnStr, + SQL_DRIVER_NOPROMPT); + efree(lpszConnStr); + } + } +#else #ifdef HAVE_OPENLINK { char dsnbuf[1024]; @@ -2130,6 +2171,7 @@ int odbc_sqlconnect(odbc_connection **conn, char *db, char *uid, char *pwd, int #else rc = SQLConnect((*conn)->hdbc, db, SQL_NTS, uid, SQL_NTS, pwd, SQL_NTS); #endif +#endif #endif if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { odbc_sql_error(*conn, SQL_NULL_HSTMT, "SQLConnect"); diff --git a/ext/odbc/php_odbc_includes.h b/ext/odbc/php_odbc_includes.h index 4a2f1ec176..6bbd0ee957 100644 --- a/ext/odbc/php_odbc_includes.h +++ b/ext/odbc/php_odbc_includes.h @@ -126,6 +126,20 @@ PHP_FUNCTION(solid_fetch_prev); #include #define HAVE_SQL_EXTENDED_FETCH 1 +#elif defined(HAVE_ODBC_ROUTER) /* ODBCRouter.com */ + +#ifdef CHAR +#undef CHAR +#endif + +#ifdef SQLCHAR +#undef SQLCHAR +#endif + +#define ODBC_TYPE "ODBCRouter" +#include +#undef HAVE_SQL_EXTENDED_FETCH + #elif defined(HAVE_OPENLINK) /* OpenLink ODBC drivers */ #define ODBC_TYPE "Openlink"