diff options
Diffstat (limited to 'ext/interbase/php_ibase_includes.h')
-rwxr-xr-x | ext/interbase/php_ibase_includes.h | 213 |
1 files changed, 213 insertions, 0 deletions
diff --git a/ext/interbase/php_ibase_includes.h b/ext/interbase/php_ibase_includes.h new file mode 100755 index 0000000000..e968ce2154 --- /dev/null +++ b/ext/interbase/php_ibase_includes.h @@ -0,0 +1,213 @@ +/* + +----------------------------------------------------------------------+ + | 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. | + +----------------------------------------------------------------------+ + | Authors: Jouni Ahto <jouni.ahto@exdec.fi> | + | Andrew Avdeev <andy@simgts.mv.ru> | + | Ard Biesheuvel <a.k.biesheuvel@its.tudelft.nl> | + +----------------------------------------------------------------------+ + */ + +/* $Id$ */ + +#ifndef INTERBASE_H +#define INTERBASE_H + +#include <ibase.h> + +#ifndef SQLDA_CURRENT_VERSION +#define SQLDA_CURRENT_VERSION SQLDA_VERSION1 +#endif + +/* IB < 6 doesn't define these */ +#ifndef SQL_DIALECT_CURRENT +#define SQL_DIALECT_CURRENT 1 /* == SQL_DIALECT_V5 */ + +#ifdef PHP_WIN32 +typedef __int64 ISC_INT64; +typedef unsigned __int64 ISC_UINT64; +#else +typedef long long ISC_INT64; +typedef unsigned long long ISC_UINT64; +#endif /* PHP_WIN32 */ +#endif /* SQL_DIALECT_CURRENT */ + +#define RESET_ERRMSG { IBG(errmsg)[0] = '\0'; IBG(sql_code) = 0; } + +#define IB_STATUS (IBG(status)) + +extern int le_blob, le_link, le_plink, le_result, le_query, le_trans, + le_event, le_service; + +#define IBASE_MSGSIZE 256 +#define MAX_ERRMSG (IBASE_MSGSIZE*2) + +/* this value should never be > USHRT_MAX */ +#define IBASE_BLOB_SEG 4096 + +ZEND_BEGIN_MODULE_GLOBALS(ibase) + ISC_STATUS status[20]; + long default_link; + long num_links, num_persistent; + long max_links, max_persistent; + long allow_persistent; + char *default_user, *default_password; + char *timestampformat; + char *cfg_timestampformat; + char *dateformat; + char *cfg_dateformat; + char *timeformat; + char *cfg_timeformat; + char errmsg[MAX_ERRMSG]; + long sql_code; +ZEND_END_MODULE_GLOBALS(ibase) + +ZEND_EXTERN_MODULE_GLOBALS(ibase) + +typedef struct { + isc_db_handle handle; + struct tr_list *tr_list; + unsigned short dialect; +} ibase_db_link; + +typedef struct { + isc_tr_handle handle; + unsigned short link_cnt; + unsigned long affected_rows; + ibase_db_link *db_link[1]; /* last member */ +} ibase_trans; + +typedef struct tr_list { + ibase_trans *trans; + struct tr_list *next; +} ibase_tr_list; + +typedef struct { + ISC_ARRAY_DESC ar_desc; + ISC_LONG ar_size; /* size of entire array in bytes */ + unsigned short el_type, el_size; +} ibase_array; + +typedef struct { + isc_blob_handle bl_handle; + ISC_QUAD bl_qd; + unsigned short type; +} ibase_blob; + +typedef struct { + ibase_db_link *link; + ibase_trans *trans; + isc_stmt_handle stmt; + unsigned short type; + unsigned char has_more_rows, statement_type; + XSQLDA *out_sqlda; + ibase_array out_array[1]; /* last member */ +} ibase_result; + +typedef struct { + ibase_db_link *link; + ibase_trans *trans; + int result_res_id; + isc_stmt_handle stmt; + XSQLDA *in_sqlda, *out_sqlda; + ibase_array *in_array, *out_array; + unsigned short dialect; + char statement_type; + char *query; + long trans_res_id; +} ibase_query; + +typedef struct { + ibase_db_link *link; + long link_res_id; + ISC_LONG event_id; + unsigned short event_count; + char **events; + char *event_buffer, *result_buffer; + zval *callback; + void **thread_ctx; +} ibase_event; + +typedef struct { + isc_svc_handle handle; + char *hostname; + char *username; +} ibase_service; + +enum php_interbase_option { + PHP_IBASE_DEFAULT = 0, + /* fetch flags */ + PHP_IBASE_FETCH_BLOBS = 1, + PHP_IBASE_FETCH_ARRAYS = 2, + PHP_IBASE_UNIXTIME = 4, + /* timefmt flags */ + PHP_IBASE_TIMESTAMP = 1, + PHP_IBASE_DATE = 2, + PHP_IBASE_TIME = 4, + /* transaction access mode */ + PHP_IBASE_WRITE = 1, + PHP_IBASE_READ = 2, + /* transaction isolation level */ + PHP_IBASE_CONCURRENCY = 4, + PHP_IBASE_COMMITTED = 8, + PHP_IBASE_REC_NO_VERSION = 32, + PHP_IBASE_REC_VERSION = 64, + PHP_IBASE_CONSISTENCY = 16, + /* transaction lock resolution */ + PHP_IBASE_WAIT = 128, + PHP_IBASE_NOWAIT = 256 +}; + +#ifdef ZTS +#define IBG(v) TSRMG(ibase_globals_id, zend_ibase_globals *, v) +#else +#define IBG(v) (ibase_globals.v) +#endif + +#define BLOB_ID_LEN 18 +#define BLOB_ID_MASK "0x%" LL_MASK "x" + +#define BLOB_INPUT 1 +#define BLOB_OUTPUT 2 + +#ifdef PHP_WIN32 +#define LL_MASK "I64" +#define LL_LIT(lit) lit ## I64 +#else +#define LL_MASK "ll" +#define LL_LIT(lit) lit ## ll +#endif + +int _php_ibase_string_to_quad(char const *id, ISC_QUAD *qd); +char *_php_ibase_quad_to_string(ISC_QUAD const qd); +int _php_ibase_blob_get(zval *return_value, ibase_blob *ib_blob, unsigned long max_len TSRMLS_DC); +int _php_ibase_blob_add(zval **string_arg, ibase_blob *ib_blob TSRMLS_DC); + +void _php_ibase_error(TSRMLS_D); +void _php_ibase_module_error(char * TSRMLS_DC, ...) + PHP_ATTRIBUTE_FORMAT(printf,1,PHP_ATTR_FMT_OFFSET +2); + +int _php_ibase_def_trans(ibase_db_link *ib_link, ibase_trans **trans TSRMLS_DC); +void _php_ibase_get_link_trans(INTERNAL_FUNCTION_PARAMETERS, zval **link_id, + ibase_db_link **ib_link, ibase_trans **trans); + +void _php_ibase_event_free(char *event_buf, char *result_buf); + +#endif /* INTERBASE_H */ + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + */ |