/** * {@inheritdoc} */ public function acceptForeignKey(Table $localTable, ForeignKeyConstraint $fkConstraint) { if (strlen($fkConstraint->getName()) == 0) { throw SchemaException::namedForeignKeyRequired($localTable, $fkConstraint); } $this->constraints->attach($fkConstraint, $localTable); }
/** * {@inheritdoc} * * @param string $sequenceName * @return \Doctrine\DBAL\Schema\Sequence * @throws \Doctrine\DBAL\Schema\SchemaException */ public function getSequence($sequenceName) { $sequenceName = $this->getFullQualifiedAssetNameDenormalised($sequenceName); if (!$this->hasSequence($sequenceName)) { throw SchemaException::sequenceDoesNotExist($sequenceName); } return $this->_sequences[$sequenceName]; }
/** * @param string $indexName * @return Index */ public function getIndex($indexName) { $indexName = strtolower($indexName); if (!$this->hasIndex($indexName)) { throw SchemaException::indexDoesNotExist($indexName, $this->_name); } return $this->_indexes[$indexName]; }
/** * Returns the Index with the given name. * * @param string $indexName The index name. * * @return Index * * @throws SchemaException If the index does not exist. */ public function getIndex($indexName) { $indexName = $this->normalizeIdentifier($indexName); if (!$this->hasIndex($indexName)) { throw SchemaException::indexDoesNotExist($indexName, $this->_name); } return $this->_indexes[$indexName]; }
/** * Creates a new namespace. * * @param string $namespaceName The name of the namespace to create. * * @return \Doctrine\DBAL\Schema\Schema This schema instance. */ public function createNamespace($namespaceName) { $unquotedNamespaceName = strtolower($this->getUnquotedAssetName($namespaceName)); if (isset($this->namespaces[$unquotedNamespaceName])) { throw SchemaException::namespaceAlreadyExists($unquotedNamespaceName); } $this->namespaces[$unquotedNamespaceName] = $namespaceName; return $this; }
/** * @throws SchemaException * @param string $sequenceName * @return \Doctrine\DBAL\Schema\Sequence */ public function getSequence($sequenceName) { $sequenceName = strtolower($sequenceName); if (!$this->hasSequence($sequenceName)) { throw SchemaException::sequenceDoesNotExist($sequenceName); } return $this->_sequences[$sequenceName]; }
/** * alter an existing table * * @param string $name name of the table that is intended to be changed. * @param array $changes associative array that contains the details of each type * of change that is intended to be performed. The types of * changes that are currently supported are defined as follows: * * name * * New name for the table. * * add * * Associative array with the names of fields to be added as * indexes of the array. The value of each entry of the array * should be set to another associative array with the properties * of the fields to be added. The properties of the fields should * be the same as defined by the Metabase parser. * * * remove * * Associative array with the names of fields to be removed as indexes * of the array. Currently the values assigned to each entry are ignored. * An empty array should be used for future compatibility. * * rename * * Associative array with the names of fields to be renamed as indexes * of the array. The value of each entry of the array should be set to * another associative array with the entry named name with the new * field name and the entry named Declaration that is expected to contain * the portion of the field declaration already in DBMS specific SQL code * as it is used in the CREATE TABLE statement. * * change * * Associative array with the names of the fields to be changed as indexes * of the array. Keep in mind that if it is intended to change either the * name of a field and any other properties, the change array entries * should have the new names of the fields as array indexes. * * The value of each entry of the array should be set to another associative * array with the properties of the fields to that are meant to be changed as * array entries. These entries should be assigned to the new values of the * respective properties. The properties of the fields should be the same * as defined by the Metabase parser. * * Example * array( * 'name' => 'userlist', * 'add' => array( * 'quota' => array( * 'type' => 'integer', * 'unsigned' => 1 * ) * ), * 'remove' => array( * 'file_limit' => array(), * 'time_limit' => array() * ), * 'change' => array( * 'name' => array( * 'length' => '20', * 'definition' => array( * 'type' => 'text', * 'length' => 20, * ), * ) * ), * 'rename' => array( * 'sex' => array( * 'name' => 'gender', * 'definition' => array( * 'type' => 'text', * 'length' => 1, * 'default' => 'M', * ), * ) * ) * ) * * @param boolean $check indicates whether the function should just check if the DBMS driver * can perform the requested table alterations if the value is true or * actually perform them otherwise. * @return void */ public function alterTable($name, array $changes, $check = false) { foreach ($changes as $changeName => $change) { switch ($changeName) { case 'add': break; case 'remove': break; case 'name': case 'rename': case 'change': default: throw SchemaException::alterTableChangeNotSupported($changeName); } } $query = ''; if (!empty($changes['add']) && is_array($changes['add'])) { foreach ($changes['add'] as $fieldName => $field) { if ($query) { $query .= ', '; } $query .= 'ADD ' . $this->getDeclaration($fieldName, $field); } } if (!empty($changes['remove']) && is_array($changes['remove'])) { foreach ($changes['remove'] as $fieldName => $field) { if ($query) { $query .= ', '; } $query .= 'DROP COLUMN ' . $fieldName; } } if (!$query) { return false; } return $this->_conn->exec('ALTER TABLE ' . $name . ' ' . $query); }
/** * @param string $tableName * * @return \Doctrine\DBAL\Schema\Table * * @throws \Doctrine\DBAL\Schema\SchemaException */ public function getTable($tableName) { $tableName = $this->getFullQualifiedAssetName($tableName); if (!isset($this->_tables[$tableName])) { throw SchemaException::tableDoesNotExist($tableName); } return $this->_tables[$tableName]; }
/** * Builds the ORDER BY part * @param QueryBuilder $qb * @param array $order_by * @return self */ protected function buildOrderBy(QueryBuilder $qb, array $order_by = []) { foreach ($order_by as $order) { $column = null; $direction = 'ASC'; if (is_string($order)) { $column = $order; } elseif (is_array($order) && count($order) === 2) { list($column, $direction) = $order; } if ($column === null || $this->getColumn($column) === null) { throw Schema\SchemaException::columnDoesNotExist($column, $this->table_name); } if (!in_array($direction, ['ASC', 'DESC'])) { throw QueryBuilderException::orderByDirectionDoesNotExist($direction); } $qb->addOrderBy($this->conn->quoteIdentifier($column), $direction); } return $this; }