Beispiel #1
0
 /**
  * Join field table if necessary.
  *
  * @param $field_name
  *   Name of the field.
  * @return string
  * @throws \Drupal\Core\Entity\Query\QueryException
  */
 protected function ensureFieldTable($index_prefix, &$field, $type, $langcode, $base_table, $entity_id_field, $field_id_field)
 {
     $field_name = $field->getName();
     if (!isset($this->fieldTables[$index_prefix . $field_name])) {
         $table = $this->sqlQuery->getMetaData('age') == EntityStorageInterface::FIELD_LOAD_CURRENT ? ContentEntityDatabaseStorage::_fieldTableName($field) : ContentEntityDatabaseStorage::_fieldRevisionTableName($field);
         if ($field->getCardinality() != 1) {
             $this->sqlQuery->addMetaData('simple_query', FALSE);
         }
         $entity_type = $this->sqlQuery->getMetaData('entity_type');
         $this->fieldTables[$index_prefix . $field_name] = $this->addJoin($type, $table, "%alias.{$field_id_field} = {$base_table}.{$entity_id_field}", $langcode);
     }
     return $this->fieldTables[$index_prefix . $field_name];
 }
Beispiel #2
0
 protected function addJoin($type, $table, $join_condition, $langcode)
 {
     $arguments = array();
     if ($langcode) {
         $entity_type_id = $this->sqlQuery->getMetaData('entity_type');
         $entity_type = $this->entityManager->getDefinition($entity_type_id);
         // Only the data table follows the entity language key, dedicated field
         // tables have an hard-coded 'langcode' column.
         $langcode_key = $entity_type->getDataTable() == $table ? $entity_type->getKey('langcode') : 'langcode';
         $placeholder = ':langcode' . $this->sqlQuery->nextPlaceholder();
         $join_condition .= ' AND %alias.' . $langcode_key . ' = ' . $placeholder;
         $arguments[$placeholder] = $langcode;
     }
     return $this->sqlQuery->addJoin($type, $table, NULL, $join_condition, $arguments);
 }
 /**
  * Join field table if necessary.
  *
  * @param $field_name
  *   Name of the field.
  * @return string
  * @throws \Drupal\Core\Entity\Query\QueryException
  */
 protected function ensureFieldTable($index_prefix, &$field, $type, $langcode, $base_table, $entity_id_field, $field_id_field)
 {
     $field_name = $field->getName();
     if (!isset($this->fieldTables[$index_prefix . $field_name])) {
         $entity_type_id = $this->sqlQuery->getMetaData('entity_type');
         /** @var \Drupal\Core\Entity\Sql\DefaultTableMapping $table_mapping */
         $table_mapping = $this->entityManager->getStorage($entity_type_id)->getTableMapping();
         $table = $this->sqlQuery->getMetaData('age') == EntityStorageInterface::FIELD_LOAD_CURRENT ? $table_mapping->getDedicatedDataTableName($field) : $table_mapping->getDedicatedRevisionTableName($field);
         if ($field->getCardinality() != 1) {
             $this->sqlQuery->addMetaData('simple_query', FALSE);
         }
         $this->fieldTables[$index_prefix . $field_name] = $this->addJoin($type, $table, "%alias.{$field_id_field} = {$base_table}.{$entity_id_field}", $langcode);
     }
     return $this->fieldTables[$index_prefix . $field_name];
 }
 /**
  * Returns whether the query requires GROUP BY and ORDER BY MIN/MAX.
  *
  * @return bool
  */
 protected function isSimpleQuery()
 {
     return !$this->pager && !$this->range && !$this->count || $this->sqlQuery->getMetaData('simple_query');
 }
Beispiel #5
0
 public function getMetaData($key)
 {
     return $this->query->getMetaData($key);
 }