]> granicus.if.org Git - php/commitdiff
- Added the pg_lolseek function, which allows for arbitrary seeking within
authorDerick Rethans <derick@php.net>
Thu, 18 Jan 2001 22:17:05 +0000 (22:17 +0000)
committerDerick Rethans <derick@php.net>
Thu, 18 Jan 2001 22:17:05 +0000 (22:17 +0000)
  a large object, and the pg_lotell call, which can be used to find the
  current file offset for a large object (Submitted by: Adam Haberlach
  <adam@newsnipple.com>).
@- Added the pg_lolseek and pg_lotell functions (Derick)

ext/pgsql/pgsql.c
ext/pgsql/php_pgsql.h

index 4962ca92bc3d5b45c4efcdfff2a4802f2fde5063..da6b87bdb42fbbd7f7145f04a4c9dd5cd7a87c62 100644 (file)
@@ -75,6 +75,8 @@ function_entry pgsql_functions[] = {
        PHP_FE(pg_loreadall,    NULL)
        PHP_FE(pg_loimport,             NULL)
        PHP_FE(pg_loexport,             NULL)
+       PHP_FE(pg_lolseek,              NULL)
+       PHP_FE(pg_lotell,               NULL)
        PHP_FE(pg_put_line,             NULL)
        PHP_FE(pg_end_copy,             NULL)
 #if HAVE_PQCLIENTENCODING
@@ -1736,6 +1738,59 @@ PHP_FUNCTION(pg_loexport)
 }
 /* }}} */
 
+/* {{{ proto int pg_lolseek(int objoid, int offset, int whence)
+   Seek into a postgres large object*/
+PHP_FUNCTION(pg_lolseek) {
+       val **pgsql_lofp, **seek_offset, **seek_whence;
+       gLofp *pgsql;
+
+       switch(ZEND_NUM_ARGS()) {
+               case 3:
+                       if (zend_get_parameters_ex(3, &pgsql_lofp, &seek_offset, &seek_whence)==FAILURE) {
+                               RETURN_FALSE;
+                       }
+                       convert_to_long_ex(seek_offset);
+                       convert_to_long_ex(seek_whence);
+                       break;
+               default:
+                       WRONG_PARAM_COUNT;
+                       break;
+       }
+
+       ZEND_FETCH_RESOURCE(pgsql, pgLofp *, pgsql_lofp, -1, "PostgreSQL large object", le_lofp);
+       if (lo_lseek((PGconn *)pgsql->conn, pgsql->lofd, Z_STRVAL_PP(seek_offset), Z_STRVAL_PP(seek_whence))) {
+               RETURN_TRUE;
+       } else {
+               RETURN_FALSE;
+       }
+}
+/* }}} */
+
+/* {{{ proto int pg_tell(int objoid)
+        return current offset into large object */
+PHP_FUNCTION(pg_lotell) {
+       long int offset;
+       zval **pgsql_lofp;
+       pgLofp *pgsql;
+
+       switch(ZEND_NUM_ARGS()) {
+               case 1:
+                       if (zend_get_parameters_ex(1, &pgsql_lofp)==FAILURE) {
+                               RETURN_FALSE;
+                       }
+                       break;
+               default:
+                       WRONG_PARAM_COUNT;
+                       break;
+       }
+
+       END_FETCH_RESOURCE(pgsql, pgLofp *, pgsql_lofp, -1, "PostgreSQL large object", le_lofp);
+       ffset = lo_tell((PGconn *)pgsql->conn, pgsql->lofd);
+       ETURN_LONG (offset);
+}
+/* }}} */
+
 #if HAVE_PQCLIENTENCODING
 
 /* {{{ proto int pg_set_client_encoding([int connection,] string encoding)
index 61796519d71b15da92c6c534b6658b23a116dff0..37071c83957d3c2c17fa4f80516554184a0933ba 100644 (file)
@@ -85,6 +85,8 @@ PHP_FUNCTION(pg_lowrite);
 PHP_FUNCTION(pg_loreadall);
 PHP_FUNCTION(pg_loimport);
 PHP_FUNCTION(pg_loexport);
+PHP_FUNCTION(pg_lolseek);
+PHP_FUNCTION(pg_lotell);
 PHP_FUNCTION(pg_put_line);
 PHP_FUNCTION(pg_end_copy);
 #if HAVE_PQCLIENTENCODING