From 9b06ac62607bd85f49110cd00c6b93d37f643967 Mon Sep 17 00:00:00 2001 From: bijaya Date: Fri, 8 May 2009 06:50:09 +0000 Subject: [PATCH] Odbc connection string --- src/odbc/odbcDbc.cxx | 122 ++++++++++++++++++++++++++++++++++++++------------- src/odbc/odbcDbc.h | 11 ++++- 2 files changed, 101 insertions(+), 32 deletions(-) diff --git a/src/odbc/odbcDbc.cxx b/src/odbc/odbcDbc.cxx index bcf444de..b376dfe2 100644 --- a/src/odbc/odbcDbc.cxx +++ b/src/odbc/odbcDbc.cxx @@ -118,17 +118,38 @@ SQLRETURN SQLDriverConnect( SQLSMALLINT * StringLength2Ptr, SQLUSMALLINT DriverCompletion) { - printf("Connection string is %s\n", InConnectionString); // Validate handle if( isValidHandle( ConnectionHandle, SQL_HANDLE_DBC ) != SQL_SUCCESS ) return( SQL_INVALID_HANDLE ); - return( ((CSqlOdbcDbc*) ConnectionHandle)->SQLConnect((SQLCHAR*)"a", - (SQLSMALLINT)strlen("a"), (SQLCHAR*)"root", (SQLSMALLINT)strlen("root"), + return( ((CSqlOdbcDbc*) ConnectionHandle)->SQLConnect(InConnectionString, + SQL_NTS, (SQLCHAR*)"root", (SQLSMALLINT)strlen("root"), (SQLCHAR*)"manager", (SQLSMALLINT)strlen("manager")) ); } +char * CSqlOdbcDbc::getFromUrl(char *url,char *name) +{ + char *token=NULL, *subtoken=NULL; + char *saveptr1, *saveptr2,*str1,*str2; + for ( str1 = url; ; str1 = NULL) { + token = strtok_r(str1, ";" , &saveptr1); + if (token == NULL) + break; + // printf("TOKEN: %s\n",token); + str2 = token; + subtoken = strtok_r(str2, "=", &saveptr2); + //printf(" --> %s\n", subtoken); + if (subtoken != NULL){ + if(strcasecmp(subtoken,name)==0) + { + return strtok_r(NULL,"=",&saveptr2); + } + } + } + return NULL; +} + SQLRETURN SQLConnect( // All param's are IN SQLHDBC ConnectionHandle, SQLCHAR *ServerName, @@ -156,6 +177,7 @@ SQLRETURN CSqlOdbcDbc::SQLConnect( // All param's are IN { int rc; char str[IDENTIFIER_LENGTH]; + char *dsn=NULL; char *hostName = NULL; char *portNo = NULL; char *connMode = NULL; @@ -176,39 +198,52 @@ SQLRETURN CSqlOdbcDbc::SQLConnect( // All param's are IN err_.set( ERROR_CONNINUSE); return ( SQL_ERROR ); } - + strncpy(str,(char *) serverName, IDENTIFIER_LENGTH); - connMode = strtok(str, ";"); - hostName = strtok(NULL, ";"); - portNo = strtok(NULL, ";"); - if ((strcasecmp((char*)connMode, "Network") == 0) && (hostName == NULL || portNo == NULL)) return ( SQL_ERROR ); - if (strcasecmp((char*)connMode, "Adapter") == 0) - { - fsqlConn_ = SqlFactory::createConnection(CSqlAdapter); - mode_ = 2; - }else if (strcasecmp((char*)connMode, "Gateway") == 0){ - fsqlConn_ = SqlFactory::createConnection(CSqlGateway); - mode_ = 3; - } else if (strcasecmp((char*)connMode, "Network") == 0) { - fsqlConn_ = SqlFactory::createConnection(CSqlNetwork); - SqlNwConnection *con = (SqlNwConnection *)fsqlConn_; - con->setHost(hostName, atoi(portNo)); - mode_ = 4; - } else if (strcasecmp((char*)connMode, "NetworkAdapter") == 0) { - fsqlConn_ = SqlFactory::createConnection(CSqlNetworkAdapter); - SqlNwConnection *con = (SqlNwConnection *)fsqlConn_; - con->setHost(hostName, atoi(portNo)); - mode_ = 5; - } else if (strcasecmp((char*)connMode, "NetworkGateway") == 0) { - fsqlConn_ = SqlFactory::createConnection(CSqlNetworkGateway); - SqlNwConnection *con = (SqlNwConnection *)fsqlConn_; - con->setHost(hostName, atoi(portNo)); - mode_ = 6; + dsn = getFromUrl(str,"DSN"); + strncpy(str,(char *) serverName, IDENTIFIER_LENGTH); + connMode = getFromUrl(str,"MODE"); + strncpy(str,(char *) serverName, IDENTIFIER_LENGTH); + hostName = getFromUrl(str,"SERVER"); + strncpy(str,(char *) serverName, IDENTIFIER_LENGTH); + portNo = getFromUrl(str,"PORT"); + //printf("Mode=%s , hostName=%s port=%s\n",connMode,hostName,portNo); + if(NULL != connMode){ + if (hostName == NULL || portNo == NULL) return ( SQL_ERROR ); + if (strcasecmp((char*)hostName, "localhost") == 0 ){ + if (strcasecmp((char*)connMode, "Gateway") == 0){ + fsqlConn_ = SqlFactory::createConnection(CSqlGateway); + mode_ = 3; + }else if (strcasecmp((char*)connMode, "Adapter") == 0){ + fsqlConn_ = SqlFactory::createConnection(CSqlAdapter); + mode_ = 2; + }else if (strcasecmp((char*)connMode, "csql") == 0){ + fsqlConn_ = SqlFactory::createConnection(CSql); + mode_ = 1; + }else return ( SQL_ERROR ); + } else { + if (strcasecmp((char*)connMode, "Gateway") == 0){ + fsqlConn_ = SqlFactory::createConnection(CSqlNetworkGateway); + SqlNwConnection *con = (SqlNwConnection *)fsqlConn_; + con->setHost(hostName, atoi(portNo)); + mode_ = 6; + }else if (strcasecmp((char*)connMode, "Adapter") == 0){ + fsqlConn_ = SqlFactory::createConnection(CSqlNetworkAdapter); + SqlNwConnection *con = (SqlNwConnection *)fsqlConn_; + con->setHost(hostName, atoi(portNo)); + mode_ = 5; + }else if (strcasecmp((char*)connMode, "csql") == 0){ + fsqlConn_ = SqlFactory::createConnection(CSqlNetwork); + SqlNwConnection *con = (SqlNwConnection *)fsqlConn_; + con->setHost(hostName, atoi(portNo)); + mode_ = 4; + }else return ( SQL_ERROR ); + + } }else{ fsqlConn_ = SqlFactory::createConnection(CSql); mode_ = 1; } - rc = fsqlConn_->connect( (char*) user, (char*) pass ); if( rc != OK ) { @@ -230,6 +265,7 @@ SQLRETURN CSqlOdbcDbc::SQLConnect( // All param's are IN return( SQL_SUCCESS ); } + SQLRETURN SQLDisconnect( SQLHDBC ConnectionHandle) // IN { @@ -471,3 +507,27 @@ SQLRETURN CSqlOdbcDbc::SQLGetConnectAttr( return( SQL_SUCCESS ); } + +SQLRETURN SQLGetInfo( + SQLHDBC ConnectionHandle, + SQLUSMALLINT InfoType, + SQLPOINTER InfoValuePtr, + SQLSMALLINT BufferLength, + SQLSMALLINT * StringLengthPtr) +{ + if( isValidHandle( ConnectionHandle, SQL_HANDLE_DBC ) != SQL_SUCCESS ) + return( SQL_INVALID_HANDLE ); + + return( ((CSqlOdbcDbc*)ConnectionHandle)->SQLGetInfo( InfoType,InfoValuePtr,BufferLength,StringLengthPtr ) ); + +} + +SQLRETURN CSqlOdbcDbc::SQLGetInfo( + SQLUSMALLINT InfoType, + SQLPOINTER InfoValuePtr, + SQLSMALLINT BufferLength, + SQLSMALLINT * StringLengthPtr) +{ + return (SQL_SUCCESS); +} + diff --git a/src/odbc/odbcDbc.h b/src/odbc/odbcDbc.h index 73e64f0f..368102dc 100644 --- a/src/odbc/odbcDbc.h +++ b/src/odbc/odbcDbc.h @@ -56,7 +56,7 @@ class CSqlOdbcDbc SQLRETURN chkStateForSQLDisconnect( void ); SQLRETURN chkStateForSQLEndTran( void ); SQLRETURN chkStateForSQLSetConnectAttr( void ); - + // ODBC API's static SQLRETURN SQLAllocHandle( SQLHANDLE inputHandle, // IN @@ -89,7 +89,16 @@ class CSqlOdbcDbc SQLINTEGER bufferLength, // IN SQLINTEGER *stringLength); // OUT + SQLRETURN SQLGetInfo( + SQLUSMALLINT InfoType, + SQLPOINTER InfoValuePtr, + SQLSMALLINT BufferLength, + SQLSMALLINT * StringLengthPtr); + + + // Others + char *getFromUrl(char *url,char *name); }; #endif // _ODBC_DBC_H_ -- 2.11.4.GIT