/** * Get select() default columns * * @return array */ protected function getSelectColumns($columns = null) { if (null === $columns) { $domains = true; } elseif ($index = array_search('domains', $columns)) { $domains = true; unset($columns[$index]); } else { $domains = false; } $columns = parent::getSelectColumns($columns); $platform = $this->getDbAdapter()->getPlatform(); if ($domains) { $columns['domains'] = new Sql\Expression('(' . $this->sql($this->getTableInSchema(static::$domainTableName))->select()->columns(array(new FunctionCall('string_agg', array('domain', "\n"), array(FunctionCall::TYPE_IDENTIFIER, FunctionCall::TYPE_VALUE))))->where(array(new Sql\Predicate\Expression($platform->quoteIdentifierChain(array(static::$domainTableName, 'siteId')) . ' = ' . $platform->quoteIdentifierChain(array(static::$tableName, 'id')))))->getSqlString($platform) . ')'); } return $columns; }
/** * Get select() default columns * * @return array */ protected function getSelectColumns($columns = null) { if (null === $columns) { $properties = true; } elseif ($index = array_search(self::PROPERTIES_FIELD, $columns)) { $properties = true; unset($columns[$index]); } else { $properties = false; } $columns = parent::getSelectColumns($columns); if ($properties) { $platform = $this->getDbAdapter()->getPlatform(); $columns[self::PROPERTIES_FIELD] = new Sql\Expression('(' . $this->sql($this->getTableInSchema(static::$propertyTableName))->select()->columns(array(new Sql\Expression('TEXT( ARRAY_TO_JSON( ARRAY_AGG( ? ORDER BY CHAR_LENGTH( ? ) ASC ) ) )', array(static::$propertyTableName, 'name'), array(Sql\Expression::TYPE_IDENTIFIER, Sql\Expression::TYPE_IDENTIFIER))))->where(array(new Predicate\Expression($platform->quoteIdentifier('ruleId') . ' = ' . $platform->quoteIdentifierChain(array(static::$tableName, 'id')))))->getSqlString($platform) . ')'); } return $columns; }
/** * Get select() default columns * * @return array */ protected function getSelectColumns($columns = null) { if (null === $columns) { $label = true; } elseif ($index = array_search('label', $columns)) { $label = true; unset($columns[$index]); } else { $label = false; } if (null === $columns) { $proxyData = true; } elseif ($index = array_search('proxyData', $columns)) { $proxyData = true; unset($columns[$index]); } else { $proxyData = false; } if (null === $columns) { $level = false; } elseif ($index = array_search('level', $columns)) { $level = true; unset($columns[$index]); } else { $level = false; } $columns = parent::getSelectColumns($columns); if ($label) { $platform = $this->getDbAdapter()->getPlatform(); $columns['label'] = new Sql\Expression('(' . $this->sql($this->getTableInSchema(static::$labelTableName))->select()->columns(array('label'))->where(array(new Sql\Predicate\Expression($platform->quoteIdentifierChain(array(static::$labelTableName, 'menuId')) . ' = ' . $platform->quoteIdentifierChain(array(static::$tableName, 'id')))))->order(array(new Sql\Expression('CASE ? ' . 'WHEN ? THEN 1 ' . 'WHEN ? THEN 2 ' . 'WHEN ? THEN 3 ' . 'WHEN ? THEN 4 ' . 'ELSE 5 ' . 'END ASC', array('locale', $this->getLocale(), $this->getPrimaryLanguage(), $this->getDefaultLocale(), 'en'), array(Sql\Expression::TYPE_IDENTIFIER, Sql\Expression::TYPE_VALUE, Sql\Expression::TYPE_VALUE, Sql\Expression::TYPE_VALUE, Sql\Expression::TYPE_VALUE))))->limit(1)->getSqlString($platform) . ')'); } if ($proxyData) { $platform = $this->getDbAdapter()->getPlatform(); $columns['proxyData'] = new Sql\Expression('(' . $this->sql($this->getTableInSchema(static::$propertyTableName))->select()->columns(array(new Sql\Expression('TEXT( ARRAY_TO_JSON( ARRAY_AGG( ? ORDER BY ? ASC ) ) )', array(static::$propertyTableName, 'name'), array(Sql\Expression::TYPE_IDENTIFIER, Sql\Expression::TYPE_IDENTIFIER))))->where(array(new Sql\Predicate\Expression($platform->quoteIdentifierChain(array(static::$propertyTableName, 'menuId')) . ' = ' . $platform->quoteIdentifierChain(array(static::$tableName, 'id')))))->getSqlString($platform) . ')'); } if ($level) { $columns['level'] = new Sql\Expression('(' . $this->sql(null)->select(array('ascendants' => static::$tableName))->columns(array(new Sql\Expression('COUNT(*) - 1')))->where(array(new Sql\Predicate\Expression($platform->quoteIdentifierChain(array(static::$tableName, 'left')) . ' BETWEEN ' . $platform->quoteIdentifierChain(array('ascendants', 'left')) . ' AND ' . $platform->quoteIdentifierChain(array('ascendants', 'right')))))->getSqlString($platform) . ')'); } return $columns; }
/** * Get select() default columns * * @return array */ protected function getSelectColumns($columns = null) { if (null === $columns) { $proxyData = true; } elseif ($index = array_search('proxyData', $columns)) { $proxyData = true; unset($columns[$index]); } else { $proxyData = false; } if (null === $columns) { $tags = true; } elseif ($index = array_search('tags', $columns)) { $tags = true; unset($columns[$index]); } else { $tags = false; } if (null === $columns) { $tagIds = true; } elseif ($index = array_search('tagIds', $columns)) { $tagIds = true; unset($columns[$index]); } else { $tagIds = false; } if (null === $columns) { $localeTags = true; } elseif ($index = array_search('localeTags', $columns)) { $localeTags = true; unset($columns[$index]); } else { $localeTags = false; } $columns = parent::getSelectColumns($columns); $platform = $this->getDbAdapter()->getPlatform(); if ($proxyData) { $columns['proxyData'] = new Sql\Expression('(' . $this->sql($this->getTableInSchema(static::$propertyTableName))->select()->columns(array(new Sql\Expression('TEXT( ARRAY_TO_JSON( ARRAY_AGG( ? ORDER BY CASE ? WHEN ? THEN 1 WHEN ? THEN 2 WHEN ? THEN 3 WHEN ? THEN 4 ELSE 5 END DESC ) ) )', array(static::$propertyTableName, 'locale', $this->getLocale(), $this->getPrimaryLanguage(), $this->getDefaultLocale(), 'en'), array(Sql\Expression::TYPE_IDENTIFIER, Sql\Expression::TYPE_IDENTIFIER, Sql\Expression::TYPE_VALUE, Sql\Expression::TYPE_VALUE, Sql\Expression::TYPE_VALUE, Sql\Expression::TYPE_VALUE))))->where(array(new Sql\Predicate\Operator(static::$propertyTableName . '.paragraphId', Sql\Predicate\Operator::OPERATOR_EQUAL_TO, static::$tableName . '.id', Sql\Predicate\Operator::TYPE_IDENTIFIER, Sql\Predicate\Operator::TYPE_IDENTIFIER)))->getSqlString($platform) . ')'); } else { $original = array_keys(static::getColumns()) + array('tags', 'tagIds', 'localeTags'); foreach ($columns as $key => $column) { if (is_numeric($key) && !in_array($column, $original)) { unset($columns[$key]); if (!isset($columns[$column])) { $columns[$column] = new Sql\Expression('(' . $this->sql($this->getTableInSchema(static::$propertyTableName))->select()->columns(array('value'))->where(array(new Sql\Predicate\Operator(static::$propertyTableName . '.paragraphId', Sql\Predicate\Operator::OPERATOR_EQUAL_TO, static::$tableName . '.id', Sql\Predicate\Operator::TYPE_IDENTIFIER, Sql\Predicate\Operator::TYPE_IDENTIFIER), 'name' => $column))->order(array(new Sql\Expression('CASE ? ' . 'WHEN ? THEN 1 ' . 'WHEN ? THEN 2 ' . 'WHEN ? THEN 3 ' . 'ELSE 4 ' . 'END ASC', array('locale', $this->getLocale(), $this->getPrimaryLanguage(), '*'), array(Sql\Expression::TYPE_IDENTIFIER, Sql\Expression::TYPE_VALUE, Sql\Expression::TYPE_VALUE, Sql\Expression::TYPE_VALUE))))->limit(1)->getSqlString($platform) . ')'); } } } } if ($tags) { $columns['tags'] = new Sql\Expression('(' . $this->sql($this->getTableInSchema(static::$tagTableName))->select()->columns(array(new Sql\Expression('STRING_AGG( ?, ? ORDER BY ? ASC )', array('name', static::TAG_SEPARATOR, 'name'), array(Sql\Expression::TYPE_IDENTIFIER, Sql\Expression::TYPE_VALUE, Sql\Expression::TYPE_IDENTIFIER))))->join($this->getTableInSchema(static::$tagJoinTableName), static::$tagTableName . '.id = ' . static::$tagJoinTableName . '.tagId', array())->where(array(new Sql\Predicate\Operator(static::$tagJoinTableName . '.paragraphId', Sql\Predicate\Operator::OPERATOR_EQUAL_TO, static::$tableName . '.id', Sql\Predicate\Operator::TYPE_IDENTIFIER, Sql\Predicate\Operator::TYPE_IDENTIFIER)))->getSqlString($platform) . ')'); } if ($tagIds) { $columns['tagIds'] = new Sql\Expression('(' . $this->sql($this->getTableInSchema(static::$tagJoinTableName))->select()->columns(array(new Sql\Expression('STRING_AGG( TEXT( ? ), ? ORDER BY ? ASC )', array('tagId', static::TAG_SEPARATOR, 'tagId'), array(Sql\Expression::TYPE_IDENTIFIER, Sql\Expression::TYPE_VALUE, Sql\Expression::TYPE_IDENTIFIER))))->where(array(new Sql\Predicate\Operator(static::$tagJoinTableName . '.paragraphId', Sql\Predicate\Operator::OPERATOR_EQUAL_TO, static::$tableName . '.id', Sql\Predicate\Operator::TYPE_IDENTIFIER, Sql\Predicate\Operator::TYPE_IDENTIFIER)))->getSqlString($platform) . ')'); } if ($localeTags) { $columns['localeTags'] = new Sql\Expression('(' . $this->sql($this->getTableInSchema(static::$tagTableName))->select()->columns(array(new Sql\Expression('STRING_AGG( ?, ? ORDER BY ? ASC )', array('name', static::TAG_SEPARATOR, 'name'), array(Sql\Expression::TYPE_IDENTIFIER, Sql\Expression::TYPE_VALUE, Sql\Expression::TYPE_IDENTIFIER))))->join($this->getTableInSchema(static::$tagJoinTableName), static::$tagTableName . '.id = ' . static::$tagJoinTableName . '.tagId', array())->where(array(new Sql\Predicate\Operator(static::$tagJoinTableName . '.paragraphId', Sql\Predicate\Operator::OPERATOR_EQUAL_TO, static::$tableName . '.id', Sql\Predicate\Operator::TYPE_IDENTIFIER, Sql\Predicate\Operator::TYPE_IDENTIFIER), new Sql\Predicate\PredicateSet(array(new Sql\Predicate\IsNull(static::$tagTableName . '.locale'), new Sql\Predicate\In(static::$tagTableName . '.locale', array($this->getLocale(), $this->getPrimaryLanguage(), ''))), Sql\Predicate\PredicateSet::COMBINED_BY_OR)))->getSqlString($platform) . ')'); } return $columns; }