SOURCES: postgresql-LIMIT-fix.patch (NEW) - fix LIMIT/OFFSET for n...

hawk hawk at pld-linux.org
Thu Dec 28 14:13:44 CET 2006


Author: hawk                         Date: Thu Dec 28 13:13:44 2006 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- fix LIMIT/OFFSET for null limit values, taken from PostgreSQL CVS

---- Files affected:
SOURCES:
   postgresql-LIMIT-fix.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/postgresql-LIMIT-fix.patch
diff -u /dev/null SOURCES/postgresql-LIMIT-fix.patch:1.1
--- /dev/null	Thu Dec 28 14:13:44 2006
+++ SOURCES/postgresql-LIMIT-fix.patch	Thu Dec 28 14:13:39 2006
@@ -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
+ 	{
================================================================


More information about the pld-cvs-commit mailing list