summaryrefslogtreecommitdiff
path: root/sql/sql_limit.h
diff options
context:
space:
mode:
authorOleksandr Byelkin <sanja@mariadb.com>2019-10-11 12:26:15 +0200
committerOleksandr Byelkin <sanja@mariadb.com>2019-10-13 09:40:41 +0200
commit1ae02f0e0d28bfca037ec35c4fda5b01c853b09f (patch)
tree13af954bcd05c91a9a937d675c28f2e16e9ef9af /sql/sql_limit.h
parenteb0804ef5e7eeb059bb193c3c6787e8a4188d34d (diff)
downloadmariadb-git-1ae02f0e0d28bfca037ec35c4fda5b01c853b09f.tar.gz
MDEV-18553: MDEV-16327 pre-requisits part 2: uniform of LIMIT/OFFSET handling
Now both offset and limit are stored and do not chenged during execution (offset is decreased during processing in versions before 10.5). (Big part of this changes made by Monty)
Diffstat (limited to 'sql/sql_limit.h')
-rw-r--r--sql/sql_limit.h28
1 files changed, 7 insertions, 21 deletions
diff --git a/sql/sql_limit.h b/sql/sql_limit.h
index 8e0c920dffc..93a9aae85af 100644
--- a/sql/sql_limit.h
+++ b/sql/sql_limit.h
@@ -22,51 +22,38 @@
class Select_limit_counters
{
- ha_rows offset_limit_cnt_start,
- select_limit_cnt, offset_limit_cnt;
+ ha_rows select_limit_cnt, offset_limit_cnt;
public:
Select_limit_counters():
- offset_limit_cnt_start(0),
select_limit_cnt(0), offset_limit_cnt(0)
{};
void set_limit(ha_rows limit, ha_rows offset)
{
- offset_limit_cnt_start= offset;
+ offset_limit_cnt= offset;
select_limit_cnt= limit;
- if (select_limit_cnt + offset_limit_cnt_start >=
+ if (select_limit_cnt + offset_limit_cnt >=
select_limit_cnt)
- select_limit_cnt+= offset_limit_cnt_start;
+ select_limit_cnt+= offset_limit_cnt;
else
select_limit_cnt= HA_POS_ERROR;
- reset();
}
void set_single_row()
{
- offset_limit_cnt= offset_limit_cnt_start= 0;
+ offset_limit_cnt= 0;
select_limit_cnt= 1;
}
- void reset()
- {
- offset_limit_cnt= offset_limit_cnt_start;
- }
-
bool is_unlimited()
{ return select_limit_cnt == HA_POS_ERROR; }
void set_unlimited()
{ select_limit_cnt= HA_POS_ERROR; offset_limit_cnt= 0; }
- bool check_and_move_offset()
+ bool check_offset(ha_rows sent)
{
- if (offset_limit_cnt)
- {
- offset_limit_cnt--;
- return TRUE;
- }
- return FALSE;
+ return sent < offset_limit_cnt;
}
void remove_offset() { offset_limit_cnt= 0; }
@@ -76,5 +63,4 @@ class Select_limit_counters
{ return offset_limit_cnt; }
};
-
#endif // INCLUDES_MARIADB_SQL_LIMIT_H