]> git.pld-linux.org Git - packages/postgresql.git/commitdiff
- fix LIMIT/OFFSET for null limit values, taken from PostgreSQL CVS
authorhawk <hawk@pld-linux.org>
Thu, 28 Dec 2006 13:13:39 +0000 (13:13 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    postgresql-LIMIT-fix.patch -> 1.1

postgresql-LIMIT-fix.patch [new file with mode: 0644]

diff --git a/postgresql-LIMIT-fix.patch b/postgresql-LIMIT-fix.patch
new file mode 100644 (file)
index 0000000..5cbe2eb
--- /dev/null
@@ -0,0 +1,75 @@
+--- postgresql-8.2.0/src/backend/executor/nodeLimit.c  2006-07-26 21:31:50.000000000 +0200
++++ postgresql-8.2.0/src/backend/executor/nodeLimit.c  2006-12-03 22:40:13.000000000 +0100
+@@ -8,7 +8,7 @@
+  *
+  *
+  * IDENTIFICATION
+- *      $PostgreSQL: pgsql/src/backend/executor/nodeLimit.c,v 1.27 2006/07/26 19:31:50 tgl Exp $
++ *      $PostgreSQL: pgsql/src/backend/executor/nodeLimit.c,v 1.27.2.1 2006/12/03 21:40:13 tgl Exp $
+  *
+  *-------------------------------------------------------------------------
+  */
+@@ -225,20 +225,24 @@
+ recompute_limits(LimitState *node)
+ {
+       ExprContext *econtext = node->ps.ps_ExprContext;
++      Datum           val;
+       bool            isNull;
+       if (node->limitOffset)
+       {
+-              node->offset =
+-                      DatumGetInt64(ExecEvalExprSwitchContext(node->limitOffset,
+-                                                                                                      econtext,
+-                                                                                                      &isNull,
+-                                                                                                      NULL));
++              val = ExecEvalExprSwitchContext(node->limitOffset,
++                                                                              econtext,
++                                                                              &isNull,
++                                                                              NULL);
+               /* Interpret NULL offset as no offset */
+               if (isNull)
+                       node->offset = 0;
+-              else if (node->offset < 0)
+-                      node->offset = 0;
++              else
++              {
++                      node->offset = DatumGetInt64(val);
++                      if (node->offset < 0)
++                              node->offset = 0;
++              }
+       }
+       else
+       {
+@@ -248,17 +252,23 @@
+       if (node->limitCount)
+       {
+-              node->noCount = false;
+-              node->count =
+-                      DatumGetInt64(ExecEvalExprSwitchContext(node->limitCount,
+-                                                                                                      econtext,
+-                                                                                                      &isNull,
+-                                                                                                      NULL));
++              val = ExecEvalExprSwitchContext(node->limitCount,
++                                                                              econtext,
++                                                                              &isNull,
++                                                                              NULL);
+               /* Interpret NULL count as no count (LIMIT ALL) */
+               if (isNull)
+-                      node->noCount = true;
+-              else if (node->count < 0)
++              {
+                       node->count = 0;
++                      node->noCount = true;
++              }
++              else
++              {
++                      node->count = DatumGetInt64(val);
++                      if (node->count < 0)
++                              node->count = 0;
++                      node->noCount = false;
++              }
+       }
+       else
+       {
This page took 0.085933 seconds and 4 git commands to generate.