diff options
-rw-r--r-- | it_dbi.class | 21 | ||||
-rwxr-xr-x | test/it_dbi.t | 1 |
2 files changed, 13 insertions, 9 deletions
diff --git a/it_dbi.class b/it_dbi.class index 7c13eec..b06a3ea 100644 --- a/it_dbi.class +++ b/it_dbi.class @@ -357,7 +357,8 @@ function _where($params) } else if ($field == "LIMIT") { - $stringquery .= " LIMIT " . (it::match('^[ ,\d]+$', $value) ?: it::error(['title' => "invalid LIMIT $value", 'body' => $params]) + 0); + if ($value !== false) # only false no null; uninitialized values should not unintentionally omit LIMIT + $stringquery .= " LIMIT " . (it::match('^[ ,\d]+$', $value) ?: it::error(['title' => "invalid LIMIT $value", 'body' => $params]) + 0); } else { @@ -617,14 +618,16 @@ function read($id=null) /** * Select a set of records from table and fetch the first one - * @param $query One or more optional arrays of (field => value) or sqlstring pairs. Defaults to null (select all records) - * Fields will be joined by AND - * Fields can contain a compare operator: 'name LIKE' => "j%" or 'amount >' => 100 - * Fields can start with - to prevent quoting of right side: '-modified' => "CURDATE()" - * $query can contain magic field 'SELECT' for things like 'COUNT(*)' or 'DISTINCT foo', defaults to '*' - * $query can contain magic field 'FROM' or 'JOIN' for things like 'tableA LEFT JOIN tableB ON a=b', defaults to table name - * $query can contain 'CALC_FOUND_ROWS', if true member var _found_rows contains number of matching rows before LIMIT - * $query can contain 'NOFETCH', if true the first row is not prefetched (e.g. when directly using _result) + * @param $query Vararg. Arrays of (field => value) pairs or plain string query parts. Default: Select all + * Fields will be joined by AND + * Fields can contain a compare operator: 'name LIKE' => "j%" or 'amount >' => 100 + * Fields can start with - to prevent quoting of right side: '-modified' => "CURDATE()" + * @param $query['SELECT'] expression to be returned, e.g. 'SELECT' => 'DISTINCT foo'. defaults to '*' + * @param $query['FROM'] table names to use for joins, e.g. 'FROM' => 'tableA LEFT JOIN tableB ON a=b' + * @param $query['JOIN'] like 'FROM' + * @param $query['CALC_FOUND_ROWS'] if true, if true member var _found_rows contains number of matching rows before LIMIT + * @param $query['LIMIT'] max number of rows to return; false for no limit + * @param $query['NOFETCH'] if true the first row is not prefetched (e.g. when directly using _result) * @return Number of matching rows, use iterate() to fetch the next record * @see iterate() * @see _where() diff --git a/test/it_dbi.t b/test/it_dbi.t index a5d9f92..750841a 100755 --- a/test/it_dbi.t +++ b/test/it_dbi.t @@ -355,6 +355,7 @@ is($r->ID, 6, "Simple LIMIT: id"); $count = $r->select(['ID >' => 0, 'ORDER BY ID DESC', 'LIMIT' => "1, 2"]); is($count, 2, "LIMIT with offset: count"); is($r->ID, 5, "LIMIT with offset: id"); +is($r->select(['ID >' => 0, 'ORDER BY ID DESC', 'LIMIT' => false]), 5, "no limit"); # Check if iterator clears dynfields left over from previous record $r->delete(["WHERE 1"]); |