]> granicus.if.org Git - php/commitdiff
The start of adding odbc_data_source() functionality
authorDan Kalowsky <kalowsky@php.net>
Sun, 11 Aug 2002 23:39:03 +0000 (23:39 +0000)
committerDan Kalowsky <kalowsky@php.net>
Sun, 11 Aug 2002 23:39:03 +0000 (23:39 +0000)
ext/odbc/php_odbc.c
ext/odbc/php_odbc.h

index dac5901b8c4fce1a38d5549558e82637e9618938..5e7043c45bd3a606bf21c1bd3305214484edc3db 100644 (file)
@@ -73,23 +73,23 @@ static unsigned char a3_arg3_and_3_force_ref[] = { 3, BYREF_NONE, BYREF_FORCE, B
 /* {{{ odbc_functions[]
  */
 function_entry odbc_functions[] = {
-       PHP_FE(odbc_error, NULL)
-       PHP_FE(odbc_errormsg, NULL)
-       PHP_FE(odbc_setoption, NULL)
        PHP_FE(odbc_autocommit, NULL)
+       PHP_FE(odbc_binmode, NULL)
        PHP_FE(odbc_close, NULL)
        PHP_FE(odbc_close_all, NULL)
+       PHP_FE(odbc_columns, NULL)
        PHP_FE(odbc_commit, NULL)
        PHP_FE(odbc_connect, NULL)
-       PHP_FE(odbc_pconnect, NULL)
        PHP_FE(odbc_cursor, NULL)
+       PHP_FE(odbc_data_source, NULL)
+       PHP_FE(odbc_execute, NULL)
+       PHP_FE(odbc_error, NULL)
+       PHP_FE(odbc_errormsg, NULL)
+       PHP_FE(odbc_exec, NULL)
 #ifdef HAVE_DBMAKER
        PHP_FE(odbc_fetch_array, NULL)
        PHP_FE(odbc_fetch_object, NULL)
 #endif
-       PHP_FE(odbc_exec, NULL)
-       PHP_FE(odbc_prepare, NULL)
-       PHP_FE(odbc_execute, NULL)
        PHP_FE(odbc_fetch_row, NULL)
        PHP_FE(odbc_fetch_into, a3_arg3_and_3_force_ref)
        PHP_FE(odbc_field_len, NULL)
@@ -98,19 +98,22 @@ function_entry odbc_functions[] = {
        PHP_FE(odbc_field_type, NULL)
        PHP_FE(odbc_field_num, NULL)
        PHP_FE(odbc_free_result, NULL)
+       PHP_FE(odbc_gettypeinfo, NULL)
+       PHP_FE(odbc_longreadlen, NULL)
 #if !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30)
        PHP_FE(odbc_next_result, NULL)
 #endif
        PHP_FE(odbc_num_fields, NULL)
        PHP_FE(odbc_num_rows, NULL)
+       PHP_FE(odbc_pconnect, NULL)
+       PHP_FE(odbc_prepare, NULL)
        PHP_FE(odbc_result, NULL)
        PHP_FE(odbc_result_all, NULL)
        PHP_FE(odbc_rollback, NULL)
-       PHP_FE(odbc_binmode, NULL)
-       PHP_FE(odbc_longreadlen, NULL)
+       PHP_FE(odbc_setoption, NULL)
+       PHP_FE(odbc_specialcolumns, NULL)
+       PHP_FE(odbc_statistics, NULL)
        PHP_FE(odbc_tables, NULL)
-       PHP_FE(odbc_columns, NULL)
-       PHP_FE(odbc_gettypeinfo, NULL)
        PHP_FE(odbc_primarykeys, NULL)
 #if !defined(HAVE_DBMAKER) && !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) &&!defined(HAVE_SOLID_35) && !defined(HAVE_BIRDSTEP)    /* not supported now */
        PHP_FE(odbc_columnprivileges, NULL)
@@ -123,8 +126,6 @@ function_entry odbc_functions[] = {
        PHP_FE(odbc_procedurecolumns, NULL)
 #endif
 #endif
-       PHP_FE(odbc_specialcolumns, NULL)
-       PHP_FE(odbc_statistics, NULL)
        PHP_FALIAS(odbc_do, odbc_exec, NULL)
        PHP_FALIAS(odbc_field_precision, odbc_field_len, NULL)
        { NULL, NULL, NULL }
@@ -163,6 +164,7 @@ static void _free_odbc_result(zend_rsrc_list_entry *rsrc TSRMLS_DC)
 {
        odbc_result *res = (odbc_result *)rsrc->ptr;
        int i;
+       RETCODE rc;
        
        if (res) {
                if (res->values) {
@@ -178,7 +180,7 @@ static void _free_odbc_result(zend_rsrc_list_entry *rsrc TSRMLS_DC)
                        SQLTransact(res->conn_ptr->henv, res->conn_ptr->hdbc,
                                                (UWORD)SQL_COMMIT);
 #endif
-                       SQLFreeStmt(res->stmt,SQL_DROP);
+                       rc = SQLFreeStmt(res->stmt,SQL_DROP);
                        /* We don't want the connection to be closed after the last statment has been closed
                         * Connections will be closed on shutdown
                         * zend_list_delete(res->conn_ptr->id);
@@ -402,6 +404,14 @@ PHP_MINIT_FUNCTION(odbc)
        
        REGISTER_LONG_CONSTANT("SQL_KEYSET_SIZE", SQL_KEYSET_SIZE, CONST_PERSISTENT | CONST_CS);
 
+       /* these are for the Data Source type */
+       REGISTER_LONG_CONSTANT("SQL_FETCH_FIRST", SQL_FETCH_FIRST, CONST_PERSISTENT | CONST_CS);
+       REGISTER_LONG_CONSTANT("SQL_FETCH_NEXT", SQL_FETCH_NEXT, CONST_PERSISTENT | CONST_CS);
+/* These are valid, why aren't they supported by Windows?
+       REGISTER_LONG_CONSTANT("SQL_FETCH_FIRST_USER", SQL_FETCH_FIRST_USER, CONST_PERSISTENT | CONST_CS);
+       REGISTER_LONG_CONSTANT("SQL_FETCH_FIRST_SYSTEM", SQL_FETCH_FIRST_SYSTEM, CONST_PERSISTENT | CONST_CS);
+*/
+
        /*
         * register the standard data types
         */
@@ -1112,6 +1122,58 @@ PHP_FUNCTION(odbc_cursor)
 }
 /* }}} */
 
+/* {{{ proto array odbc_data_source(int connection_id, int fetch_type)
+   Return information about the currently connected data source */
+PHP_FUNCTION(odbc_data_source)
+{
+       zval **zv_conn, *zv_fetch_type;
+       RETCODE rc;
+       odbc_connection *conn;
+       int num_args = ZEND_NUM_ARGS();
+       UCHAR server_name[100],
+                 desc[200];
+       /* these don't seem to have any actual use,
+        * but they are needed to complete the call, go figure
+        */
+       SQLSMALLINT len1, len2;
+
+       if (num_args != 2) {
+               WRONG_PARAM_COUNT;
+       }
+
+       if (zend_get_parameters_ex(2, &zv_conn, &zv_fetch_type) == FAILURE) {
+               php_error(E_WARNING, "Unable to get parameters");
+       }
+
+       convert_to_long(zv_fetch_type);
+
+       ZEND_FETCH_RESOURCE2(conn, odbc_connection *, zv_conn, -1, "ODBC-Link", le_conn, le_pconn);
+
+       /* now we have the connection lets call the DataSource object */
+       rc = SQLDataSources(&conn->henv, 
+                       (SQLUSMALLINT)Z_LVAL_P(zv_fetch_type),
+                       server_name,
+                       (SQLSMALLINT)sizeof(server_name),
+                       &len1,
+                       desc, 
+                       (SQLSMALLINT)sizeof(desc),
+                       &len2);
+
+       if (rc != SQL_SUCCESS) {
+               /* ummm.... he did it */
+               odbc_sql_error(conn, NULL, "SQLDataSources");
+               RETURN_FALSE;
+       }
+
+/*     MAKE_STD_ZVAL(return_value); */
+       array_init(return_value);
+
+       add_assoc_string(return_value, "server", server_name, 1);
+       add_assoc_string(return_value, "description", desc, 1);
+
+}
+/* }}} */
+
 /* {{{ proto int odbc_exec(int connection_id, string query [, int flags])
    Prepare and execute an SQL statement */
 /* XXX Use flags */
index 376b3863dbb5769d094da4013ab51d974e2d3a8d..325b8adfd8f9572293d6f04b21eded80bec8ce8d 100644 (file)
@@ -50,8 +50,9 @@ PHP_FUNCTION(odbc_commit);
 PHP_FUNCTION(odbc_connect);
 PHP_FUNCTION(odbc_pconnect);
 PHP_FUNCTION(odbc_cursor);
-PHP_FUNCTION(odbc_exec);
+PHP_FUNCTION(odbc_data_source);
 PHP_FUNCTION(odbc_do);
+PHP_FUNCTION(odbc_exec);
 PHP_FUNCTION(odbc_execute);
 #ifdef HAVE_DBMAKER
 PHP_FUNCTION(odbc_fetch_array);