table = $table; } /** * {@inheritdoc} */ public function compile(Connection $connection, PlaceholderInterface $queryPlaceholder) { return $this->condition->compile($connection, $queryPlaceholder); } /** * {@inheritdoc} */ public function compiled() { return $this->condition->compiled(); } /** * Executes the TRUNCATE query. * * @return * Return value is dependent on the database type. */ public function execute() { return $this->connection->query((string) $this, [], $this->queryOptions); } /** * Implements PHP magic __toString method to convert the query to a string. * * @return string * The prepared statement. */ public function __toString() { // Create a sanitized comment string to prepend to the query. $comments = $this->connection->makeComment($this->comments); // In most cases, TRUNCATE is not a transaction safe statement as it is a // DDL statement which results in an implicit COMMIT. When we are in a // transaction, fallback to the slower, but transactional, DELETE. // PostgreSQL also locks the entire table for a TRUNCATE strongly reducing // the concurrency with other transactions. if ($this->connection->inTransaction()) { return $comments . 'DELETE FROM {' . $this->connection->escapeTable($this->table) . '}'; } else { return $comments . 'TRUNCATE {' . $this->connection->escapeTable($this->table) . '} '; } } }