Merge lp:~vjsamuel/drizzle/convert-rollup-to-class into lp:drizzle/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
Reviewer Review Type Date Requested Status
Drizzle Developers Pending
Review via email: mp+46450@code.launchpad.net
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
=== modified file 'drizzled/join.cc'
--- drizzled/join.cc 2011-01-08 10:35:13 +0000
+++ drizzled/join.cc 2011-01-17 09:18:58 +0000
@@ -728,7 +728,7 @@
728 }728 }
729 if (group_list || tmp_table_param.sum_func_count)729 if (group_list || tmp_table_param.sum_func_count)
730 {730 {
731 if (! hidden_group_fields && rollup.state == ROLLUP::STATE_NONE)731 if (! hidden_group_fields && rollup.getState() == Rollup::STATE_NONE)
732 select_distinct=0;732 select_distinct=0;
733 }733 }
734 else if (select_distinct && tables - const_tables == 1)734 else if (select_distinct && tables - const_tables == 1)
@@ -792,7 +792,7 @@
792 {792 {
793 Order *old_group_list;793 Order *old_group_list;
794 group_list= remove_constants(this, (old_group_list= group_list), conds,794 group_list= remove_constants(this, (old_group_list= group_list), conds,
795 rollup.state == ROLLUP::STATE_NONE,795 rollup.getState() == Rollup::STATE_NONE,
796 &simple_group);796 &simple_group);
797 if (session->is_error())797 if (session->is_error())
798 {798 {
@@ -1985,7 +1985,7 @@
1985 If we are using rollup, we need a copy of the summary functions for1985 If we are using rollup, we need a copy of the summary functions for
1986 each level1986 each level
1987 */1987 */
1988 if (rollup.state != ROLLUP::STATE_NONE)1988 if (rollup.getState() != Rollup::STATE_NONE)
1989 func_count*= (send_group_parts+1);1989 func_count*= (send_group_parts+1);
19901990
1991 group_parts= send_group_parts;1991 group_parts= send_group_parts;
@@ -2048,18 +2048,18 @@
2048 ((Item_sum *)item)->depended_from() == select_lex))2048 ((Item_sum *)item)->depended_from() == select_lex))
2049 *func++= (Item_sum*) item;2049 *func++= (Item_sum*) item;
2050 }2050 }
2051 if (before_group_by && rollup.state == ROLLUP::STATE_INITED)2051 if (before_group_by && rollup.getState() == Rollup::STATE_INITED)
2052 {2052 {
2053 rollup.state= ROLLUP::STATE_READY;2053 rollup.setState(Rollup::STATE_READY);
2054 if (rollup_make_fields(field_list, send_fields, &func))2054 if (rollup_make_fields(field_list, send_fields, &func))
2055 return true; // Should never happen2055 return true; // Should never happen
2056 }2056 }
2057 else if (rollup.state == ROLLUP::STATE_NONE)2057 else if (rollup.getState() == Rollup::STATE_NONE)
2058 {2058 {
2059 for (uint32_t i=0 ; i <= send_group_parts ;i++)2059 for (uint32_t i=0 ; i <= send_group_parts ;i++)
2060 sum_funcs_end[i]= func;2060 sum_funcs_end[i]= func;
2061 }2061 }
2062 else if (rollup.state == ROLLUP::STATE_READY)2062 else if (rollup.getState() == Rollup::STATE_READY)
2063 return(false); // Don't put end marker2063 return(false); // Don't put end marker
2064 *func=0; // End marker2064 *func=0; // End marker
2065 return(false);2065 return(false);
@@ -2071,7 +2071,7 @@
2071 Item **ref_array;2071 Item **ref_array;
20722072
2073 tmp_table_param.quick_group= 0; // Can't create groups in tmp table2073 tmp_table_param.quick_group= 0; // Can't create groups in tmp table
2074 rollup.state= ROLLUP::STATE_INITED;2074 rollup.setState(Rollup::STATE_INITED);
20752075
2076 /*2076 /*
2077 Create pointers to the different sum function groups2077 Create pointers to the different sum function groups
@@ -2079,18 +2079,19 @@
2079 */2079 */
2080 tmp_table_param.group_parts= send_group_parts;2080 tmp_table_param.group_parts= send_group_parts;
20812081
2082 if (!(rollup.null_items= (Item_null_result**) session->alloc((sizeof(Item*) +2082 rollup.setNullItems((Item_null_result**) session->alloc((sizeof(Item*) +
2083 sizeof(Item**) +2083 sizeof(Item**) +
2084 sizeof(List<Item>) +2084 sizeof(List<Item>) +
2085 ref_pointer_array_size)2085 ref_pointer_array_size)
2086 * send_group_parts )))2086 * send_group_parts ));
2087 if (! rollup.getNullItems())
2087 {2088 {
2088 return 1;2089 return 1;
2089 }2090 }
20902091
2091 rollup.fields= (List<Item>*) (rollup.null_items + send_group_parts);2092 rollup.setFields((List<Item>*) (rollup.getNullItems() + send_group_parts));
2092 rollup.ref_pointer_arrays= (Item***) (rollup.fields + send_group_parts);2093 rollup.setRefPointerArrays((Item***) (rollup.getFields() + send_group_parts));
2093 ref_array= (Item**) (rollup.ref_pointer_arrays+send_group_parts);2094 ref_array= (Item**) (rollup.getRefPointerArrays()+send_group_parts);
20942095
2095 /*2096 /*
2096 Prepare space for field list for the different levels2097 Prepare space for field list for the different levels
@@ -2098,10 +2099,10 @@
2098 */2099 */
2099 for (uint32_t i= 0 ; i < send_group_parts ; i++)2100 for (uint32_t i= 0 ; i < send_group_parts ; i++)
2100 {2101 {
2101 rollup.null_items[i]= new (session->mem_root) Item_null_result();2102 rollup.getNullItems()[i]= new (session->mem_root) Item_null_result();
2102 List<Item> *rollup_fields= &rollup.fields[i];2103 List<Item> *rollup_fields= &rollup.getFields()[i];
2103 rollup_fields->empty();2104 rollup_fields->empty();
2104 rollup.ref_pointer_arrays[i]= ref_array;2105 rollup.getRefPointerArrays()[i]= ref_array;
2105 ref_array+= all_fields.elements;2106 ref_array+= all_fields.elements;
2106 }2107 }
21072108
@@ -2109,7 +2110,7 @@
2109 {2110 {
2110 for (uint32_t j= 0 ; j < fields_list.elements ; j++)2111 for (uint32_t j= 0 ; j < fields_list.elements ; j++)
2111 {2112 {
2112 rollup.fields[i].push_back(rollup.null_items[i]);2113 rollup.getFields()[i].push_back(rollup.getNullItems()[i]);
2113 }2114 }
2114 }2115 }
21152116
@@ -2219,8 +2220,8 @@
2219 uint32_t pos= send_group_parts - level -1;2220 uint32_t pos= send_group_parts - level -1;
2220 bool real_fields= 0;2221 bool real_fields= 0;
2221 Item *item;2222 Item *item;
2222 List_iterator<Item> new_it(rollup.fields[pos]);2223 List_iterator<Item> new_it(rollup.getFields()[pos]);
2223 Item **ref_array_start= rollup.ref_pointer_arrays[pos];2224 Item **ref_array_start= rollup.getRefPointerArrays()[pos];
2224 Order *start_group;2225 Order *start_group;
22252226
2226 /* Point to first hidden field */2227 /* Point to first hidden field */
@@ -2321,11 +2322,11 @@
2321 for (uint32_t i= send_group_parts ; i-- > idx ; )2322 for (uint32_t i= send_group_parts ; i-- > idx ; )
2322 {2323 {
2323 /* Get reference pointers to sum functions in place */2324 /* Get reference pointers to sum functions in place */
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);
23252326
2326 if ((!having || having->val_int()))2327 if ((!having || having->val_int()))
2327 {2328 {
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]))
2329 {2330 {
2330 return 1;2331 return 1;
2331 }2332 }
@@ -2362,13 +2363,13 @@
2362 for (uint32_t i= send_group_parts ; i-- > idx ; )2363 for (uint32_t i= send_group_parts ; i-- > idx ; )
2363 {2364 {
2364 /* Get reference pointers to sum functions in place */2365 /* Get reference pointers to sum functions in place */
2365 memcpy(ref_pointer_array, rollup.ref_pointer_arrays[i],2366 memcpy(ref_pointer_array, rollup.getRefPointerArrays()[i],
2366 ref_pointer_array_size);2367 ref_pointer_array_size);
2367 if ((!having || having->val_int()))2368 if ((!having || having->val_int()))
2368 {2369 {
2369 int write_error;2370 int write_error;
2370 Item *item;2371 Item *item;
2371 List_iterator_fast<Item> it(rollup.fields[i]);2372 List_iterator_fast<Item> it(rollup.getFields()[i]);
2372 while ((item= it++))2373 while ((item= it++))
2373 {2374 {
2374 if (item->type() == Item::NULL_ITEM && item->is_result_field())2375 if (item->type() == Item::NULL_ITEM && item->is_result_field())
23752376
=== modified file 'drizzled/join.h'
--- drizzled/join.h 2010-12-24 07:15:43 +0000
+++ drizzled/join.h 2011-01-17 09:18:58 +0000
@@ -180,7 +180,7 @@
180 DrizzleLock *lock;180 DrizzleLock *lock;
181181
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 */
183 ROLLUP rollup; /**< Used with rollup */183 Rollup rollup; /**< Used with rollup */
184 DYNAMIC_ARRAY keyuse;184 DYNAMIC_ARRAY keyuse;
185 Item::cond_result cond_value;185 Item::cond_result cond_value;
186 Item::cond_result having_value;186 Item::cond_result having_value;
@@ -306,7 +306,7 @@
306 memset(&keyuse, 0, sizeof(keyuse));306 memset(&keyuse, 0, sizeof(keyuse));
307 tmp_table_param.init();307 tmp_table_param.init();
308 tmp_table_param.end_write_records= HA_POS_ERROR;308 tmp_table_param.end_write_records= HA_POS_ERROR;
309 rollup.state= ROLLUP::STATE_NONE;309 rollup.setState(Rollup::STATE_NONE);
310 }310 }
311311
312 /** 312 /**
@@ -395,7 +395,7 @@
395 memset(&keyuse, 0, sizeof(keyuse));395 memset(&keyuse, 0, sizeof(keyuse));
396 tmp_table_param.init();396 tmp_table_param.init();
397 tmp_table_param.end_write_records= HA_POS_ERROR;397 tmp_table_param.end_write_records= HA_POS_ERROR;
398 rollup.state= ROLLUP::STATE_NONE;398 rollup.setState(Rollup::STATE_NONE);
399 }399 }
400400
401 int prepare(Item ***rref_pointer_array, 401 int prepare(Item ***rref_pointer_array,
402402
=== modified file 'drizzled/sql_select.cc'
--- drizzled/sql_select.cc 2011-01-09 08:39:30 +0000
+++ drizzled/sql_select.cc 2011-01-17 09:18:58 +0000
@@ -3932,7 +3932,7 @@
3932 error=join->result->send_data(*join->fields) ? 1 : 0;3932 error=join->result->send_data(*join->fields) ? 1 : 0;
3933 join->send_records++;3933 join->send_records++;
3934 }3934 }
3935 if (join->rollup.state != ROLLUP::STATE_NONE && error <= 0)3935 if (join->rollup.getState() != Rollup::STATE_NONE && error <= 0)
3936 {3936 {
3937 if (join->rollup_send_data((uint32_t) (idx+1)))3937 if (join->rollup_send_data((uint32_t) (idx+1)))
3938 error= 1;3938 error= 1;
@@ -4022,7 +4022,7 @@
4022 return NESTED_LOOP_ERROR;4022 return NESTED_LOOP_ERROR;
4023 }4023 }
4024 }4024 }
4025 if (join->rollup.state != ROLLUP::STATE_NONE)4025 if (join->rollup.getState() != Rollup::STATE_NONE)
4026 {4026 {
4027 if (join->rollup_write_data((uint32_t) (idx+1), table))4027 if (join->rollup_write_data((uint32_t) (idx+1), table))
4028 return NESTED_LOOP_ERROR;4028 return NESTED_LOOP_ERROR;
40294029
=== modified file 'drizzled/sql_select.h'
--- drizzled/sql_select.h 2011-01-12 21:31:39 +0000
+++ drizzled/sql_select.h 2011-01-17 09:18:58 +0000
@@ -56,14 +56,76 @@
56enum_nested_loop_state end_send_group(Join *join, JoinTable *join_tab, bool end_of_records);56enum_nested_loop_state end_send_group(Join *join, JoinTable *join_tab, bool end_of_records);
57enum_nested_loop_state end_write_group(Join *join, JoinTable *join_tab, bool end_of_records);57enum_nested_loop_state end_write_group(Join *join, JoinTable *join_tab, bool end_of_records);
5858
59typedef struct st_rollup59class Rollup
60{60{
61public:
61 enum State { STATE_NONE, STATE_INITED, STATE_READY };62 enum State { STATE_NONE, STATE_INITED, STATE_READY };
63
64 Rollup()
65 :
66 state(),
67 null_items(NULL),
68 ref_pointer_arrays(NULL),
69 fields()
70 {}
71
72 Rollup(State in_state,
73 Item_null_result **in_null_items,
74 Item ***in_ref_pointer_arrays,
75 List<Item> *in_fields)
76 :
77 state(in_state),
78 null_items(in_null_items),
79 ref_pointer_arrays(in_ref_pointer_arrays),
80 fields(in_fields)
81 {}
82
83 State getState() const
84 {
85 return state;
86 }
87
88 void setState(State in_state)
89 {
90 state= in_state;
91 }
92
93 Item_null_result **getNullItems() const
94 {
95 return null_items;
96 }
97
98 void setNullItems(Item_null_result **in_null_items)
99 {
100 null_items= in_null_items;
101 }
102
103 Item ***getRefPointerArrays() const
104 {
105 return ref_pointer_arrays;
106 }
107
108 void setRefPointerArrays(Item ***in_ref_pointer_arrays)
109 {
110 ref_pointer_arrays= in_ref_pointer_arrays;
111 }
112
113 List<Item> *getFields() const
114 {
115 return fields;
116 }
117
118 void setFields(List<Item> *in_fields)
119 {
120 fields= in_fields;
121 }
122
123private:
62 State state;124 State state;
63 Item_null_result **null_items;125 Item_null_result **null_items;
64 Item ***ref_pointer_arrays;126 Item ***ref_pointer_arrays;
65 List<Item> *fields;127 List<Item> *fields;
66} ROLLUP;128};
67129
68} /* namespace drizzled */130} /* namespace drizzled */
69131

Subscribers

People subscribed via source and target branches