From cb20dfafc7efe195d2e2983269a3858908fa6ac4 Mon Sep 17 00:00:00 2001 From: zYne Date: Sat, 2 Dec 2006 22:44:53 +0000 Subject: [PATCH] updated datadict drivers --- lib/Doctrine.php | 12 +++ lib/Doctrine/DataDict.php | 135 +---------------------------- lib/Doctrine/DataDict/Firebird.php | 2 +- lib/Doctrine/DataDict/Mssql.php | 2 +- lib/Doctrine/DataDict/Mysql.php | 2 +- lib/Doctrine/DataDict/Oracle.php | 2 +- lib/Doctrine/DataDict/Pgsql.php | 2 +- lib/Doctrine/DataDict/Sqlite.php | 2 +- lib/Doctrine/Export.php | 7 +- lib/Doctrine/Record.php | 2 +- lib/Doctrine/Table.php | 2 +- lib/Doctrine/Transaction.php | 1 + 12 files changed, 28 insertions(+), 143 deletions(-) diff --git a/lib/Doctrine.php b/lib/Doctrine.php index aff302f18..0ab9dd196 100644 --- a/lib/Doctrine.php +++ b/lib/Doctrine.php @@ -374,5 +374,17 @@ final class Doctrine { public static function classify($tablename) { return preg_replace('~(_?)(_)([\w])~e', '"$1".strtoupper("$3")', ucfirst($tablename)); } + /** + * checks for valid class name (uses camel case and underscores) + * + * @param string $classname + * @return boolean + */ + public static function isValidClassname($classname) { + if(preg_match('~(^[a-z])|(_[a-z])|([\W])|(_{2})~', $classname)) + throw new Doctrine_Exception("Class name is not valid. Use camel case and underscores (i.e My_PerfectClass)."); + + return true; + } } ?> diff --git a/lib/Doctrine/DataDict.php b/lib/Doctrine/DataDict.php index 4a66627f5..b7e1b45db 100644 --- a/lib/Doctrine/DataDict.php +++ b/lib/Doctrine/DataDict.php @@ -27,139 +27,10 @@ * @link www.phpdoctrine.com * @since 1.0 * @version $Revision$ - * @author Konsta Vesterinen + * @author Konsta Vesterinen + * @author Lukas Smith (PEAR MDB2 library) */ -class Doctrine_DataDict { +class Doctrine_DataDict extends Doctrine_Connection_Module { - protected $dbh; - - public function __construct($dbh = null) { - - $file = Doctrine::getPath().DIRECTORY_SEPARATOR."Doctrine".DIRECTORY_SEPARATOR."adodb-hack".DIRECTORY_SEPARATOR."adodb.inc.php"; - - if( ! file_exists($file)) - throw new Doctrine_Exception("Couldn't include datadict. File $file does not exist"); - - require_once($file); - - $this->dbh = $dbh; - if($dbh) - $this->dict = NewDataDictionary($dbh); - } - /** - * metaColumns - * - * @param Doctrine_Table $table - * @return array - */ - public function metaColumns(Doctrine_Table $table) { - return $this->dict->metaColumns($table->getTableName()); - } - /** - * createTable - * - * @param string $tablename - * @param array $columns - * @return boolean - */ - public function createTable($tablename, array $columns) { - foreach($columns as $name => $args) { - if( ! is_array($args[2])) - $args[2] = array(); - - unset($args[2]['default']); - - $constraints = array_keys($args[2]); - - $r[] = $name." ".$this->getADOType($args[0],$args[1])." ".implode(' ', $constraints); - } - - - $r = implode(", ",$r); - $a = $this->dict->createTableSQL($tablename,$r); - - $return = true; - foreach($a as $sql) { - try { - $this->dbh->query($sql); - } catch(Exception $e) { - $return = $e; - } - } - - return $return; - } - /** - * converts doctrine type to adodb type - * - * @param string $type column type - * @param integer $length column length - */ - public function getADOType($type,$length) { - switch($type): - case "array": - case "object": - case "string": - case "gzip": - if($length <= 255) - return "C($length)"; - elseif($length <= 4000) - return "X"; - else - return "X2"; - break; - case "mbstring": - if($length <= 255) - return "C2($length)"; - - return "X2"; - case "clob": - return "XL"; - break; - case "blob": - return "B"; - break; - case "date": - return "D"; - break; - case "float": - case "double": - return "F"; - break; - case "timestamp": - return "T"; - break; - case "boolean": - return "L"; - break; - case "enum": - case "integer": - if(empty($length)) - return "I8"; - elseif($length < 4) - return "I1"; - elseif($length < 6) - return "I2"; - elseif($length < 10) - return "I4"; - else - return "I8"; - break; - default: - throw new Doctrine_Exception("Unknown column type $type"); - endswitch; - } - - /** - * checks for valid class name (uses camel case and underscores) - * - * @param string $classname - * @return boolean - */ - public static function isValidClassname($classname) { - if(preg_match('~(^[a-z])|(_[a-z])|([\W])|(_{2})~', $classname)) - throw new Doctrine_Exception("Class name is not valid. Use camel case and underscores (i.e My_PerfectClass)."); - return true; - } } diff --git a/lib/Doctrine/DataDict/Firebird.php b/lib/Doctrine/DataDict/Firebird.php index 75b091ff2..182f724d2 100644 --- a/lib/Doctrine/DataDict/Firebird.php +++ b/lib/Doctrine/DataDict/Firebird.php @@ -30,7 +30,7 @@ Doctrine::autoload('Doctrine_DataDict'); * @link www.phpdoctrine.com * @since 1.0 */ -class Doctrine_DataDict_Firebird extends Doctrine_Connection_Module { +class Doctrine_DataDict_Firebird extends Doctrine_DataDict { /** * Obtain DBMS specific SQL code portion needed to declare an text type * field to be used in statements like CREATE TABLE. diff --git a/lib/Doctrine/DataDict/Mssql.php b/lib/Doctrine/DataDict/Mssql.php index a5fab2ed4..8b9d2babb 100644 --- a/lib/Doctrine/DataDict/Mssql.php +++ b/lib/Doctrine/DataDict/Mssql.php @@ -30,7 +30,7 @@ * @link www.phpdoctrine.com * @since 1.0 */ -class Doctrine_DataDict_Mssql extends Doctrine_Connection_Module { +class Doctrine_DataDict_Mssql extends Doctrine_DataDict { /** * Obtain DBMS specific SQL code portion needed to declare an text type * field to be used in statements like CREATE TABLE. diff --git a/lib/Doctrine/DataDict/Mysql.php b/lib/Doctrine/DataDict/Mysql.php index 67b64c04d..41853f4c8 100644 --- a/lib/Doctrine/DataDict/Mysql.php +++ b/lib/Doctrine/DataDict/Mysql.php @@ -29,7 +29,7 @@ Doctrine::autoload('Doctrine_DataDict'); * @link www.phpdoctrine.com * @since 1.0 */ -class Doctrine_DataDict_Mysql extends Doctrine_Connection_Module { +class Doctrine_DataDict_Mysql extends Doctrine_DataDict { /** * Obtain DBMS specific SQL code portion needed to declare an text type * field to be used in statements like CREATE TABLE. diff --git a/lib/Doctrine/DataDict/Oracle.php b/lib/Doctrine/DataDict/Oracle.php index 73ee5677c..b81f8907b 100644 --- a/lib/Doctrine/DataDict/Oracle.php +++ b/lib/Doctrine/DataDict/Oracle.php @@ -27,7 +27,7 @@ * @link www.phpdoctrine.com * @since 1.0 */ -class Doctrine_DataDict_Oracle extends Doctrine_Connection_Module { +class Doctrine_DataDict_Oracle extends Doctrine_DataDict { /** * Obtain DBMS specific SQL code portion needed to declare an text type * field to be used in statements like CREATE TABLE. diff --git a/lib/Doctrine/DataDict/Pgsql.php b/lib/Doctrine/DataDict/Pgsql.php index b8256ab86..2b7e81289 100644 --- a/lib/Doctrine/DataDict/Pgsql.php +++ b/lib/Doctrine/DataDict/Pgsql.php @@ -29,7 +29,7 @@ * @link www.phpdoctrine.com * @since 1.0 */ -class Doctrine_DataDict_Pgsql extends Doctrine_Connection_Module { +class Doctrine_DataDict_Pgsql extends Doctrine_DataDict { /** * @param array $reservedKeyWords an array of reserved keywords by pgsql */ diff --git a/lib/Doctrine/DataDict/Sqlite.php b/lib/Doctrine/DataDict/Sqlite.php index 4bf55e36f..383e9c953 100644 --- a/lib/Doctrine/DataDict/Sqlite.php +++ b/lib/Doctrine/DataDict/Sqlite.php @@ -29,7 +29,7 @@ Doctrine::autoload('Doctrine_DataDict'); * @link www.phpdoctrine.com * @since 1.0 */ -class Doctrine_DataDict_Sqlite extends Doctrine_Connection_Module { +class Doctrine_DataDict_Sqlite extends Doctrine_DataDict { /** * Obtain DBMS specific SQL code portion needed to declare an text type * field to be used in statements like CREATE TABLE. diff --git a/lib/Doctrine/Export.php b/lib/Doctrine/Export.php index 78eba9445..c764f0062 100644 --- a/lib/Doctrine/Export.php +++ b/lib/Doctrine/Export.php @@ -24,6 +24,7 @@ Doctrine::autoload('Doctrine_Connection_Module'); * * @package Doctrine * @author Konsta Vesterinen + * @author Lukas Smith (PEAR MDB2 library) * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @category Object Relational Mapping * @link www.phpdoctrine.com @@ -147,11 +148,11 @@ class Doctrine_Export extends Doctrine_Connection_Module { * create sequence * (this method is implemented by the drivers) * - * @param string $seq_name name of the sequence to be created - * @param string $start start value of the sequence; default is 1 + * @param string $seqName name of the sequence to be created + * @param string $start start value of the sequence; default is 1 * @return void */ - public function createSequence($seq_name, $start = 1) { + public function createSequence($seqName, $start = 1) { throw new Doctrine_Export_Exception('Create sequence not supported by this driver.'); } diff --git a/lib/Doctrine/Record.php b/lib/Doctrine/Record.php index 6a69aada0..158ecc1af 100644 --- a/lib/Doctrine/Record.php +++ b/lib/Doctrine/Record.php @@ -134,7 +134,7 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite public function __construct($table = null, $isNewEntry = false) { if(isset($table) && $table instanceof Doctrine_Table) { $this->_table = $table; - $exists = !$isNewEntry; + $exists = ( ! $isNewEntry); } else { $this->_table = Doctrine_Manager::getInstance()->getCurrentConnection()->getTable(get_class($this)); $exists = false; diff --git a/lib/Doctrine/Table.php b/lib/Doctrine/Table.php index cfe72344c..eecbda668 100644 --- a/lib/Doctrine/Table.php +++ b/lib/Doctrine/Table.php @@ -241,7 +241,7 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable { endswitch; if($this->getAttribute(Doctrine::ATTR_CREATE_TABLES)) { - if(Doctrine_DataDict::isValidClassname($class->getName())) { + if(Doctrine::isValidClassname($class->getName())) { //$dict = new Doctrine_DataDict($this->getConnection()->getDBH()); try { $columns = array(); diff --git a/lib/Doctrine/Transaction.php b/lib/Doctrine/Transaction.php index a5c071646..7cb160668 100644 --- a/lib/Doctrine/Transaction.php +++ b/lib/Doctrine/Transaction.php @@ -22,6 +22,7 @@ Doctrine::autoload('Doctrine_Connection_Module'); /** * * @author Konsta Vesterinen + * @author Lukas Smith (PEAR MDB2 library) * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @package Doctrine * @category Object Relational Mapping