--- /dev/null
+--- 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
+ {