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.

---
 .../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 ++++
 4 files changed, 117 insertions(+)
 create mode 100644 framework/Data/Common/Mysql/TMysqlCommandBuilder.php
 create mode 100644 framework/Data/Common/Pgsql/TPgsqlCommandBuilder.php

(limited to 'framework/Data/Common')

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 @@
+<?php
+/**
+ * TMysqlCommandBuilder class file.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @link http://www.pradosoft.com/
+ * @copyright Copyright &copy; 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 <weizho[at]gmail[dot]com>
+ * @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 @@
+<?php
+/**
+ * TPgsqlCommandBuilder class file.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @link http://www.pradosoft.com/
+ * @copyright Copyright &copy; 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 <weizho[at]gmail[dot]com>
+ * @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