mirror of
https://github.com/dg/dibi.git
synced 2025-08-02 20:27:35 +02:00
applyLimit support
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -1,5 +1,3 @@
|
|||||||
limit/offset support for select?
|
1) better logging, error logging, exceptions
|
||||||
|
|
||||||
complete phpdoc
|
2) complete phpdoc
|
||||||
|
|
||||||
better logging, error logging, exceptions
|
|
@@ -176,22 +176,24 @@ class DibiMySqlDriver extends DibiDriver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/**
|
||||||
// is this really needed?
|
* @see DibiDriver::applyLimit()
|
||||||
|
*/
|
||||||
|
public function applyLimit(&$sql, $limit, $offset = 0)
|
||||||
|
{
|
||||||
|
if ($limit < 0 && $offset < 1) return;
|
||||||
|
|
||||||
|
// see http://dev.mysql.com/doc/refman/5.0/en/select.html
|
||||||
|
$sql .= ' LIMIT ' . ($limit < 0 ? '18446744073709551615' : (int) $limit)
|
||||||
|
. ($offset > 0 ? ' OFFSET ' . (int) $offset : '');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* is this really needed?
|
||||||
public function getResource()
|
public function getResource()
|
||||||
{
|
{
|
||||||
return $this->conn;
|
return $this->conn;
|
||||||
}
|
}
|
||||||
|
|
||||||
// experimental
|
|
||||||
public function applyLimit(&$sql, $offset, $limit)
|
|
||||||
{
|
|
||||||
if ($limit > 0) {
|
|
||||||
$sql .= " LIMIT " . (int) $limit . ($offset > 0 ? " OFFSET " . (int) $offset : "");
|
|
||||||
} elseif ($offset > 0) {
|
|
||||||
$sql .= " LIMIT " . $offset . ", 18446744073709551615";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
} // DibiMySqlDriver
|
} // DibiMySqlDriver
|
||||||
|
@@ -157,6 +157,19 @@ class DibiMySqliDriver extends DibiDriver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see DibiDriver::applyLimit()
|
||||||
|
*/
|
||||||
|
public function applyLimit(&$sql, $limit, $offset = 0)
|
||||||
|
{
|
||||||
|
if ($limit < 0 && $offset < 1) return;
|
||||||
|
|
||||||
|
// see http://dev.mysql.com/doc/refman/5.0/en/select.html
|
||||||
|
$sql .= ' LIMIT ' . ($limit < 0 ? '18446744073709551615' : (int) $limit)
|
||||||
|
. ($offset > 0 ? ' OFFSET ' . (int) $offset : '');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} // class DibiMySqliDriver
|
} // class DibiMySqliDriver
|
||||||
|
|
||||||
|
|
||||||
|
@@ -153,6 +153,18 @@ class DibiOdbcDriver extends DibiDriver {
|
|||||||
trigger_error('Meta is not implemented yet.', E_USER_WARNING);
|
trigger_error('Meta is not implemented yet.', E_USER_WARNING);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see DibiDriver::applyLimit()
|
||||||
|
*/
|
||||||
|
public function applyLimit(&$sql, $limit, $offset = 0)
|
||||||
|
{
|
||||||
|
// offset suppot is missing...
|
||||||
|
if ($limit >= 0)
|
||||||
|
$sql = 'SELECT TOP ' . (int) $limit . ' * FROM (' . $sql . ')';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} // class DibiOdbcDriver
|
} // class DibiOdbcDriver
|
||||||
|
|
||||||
|
|
||||||
|
@@ -148,6 +148,19 @@ class DibiPostgreDriver extends DibiDriver {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see DibiDriver::applyLimit()
|
||||||
|
*/
|
||||||
|
public function applyLimit(&$sql, $limit, $offset = 0)
|
||||||
|
{
|
||||||
|
if ($limit >= 0)
|
||||||
|
$sql .= ' LIMIT ' . (int) $limit;
|
||||||
|
|
||||||
|
if ($offset > 0)
|
||||||
|
$sql .= ' OFFSET ' . (int) $offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} // class DibiPostgreDriver
|
} // class DibiPostgreDriver
|
||||||
|
|
||||||
|
|
||||||
|
@@ -148,6 +148,15 @@ class DibiSqliteDriver extends DibiDriver {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see DibiDriver::applyLimit()
|
||||||
|
*/
|
||||||
|
public function applyLimit(&$sql, $limit, $offset = 0)
|
||||||
|
{
|
||||||
|
if ($limit < 0 && $offset < 1) return;
|
||||||
|
$sql .= ' LIMIT ' . $limit . ($offset > 0 ? ' OFFSET ' . (int) $offset : '');
|
||||||
|
}
|
||||||
|
|
||||||
} // class DibiSqliteDriver
|
} // class DibiSqliteDriver
|
||||||
|
|
||||||
|
|
||||||
|
@@ -142,7 +142,6 @@ abstract class DibiDriver
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets a information of the current database.
|
* Gets a information of the current database.
|
||||||
*
|
*
|
||||||
@@ -151,5 +150,14 @@ abstract class DibiDriver
|
|||||||
abstract public function getMetaData();
|
abstract public function getMetaData();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Experimental - injects LIMIT/OFFSET to the SQL query
|
||||||
|
* @param string &$sql The SQL query that will be modified.
|
||||||
|
* @param int $limit
|
||||||
|
* @param int $offset
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
abstract public function applyLimit(&$sql, $limit, $offset = 0);
|
||||||
|
|
||||||
|
|
||||||
} // class DibiDriver
|
} // class DibiDriver
|
||||||
|
Reference in New Issue
Block a user