From 2570226fbac3e26b1e94896b50d1db4bc1aa3308 Mon Sep 17 00:00:00 2001 From: wei <> Date: Sun, 17 Dec 2006 22:20:50 +0000 Subject: Add TDataSourceConfig, TSqlMapConfig, TActiveRecordConfig --- .gitattributes | 7 +- demos/sqlmap/protected/App_Data/person.xml | 29 +++- demos/sqlmap/protected/App_Data/personHelper.xml | 42 ------ demos/sqlmap/protected/App_Data/test.db | Bin 5120 -> 3072 bytes demos/sqlmap/protected/pages/Sample/Home.page | 7 +- .../sqlmap/protected/pages/Sample/ProductList.page | 9 -- .../sqlmap/protected/pages/Sample/ProductList.php | 18 --- demos/sqlmap/protected/pages/Sample/crud1.php | 6 +- demos/sqlmap/protected/pages/Sample/crud2.php | 9 +- .../protected/App_Code/Dao/BaseDao.php | 20 +-- .../protected/App_Code/Dao/CategoryDao.php | 28 ++-- .../protected/App_Code/Dao/ProjectDao.php | 46 +++--- .../protected/App_Code/Dao/ReportsDao.php | 27 ++-- .../protected/App_Code/Dao/TimeEntryDao.php | 22 +-- .../protected/App_Code/Dao/UserDao.php | 40 ++--- .../time-tracker/protected/App_Code/DaoManager.php | 77 ++-------- .../protected/App_Data/DateTimeTypeHandler.php | 8 +- .../protected/App_Data/SQLite/projects.xml | 28 ++-- .../protected/App_Data/SQLite/time-entry.xml | 28 ++-- .../protected/App_Data/SQLite/time-tracker.db | Bin 32768 -> 29696 bytes .../protected/App_Data/SQLite/time-tracker.db.bak | Bin 32768 -> 29696 bytes .../protected/App_Data/SQLite/users.xml | 24 +-- .../App_Data/TimeTrackerUserTypeHandler.php | 4 +- .../protected/App_Data/sqlite-sqlmap.xml | 36 ++--- demos/time-tracker/protected/application.xml | 31 ++-- .../protected/pages/TimeTracker/Login.page | 16 -- demos/time-tracker/tests/unit/BaseTestCase.php | 33 +++-- .../time-tracker/tests/unit/ProjectDaoTestCase.php | 66 ++++----- demos/time-tracker/themes/TimeTracker/site.css | 4 +- .../Data/ActiveRecord/TActiveRecordConfig.php | 108 ++++++++++++++ .../Data/ActiveRecord/TActiveRecordGateway.php | 62 ++++++-- .../Data/ActiveRecord/TActiveRecordManager.php | 19 +++ .../Data/SqlMap/Configuration/TSqlMapStatement.php | 28 ++-- .../Configuration/TSqlMapXmlConfiguration.php | 13 +- .../Data/SqlMap/Statements/TMappedStatement.php | 4 +- framework/Data/SqlMap/Statements/TSqlMapSelect.php | 29 ---- framework/Data/SqlMap/TSqlMapConfig.php | 163 +++++++++++++++++++++ framework/Data/SqlMap/TSqlMapGateway.php | 8 - framework/Data/SqlMap/TSqlMapManager.php | 25 ++-- framework/Data/TDataSourceConfig.php | 146 ++++++++++++++++++ tests/simple_unit/SqlMap/BaseCase.php | 5 +- 41 files changed, 799 insertions(+), 476 deletions(-) delete mode 100644 demos/sqlmap/protected/App_Data/personHelper.xml delete mode 100644 demos/sqlmap/protected/pages/Sample/ProductList.page delete mode 100644 demos/sqlmap/protected/pages/Sample/ProductList.php create mode 100644 framework/Data/ActiveRecord/TActiveRecordConfig.php delete mode 100644 framework/Data/SqlMap/Statements/TSqlMapSelect.php create mode 100644 framework/Data/SqlMap/TSqlMapConfig.php create mode 100644 framework/Data/TDataSourceConfig.php diff --git a/.gitattributes b/.gitattributes index df4f9bea..d8e0942d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1125,7 +1125,6 @@ demos/sqlmap/index.php -text demos/sqlmap/protected/.htaccess -text demos/sqlmap/protected/APP_CODE/Person.php -text demos/sqlmap/protected/App_Data/person.xml -text -demos/sqlmap/protected/App_Data/personHelper.xml -text demos/sqlmap/protected/App_Data/test.db -text demos/sqlmap/protected/application.xml -text demos/sqlmap/protected/pages/Manual/BigPicture.page -text @@ -1164,8 +1163,6 @@ demos/sqlmap/protected/pages/Manual/WorkingWithDataMaps.page -text demos/sqlmap/protected/pages/Manual/config.xml -text demos/sqlmap/protected/pages/Manual/diagram.png -text demos/sqlmap/protected/pages/Sample/Home.page -text -demos/sqlmap/protected/pages/Sample/ProductList.page -text -demos/sqlmap/protected/pages/Sample/ProductList.php -text demos/sqlmap/protected/pages/Sample/crud1.page -text demos/sqlmap/protected/pages/Sample/crud1.php -text demos/sqlmap/protected/pages/Sample/crud2.page -text @@ -1366,6 +1363,7 @@ framework/Configuration/TProtectedConfiguration.php -text framework/Data/ActiveRecord/Exceptions/TActiveRecordException.php -text framework/Data/ActiveRecord/Exceptions/messages.txt -text framework/Data/ActiveRecord/TActiveRecord.php -text +framework/Data/ActiveRecord/TActiveRecordConfig.php -text framework/Data/ActiveRecord/TActiveRecordCriteria.php -text framework/Data/ActiveRecord/TActiveRecordGateway.php -text framework/Data/ActiveRecord/TActiveRecordManager.php -text @@ -1409,11 +1407,12 @@ framework/Data/SqlMap/Statements/TPreparedStatement.php -text framework/Data/SqlMap/Statements/TPreparedStatementFactory.php -text framework/Data/SqlMap/Statements/TSelectMappedStatement.php -text framework/Data/SqlMap/Statements/TSimpleDynamicSql.php -text -framework/Data/SqlMap/Statements/TSqlMapSelect.php -text framework/Data/SqlMap/Statements/TStaticSql.php -text framework/Data/SqlMap/Statements/TUpdateMappedStatement.php -text +framework/Data/SqlMap/TSqlMapConfig.php -text framework/Data/SqlMap/TSqlMapGateway.php -text framework/Data/SqlMap/TSqlMapManager.php -text +framework/Data/TDataSourceConfig.php -text framework/Data/TDbCommand.php -text framework/Data/TDbConnection.php -text framework/Data/TDbDataReader.php -text diff --git a/demos/sqlmap/protected/App_Data/person.xml b/demos/sqlmap/protected/App_Data/person.xml index 4ffe44d9..b5b94175 100644 --- a/demos/sqlmap/protected/App_Data/person.xml +++ b/demos/sqlmap/protected/App_Data/person.xml @@ -1,5 +1,6 @@ - + + - \ No newline at end of file + + insert into PERSON + (PER_FIRST_NAME, PER_LAST_NAME, PER_BIRTH_DATE, PER_WEIGHT_KG, PER_HEIGHT_M) + values + (#FirstName#, #LastName#, #BirthDate#, #WeightInKilograms#, #HeightInMeters#) + + + + update PERSON set + PER_FIRST_NAME = #FirstName#, + PER_LAST_NAME = #LastName#, + PER_BIRTH_DATE = #BirthDate#, + PER_WEIGHT_KG = #WeightInKilograms#, + PER_HEIGHT_M = #HeightInMeters# + where PER_ID = #ID# + + + + delete from PERSON + where PER_ID = #value# + + + diff --git a/demos/sqlmap/protected/App_Data/personHelper.xml b/demos/sqlmap/protected/App_Data/personHelper.xml deleted file mode 100644 index ea2d4302..00000000 --- a/demos/sqlmap/protected/App_Data/personHelper.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - insert into PERSON - (PER_ID, PER_FIRST_NAME, PER_LAST_NAME, - PER_BIRTH_DATE, PER_WEIGHT_KG, PER_HEIGHT_M) - values - (#ID#, #FirstName#, #LastName#, - #BirthDate#, #WeightInKilograms#, #HeightInMeters#) - - - - update PERSON set - PER_FIRST_NAME = #FirstName#, - PER_LAST_NAME = #LastName#, - PER_BIRTH_DATE = #BirthDate#, - PER_WEIGHT_KG = #WeightInKilograms#, - PER_HEIGHT_M = #HeightInMeters# - where PER_ID = #ID# - - - - delete from PERSON - where PER_ID = #value# - - - diff --git a/demos/sqlmap/protected/App_Data/test.db b/demos/sqlmap/protected/App_Data/test.db index a40c91fe..8778160a 100644 Binary files a/demos/sqlmap/protected/App_Data/test.db and b/demos/sqlmap/protected/App_Data/test.db differ diff --git a/demos/sqlmap/protected/pages/Sample/Home.page b/demos/sqlmap/protected/pages/Sample/Home.page index 6d059c7e..37e59b42 100644 --- a/demos/sqlmap/protected/pages/Sample/Home.page +++ b/demos/sqlmap/protected/pages/Sample/Home.page @@ -1,5 +1,4 @@ \ No newline at end of file +
  • Tutorial 1
  • +
  • Tutorial 2
  • + \ No newline at end of file diff --git a/demos/sqlmap/protected/pages/Sample/ProductList.page b/demos/sqlmap/protected/pages/Sample/ProductList.page deleted file mode 100644 index 904d411d..00000000 --- a/demos/sqlmap/protected/pages/Sample/ProductList.page +++ /dev/null @@ -1,9 +0,0 @@ -

    Database Examples

    - - -
    - Code: <%# $this->DataItem['productid'] %> - Category: <%# $this->DataItem['category'] %> -
    -
    -
    \ No newline at end of file diff --git a/demos/sqlmap/protected/pages/Sample/ProductList.php b/demos/sqlmap/protected/pages/Sample/ProductList.php deleted file mode 100644 index a35c40ea..00000000 --- a/demos/sqlmap/protected/pages/Sample/ProductList.php +++ /dev/null @@ -1,18 +0,0 @@ -IsPostBack) - { - $sqlmap = $this->Application->Modules['petshop-sqlmap']; - $products = $sqlmap->queryForList('SelectAllProducts'); - $this->productList->setDataSource($products); - $this->productList->dataBind(); - } - } -} - -?> \ No newline at end of file diff --git a/demos/sqlmap/protected/pages/Sample/crud1.php b/demos/sqlmap/protected/pages/Sample/crud1.php index 40733dc9..9ea6e05e 100644 --- a/demos/sqlmap/protected/pages/Sample/crud1.php +++ b/demos/sqlmap/protected/pages/Sample/crud1.php @@ -6,13 +6,13 @@ class crud1 extends TPage { private function loadData() { - $sqlmap = $this->Application->Modules['person-sample']; + $sqlmap = $this->Application->Modules['person-sample']->Client; $this->personList->DataSource = $sqlmap->queryForList('SelectAll'); - $this->personList->dataBind(); + $this->personList->dataBind(); } public function onLoad($param) - { + { if(!$this->IsPostBack) $this->loadData(); } diff --git a/demos/sqlmap/protected/pages/Sample/crud2.php b/demos/sqlmap/protected/pages/Sample/crud2.php index 46fe3893..3d2087bb 100644 --- a/demos/sqlmap/protected/pages/Sample/crud2.php +++ b/demos/sqlmap/protected/pages/Sample/crud2.php @@ -6,18 +6,17 @@ class crud2 extends TPage { private function sqlmap() { - return $this->Application->Modules['person-sample']; + return $this->Application->Modules['person-sample']->Client; } private function loadData() { - $this->personList->DataSource = - $this->sqlmap()->queryForList('SelectAll'); + $this->personList->DataSource = $this->sqlmap()->queryForList('SelectAll'); $this->personList->dataBind(); } public function onLoad($param) - { + { if(!$this->IsPostBack) $this->loadData(); } @@ -44,7 +43,7 @@ class crud2 extends TPage $person->HeightInMeters = $this->getText($param, 2); $person->WeightInKilograms = $this->getText($param, 3); $person->ID = $this->getKey($sender, $param); - + $this->sqlmap()->update("Update", $person); $this->refreshList($sender, $param); } diff --git a/demos/time-tracker/protected/App_Code/Dao/BaseDao.php b/demos/time-tracker/protected/App_Code/Dao/BaseDao.php index cf27afc9..5edb6af7 100644 --- a/demos/time-tracker/protected/App_Code/Dao/BaseDao.php +++ b/demos/time-tracker/protected/App_Code/Dao/BaseDao.php @@ -21,24 +21,24 @@ class BaseDao { /** - * @var TSqlMapper sqlmap client. + * @var TSqlMapGateway sqlmap client. */ - private $_connection; - + private $_sqlmap; + /** - * @param TSqlMapper sqlmap client. + * @param TSqlMapGateway sqlmap client. */ - public function setConnection($connection) + public function setSqlMap($sqlmap) { - $this->_connection = $connection; + $this->_sqlmap = $sqlmap; } - + /** - * @return TSqlMapper sqlmap client. + * @return TSqlMapGateway sqlmap client. */ - protected function getConnection() + protected function getSqlMap() { - return $this->_connection; + return $this->_sqlmap; } } diff --git a/demos/time-tracker/protected/App_Code/Dao/CategoryDao.php b/demos/time-tracker/protected/App_Code/Dao/CategoryDao.php index cb1b6399..7476f036 100644 --- a/demos/time-tracker/protected/App_Code/Dao/CategoryDao.php +++ b/demos/time-tracker/protected/App_Code/Dao/CategoryDao.php @@ -4,48 +4,48 @@ class CategoryDao extends BaseDao { function addNewCategory($category) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); $exists = $this->getCategoryByNameInProject( $category->Name, $category->ProjectID); if(!$exists) $sqlmap->insert('AddNewCategory', $category); - } - + } + function getCategoryByID($categoryID) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); return $sqlmap->queryForObject('GetCategoryByID', $categoryID); } - + function getAllCategories() { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); return $sqlmap->queryForList('GetAllCategories'); } - + function deleteCategory($categoryID) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); $sqlmap->delete('DeleteCategory', $categoryID); } - + function getCategoriesByProjectID($projectID) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); return $sqlmap->queryForList('GetCategoriesByProjectID', $projectID); } - + function getCategoryByNameInProject($name, $projectID) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); $param['project'] = $projectID; $param['category'] = $name; return $sqlmap->queryForObject('GetCategoryByNameInProject', $param); } - + function updateCategory($category) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); $sqlmap->update('UpdateCategory', $category); } } diff --git a/demos/time-tracker/protected/App_Code/Dao/ProjectDao.php b/demos/time-tracker/protected/App_Code/Dao/ProjectDao.php index 3d3ced1d..9e8867bc 100644 --- a/demos/time-tracker/protected/App_Code/Dao/ProjectDao.php +++ b/demos/time-tracker/protected/App_Code/Dao/ProjectDao.php @@ -22,49 +22,49 @@ class ProjectDao extends BaseDao { public function projectNameExists($projectName) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); return $sqlmap->queryForObject('ProjectNameExists', $projectName); } - + public function addNewProject($project) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); $sqlmap->insert('CreateNewProject', $project); } - + public function getProjectByID($projectID) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); return $sqlmap->queryForObject('GetProjectByID', $projectID); } - + public function deleteProject($projectID) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); $sqlmap->update('DeleteProject',$projectID); } - + public function addUserToProject($projectID, $username) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); $members = $this->getProjectMembers($projectID); if(!in_array($username, $members)) { $param['username'] = $username; $param['project'] = $projectID; $sqlmap->insert('AddUserToProject',$param); - } + } } - + public function getProjectMembers($projectID) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); return $sqlmap->queryForList('GetProjectMembers', $projectID); } - + public function getAllProjects($sort='', $order='ASC') { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); if($sort === '') return $sqlmap->queryForList('GetAllProjects'); else @@ -72,32 +72,32 @@ class ProjectDao extends BaseDao $param['sort'] = $sort; $param['order'] = $order; return $sqlmap->queryForList('GetAllProjectsOrdered', $param); - } + } } - + public function getProjectsByManagerName($manager) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); return $sqlmap->queryForList('GetProjectsByManagerName', $manager); } - + public function getProjectsByUserName($username) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); return $sqlmap->queryForList('GetProjectsByUserName', $username); } - + public function removeUserFromProject($projectID, $username) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); $param['username'] = $username; $param['project'] = $projectID; $sqlmap->delete('RemoveUserFromProject', $param); } - + public function updateProject($project) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); $sqlmap->update('UpdateProject', $project); } } diff --git a/demos/time-tracker/protected/App_Code/Dao/ReportsDao.php b/demos/time-tracker/protected/App_Code/Dao/ReportsDao.php index 50005d06..3e5b6456 100644 --- a/demos/time-tracker/protected/App_Code/Dao/ReportsDao.php +++ b/demos/time-tracker/protected/App_Code/Dao/ReportsDao.php @@ -6,12 +6,12 @@ class ProjectReport extends TComponent public $EstimateHours = 0; public $EstimateCompletion = 0; public $Categories; - + public function __construct() { $this->Categories = new TList; } - + public function getActualHours() { $total = 0; @@ -26,21 +26,21 @@ class CategoryReport extends TComponent public $CategoryName = ''; public $EstimateHours = 0; public $members = array(); - + public function getActualHours() { $total = 0; foreach($this->members as $member) $total += $member['hours']; return $total; - } + } } class UserReport extends TComponent { public $Username; public $Projects = array(); - + public function getTotalHours() { $hours = 0; @@ -64,24 +64,23 @@ class ReportsDao extends BaseDao public function getTimeReportsByProjectIDs($projects) { $ids = implode(',', array_map('intval', $projects)); - $sqlmap = $this->getConnection(); - return $sqlmap->queryForList('GetTimeReportByProjectIDs', $ids); + $sqlmap = $this->getSqlMap(); + return $sqlmap->queryForList('GetTimeReportByProjectIDs', $ids); } - + public function getUserProjectTimeReports($users, $projects, $startDate, $endDate) { - $sqlmap = $this->getConnection(); - $driver = $sqlmap->openConnection(); + $sqlmap = $this->getSqlMap(); $ids = implode(',', array_map('intval', $projects)); - $usernames = implode(',', array_map(array($driver, 'quote'), $users)); - + $usernames = implode(',', array_map(array($sqlmap->getDbConnection(), 'quoteString'), $users)); + $param['projects'] = $ids; $param['members'] = $usernames; $param['startDate'] = intval($startDate); $param['endDate'] = intval($endDate); - + return $sqlmap->queryForList('GetTimeReportByUsername', $param); - } + } } ?> \ No newline at end of file diff --git a/demos/time-tracker/protected/App_Code/Dao/TimeEntryDao.php b/demos/time-tracker/protected/App_Code/Dao/TimeEntryDao.php index 7207ed47..4bd74eb5 100644 --- a/demos/time-tracker/protected/App_Code/Dao/TimeEntryDao.php +++ b/demos/time-tracker/protected/App_Code/Dao/TimeEntryDao.php @@ -4,33 +4,33 @@ class TimeEntryDao extends BaseDao { public function addNewTimeEntry($entry) { - $sqlmap = $this->getConnection(); - $sqlmap->insert('AddNewTimeEntry', $entry); + $sqlmap = $this->getSqlMap(); + $sqlmap->insert('AddNewTimeEntry', $entry); } - + public function getTimeEntryByID($entryID) { - $sqlmap = $this->getConnection(); - return $sqlmap->queryForObject('GetTimeEntryByID', $entryID); + $sqlmap = $this->getSqlMap(); + return $sqlmap->queryForObject('GetTimeEntryByID', $entryID); } - + public function deleteTimeEntry($entryID) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); $sqlmap->delete('DeleteTimeEntry', $entryID); } - + public function getTimeEntriesInProject($username, $projectID) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); $param['username'] = $username; $param['project'] = $projectID; return $sqlmap->queryForList('GetAllTimeEntriesByProjectIdAndUser', $param); } - + public function updateTimeEntry($entry) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); $sqlmap->update('UpdateTimeEntry', $entry); } } diff --git a/demos/time-tracker/protected/App_Code/Dao/UserDao.php b/demos/time-tracker/protected/App_Code/Dao/UserDao.php index 28719d81..4bb23b3a 100644 --- a/demos/time-tracker/protected/App_Code/Dao/UserDao.php +++ b/demos/time-tracker/protected/App_Code/Dao/UserDao.php @@ -11,7 +11,7 @@ */ /** - * UserDao class list, create, find and delete users. + * UserDao class list, create, find and delete users. * In addition, it can validate username and password, and update * the user roles. Furthermore, a unique new token can be generated, * this token can be used to perform persistent cookie login. @@ -29,49 +29,49 @@ class UserDao extends BaseDao */ public function getUserByName($username) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); return $sqlmap->queryForObject('GetUserByName', $username); } - + /** * @param string username * @return boolean true if username already exists, false otherwise. */ public function usernameExists($username) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); return $sqlmap->queryForObject('UsernameExists', $username); } - + /** * @return array list of all enabled users. */ public function getAllUsers() { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); return $sqlmap->queryForList('GetAllUsers'); } - + /** * @param TimeTrackerUser new user details. * @param string new user password. */ public function addNewUser($user, $password) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); $param['user'] = $user; $param['password'] = md5($password); $sqlmap->insert('AddNewUser', $param); if(count($user->getRoles()) > 0) $this->updateUserRoles($user); } - + /** * @param string username to delete */ public function deleteUserByName($username) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); $sqlmap->delete('DeleteUserByName', $username); } @@ -82,7 +82,7 @@ class UserDao extends BaseDao */ public function updateUser($user,$password=null) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); if($password !== null) { $param['user'] = $user; @@ -103,55 +103,55 @@ class UserDao extends BaseDao */ public function validateUser($username, $password) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); $param['username'] = $username; $param['password'] = md5($password); return $sqlmap->queryForObject('ValidateUser', $param); } - + /** * @param string unique persistent session token * @return TimeTrackerUser user details if valid token, null otherwise. */ public function validateSignon($token) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); $sqlmap->update('UpdateSignon', $token); return $sqlmap->queryForObject('ValidateAutoSignon', $token); } - + /** * @param TimeTrackerUser user details to generate the token * @return string unique persistent login token. */ public function createSignonToken($user) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); $param['username'] = $user->getName(); $param['token'] = md5(microtime().$param['username']); $sqlmap->insert('RegisterAutoSignon', $param); return $param['token']; } - + /** * @param TimeTrackerUser deletes all signon token for given user, null to delete all * tokens. */ public function clearSignonTokens($user=null) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); if($user !== null) $sqlmap->delete('DeleteAutoSignon', $user->getName()); else $sqlmap->delete('DeleteAllSignon'); } - + /** * @param TimeTrackerUser user details for updating the assigned roles. */ public function updateUserRoles($user) { - $sqlmap = $this->getConnection(); + $sqlmap = $this->getSqlMap(); $sqlmap->delete('DeleteUserRoles', $user); foreach($user->getRoles() as $role) { diff --git a/demos/time-tracker/protected/App_Code/DaoManager.php b/demos/time-tracker/protected/App_Code/DaoManager.php index 5e3eef56..bf25c555 100644 --- a/demos/time-tracker/protected/App_Code/DaoManager.php +++ b/demos/time-tracker/protected/App_Code/DaoManager.php @@ -9,10 +9,12 @@ * @version $Id$ * @package Demos */ - + +Prado::using('System.Data.SqlMap.TSqlMapConfig'); + /** * DaoManager class. - * + * * A Registry for Dao and an implementation of that type. * * @author Wei Zhuo @@ -20,57 +22,29 @@ * @package Demos * @since 3.1 */ -class DaoManager extends TModule +class DaoManager extends TSqlMapConfig { - /** - * @var TSqlMapper sqlmap client - */ - private $_connection; - /** - * @var boolean if the module has been initialized - */ - private $_initialized=false; /** * @var array registered list of dao */ private $_dao=array(); + /** * Initializes the module. * This method is required by IModule and is invoked by application. * It loads dao information from the module configuration. * @param TXmlElement module configuration */ - public function init($config) - { - if($this->_connection === null) - throw new TimeTrackerException('daomanager_connection_required'); - $app = $this->getApplication(); - if(is_string($this->_connection)) - { - if(($conn=$app->getModule($this->_connection)->getClient())===null) - throw new TimeTrackerException('daomanager_undefined_connection',$this->_connection); - if(!($conn instanceof TSqlMapper)) - throw new TimeTrackerException('daomanager_invalid_connection', $this->_connection); - $this->_connection = $conn; - } - $this->includeDaoImplementation($config->getElementsByTagName('dao')); - $this->_initialized = true; - } - - /** - * Register the dao type and implementation class names. - * @param array list of TXmlDocument nodes. - */ - protected function includeDaoImplementation($nodes) + public function init($xml) { - foreach($nodes as $node) + parent::init($xml); + foreach($xml->getElementsByTagName("dao") as $node) { - $id = $node->getAttribute('id'); - $class = $node->getAttribute('class'); - $this->_dao[$id] = array('class' => $class); + $this->_dao[$node->getAttribute('id')] = + array('class' => $node->getAttribute('class')); } } - + /** * @return array list of registered Daos */ @@ -78,7 +52,7 @@ class DaoManager extends TModule { return $this->_dao; } - + /** * Returns an implementation of a Dao type, implements the Registery * pattern. Multiple calls returns the same Dao instance. @@ -92,35 +66,14 @@ class DaoManager extends TModule if(!isset($this->_dao[$class]['instance'])) { $dao = Prado::createComponent($this->_dao[$class]['class']); - $dao->setConnection($this->getConnection()); - $this->_dao[$class]['instance'] = $dao; + $dao->setSqlMap($this->getClient()); + $this->_dao[$class]['instance'] = $dao; } return $this->_dao[$class]['instance']; } else throw new TimeTrackerException('daomanager_undefined_dao', $class); } - - /** - * @return TSqlMapper sqlmap client instance - */ - public function getConnection() - { - return $this->_connection; - } - - /** - * Sets the connection for all Daos registered. - * @param string|TSqlMapper sqlmap client module id or TSqlMapper instance. - */ - public function setConnection($client) - { - if($this->_initialized) - throw new TimeTrackerException('daomanager_unchangeable'); - if(!is_string($client) && !($client instanceof TSqlMapper)) - throw new TConfigurationException('daomanager_invalid_connection',$client); - $this->_connection = $client; - } } ?> \ No newline at end of file diff --git a/demos/time-tracker/protected/App_Data/DateTimeTypeHandler.php b/demos/time-tracker/protected/App_Data/DateTimeTypeHandler.php index 17f3e14b..03af3d36 100644 --- a/demos/time-tracker/protected/App_Data/DateTimeTypeHandler.php +++ b/demos/time-tracker/protected/App_Data/DateTimeTypeHandler.php @@ -1,6 +1,6 @@ 10000) //strtotime doesn't like unix epoc time. + return intval($string); + return strtotime($string); } /** @@ -27,7 +29,7 @@ class DateTimeTypeHandler implements ITypeHandlerCallback { throw new TimeTrackerException('Not implemented'); } - + } ?> \ No newline at end of file diff --git a/demos/time-tracker/protected/App_Data/SQLite/projects.xml b/demos/time-tracker/protected/App_Data/SQLite/projects.xml index e5f52887..f28f7a47 100644 --- a/demos/time-tracker/protected/App_Data/SQLite/projects.xml +++ b/demos/time-tracker/protected/App_Data/SQLite/projects.xml @@ -21,8 +21,8 @@ INSERT INTO projects (Name, Description, CreationDate, EstimateDuration, CompletionDate, CreatorID, ManagerID) VALUES - (#Name#, #Description#, php('date', 'Y-m-d H:i:s'), #EstimateDuration#, - #CompletionDate, typeHandler=DateTime#, + (#Name#, #Description#, strftime('%s', 'now'), #EstimateDuration#, + #CompletionDate, typeHandler=DateTime#, #CreatorUserName#, #ManagerUserName#) select LAST_INSERT_ROWID() as value @@ -30,7 +30,7 @@ - SELECT + SELECT * - FROM + FROM time_entry WHERE EntryID = #value# @@ -66,7 +66,7 @@ diff --git a/demos/time-tracker/protected/App_Data/SQLite/time-tracker.db b/demos/time-tracker/protected/App_Data/SQLite/time-tracker.db index 124bbeba..6cafd20f 100644 Binary files a/demos/time-tracker/protected/App_Data/SQLite/time-tracker.db and b/demos/time-tracker/protected/App_Data/SQLite/time-tracker.db differ diff --git a/demos/time-tracker/protected/App_Data/SQLite/time-tracker.db.bak b/demos/time-tracker/protected/App_Data/SQLite/time-tracker.db.bak index 124bbeba..206b3e3c 100644 Binary files a/demos/time-tracker/protected/App_Data/SQLite/time-tracker.db.bak and b/demos/time-tracker/protected/App_Data/SQLite/time-tracker.db.bak differ diff --git a/demos/time-tracker/protected/App_Data/SQLite/users.xml b/demos/time-tracker/protected/App_Data/SQLite/users.xml index 74b33b2c..45e68c01 100644 --- a/demos/time-tracker/protected/App_Data/SQLite/users.xml +++ b/demos/time-tracker/protected/App_Data/SQLite/users.xml @@ -13,7 +13,7 @@ @@ -32,7 +32,7 @@ - + - INSERT INTO + INSERT INTO users (Username, Password, EmailAddress) VALUES (#user.Name#, #password#, #user.EmailAddress#) @@ -80,10 +80,10 @@ - INSERT INTO + INSERT INTO signon (SessionToken, Username, LastSignOnDate) VALUES - (#token#, #username#, php('date', 'Y-m-d H:i:s')) + (#token#, #username#, strftime('%s', 'now')) - UPDATE signon SET LastSignOnDate = php('date', 'Y-m-d H:i:s') + UPDATE signon SET LastSignOnDate = strftime('%s', 'now') WHERE SessionToken = #value# @@ -115,13 +115,13 @@ - UPDATE users + UPDATE users SET EmailAddress = #EmailAddress# WHERE Username = #Name# - UPDATE users + UPDATE users SET EmailAddress = #user.EmailAddress#, Password=#password# WHERE Username = #user.Name# diff --git a/demos/time-tracker/protected/App_Data/TimeTrackerUserTypeHandler.php b/demos/time-tracker/protected/App_Data/TimeTrackerUserTypeHandler.php index c2d5c4d6..54aba438 100644 --- a/demos/time-tracker/protected/App_Data/TimeTrackerUserTypeHandler.php +++ b/demos/time-tracker/protected/App_Data/TimeTrackerUserTypeHandler.php @@ -19,7 +19,7 @@ * @package Demos * @since 3.1 */ -class TimeTrackerUserTypeHandler implements ITypeHandlerCallback +class TimeTrackerUserTypeHandler extends TSqlMapTypeHandler { /** * Not implemented. @@ -34,7 +34,7 @@ class TimeTrackerUserTypeHandler implements ITypeHandlerCallback */ public function getResult($string) { - throw new TimeTrackerException('Not implemented'); + throw new TimeTrackerException('Not implemented'); } /** diff --git a/demos/time-tracker/protected/App_Data/sqlite-sqlmap.xml b/demos/time-tracker/protected/App_Data/sqlite-sqlmap.xml index 9590b506..3cbb846e 100644 --- a/demos/time-tracker/protected/App_Data/sqlite-sqlmap.xml +++ b/demos/time-tracker/protected/App_Data/sqlite-sqlmap.xml @@ -1,26 +1,16 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + \ No newline at end of file diff --git a/demos/time-tracker/protected/application.xml b/demos/time-tracker/protected/application.xml index 40619257..bae5f126 100644 --- a/demos/time-tracker/protected/application.xml +++ b/demos/time-tracker/protected/application.xml @@ -5,7 +5,7 @@ - + @@ -13,33 +13,24 @@ - - - - - - - + - + + + + - + \ No newline at end of file diff --git a/demos/time-tracker/protected/pages/TimeTracker/Login.page b/demos/time-tracker/protected/pages/TimeTracker/Login.page index 3022eaeb..442edc80 100644 --- a/demos/time-tracker/protected/pages/TimeTracker/Login.page +++ b/demos/time-tracker/protected/pages/TimeTracker/Login.page @@ -37,20 +37,4 @@ Create New User - - - - - OnClick="button1_Clicked" /> - <%= print echo "asd" %> - <%# print echo "asd" %> - <%[ asd ]%> - <%= as echo - - "asd" %> - <%# as echo - "asd" %> - <%= print echo "asd" %> - <%# print echo "asd" %> diff --git a/demos/time-tracker/tests/unit/BaseTestCase.php b/demos/time-tracker/tests/unit/BaseTestCase.php index 549229e3..7e4520f8 100644 --- a/demos/time-tracker/tests/unit/BaseTestCase.php +++ b/demos/time-tracker/tests/unit/BaseTestCase.php @@ -6,44 +6,49 @@ Prado::using('Application.App_Code.Dao.*'); class BaseTestCase extends UnitTestCase { protected $sqlmap; - + function setup() { $app = Prado::getApplication(); - $this->sqlmap = $app->getModule('daos')->getConnection(); + $this->sqlmap = $app->getModule('daos')->getClient(); } - - + + function flushDatabase() { - $conn = $this->sqlmap->openConnection(); - switch(strtolower($conn->getProvider()->getDriver())) + $conn = $this->sqlmap->getDbConnection(); + $find = 'sqlite:protected'; + if(is_int(strpos($conn->getConnectionString(),$find))) + $conn->ConnectionString = str_replace($find, 'sqlite:../protected', $conn->ConnectionString); + $conn->setActive(false); + $conn->setActive(true); + switch(strtolower($conn->getDriverName())) { case 'mysql': return $this->flushMySQLDatabase(); case 'sqlite': - return $this->flushSQLiteDatabase(); - } + return $this->flushSQLiteDatabase(); + } } - + function flushSQLiteDatabase() { - $conn = $this->sqlmap->openConnection(); - $file = $conn->getProvider()->getHost(); + $conn = $this->sqlmap->getDbConnection(); + $file = str_replace('sqlite:','',$conn->getConnectionString()); $backup = $file.'.bak'; copy($backup, $file); } - + function flushMySQLDatabase() { - $conn = $this->sqlmap->openConnection(); + $conn = $this->sqlmap->getDbConnection(); $file = Prado::getPathOfNamespace('Application.App_Data.mysql-reset','.sql'); if(is_file($file)) $this->runScript($conn, $file); else throw new Exception('unable to find script file '.$file); } - + protected function runScript($connection, $script) { $sql = file_get_contents($script); diff --git a/demos/time-tracker/tests/unit/ProjectDaoTestCase.php b/demos/time-tracker/tests/unit/ProjectDaoTestCase.php index 3ee9d8b2..3ccb28e2 100644 --- a/demos/time-tracker/tests/unit/ProjectDaoTestCase.php +++ b/demos/time-tracker/tests/unit/ProjectDaoTestCase.php @@ -5,7 +5,7 @@ require_once(dirname(__FILE__).'/BaseTestCase.php'); class ProjectDaoTestCase extends BaseTestCase { protected $projectDao; - + function setup() { parent::setup(); @@ -13,8 +13,8 @@ class ProjectDaoTestCase extends BaseTestCase $this->projectDao = $app->getModule('daos')->getDao('ProjectDao'); $this->flushDatabase(); } - - + + function createNewProject() { $project = new ProjectRecord; @@ -25,7 +25,7 @@ class ProjectDaoTestCase extends BaseTestCase $project->EstimateDuration = 100.5; $project->ManagerUserName = 'manager'; $project->Name = 'Project 1'; - + return $project; } @@ -39,7 +39,7 @@ class ProjectDaoTestCase extends BaseTestCase $project->EstimateDuration = 30.5; $project->ManagerUserName = 'manager'; $project->Name = 'Project 2'; - + return $project; } @@ -53,78 +53,78 @@ class ProjectDaoTestCase extends BaseTestCase $project->EstimateDuration = 5.0; $project->ManagerUserName = 'admin'; $project->Name = 'Project 3'; - + return $project; } - + function add3Projects() { $project1 = $this->createNewProject(); $project2 = $this->createNewProject2(); $project3 = $this->createNewProject3(); - + $this->projectDao->addNewProject($project1); $this->projectDao->addNewProject($project2); $this->projectDao->addNewProject($project3); return array($project1,$project2,$project3); } - + function testCreateNewProject() { $newProject = $this->createNewProject(); $this->projectDao->addNewProject($newProject); - + $check = $this->projectDao->getProjectByID(1); - $this->assertEqual($newProject, $check); + $this->assertEqual($newProject, $check); } - + function testDeleteProject() { $newProject = $this->createNewProject(); $this->projectDao->addNewProject($newProject); - + $check = $this->projectDao->getProjectByID(1); $this->assertEqual($newProject, $check); - + $this->projectDao->deleteProject(1); $verify = $this->projectDao->getProjectByID(1); $this->assertNull($verify); } - + function testAddUserToProject() { $project = $this->createNewProject(); $this->projectDao->addNewProject($project); - + $this->projectDao->addUserToProject($project->ID, 'admin'); $this->projectDao->addUserToProject($project->ID, 'manager'); - + $members = $this->projectDao->getProjectMembers($project->ID); - + $this->assertEqual(count($members), 2); $this->assertEqual($members[0], 'admin'); $this->assertEqual($members[1], 'manager'); } - + function testAddNullUserToProject() { $project = $this->createNewProject(); $this->projectDao->addNewProject($project); try - { + { $this->projectDao->addUserToProject($project->ID, 'asd'); $this->pass(); } catch(TSqlMapQueryExecutionException $e) { - $this->fail(); + $this->fail(); } } function testGetAllProjects() { $added = $this->add3Projects(); - + $projects = $this->projectDao->getAllProjects(); $this->assertEqual(count($projects),3); @@ -136,7 +136,7 @@ class ProjectDaoTestCase extends BaseTestCase function testGetProjectsByManagerName() { $added = $this->add3Projects(); - + $projects = $this->projectDao->getProjectsByManagerName('manager'); $this->assertEqual(count($projects),2); @@ -147,12 +147,12 @@ class ProjectDaoTestCase extends BaseTestCase function testGetProjectsByUserName() { $added = $this->add3Projects(); - + $username = 'consultant'; - + $this->projectDao->addUserToProject(1, $username); $this->projectDao->addUserToProject(3, $username); - + $projects = $this->projectDao->getProjectsByUserName($username); $this->assertEqual(count($projects),2); @@ -166,16 +166,16 @@ class ProjectDaoTestCase extends BaseTestCase $this->projectDao->addUserToProject(1, 'admin'); $this->projectDao->addUserToProject(1, 'manager'); $this->projectDao->addUserToProject(1, 'consultant'); - + $members = $this->projectDao->getProjectMembers(1); $this->assertEqual(count($members), 3); $this->assertEqual($members[0], 'admin'); $this->assertEqual($members[2], 'manager'); $this->assertEqual($members[1], 'consultant'); - + $this->projectDao->removeUserFromProject(1,'admin'); - + $list = $this->projectDao->getProjectMembers(1); $this->assertEqual(count($list), 2); @@ -187,13 +187,13 @@ class ProjectDaoTestCase extends BaseTestCase { $project = $this->createNewProject(); $this->projectDao->addNewProject($project); - + $project->Description = "Project Testing 123"; - + $this->projectDao->updateProject($project); - + $check = $this->projectDao->getProjectByID(1); - $this->assertEqual($check, $project); + $this->assertEqual($check, $project); } } diff --git a/demos/time-tracker/themes/TimeTracker/site.css b/demos/time-tracker/themes/TimeTracker/site.css index 8d9c6f99..31b9fdf7 100644 --- a/demos/time-tracker/themes/TimeTracker/site.css +++ b/demos/time-tracker/themes/TimeTracker/site.css @@ -88,7 +88,7 @@ a color: #f61; } -a:hover +a:hover { color: red; } @@ -125,7 +125,7 @@ ul.level1 li .menuitem cursor: pointer; background-image: url(tabs.png); background-repeat: repeat-x; - color: #f71; + color: #f71; font-weight: bold; letter-spacing: 2px; text-decoration: none; diff --git a/framework/Data/ActiveRecord/TActiveRecordConfig.php b/framework/Data/ActiveRecord/TActiveRecordConfig.php new file mode 100644 index 00000000..5670e64c --- /dev/null +++ b/framework/Data/ActiveRecord/TActiveRecordConfig.php @@ -0,0 +1,108 @@ + + * @link http://www.pradosoft.com/ + * @copyright Copyright © 2005-2007 PradoSoft + * @license http://www.pradosoft.com/license/ + * @version $Id$ + * @package System.Data.ActiveRecord + */ + +Prado::using('System.Data.TDataSourceConfig'); + +/** + * TActiveRecordConfig module configuration class. + * + * Database configuration for the default ActiveRecord manager instance. + * + * Example: application.xml configuration + * + * + * + * + * + * + * + * + * MySQL database definition: + * + * CREATE TABLE `blogs` ( + * `blog_id` int(10) unsigned NOT NULL auto_increment, + * `blog_name` varchar(255) NOT NULL, + * `blog_author` varchar(255) NOT NULL, + * PRIMARY KEY (`blog_id`) + * ) ENGINE=InnoDB DEFAULT CHARSET=utf8; + * + * + * Record php class: + * + * class Blogs extends TActiveRecord + * { + * public $blog_id; + * public $blog_name; + * public $blog_author; + * + * public static function finder() + * { + * return self::getRecordFinder('Blogs'); + * } + * } + * + * + * Usage example: + * + * class Home extends TPage + * { + * function onLoad($param) + * { + * $blogs = Blogs::finder()->findAll(); + * print_r($blogs); + * } + * } + * + * + * @author Wei Zhuo + * @version $Id$ + * @package System.Data.ActiveRecord + * @since 3.1 + */ +class TActiveRecordConfig extends TDataSourceConfig +{ + private $_enableCache=false; + + /** + * Initialize the active record manager. + * @param TXmlDocument xml configuration. + */ + public function init($xml) + { + parent::init($xml); + Prado::using('System.Data.ActiveRecord.TActiveRecordManager'); + $manager = TActiveRecordManager::getInstance(); + if($this->getEnableCache()) + $manager->setCache($this->getApplication()->getCache()); + $manager->setDbConnection($this->getDbConnection()); + } + + /** + * Set true to cache the table meta data. + * @param boolean true to cache sqlmap instance. + */ + public function setEnableCache($value) + { + $this->_enableCache = TPropertyValue::ensureBoolean($value, false); + } + + /** + * @return boolean true if table meta data should be cached, false otherwise. + */ + public function getEnableCache() + { + return $this->_enableCache; + } +} + +?> \ No newline at end of file diff --git a/framework/Data/ActiveRecord/TActiveRecordGateway.php b/framework/Data/ActiveRecord/TActiveRecordGateway.php index 19c8552f..e7ea5e46 100644 --- a/framework/Data/ActiveRecord/TActiveRecordGateway.php +++ b/framework/Data/ActiveRecord/TActiveRecordGateway.php @@ -22,7 +22,7 @@ class TActiveRecordGateway extends TComponent { private $_manager; - private $_tables=array(); + private $_tables=array(); //meta data cache. /** * Property name for optional table name in TActiveRecord. @@ -68,35 +68,67 @@ class TActiveRecordGateway extends TComponent } /** - * Gets the meta data for given database and table. + * @param TActiveRecord active record. + * @return TDbMetaData table meta data, null if not found. */ - public function getMetaData(TActiveRecord $record) + protected function getCachedMetaData($record) { $type=get_class($record); - if(!isset($this->_tables[$type])) + if(isset($this->_tables[$type])) + return $this->_tables[$type]; + if(($cache=$this->getManager()->getCache())!==null) { - $conn = $record->getDbConnection(); - $inspector = $this->getManager()->getTableInspector($conn); - $table = $this->getTableName($record); - $this->_tables[$type] = $inspector->getTableMetaData($table); + //force loading of the table inspector to load the required classes + // before unserializing cached meta data. + $this->getManager()->getTableInspector($record->getDbConnection()); + $data = $cache->get($this->getMetaDataCacheKey($record)); + if($data !== false && $data !== null) + { + $this->_tables[$type] = $data; + return $data; + } } - return $this->_tables[$type]; } /** - * @param array table meta data. + * @param TActiveRecord active record. + * @return string cache key, using connection string + record class name + */ + protected function getMetaDataCacheKey($record) + { + $conn = $record->getDbConnection()->getConnectionString(); + return $conn.':'.get_class($record); + } + + /** + * Cache the meta data, tries the application cache if applicable. + * @param TActiveRecord active record. + * @param TDbMetaData table meta data + * @return TDbMetaData table meta data. */ - public function setAllMetaData($data) + protected function cacheMetaData($record,$data) { - $this->_tables=$data; + $type = get_class($record); + if(($cache=$this->getManager()->getCache())!==null) + $cache->set($this->getMetaDataCacheKey($record), $data); + $this->_tables[$type] = $data; + return $data; } /** - * @return array all table meta data. + * Gets the meta data for given database and table. */ - public function getAllMetaData() + public function getMetaData(TActiveRecord $record) { - return $this->_tables; + $type=get_class($record); + if(!($data = $this->getCachedMetaData($record))) + { + $conn = $record->getDbConnection(); + $inspector = $this->getManager()->getTableInspector($conn); + $table = $this->getTableName($record); + $data = $this->cacheMetaData($record,$inspector->getTableMetaData($table)); + } + return $data; } /** diff --git a/framework/Data/ActiveRecord/TActiveRecordManager.php b/framework/Data/ActiveRecord/TActiveRecordManager.php index 883abbf2..7f239a34 100644 --- a/framework/Data/ActiveRecord/TActiveRecordManager.php +++ b/framework/Data/ActiveRecord/TActiveRecordManager.php @@ -11,6 +11,7 @@ */ Prado::using('System.Data.TDbConnection'); +Prado::using('System.Data.ActiveRecord.TActiveRecord'); Prado::using('System.Data.ActiveRecord.Exceptions.TActiveRecordException'); Prado::using('System.Data.ActiveRecord.TActiveRecordGateway'); Prado::using('System.Data.ActiveRecord.TActiveRecordStateRegistry'); @@ -46,6 +47,24 @@ class TActiveRecordManager extends TComponent private $_meta=array(); private $_connection; + private $_cache; + + /** + * @return ICache application cache. + */ + public function getCache() + { + return $this->_cache; + } + + /** + * @param ICache application cache + */ + public function setCache($value) + { + $this->_cache=$value; + } + /** * @param TDbConnection default database connection */ diff --git a/framework/Data/SqlMap/Configuration/TSqlMapStatement.php b/framework/Data/SqlMap/Configuration/TSqlMapStatement.php index 253d2090..5d2640e9 100644 --- a/framework/Data/SqlMap/Configuration/TSqlMapStatement.php +++ b/framework/Data/SqlMap/Configuration/TSqlMapStatement.php @@ -294,6 +294,22 @@ class TSqlMapStatement extends TComponent } } +/** + * TSqlMapSelect class file. + * + * @author Wei Zhuo + * @version $Id$ + * @package System.Data.SqlMap.Statements + * @since 3.1 + */ +class TSqlMapSelect extends TSqlMapStatement +{ + private $_generate; + + public function getGenerate(){ return $this->_generate; } + public function setGenerate($value){ $this->_generate = $value; } +} + /** * TSqlMapDelete class corresponds to the element. * @@ -338,18 +354,6 @@ class TSqlMapInsert extends TSqlMapStatement } } -/** - * TSqlMapSelect class corresponds to