diff --git a/src/backend/utils/adt/not_in.c b/src/backend/utils/adt/not_in.c
index fb383046d580a0e5d75c43bd6d1b1167b11ce9fd..62a76c836928825c9f087ae723e3dfc80c43f58e 100644
--- a/src/backend/utils/adt/not_in.c
+++ b/src/backend/utils/adt/not_in.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/not_in.c,v 1.14 1999/02/13 23:19:26 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/not_in.c,v 1.15 1999/03/15 03:24:32 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -36,11 +36,10 @@ static int	my_varattno(Relation rd, char *a);
  * ----------------------------------------------------------------
  */
 bool
-int4notin(int16 not_in_arg, char *relation_and_attr)
+int4notin(int32 not_in_arg, char *relation_and_attr)
 {
 	Relation	relation_to_scan;
-	int			left_side_argument,
-				integer_value;
+	int32		integer_value;
 	HeapTuple	current_tuple;
 	HeapScanDesc scan_descriptor;
 	bool		dummy,
@@ -48,47 +47,55 @@ int4notin(int16 not_in_arg, char *relation_and_attr)
 	int			attrid;
 	char	   *relation,
 			   *attribute;
-	char		my_copy[32];
+	char		my_copy[NAMEDATALEN*2+2];
 	Datum		value;
-	NameData	relNameData;
-	ScanKeyData skeyData;
 
-	strcpy(my_copy, relation_and_attr);
+	strncpy(my_copy, relation_and_attr, sizeof(my_copy));
+	my_copy[sizeof(my_copy)-1] = '\0';
 
 	relation = (char *) strtok(my_copy, ".");
 	attribute = (char *) strtok(NULL, ".");
+	if (attribute == NULL)
+	{
+		elog(ERROR, "int4notin: must provide relationname.attributename");
+	}
 
+	/* Open the relation and get a relation descriptor */
 
-	/* fetch tuple OID */
-
-	left_side_argument = not_in_arg;
+	relation_to_scan = heap_openr(relation);
+	if (!RelationIsValid(relation_to_scan))
+	{
+		elog(ERROR, "int4notin: unknown relation %s",
+			 relation);
+	}
 
-	/* Open the relation and get a relation descriptor */
+	/* Find the column to search */
 
-	namestrcpy(&relNameData, relation);
-	relation_to_scan = heap_openr(relNameData.data);
 	attrid = my_varattno(relation_to_scan, attribute);
+	if (attrid < 0)
+	{
+		elog(ERROR, "int4notin: unknown attribute %s for relation %s",
+			 attribute, relation);
+	}
 
-	/* the last argument should be a ScanKey, not an integer! - jolly */
-	/* it looks like the arguments are out of order, too */
-	/* but skeyData is never initialized! does this work?? - ay 2/95 */
 	scan_descriptor = heap_beginscan(relation_to_scan, false, SnapshotNow,
-									 0, &skeyData);
+									 0, (ScanKey) NULL);
 
 	retval = true;
 
 	/* do a scan of the relation, and do the check */
-	while (HeapTupleIsValid(current_tuple = heap_getnext(scan_descriptor, 0)) &&
-		   retval)
+	while (HeapTupleIsValid(current_tuple = heap_getnext(scan_descriptor, 0)))
 	{
 		value = heap_getattr(current_tuple,
 							 (AttrNumber) attrid,
 							 RelationGetDescr(relation_to_scan),
 							 &dummy);
-
-		integer_value = DatumGetInt16(value);
-		if (left_side_argument == integer_value)
+		integer_value = DatumGetInt32(value);
+		if (not_in_arg == integer_value)
+		{
 			retval = false;
+			break;				/* can stop scanning now */
+		}
 	}
 
 	/* close the relation */
diff --git a/src/include/utils/builtins.h b/src/include/utils/builtins.h
index 9522169dcdcd53c57dbeba02e272f837232dd45b..47dbef4c67b8f7099aa88eff07f205b517e28060 100644
--- a/src/include/utils/builtins.h
+++ b/src/include/utils/builtins.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: builtins.h,v 1.76 1999/03/14 16:44:01 momjian Exp $
+ * $Id: builtins.h,v 1.77 1999/03/15 03:24:31 tgl Exp $
  *
  * NOTES
  *	  This should normally only be included by fmgr.h.
@@ -331,7 +331,7 @@ extern int32 userfntest(int i);
 #define NonNullValue(v,b) nonnullvalue(v,b)
 
 /* not_in.c */
-extern bool int4notin(int16 not_in_arg, char *relation_and_attr);
+extern bool int4notin(int32 not_in_arg, char *relation_and_attr);
 extern bool oidnotin(Oid the_oid, char *compare);
 
 /* oid.c */