00001 <?php 00002 /*************************************************************************** 00003 * Copyright (C) 2005-2007 by Konstantin V. Arkhipov * 00004 * * 00005 * This program is free software; you can redistribute it and/or modify * 00006 * it under the terms of the GNU Lesser General Public License as * 00007 * published by the Free Software Foundation; either version 3 of the * 00008 * License, or (at your option) any later version. * 00009 * * 00010 ***************************************************************************/ 00011 00019 final class LiteDialect extends Dialect 00020 { 00024 public static function me() 00025 { 00026 return Singleton::getInstance(__CLASS__); 00027 } 00028 00029 public static function quoteValue($value) 00030 { 00032 00033 if ($value instanceof Identifier && !$value->isFinalized()) 00034 return 'null'; 00035 00036 if (Assert::checkInteger($value)) 00037 return $value; 00038 00039 return "'" .sqlite_escape_string($value)."'"; 00040 } 00041 00042 public static function dropTableMode($cascade = false) 00043 { 00044 return null; 00045 } 00046 00047 public function quoteBinary($data) 00048 { 00049 return sqlite_udf_encode_binary($data); 00050 } 00051 00052 public function unquoteBinary($data) 00053 { 00054 return sqlite_udf_decode_binary($data); 00055 } 00056 00057 public function typeToString(DataType $type) 00058 { 00059 switch ($type->getId()) { 00060 case DataType::BIGINT: 00061 00062 return 'INTEGER'; 00063 00064 case DataType::BINARY: 00065 00066 return 'BLOB'; 00067 } 00068 00069 return parent::typeToString($type); 00070 } 00071 00072 public function preAutoincrement(DBColumn $column) 00073 { 00074 self::checkColumn($column); 00075 00076 return null; 00077 } 00078 00079 public function postAutoincrement(DBColumn $column) 00080 { 00081 self::checkColumn($column); 00082 00083 return null; // or even 'AUTOINCREMENT'? 00084 } 00085 00086 public function hasTruncate() 00087 { 00088 return false; 00089 } 00090 00091 public function hasMultipleTruncate() 00092 { 00093 return false; 00094 } 00095 00096 public function hasReturning() 00097 { 00098 return false; 00099 } 00100 00101 private static function checkColumn(DBColumn $column) 00102 { 00103 $type = $column->getType(); 00104 00105 Assert::isTrue( 00106 ( 00107 $type->getId() == DataType::BIGINT 00108 || $type->getId() == DataType::INTEGER 00109 ) 00110 && $column->isPrimaryKey() 00111 ); 00112 } 00113 } 00114 ?>