From ea9e7eb535b460218b693d4e5fec80297eb3e360 Mon Sep 17 00:00:00 2001 From: wei <> Date: Thu, 3 May 2007 01:37:21 +0000 Subject: Add northwind db demo. --- .gitattributes | 19 ++++++ demos/northwind-db/index.php | 28 +++++++++ demos/northwind-db/protected/.htaccess | 1 + demos/northwind-db/protected/application.xml | 20 ++++++ demos/northwind-db/protected/data/Northwind.db | Bin 0 -> 583680 bytes demos/northwind-db/protected/database/Category.php | 26 ++++++++ demos/northwind-db/protected/database/Customer.php | 33 ++++++++++ demos/northwind-db/protected/database/Employee.php | 48 ++++++++++++++ demos/northwind-db/protected/database/Order.php | 42 +++++++++++++ .../protected/database/OrderDetail.php | 27 ++++++++ demos/northwind-db/protected/database/Product.php | 36 +++++++++++ demos/northwind-db/protected/database/Region.php | 24 +++++++ demos/northwind-db/protected/database/Shipper.php | 25 ++++++++ demos/northwind-db/protected/database/Supplier.php | 34 ++++++++++ .../northwind-db/protected/database/Territory.php | 60 ++++++++++++++++++ demos/northwind-db/protected/pages/Home.page | 12 ++++ demos/northwind-db/protected/pages/Home.php | 28 +++++++++ demos/northwind-db/protected/pages/northwind.gif | Bin 0 -> 25177 bytes .../Scaffold/InputBuilder/TMssqlScaffoldInput.php | 6 +- .../Data/Common/Mysql/TMysqlCommandBuilder.php | 27 ++++++++ framework/Data/Common/Mysql/TMysqlTableInfo.php | 10 +++ .../Data/Common/Pgsql/TPgsqlCommandBuilder.php | 70 +++++++++++++++++++++ framework/Data/Common/Pgsql/TPgsqlTableInfo.php | 10 +++ 23 files changed, 585 insertions(+), 1 deletion(-) create mode 100644 demos/northwind-db/index.php create mode 100644 demos/northwind-db/protected/.htaccess create mode 100644 demos/northwind-db/protected/application.xml create mode 100644 demos/northwind-db/protected/data/Northwind.db create mode 100644 demos/northwind-db/protected/database/Category.php create mode 100644 demos/northwind-db/protected/database/Customer.php create mode 100644 demos/northwind-db/protected/database/Employee.php create mode 100644 demos/northwind-db/protected/database/Order.php create mode 100644 demos/northwind-db/protected/database/OrderDetail.php create mode 100644 demos/northwind-db/protected/database/Product.php create mode 100644 demos/northwind-db/protected/database/Region.php create mode 100644 demos/northwind-db/protected/database/Shipper.php create mode 100644 demos/northwind-db/protected/database/Supplier.php create mode 100644 demos/northwind-db/protected/database/Territory.php create mode 100644 demos/northwind-db/protected/pages/Home.page create mode 100644 demos/northwind-db/protected/pages/Home.php create mode 100644 demos/northwind-db/protected/pages/northwind.gif create mode 100644 framework/Data/Common/Mysql/TMysqlCommandBuilder.php create mode 100644 framework/Data/Common/Pgsql/TPgsqlCommandBuilder.php diff --git a/.gitattributes b/.gitattributes index ca665df6..1540fabf 100644 --- a/.gitattributes +++ b/.gitattributes @@ -883,6 +883,23 @@ demos/helloworld/index.php -text demos/helloworld/protected/.htaccess -text demos/helloworld/protected/pages/Home.page -text demos/helloworld/protected/pages/Home.php -text +demos/northwind-db/index.php -text +demos/northwind-db/protected/.htaccess -text +demos/northwind-db/protected/application.xml -text +demos/northwind-db/protected/data/Northwind.db -text +demos/northwind-db/protected/database/Category.php -text +demos/northwind-db/protected/database/Customer.php -text +demos/northwind-db/protected/database/Employee.php -text +demos/northwind-db/protected/database/Order.php -text +demos/northwind-db/protected/database/OrderDetail.php -text +demos/northwind-db/protected/database/Product.php -text +demos/northwind-db/protected/database/Region.php -text +demos/northwind-db/protected/database/Shipper.php -text +demos/northwind-db/protected/database/Supplier.php -text +demos/northwind-db/protected/database/Territory.php -text +demos/northwind-db/protected/pages/Home.page -text +demos/northwind-db/protected/pages/Home.php -text +demos/northwind-db/protected/pages/northwind.gif -text demos/personal/index.php -text demos/personal/protected/.htaccess -text demos/personal/protected/Common/LoginPortlet.php -text @@ -1644,9 +1661,11 @@ framework/Data/Common/Mssql/TMssqlCommandBuilder.php -text framework/Data/Common/Mssql/TMssqlMetaData.php -text framework/Data/Common/Mssql/TMssqlTableColumn.php -text framework/Data/Common/Mssql/TMssqlTableInfo.php -text +framework/Data/Common/Mysql/TMysqlCommandBuilder.php -text framework/Data/Common/Mysql/TMysqlMetaData.php -text framework/Data/Common/Mysql/TMysqlTableColumn.php -text framework/Data/Common/Mysql/TMysqlTableInfo.php -text +framework/Data/Common/Pgsql/TPgsqlCommandBuilder.php -text framework/Data/Common/Pgsql/TPgsqlMetaData.php -text framework/Data/Common/Pgsql/TPgsqlTableColumn.php -text framework/Data/Common/Pgsql/TPgsqlTableInfo.php -text diff --git a/demos/northwind-db/index.php b/demos/northwind-db/index.php new file mode 100644 index 00000000..94e60d49 --- /dev/null +++ b/demos/northwind-db/index.php @@ -0,0 +1,28 @@ +run(); + +?> \ No newline at end of file diff --git a/demos/northwind-db/protected/.htaccess b/demos/northwind-db/protected/.htaccess new file mode 100644 index 00000000..3418e55a --- /dev/null +++ b/demos/northwind-db/protected/.htaccess @@ -0,0 +1 @@ +deny from all \ No newline at end of file diff --git a/demos/northwind-db/protected/application.xml b/demos/northwind-db/protected/application.xml new file mode 100644 index 00000000..3ac9c67c --- /dev/null +++ b/demos/northwind-db/protected/application.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/demos/northwind-db/protected/data/Northwind.db b/demos/northwind-db/protected/data/Northwind.db new file mode 100644 index 00000000..9d6b08b4 Binary files /dev/null and b/demos/northwind-db/protected/data/Northwind.db differ diff --git a/demos/northwind-db/protected/database/Category.php b/demos/northwind-db/protected/database/Category.php new file mode 100644 index 00000000..05fa7ed0 --- /dev/null +++ b/demos/northwind-db/protected/database/Category.php @@ -0,0 +1,26 @@ + array(self::HAS_MANY, 'Product'), + ); + + public static function finder($className=__CLASS__) + { + return parent::finder($className); + } +} +?> \ No newline at end of file diff --git a/demos/northwind-db/protected/database/Customer.php b/demos/northwind-db/protected/database/Customer.php new file mode 100644 index 00000000..356dd02f --- /dev/null +++ b/demos/northwind-db/protected/database/Customer.php @@ -0,0 +1,33 @@ + array(self::HAS_MANY, 'Order'), + ); + + public static function finder($className=__CLASS__) + { + return parent::finder($className); + } +} +?> \ No newline at end of file diff --git a/demos/northwind-db/protected/database/Employee.php b/demos/northwind-db/protected/database/Employee.php new file mode 100644 index 00000000..7a678f57 --- /dev/null +++ b/demos/northwind-db/protected/database/Employee.php @@ -0,0 +1,48 @@ + array(self::HAS_MANY, 'Territory', 'EmployeeTerritories'), + 'Orders' => array(self::HAS_MANY, 'Order'), + + //parent children relationship + 'Subordinates' => array(self::HAS_MANY, 'Employee'), + 'Superior' => array(self::BELONGS_TO, 'Employee') + ); + + public static function finder($className=__CLASS__) + { + return parent::finder($className); + } +} +?> \ No newline at end of file diff --git a/demos/northwind-db/protected/database/Order.php b/demos/northwind-db/protected/database/Order.php new file mode 100644 index 00000000..fa865e61 --- /dev/null +++ b/demos/northwind-db/protected/database/Order.php @@ -0,0 +1,42 @@ + array(self::HAS_MANY, 'OrderDetail'), + 'Customer' => array(self::BELONGS_TO, 'Customer'), + 'Shipper' => array(self::BELONGS_TO, 'Shipper'), + 'Employee' => array(self::BELONGS_TO, 'Employee'), + ); + + public static function finder($className=__CLASS__) + { + return parent::finder($className); + } +} +?> \ No newline at end of file diff --git a/demos/northwind-db/protected/database/OrderDetail.php b/demos/northwind-db/protected/database/OrderDetail.php new file mode 100644 index 00000000..9415e33e --- /dev/null +++ b/demos/northwind-db/protected/database/OrderDetail.php @@ -0,0 +1,27 @@ + array(self::BELONGS_TO, 'Product'), + 'Order' => array(self::BELONGS_TO, 'Order'), + ); + + public static function finder($className=__CLASS__) + { + return parent::finder($className); + } +} +?> \ No newline at end of file diff --git a/demos/northwind-db/protected/database/Product.php b/demos/northwind-db/protected/database/Product.php new file mode 100644 index 00000000..75d01c02 --- /dev/null +++ b/demos/northwind-db/protected/database/Product.php @@ -0,0 +1,36 @@ + array(self::BELONGS_TO, 'Supplier'), + 'Category' => array(self::BELONGS_TO, 'Category'), + 'OrderDetails' => array(self::HAS_MANY, 'OrderDetail'), + ); + + public static function finder($className=__CLASS__) + { + return parent::finder($className); + } +} +?> \ No newline at end of file diff --git a/demos/northwind-db/protected/database/Region.php b/demos/northwind-db/protected/database/Region.php new file mode 100644 index 00000000..2afa3501 --- /dev/null +++ b/demos/northwind-db/protected/database/Region.php @@ -0,0 +1,24 @@ + array(self::HAS_MANY, 'Territory') + ); + + public static function finder($className=__CLASS__) + { + return parent::finder($className); + } +} +?> \ No newline at end of file diff --git a/demos/northwind-db/protected/database/Shipper.php b/demos/northwind-db/protected/database/Shipper.php new file mode 100644 index 00000000..6ac8a929 --- /dev/null +++ b/demos/northwind-db/protected/database/Shipper.php @@ -0,0 +1,25 @@ + array(self::HAS_MANY, 'Order'), + ); + + public static function finder($className=__CLASS__) + { + return parent::finder($className); + } +} +?> \ No newline at end of file diff --git a/demos/northwind-db/protected/database/Supplier.php b/demos/northwind-db/protected/database/Supplier.php new file mode 100644 index 00000000..537daade --- /dev/null +++ b/demos/northwind-db/protected/database/Supplier.php @@ -0,0 +1,34 @@ + array(self::HAS_MANY, 'Product') + ); + + public static function finder($className=__CLASS__) + { + return parent::finder($className); + } +} +?> \ No newline at end of file diff --git a/demos/northwind-db/protected/database/Territory.php b/demos/northwind-db/protected/database/Territory.php new file mode 100644 index 00000000..4da0ff46 --- /dev/null +++ b/demos/northwind-db/protected/database/Territory.php @@ -0,0 +1,60 @@ + array(self::BELONGS_TO, 'Region'), + 'Employees' => array(self::HAS_MANY, 'Employee', 'EmployeeTerritories') + ); + + /** + * @return Region + */ + public function getRegion() + { + //lazy load the region + if($this->_region===null) + $this->_region = Region::finder()->findByPk($this->RegionID); + return $this->_region; + } + + public function setRegion($value) + { + $this->_region=$value; + } + + /** + * @return Employee[] + */ + public function getEmployees() + { + //lazy load + if($this->_employees==null) + $this->setEmployees($this->withEmployees()->findByPk($this->TerritoryID)->getEmployees()); + return $this->_employees; + } + + public function setEmployees($value) + { + //ensure TList + $this->_employees = $value instanceof TList ? $value : new TList($value); + } + + public static function finder($className=__CLASS__) + { + return parent::finder($className); + } +} +?> \ No newline at end of file diff --git a/demos/northwind-db/protected/pages/Home.page b/demos/northwind-db/protected/pages/Home.page new file mode 100644 index 00000000..e2c3668e --- /dev/null +++ b/demos/northwind-db/protected/pages/Home.page @@ -0,0 +1,12 @@ + + + +

Welcome to PRADO!

+ + + + + + + + \ No newline at end of file diff --git a/demos/northwind-db/protected/pages/Home.php b/demos/northwind-db/protected/pages/Home.php new file mode 100644 index 00000000..06035069 --- /dev/null +++ b/demos/northwind-db/protected/pages/Home.php @@ -0,0 +1,28 @@ +getRecordClassList(Prado::getPathOfNamespace('Application.database.*')); + $this->class_list->dataSource = $classes; + $this->class_list->dataBind(); + } + + protected function getRecordClassList($directory) + { + $list=array(); + $folder=@opendir($directory); + while($entry=@readdir($folder)) + { + if($entry[0]==='.') + continue; + else if(is_file($directory.'/'.$entry)) + $list[] = str_replace('.php', '', $entry); + } + closedir($folder); + return $list; + } +} + +?> \ No newline at end of file diff --git a/demos/northwind-db/protected/pages/northwind.gif b/demos/northwind-db/protected/pages/northwind.gif new file mode 100644 index 00000000..34e1f2ed Binary files /dev/null and b/demos/northwind-db/protected/pages/northwind.gif differ diff --git a/framework/Data/ActiveRecord/Scaffold/InputBuilder/TMssqlScaffoldInput.php b/framework/Data/ActiveRecord/Scaffold/InputBuilder/TMssqlScaffoldInput.php index 840e5b63..2f06368e 100644 --- a/framework/Data/ActiveRecord/Scaffold/InputBuilder/TMssqlScaffoldInput.php +++ b/framework/Data/ActiveRecord/Scaffold/InputBuilder/TMssqlScaffoldInput.php @@ -35,7 +35,11 @@ class TMssqlScaffoldInput extends TScaffoldInputCommon case 'datetime': case 'smalldatetime': return $this->getDateTimeValue($container,$column, $record); default: - return $this->getDefaultControlValue($container,$column, $record); + $value = $this->getDefaultControlValue($container,$column, $record); + if(trim($value)==='' && $column->getAllowNull()) + return null; + else + return $value; } } } diff --git a/framework/Data/Common/Mysql/TMysqlCommandBuilder.php b/framework/Data/Common/Mysql/TMysqlCommandBuilder.php new file mode 100644 index 00000000..9fd02d32 --- /dev/null +++ b/framework/Data/Common/Mysql/TMysqlCommandBuilder.php @@ -0,0 +1,27 @@ + + * @link http://www.pradosoft.com/ + * @copyright Copyright © 2005-2007 PradoSoft + * @license http://www.pradosoft.com/license/ + * @version $Id: TDbCommandBuilder.php 1863 2007-04-12 12:43:49Z wei $ + * @package System.Data.Common + */ + +Prado::using('System.Data.Common.TDbCommandBuilder'); + +/** + * TMysqlCommandBuilder implements default TDbCommandBuilder + * + * @author Wei Zhuo + * @version $Id: TDbCommandBuilder.php 1863 2007-04-12 12:43:49Z wei $ + * @package System.Data.Common + * @since 3.1 + */ +class TMysqlCommandBuilder extends TDbCommandBuilder +{ +} + +?> \ No newline at end of file diff --git a/framework/Data/Common/Mysql/TMysqlTableInfo.php b/framework/Data/Common/Mysql/TMysqlTableInfo.php index 9bc01717..3584bb3b 100644 --- a/framework/Data/Common/Mysql/TMysqlTableInfo.php +++ b/framework/Data/Common/Mysql/TMysqlTableInfo.php @@ -44,6 +44,16 @@ class TMysqlTableInfo extends TDbTableInfo else return '`'.$this->getTableName().'`'; } + + /** + * @param TDbConnection database connection. + * @return TDbCommandBuilder new command builder + */ + public function createCommandBuilder($connection) + { + Prado::using('System.Data.Common.Mysql.TMysqlCommandBuilder'); + return new TMysqlCommandBuilder($connection,$this); + } } ?> \ No newline at end of file diff --git a/framework/Data/Common/Pgsql/TPgsqlCommandBuilder.php b/framework/Data/Common/Pgsql/TPgsqlCommandBuilder.php new file mode 100644 index 00000000..9a818ab9 --- /dev/null +++ b/framework/Data/Common/Pgsql/TPgsqlCommandBuilder.php @@ -0,0 +1,70 @@ + + * @link http://www.pradosoft.com/ + * @copyright Copyright © 2005-2007 PradoSoft + * @license http://www.pradosoft.com/license/ + * @version $Id: TDbCommandBuilder.php 1863 2007-04-12 12:43:49Z wei $ + * @package System.Data.Common + */ + +Prado::using('System.Data.Common.TDbCommandBuilder'); + +/** + * TPgsqlCommandBuilder provides specifics methods to create limit/offset query commands + * for Pgsql database. + * + * @author Wei Zhuo + * @version $Id: TDbCommandBuilder.php 1863 2007-04-12 12:43:49Z wei $ + * @package System.Data.Common + * @since 3.1 + */ +class TPgsqlCommandBuilder extends TDbCommandBuilder +{ + /** + * Overrides parent implementation. Only column of type text or character (and its variants) + * accepts the LIKE criteria. + * @param array list of column id for potential search condition. + * @param string string of keywords + * @return string SQL search condition matching on a set of columns. + */ + public function getSearchExpression($fields, $keywords) + { + $columns = array(); + foreach($fields as $field) + { + if($this->isSearchableColumn($this->getTableInfo()->getColumn($field))) + $columns[] = $field; + } + return parent::getSearchExpression($columns, $keywords); + } + /** + * + * @return boolean true if column can be used for LIKE searching. + */ + protected function isSearchableColumn($column) + { + $type = strtolower($column->getDbType()); + return $type === 'character varying' || $type === 'varchar' || + $type === 'character' || $type === 'char' || $type === 'text'; + } + + /** + * Overrides parent implementation to use PostgreSQL's ILIKE instead of LIKE (case-sensitive). + * @param string column name. + * @param array keywords + * @return string search condition for all words in one column. + */ + protected function getSearchCondition($column, $words) + { + $conditions=array(); + foreach($words as $word) + $conditions[] = $column.' ILIKE '.$this->getDbConnection()->quoteString('%'.$word.'%'); + return '('.implode(' AND ', $conditions).')'; + } + +} + +?> \ No newline at end of file diff --git a/framework/Data/Common/Pgsql/TPgsqlTableInfo.php b/framework/Data/Common/Pgsql/TPgsqlTableInfo.php index a2670fe0..c25fbdf4 100644 --- a/framework/Data/Common/Pgsql/TPgsqlTableInfo.php +++ b/framework/Data/Common/Pgsql/TPgsqlTableInfo.php @@ -44,6 +44,16 @@ class TPgsqlTableInfo extends TDbTableInfo else $this->getTableName(); } + + /** + * @param TDbConnection database connection. + * @return TDbCommandBuilder new command builder + */ + public function createCommandBuilder($connection) + { + Prado::using('System.Data.Common.Pgsql.TPgsqlCommandBuilder'); + return new TPgsqlCommandBuilder($connection,$this); + } } ?> \ No newline at end of file -- cgit v1.2.3