Merge lp:~vjsamuel/drizzle/convert-rollup-to-class into lp:drizzle/7.0
- convert-rollup-to-class
- Merge into 7.0
Proposed by
Vijay Samuel
Status: | Merged |
---|---|
Approved by: | Brian Aker |
Approved revision: | 2084 |
Merged at revision: | 2096 |
Proposed branch: | lp:~vjsamuel/drizzle/convert-rollup-to-class |
Merge into: | lp:drizzle/7.0 |
Diff against target: |
286 lines (+93/-30) 4 files modified
drizzled/join.cc (+24/-23) drizzled/join.h (+3/-3) drizzled/sql_select.cc (+2/-2) drizzled/sql_select.h (+64/-2) |
To merge this branch: | bzr merge lp:~vjsamuel/drizzle/convert-rollup-to-class |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Drizzle Developers | Pending | ||
Review via email: mp+46450@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'drizzled/join.cc' | |||
2 | --- drizzled/join.cc 2011-01-08 10:35:13 +0000 | |||
3 | +++ drizzled/join.cc 2011-01-17 09:18:58 +0000 | |||
4 | @@ -728,7 +728,7 @@ | |||
5 | 728 | } | 728 | } |
6 | 729 | if (group_list || tmp_table_param.sum_func_count) | 729 | if (group_list || tmp_table_param.sum_func_count) |
7 | 730 | { | 730 | { |
9 | 731 | if (! hidden_group_fields && rollup.state == ROLLUP::STATE_NONE) | 731 | if (! hidden_group_fields && rollup.getState() == Rollup::STATE_NONE) |
10 | 732 | select_distinct=0; | 732 | select_distinct=0; |
11 | 733 | } | 733 | } |
12 | 734 | else if (select_distinct && tables - const_tables == 1) | 734 | else if (select_distinct && tables - const_tables == 1) |
13 | @@ -792,7 +792,7 @@ | |||
14 | 792 | { | 792 | { |
15 | 793 | Order *old_group_list; | 793 | Order *old_group_list; |
16 | 794 | group_list= remove_constants(this, (old_group_list= group_list), conds, | 794 | group_list= remove_constants(this, (old_group_list= group_list), conds, |
18 | 795 | rollup.state == ROLLUP::STATE_NONE, | 795 | rollup.getState() == Rollup::STATE_NONE, |
19 | 796 | &simple_group); | 796 | &simple_group); |
20 | 797 | if (session->is_error()) | 797 | if (session->is_error()) |
21 | 798 | { | 798 | { |
22 | @@ -1985,7 +1985,7 @@ | |||
23 | 1985 | If we are using rollup, we need a copy of the summary functions for | 1985 | If we are using rollup, we need a copy of the summary functions for |
24 | 1986 | each level | 1986 | each level |
25 | 1987 | */ | 1987 | */ |
27 | 1988 | if (rollup.state != ROLLUP::STATE_NONE) | 1988 | if (rollup.getState() != Rollup::STATE_NONE) |
28 | 1989 | func_count*= (send_group_parts+1); | 1989 | func_count*= (send_group_parts+1); |
29 | 1990 | 1990 | ||
30 | 1991 | group_parts= send_group_parts; | 1991 | group_parts= send_group_parts; |
31 | @@ -2048,18 +2048,18 @@ | |||
32 | 2048 | ((Item_sum *)item)->depended_from() == select_lex)) | 2048 | ((Item_sum *)item)->depended_from() == select_lex)) |
33 | 2049 | *func++= (Item_sum*) item; | 2049 | *func++= (Item_sum*) item; |
34 | 2050 | } | 2050 | } |
36 | 2051 | if (before_group_by && rollup.state == ROLLUP::STATE_INITED) | 2051 | if (before_group_by && rollup.getState() == Rollup::STATE_INITED) |
37 | 2052 | { | 2052 | { |
39 | 2053 | rollup.state= ROLLUP::STATE_READY; | 2053 | rollup.setState(Rollup::STATE_READY); |
40 | 2054 | if (rollup_make_fields(field_list, send_fields, &func)) | 2054 | if (rollup_make_fields(field_list, send_fields, &func)) |
41 | 2055 | return true; // Should never happen | 2055 | return true; // Should never happen |
42 | 2056 | } | 2056 | } |
44 | 2057 | else if (rollup.state == ROLLUP::STATE_NONE) | 2057 | else if (rollup.getState() == Rollup::STATE_NONE) |
45 | 2058 | { | 2058 | { |
46 | 2059 | for (uint32_t i=0 ; i <= send_group_parts ;i++) | 2059 | for (uint32_t i=0 ; i <= send_group_parts ;i++) |
47 | 2060 | sum_funcs_end[i]= func; | 2060 | sum_funcs_end[i]= func; |
48 | 2061 | } | 2061 | } |
50 | 2062 | else if (rollup.state == ROLLUP::STATE_READY) | 2062 | else if (rollup.getState() == Rollup::STATE_READY) |
51 | 2063 | return(false); // Don't put end marker | 2063 | return(false); // Don't put end marker |
52 | 2064 | *func=0; // End marker | 2064 | *func=0; // End marker |
53 | 2065 | return(false); | 2065 | return(false); |
54 | @@ -2071,7 +2071,7 @@ | |||
55 | 2071 | Item **ref_array; | 2071 | Item **ref_array; |
56 | 2072 | 2072 | ||
57 | 2073 | tmp_table_param.quick_group= 0; // Can't create groups in tmp table | 2073 | tmp_table_param.quick_group= 0; // Can't create groups in tmp table |
59 | 2074 | rollup.state= ROLLUP::STATE_INITED; | 2074 | rollup.setState(Rollup::STATE_INITED); |
60 | 2075 | 2075 | ||
61 | 2076 | /* | 2076 | /* |
62 | 2077 | Create pointers to the different sum function groups | 2077 | Create pointers to the different sum function groups |
63 | @@ -2079,18 +2079,19 @@ | |||
64 | 2079 | */ | 2079 | */ |
65 | 2080 | tmp_table_param.group_parts= send_group_parts; | 2080 | tmp_table_param.group_parts= send_group_parts; |
66 | 2081 | 2081 | ||
68 | 2082 | if (!(rollup.null_items= (Item_null_result**) session->alloc((sizeof(Item*) + | 2082 | rollup.setNullItems((Item_null_result**) session->alloc((sizeof(Item*) + |
69 | 2083 | sizeof(Item**) + | 2083 | sizeof(Item**) + |
70 | 2084 | sizeof(List<Item>) + | 2084 | sizeof(List<Item>) + |
71 | 2085 | ref_pointer_array_size) | 2085 | ref_pointer_array_size) |
73 | 2086 | * send_group_parts ))) | 2086 | * send_group_parts )); |
74 | 2087 | if (! rollup.getNullItems()) | ||
75 | 2087 | { | 2088 | { |
76 | 2088 | return 1; | 2089 | return 1; |
77 | 2089 | } | 2090 | } |
78 | 2090 | 2091 | ||
82 | 2091 | rollup.fields= (List<Item>*) (rollup.null_items + send_group_parts); | 2092 | rollup.setFields((List<Item>*) (rollup.getNullItems() + send_group_parts)); |
83 | 2092 | rollup.ref_pointer_arrays= (Item***) (rollup.fields + send_group_parts); | 2093 | rollup.setRefPointerArrays((Item***) (rollup.getFields() + send_group_parts)); |
84 | 2093 | ref_array= (Item**) (rollup.ref_pointer_arrays+send_group_parts); | 2094 | ref_array= (Item**) (rollup.getRefPointerArrays()+send_group_parts); |
85 | 2094 | 2095 | ||
86 | 2095 | /* | 2096 | /* |
87 | 2096 | Prepare space for field list for the different levels | 2097 | Prepare space for field list for the different levels |
88 | @@ -2098,10 +2099,10 @@ | |||
89 | 2098 | */ | 2099 | */ |
90 | 2099 | for (uint32_t i= 0 ; i < send_group_parts ; i++) | 2100 | for (uint32_t i= 0 ; i < send_group_parts ; i++) |
91 | 2100 | { | 2101 | { |
94 | 2101 | rollup.null_items[i]= new (session->mem_root) Item_null_result(); | 2102 | rollup.getNullItems()[i]= new (session->mem_root) Item_null_result(); |
95 | 2102 | List<Item> *rollup_fields= &rollup.fields[i]; | 2103 | List<Item> *rollup_fields= &rollup.getFields()[i]; |
96 | 2103 | rollup_fields->empty(); | 2104 | rollup_fields->empty(); |
98 | 2104 | rollup.ref_pointer_arrays[i]= ref_array; | 2105 | rollup.getRefPointerArrays()[i]= ref_array; |
99 | 2105 | ref_array+= all_fields.elements; | 2106 | ref_array+= all_fields.elements; |
100 | 2106 | } | 2107 | } |
101 | 2107 | 2108 | ||
102 | @@ -2109,7 +2110,7 @@ | |||
103 | 2109 | { | 2110 | { |
104 | 2110 | for (uint32_t j= 0 ; j < fields_list.elements ; j++) | 2111 | for (uint32_t j= 0 ; j < fields_list.elements ; j++) |
105 | 2111 | { | 2112 | { |
107 | 2112 | rollup.fields[i].push_back(rollup.null_items[i]); | 2113 | rollup.getFields()[i].push_back(rollup.getNullItems()[i]); |
108 | 2113 | } | 2114 | } |
109 | 2114 | } | 2115 | } |
110 | 2115 | 2116 | ||
111 | @@ -2219,8 +2220,8 @@ | |||
112 | 2219 | uint32_t pos= send_group_parts - level -1; | 2220 | uint32_t pos= send_group_parts - level -1; |
113 | 2220 | bool real_fields= 0; | 2221 | bool real_fields= 0; |
114 | 2221 | Item *item; | 2222 | Item *item; |
117 | 2222 | List_iterator<Item> new_it(rollup.fields[pos]); | 2223 | List_iterator<Item> new_it(rollup.getFields()[pos]); |
118 | 2223 | Item **ref_array_start= rollup.ref_pointer_arrays[pos]; | 2224 | Item **ref_array_start= rollup.getRefPointerArrays()[pos]; |
119 | 2224 | Order *start_group; | 2225 | Order *start_group; |
120 | 2225 | 2226 | ||
121 | 2226 | /* Point to first hidden field */ | 2227 | /* Point to first hidden field */ |
122 | @@ -2321,11 +2322,11 @@ | |||
123 | 2321 | for (uint32_t i= send_group_parts ; i-- > idx ; ) | 2322 | for (uint32_t i= send_group_parts ; i-- > idx ; ) |
124 | 2322 | { | 2323 | { |
125 | 2323 | /* Get reference pointers to sum functions in place */ | 2324 | /* Get reference pointers to sum functions in place */ |
127 | 2324 | memcpy(ref_pointer_array, rollup.ref_pointer_arrays[i], ref_pointer_array_size); | 2325 | memcpy(ref_pointer_array, rollup.getRefPointerArrays()[i], ref_pointer_array_size); |
128 | 2325 | 2326 | ||
129 | 2326 | if ((!having || having->val_int())) | 2327 | if ((!having || having->val_int())) |
130 | 2327 | { | 2328 | { |
132 | 2328 | if (send_records < unit->select_limit_cnt && do_send_rows && result->send_data(rollup.fields[i])) | 2329 | if (send_records < unit->select_limit_cnt && do_send_rows && result->send_data(rollup.getFields()[i])) |
133 | 2329 | { | 2330 | { |
134 | 2330 | return 1; | 2331 | return 1; |
135 | 2331 | } | 2332 | } |
136 | @@ -2362,13 +2363,13 @@ | |||
137 | 2362 | for (uint32_t i= send_group_parts ; i-- > idx ; ) | 2363 | for (uint32_t i= send_group_parts ; i-- > idx ; ) |
138 | 2363 | { | 2364 | { |
139 | 2364 | /* Get reference pointers to sum functions in place */ | 2365 | /* Get reference pointers to sum functions in place */ |
141 | 2365 | memcpy(ref_pointer_array, rollup.ref_pointer_arrays[i], | 2366 | memcpy(ref_pointer_array, rollup.getRefPointerArrays()[i], |
142 | 2366 | ref_pointer_array_size); | 2367 | ref_pointer_array_size); |
143 | 2367 | if ((!having || having->val_int())) | 2368 | if ((!having || having->val_int())) |
144 | 2368 | { | 2369 | { |
145 | 2369 | int write_error; | 2370 | int write_error; |
146 | 2370 | Item *item; | 2371 | Item *item; |
148 | 2371 | List_iterator_fast<Item> it(rollup.fields[i]); | 2372 | List_iterator_fast<Item> it(rollup.getFields()[i]); |
149 | 2372 | while ((item= it++)) | 2373 | while ((item= it++)) |
150 | 2373 | { | 2374 | { |
151 | 2374 | if (item->type() == Item::NULL_ITEM && item->is_result_field()) | 2375 | if (item->type() == Item::NULL_ITEM && item->is_result_field()) |
152 | 2375 | 2376 | ||
153 | === modified file 'drizzled/join.h' | |||
154 | --- drizzled/join.h 2010-12-24 07:15:43 +0000 | |||
155 | +++ drizzled/join.h 2011-01-17 09:18:58 +0000 | |||
156 | @@ -180,7 +180,7 @@ | |||
157 | 180 | DrizzleLock *lock; | 180 | DrizzleLock *lock; |
158 | 181 | 181 | ||
159 | 182 | Join *tmp_join; /**< copy of this Join to be used with temporary tables */ | 182 | Join *tmp_join; /**< copy of this Join to be used with temporary tables */ |
161 | 183 | ROLLUP rollup; /**< Used with rollup */ | 183 | Rollup rollup; /**< Used with rollup */ |
162 | 184 | DYNAMIC_ARRAY keyuse; | 184 | DYNAMIC_ARRAY keyuse; |
163 | 185 | Item::cond_result cond_value; | 185 | Item::cond_result cond_value; |
164 | 186 | Item::cond_result having_value; | 186 | Item::cond_result having_value; |
165 | @@ -306,7 +306,7 @@ | |||
166 | 306 | memset(&keyuse, 0, sizeof(keyuse)); | 306 | memset(&keyuse, 0, sizeof(keyuse)); |
167 | 307 | tmp_table_param.init(); | 307 | tmp_table_param.init(); |
168 | 308 | tmp_table_param.end_write_records= HA_POS_ERROR; | 308 | tmp_table_param.end_write_records= HA_POS_ERROR; |
170 | 309 | rollup.state= ROLLUP::STATE_NONE; | 309 | rollup.setState(Rollup::STATE_NONE); |
171 | 310 | } | 310 | } |
172 | 311 | 311 | ||
173 | 312 | /** | 312 | /** |
174 | @@ -395,7 +395,7 @@ | |||
175 | 395 | memset(&keyuse, 0, sizeof(keyuse)); | 395 | memset(&keyuse, 0, sizeof(keyuse)); |
176 | 396 | tmp_table_param.init(); | 396 | tmp_table_param.init(); |
177 | 397 | tmp_table_param.end_write_records= HA_POS_ERROR; | 397 | tmp_table_param.end_write_records= HA_POS_ERROR; |
179 | 398 | rollup.state= ROLLUP::STATE_NONE; | 398 | rollup.setState(Rollup::STATE_NONE); |
180 | 399 | } | 399 | } |
181 | 400 | 400 | ||
182 | 401 | int prepare(Item ***rref_pointer_array, | 401 | int prepare(Item ***rref_pointer_array, |
183 | 402 | 402 | ||
184 | === modified file 'drizzled/sql_select.cc' | |||
185 | --- drizzled/sql_select.cc 2011-01-09 08:39:30 +0000 | |||
186 | +++ drizzled/sql_select.cc 2011-01-17 09:18:58 +0000 | |||
187 | @@ -3932,7 +3932,7 @@ | |||
188 | 3932 | error=join->result->send_data(*join->fields) ? 1 : 0; | 3932 | error=join->result->send_data(*join->fields) ? 1 : 0; |
189 | 3933 | join->send_records++; | 3933 | join->send_records++; |
190 | 3934 | } | 3934 | } |
192 | 3935 | if (join->rollup.state != ROLLUP::STATE_NONE && error <= 0) | 3935 | if (join->rollup.getState() != Rollup::STATE_NONE && error <= 0) |
193 | 3936 | { | 3936 | { |
194 | 3937 | if (join->rollup_send_data((uint32_t) (idx+1))) | 3937 | if (join->rollup_send_data((uint32_t) (idx+1))) |
195 | 3938 | error= 1; | 3938 | error= 1; |
196 | @@ -4022,7 +4022,7 @@ | |||
197 | 4022 | return NESTED_LOOP_ERROR; | 4022 | return NESTED_LOOP_ERROR; |
198 | 4023 | } | 4023 | } |
199 | 4024 | } | 4024 | } |
201 | 4025 | if (join->rollup.state != ROLLUP::STATE_NONE) | 4025 | if (join->rollup.getState() != Rollup::STATE_NONE) |
202 | 4026 | { | 4026 | { |
203 | 4027 | if (join->rollup_write_data((uint32_t) (idx+1), table)) | 4027 | if (join->rollup_write_data((uint32_t) (idx+1), table)) |
204 | 4028 | return NESTED_LOOP_ERROR; | 4028 | return NESTED_LOOP_ERROR; |
205 | 4029 | 4029 | ||
206 | === modified file 'drizzled/sql_select.h' | |||
207 | --- drizzled/sql_select.h 2011-01-12 21:31:39 +0000 | |||
208 | +++ drizzled/sql_select.h 2011-01-17 09:18:58 +0000 | |||
209 | @@ -56,14 +56,76 @@ | |||
210 | 56 | enum_nested_loop_state end_send_group(Join *join, JoinTable *join_tab, bool end_of_records); | 56 | enum_nested_loop_state end_send_group(Join *join, JoinTable *join_tab, bool end_of_records); |
211 | 57 | enum_nested_loop_state end_write_group(Join *join, JoinTable *join_tab, bool end_of_records); | 57 | enum_nested_loop_state end_write_group(Join *join, JoinTable *join_tab, bool end_of_records); |
212 | 58 | 58 | ||
214 | 59 | typedef struct st_rollup | 59 | class Rollup |
215 | 60 | { | 60 | { |
216 | 61 | public: | ||
217 | 61 | enum State { STATE_NONE, STATE_INITED, STATE_READY }; | 62 | enum State { STATE_NONE, STATE_INITED, STATE_READY }; |
218 | 63 | |||
219 | 64 | Rollup() | ||
220 | 65 | : | ||
221 | 66 | state(), | ||
222 | 67 | null_items(NULL), | ||
223 | 68 | ref_pointer_arrays(NULL), | ||
224 | 69 | fields() | ||
225 | 70 | {} | ||
226 | 71 | |||
227 | 72 | Rollup(State in_state, | ||
228 | 73 | Item_null_result **in_null_items, | ||
229 | 74 | Item ***in_ref_pointer_arrays, | ||
230 | 75 | List<Item> *in_fields) | ||
231 | 76 | : | ||
232 | 77 | state(in_state), | ||
233 | 78 | null_items(in_null_items), | ||
234 | 79 | ref_pointer_arrays(in_ref_pointer_arrays), | ||
235 | 80 | fields(in_fields) | ||
236 | 81 | {} | ||
237 | 82 | |||
238 | 83 | State getState() const | ||
239 | 84 | { | ||
240 | 85 | return state; | ||
241 | 86 | } | ||
242 | 87 | |||
243 | 88 | void setState(State in_state) | ||
244 | 89 | { | ||
245 | 90 | state= in_state; | ||
246 | 91 | } | ||
247 | 92 | |||
248 | 93 | Item_null_result **getNullItems() const | ||
249 | 94 | { | ||
250 | 95 | return null_items; | ||
251 | 96 | } | ||
252 | 97 | |||
253 | 98 | void setNullItems(Item_null_result **in_null_items) | ||
254 | 99 | { | ||
255 | 100 | null_items= in_null_items; | ||
256 | 101 | } | ||
257 | 102 | |||
258 | 103 | Item ***getRefPointerArrays() const | ||
259 | 104 | { | ||
260 | 105 | return ref_pointer_arrays; | ||
261 | 106 | } | ||
262 | 107 | |||
263 | 108 | void setRefPointerArrays(Item ***in_ref_pointer_arrays) | ||
264 | 109 | { | ||
265 | 110 | ref_pointer_arrays= in_ref_pointer_arrays; | ||
266 | 111 | } | ||
267 | 112 | |||
268 | 113 | List<Item> *getFields() const | ||
269 | 114 | { | ||
270 | 115 | return fields; | ||
271 | 116 | } | ||
272 | 117 | |||
273 | 118 | void setFields(List<Item> *in_fields) | ||
274 | 119 | { | ||
275 | 120 | fields= in_fields; | ||
276 | 121 | } | ||
277 | 122 | |||
278 | 123 | private: | ||
279 | 62 | State state; | 124 | State state; |
280 | 63 | Item_null_result **null_items; | 125 | Item_null_result **null_items; |
281 | 64 | Item ***ref_pointer_arrays; | 126 | Item ***ref_pointer_arrays; |
282 | 65 | List<Item> *fields; | 127 | List<Item> *fields; |
284 | 66 | } ROLLUP; | 128 | }; |
285 | 67 | 129 | ||
286 | 68 | } /* namespace drizzled */ | 130 | } /* namespace drizzled */ |
287 | 69 | 131 |