From 6a80c9eb76c5828ae1584bab1019fd05eaf84984 Mon Sep 17 00:00:00 2001
From: Urban Müller
Date: Tue, 21 Apr 2020 15:15:40 +0200
Subject: support safe LIMIT

---
 it_dbi.class  | 4 ++++
 test/it_dbi.t | 5 +++++
 2 files changed, 9 insertions(+)

diff --git a/it_dbi.class b/it_dbi.class
index 8cf8d54..7c13eec 100644
--- a/it_dbi.class
+++ b/it_dbi.class
@@ -355,6 +355,10 @@ function _where($params)
 				else
 					$sep = ' OR ';
 			}
+			else if ($field == "LIMIT")
+			{
+				$stringquery .= " LIMIT " . (it::match('^[ ,\d]+$', $value) ?: it::error(['title' => "invalid LIMIT $value", 'body' => $params]) + 0);
+			}
 			else
 			{
 				$needs_where = true;
diff --git a/test/it_dbi.t b/test/it_dbi.t
index 9f43f6e..165861f 100755
--- a/test/it_dbi.t
+++ b/test/it_dbi.t
@@ -348,6 +348,11 @@ $r->update(['key4' => "val4'"]);                      is($r->_writes, 0); is($r-
 $r->update(['key4' => "val4'", 'key5' => "val5'"]);   is($r->_writes, 1); is($r->key4, "val4'"); is($r->key5, "val5'");
 $r->update(['key4' => "val4'", 'key5' => "val5'"]);   is($r->_writes, 1); is($r->key4, "val4'"); is($r->key5, "val5'");
 
+# Check LIMIT
+$count = $r->select('ID >' => 0, 'ORDER BY ID DESC', 'LIMIT' => 1);
+is($count, 1);
+is($r->ID, 6);
+
 # Check if iterator clears dynfields left over from previous record
 $r->delete(["WHERE 1"]);
 $r->replace(['ID' => 1, 'key1' => "a"]);
-- 
cgit v1.2.3