summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWez Furlong <wez@php.net>2005-01-13 02:06:39 +0000
committerWez Furlong <wez@php.net>2005-01-13 02:06:39 +0000
commitf17311c9ddd882fd3e3774ac8b2d05ad722c9461 (patch)
treeee9e84f7351acb2cfaa54e25027efe25dfc5fff9
parentef0de01b62abcaaa72d85c64d27adcbc5945e157 (diff)
downloadphp-git-f17311c9ddd882fd3e3774ac8b2d05ad722c9461.tar.gz
Add support for ODBCRouter
-rw-r--r--ext/odbc/config.m427
-rw-r--r--ext/odbc/php_odbc.c42
-rw-r--r--ext/odbc/php_odbc_includes.h14
3 files changed, 83 insertions, 0 deletions
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
@@ -210,6 +210,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,
[ --with-empress[=DIR] Include Empress support. DIR is the Empress base
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];
@@ -2131,6 +2172,7 @@ int odbc_sqlconnect(odbc_connection **conn, char *db, char *uid, char *pwd, int
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");
SQLFreeConnect((*conn)->hdbc);
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 <sqlext.h>
#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 <odbcsdk.h>
+#undef HAVE_SQL_EXTENDED_FETCH
+
#elif defined(HAVE_OPENLINK) /* OpenLink ODBC drivers */
#define ODBC_TYPE "Openlink"