Go to the documentation of this file.00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00015 final class TruncateQuery extends QueryIdentification
00016 {
00017 private $targets = array();
00018
00019 public function __construct($whom = null)
00020 {
00021 if ($whom) {
00022 if (is_array($whom))
00023 $this->targets = $whom;
00024 else
00025 $this->targets[] = $whom;
00026 }
00027 }
00028
00029 public function getId()
00030 {
00031 throw new UnsupportedMethodException();
00032 }
00033
00037 public function table($table)
00038 {
00039 if ($table instanceof SQLTableName)
00040 $this->targets[] = $table->getTable();
00041 else
00042 $this->targets[] = $table;
00043
00044 return $this;
00045 }
00046
00047 public function toDialectString(Dialect $dialect)
00048 {
00049 Assert::isTrue(
00050 ($this->targets !== array()),
00051 'do not know who should i truncate'
00052 );
00053
00054 if ($dialect->hasTruncate()) {
00055 $head = 'TRUNCATE TABLE ';
00056 } else {
00057 $head = 'DELETE FROM ';
00058 }
00059
00060 if ($dialect->hasMultipleTruncate()) {
00061 $query = $head.$this->dumpTargets($dialect, null, ',');
00062 } else {
00063 $query = $this->dumpTargets($dialect, $head, ';');
00064 }
00065
00066 return $query.';';
00067 }
00068
00069 private function dumpTargets(
00070 Dialect $dialect, $prepend = null, $append = null
00071 )
00072 {
00073 if (count($this->targets) == 1) {
00074 return $prepend.$dialect->quoteTable(reset($this->targets));
00075 } else {
00076 $tables = array();
00077
00078 foreach ($this->targets as $target) {
00079 if ($target instanceof DialectString)
00080 $table =
00081 $dialect->quoteTable(
00082 $target->toDialectString($dialect)
00083 );
00084 else
00085 $table = $dialect->quoteTable($target);
00086
00087 $tables[] = $prepend.$table;
00088 }
00089
00090 return implode($append.' ', $tables);
00091 }
00092
00093 Assert::isUnreachable();
00094 }
00095 }
00096 ?>