summaryrefslogtreecommitdiff
path: root/ext/pgsql/php_pgsql.h
diff options
context:
space:
mode:
Diffstat (limited to 'ext/pgsql/php_pgsql.h')
-rw-r--r--ext/pgsql/php_pgsql.h309
1 files changed, 309 insertions, 0 deletions
diff --git a/ext/pgsql/php_pgsql.h b/ext/pgsql/php_pgsql.h
new file mode 100644
index 0000000..63f50f0
--- /dev/null
+++ b/ext/pgsql/php_pgsql.h
@@ -0,0 +1,309 @@
+/*
+ +----------------------------------------------------------------------+
+ | PHP Version 5 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997-2013 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 3.01 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_01.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: Zeev Suraski <zeev@zend.com> |
+ | Jouni Ahto <jouni.ahto@exdec.fi> |
+ +----------------------------------------------------------------------+
+ */
+
+/* $Id$ */
+
+#ifndef PHP_PGSQL_H
+#define PHP_PGSQL_H
+
+#if HAVE_PGSQL
+
+extern zend_module_entry pgsql_module_entry;
+#define pgsql_module_ptr &pgsql_module_entry
+
+#ifdef PHP_PGSQL_PRIVATE
+#undef SOCKET_SIZE_TYPE
+#include <libpq-fe.h>
+
+#ifdef PHP_WIN32
+#define INV_WRITE 0x00020000
+#define INV_READ 0x00040000
+#undef PHP_PGSQL_API
+#ifdef PGSQL_EXPORTS
+#define PHP_PGSQL_API __declspec(dllexport)
+#else
+#define PHP_PGSQL_API __declspec(dllimport)
+#endif
+#else
+#include <libpq/libpq-fs.h>
+# if defined(__GNUC__) && __GNUC__ >= 4
+# define PHP_PGSQL_API __attribute__ ((visibility("default")))
+# else
+# define PHP_PGSQL_API
+# endif
+#endif
+
+#ifdef HAVE_PG_CONFIG_H
+#include <pg_config.h>
+#endif
+
+#ifdef HAVE_PGSQL_WITH_MULTIBYTE_SUPPORT
+const char * pg_encoding_to_char(int encoding);
+#endif
+
+PHP_MINIT_FUNCTION(pgsql);
+PHP_MSHUTDOWN_FUNCTION(pgsql);
+PHP_RINIT_FUNCTION(pgsql);
+PHP_RSHUTDOWN_FUNCTION(pgsql);
+PHP_MINFO_FUNCTION(pgsql);
+/* connection functions */
+PHP_FUNCTION(pg_connect);
+PHP_FUNCTION(pg_pconnect);
+PHP_FUNCTION(pg_close);
+PHP_FUNCTION(pg_connection_reset);
+PHP_FUNCTION(pg_connection_status);
+PHP_FUNCTION(pg_connection_busy);
+PHP_FUNCTION(pg_host);
+PHP_FUNCTION(pg_dbname);
+PHP_FUNCTION(pg_port);
+PHP_FUNCTION(pg_tty);
+PHP_FUNCTION(pg_options);
+PHP_FUNCTION(pg_version);
+PHP_FUNCTION(pg_ping);
+#if HAVE_PQPARAMETERSTATUS
+PHP_FUNCTION(pg_parameter_status);
+#endif
+#if HAVE_PGTRANSACTIONSTATUS
+PHP_FUNCTION(pg_transaction_status);
+#endif
+/* query functions */
+PHP_FUNCTION(pg_query);
+#if HAVE_PQEXECPARAMS
+PHP_FUNCTION(pg_query_params);
+#endif
+#if HAVE_PQPREPARE
+PHP_FUNCTION(pg_prepare);
+#endif
+#if HAVE_PQEXECPREPARED
+PHP_FUNCTION(pg_execute);
+#endif
+PHP_FUNCTION(pg_send_query);
+#if HAVE_PQSENDQUERYPARAMS
+PHP_FUNCTION(pg_send_query_params);
+#endif
+#if HAVE_PQSENDPREPARE
+PHP_FUNCTION(pg_send_prepare);
+#endif
+#if HAVE_PQSENDQUERYPREPARED
+PHP_FUNCTION(pg_send_execute);
+#endif
+PHP_FUNCTION(pg_cancel_query);
+/* result functions */
+PHP_FUNCTION(pg_fetch_assoc);
+PHP_FUNCTION(pg_fetch_array);
+PHP_FUNCTION(pg_fetch_object);
+PHP_FUNCTION(pg_fetch_result);
+PHP_FUNCTION(pg_fetch_row);
+PHP_FUNCTION(pg_fetch_all);
+PHP_FUNCTION(pg_fetch_all_columns);
+#if HAVE_PQCMDTUPLES
+PHP_FUNCTION(pg_affected_rows);
+#endif
+PHP_FUNCTION(pg_get_result);
+PHP_FUNCTION(pg_result_seek);
+PHP_FUNCTION(pg_result_status);
+PHP_FUNCTION(pg_free_result);
+PHP_FUNCTION(pg_last_oid);
+PHP_FUNCTION(pg_num_rows);
+PHP_FUNCTION(pg_num_fields);
+PHP_FUNCTION(pg_field_name);
+PHP_FUNCTION(pg_field_num);
+PHP_FUNCTION(pg_field_size);
+PHP_FUNCTION(pg_field_type);
+PHP_FUNCTION(pg_field_type_oid);
+PHP_FUNCTION(pg_field_prtlen);
+PHP_FUNCTION(pg_field_is_null);
+PHP_FUNCTION(pg_field_table);
+/* async message functions */
+PHP_FUNCTION(pg_get_notify);
+PHP_FUNCTION(pg_get_pid);
+/* error message functions */
+PHP_FUNCTION(pg_result_error);
+#if HAVE_PQRESULTERRORFIELD
+PHP_FUNCTION(pg_result_error_field);
+#endif
+PHP_FUNCTION(pg_last_error);
+PHP_FUNCTION(pg_last_notice);
+/* copy functions */
+PHP_FUNCTION(pg_put_line);
+PHP_FUNCTION(pg_end_copy);
+PHP_FUNCTION(pg_copy_to);
+PHP_FUNCTION(pg_copy_from);
+/* large object functions */
+PHP_FUNCTION(pg_lo_create);
+PHP_FUNCTION(pg_lo_unlink);
+PHP_FUNCTION(pg_lo_open);
+PHP_FUNCTION(pg_lo_close);
+PHP_FUNCTION(pg_lo_read);
+PHP_FUNCTION(pg_lo_write);
+PHP_FUNCTION(pg_lo_read_all);
+PHP_FUNCTION(pg_lo_import);
+PHP_FUNCTION(pg_lo_export);
+PHP_FUNCTION(pg_lo_seek);
+PHP_FUNCTION(pg_lo_tell);
+
+/* debugging functions */
+PHP_FUNCTION(pg_trace);
+PHP_FUNCTION(pg_untrace);
+
+/* utility functions */
+PHP_FUNCTION(pg_client_encoding);
+PHP_FUNCTION(pg_set_client_encoding);
+#if HAVE_PQSETERRORVERBOSITY
+PHP_FUNCTION(pg_set_error_verbosity);
+#endif
+#if HAVE_PQESCAPE
+PHP_FUNCTION(pg_escape_string);
+PHP_FUNCTION(pg_escape_bytea);
+PHP_FUNCTION(pg_unescape_bytea);
+PHP_FUNCTION(pg_escape_literal);
+PHP_FUNCTION(pg_escape_identifier);
+#endif
+
+/* misc functions */
+PHP_FUNCTION(pg_meta_data);
+PHP_FUNCTION(pg_convert);
+PHP_FUNCTION(pg_insert);
+PHP_FUNCTION(pg_update);
+PHP_FUNCTION(pg_delete);
+PHP_FUNCTION(pg_select);
+
+/* connection options - ToDo: Add async connection option */
+#define PGSQL_CONNECT_FORCE_NEW (1<<1)
+/* php_pgsql_convert options */
+#define PGSQL_CONV_IGNORE_DEFAULT (1<<1) /* Do not use DEAFULT value by removing field from returned array */
+#define PGSQL_CONV_FORCE_NULL (1<<2) /* Convert to NULL if string is null string */
+#define PGSQL_CONV_IGNORE_NOT_NULL (1<<3) /* Ignore NOT NULL constraints */
+#define PGSQL_CONV_OPTS (PGSQL_CONV_IGNORE_DEFAULT|PGSQL_CONV_FORCE_NULL|PGSQL_CONV_IGNORE_NOT_NULL)
+/* php_pgsql_insert/update/select/delete options */
+#define PGSQL_DML_NO_CONV (1<<8) /* Do not call php_pgsql_convert() */
+#define PGSQL_DML_EXEC (1<<9) /* Execute query */
+#define PGSQL_DML_ASYNC (1<<10) /* Do async query */
+#define PGSQL_DML_STRING (1<<11) /* Return query string */
+
+/* exported functions */
+PHP_PGSQL_API int php_pgsql_meta_data(PGconn *pg_link, const char *table_name, zval *meta TSRMLS_DC);
+PHP_PGSQL_API int php_pgsql_convert(PGconn *pg_link, const char *table_name, const zval *values, zval *result, ulong opt TSRMLS_DC);
+PHP_PGSQL_API int php_pgsql_insert(PGconn *pg_link, const char *table, zval *values, ulong opt, char **sql TSRMLS_DC);
+PHP_PGSQL_API int php_pgsql_update(PGconn *pg_link, const char *table, zval *values, zval *ids, ulong opt , char **sql TSRMLS_DC);
+PHP_PGSQL_API int php_pgsql_delete(PGconn *pg_link, const char *table, zval *ids, ulong opt, char **sql TSRMLS_DC);
+PHP_PGSQL_API int php_pgsql_select(PGconn *pg_link, const char *table, zval *ids, zval *ret_array, ulong opt, char **sql TSRMLS_DC);
+PHP_PGSQL_API int php_pgsql_result2array(PGresult *pg_result, zval *ret_array TSRMLS_DC);
+
+/* internal functions */
+static void php_pgsql_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent);
+static void php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type);
+static void php_pgsql_get_result_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type);
+static char *get_field_name(PGconn *pgsql, Oid oid, HashTable *list TSRMLS_DC);
+static void php_pgsql_get_field_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type);
+static void php_pgsql_data_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type);
+static void php_pgsql_do_async(INTERNAL_FUNCTION_PARAMETERS,int entry_type);
+
+typedef enum _php_pgsql_data_type {
+ /* boolean */
+ PG_BOOL,
+ /* number */
+ PG_OID,
+ PG_INT2,
+ PG_INT4,
+ PG_INT8,
+ PG_FLOAT4,
+ PG_FLOAT8,
+ PG_NUMERIC,
+ PG_MONEY,
+ /* character */
+ PG_TEXT,
+ PG_CHAR,
+ PG_VARCHAR,
+ /* time and interval */
+ PG_UNIX_TIME,
+ PG_UNIX_TIME_INTERVAL,
+ PG_DATE,
+ PG_TIME,
+ PG_TIME_WITH_TIMEZONE,
+ PG_TIMESTAMP,
+ PG_TIMESTAMP_WITH_TIMEZONE,
+ PG_INTERVAL,
+ /* binary */
+ PG_BYTEA,
+ /* network */
+ PG_CIDR,
+ PG_INET,
+ PG_MACADDR,
+ /* bit */
+ PG_BIT,
+ PG_VARBIT,
+ /* geometoric */
+ PG_LINE,
+ PG_LSEG,
+ PG_POINT,
+ PG_BOX,
+ PG_PATH,
+ PG_POLYGON,
+ PG_CIRCLE,
+ /* unkown and system */
+ PG_UNKNOWN
+} php_pgsql_data_type;
+
+typedef struct pgLofp {
+ PGconn *conn;
+ int lofd;
+} pgLofp;
+
+typedef struct _php_pgsql_result_handle {
+ PGconn *conn;
+ PGresult *result;
+ int row;
+} pgsql_result_handle;
+
+typedef struct _php_pgsql_notice {
+ char *message;
+ size_t len;
+} php_pgsql_notice;
+
+ZEND_BEGIN_MODULE_GLOBALS(pgsql)
+ long default_link; /* default link when connection is omitted */
+ long num_links,num_persistent;
+ long max_links,max_persistent;
+ long allow_persistent;
+ long auto_reset_persistent;
+ int le_lofp,le_string;
+ int ignore_notices,log_notices;
+ HashTable notices; /* notice message for each connection */
+ZEND_END_MODULE_GLOBALS(pgsql)
+
+ZEND_EXTERN_MODULE_GLOBALS(pgsql)
+
+#ifdef ZTS
+# define PGG(v) TSRMG(pgsql_globals_id, zend_pgsql_globals *, v)
+#else
+# define PGG(v) (pgsql_globals.v)
+#endif
+
+#endif
+
+#else
+
+#define pgsql_module_ptr NULL
+
+#endif
+
+#define phpext_pgsql_ptr pgsql_module_ptr
+
+#endif /* PHP_PGSQL_H */