/**
  * Given a related model id return a list of check items models.
  * @param integer $taskId
  */
 public static function getByTask($taskId)
 {
     assert('is_int($taskId)');
     $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('TaskCheckListItem');
     $orderBySortColumnName = RedBeanModelDataProvider::resolveSortAttributeColumnName('TaskCheckListItem', $joinTablesAdapter, 'sortOrder');
     $orderByColumnNameFallback = RedBeanModelDataProvider::resolveSortAttributeColumnName('TaskCheckListItem', $joinTablesAdapter, 'id');
     $where = "task_id = '" . $taskId . "'";
     $orderBy = $orderBySortColumnName . 'asc, ' . $orderByColumnNameFallback . ' desc';
     return self::getSubset($joinTablesAdapter, null, null, $where, $orderBy);
 }
示例#2
0
 /**
  * Given a related model type, a related model id, and a page size, return a list of comment models.
  * @param string $type
  * @param integer $relatedId
  * @param integer $pageSize
  */
 public static function getCommentsByRelatedModelTypeIdAndPageSize($type, $relatedId, $pageSize)
 {
     assert('is_string($type)');
     assert('is_int($relatedId)');
     assert('is_int($pageSize) || $pageSize = null');
     $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('Comment');
     $orderByColumnName = RedBeanModelDataProvider::resolveSortAttributeColumnName('Comment', $joinTablesAdapter, 'createdDateTime');
     $where = "relatedmodel_type = '" . strtolower($type) . "' AND relatedmodel_id = '" . $relatedId . "'";
     $orderBy = $orderByColumnName . ' desc';
     return self::getSubset($joinTablesAdapter, null, $pageSize, $where, $orderBy);
 }
示例#3
0
 /**
  * This test specifically looks at when searching a note's owner.  Because note extends mashableactivity which
  * does not have a bean, the query is constructed slightly different than if mashableactivity had a bean.
  */
 public function testQueryIsProperlyGeneratedForNoteWithRelatedOwnerSearch()
 {
     Yii::app()->user->userModel = User::getByUsername('super');
     $_FAKEPOST = array('Note' => array('owner' => array('id' => Yii::app()->user->userModel->id)));
     $metadataAdapter = new SearchDataProviderMetadataAdapter(new Note(false), 1, $_FAKEPOST['Note']);
     $_GET['Note_sort'] = 'description.desc';
     $searchAttributeData = $metadataAdapter->getAdaptedMetadata();
     $quote = DatabaseCompatibilityUtil::getQuote();
     $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('Note');
     $where = RedBeanModelDataProvider::makeWhere('Note', $searchAttributeData, $joinTablesAdapter);
     $orderByColumnName = RedBeanModelDataProvider::resolveSortAttributeColumnName('Note', $joinTablesAdapter, 'description');
     $subsetSql = Note::makeSubsetOrCountSqlQuery('note', $joinTablesAdapter, 1, 5, $where, $orderByColumnName);
     $compareSubsetSql = "select {$quote}note{$quote}.{$quote}id{$quote} id ";
     $compareSubsetSql .= "from ({$quote}note{$quote}, {$quote}activity{$quote}, {$quote}ownedsecurableitem{$quote})";
     $compareSubsetSql .= " where ({$quote}ownedsecurableitem{$quote}.{$quote}owner__user_id{$quote} = " . Yii::app()->user->userModel->id . ")";
     $compareSubsetSql .= " and {$quote}activity{$quote}.{$quote}id{$quote} =";
     $compareSubsetSql .= " {$quote}note{$quote}.{$quote}activity_id{$quote}";
     $compareSubsetSql .= " and {$quote}ownedsecurableitem{$quote}.{$quote}id{$quote} = {$quote}activity{$quote}.{$quote}ownedsecurableitem_id{$quote}";
     $compareSubsetSql .= " order by {$quote}note{$quote}.{$quote}description{$quote} limit 5 offset 1";
     $this->assertEquals($compareSubsetSql, $subsetSql);
 }
 /**
  * Public for testing purposes only.
  */
 public static function makeUnionSql(array $modelClassNamesAndSearchAttributeData, array $modelClassNamesAndSortAttributes = null, $sortDescending = false, $offset = null, $limit = null)
 {
     assert('$modelClassNamesAndSortAttributes === null ||
                 count($modelClassNamesAndSortAttributes) == count($modelClassNamesAndSearchAttributeData)');
     assert('is_bool($sortDescending)');
     $sqlStatementsToUnion = array();
     foreach ($modelClassNamesAndSearchAttributeData as $identifier => $modelClassNameAndSearchAttributeData) {
         foreach ($modelClassNameAndSearchAttributeData as $modelClassName => $searchAttributeData) {
             $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter($modelClassName);
             $where = ModelDataProviderUtil::makeWhere($modelClassName, $searchAttributeData, $joinTablesAdapter);
             $orderByColumnName = null;
             $tableName = $modelClassName::getTableName($modelClassName);
             if ($modelClassNamesAndSortAttributes !== null) {
                 if (isset($modelClassNamesAndSortAttributes[$modelClassName])) {
                     $orderByColumnName = RedBeanModelDataProvider::resolveSortAttributeColumnName($modelClassName, $joinTablesAdapter, $modelClassNamesAndSortAttributes[$modelClassName]);
                 } else {
                     throw new notSupportedException();
                 }
             }
             $quotedExtraSelectColumnNameAndAliases = array();
             $quotedExtraSelectColumnNameAndAliases["'" . $modelClassName . "'"] = 'modelClassName';
             if ($orderByColumnName != null) {
                 $quotedExtraSelectColumnNameAndAliases[$orderByColumnName] = 'orderByColumn';
             }
             $sqlStatementsToUnion[] = $modelClassName::makeSubsetOrCountSqlQuery($tableName, $joinTablesAdapter, null, null, $where, null, false, $joinTablesAdapter->getSelectDistinct(), $quotedExtraSelectColumnNameAndAliases);
         }
     }
     $orderBy = null;
     if ($modelClassNamesAndSortAttributes !== null) {
         $orderBy = 'orderByColumn';
         if ($sortDescending) {
             $orderBy .= ' desc';
         }
     }
     return self::makeSubsetUnionSqlQuery($sqlStatementsToUnion, $offset, $limit, $orderBy);
 }
 protected static function getLastCompletedJobLogByType($type)
 {
     assert('is_string($type) && $type != ""');
     $searchAttributeData = array();
     $searchAttributeData['clauses'] = array(1 => array('attributeName' => 'type', 'operatorType' => 'equals', 'value' => $type));
     $searchAttributeData['structure'] = '1';
     $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('JobLog');
     $sort = RedBeanModelDataProvider::resolveSortAttributeColumnName('JobLog', $joinTablesAdapter, 'createdDateTime');
     $where = RedBeanModelDataProvider::makeWhere('JobLog', $searchAttributeData, $joinTablesAdapter);
     $models = JobLog::getSubset($joinTablesAdapter, null, 1, $where, $sort . ' desc');
     if (count($models) > 1) {
         throw new NotSupportedException();
     }
     if (count($models) == 0) {
         return null;
     }
     return $models[0];
 }
 /**
  * See ModelDataProviderUtilTest->testResolveSortAttributeColumnName
  */
 public function testResolveSortAttributeColumnName()
 {
     $quote = DatabaseCompatibilityUtil::getQuote();
     //Test a standard non-relation attribute on I
     $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('I');
     $sort = RedBeanModelDataProvider::resolveSortAttributeColumnName('I', $joinTablesAdapter, 'iMember');
     $this->assertEquals("{$quote}i{$quote}.{$quote}imember{$quote}", $sort);
     $this->assertEquals(0, $joinTablesAdapter->getFromTableJoinCount());
     $this->assertEquals(0, $joinTablesAdapter->getLeftTableJoinCount());
     //Test a standard casted up attribute on H from I
     $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('I');
     $sort = RedBeanModelDataProvider::resolveSortAttributeColumnName('I', $joinTablesAdapter, 'name');
     $this->assertEquals("{$quote}h{$quote}.{$quote}name{$quote}", $sort);
     $this->assertEquals(1, $joinTablesAdapter->getFromTableJoinCount());
     $this->assertEquals(0, $joinTablesAdapter->getLeftTableJoinCount());
     //Test a relation attribute G->g from H
     $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('H');
     $sort = RedBeanModelDataProvider::resolveSortAttributeColumnName('H', $joinTablesAdapter, 'castUpHasOne');
     $this->assertEquals("{$quote}g{$quote}.{$quote}g{$quote}", $sort);
     $this->assertEquals(0, $joinTablesAdapter->getFromTableJoinCount());
     $this->assertEquals(1, $joinTablesAdapter->getLeftTableJoinCount());
     $leftTables = $joinTablesAdapter->getLeftTablesAndAliases();
     $this->assertEquals('g', $leftTables[0]['tableName']);
     //Test a relation attribute G->g where casted up from I
     $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('I');
     $sort = RedBeanModelDataProvider::resolveSortAttributeColumnName('I', $joinTablesAdapter, 'castUpHasOne');
     $this->assertEquals("{$quote}g{$quote}.{$quote}g{$quote}", $sort);
     $this->assertEquals(1, $joinTablesAdapter->getFromTableJoinCount());
     $this->assertEquals(1, $joinTablesAdapter->getLeftTableJoinCount());
     $fromTables = $joinTablesAdapter->getFromTablesAndAliases();
     $this->assertEquals('h', $fromTables[0]['tableName']);
     $leftTables = $joinTablesAdapter->getLeftTablesAndAliases();
     $this->assertEquals('g', $leftTables[0]['tableName']);
     //Test a customField like TestCustomFieldsModel->industry
     $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('TestCustomFieldsModel');
     $sort = RedBeanModelDataProvider::resolveSortAttributeColumnName('TestCustomFieldsModel', $joinTablesAdapter, 'industry');
     $this->assertEquals("{$quote}customfield{$quote}.{$quote}value{$quote}", $sort);
     $this->assertEquals(0, $joinTablesAdapter->getFromTableJoinCount());
     $this->assertEquals(1, $joinTablesAdapter->getLeftTableJoinCount());
     $leftTables = $joinTablesAdapter->getLeftTablesAndAliases();
     $this->assertEquals('customfield', $leftTables[0]['tableName']);
 }
 /**
  * @depends testSortingModels
  */
 public function testSortingRelatedOwnerAttribute()
 {
     Yii::app()->user->userModel = User::getByUsername('super');
     $quote = DatabaseCompatibilityUtil::getQuote();
     $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('Account');
     $orderByColumnName = RedBeanModelDataProvider::resolveSortAttributeColumnName('Account', $joinTablesAdapter, 'owner');
     $this->assertEquals("{$quote}person{$quote}.{$quote}lastname{$quote}", $orderByColumnName);
     $leftTablesAndAliases = $joinTablesAdapter->getLeftTablesAndAliases();
     $this->assertEquals('person', $leftTablesAndAliases[1]['tableName']);
     $this->assertEquals('person', $leftTablesAndAliases[1]['tableAliasName']);
     $this->assertEquals('id', $leftTablesAndAliases[1]['tableJoinIdName']);
     $this->assertEquals('_user', $leftTablesAndAliases[1]['onTableAliasName']);
     $this->assertEquals('person_id', $leftTablesAndAliases[1]['onTableJoinIdName']);
     $subsetSql = Account::makeSubsetOrCountSqlQuery('account', $joinTablesAdapter, 1, 5, null, $orderByColumnName);
     $compareSubsetSql = "select {$quote}account{$quote}.{$quote}id{$quote} id ";
     $compareSubsetSql .= "from ({$quote}account{$quote}, {$quote}ownedsecurableitem{$quote}) ";
     $compareSubsetSql .= "left join {$quote}_user{$quote} on ";
     $compareSubsetSql .= "{$quote}_user{$quote}.{$quote}id{$quote} = {$quote}ownedsecurableitem{$quote}.{$quote}owner__user_id{$quote} ";
     $compareSubsetSql .= "left join {$quote}person{$quote} on ";
     $compareSubsetSql .= "{$quote}person{$quote}.{$quote}id{$quote} = {$quote}_user{$quote}.{$quote}person_id{$quote} ";
     $compareSubsetSql .= " where {$quote}ownedsecurableitem{$quote}.{$quote}id{$quote} = ";
     $compareSubsetSql .= "{$quote}account{$quote}.{$quote}ownedsecurableitem_id{$quote} ";
     $compareSubsetSql .= "order by {$quote}person{$quote}.{$quote}lastname{$quote} limit 5 offset 1";
     $this->assertEquals($compareSubsetSql, $subsetSql);
 }
示例#8
0
 /**
  * @param $moduleClassName
  * @return Array of SavedWorkflow models
  */
 public static function getAllByModuleClassName($moduleClassName)
 {
     assert('is_string($moduleClassName)');
     $searchAttributeData = array();
     $searchAttributeData['clauses'] = array(1 => array('attributeName' => 'moduleClassName', 'operatorType' => 'equals', 'value' => $moduleClassName));
     $searchAttributeData['structure'] = '1';
     $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('SavedWorkflow');
     $where = RedBeanModelDataProvider::makeWhere('SavedWorkflow', $searchAttributeData, $joinTablesAdapter);
     $orderBy = RedBeanModelDataProvider::resolveSortAttributeColumnName('SavedWorkflow', $joinTablesAdapter, 'order');
     return self::getSubset($joinTablesAdapter, null, null, $where, $orderBy);
 }