/* +----------------------------------------------------------------------+ | PHP Version 5 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2004 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.0 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_0.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: | +----------------------------------------------------------------------+ */ /* $Id: php_dbdo.h,v 1.37 2005/04/07 15:23:47 alan_k Exp $ */ #ifndef PHP_DBDO_H #define PHP_DBDO_H extern zend_module_entry dbdo_module_entry; #define phpext_dbdo_ptr &dbdo_module_entry #ifdef PHP_WIN32 #define PHP_DBDO_API __declspec(dllexport) #else #define PHP_DBDO_API #endif #ifdef ZTS #include "TSRM.h" #endif #include #include "ext/standard/php_smart_str.h" #include "main/snprintf.h" #include "Zend/zend_execute.h" #include "Zend/zend_exceptions.h" #define DBDO_FULL_DEBUG 0 #if DBDO_FULL_DEBUG #define DBDO_DEBUG0(lvl,string) if (DBDO_G(debugLevel) & lvl) { php_error(E_WARNING, "DBDO:(Debug) %s(%d) " string, __FUNCTION__, __LINE__); } #define DBDO_DEBUG(lvl,string, arg) if (DBDO_G(debugLevel) & lvl) { php_error(E_WARNING, "DBDO:(Debug) %s(%d) " string, __FUNCTION__, __LINE__, arg); } #define DBDO_DEBUG2(lvl,string, arg1,arg2) if (DBDO_G(debugLevel) & lvl) { php_error(E_WARNING, "DBDO:(Debug) %s(%d) " string, __FUNCTION__, __LINE__,arg1,arg2); } #define DBDO_DEBUG3(lvl,string, arg1,arg2,arg3) if (DBDO_G(debugLevel) & lvl) { php_error(E_WARNING, "DBDO:(Debug) %s(%d) " string, __FUNCTION__, __LINE__,arg1,arg2,arg3); } #else #define DBDO_DEBUG0(lvl,string) if (DBDO_G(debugLevel) & lvl) { php_error(E_WARNING, "DBDO:(Debug) " string); } #define DBDO_DEBUG(lvl,string, arg) if (DBDO_G(debugLevel) & lvl) { php_error(E_WARNING, "DBDO:(Debug) " string, arg); } #define DBDO_DEBUG2(lvl,string, arg1,arg2) if (DBDO_G(debugLevel) & lvl) { php_error(E_WARNING, "DBDO:(Debug) " string,arg1,arg2); } #define DBDO_DEBUG3(lvl,string, arg1,arg2,arg3) if (DBDO_G(debugLevel) & lvl) { php_error(E_WARNING, "DBDO:(Debug) " string,arg1,arg2,arg3); } #endif #define DBDO_QUERY_BUILD_DELETE 0 #define DBDO_QUERY_BUILD_SELECT 1 #define DBDO_QUERY_BUILD_UPDATE 2 extern ZEND_RSRC_DTOR_FUNC(php_dbdo_client_dtor); static void dbdo_objects_dtor(void *object, zend_object_handle handle TSRMLS_DC); static zend_object_value dbdo_clone(zval *zobject TSRMLS_DC); PHP_DBDO_API zend_object_value dbdo_objects_exception_new(zend_class_entry *class_type TSRMLS_DC); PHP_DBDO_API zend_object_value dbdo_objects_new(zend_class_entry *class_type TSRMLS_DC); void dbdo_fetch_into_properties(zval *object TSRMLS_DC); zend_class_entry *dbdo_class_entry_ce, *dbdo_class_entry_exception_ce; typedef struct { gchar *dsn; /* dsn to use. */ gchar *name; /* name of table -- still need free policy*/ GdaDataModel *schema; /* datamodel schema for this table */ gchar *sequenceColumn; /* this tables column who's a sequence */ gboolean sequenceIsNative; /* is it native or emulated sequences */ gboolean sequenceAssigned; /* has a guess or assignment been made? */ gchar *sequenceName; /* the name of the sequence (eg. for nextval lookup) */ int keys_len; /* number of keys */ gchar **keys; /* array of keys */ } dbdo_table; typedef struct { char *dsn; /* matches dsn in saveData.. */ char *require_path; char *class_name; gboolean lowercase_columns; char *links; gboolean quote_identifiers; char *provider; char *cnc_string; } dbdo_config; typedef struct { int refcount; gchar *where; gchar *groupBy; gchar *orderBy; gchar *having; glong limit_from; glong limit_qty; gboolean limit_use; gchar *data_select; } dbdo_condition; /* the query conditions.. */ typedef struct { zend_object zo; GdaConnection *con; /* database connection - we can free this in one go - just null on destruct.. */ gint row_id; /* active row */ GdaDataModel *result; dbdo_table *table; dbdo_condition *condition; /* conditions builder-- still need free policy */ } dbdo_object; /* extends zend_object */ /* in dbdo_object.c */ int dbdo_connect(dbdo_object *obj TSRMLS_DC); dbdo_table * dbdo_table_new(char *dsn, char *name TSRMLS_DC); int dbdo_schema_load(dbdo_object *obj TSRMLS_DC); gint dbdo_schema_get_col_row(dbdo_object *obj, const char *name); gchar * dbdo_schema_get_type(dbdo_object *obj, const char *name); GdaValueType dbdo_value_type_from_column(dbdo_object *obj, char * name); void dbdo_value_to_zval(GdaValue *from, zval *value TSRMLS_DC); char * dbdo_value_to_sql(GdaValue *from); GdaValue * dbdo_object_value_from_zval(dbdo_object *obj, char *name, zval *from TSRMLS_DC); void list_datasources (void); void list_providers (void); void dbdo_throw_errors (GdaConnection *connection TSRMLS_DC); char * dbdo_find_query_build(zval *object, dbdo_object *obj, int is_select TSRMLS_DC); gboolean dbdo_sequence_guess(dbdo_object *obj); dbdo_config * dbdo_config_get(char *name TSRMLS_DC); int php_dbdo_list_entry(void); PHP_MINIT_FUNCTION(dbdo); PHP_MSHUTDOWN_FUNCTION(dbdo); PHP_RINIT_FUNCTION(dbdo); PHP_RSHUTDOWN_FUNCTION(dbdo); PHP_MINFO_FUNCTION(dbdo); PHP_METHOD(dbdo,debugLevel); PHP_METHOD(dbdo,config); PHP_METHOD(dbdo,__construct); PHP_METHOD(dbdo,factory); PHP_METHOD(dbdo,reproduce); PHP_METHOD(dbdo,get); PHP_METHOD(dbdo,fetch); PHP_METHOD(dbdo,fetchAll); PHP_METHOD(dbdo,count); PHP_METHOD(dbdo,insert); PHP_METHOD(dbdo,update); PHP_METHOD(dbdo,delete); PHP_METHOD(dbdo,query); PHP_METHOD(dbdo,toArray); PHP_METHOD(dbdo,assignFrom); PHP_METHOD(dbdo,valueSet); PHP_METHOD(dbdo,valueGet); /* Information - set/get */ PHP_METHOD(dbdo,sequenceKey); PHP_METHOD(dbdo,keys); PHP_METHOD(dbdo,schema); PHP_METHOD(dbdo,info); /* query modification */ PHP_METHOD(dbdo,selectAdd); PHP_METHOD(dbdo,whereAdd); PHP_METHOD(dbdo,limit); PHP_METHOD(dbdo,orderBy); PHP_METHOD(dbdo,groupBy); PHP_METHOD(dbdo,having); PHP_METHOD(dbdo,quoted); PHP_METHOD(dbdo, __call); /* PHP_METHOD(dbdo, __sleep); */ ZEND_BEGIN_MODULE_GLOBALS(dbdo) GdaClient *client; int debugLevel; /* the debugLevel */ dbdo_config **config; /* the configuration ? dbdo_config */ int config_len; dbdo_table **tables; /* link list of dbdo_table's */ int tables_len; GdaTransaction *transaction; ZEND_END_MODULE_GLOBALS(dbdo) /* In every utility function you add that needs to use variables in php_dbdo_globals, call TSRMLS_FETCH(); after declaring other variables used by that function, or better yet, pass in TSRMLS_CC after the last function argument and declare your utility function with TSRMLS_DC after the last declared argument. Always refer to the globals in your function as DBDO_G(variable). You are encouraged to rename these macros something shorter, see examples in any other php module directory. */ #ifdef ZTS #define DBDO_G(v) TSRMG(dbdo_globals_id, zend_dbdo_globals *, v) #else #define DBDO_G(v) (dbdo_globals.v) #endif #endif /* PHP_DBDO_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */