Skip to content
Snippets Groups Projects
Commit 4a9c2390 authored by Tom Lane's avatar Tom Lane
Browse files

Fix brain death in !!= operator ... it's still pretty bogus

but at least now it does what it's supposed to do ...
parent 265c283e
No related branches found
No related tags found
No related merge requests found
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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); ...@@ -36,11 +36,10 @@ static int my_varattno(Relation rd, char *a);
* ---------------------------------------------------------------- * ----------------------------------------------------------------
*/ */
bool bool
int4notin(int16 not_in_arg, char *relation_and_attr) int4notin(int32 not_in_arg, char *relation_and_attr)
{ {
Relation relation_to_scan; Relation relation_to_scan;
int left_side_argument, int32 integer_value;
integer_value;
HeapTuple current_tuple; HeapTuple current_tuple;
HeapScanDesc scan_descriptor; HeapScanDesc scan_descriptor;
bool dummy, bool dummy,
...@@ -48,47 +47,55 @@ int4notin(int16 not_in_arg, char *relation_and_attr) ...@@ -48,47 +47,55 @@ int4notin(int16 not_in_arg, char *relation_and_attr)
int attrid; int attrid;
char *relation, char *relation,
*attribute; *attribute;
char my_copy[32]; char my_copy[NAMEDATALEN*2+2];
Datum value; 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, "."); relation = (char *) strtok(my_copy, ".");
attribute = (char *) strtok(NULL, "."); 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 */ relation_to_scan = heap_openr(relation);
if (!RelationIsValid(relation_to_scan))
left_side_argument = not_in_arg; {
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); 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, scan_descriptor = heap_beginscan(relation_to_scan, false, SnapshotNow,
0, &skeyData); 0, (ScanKey) NULL);
retval = true; retval = true;
/* do a scan of the relation, and do the check */ /* do a scan of the relation, and do the check */
while (HeapTupleIsValid(current_tuple = heap_getnext(scan_descriptor, 0)) && while (HeapTupleIsValid(current_tuple = heap_getnext(scan_descriptor, 0)))
retval)
{ {
value = heap_getattr(current_tuple, value = heap_getattr(current_tuple,
(AttrNumber) attrid, (AttrNumber) attrid,
RelationGetDescr(relation_to_scan), RelationGetDescr(relation_to_scan),
&dummy); &dummy);
integer_value = DatumGetInt32(value);
integer_value = DatumGetInt16(value); if (not_in_arg == integer_value)
if (left_side_argument == integer_value) {
retval = false; retval = false;
break; /* can stop scanning now */
}
} }
/* close the relation */ /* close the relation */
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * 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 * NOTES
* This should normally only be included by fmgr.h. * This should normally only be included by fmgr.h.
...@@ -331,7 +331,7 @@ extern int32 userfntest(int i); ...@@ -331,7 +331,7 @@ extern int32 userfntest(int i);
#define NonNullValue(v,b) nonnullvalue(v,b) #define NonNullValue(v,b) nonnullvalue(v,b)
/* not_in.c */ /* 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); extern bool oidnotin(Oid the_oid, char *compare);
/* oid.c */ /* oid.c */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment