1 | /* |
2 | * This Source Code Form is subject to the terms of the Mozilla Public |
3 | * License, v. 2.0. If a copy of the MPL was not distributed with this |
4 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. |
5 | * |
6 | * Copyright 1997 - July 2008 CWI, August 2008 - 2019 MonetDB B.V. |
7 | */ |
8 | |
9 | #include "monetdb_config.h" |
10 | #include "mal.h" |
11 | #include "mal_exception.h" |
12 | #include "group.h" |
13 | #include "algebra.h" |
14 | |
15 | str |
16 | GRPsubgroup5(bat *ngid, bat *next, bat *nhis, const bat *bid, const bat *sid, const bat *gid, const bat *eid, const bat *hid) |
17 | { |
18 | BAT *b, *s, *g, *e, *h, *gn, *en, *hn; |
19 | gdk_return r; |
20 | |
21 | b = BATdescriptor(*bid); |
22 | s = sid ? BATdescriptor(*sid) : NULL; |
23 | g = gid ? BATdescriptor(*gid) : NULL; |
24 | e = eid ? BATdescriptor(*eid) : NULL; |
25 | h = hid ? BATdescriptor(*hid) : NULL; |
26 | if (b == NULL || |
27 | (sid != NULL && s == NULL) || |
28 | (gid != NULL && g == NULL) || |
29 | (eid != NULL && e == NULL) || |
30 | (hid != NULL && h == NULL)) { |
31 | if (b) |
32 | BBPunfix(b->batCacheid); |
33 | if (s) |
34 | BBPunfix(s->batCacheid); |
35 | if (g) |
36 | BBPunfix(g->batCacheid); |
37 | if (e) |
38 | BBPunfix(e->batCacheid); |
39 | if (h) |
40 | BBPunfix(h->batCacheid); |
41 | throw(MAL, gid ? "group.subgroup" : "group.group" , SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); |
42 | } |
43 | if ((r = BATgroup(&gn, next ? &en : NULL, nhis ? &hn : NULL, b, s, g, e, h)) == GDK_SUCCEED) { |
44 | *ngid = gn->batCacheid; |
45 | BBPkeepref(*ngid); |
46 | if (next) { |
47 | *next = en->batCacheid; |
48 | BBPkeepref(*next); |
49 | } |
50 | if (nhis){ |
51 | *nhis = hn->batCacheid; |
52 | BBPkeepref(*nhis); |
53 | } |
54 | } |
55 | BBPunfix(b->batCacheid); |
56 | if (s) |
57 | BBPunfix(s->batCacheid); |
58 | if (g) |
59 | BBPunfix(g->batCacheid); |
60 | if (e) |
61 | BBPunfix(e->batCacheid); |
62 | if (h) |
63 | BBPunfix(h->batCacheid); |
64 | return r == GDK_SUCCEED ? MAL_SUCCEED : createException(MAL, gid ? "group.subgroup" : "group.group" , GDK_EXCEPTION); |
65 | } |
66 | |
67 | str |
68 | GRPsubgroup9(bat *ngid, bat *next, const bat *bid, const bat *sid, const bat *gid, const bat *eid, const bat *hid) |
69 | { |
70 | return GRPsubgroup5(ngid, next, NULL, bid, sid, gid, eid, hid); |
71 | } |
72 | |
73 | str |
74 | GRPsubgroup8(bat *ngid, bat *next, const bat *bid, const bat *gid, const bat *eid, const bat *hid) |
75 | { |
76 | return GRPsubgroup5(ngid, next, NULL, bid, NULL, gid, eid, hid); |
77 | } |
78 | |
79 | str |
80 | GRPsubgroup7(bat *ngid, bat *next, const bat *bid, const bat *sid, const bat *gid) |
81 | { |
82 | return GRPsubgroup5(ngid, next, NULL, bid, sid, gid, NULL, NULL); |
83 | } |
84 | |
85 | str |
86 | GRPsubgroup6(bat *ngid, bat *next, const bat *bid, const bat *gid) |
87 | { |
88 | return GRPsubgroup5(ngid, next, NULL, bid, NULL, gid, NULL, NULL); |
89 | } |
90 | |
91 | str |
92 | GRPsubgroup4(bat *ngid, bat *next, bat *nhis, const bat *bid, const bat *gid, const bat *eid, const bat *hid) |
93 | { |
94 | return GRPsubgroup5(ngid, next, nhis, bid, NULL, gid, eid, hid); |
95 | } |
96 | |
97 | str |
98 | GRPsubgroup3(bat *ngid, bat *next, bat *nhis, const bat *bid, const bat *sid, const bat *gid) |
99 | { |
100 | return GRPsubgroup5(ngid, next, nhis, bid, sid, gid, NULL, NULL); |
101 | } |
102 | |
103 | str |
104 | GRPsubgroup2(bat *ngid, bat *next, bat *nhis, const bat *bid, const bat *gid) |
105 | { |
106 | return GRPsubgroup5(ngid, next, nhis, bid, NULL, gid, NULL, NULL); |
107 | } |
108 | |
109 | str |
110 | GRPgroup4(bat *ngid, bat *next, const bat *bid, const bat *sid) |
111 | { |
112 | return GRPsubgroup5(ngid, next, NULL, bid, sid, NULL, NULL, NULL); |
113 | } |
114 | |
115 | str |
116 | GRPgroup3(bat *ngid, bat *next, const bat *bid) |
117 | { |
118 | return GRPsubgroup5(ngid, next, NULL, bid, NULL, NULL, NULL, NULL); |
119 | } |
120 | |
121 | str |
122 | GRPgroup2(bat *ngid, bat *next, bat *nhis, const bat *bid, const bat *sid) |
123 | { |
124 | return GRPsubgroup5(ngid, next, nhis, bid, sid, NULL, NULL, NULL); |
125 | } |
126 | |
127 | str |
128 | GRPgroup1(bat *ngid, bat *next, bat *nhis, const bat *bid) |
129 | { |
130 | return GRPsubgroup5(ngid, next, nhis, bid, NULL, NULL, NULL, NULL); |
131 | } |
132 | |
133 | str |
134 | GRPgroup11(bat *ngid, const bat *bid) |
135 | { |
136 | return GRPsubgroup5(ngid, NULL, NULL, bid, NULL, NULL, NULL, NULL); |
137 | } |
138 | |
139 | str |
140 | GRPgroup21(bat *ngid, const bat *bid, const bat *sid) |
141 | { |
142 | return GRPsubgroup5(ngid, NULL, NULL, bid, sid, NULL, NULL, NULL); |
143 | } |
144 | |
145 | str |
146 | GRPsubgroup51(bat *ngid, const bat *bid, const bat *sid, const bat *gid, const bat *eid, const bat *hid) |
147 | { |
148 | return GRPsubgroup5(ngid, NULL, NULL, bid, sid, gid, eid, hid); |
149 | } |
150 | |
151 | str |
152 | GRPsubgroup41(bat *ngid, const bat *bid, const bat *gid, const bat *eid, const bat *hid) |
153 | { |
154 | return GRPsubgroup5(ngid, NULL, NULL, bid, NULL, gid, eid, hid); |
155 | } |
156 | |
157 | str |
158 | GRPsubgroup31(bat *ngid, const bat *bid, const bat *sid, const bat *gid) |
159 | { |
160 | return GRPsubgroup5(ngid, NULL, NULL, bid, sid, gid, NULL, NULL); |
161 | } |
162 | |
163 | str |
164 | GRPsubgroup21(bat *ngid, const bat *bid, const bat *gid) |
165 | { |
166 | return GRPsubgroup5(ngid, NULL, NULL, bid, NULL, gid, NULL, NULL); |
167 | } |
168 | |