RE: [PHP-DEV] Re: Support for Birdstep RDM Server database engine
| From: | James Cox | Date: | Mon, 18 Nov 2002 04:22:52 +0000 |
| Subject: | RE: [PHP-DEV] Re: Support for Birdstep RDM Server database engine | ||
| References: | 1 | Groups: | php.dev |
| Request: | Send a blank email to php-dev+get-91211@lists.php.net to get a copy of this message | ||
fwiw,
i have also meddled with birdstep slightly, by making the namechange from
velocis to birdstep.
I agree with Dan -- i think it should be pecl'ed, and perhaps not so reliant
on the odbc stuff -- that whole extension is just confusing. That said, Dan
is the best person to work on with this.
-- james
> -----Original Message-----
> From: Diggy Bell [mailto:diggy_b@hotmail.com]
> Sent: Monday, November 18, 2002 3:49 AM
> To: Dan Kalowsky
> Cc: php-dev@lists.php.net
> Subject: Re: [PHP-DEV] Re: Support for Birdstep RDM Server database
> engine
>
>
> Thanks Dan,
>
> From looking at the module that was in ./ext/odbc, it was created using a
> somewhat earlier release of the RDM Server/Velocis (circa Velocis
> v2.x). I
> had to make a number of changes related to API changes in Birdstep's
> libraries to support ODBC 3.51. I've also started laying the
> groundwork to
> take advantage of scrollable cursors (a painful omission from the current
> version of RDM Server).
>
> Since there doesn't seem to be anyone familiar with Birdstep, I guess I
> could volunteer to be the 'expert'. In reality, I was the first beta and
> deployed customer back in '92, and later went to work for the
> company (then
> Raima) in '94. I was a Sr. Proj. Lead and Eng. Mgr. for their consulting
> subsidiary (Vista Development) until late 2000.
>
> These days I'm running my own business and use PHP for a variety of needs.
> But with Birdstep wanting this module, I became interested in
> being able to
> give back to the community more directly. Supporters are great, but
> sometimes someone needs to get in the trenches and I guess I'm
> silly enough
> to want to do it. ;)
>
> With respect to the changes, I listed the changes that I've
> already made in
> the original post, but there are some additional mods that are needed.
>
> 1. There is currently no way to ensure that connections are
> closed properly.
> If a script doesn't call birdstep_close() the module will leak connection
> handles and will eventually exhaust available connections on the server.
>
> 2. Birdstep's support for LONG VARCHAR columns has some limitations
> surrounding use of SQLFetch vs. SQLFetchScroll. To meet
> Birdstep's needs, I
> am using fixed buffers for these columns in the module. I'm
> looking at the
> possibility of using RDM Server's BLOB handling functions (the
> 'd_' API) to
> allow for more efficient handling of these columns.
>
> 3. There are some significant improvements that could be made to the error
> handling. The module currently has no access to error
> information returned
> from the server. There are also a few places in the code that could be
> handled a little more gracefully if an error occurs.
>
> As for the PECL module, I'll have to do a little more investigation into
> what would be required. I got started with the standard extension
> architecture and worked from there. If the change to PECL is
> straightfoward, I'll go ahead and start looking at getting that done. If
> you can point at any good reference sources, I'd be most thankful! :-D
>
> Diggy
>
> ----- Original Message -----
> From: "Dan Kalowsky" <dank@deadmime.org>
> To: "Diggy Bell" <diggy_b@hotmail.com>
> Cc: <php-dev@lists.php.net>
> Sent: Sunday, November 17, 2002 12:42 PM
> Subject: Re: [PHP-DEV] Re: Support for Birdstep RDM Server database engine
>
>
> > Hello Diggy,
> >
> > Birdstep was rolled into the ODBC functionality, and has really not
> > seen any support since. I don't believe anyone currently on the PHP
> > staff is really familiar with the way the Birdstep systems work. The
> > reality is though that I don't see many PHP users using
> > Birdstep/Velocis support. This could of course be a chicken/egg
> > problem, where the PHP support is lacking etc etc...
> >
> > What are the changes you're planning to do? If you'd like to make
> > birdstep it's own module, I'd suggest looking at creating it as a PECL
> > module, and working from there.
> >
> > Typically we don't discourage integration with systems/API's,
> > especially if the author is willing to maintain it :)
> >
> > On Sunday, November 17, 2002, at 03:30 PM, Diggy Bell wrote:
> >
> > > Hello again,
> > >
> > > I've not heard anything from anybody regarding my previous post. My
> > > first
> > > thought is that everyone is caught up in the release activities, but I
> > > would
> > > appreciate any comments that anyone might be able to offer.
> > >
> > > Thanks,
> > >
> > > Diggy
> > >
> > > "Diggy Bell" <diggy_b@hotmail.com> wrote in message
> > > news:20021114113446.55228.qmail@pb1.pair.com...
> > >> Hello All,
> > >>
> > >> I have recently been approached by Birdstep about updating the PHP
> > >> module
> > > to
> > >> support their database engine for an internal project. In the past
> > > (v4.1.2
> > >> and earlier IIRC), PHP has provided support for the Birdstep
> (formerly
> > >> Velocis) database as part of the distribution. Since v4.1.2 (IIRC)
> > >> this
> > >> support has been dropped in the standard source tree. But, I was
> > >> able to
> > >> locate the old code under ./ext/odbc and so I have resurrected the
> > >> module.
> > >> In the process, I have made a number of modifications and additions
> > >> to the
> > >> library to bring it up to date with the latest version of Birdstep's
> > >> product.
> > >>
> > >> My main question is: Is this module something that the community
> > >> would
> > > like
> > >> to have available again? If so, I am willing to pick up the
> > >> maintenance
> > >> duties on the module. I'm a former employee of the company and have
> > > access
> > >> to 'back-door' support when necessary.
> > >>
> > >> I've taken a bit of time and put together some notes on the
> > >> modifications
> > >> that I have made to this point. These notes are copied below for
> > >> review.
> > >> I've also attached the modified source files. (NOTE: I
> realize these
> > >> aren't formatted to PHP standards...please let me slide on that one
> > >> while
> > >> I'm making more significant changes :-P) If there is interest, I am
> > >> also
> > >> considering addiing some enhancements for connection management and
> > >> error
> > >> handling.
> > >>
> > >> Any thoughts/comments would be appreciated.
> > >>
> > >> --
> > >> William D. 'Diggy' Bell
> > >> Principal
> > >> DB Software Development
> > >> http://www.dbsoftdev.com
> > >>
> > >> /***** CUT HERE *****/
> > >>
> > >> Birdstep PHP Extension
> > >> Design Specification
> > >>
> > >> Date: 11/14/2002
> > >> By: William D. 'Diggy' Bell
> > >>
> > >> INTRODUCTION
> > >>
> > >> The Birdstep PHP Extension allows PHP applications to access the
> > >> Birdstep
> > >> RDM Server database engine.
> > >>
> > >> REQUIREMENTS
> > >>
> > >> 1. Support for LONG VARCHAR columns
> > >> 2. Positioned fetch operations
> > >> 3. Support for birdstep_fetch_array()
> > >> 4. Support for birdstep_num_fields()
> > >> 5. Support for birdstep_affected_rows()
> > >>
> > >> DESIGN CONSIDERATIONS
> > >>
> > >> 1. API conflict between SQLFetchScroll and SQLGetData
> > >>
> > >> There is a current design limitation in the RDM Server that prevents
> > >> the
> > > use
> > >> of SQLGetData() with rowsets that have been retrieved using
> > >> SQLFetchScroll(). This
> > >> limitation strongly impacts how LONG VARCHAR fields can be handled.
> > >> Two
> > >> methods are described below.
> > >>
> > >> a. Use SQLFetch() instead of SQLFetchScroll().
> > >>
> > >> The requirement for positioned fetch operations eliminates this
> > >> option.
> > >>
> > >> b. Use a maximum sized buffer for LONG VARCHAR columns
> > >>
> > >> In this method, a buffer of a fixed maximum size would be allocated
> > >> for
> > > each
> > >> LONG VARCHAR column. The column would then be bound using
> > >> SQLBindCol() to
> > >> retrieve the data in one operation.
> > >>
> > >> Option (b) was chosen because it allows support for SQLFetchScroll().
> > > This
> > >> can have
> > >> significant implications on applications that have a large number of
> > >> LONG
> > >> VARCHAR
> > >> columns due to unnecessarily high memory requirements.
> > >>
> > >> NOTE: There are additional limitations in the RDM Server engine that
> > >> have
> > >> prevented
> > >> implementation of cursor positioning. SQLFetchScroll will continue
> > >> to be
> > >> used for
> > >> smoothest migration when RDM Server support for cursor positioning is
> > > added.
> > >>
> > >> INTERNAL DATA STRUCTURES
> > >>
> > >> typedef struct VConn {
> > >> HDBC hdbc;
> > >> long index;
> > >> int connected;
> > >> } VConn;
> > >>
> > >> typedef struct {
> > >> char name[32];
> > >> char* value;
> > >> long vallen;
> > >> SDWORD valtype;
> > >> } VResVal;
> > >>
> > >> typedef struct Vresult {
> > >> HSTMT hstmt;
> > >> VConn* conn;
> > >> long index;
> > >> VResVal* values;
> > >> long numcols;
> > >> int fetched;
> > >> } Vresult;
> > >>
> > >> typedef struct _php_birdstep_globals
> > >> {
> > >> long num_links;
> > >> long max_links;
> > >> int le_link;
> > >> int le_result;
> > >> } php_birdstep_globals;
> > >>
> > >> INTERNAL FUNCTIONS
> > >>
> > >> PHP_MINIT_FUNCTION(birdstep)
> > >> PHP_MSHUTDOWN_FUNCTION(birdstep)
> > >> PHP_RINIT_FUNCTION(birdstep)
> > >> PHP_RSHUTDOWN_FUNCTION(birdstep)
> > >> PHP_MINFO_FUNCTION(birdstep)
> > >>
> > >> APPLICATION PROGRAMMING INTERFACE
> > >>
> > >> birdstep_connect($server, $user, $password)
> > >> ---------------------------------------------------------------------
> > >> Parameters:
> > >>
> > >> $server - RDM Server name
> > >> $user - database user name
> > >> $password - user's password
> > >>
> > >> Returns:
> > >>
> > >> connection handle
> > >>
> > >> Description:
> > >>
> > >> This function will connection to the RDM Server identified by
> > >> $server.
> > >> The
> > >> $user and $password must be valid users on the server.
> > >>
> > >> birdstep_close($conn)
> > >> ---------------------------------------------------------------------
> > >> Parameters:
> > >>
> > >> $conn - connection handle to close
> > >>
> > >> Returns:
> > >>
> > >> TRUE if successful, FALSE if an error occurred.
> > >>
> > >> Description:
> > >>
> > >> This function will close the specified connection to the
> RDM Server
> > >>
> > >> birdstep_exec($conn, $sql)
> > >> ---------------------------------------------------------------------
> > >> Parameters:
> > >>
> > >> $conn - database connection handle
> > >> $sql - SQL statement to be executed
> > >>
> > >> Returns:
> > >>
> > >> Result index if successful, Zero if an error occurred.
> > >>
> > >> Description:
> > >>
> > >> This function will execute the $sql statement on the server
> > >> identified
> > > by
> > >> $conn
> > >>
> > >> birdstep_fetch($result)
> > >> ---------------------------------------------------------------------
> > >> Parameters:
> > >>
> > >> $result - result set index (from birdstep_exec())
> > >>
> > >> Returns:
> > >>
> > >> TRUE if successful, FALSE if an error occurred.
> > >>
> > >> Description:
> > >>
> > >> This function will retrieve the next row from a result set.
> > >>
> > >> birdstep_fetch_array($result)
> > >> ---------------------------------------------------------------------
> > >> Parameters:
> > >>
> > >> $result - result set index (from birdstep_exec())
> > >>
> > >> Returns:
> > >>
> > >> Associative array of column values with column names as key names.
> > >>
> > >> Description:
> > >>
> > >> This function will retrieve a row from a result set and return the
> > >> results as an
> > >> associative array. The column names will be assigned to the key
> > >> names.
> > >> The
> > >> data values will be assigned to the array elements.
> > >>
> > >> birdstep_result($result, $index)
> > >> ---------------------------------------------------------------------
> > >> Parameters:
> > >>
> > >> $result - result set index (from birdstep_exec())
> > >> $index - column index to be retrieved
> > >>
> > >> Returns:
> > >>
> > >> The value of the column specified by $index in the result set,
> > >> $result.
> > >> FALSE
> > >> if an error occurred.
> > >>
> > >> Description:
> > >>
> > >> This function is used to retrieve a column value from the current
> > >> row
> > > in
> > >> the
> > >> result set.
> > >>
> > >> birdstep_freeresult($result)
> > >> ---------------------------------------------------------------------
> > >> Parameters:
> > >>
> > >> $result - result set index (from birdstep_exec())
> > >>
> > >> Returns:
> > >>
> > >> TRUE if successful, FALSE if an error occurred.
> > >>
> > >> Description:
> > >>
> > >> This function will free a result set that has been previously
> > >> allocated
> > >> using
> > >> the birdstep_exec() function.
> > >>
> > >> birdstep_autocommit($conn)
> > >> ---------------------------------------------------------------------
> > >> Parameters:
> > >>
> > >> $conn - database connection handle
> > >>
> > >> Returns:
> > >>
> > >> TRUE if successful, FALSE if an error occurred.
> > >>
> > >> Description:
> > >>
> > >> This function will enable the auto-commit feature of RDM Server.
> > >>
> > >> birdstep_off_autocommit($conn)
> > >> ---------------------------------------------------------------------
> > >> Parameters:
> > >>
> > >> $conn - database connection handle
> > >>
> > >> Returns:
> > >>
> > >> TRUE if successful, FALSE if an error occurred.
> > >>
> > >> Description:
> > >>
> > >> This function will disable the auto-commit feature of RDM Server.
> > >>
> > >> birdstep_commit($conn)
> > >> ---------------------------------------------------------------------
> > >> Parameters:
> > >>
> > >> $conn - database connection handle
> > >>
> > >> Returns:
> > >>
> > >> TRUE if successful, FALSE if an error occurred.
> > >>
> > >> Description:
> > >>
> > >> This function will commit changes to the database during a
> > >> transaction.
> > >>
> > >> birdstep_rollback($conn)
> > >> ---------------------------------------------------------------------
> > >> Parameters:
> > >>
> > >> $conn - database connection handle
> > >>
> > >> Returns:
> > >>
> > >> TRUE if successful, FALSE if an error occurred.
> > >>
> > >> Description:
> > >>
> > >> This function will rollback changes to the database during a
> > > transaction.
> > >>
> > >> birdstep_num_fields($result)
> > >> ---------------------------------------------------------------------
> > >> Parameters:
> > >>
> > >> $result - result set index (from birdstep_exec())
> > >>
> > >> Returns:
> > >>
> > >> Number of columns in result set, or FALSE if an error occurred.
> > >>
> > >> Description:
> > >>
> > >> This function will retrieve the number of columns in the result
> > >> set.
> > >>
> > >> birdstep_field_name($result $index)
> > >> ---------------------------------------------------------------------
> > >> Parameters:
> > >>
> > >> $result - result set index (from birdstep_exec())
> > >> $index - column index of column name to retrieve
> > >>
> > >> Returns:
> > >>
> > >> Column name, or FALSE if an error occurred.
> > >>
> > >> Description:
> > >>
> > >> This function will retrieve the name of the column represented by
> > > $index.
> > >>
> > >> OPEN ITEMS
> > >>
> > >> 1. LONG VARCHAR Max Length
> > >>
> > >> The maximum length for a LONG VARCHAR column is currently a #define.
> > >> This
> > >> should be moved to an INI entry and managed through the Zend INI
> > > interface.
> > >>
> > >>
> > >>
> > >
> > >
> > >
> > > --
> > > PHP Development Mailing List
> > > <http://www.php.net/>
> > > To unsubscribe, visit: http://www.php.net/unsub.php
> > >
> > >---------------------------------------------------------------<
> > Dan Kalowsky "Tonight I think I'll walk alone,
> > http://www.deadmime.org/~dank I'll find myself as
> > I go home"
> > dank-nom@aps-deadmime.org - "Temptation",
> > kalowsky@php.net New Order
> >
>
> --
> PHP Development Mailing List <http://www.php.net/>
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>