~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/sql_derived.cc

  • Committer: lbieber
  • Date: 2010-10-06 16:34:16 UTC
  • mfrom: (1816.1.3 build)
  • Revision ID: lbieber@orisndriz08-20101006163416-ea0sl59qgpglk21y
Merge Monty - Change the requirement from either libinnodb to libhaildb. Also, tied it to version 2.2
Merge Andrew - fix bug 650935: remove --compress from all clients
Merge Andrew - fix bug 653471: Add -A to drizzle client
Merge Travis - 621861 = To change C structs to C++ classes in Drizzle

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
  Call given derived table processor (preparing or filling tables)
28
28
 
29
29
  SYNOPSIS
30
 
    handle_derived()
 
30
    mysql_handle_derived()
31
31
    lex                 LEX for this thread
32
32
    processor           procedure of derived table processing
33
33
 
35
35
    false  OK
36
36
    true   Error
37
37
*/
38
 
bool handle_derived(LEX *lex, bool (*processor)(Session*, LEX*, TableList*))
 
38
bool mysql_handle_derived(LEX *lex, bool (*processor)(Session*, LEX*, TableList*))
39
39
{
40
40
  bool res= false;
41
41
  if (lex->derived_tables)
54
54
          Force join->join_tmp creation, because we will use this JOIN
55
55
          twice for EXPLAIN and we have to have unchanged join for EXPLAINing
56
56
        */
57
 
        sl->uncacheable.set(UNCACHEABLE_EXPLAIN);
58
 
        sl->master_unit()->uncacheable.set(UNCACHEABLE_EXPLAIN);
 
57
        sl->uncacheable|= UNCACHEABLE_EXPLAIN;
 
58
        sl->master_unit()->uncacheable|= UNCACHEABLE_EXPLAIN;
59
59
      }
60
60
    }
61
61
  }
68
68
  Create temporary table structure (but do not fill it)
69
69
 
70
70
  SYNOPSIS
71
 
    derived_prepare()
 
71
    mysql_derived_prepare()
72
72
    session                     Thread handle
73
73
    lex                 LEX for this thread
74
74
    orig_table_list     TableList for the upper SELECT
88
88
    false  OK
89
89
    true   Error
90
90
*/
91
 
bool derived_prepare(Session *session, LEX *, TableList *orig_table_list)
 
91
bool mysql_derived_prepare(Session *session, LEX *, TableList *orig_table_list)
92
92
{
93
93
  Select_Lex_Unit *unit= orig_table_list->derived;
94
94
  uint64_t create_options;
144
144
    }
145
145
    else
146
146
    {
 
147
      if (! session->fill_derived_tables())
 
148
      {
 
149
        delete derived_result;
 
150
        derived_result= NULL;
 
151
      }
147
152
      orig_table_list->derived_result= derived_result;
148
153
      orig_table_list->table= table;
149
 
      orig_table_list->setTableName(const_cast<char *>(table->getShare()->getTableName()));
 
154
      orig_table_list->table_name=        const_cast<char *>(table->getShare()->getTableName());
150
155
      orig_table_list->table_name_length= table->getShare()->getTableNameSize();
151
156
      table->derived_select_number= first_select->select_number;
152
 
      orig_table_list->setSchemaName((char *)"");
 
157
      orig_table_list->db= (char *)"";
153
158
      orig_table_list->db_length= 0;
154
159
      /* Force read of table stats in the optimizer */
155
160
      table->cursor->info(HA_STATUS_VARIABLE);
156
161
      /* Add new temporary table to list of open derived tables */
157
 
      table->setNext(session->getDerivedTables());
158
 
      session->setDerivedTables(table);
 
162
      table->setNext(session->derived_tables);
 
163
      session->derived_tables= table;
159
164
    }
160
165
  }
161
166
 
166
171
  fill derived table
167
172
 
168
173
  SYNOPSIS
169
 
    derived_filling()
 
174
    mysql_derived_filling()
170
175
    session                     Thread handle
171
176
    lex                 LEX for this thread
172
177
    unit                node that contains all SELECT's for derived tables
184
189
    false  OK
185
190
    true   Error
186
191
*/
187
 
bool derived_filling(Session *session, LEX *lex, TableList *orig_table_list)
 
192
bool mysql_derived_filling(Session *session, LEX *lex, TableList *orig_table_list)
188
193
{
189
194
  Table *table= orig_table_list->table;
190
195
  Select_Lex_Unit *unit= orig_table_list->derived;
208
213
              first_select->options&= ~OPTION_FOUND_ROWS;
209
214
 
210
215
      lex->current_select= first_select;
211
 
      res= select_query(session, &first_select->ref_pointer_array,
 
216
      res= mysql_select(session, &first_select->ref_pointer_array,
212
217
                        (TableList*) first_select->table_list.first,
213
218
                        first_select->with_wild,
214
219
                        first_select->item_list, first_select->where,
215
220
                        (first_select->order_list.elements+
216
221
                        first_select->group_list.elements),
217
 
                        (Order *) first_select->order_list.first,
218
 
                        (Order *) first_select->group_list.first,
 
222
                        (order_st *) first_select->order_list.first,
 
223
                        (order_st *) first_select->group_list.first,
219
224
                        first_select->having,
220
225
                        (first_select->options | session->options | SELECT_NO_UNLOCK),
221
226
                        derived_result, unit, first_select);