/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*- * vim:expandtab:shiftwidth=2:tabstop=2:smarttab: * * Copyright (C) 2008 Sun Microsystems, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #pragma once #include namespace drizzled { /* This item represents user variable used as out parameter (e.g in LOAD DATA), and it is supposed to be used only for this purprose. So it is simplified a lot. Actually you should never obtain its value. The only two reasons for this thing being an Item is possibility to store it in List and desire to place this code somewhere near other functions working with user variables. */ class Item_user_var_as_out_param :public Item { lex_string_t name; user_var_entry *entry; public: Item_user_var_as_out_param(lex_string_t a) : name(a) {} /* We should return something different from FIELD_ITEM here */ enum Type type() const { return STRING_ITEM;} double val_real(); int64_t val_int(); String *val_str(String *str); type::Decimal *val_decimal(type::Decimal *decimal_buffer); /* fix_fields() binds variable name with its entry structure */ bool fix_fields(Session *session, Item **ref); virtual void print(String *str); void set_null_value(const charset_info_st * const cs); void set_value(const char *str, uint32_t length, const charset_info_st * const cs); }; } /* namespace drizzled */