Hi,

I really think that we should consider the long term ramifications of these
changes. If we do implement database specific features now and continue to
implement more in the future, we can't possibly think it is a good idea to
just dump them all in the global PDO namespace. This would be a devastating
mistake and the results would be felt for years to come. Please do not allow
this to just be blindly committed. We need to step back and think of a
proper design to handle this instead of just committing it because their is
a patch now and it "works".

Thanks, Jon

On Thu, Jun 3, 2010 at 12:07 PM, Denis Gasparin
<denis.gaspa...@edistar.com>wrote:

> Hi.
>
> Did you have the time to review the patches? Any problem with them?
>
> Thank you in advance,
> Denis
>
>
> ----- Messaggio originale -----
> > Da: "Denis Gasparin" <denis.gaspa...@edistar.com>
> > A: "Ilia Alshanetsky" <i...@prohost.org>, "Matteo Beccati" <
> p...@beccati.com>
> > Cc: internals@lists.php.net, "pdo" <p...@lists.php.net>
> > Inviato: Mercoledì, 26 maggio 2010 13:11:17
> > Oggetto: Re: [PHP-DEV] [PATCH] New PDO methods for PostgreSQL driver
>
> > 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
> >
> > -- PHP Internals - PHP Runtime Development Mailing List
> > To unsubscribe, visit: http://www.php.net/unsub.php
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>


-- 
Jonathan H. Wage (+1 415 992 5468)
Open Source Software Developer & Evangelist
sensiolabs.com | jwage.com | doctrine-project.org | symfony-project.org

You should follow me on Twitter: http://www.twitter.com/jwage

You can contact Jonathan about Doctrine, Symfony and Open-Source or for
training, consulting, application development, or business related questions
at jonathan.w...@sensio.com

Reply via email to