~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/session.cc

  • Committer: Brian Aker
  • Date: 2009-02-12 22:45:08 UTC
  • Revision ID: brian@tangent.org-20090212224508-mrd9jwgn1zjdpqdk
Minor refactoring (we will need to disconnect the code from the include
file).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1822
1822
}
1823
1823
 
1824
1824
 
1825
 
/***************************************************************************
1826
 
  Dump of select to variables
1827
 
***************************************************************************/
1828
 
 
1829
 
int select_dumpvar::prepare(List<Item> &list, Select_Lex_Unit *u)
1830
 
{
1831
 
  unit= u;
1832
 
 
1833
 
  if (var_list.elements != list.elements)
1834
 
  {
1835
 
    my_message(ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT,
1836
 
               ER(ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT), MYF(0));
1837
 
    return 1;
1838
 
  }
1839
 
  return 0;
1840
 
}
1841
 
 
1842
 
 
1843
 
void select_dumpvar::cleanup()
1844
 
{
1845
 
  row_count= 0;
1846
 
}
1847
 
 
1848
 
 
1849
 
void Query_arena::free_items()
1850
 
{
1851
 
  Item *next;
1852
 
  /* This works because items are allocated with sql_alloc() */
1853
 
  for (; free_list; free_list= next)
1854
 
  {
1855
 
    next= free_list->next;
1856
 
    free_list->delete_self();
1857
 
  }
1858
 
  /* Postcondition: free_list is 0 */
1859
 
  return;
1860
 
}
1861
 
 
1862
 
 
1863
1825
/*
1864
1826
  Statement functions
1865
1827
*/
1901
1863
}
1902
1864
 
1903
1865
 
1904
 
bool select_dumpvar::send_data(List<Item> &items)
1905
 
{
1906
 
  List_iterator_fast<my_var> var_li(var_list);
1907
 
  List_iterator<Item> it(items);
1908
 
  Item *item;
1909
 
  my_var *mv;
1910
 
 
1911
 
  if (unit->offset_limit_cnt)
1912
 
  {                                             // using limit offset,count
1913
 
    unit->offset_limit_cnt--;
1914
 
    return(0);
1915
 
  }
1916
 
  if (row_count++)
1917
 
  {
1918
 
    my_message(ER_TOO_MANY_ROWS, ER(ER_TOO_MANY_ROWS), MYF(0));
1919
 
    return(1);
1920
 
  }
1921
 
  while ((mv= var_li++) && (item= it++))
1922
 
  {
1923
 
    if (mv->local == 0)
1924
 
    {
1925
 
      Item_func_set_user_var *suv= new Item_func_set_user_var(mv->s, item);
1926
 
      suv->fix_fields(session, 0);
1927
 
      suv->check(0);
1928
 
      suv->update();
1929
 
    }
1930
 
  }
1931
 
  return(session->is_error());
1932
 
}
1933
 
 
1934
 
bool select_dumpvar::send_eof()
1935
 
{
1936
 
  if (! row_count)
1937
 
    push_warning(session, DRIZZLE_ERROR::WARN_LEVEL_WARN,
1938
 
                 ER_SP_FETCH_NO_DATA, ER(ER_SP_FETCH_NO_DATA));
1939
 
  /*
1940
 
    In order to remember the value of affected rows for ROW_COUNT()
1941
 
    function, SELECT INTO has to have an own SQLCOM.
1942
 
    TODO: split from SQLCOM_SELECT
1943
 
  */
1944
 
  session->my_ok(row_count);
1945
 
  return 0;
1946
 
}
1947
 
 
1948
1866
/****************************************************************************
1949
1867
  Tmp_Table_Param
1950
1868
****************************************************************************/
2334
2252
  };
2335
2253
}
2336
2254
 
2337
 
bool Discrete_intervals_list::append(uint64_t start, uint64_t val,
2338
 
                                 uint64_t incr)
2339
 
{
2340
 
  /* first, see if this can be merged with previous */
2341
 
  if ((head == NULL) || tail->merge_if_contiguous(start, val, incr))
2342
 
  {
2343
 
    /* it cannot, so need to add a new interval */
2344
 
    Discrete_interval *new_interval= new Discrete_interval(start, val, incr);
2345
 
    return(append(new_interval));
2346
 
  }
2347
 
  return(0);
2348
 
}
2349
 
 
2350
 
bool Discrete_intervals_list::append(Discrete_interval *new_interval)
2351
 
{
2352
 
  if (unlikely(new_interval == NULL))
2353
 
    return(1);
2354
 
  if (head == NULL)
2355
 
    head= current= new_interval;
2356
 
  else
2357
 
    tail->next= new_interval;
2358
 
  tail= new_interval;
2359
 
  elements++;
2360
 
  return(0);
2361
 
}
2362
 
 
2363
2255
/**
2364
2256
  Close a connection.
2365
2257