~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/sql_lex.cc

  • Committer: Brian Aker
  • Date: 2008-11-24 18:32:40 UTC
  • Revision ID: brian@tangent.org-20081124183240-9alwo9ibmc8hq42y
Remove dead view code.

Show diffs side-by-side

added added

removed removed

Lines of Context:
2132
2132
  reset_query_tables_list(true);
2133
2133
}
2134
2134
 
2135
 
 
2136
 
/*
2137
 
  Check whether the merging algorithm can be used on this VIEW
2138
 
 
2139
 
  SYNOPSIS
2140
 
    LEX::can_be_merged()
2141
 
 
2142
 
  DESCRIPTION
2143
 
    We can apply merge algorithm if it is single SELECT view  with
2144
 
    subqueries only in WHERE clause (we do not count SELECTs of underlying
2145
 
    views, and second level subqueries) and we have not grpouping, ordering,
2146
 
    HAVING clause, aggregate functions, DISTINCT clause, LIMIT clause and
2147
 
    several underlying tables.
2148
 
 
2149
 
  RETURN
2150
 
    false - only temporary table algorithm can be used
2151
 
    true  - merge algorithm can be used
2152
 
*/
2153
 
 
2154
 
bool LEX::can_be_merged()
2155
 
{
2156
 
  // TODO: do not forget implement case when select_lex.table_list.elements==0
2157
 
 
2158
 
  /* find non VIEW subqueries/unions */
2159
 
  bool selects_allow_merge= select_lex.next_select() == 0;
2160
 
  if (selects_allow_merge)
2161
 
  {
2162
 
    for (SELECT_LEX_UNIT *tmp_unit= select_lex.first_inner_unit();
2163
 
         tmp_unit;
2164
 
         tmp_unit= tmp_unit->next_unit())
2165
 
    {
2166
 
      if (tmp_unit->first_select()->parent_lex == this &&
2167
 
          (tmp_unit->item == 0 ||
2168
 
           (tmp_unit->item->place() != IN_WHERE &&
2169
 
            tmp_unit->item->place() != IN_ON)))
2170
 
      {
2171
 
        selects_allow_merge= 0;
2172
 
        break;
2173
 
      }
2174
 
    }
2175
 
  }
2176
 
 
2177
 
  return (selects_allow_merge &&
2178
 
          select_lex.group_list.elements == 0 &&
2179
 
          select_lex.having == 0 &&
2180
 
          select_lex.with_sum_func == 0 &&
2181
 
          select_lex.table_list.elements >= 1 &&
2182
 
          !(select_lex.options & SELECT_DISTINCT) &&
2183
 
          select_lex.select_limit == 0);
2184
 
}
2185
 
 
2186
 
 
2187
 
/*
2188
 
  check if command can use VIEW with MERGE algorithm (for top VIEWs)
2189
 
 
2190
 
  SYNOPSIS
2191
 
    LEX::can_use_merged()
2192
 
 
2193
 
  DESCRIPTION
2194
 
    Only listed here commands can use merge algorithm in top level
2195
 
    SELECT_LEX (for subqueries will be used merge algorithm if
2196
 
    LEX::can_not_use_merged() is not true).
2197
 
 
2198
 
  RETURN
2199
 
    false - command can't use merged VIEWs
2200
 
    true  - VIEWs with MERGE algorithms can be used
2201
 
*/
2202
 
 
2203
 
bool LEX::can_use_merged()
2204
 
{
2205
 
  switch (sql_command)
2206
 
  {
2207
 
  case SQLCOM_SELECT:
2208
 
  case SQLCOM_CREATE_TABLE:
2209
 
  case SQLCOM_UPDATE:
2210
 
  case SQLCOM_UPDATE_MULTI:
2211
 
  case SQLCOM_DELETE:
2212
 
  case SQLCOM_DELETE_MULTI:
2213
 
  case SQLCOM_INSERT:
2214
 
  case SQLCOM_INSERT_SELECT:
2215
 
  case SQLCOM_REPLACE:
2216
 
  case SQLCOM_REPLACE_SELECT:
2217
 
  case SQLCOM_LOAD:
2218
 
    return true;
2219
 
  default:
2220
 
    return false;
2221
 
  }
2222
 
}
2223
 
 
2224
 
/*
2225
 
  Check if command can't use merged views in any part of command
2226
 
 
2227
 
  SYNOPSIS
2228
 
    LEX::can_not_use_merged()
2229
 
 
2230
 
  DESCRIPTION
2231
 
    Temporary table algorithm will be used on all SELECT levels for queries
2232
 
    listed here (see also LEX::can_use_merged()).
2233
 
 
2234
 
  RETURN
2235
 
    false - command can't use merged VIEWs
2236
 
    true  - VIEWs with MERGE algorithms can be used
2237
 
*/
2238
 
 
2239
 
bool LEX::can_not_use_merged()
2240
 
{
2241
 
  switch (sql_command)
2242
 
  {
2243
 
  /*
2244
 
    SQLCOM_SHOW_FIELDS is necessary to make 
2245
 
    information schema tables working correctly with views.
2246
 
    see get_schema_tables_result function
2247
 
  */
2248
 
  case SQLCOM_SHOW_FIELDS:
2249
 
    return true;
2250
 
  default:
2251
 
    return false;
2252
 
  }
2253
 
}
2254
 
 
2255
2135
/*
2256
2136
  Detect that we need only table structure of derived table/view
2257
2137