| <?php |
| /** |
| * File containing the ezcQueryDelete class. |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| * @package Database |
| * @version //autogentag// |
| * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 |
| */ |
| |
| /** |
| * Class to create select database independent DELETE queries. |
| * |
| * Note that this class creates queries that are syntactically independant |
| * of database. Semantically the queries still differ and so the same |
| * query may produce different results on different databases. Such |
| * differences are noted throughout the documentation of this class. |
| * |
| * This class implements SQL92. If your database differs from the SQL92 |
| * implementation extend this class and reimplement the methods that produce |
| * different results. Some methods implemented in ezcQuery are not defined by SQL92. |
| * These methods are marked and ezcQuery will return MySQL syntax for these cases. |
| * |
| * The examples show the SQL generated by this class. |
| * Database specific implementations may produce different results. |
| * |
| * Example: |
| * <code> |
| * $q = ezcDbInstance::get()->createDeleteQuery(); |
| * $q->deleteFrom( 'MyTable' )->where( $q->expr->eq( 'id', 1 ) ); |
| * $stmt = $q->prepare(); |
| * $stmt->execute(); |
| * </code> |
| * |
| * @package Database |
| * @version //autogentag// |
| * @mainclass |
| */ |
| class ezcQueryDelete extends ezcQuery |
| { |
| /** |
| * The target table for the delete query. |
| * |
| * @var string |
| */ |
| private $table = null; |
| |
| /** |
| * Stores the WHERE part of the SQL. |
| * |
| * @var string |
| */ |
| protected $whereString = null; |
| |
| |
| /** |
| * Constructs a new ezcQueryDelete that works on the database $db and with the aliases $aliases. |
| * |
| * The paramters are passed directly to ezcQuery. |
| * @param PDO $db |
| * @param array(string=>string) $aliases |
| */ |
| public function __construct( PDO $db, array $aliases = array() ) |
| { |
| parent::__construct( $db, $aliases ); |
| } |
| |
| /** |
| * Opens the query and sets the target table to $table. |
| * |
| * deleteFrom() returns a pointer to $this. |
| * |
| * @param string $table |
| * @return ezcQueryDelete |
| */ |
| public function deleteFrom( $table ) |
| { |
| $this->table = $table; |
| return $this; |
| } |
| |
| /** |
| * Adds a where clause with logical expressions to the query. |
| * |
| * where() accepts an arbitrary number of parameters. Each parameter |
| * must contain a logical expression or an array with logical expressions. |
| * where() could be invoked several times. All provided arguments |
| * added to the end of $whereString and form final WHERE clause of the query. |
| * If you specify multiple logical expression they are connected using |
| * a logical and. |
| * |
| * Example: |
| * <code> |
| * $q->deleteFrom( 'MyTable' )->where( $q->eq( 'id', 1 ) ); |
| * </code> |
| * |
| * @throws ezcQueryVaraibleParameterException if called with no parameters. |
| * @param string|array(string) $... Either a string with a logical expression name |
| * or an array with logical expressions. |
| * @return ezcQueryDelete |
| */ |
| public function where() |
| { |
| if ( $this->whereString == null ) |
| { |
| $this->whereString = 'WHERE '; |
| } |
| |
| $args = func_get_args(); |
| $expressions = self::arrayFlatten( $args ); |
| if ( count( $expressions ) < 1 ) |
| { |
| throw new ezcQueryVariableParameterException( 'where', count( $args ), 1 ); |
| } |
| |
| // glue string should be inserted each time but not before first entry |
| if ( $this->whereString != 'WHERE ' ) |
| { |
| $this->whereString .= ' AND '; |
| } |
| |
| $this->whereString .= join( ' AND ', $expressions ); |
| return $this; |
| } |
| |
| |
| /** |
| * Returns the query string for this query object. |
| * |
| * @todo wrong exception |
| * @throws ezcQueryInvalidException if no table or no values have been set. |
| * @return string |
| */ |
| public function getQuery() |
| { |
| if ( $this->table == null ) |
| { |
| throw new ezcQueryInvalidException( "DELETE", "deleteFrom() was not called before getQuery()." ); |
| } |
| $query = "DELETE FROM {$this->table}"; |
| |
| // append where part. |
| if ( $this->whereString !== null ) |
| { |
| $query .= " {$this->whereString}"; |
| } |
| |
| return $query; |
| } |
| } |
| ?> |