27 #require_once 'Zend/Db/Adapter/Pdo/Abstract.php'; 86 unset($dsn[
'username']);
87 unset($dsn[
'password']);
88 unset($dsn[
'options']);
89 unset($dsn[
'persistent']);
90 unset($dsn[
'driver_options']);
92 if (isset($dsn[
'port'])) {
94 if (strtoupper(substr(PHP_OS, 0, 3)) ===
'WIN') {
97 $dsn[
'host'] .= $seperator . $dsn[
'port'];
103 if (isset($dsn[
'pdoType'])) {
104 switch (strtolower($dsn[
'pdoType'])) {
107 $this->_pdoType =
'sybase';
110 $this->_pdoType =
'mssql';
114 $this->_pdoType =
'dblib';
117 unset($dsn[
'pdoType']);
121 foreach ($dsn as $key => $val) {
122 $dsn[$key] =
"$key=$val";
125 $dsn = $this->_pdoType .
':' . implode(
';', $dsn);
134 if ($this->_connection) {
138 $this->_connection->exec(
'SET QUOTED_IDENTIFIER ON');
150 $this->_connection->exec(
'BEGIN TRANSACTION');
163 $this->_connection->exec(
'COMMIT TRANSACTION');
175 $this->_connection->exec(
'ROLLBACK TRANSACTION');
186 $sql =
"SELECT name FROM sysobjects WHERE type = 'U' ORDER BY name";
223 if ($schemaName !=
null) {
224 if (strpos($schemaName,
'.') !==
false) {
225 $result = explode(
'.', $schemaName);
233 if ($schemaName !=
null) {
234 $sql .=
", @table_owner = " . $this->
quoteIdentifier($schemaName,
true);
237 $stmt = $this->
query($sql);
248 $column_position = 16;
254 if ($schemaName !=
null) {
255 $sql .=
", @table_owner = " . $this->
quoteIdentifier($schemaName,
true);
258 $stmt = $this->
query($sql);
260 $primaryKeyColumn = array();
261 $pkey_column_name = 3;
263 foreach ($primaryKeysResult as $pkeysRow) {
264 $primaryKeyColumn[$pkeysRow[$pkey_column_name]] = $pkeysRow[$pkey_key_seq];
271 $words = explode(
' ',
$row[$type_name], 2);
272 if (isset($words[0])) {
274 if (isset($words[1])) {
275 $identity = (bool) preg_match(
'/identity/', $words[1]);
279 $isPrimary = array_key_exists(
$row[$column_name], $primaryKeyColumn);
281 $primaryPosition = $primaryKeyColumn[
$row[$column_name]];
283 $primaryPosition =
null;
287 'SCHEMA_NAME' =>
null,
290 'COLUMN_POSITION' => (
int)
$row[$column_position],
291 'DATA_TYPE' =>
$type,
292 'DEFAULT' =>
$row[$column_def],
293 'NULLABLE' => (
bool)
$row[$nullable],
294 'LENGTH' =>
$row[$length],
295 'SCALE' =>
$row[$scale],
296 'PRECISION' =>
$row[$precision],
298 'PRIMARY' => $isPrimary,
299 'PRIMARY_POSITION' => $primaryPosition,
300 'IDENTITY' => $identity
322 #require_once 'Zend/Db/Adapter/Exception.php'; 326 $offset = intval($offset);
329 #require_once 'Zend/Db/Adapter/Exception.php'; 334 '/^SELECT\s+(DISTINCT\s)?/i',
335 'SELECT $1TOP ' . (
$count+$offset) .
' ',
340 $orderby = stristr($sql,
'ORDER BY');
342 if ($orderby !==
false) {
343 $orderParts = explode(
',', substr($orderby, 8));
344 $pregReplaceCount =
null;
345 $orderbyInverseParts = array();
346 foreach ($orderParts as $orderPart) {
347 $orderPart = rtrim($orderPart);
348 $inv = preg_replace(
'/\s+desc$/i',
' ASC', $orderPart, 1, $pregReplaceCount);
349 if ($pregReplaceCount) {
350 $orderbyInverseParts[] = $inv;
353 $inv = preg_replace(
'/\s+asc$/i',
' DESC', $orderPart, 1, $pregReplaceCount);
354 if ($pregReplaceCount) {
355 $orderbyInverseParts[] = $inv;
358 $orderbyInverseParts[] = $orderPart .
' DESC';
362 $orderbyInverse =
'ORDER BY ' . implode(
', ', $orderbyInverseParts);
368 $sql =
'SELECT * FROM (SELECT TOP ' .
$count .
' * FROM (' . $sql .
') AS inner_tbl';
369 if ($orderby !==
false) {
370 $sql .=
' ' . $orderbyInverse .
' ';
372 $sql .=
') AS outer_tbl';
373 if ($orderby !==
false) {
374 $sql .=
' ' . $orderby;
401 $sql =
'SELECT SCOPE_IDENTITY()';
413 $stmt = $this->
query(
"SELECT CAST(SERVERPROPERTY('productversion') AS VARCHAR)");
419 }
catch (PDOException $e) {
436 return parent::_quote(
$value);
fetchOne($sql, $bind=array())
fetchCol($sql, $bind=array())
lastInsertId($tableName=null, $primaryKey=null)
describeTable($tableName, $schemaName=null)
limit($sql, $count, $offset=0)
quoteIdentifier($ident, $auto=false)
query($sql, $bind=array())