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