public function tryDelimite($str, $delimiteMode = null) { $delimiteMode = null !== $delimiteMode ? $delimiteMode : $this->delimiteMode; if (self::DELIMITE_MODE_NONE == $delimiteMode) { return $str; } $driver = $this->connection->getDriver(); $delimited = ''; $splits = preg_split("~('(?:[^\\\\']+|\\\\.)*')~", $str, -1, PREG_SPLIT_DELIM_CAPTURE); //split by single quoted strings foreach ($splits as $part) { if (!empty($part)) { if (strlen($part) <= 1 || "'" != $part[0] || "'" != $part[strlen($part) - 1]) { //ignore parts that are sql string (inside single quotes) if ($delimiteMode & self::DELIMITE_MODE_REPLACE) { $part = preg_replace_callback('~(["`\\[])([a-z_][a-z0-9_]*)(["`\\]])~i', function ($m) use($driver) { return $driver->delimite($m[2]); }, $part); } if ($delimiteMode & self::DELIMITE_MODE_ADD) { $part = preg_replace_callback('~(?<=[^"`:\'\\[\\w]|^)[a-z_][a-z0-9_]*(?=[^"`\'\\]\\w]|\\z)~i', function ($m) use($driver) { return $m[0] == strtoupper($m[0]) ? $m[0] : $driver->delimite($m[0]); }, $part); } } $delimited .= $part; } } return $delimited; }
/** * @return string */ public function getPrimarySequence() { if ($this->primarySequence === FALSE) { $this->primarySequence = NULL; $driver = $this->connection->getDriver(); if ($driver->isSupported(IDriver::SUPPORT_SEQUENCE) && $this->primary !== NULL) { foreach ($driver->getColumns($this->name) as $column) { if ($column['name'] === $this->primary) { $this->primarySequence = $column['vendor']['sequence']; break; } } } } return $this->primarySequence; }
protected function __construct(Connection $connection) { $this->connection = $connection; $this->driver = $connection->getDriver(); $this->setFetchMode(PDO::FETCH_CLASS, 'Flunorette\\Row', array($this)); }