|
|
1.1 root 1: # include <ingres.h>
2: # include <access.h>
3: # include <symbol.h>
4: # include <aux.h>
5: # include <sccs.h>
6:
7: SCCSID(@(#)compare.c 8.1 12/31/84)
8:
9: icompare(ax, bx, frmt, frml)
10: char *ax, *bx, frmt, frml;
11: {
12: register ANYTYPE *a, *b;
13: register int length;
14: float f4var;
15: double f8var;
16: ANYTYPE atemp, btemp;
17:
18: length = frml & I1MASK;
19: if (frmt == CHAR)
20: return (scompare(ax, length, bx, length));
21: a = &atemp;
22: b = &btemp;
23: bmove(ax, (char *) a, length);
24: bmove(bx, (char *) b, length);
25: if (bequal((char *) a, (char *) b, length))
26: return (0);
27: switch (frmt)
28: {
29: case INT:
30: switch (length)
31: {
32: case 1:
33: return (a->i1type - b->i1type);
34: case 2:
35: return (a->i2type - b->i2type);
36: case 4:
37: return (a->i4type > b->i4type ? 1 : -1);
38: }
39: break;
40:
41: case FLOAT:
42: if (frml == 4)
43: {
44: if ( a->f4type > b->f4type )
45: return ( 1 );
46: else
47: return ( -1 );
48: }
49: else
50: {
51: if ( a->f8type > b->f8type )
52: return ( 1 );
53: else
54: return ( -1 );
55: }
56: break;
57: }
58: syserr("compare: t=%d,l=%d", frmt, frml);
59: /*NOTREACHED*/
60: }
61: /*
62: ** KCOMPARE -- key compare
63: **
64: ** compares all domains indicated by SETKEY in the tuple to the
65: ** corressponding domains in the key.
66: ** the comparison is done according to the format of the domain
67: ** as specified in the descriptor.
68: **
69: ** function values:
70: ** <0 tuple < key
71: ** =0 tuple = key
72: ** >0 tuple > key
73: */
74:
75: kcompare (dx, tuple, key)
76: DESC *dx; /*relation descriptor */
77: char tuple[MAXTUP]; /*tuple to be compared */
78: char key[MAXTUP]; /*second tuple or key */
79: {
80: register int i, tmp;
81: register DESC *d;
82:
83: d = dx;
84: for (i = 1; i <= d->reldum.relatts; i++)
85: {
86: if (d->relgiven[i])
87: {
88: if (tmp = icompare(&tuple[d->reloff[i]],
89: &key[d->reloff[i]],
90: d->relfrmt[i],
91: d->relfrml[i]))
92: {
93: return (tmp);
94: }
95: }
96: }
97: return (0);
98: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.