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