]> granicus.if.org Git - php/commitdiff
Registered db-module constants for use in dbx_connect (Mc)
authorMarc Boeren <mboeren@php.net>
Fri, 4 May 2001 09:42:45 +0000 (09:42 +0000)
committerMarc Boeren <mboeren@php.net>
Fri, 4 May 2001 09:42:45 +0000 (09:42 +0000)
Added support for Microsoft SQL Server (Mc)

ext/dbx/Makefile.in
ext/dbx/dbx.c
ext/dbx/dbx_mssql.c [new file with mode: 0644]
ext/dbx/dbx_mssql.h [new file with mode: 0644]

index 1c750f570b5ad19563f091c552745299ee7e9829..ad86ae96c7cf373ac42f0bafb210d5c1c128bfbc 100644 (file)
@@ -1,6 +1,6 @@
 
 LTLIBRARY_NAME = libdbx.la
-LTLIBRARY_SOURCES = dbx.c dbx_mysql.c dbx_odbc.c dbx_pgsql.c
+LTLIBRARY_SOURCES = dbx.c dbx_mysql.c dbx_odbc.c dbx_pgsql.c dbx_mssql.c
 LTLIBRARY_SHARED_NAME = dbx.la
 
 include $(top_srcdir)/build/dynlib.mk
index a4969c0fe4f20d82959357259c21c62ddbbaef3c..8762e6cf60cfe208f4fc048d5046710161e3681a 100644 (file)
 #define DBX_MYSQL 1
 #define DBX_ODBC 2
 #define DBX_PGSQL 3
+#define DBX_MSSQL 4
 /*/ includes for supported databases /*/
 #include "dbx.h"
 #include "dbx_mysql.h"
 #include "dbx_odbc.h"
 #include "dbx_pgsql.h"
+#include "dbx_mssql.h"
 
 /*/ support routines /*/
 int module_exists(char * module_name) {
@@ -44,13 +46,25 @@ int module_exists(char * module_name) {
     return r==0?1:0;
     }
 
+int module_identifier_exists(long module_identifier) {
+    switch (module_identifier) {
+        case DBX_MYSQL: return module_exists("mysql");
+        case DBX_ODBC: return module_exists("odbc");
+        case DBX_PGSQL: return module_exists("pgsql");
+        case DBX_MSSQL: return module_exists("mssql");
+        }
+    return 0;
+    }
+
 int get_module_identifier(char * module_name) {
     if (!strcmp("mysql", module_name)) return DBX_MYSQL;
     if (!strcmp("odbc", module_name)) return DBX_ODBC;
     if (!strcmp("pgsql", module_name)) return DBX_PGSQL;
+    if (!strcmp("mssql", module_name)) return DBX_MSSQL;
     return DBX_UNKNOWN;
     }
 
+
 int split_dbx_handle_object(zval ** dbx_object, zval *** pdbx_handle, zval *** pdbx_module, zval *** pdbx_database) {
     convert_to_object_ex(dbx_object);
     if (zend_hash_find((*dbx_object)->value.obj.properties, "handle", 7, (void **) pdbx_handle)==FAILURE
@@ -134,6 +148,11 @@ ZEND_MINIT_FUNCTION(dbx)
 {
 /*/    REGISTER_INI_ENTRIES(); /*/
 
+    REGISTER_LONG_CONSTANT("DBX_MYSQL", DBX_MYSQL, CONST_CS | CONST_PERSISTENT);
+    REGISTER_LONG_CONSTANT("DBX_ODBC", DBX_ODBC, CONST_CS | CONST_PERSISTENT);
+    REGISTER_LONG_CONSTANT("DBX_PGSQL", DBX_PGSQL, CONST_CS | CONST_PERSISTENT);
+    REGISTER_LONG_CONSTANT("DBX_MSSQL", DBX_MSSQL, CONST_CS | CONST_PERSISTENT);
+
     REGISTER_LONG_CONSTANT("DBX_PERSISTENT", DBX_PERSISTENT, CONST_CS | CONST_PERSISTENT);
     REGISTER_LONG_CONSTANT("DBX_RESULT_INFO", DBX_RESULT_INFO, CONST_CS | CONST_PERSISTENT);
     REGISTER_LONG_CONSTANT("DBX_RESULT_INDEX", DBX_RESULT_INDEX, CONST_CS | CONST_PERSISTENT);
@@ -167,6 +186,7 @@ ZEND_MINFO_FUNCTION(dbx)
     php_info_print_table_row(2, "dbx support for MySQL", "enabled");
     php_info_print_table_row(2, "dbx support for ODBC", "enabled");
     php_info_print_table_row(2, "dbx support for PostgreSQL", "enabled");
+    php_info_print_table_row(2, "dbx support for Microsoft SQL Server", "enabled");
     php_info_print_table_end();
 /*/    DISPLAY_INI_ENTRIES(); /*/
 }
@@ -202,15 +222,24 @@ ZEND_FUNCTION(dbx_connect)
         if ((*arguments[5])->value.lval!=0) persistent=1;
         }
 
-    convert_to_string_ex(arguments[0]);
-    if (!module_exists((*arguments[0])->value.str.val)) {
-        zend_error(E_WARNING, "dbx: module '%s' not loaded.\n", (*arguments[0])->value.str.val);
-        return;
+    if ((*arguments[0])->type == IS_LONG) {
+        if (!module_identifier_exists((*arguments[0])->value.lval)) {
+            zend_error(E_WARNING, "dbx: module '%ld' not loaded or not supported.\n", (*arguments[0])->value.lval);
+            return;
+            }
+        module_identifier = (*arguments[0])->value.lval;
         }
-    module_identifier=get_module_identifier((*arguments[0])->value.str.val);
-    if (!module_identifier) {
-        zend_error(E_WARNING, "dbx: unsupported module '%s'.\n", (*arguments[0])->value.str.val);
-        return;
+    else {
+        convert_to_string_ex(arguments[0]);
+        if (!module_exists((*arguments[0])->value.str.val)) {
+            zend_error(E_WARNING, "dbx: module '%s' not loaded.\n", (*arguments[0])->value.str.val);
+            return;
+            }
+        module_identifier=get_module_identifier((*arguments[0])->value.str.val);
+        if (!module_identifier) {
+            zend_error(E_WARNING, "dbx: unsupported module '%s'.\n", (*arguments[0])->value.str.val);
+            return;
+            }
         }
 
     MAKE_STD_ZVAL(dbx_module); 
@@ -655,6 +684,7 @@ int switch_dbx_connect(zval ** rv, zval ** host, zval ** db, zval ** username, z
         case DBX_MYSQL: return dbx_mysql_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
         case DBX_ODBC: return dbx_odbc_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
         case DBX_PGSQL: return dbx_pgsql_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
+        case DBX_MSSQL: return dbx_mssql_connect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
         }
     zend_error(E_WARNING, "dbx_connect: not supported in this module");
     return 0;
@@ -666,6 +696,7 @@ int switch_dbx_pconnect(zval ** rv, zval ** host, zval ** db, zval ** username,
         case DBX_MYSQL: return dbx_mysql_pconnect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
         case DBX_ODBC: return dbx_odbc_pconnect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
         case DBX_PGSQL: return dbx_pgsql_pconnect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
+        case DBX_MSSQL: return dbx_mssql_pconnect(rv, host, db, username, password, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
         }
     zend_error(E_WARNING, "dbx_pconnect: not supported in this module");
     return 0;
@@ -677,6 +708,7 @@ int switch_dbx_close(zval ** rv, zval ** dbx_handle, INTERNAL_FUNCTION_PARAMETER
         case DBX_MYSQL: return dbx_mysql_close(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
         case DBX_ODBC: return dbx_odbc_close(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
         case DBX_PGSQL: return dbx_pgsql_close(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
+        case DBX_MSSQL: return dbx_mssql_close(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
         }
     zend_error(E_WARNING, "dbx_close: not supported in this module");
     return 0;
@@ -688,6 +720,7 @@ int switch_dbx_query(zval ** rv, zval ** dbx_handle, zval ** db_name, zval ** sq
         case DBX_MYSQL: return dbx_mysql_query(rv, dbx_handle, db_name, sql_statement, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
         case DBX_ODBC: return dbx_odbc_query(rv, dbx_handle, db_name, sql_statement, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
         case DBX_PGSQL: return dbx_pgsql_query(rv, dbx_handle, db_name, sql_statement, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
+        case DBX_MSSQL: return dbx_mssql_query(rv, dbx_handle, db_name, sql_statement, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
         }
     zend_error(E_WARNING, "dbx_query: not supported in this module");
     return 0;
@@ -699,6 +732,7 @@ int switch_dbx_getcolumncount(zval ** rv, zval ** result_handle, INTERNAL_FUNCTI
         case DBX_MYSQL: return dbx_mysql_getcolumncount(rv, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
         case DBX_ODBC: return dbx_odbc_getcolumncount(rv, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
         case DBX_PGSQL: return dbx_pgsql_getcolumncount(rv, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
+        case DBX_MSSQL: return dbx_mssql_getcolumncount(rv, result_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
         }
     zend_error(E_WARNING, "dbx_getcolumncount: not supported in this module");
     return 0;
@@ -710,6 +744,7 @@ int switch_dbx_getcolumnname(zval ** rv, zval ** result_handle, long column_inde
         case DBX_MYSQL: return dbx_mysql_getcolumnname(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
         case DBX_ODBC: return dbx_odbc_getcolumnname(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
         case DBX_PGSQL: return dbx_pgsql_getcolumnname(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
+        case DBX_MSSQL: return dbx_mssql_getcolumnname(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
         }
     zend_error(E_WARNING, "dbx_getcolumnname: not supported in this module");
     return 0;
@@ -721,7 +756,8 @@ int switch_dbx_getcolumntype(zval ** rv, zval ** result_handle, long column_inde
         case DBX_MYSQL: return dbx_mysql_getcolumntype(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
         case DBX_ODBC: return dbx_odbc_getcolumntype(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
         case DBX_PGSQL: return dbx_pgsql_getcolumntype(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
-        }
+        case DBX_MSSQL: return dbx_mssql_getcolumntype(rv, result_handle, column_index, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
+       }
     zend_error(E_WARNING, "dbx_getcolumntype: not supported in this module");
     return 0;
     }
@@ -732,6 +768,7 @@ int switch_dbx_getrow(zval ** rv, zval ** result_handle, long row_number, INTERN
         case DBX_MYSQL: return dbx_mysql_getrow(rv, result_handle, row_number, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
         case DBX_ODBC: return dbx_odbc_getrow(rv, result_handle, row_number, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
         case DBX_PGSQL: return dbx_pgsql_getrow(rv, result_handle, row_number, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
+        case DBX_MSSQL: return dbx_mssql_getrow(rv, result_handle, row_number, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
         }
     zend_error(E_WARNING, "dbx_getrow: not supported in this module");
     return 0;
@@ -743,6 +780,7 @@ int switch_dbx_error(zval ** rv, zval ** dbx_handle, INTERNAL_FUNCTION_PARAMETER
         case DBX_MYSQL: return dbx_mysql_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
         case DBX_ODBC: return dbx_odbc_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
         case DBX_PGSQL: return dbx_pgsql_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
+        case DBX_MSSQL: return dbx_mssql_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU);        
         }
     zend_error(E_WARNING, "dbx_error: not supported in this module");
     return 0;
diff --git a/ext/dbx/dbx_mssql.c b/ext/dbx/dbx_mssql.c
new file mode 100644 (file)
index 0000000..b0582fb
--- /dev/null
@@ -0,0 +1,223 @@
+/*
+   +----------------------------------------------------------------------+
+   | PHP version 4.0                                                      |
+   +----------------------------------------------------------------------+
+   | Copyright (c) 1997-2001 The PHP Group                                |
+   +----------------------------------------------------------------------+
+   | dbx module version 1.0                                               |
+   +----------------------------------------------------------------------+
+   | Copyright (c) 2001 Guidance Rotterdam BV                             |
+   +----------------------------------------------------------------------+
+   | This source file is subject to version 2.02 of the PHP license,      |
+   | that is bundled with this package in the file LICENSE, and is        |
+   | available at through the world-wide-web at                           |
+   | http://www.php.net/license/2_02.txt.                                 |
+   | If you did not receive a copy of the PHP license and are unable to   |
+   | obtain it through the world-wide-web, please send a note to          |
+   | license@php.net so we can mail you a copy immediately.               |
+   +----------------------------------------------------------------------+
+   | Author : Marc Boeren         <marc@guidance.nl>                      |
+   +----------------------------------------------------------------------+
+*/
+
+#include "dbx.h"
+#include "dbx_mssql.h"
+
+#define MSSQL_ASSOC            1<<0
+#define MSSQL_NUM              1<<1
+
+int dbx_mssql_connect(zval ** rv, zval ** host, zval ** db, zval ** username, zval ** password, INTERNAL_FUNCTION_PARAMETERS) {
+    /*/ returns connection handle as resource on success or 0 as long on failure /*/
+    int number_of_arguments=3;
+    zval ** arguments[3];
+    zval * returned_zval=NULL;
+    zval * select_db_zval=NULL;
+
+    arguments[0]=host;
+    arguments[1]=username;
+    arguments[2]=password;
+    dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_connect", &returned_zval, number_of_arguments, arguments);
+    if (!returned_zval || returned_zval->type!=IS_RESOURCE) {
+        if (returned_zval) zval_ptr_dtor(&returned_zval);
+        return 0;
+        }
+    MOVE_RETURNED_TO_RV(rv, returned_zval);
+
+    number_of_arguments=2;
+    arguments[0]=db;
+    arguments[1]=rv;
+    dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_select_db", &select_db_zval, number_of_arguments, arguments);
+    zval_ptr_dtor(&select_db_zval);
+
+    return 1;
+    }
+
+int dbx_mssql_pconnect(zval ** rv, zval ** host, zval ** db, zval ** username, zval ** password, INTERNAL_FUNCTION_PARAMETERS) {
+    /*/ returns persistent connection handle as resource on success or 0 as long on failure /*/
+    int number_of_arguments=3;
+    zval ** arguments[3];
+    zval * returned_zval=NULL;
+    zval * select_db_zval=NULL;
+
+    arguments[0]=host;
+    arguments[1]=username;
+    arguments[2]=password;
+    dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_pconnect", &returned_zval, number_of_arguments, arguments);
+    if (!returned_zval || returned_zval->type!=IS_RESOURCE) {
+        if (returned_zval) zval_ptr_dtor(&returned_zval);
+        return 0;
+        }
+    MOVE_RETURNED_TO_RV(rv, returned_zval);
+
+    number_of_arguments=2;
+    arguments[0]=db;
+    arguments[1]=rv;
+    dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_select_db", &select_db_zval, number_of_arguments, arguments);
+    zval_ptr_dtor(&select_db_zval);
+
+    return 1;
+    }
+
+int dbx_mssql_close(zval ** rv, zval ** dbx_handle, INTERNAL_FUNCTION_PARAMETERS) {
+    /*/ returns 1 as long on success or 0 as long on failure /*/
+    int number_of_arguments=1;
+    zval ** arguments[1];
+    zval * returned_zval=NULL;
+
+    arguments[0]=dbx_handle;
+    dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_close", &returned_zval, number_of_arguments, arguments);
+    if (!returned_zval || returned_zval->type!=IS_BOOL) {
+        if (returned_zval) zval_ptr_dtor(&returned_zval);
+        return 0;
+        }
+    MOVE_RETURNED_TO_RV(rv, returned_zval);
+    return 1;
+    }
+
+int dbx_mssql_query(zval ** rv, zval ** dbx_handle, zval ** db_name, zval ** sql_statement, INTERNAL_FUNCTION_PARAMETERS) {
+    /*/ returns 1 as long or a result identifier as resource on success  or 0 as long on failure /*/
+    int number_of_arguments=2;
+    zval ** arguments[2];
+    zval * returned_zval=NULL;
+    zval * select_db_zval=NULL;
+
+    number_of_arguments=2;
+    arguments[0]=db_name;
+    arguments[1]=dbx_handle;
+    dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_select_db", &select_db_zval, number_of_arguments, arguments);
+    zval_ptr_dtor(&select_db_zval);
+
+    number_of_arguments=2;
+    arguments[0]=sql_statement;
+    arguments[1]=dbx_handle;
+    dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_query", &returned_zval, number_of_arguments, arguments);
+    /*/ mssql_query returns a bool for success or failure, or a result_identifier for select statements /*/
+    if (!returned_zval || (returned_zval->type!=IS_BOOL && returned_zval->type!=IS_RESOURCE)) {
+        if (returned_zval) zval_ptr_dtor(&returned_zval);
+        return 0;
+        }
+    MOVE_RETURNED_TO_RV(rv, returned_zval);
+    return 1;
+    }
+
+int dbx_mssql_getcolumncount(zval ** rv, zval ** result_handle, INTERNAL_FUNCTION_PARAMETERS) {
+    /*/ returns column-count as long on success or 0 as long on failure /*/
+    int number_of_arguments=1;
+    zval ** arguments[1];
+    zval * returned_zval=NULL;
+
+    arguments[0]=result_handle;
+    dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_num_fields", &returned_zval, number_of_arguments, arguments);
+    if (!returned_zval || returned_zval->type!=IS_LONG) {
+        if (returned_zval) zval_ptr_dtor(&returned_zval);
+        return 0;
+        }
+    MOVE_RETURNED_TO_RV(rv, returned_zval);
+    return 1;
+    }
+
+int dbx_mssql_getcolumnname(zval ** rv, zval ** result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS) {
+    /*/ returns column-name as string on success or 0 as long on failure /*/
+    int number_of_arguments=2;
+    zval ** arguments[2];
+    zval * zval_column_index;
+    zval * returned_zval=NULL;
+
+    MAKE_STD_ZVAL(zval_column_index);
+    ZVAL_LONG(zval_column_index, column_index);
+    arguments[0]=result_handle;
+    arguments[1]=&zval_column_index;
+    dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_field_name", &returned_zval, number_of_arguments, arguments);
+    /*/ mssql_field_name returns a string /*/
+    if (!returned_zval || returned_zval->type!=IS_STRING) {
+        if (returned_zval) zval_ptr_dtor(&returned_zval);
+        FREE_ZVAL(zval_column_index);
+        return 0;
+        }
+    FREE_ZVAL(zval_column_index);
+    MOVE_RETURNED_TO_RV(rv, returned_zval);
+    return 1;
+    }
+
+int dbx_mssql_getcolumntype(zval ** rv, zval ** result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS) {
+    /*/ returns column-type as string on success or 0 as long on failure /*/
+    int number_of_arguments=2;
+    zval ** arguments[2];
+    zval * zval_column_index;
+    zval * returned_zval=NULL;
+
+    MAKE_STD_ZVAL(zval_column_index);
+    ZVAL_LONG(zval_column_index, column_index);
+    arguments[0]=result_handle;
+    arguments[1]=&zval_column_index;
+    dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_field_type", &returned_zval, number_of_arguments, arguments);
+    /*/ mssql_field_name returns a string /*/
+    if (!returned_zval || returned_zval->type!=IS_STRING) {
+        if (returned_zval) zval_ptr_dtor(&returned_zval);
+        FREE_ZVAL(zval_column_index);
+        return 0;
+        }
+    FREE_ZVAL(zval_column_index);
+    MOVE_RETURNED_TO_RV(rv, returned_zval);
+    return 1;
+    }
+
+int dbx_mssql_getrow(zval ** rv, zval ** result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS) {
+    /*/ returns array[0..columncount-1] as strings on success or 0 as long on failure /*/
+    int number_of_arguments=1;
+    zval ** arguments[1];
+    zval * returned_zval=NULL;
+
+    arguments[0]=result_handle;
+    dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_fetch_row", &returned_zval, number_of_arguments, arguments);
+    if (!returned_zval || returned_zval->type!=IS_ARRAY) {
+        if (returned_zval) zval_ptr_dtor(&returned_zval);
+        return 0;
+        }
+    MOVE_RETURNED_TO_RV(rv, returned_zval);
+    return 1;
+    }
+
+int dbx_mssql_error(zval ** rv, zval ** dbx_handle, INTERNAL_FUNCTION_PARAMETERS) {
+    /*/ returns string /*/
+    int number_of_arguments=1;
+    zval ** arguments[1];
+    zval * returned_zval=NULL;
+
+    arguments[0]=dbx_handle;
+    if (!dbx_handle) number_of_arguments=0;
+    dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mssql_get_last_message", &returned_zval, number_of_arguments, arguments);
+    if (!returned_zval || returned_zval->type!=IS_STRING) {
+        if (returned_zval) zval_ptr_dtor(&returned_zval);
+        return 0;
+        }
+    MOVE_RETURNED_TO_RV(rv, returned_zval);
+    return 1;
+    }
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ */
diff --git a/ext/dbx/dbx_mssql.h b/ext/dbx/dbx_mssql.h
new file mode 100644 (file)
index 0000000..c7e2bd5
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+   +----------------------------------------------------------------------+
+   | PHP version 4.0                                                      |
+   +----------------------------------------------------------------------+
+   | Copyright (c) 1997-2001 The PHP Group                                |
+   +----------------------------------------------------------------------+
+   | dbx module version 1.0                                               |
+   +----------------------------------------------------------------------+
+   | Copyright (c) 2001 Guidance Rotterdam BV                             |
+   +----------------------------------------------------------------------+
+   | This source file is subject to version 2.02 of the PHP license,      |
+   | that is bundled with this package in the file LICENSE, and is        |
+   | available at through the world-wide-web at                           |
+   | http://www.php.net/license/2_02.txt.                                 |
+   | If you did not receive a copy of the PHP license and are unable to   |
+   | obtain it through the world-wide-web, please send a note to          |
+   | license@php.net so we can mail you a copy immediately.               |
+   +----------------------------------------------------------------------+
+   | Author : Marc Boeren         <marc@guidance.nl>                      |
+   +----------------------------------------------------------------------+
+*/
+
+#ifndef ZEND_DBX_MSSQL_H
+#define ZEND_DBX_MSSQL_H
+
+#ifndef INIT_FUNC_ARGS
+#include "zend_modules.h"
+#endif
+
+#include "php.h"
+
+int dbx_mssql_connect(zval ** rv, zval ** host, zval ** db, zval ** username, zval ** password, INTERNAL_FUNCTION_PARAMETERS);
+    /*/ returns connection handle as resource on success or 0 as long on failure /*/
+int dbx_mssql_pconnect(zval ** rv, zval ** host, zval ** db, zval ** username, zval ** password, INTERNAL_FUNCTION_PARAMETERS);
+    /*/ returns persistent connection handle as resource on success or 0 as long on failure /*/
+int dbx_mssql_close(zval ** rv, zval ** dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
+    /*/ returns 1 as long on success or 0 as long on failure /*/
+int dbx_mssql_query(zval ** rv, zval ** dbx_handle, zval ** db_name, zval ** sql_statement, INTERNAL_FUNCTION_PARAMETERS);
+    /*/ returns 1 as long or a result identifier as resource on success  or 0 as long on failure /*/
+int dbx_mssql_getcolumncount(zval ** rv, zval ** result_handle, INTERNAL_FUNCTION_PARAMETERS);
+    /*/ returns column-count as long on success or 0 as long on failure /*/
+int dbx_mssql_getcolumnname(zval ** rv, zval ** result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
+    /*/ returns column-name as string on success or 0 as long on failure /*/
+int dbx_mssql_getcolumntype(zval ** rv, zval ** result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS);
+    /*/ returns column-type as string on success or 0 as long on failure /*/
+int dbx_mssql_getrow(zval ** rv, zval ** result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS);
+    /*/ returns array[0..columncount-1] as strings on success or 0 as long on failure /*/
+int dbx_mssql_error(zval ** rv, zval ** dbx_handle, INTERNAL_FUNCTION_PARAMETERS);
+    /*/ returns string /*/
+
+#endif /* ZEND_DBX_MSSQL_H */
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ */