diff options
| -rw-r--r-- | ext/pgsql/config.m4 | 1 | ||||
| -rw-r--r-- | ext/pgsql/pgsql.c | 74 | ||||
| -rw-r--r-- | ext/pgsql/php_pgsql.h | 2 |
3 files changed, 77 insertions, 0 deletions
diff --git a/ext/pgsql/config.m4 b/ext/pgsql/config.m4 index d5a2f9e0ab..7ca9588e89 100644 --- a/ext/pgsql/config.m4 +++ b/ext/pgsql/config.m4 @@ -30,6 +30,7 @@ if test "$PHP_PGSQL" != "no"; then LDFLAGS="$LDFLAGS -L$PGSQL_LIBDIR" AC_CHECK_LIB(pq, PQcmdTuples,AC_DEFINE(HAVE_PQCMDTUPLES,1,[ ])) AC_CHECK_LIB(pq, PQoidValue,AC_DEFINE(HAVE_PQOIDVALUE,1,[ ])) + AC_CHECK_LIB(pq, PQclientEncoding,AC_DEFINE(HAVE_PQCLIENTENCODING,1,[ ])) LIBS="$old_LIBS" LDFLAGS="$old_LDFLAGS" diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c index 0391c24785..b25f983786 100644 --- a/ext/pgsql/pgsql.c +++ b/ext/pgsql/pgsql.c @@ -74,6 +74,10 @@ function_entry pgsql_functions[] = { PHP_FE(pg_loreadall, NULL) PHP_FE(pg_loimport, NULL) PHP_FE(pg_loexport, NULL) +#if HAVE_PQCLIENTENCODING + PHP_FE(pg_clientencoding, NULL) + PHP_FE(pg_setclientencoding, NULL) +#endif {NULL, NULL, NULL} }; @@ -1598,6 +1602,76 @@ PHP_FUNCTION(pg_loexport) } /* }}} */ +#if HAVE_PQCLIENTENCODING + +/* {{{ proto int pg_setclientencoding([int connection,] string encoding) + Set client encoding */ +PHP_FUNCTION(pg_setclientencoding) +{ + zval **encoding, **pgsql_link; + int id = -1; + PGconn *pgsql; + PGLS_FETCH(); + + switch(ZEND_NUM_ARGS()) { + case 1: + if (zend_get_parameters_ex(1, &encoding)==FAILURE) { + RETURN_FALSE; + } + id = PGG(default_link); + break; + case 2: + if (zend_get_parameters_ex(2, &pgsql_link, &encoding)==FAILURE) { + RETURN_FALSE; + } + break; + default: + WRONG_PARAM_COUNT; + break; + } + + ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); + + convert_to_string_ex(encoding); + return_value->value.lval = PQsetClientEncoding(pgsql, Z_STRVAL_PP(encoding)); + return_value->type = IS_LONG; + +} +/* }}} */ + +/* {{{ proto string pg_clientencoding([int connection]) + Get the current client encoding */ +PHP_FUNCTION(pg_clientencoding) +{ + zval **pgsql_link; + int id = -1; + PGconn *pgsql; + PGLS_FETCH(); + + switch(ZEND_NUM_ARGS()) { + case 0: + id = PGG(default_link); + break; + case 1: + if (zend_get_parameters_ex(1, &pgsql_link)==FAILURE) { + RETURN_FALSE; + } + break; + default: + WRONG_PARAM_COUNT; + break; + } + + ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink); + + return_value->value.str.val + = (char *) pg_encoding_to_char(PQclientEncoding(pgsql)); + return_value->value.str.len = strlen(return_value->value.str.val); + return_value->value.str.val = (char *) estrdup(return_value->value.str.val); + return_value->type = IS_STRING; +} +/* }}} */ +#endif #endif diff --git a/ext/pgsql/php_pgsql.h b/ext/pgsql/php_pgsql.h index 6ce51480a5..4af5a8fec2 100644 --- a/ext/pgsql/php_pgsql.h +++ b/ext/pgsql/php_pgsql.h @@ -85,6 +85,8 @@ PHP_FUNCTION(pg_lowrite); PHP_FUNCTION(pg_loreadall); PHP_FUNCTION(pg_loimport); PHP_FUNCTION(pg_loexport); +PHP_FUNCTION(pg_clientencoding); +PHP_FUNCTION(pg_setclientencoding); void php_pgsql_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent); int php_pgsql_get_default_link(INTERNAL_FUNCTION_PARAMETERS); |
