Denis,

I've cleaned up the patch, fixing whitespace, a few memory leaks and
optimized the copy from array code. The code for the copy to/from array/file
was just committed.

I am still reviewing the inTransaction code, since that is something I think
can probably be generic and not database specific.

On Wed, May 26, 2010 at 1:11 PM, Denis Gasparin
<denis.gaspa...@edistar.com>wrote:

>
> I attached to this mail a new version of the patch both in unified and
> single file format.
>
> I attached the unit tests for all the new methods too.
> They are three files: one for pgsqlIsInTransaction(), one for
> pgsqlCopyFrom*  methods and one for pgsqlCopyTo* methods.
>
> I did a typo writing the documentation in my first mail. The typo is about
> the $fields parameter.
> It is actually a string (not an array) with field names separated by comma.
>
> If needed, I can write also documentation in a more suitable format for php
> web site.
>
> The updated documentation of the methods follows.
>
> Any feedback is appreciated.
>
> Thank you in advance,
> Denis
>
> pgsqlIsInTransaction()
>
>    It uses the native Postgresql functions to check transaction status.
>    It returns one of the following status codes:
>        * PDO:GSQL_TRANSACTION_IDLE: connection in idle status
>       * PDO:GSQL_TRANSACTION_ACTIVE: connection is executing a command
>       * PDO:GSQL_TRANSACTION_INTRANS: connection is idle in a valid
> transaction block
>       * PDO:GSQL_TRANSACTION_INERROR: connection is idle, in a failed
> transaction block
>       * PDO:GSQL_TRANSACTION_UNKNOWN: connection is in a bad status
>
>
>
> pgsqlCopyFromArray($table,Array $data,$delimiter,$null, Array $fields)
>
>    It uses the native Postgresql copy construct to append $data to $table.
>    It returns boolean.
>    Parameters:
>       * (mandatory) $table: table to append data to
>       * (mandatory) $data: Array of rows with data in table field order
>                           (or as specified in the $fields array). Fields
> must be separated by $delimiter or by
>                           postgresql standard \t)
>       * $delimiter: alternative delimiter to use in place of the standard
> postgres delimiter ("\t")
>       * $null: alternative string to use as null value. Default is "\N"
>        * $fields: string with table fields that are specified in $data
> parameter. Fields are separated by comma
>
>
>
> pgsqlCopyFromFile($table,$filename,$delimiter,$null,$fields)
>
>    It uses the native Postgresql copy construct to append $filename
> contents to $table.
>    It returns boolean.
>    Parameters:
>       * (mandatory) $table: table to append data to.
>       * (mandatory) $filename: file with contents to append to $table. See
> Postgresql documentation for the format.
>       * $delimiter: alternative delimiter to use in place of the standard
> postgres delimiter ("\t")
>       * $null: alternative string to use as null value. Default is "\N"
>        * $fields: string with table fields that are specified in $filename
> file. Fields are separated by comma
>
> pgsqlCopyToArray($table,$delimiter,$null,$fields)
>
>    It uses the native Postgresql copy construct to retrieve $table contents
> and store them to an array.
>    It returns an array of rows or false in case of problems.
>    The format of the rows into the array is indicated in the $delimiter,
> $null and $fields parameters.
>    Parameters:
>       * (mandatory) $table: table to retrieve data from.
>       * $delimiter: alternative delimiter to use in place of the standard
> postgres delimiter ("\t")
>       * $null: alternative string to use as null value. Default is "\N"
>        * $fields: string with table fields to include in the row of the
> array. Fields are separated by comma
>
>
> pgsqlCopyToFile($table,$filename,$delimiter,$null,$fields)
>
>
>    It uses the native Postgresql copy construct to retrieve $table contents
> and store them into a file.
>    It returns boolean.
>    The format of the rows stored into the file is indicated in the
> $delimiter, $null and $fields parameters.
>    Parameters:
>       * (mandatory) $table: table to retrieve data from.
>       * (mandatory) $filename: file where to store the contents of the
> table
>       * $delimiter: alternative delimiter to use in place of the standard
> postgres delimiter ("\t")
>       * $null: alternative string to use as null value. Default is "\N"
>        * $fields: string with table fields to include in the row of the
> array. Fields are separated by comma
>
>
> ----- Messaggio originale -----
> > Da: "Ilia Alshanetsky" <i...@prohost.org>
> > A: "Denis Gasparin" <denis.gaspa...@edistar.com>
> > Cc: internals@lists.php.net
> > Inviato: Martedì, 25 maggio 2010 18:40:09
> > Oggetto: Re: [PHP-DEV] [PATCH] New PDO methods for PostgreSQL driver
>
> > Good reason, I'll review the patch in the next day or two.
> >
> >
> > On Mon, May 24, 2010 at 5:55 PM, Denis Gasparin <
> > denis.gaspa...@edistar.com > wrote:
> >
> >
> >
> > The copy to/from sql statements accept both as main parameter a
> > filename or stdout/stdin respectively.
> >
> > The filename represents a file in the database filesystem (apache/php
> > and postgresql must reside on the same machine or share the file via
> > shared filesystem). I quote from the postgresql manual:
> >
> > <<<
> > COPY with a file name instructs the PostgreSQL server to directly read
> > from or write to a file. The file must be accessible to the server and
> > the name must be specified from the viewpoint of the (database)
> > server.
> > >>>
> >
> > Because of this "limitation", if you'd like to load a csv file into
> > pgsql via copy command, you must before copy into a shared folder and
> > the issue the copy from filename command.
> > Using the methods added to PDO, you can do it directly from the
> > webserver.
> >
> > About copying to/from stdin and stdout, PostgreSQL enters a particular
> > status after a copy stdin/stdout command has been issued via sql.
> > These status codes are PGRES_COPY_OUT and PGRES_COPY_IN. When in this
> > status, the only way to interact with the database server is via
> > PQgetCopyData and PQputCopyData.
> >
> > There are not PDO methods or functions that implements these functions
> > and there is no way to share the connection between PDO driver and old
> > pgsql drivers.
> >
> > These are the relevant PostgreSQL man pages:
> >
> > http://www.postgresql.org/docs/8.2/interactive/libpq-copy..html
> > http://www.postgresql.org/docs/8.2/interactive/sql-copy.html
> >
> > Denis
> >
> >
> >
> >
> > > Denis could you elaborate on what makes use of the COPY code via Sql
> > > behave differently then a PHP method call?
> > >
> > > Ilia Alshanetsky
> > > CIO/CSO Centah Inc.
> > >
> > > On 2010-05-24, at 15:45, Denis Gasparin < denis.gaspa...@edistar.com
> > > >
> > > wrote:
> > >
> > > >
> > > > I'll provide the patches in a single file as soon as possible..
> > > >
> > > > Actually all the methods are wrappers against the native
> > > > PostgreSQL commands (connection status, copy to/from).
> > > >
> > > > I needed to develop them as methods because it is not possible to
> > > > get the same results with a sql statement (in particular for
> > > > connection status).
> > > >
> > > > It was not possible also for COPY TO/FROM because of the way
> > > > PostgreSQL handle them ( special functions were developed also for
> > > > the old pgsql driver).
> > > >
> > > > We are currently using them in production and we needed them in
> > > > order to avoid additional connections to database (one with the
> > > > old driver and one with PDO).
> > > >
> > > > Denis
> > > >
> > > >
> > > > ----- Messaggio originale -----
> > > >> Da: "Ilia Alshanetsky" < i...@prohost.org >
> > > >> A: "Denis Gasparin" < denis.gaspa...@edistar.com >
> > > >> Cc: internals@lists.php.net
> > > >> Inviato: Lunedì, 24 maggio 2010 19:54:46
> > > >> Oggetto: Re: [PHP-DEV] [PATCH] New PDO methods for PostgreSQL
> > > >> driver
> > > >
> > > >> Denis,
> > > >>
> > > >>
> > > >> Could you merge the patches into a single for easier code review.
> > > >> Also, the copy to/from file seems like it would just be a wrapper
> > > >> against the native COPY PostgreSQL command, is there really a
> > > >> need to provide a method for it?
> > > >>
> > > >>
> > > >> On Mon, May 24, 2010 at 4:57 AM, Denis Gasparin <
> > > >> denis.gaspa...@edistar.com > wrote:
> > > >>
> > > >>
> > > >> Hi.
> > > >>
> > > >> I developed some patches for PDO/Postgresql driver in order to
> > > >> add some useful methods that were available in the original pgsql
> > > >> driver.
> > > >>
> > > >> The attached patches apply on 5.3.2 and svn 5.3.x.
> > > >> If needed, i have patches also for 5.2.x.
> > > >>
> > > >> Please comment and tell me improvements or tips.
> > > >>
> > > >> Thank you in advance,
> > > >>
> > > >> Denis Gasparin
> > > >>
> > > >> Documentation of the added methods follows:
> > > >>
> > > >> pgsqlIsInTransaction()
> > > >>
> > > >> It uses the native Postgresql functions to check transaction
> > > >> status..
> > > >> It returns one of the following status codes:
> > > >> * PDO::PGSQL_TRANSACTION_IDLE: connection in idle status
> > > >> * PDO::PGSQL_TRANSACTION_ACTIVE: connection is executing a
> > > >> command * PDO::PGSQL_TRANSACTION_INTRANS: connection is idle in a
> > > >> valid transaction block
> > > >> * PDO::PGSQL_TRANSACTION_INERROR: connection is idle, in a failed
> > > >> transaction block
> > > >> * PDO::PGSQL_TRANSACTION_UNKNOWN: connection is in a bad status
> > > >>
> > > >>
> > > >>
> > > >> pgsqlCopyFromArray($table,Array $data,$delimiter,$null, Array
> > > >> $fields)
> > > >>
> > > >> It uses the native Postgresql copy construct to append $data to
> > > >> $table. It returns boolean.
> > > >> Parameters: * (mandatory) $table: table to append data to
> > > >> * (mandatory) $data: Array of rows with data in table field order
> > > >> (or as specified in the $fields array). Fields must be separated
> > > >> by $delimiter or by
> > > >> postgresql standard \t)
> > > >> * $delimiter: alternative delimiter to use in place of the
> > > >> standard postgres delimiter ("\t")
> > > >> * $null: alternative string to use as null value. Default is "\N"
> > > >> * $fields: array with table fields that are specified in $data
> > > >> parameter
> > > >>
> > > >>
> > > >>
> > > >> pgsqlCopyFromFile($table,$filename,$delimiter,$null,$fields)
> > > >>
> > > >> It uses the native Postgresql copy construct to append $filename
> > > >> contents to $table.
> > > >> It returns boolean.
> > > >> Parameters: * (mandatory) $table: table to append data to.
> > > >> * (mandatory) $filename: file with contents to append to $table.
> > > >> See Postgresql documentation for the format.
> > > >> * $delimiter: alternative delimiter to use in place of the
> > > >> standard postgres delimiter ("\t")
> > > >> * $null: alternative string to use as null value. Default is "\N"
> > > >> * $fields: array with table fields that are specified in
> > > >> $filename file
> > > >>
> > > >> pgsqlCopyToArray($table,$delimiter,$null,$fields)
> > > >>
> > > >> It uses the native Postgresql copy construct to retrieve $table
> > > >> contents and store them to an array.
> > > >> It returns an array of rows or false in case of problems.
> > > >> The format of the rows into the array is indicated in the
> > > >> $delimiter, $null and $fields parameters.
> > > >> Parameters: * (mandatory) $table: table to retrieve data from..
> > > >> * $delimiter: alternative delimiter to use in place of the
> > > >> standard postgres delimiter ("\t")
> > > >> * $null: alternative string to use as null value. Default is "\N"
> > > >> * $fields: array with table fields to include in the row of the
> > > >> array.
> > > >>
> > > >>
> > > >> pgsqlCopyToFile($table,$filename,$delimiter,$null,$fields)
> > > >>
> > > >>
> > > >> It uses the native Postgresql copy construct to retrieve $table
> > > >> contents and store them into a file.
> > > >> It returns boolean.
> > > >> The format of the rows stored into the file is indicated in the
> > > >> $delimiter, $null and $fields parameters.
> > > >> Parameters: * (mandatory) $table: table to retrieve data from..
> > > >> * (mandatory) $filename: file where to store the contents of the
> > > >> table * $delimiter: alternative delimiter to use in place of the
> > > >> standard postgres delimiter ("\t")
> > > >> * $null: alternative string to use as null value. Default is "\N"
> > > >> * $fields: array with table fields to include in the row of the
> > > >> array.
> > > >>
> > > >> -- PHP Internals - PHP Runtime Development Mailing List
> > > >> To unsubscribe, visit: http://www.php.net/unsub.php
>

Reply via email to