[PHP-DEV] CVS update: php3/functions From: kara (php-dev <email protected>)
Date: 11/11/98

Date: Wednesday November 11, 1998 @ 7:27
Author: kara

Update of /repository/php3/functions
In directory asf:/u2/tmp/cvs-serv7293

Modified Files:
        php3_unified_odbc.h unified_odbc.c
Log Message:
odbc should work again, added odbc cursor patch by Dave Walton

Index: php3/functions/php3_unified_odbc.h
diff -c php3/functions/php3_unified_odbc.h:1.39 php3/functions/php3_unified_odbc.h:1.40
*** php3/functions/php3_unified_odbc.h:1.39 Tue Nov 3 14:06:57 1998
--- php3/functions/php3_unified_odbc.h Wed Nov 11 07:27:13 1998
***************
*** 29,35 ****
     +----------------------------------------------------------------------+
   */
  
! /* $Id: php3_unified_odbc.h,v 1.39 1998/11/03 19:06:57 shane Exp $ */
  
  #ifndef _UNIFIED_ODBC_H
  #define _UNIFIED_ODBC_H
--- 29,35 ----
     +----------------------------------------------------------------------+
   */
  
! /* $Id: php3_unified_odbc.h,v 1.40 1998/11/11 12:27:13 kara Exp $ */
  
  #ifndef _UNIFIED_ODBC_H
  #define _UNIFIED_ODBC_H
***************
*** 65,70 ****
--- 65,71 ----
  # if defined(UODBC_UNIQUE_NAMES)
  # define UODBC_TYPE solid
  # define UODBC_FE(name, arg_types) UODBC_NAMED_FE(solid_##name, php3_solid_##name, arg_types)
+ # define UODBC_FE_ALIAS(php_name, name, arg_types) UODBC_NAMED_FE(solid_##php_name, php3_solid_##name, arg_types)
  # define UODBC_FUNCTION(name) UODBC_NAMED_FUNCTION(php3_solid_##name)
  # define UODBC_FNAME(name) php3i_solid_##name
  # define ODBC_INI_VAR_NAME(name) #name
***************
*** 76,81 ****
--- 77,101 ----
  # define solid_module_ptr &UODBC_MODULE_ENTRY
  # endif
  
+ #elif HAVE_ADABAS
+ #include <WINDOWS.H>
+ #include <sql.h>
+ #include <sqlext.h>
+ # define HAVE_SQL_EXTENDED_FETCH 1
+ # if defined(UODBC_UNIQUE_NAMES)
+ # define UODBC_TYPE adabas
+ # define UODBC_FE(name, arg_types) UODBC_NAMED_FE(ada_##name, php3_ada_##name, arg_types)
+ # define UODBC_FE_ALIAS(php_name, name, arg_types) UODBC_NAMED_FE(ada_##php_name, php3_ada_##name, arg_types)
+ # define UODBC_FUNCTION(name) UODBC_NAMED_FUNCTION(php3_ada_##name)
+ # define UODBC_FNAME(name) php3i_ada_##name
+ # define ODBC_INI_VAR_NAME(name) #name
+ # define ODBC_INI_VAR(a) ODBC_INI_VAR_NAME(ada.##a)
+ # define UODBC_VAR_NAME(name) name
+ # define UODBC_VAR(a) UODBC_VAR_NAME(ada_##a)
+ # define PHP3_UODBC_VAR(a) UODBC_VAR_NAME(php3_ada_##a)
+ # define UODBC_MODULE_ENTRY UODBC_VAR(module_entry)
+ # define ada_module_ptr &UODBC_MODULE_ENTRY
+ # endif
  
  # elif HAVE_IODBC && !(WIN32|WINNT)
  # include <isql.h>
***************
*** 92,97 ****
--- 112,118 ----
  # if defined(UODBC_UNIQUE_NAMES)
  # define UODBC_TYPE iodbc
  # define UODBC_FE(name, arg_types) UODBC_NAMED_FE(iodbc_##name, php3_iodbc_##name, arg_types)
+ # define UODBC_FE_ALIAS(php_name, name, arg_types) UODBC_NAMED_FE(iodbc_##php_name, php3_iodbc_##name, arg_types)
  # define UODBC_FUNCTION(name) UODBC_NAMED_FUNCTION(php3_iodbc_##name)
  # define UODBC_FNAME(name) php3i_iodbc_##name
  # define ODBC_INI_VAR_NAME(name) #name
***************
*** 113,118 ****
--- 134,140 ----
  # if defined(UODBC_UNIQUE_NAMES)
  # define UODBC_TYPE opnlnk
  # define UODBC_FE(name, arg_types) UODBC_NAMED_FE(opnlnk_##name, php3_opnlnk_##name, arg_types)
+ # define UODBC_FE_ALIAS(php_name, name, arg_types) UODBC_NAMED_FE(opnlnk_##php_name, php3_opnlnk_##name, arg_types)
  # define UODBC_FUNCTION(name) UODBC_NAMED_FUNCTION(php3_opnlnk_##name)
  # define UODBC_FNAME(name) php3i_opnlnk_##name
  # define ODBC_INI_VAR_NAME(name) #name
***************
*** 133,138 ****
--- 155,161 ----
  # if defined(UODBC_UNIQUE_NAMES)
  # define UODBC_TYPE velocis
  # define UODBC_FE(name, arg_types) UODBC_NAMED_FE(velocis_##name, php3_velocis_##name, arg_types)
+ # define UODBC_FE_ALIAS(php_name, name, arg_types) UODBC_NAMED_FE(velocis_##php_name, php3_velocis_##name, arg_types)
  # define UODBC_FUNCTION(name) UODBC_NAMED_FUNCTION(php3_velocis_##name)
  # define UODBC_FNAME(name) php3i_velocis_##name
  # define ODBC_INI_VAR_NAME(name) #name
***************
*** 150,155 ****
--- 173,179 ----
  # if defined(UODBC_UNIQUE_NAMES)
  # define UODBC_TYPE codbc
  # define UODBC_FE(name, arg_types) UODBC_NAMED_FE(codbc_##name, php3_codbc_##name, arg_types)
+ # define UODBC_FE_ALIAS(php_name, name, arg_types) UODBC_NAMED_FE(codbc_##php_name, php3_codbc_##name, arg_types)
  # define UODBC_FUNCTION(name) UODBC_NAMED_FUNCTION(php3_codbc_##name)
  # define UODBC_FNAME(name) php3i_codbc_##name
  # define ODBC_INI_VAR_NAME(name) #name
***************
*** 171,176 ****
--- 195,201 ----
  # if defined(UODBC_UNIQUE_NAMES)
  # define UODBC_TYPE db2
  # define UODBC_FE(name, arg_types) UODBC_NAMED_FE(db2_##name, php3_db2_##name, arg_types)
+ # define UODBC_FE_ALIAS(php_name, name, arg_types) UODBC_NAMED_FE(db2_##php_name, php3_db2_##name, arg_types)
  # define UODBC_FUNCTION(name) UODBC_NAMED_FUNCTION(php3_db2_##name)
  # define UODBC_FNAME(name) php3i_db2_##name
  # define ODBC_INI_VAR_NAME(name) #name
***************
*** 190,195 ****
--- 215,221 ----
  # if defined(UODBC_UNIQUE_NAMES)
  # define UODBC_TYPE wodbc
  # define UODBC_FE(name, arg_types) UODBC_NAMED_FE(wodbc_##name, php3_wodbc_##name, arg_types)
+ # define UODBC_FE_ALIAS(php_name, name, arg_types) UODBC_NAMED_FE(wodbc_##php_name, php3_wodbc_##name, arg_types)
  # define UODBC_FUNCTION(name) UODBC_NAMED_FUNCTION(php3_wodbc_##name)
  # define UODBC_FNAME(name) php3i_wodbc_##name
  # define ODBC_INI_VAR_NAME(name) #name
***************
*** 206,211 ****
--- 232,238 ----
  #if !defined(UODBC_UNIQUE_NAMES)
  #define UODBC_TYPE odbc
  #define UODBC_FE(name, arg_types) UODBC_NAMED_FE(odbc_##name, php3_odbc_##name, arg_types)
+ #define UODBC_FE_ALIAS(php_name, name, arg_types) UODBC_NAMED_FE(odbc_##php_name, php3_odbc_##name, arg_types)
  #define UODBC_FUNCTION(name) UODBC_NAMED_FUNCTION(php3_odbc_##name)
  #define UODBC_FNAME(name) php3i_odbc_##name
  #define ODBC_INI_VAR_NAME(name) #name
***************
*** 217,222 ****
--- 244,250 ----
  #define uodbc_module_ptr &UODBC_MODULE_ENTRY
  #else
  #define UODBC_ALIAS(name, arg_types) UODBC_NAMED_FE(odbc_##name, php3_odbc_##name, arg_types)
+ #define UODBC_ALIAS_FE(php_name, name, arg_types) UODBC_NAMED_FE(odbc_##php_name, php3_odbc_##name, arg_types)
  #endif
  
  
***************
*** 281,287 ****
  extern void PHP3_UODBC_DO_CONNECT(INTERNAL_FUNCTION_PARAMETERS, int);
  extern UODBC_FUNCTION(cursor);
  extern UODBC_FUNCTION(exec);
! extern UODBC_FUNCTION(do);
  extern UODBC_FUNCTION(execute);
  extern UODBC_FUNCTION(fetch_into);
  extern UODBC_FUNCTION(fetch_row);
--- 309,315 ----
  extern void PHP3_UODBC_DO_CONNECT(INTERNAL_FUNCTION_PARAMETERS, int);
  extern UODBC_FUNCTION(cursor);
  extern UODBC_FUNCTION(exec);
! /*extern UODBC_FUNCTION(do);*/
  extern UODBC_FUNCTION(execute);
  extern UODBC_FUNCTION(fetch_into);
  extern UODBC_FUNCTION(fetch_row);
Index: php3/functions/unified_odbc.c
diff -c php3/functions/unified_odbc.c:1.87 php3/functions/unified_odbc.c:1.88
*** php3/functions/unified_odbc.c:1.87 Mon Nov 2 12:13:59 1998
--- php3/functions/unified_odbc.c Wed Nov 11 07:27:13 1998
***************
*** 89,95 ****
          UODBC_FE(connect, NULL),
          UODBC_FE(pconnect, NULL),
          UODBC_FE(cursor, NULL),
! UODBC_FE(do, NULL),
          UODBC_FE(exec, NULL),
          UODBC_FE(prepare, NULL),
          UODBC_FE(execute, NULL),
--- 89,95 ----
          UODBC_FE(connect, NULL),
          UODBC_FE(pconnect, NULL),
          UODBC_FE(cursor, NULL),
! UODBC_FE_ALIAS(do, exec, NULL),
          UODBC_FE(exec, NULL),
          UODBC_FE(prepare, NULL),
          UODBC_FE(execute, NULL),
***************
*** 116,122 ****
          UODBC_ALIAS(connect, NULL),
          UODBC_ALIAS(pconnect, NULL),
          UODBC_ALIAS(cursor, NULL),
! UODBC_ALIAS(do, NULL),
          UODBC_ALIAS(exec, NULL),
          UODBC_ALIAS(prepare, NULL),
          UODBC_ALIAS(execute, NULL),
--- 116,122 ----
          UODBC_ALIAS(connect, NULL),
          UODBC_ALIAS(pconnect, NULL),
          UODBC_ALIAS(cursor, NULL),
! UODBC_ALIAS_FE(do, exec, NULL),
          UODBC_ALIAS(exec, NULL),
          UODBC_ALIAS(prepare, NULL),
          UODBC_ALIAS(execute, NULL),
***************
*** 335,341 ****
          REGISTER_LONG_CONSTANT("ODBC_BINMODE_PASSTHRU", 0, CONST_CS | CONST_PERSISTENT);
          REGISTER_LONG_CONSTANT("ODBC_BINMODE_RETURN", 1, CONST_CS | CONST_PERSISTENT);
          REGISTER_LONG_CONSTANT("ODBC_BINMODE_CONVERT", 2, CONST_CS | CONST_PERSISTENT);
!
          return SUCCESS;
  }
  
--- 335,347 ----
          REGISTER_LONG_CONSTANT("ODBC_BINMODE_PASSTHRU", 0, CONST_CS | CONST_PERSISTENT);
          REGISTER_LONG_CONSTANT("ODBC_BINMODE_RETURN", 1, CONST_CS | CONST_PERSISTENT);
          REGISTER_LONG_CONSTANT("ODBC_BINMODE_CONVERT", 2, CONST_CS | CONST_PERSISTENT);
! /* Define Constants for different cursor options
! these Constants are are defined in <sqlext.h>
! */
! REGISTER_MAIN_LONG_CONSTANT("SQL_CUR_USE_IF_NEEDED", SQL_CUR_USE_IF_NEEDED, CONST_PERSISTENT | CONST_CS);
! REGISTER_MAIN_LONG_CONSTANT("SQL_CUR_USE_ODBC", SQL_CUR_USE_ODBC, CONST_PERSISTENT | CONST_CS);
! REGISTER_MAIN_LONG_CONSTANT("SQL_CUR_USE_DRIVER", SQL_CUR_USE_DRIVER, CONST_PERSISTENT | CONST_CS);
! REGISTER_MAIN_LONG_CONSTANT("SQL_CUR_DEFAULT", SQL_CUR_DEFAULT, CONST_PERSISTENT | CONST_CS);
          return SUCCESS;
  }
  
***************
*** 947,957 ****
          }
  }
  
- UODBC_FUNCTION(do)
- {
- UODBC_FUNCTION(exec);
- }
-
  UODBC_FUNCTION(exec)
  {
          pval *arg1, *arg2;
--- 953,958 ----
***************
*** 1460,1466 ****
              RETURN_FALSE;
          }
          /* chop the trailing \0 by outputing only 4095 bytes */
! php3_printf(field,(rc == SQL_SUCCESS_WITH_INFO) ? 4095 :
                             result->values[field_ind].vallen);
  
                  if (rc == SQL_SUCCESS) { /* no more data avail */
--- 1461,1467 ----
              RETURN_FALSE;
          }
          /* chop the trailing \0 by outputing only 4095 bytes */
! PHPWRITE(field,(rc == SQL_SUCCESS_WITH_INFO) ? 4095 :
                             result->values[field_ind].vallen);
  
                  if (rc == SQL_SUCCESS) { /* no more data avail */
***************
*** 1641,1661 ****
          char *db = NULL;
          char *uid = NULL;
          char *pwd = NULL;
! pval *arg1, *arg2, *arg3;
          UODBC_CONNECTION *db_conn;
          RETCODE rc;
          list_entry *index_ptr;
          char *hashed_details;
! int hashed_len, len, id;
          UODBC_TLS_VARS;
  
          UODBC_GLOBAL(PHP3_UODBC_MODULE).resource_list = list;
          UODBC_GLOBAL(PHP3_UODBC_MODULE).resource_plist = plist;
!
! if (getParameters(ht, 3, &arg1, &arg2, &arg3) == FAILURE) {
! WRONG_PARAM_COUNT;
          }
!
          convert_to_string(arg1);
          convert_to_string(arg2);
          convert_to_string(arg3);
--- 1642,1690 ----
          char *db = NULL;
          char *uid = NULL;
          char *pwd = NULL;
! pval *arg1, *arg2, *arg3, *arg4;
          UODBC_CONNECTION *db_conn;
          RETCODE rc;
          list_entry *index_ptr;
          char *hashed_details;
! int hashed_len, len, id, cur_opt;
          UODBC_TLS_VARS;
  
          UODBC_GLOBAL(PHP3_UODBC_MODULE).resource_list = list;
          UODBC_GLOBAL(PHP3_UODBC_MODULE).resource_plist = plist;
!
! /* Now an optional 4th parameter specifying the cursor type
! * defaulting to the cursors default
! */
! switch(ARG_COUNT(ht)) {
! case 3:
! if (getParameters(ht, 3, &arg1, &arg2, &arg3) == FAILURE) {
! WRONG_PARAM_COUNT;
! }
! /* Use Default: Probably a better way to do this */
! cur_opt = SQL_CUR_DEFAULT;
! break;
! case 4:
! if (getParameters(ht, 4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
! WRONG_PARAM_COUNT;
! }
! convert_to_long(arg4);
! cur_opt = arg4->value.lval;
!
! /* Confirm the cur_opt range */
! if (! (cur_opt == SQL_CUR_USE_IF_NEEDED ||
! cur_opt == SQL_CUR_USE_ODBC ||
! cur_opt == SQL_CUR_USE_DRIVER ||
! cur_opt == SQL_CUR_DEFAULT) ) {
! php3_error(E_WARNING, "uODBC: Invalid Cursor type (%d)", cur_opt);
! RETURN_FALSE;
! }
! break;
! default:
! WRONG_PARAM_COUNT;
! break;
          }
!
          convert_to_string(arg1);
          convert_to_string(arg2);
          convert_to_string(arg3);
***************
*** 1664,1670 ****
          uid = arg2->value.str.val;
          pwd = arg3->value.str.val;
  
! if (!UODBC_GLOBAL(PHP3_UODBC_MODULE).allow_persistent) {
                  persistent = 0;
          }
  
--- 1693,1699 ----
          uid = arg2->value.str.val;
          pwd = arg3->value.str.val;
  
! if (UODBC_GLOBAL(PHP3_UODBC_MODULE).allow_persistent <= 0) {
                  persistent = 0;
          }
  
***************
*** 1694,1700 ****
                  RETURN_FALSE;
          }
  
! hashed_len = _php3_sprintf(hashed_details, "uodbc_%s_%s_%s", db, uid, pwd);
  
          /* FIXME the idea of checking to see if our connection is already persistent
                  is good, but it adds a lot of overhead to non-persistent connections. We
--- 1723,1729 ----
                  RETURN_FALSE;
          }
  
! hashed_len = _php3_sprintf(hashed_details, "uodbc_%s_%s_%s_%d", db, uid, pwd, cur_opt);
  
          /* FIXME the idea of checking to see if our connection is already persistent
                  is good, but it adds a lot of overhead to non-persistent connections. We
***************
*** 1731,1736 ****
--- 1760,1778 ----
                                                                    SQL_DRIVER_COMPLETE);
                  }
  #else
+ if(cur_opt != SQL_CUR_DEFAULT){
+ rc = SQLSetConnectOption(db_conn->hdbc, SQL_ODBC_CURSORS, cur_opt);
+ if (rc != SQL_SUCCESS ) { /* && rc != SQL_SUCCESS_WITH_INFO ? */
+ UODBC_SQL_ERROR(db_conn->hdbc, SQL_NULL_HSTMT, "SQLSetConnectOption");
+ SQLFreeConnect(db_conn->hdbc);
+ if (persistent)
+ free(db_conn);
+ else
+ efree(db_conn);
+ RETURN_FALSE;
+ }
+ }
+
                  rc = SQLConnect(db_conn->hdbc, db, SQL_NTS, uid, SQL_NTS, pwd, SQL_NTS);
  #endif
  
***************
*** 2058,2064 ****
          } else {
                  SDWORD status;
  
! rc = SQLGetConnectOption(curr_conn->hdbc, SQL_AUTOCOMMIT, &status);
                  if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO){
                          UODBC_SQL_ERROR(curr_conn->hdbc, SQL_NULL_HSTMT, "Test autocommit");
                          RETURN_FALSE;
--- 2100,2106 ----
          } else {
                  SDWORD status;
  
! rc = SQLGetConnectOption(curr_conn->hdbc, SQL_AUTOCOMMIT, (PTR)&status);
                  if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO){
                          UODBC_SQL_ERROR(curr_conn->hdbc, SQL_NULL_HSTMT, "Test autocommit");
                          RETURN_FALSE;

--
PHP Development Mailing List   http://www.php.net/
To unsubscribe send an empty message to php-dev-unsubscribe <email protected>
For help: php-dev-help <email protected>