~drizzle-trunk/drizzle/development

2154.2.17 by Brian Aker
Additional removal of session
1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
 *
4
 *  Copyright (C) 2008 Sun Microsystems, Inc.
5
 *
6
 *  This program is free software; you can redistribute it and/or modify
7
 *  it under the terms of the GNU General Public License as published by
8
 *  the Free Software Foundation; version 2 of the License.
9
 *
10
 *  This program is distributed in the hope that it will be useful,
11
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 *  GNU General Public License for more details.
14
 *
15
 *  You should have received a copy of the GNU General Public License
16
 *  along with this program; if not, write to the Free Software
17
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18
 */
19
2173.2.1 by Monty Taylor
Fixes incorrect usage of include
20
#include <config.h>
2154.2.17 by Brian Aker
Additional removal of session
21
22
#include <drizzled/select_dumpvar.h>
23
#include <drizzled/sql_lex.h>
24
#include <drizzled/session.h>
2241.2.11 by Olaf van der Spek
Refactor
25
#include <drizzled/var.h>
2154.2.17 by Brian Aker
Additional removal of session
26
27
namespace drizzled {
28
29
bool select_dumpvar::send_data(List<Item> &items)
30
{
31
  std::vector<var *>::const_iterator iter= var_list.begin();
32
2183.2.12 by Olaf van der Spek
Use List::begin()
33
  List<Item>::iterator it(items.begin());
2154.2.17 by Brian Aker
Additional removal of session
34
  Item *item= NULL;
35
  var *current_var;
36
37
  if (unit->offset_limit_cnt)
38
  {						// using limit offset,count
39
    unit->offset_limit_cnt--;
2318.6.58 by Olaf van der Spek
Refactor
40
    return 0;
2154.2.17 by Brian Aker
Additional removal of session
41
  }
42
  if (row_count++)
43
  {
44
    my_message(ER_TOO_MANY_ROWS, ER(ER_TOO_MANY_ROWS), MYF(0));
2318.6.77 by Olaf van der Spek
Refactor
45
    return 1;
2154.2.17 by Brian Aker
Additional removal of session
46
  }
47
  while ((iter != var_list.end()) && (item= it++))
48
  {
49
    current_var= *iter;
50
    if (current_var->local == 0)
51
    {
52
      Item_func_set_user_var *suv= new Item_func_set_user_var(current_var->s, item);
53
      suv->fix_fields(session, 0);
54
      suv->check(0);
55
      suv->update();
56
    }
57
    ++iter;
58
  }
59
  return(session->is_error());
60
}
61
62
bool select_dumpvar::send_eof()
63
{
64
  if (! row_count)
65
    push_warning(session, DRIZZLE_ERROR::WARN_LEVEL_WARN,
66
		 ER_SP_FETCH_NO_DATA, ER(ER_SP_FETCH_NO_DATA));
67
  /*
68
    In order to remember the value of affected rows for ROW_COUNT()
69
    function, SELECT INTO has to have an own SQLCOM.
70
    @TODO split from SQLCOM_SELECT
71
  */
72
  session->my_ok(row_count);
73
  return 0;
74
}
75
76
int select_dumpvar::prepare(List<Item> &list, Select_Lex_Unit *u)
77
{
78
  unit= u;
79
2183.2.19 by Olaf van der Spek
Use List::size()
80
  if (var_list.size() != list.size())
2154.2.17 by Brian Aker
Additional removal of session
81
  {
82
    my_message(ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT,
83
	       ER(ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT), MYF(0));
84
    return 1;
85
  }
86
  return 0;
87
}
88
89
} // namespace drizzled