| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 | <?phpclass LtDbSqlAdapterSqlite implements LtDbSqlAdapter{	public function setCharset($charset)	{		// return 'PRAGMA encoding = "' . $charset . '"';		return '';	}	public function setSchema($schema)	{		return '';	}	public function beginTransaction()	{		return 'BEGIN TRANSACTION';	}	public function commit()	{		return 'COMMIT TRANSACTION';	}	public function rollBack()	{		return 'ROLLBACK TRANSACTION';	}	public function showSchemas($database)	{		//return "SHOW DATABASES";		return '';	}	public function showTables($schema)	{		// 临时表及其索引不在 SQLITE_MASTER 表中而在 SQLITE_TEMP_MASTER 中出现		return "SELECT name FROM sqlite_master WHERE type='table' UNION ALL SELECT name FROM sqlite_temp_master WHERE type='table' ORDER BY name";	}	public function showFields($table)	{		return "PRAGMA table_info('" . $table . "')";	}	public function limit($limit, $offset)	{		return " LIMIT $limit OFFSET $offset";	}	public function getSchemas($queryResult)	{			}	public function getTables($queryResult)	{		return $queryResult;	}	public function getFields($queryResult)	{		$fields = array();		foreach ($queryResult as $key => $value)		{			// 字段名			$fields[$value['name']]['name'] = $value['name'];			// 字段类型			$fulltype = $value['type'];			$size = null;			$precision = null;			$scale = null;			if (preg_match('/^([^\(]+)\(\s*(\d+)\s*,\s*(\d+)\s*\)$/',$fulltype, $matches))			{				$type = $matches[1];				$precision = $matches[2];				$scale = $matches[3]; // aka precision			}			elseif (preg_match('/^([^\(]+)\(\s*(\d+)\s*\)$/',$fulltype, $matches))			{				$type = $matches[1];				$size = $matches[2];			}			else			{				$type = $fulltype;			}			$fields[$value['name']]['type'] = $type;			/**			* not null is 99, null is 0			*/			$fields[$value['name']]['notnull'] = (bool) ($value['notnull'] != 0);			$fields[$value['name']]['default'] = $value['dflt_value'];			$fields[$value['name']]['primary'] = (bool) ($value['pk'] == 1 && strtoupper($fulltype) == 'INTEGER');		}		return $fields;	}	public function detectQueryType($sql)	{		if (preg_match("/^\s*SELECT|^\s*PRAGMA/i", $sql))		{			$ret = 'SELECT';		}		else if (preg_match("/^\s*INSERT/i", $sql))		{			$ret = 'INSERT';		}		else if (preg_match("/^\s*UPDATE|^\s*DELETE|^\s*REPLACE/i", $sql))		{			$ret = 'CHANGE_ROWS';		}		else if (preg_match("/^\s*USE|^\s*SET/i", $sql))		{			$ret = 'SET_SESSION_VAR';		}		else		{			$ret = 'OTHER';		}		return $ret;	}}
 |