Re: Support for Birdstep RDM Server database engine
| From: | Diggy Bell | Date: | Sun, 17 Nov 2002 20:30:14 +0000 |
| Subject: | Re: Support for Birdstep RDM Server database engine | ||
| References: | 1 | Groups: | php.dev |
| Request: | Send a blank email to php-dev+get-91189@lists.php.net to get a copy of this message | ||
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.
>
>
>