summaryrefslogtreecommitdiff
path: root/pear
diff options
context:
space:
mode:
authorStig Bakken <ssb@php.net>1999-11-22 11:00:53 +0000
committerStig Bakken <ssb@php.net>1999-11-22 11:00:53 +0000
commit541087d17a6c55e8d42d73f06f3886b12fe82504 (patch)
tree6688eaf6f10f889260c55f3e34c0f304b592dcf0 /pear
parentbe6dde2639b82768054928fef97591772bad9c3e (diff)
downloadphp-git-541087d17a6c55e8d42d73f06f3886b12fe82504.tar.gz
@Introduced PECL - PHP Extension and Code Library (prounounced "picke")
Introduced PECL - PHP Extension and Code Library (prounounced "picke"), in the "pecl" subdir. "make install" will now install the database abstraction layer in PREFIX/lib/php. I hereby dedicate this part of PHP to my daughter-of-yesterday Malin. :-)
Diffstat (limited to 'pear')
-rw-r--r--pear/DB.php190
-rw-r--r--pear/Makefile.am9
-rw-r--r--pear/README29
3 files changed, 228 insertions, 0 deletions
diff --git a/pear/DB.php b/pear/DB.php
new file mode 100644
index 0000000000..cab6b7a4d3
--- /dev/null
+++ b/pear/DB.php
@@ -0,0 +1,190 @@
+<?php
+//
+// +----------------------------------------------------------------------+
+// | PHP version 4.0 |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997, 1998, 1999 The PHP Group |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 2.0 of the PHP license, |
+// | that is bundled with this package in the file LICENSE, and is |
+// | available at through the world-wide-web at |
+// | http://www.php.net/license/2_0.txt. |
+// | If you did not receive a copy of the PHP license and are unable to |
+// | obtain it through the world-wide-web, please send a note to |
+// | license@php.net so we can mail you a copy immediately. |
+// +----------------------------------------------------------------------+
+// | Authors: Stig Bakken <ssb@fast.no> |
+// | |
+// +----------------------------------------------------------------------+
+//
+// Database independent query interface.
+//
+
+// {{{ Database independent error codes.
+
+define("DB_OK", 0);
+define("DB_ERROR", -1);
+define("DB_ERROR_SYNTAX", -2);
+define("DB_ERROR_CONSTRAINT", -3);
+define("DB_ERROR_NOT_FOUND", -4);
+define("DB_ERROR_ALREADY_EXISTS", -5);
+define("DB_ERROR_UNSUPPORTED", -6);
+define("DB_ERROR_MISMATCH", -7);
+define("DB_ERROR_INVALID", -8);
+define("DB_ERROR_NOT_CAPABLE", -9);
+define("DB_ERROR_TRUNCATED", -10);
+define("DB_ERROR_INVALID_NUMBER", -11);
+define("DB_ERROR_INVALID_DATE", -12);
+define("DB_ERROR_DIVZERO", -13);
+
+// }}}
+// {{{ Prepare/execute parameter types
+
+define("DB_PARAM_SCALAR", 1);
+define("DB_PARAM_OPAQUE", 2);
+
+// }}}
+// {{{ Binary data modes
+
+define("DB_BINMODE_PASSTHRU", 1);
+define("DB_BINMODE_RETURN", 2);
+define("DB_BINMODE_CONVERT", 3);
+
+// }}}
+
+// {{{ class DB
+
+/**
+ * This class implements a factory method for creating DB objects,
+ * as well as some "static methods".
+ *
+ * @version 100
+ * @author Stig Bakken <ssb@fast.no>
+ * @since 4.0b4
+ */
+class DB {
+ /**
+ * Create a new DB object for the specified database type.
+ * @param $type database type
+ * @return object a newly created DB object, or false on error
+ */
+ function factory($type) {
+ global $USED_PACKAGES;
+ // "include" should be replaced with "use" once PHP gets it
+ $pkgname = 'DB/' . $type;
+ if (!is_array($USED_PACKAGES) || !$USED_PACKAGES[$pkgname]) {
+ if (!@include("DB/${type}.php")) {
+ return DB_ERROR_NOT_FOUND;
+ } else {
+ $USED_PACKAGES[$pkgname] = true;
+ }
+ }
+ $classname = 'DB_' . $type;
+ $obj = new $classname;
+ return $obj;
+ }
+
+ /**
+ * Return the DB API version.
+ * @return int the DB API version number
+ */
+ function apiVersion() {
+ return 100;
+ }
+
+ /**
+ * Tell whether a result code from a DB method is an error.
+ * @param $code result code
+ * @return bool whether $code is an error
+ */
+ function isError($code) {
+ return is_int($code) && ($code < 0);
+ }
+
+ /**
+ * Return a textual error message for an error code.
+ * @param $code error code
+ * @return string error message
+ */
+ function errorMessage($code) {
+ if (!is_array($errorMessages)) {
+ $errorMessages = array(
+ DB_OK => "no error",
+ DB_ERROR => "unknown error",
+ DB_ERROR_SYNTAX => "syntax error",
+ DB_ERROR_CONSTRAINT => "constraint violation",
+ DB_ERROR_NOT_FOUND => "not found",
+ DB_ERROR_ALREADY_EXISTS => "already exists",
+ DB_ERROR_UNSUPPORTED => "not supported",
+ DB_ERROR_MISMATCH => "mismatch",
+ DB_ERROR_INVALID => "invalid",
+ DB_ERROR_NOT_CAPABLE => "DB implementation not capable",
+ DB_ERROR_INVALID_NUMBER => "invalid number",
+ DB_ERROR_INVALID_DATE => "invalid date or time",
+ DB_ERROR_DIVZERO => "division by zero"
+ );
+ }
+ return $errorMessages[$code];
+ }
+}
+
+// }}}
+// {{{ class DB_result
+
+/**
+ * This class implements a wrapper for a DB result set.
+ * A new instance of this class will be returned by the DB implementation
+ * after processing a query that returns data.
+ */
+class DB_result {
+ var $dbh;
+ var $result;
+
+ /**
+ * DB_result constructor.
+ * @param $dbh DB object reference
+ * @param $result result resource id
+ */
+ function DB_result($dbh, $result) {
+ $this->dbh = $dbh;
+ $this->result = $result;
+ }
+
+ /**
+ * Fetch and return a row of data.
+ * @return array a row of data, or false on error
+ */
+ function fetchRow() {
+ return $this->dbh->fetchRow($this->result);
+ }
+
+ /**
+ * Fetch a row of data into an existing array.
+ * @param $arr reference to data array
+ * @return int error code
+ */
+ function fetchInto(const $arr) {
+ return $this->dbh->fetchInto($this->result, &$arr);
+ }
+
+ /**
+ * Frees the resource for this result and reset ourselves.
+ * @return int error code
+ */
+ function free() {
+ $err = $this->dbh->freeResult($this->result);
+ if (DB::isError($err)) {
+ return $err;
+ }
+ $this->dbh = $this->result = false;
+ return true;
+ }
+}
+
+// }}}
+
+// Local variables:
+// tab-width: 4
+// c-basic-offset: 4
+// End:
+?>
diff --git a/pear/Makefile.am b/pear/Makefile.am
new file mode 100644
index 0000000000..2dd988ac9c
--- /dev/null
+++ b/pear/Makefile.am
@@ -0,0 +1,9 @@
+## Process this file with automake to produce Makefile.in
+
+pecldir=$(prefix)/lib/php
+pecl_DBdir=$(prefix)/lib/php/DB
+
+install-data-local:
+ $(mkinstalldirs) $(pecldir) $(pecl_DBdir)
+ $(INSTALL_DATA) $(srcdir)/DB.php $(pecldir)
+ $(INSTALL_DATA) $(srcdir)/DB/odbc.php $(pecl_DBdir)
diff --git a/pear/README b/pear/README
new file mode 100644
index 0000000000..b8ca9c09c6
--- /dev/null
+++ b/pear/README
@@ -0,0 +1,29 @@
+ PECL (pronounced "pickle") - PHP Extension and Code Library
+ -----------------------------------------------------------
+
+WHAT IS PECL?
+
+PECL is a code repository for PHP extensions and PHP library code
+similar to TeX's CTAN and Perl's CPAN.
+
+The intention behind PECL is to provide a means for library code
+authors to organize their code in a defined way shared by other
+developers, and to give the PHP community a single source for such
+code.
+
+
+ADMINISTRATION
+
+This section will describe the rules for how files are structured and
+how functions and classes should be named.
+
+
+TOOLS
+
+This section will describe the tools provided to PECL users.
+
+
+CODING RULES AND GUIDELINES
+
+* All PHP code _must_ use <?php ?>. <? ?> and other formats are not
+ portable.