mariadb/sql/item_row.cc
unknown 10e22c346a Portability fixes (for windows)
Some changes to the prepared statement protocol to make it easier to use and faster.


Makefile.am:
  Fix to make dist to work with cmd-line-utils
client/mysql.cc:
  Portability fixes
client/mysqlbinlog.cc:
  Portabiliy fixes and remove usafe of FILE
configure.in:
  Fix to make dist to work with cmd-line-utils
heap/_check.c:
  Portability fixes
include/config-win.h:
  Portability fixes
include/m_ctype.h:
  Indentation cleanup
include/my_list.h:
  Portability fixes
include/mysql.h:
  Cleanup of BIND structure
include/violite.h:
  Portability fixes
innobase/dict/dict0dict.c:
  Portability fixes
innobase/dict/dict0load.c:
  Portability fixes
innobase/include/os0proc.h:
  Portability fixes (Heikki, please check)
innobase/os/os0proc.c:
  Portability fixes (Heikki, please check)
innobase/ut/ut0ut.c:
  Portability fixes
isam/pack_isam.c:
  Portability fixes
libmysql/libmysql.c:
  Portability fixes
  Remove obscure usage of the length parameter for prepared statements.
libmysql/libmysql.def:
  Remove not existing functions
libmysqld/lib_sql.cc:
  Remove compiler warning
mysql-test/r/explain.result:
  Fix after merge
mysql-test/r/join.result:
  Fix after merge
mysys/my_once.c:
  Portability fix
mysys/tree.c:
  Portability fixes
sql/field.cc:
  Portability fixes
sql/filesort.cc:
  move assert.h to mysql_priv.h
sql/ha_berkeley.cc:
  move assert.h to mysql_priv.h
sql/ha_innodb.cc:
  move assert.h to mysql_priv.h
sql/item.cc:
  move assert.h to mysql_priv.h
  Fixed syntax error
sql/item_cmpfunc.cc:
  move assert.h to mysql_priv.h
sql/item_func.cc:
  move assert.h to mysql_priv.h
sql/item_row.cc:
  move assert.h to mysql_priv.h
sql/item_strfunc.cc:
  Portability fix
sql/item_subselect.cc:
  Portability fix
sql/item_sum.cc:
  move assert.h to mysql_priv.h
sql/lex.h:
  Portability fix
sql/lock.cc:
  move assert.h to mysql_priv.h
sql/log.cc:
  move assert.h to mysql_priv.h
sql/log_event.cc:
  Portability fix
sql/mf_iocache.cc:
  move assert.h to mysql_priv.h
sql/mysql_priv.h:
  move assert.h to mysql_priv.h
sql/mysqld.cc:
  move assert.h to mysql_priv.h
sql/opt_range.cc:
  move assert.h to mysql_priv.h
sql/password.c:
  Portability fix
sql/protocol.cc:
  move assert.h to mysql_priv.h
sql/set_var.cc:
  Portability fix
sql/slave.cc:
  move assert.h to mysql_priv.h
sql/spatial.cc:
  Portability fix
sql/sql_acl.cc:
  move assert.h to mysql_priv.h
sql/sql_base.cc:
  move assert.h to mysql_priv.h
sql/sql_cache.cc:
  move assert.h to mysql_priv.h
sql/sql_class.cc:
  move assert.h to mysql_priv.h
sql/sql_handler.cc:
  move assert.h to mysql_priv.h
sql/sql_help.cc:
  Removed compiler warning
sql/sql_lex.cc:
  Portability fix
sql/sql_lex.h:
  Portability fix
sql/sql_parse.cc:
  move assert.h to mysql_priv.h
sql/sql_prepare.cc:
  move assert.h to mysql_priv.h
sql/sql_repl.cc:
  move assert.h to mysql_priv.h
sql/sql_select.cc:
  move assert.h to mysql_priv.h
sql/sql_string.cc:
  Portability fix
sql/sql_string.h:
  Portability fix
sql/sql_table.cc:
  move assert.h to mysql_priv.h
sql/sql_yacc.yy:
  Portability fix
  Remove not accessed code
strings/ctype-bin.c:
  Portability fix
strings/ctype-mb.c:
  Portability fix
strings/ctype.c:
  Portability fix
tests/client_test.c:
  A
2003-01-21 21:07:59 +02:00

113 lines
2.7 KiB
C++

/* Copyright (C) 2000 MySQL AB
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; either version 2 of the License, or
(at your option) any later version.
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#include "mysql_priv.h"
Item_row::Item_row(List<Item> &arg):
Item(), used_tables_cache(0), array_holder(1), const_item_cache(1)
{
//TODO: think placing 2-3 component items in item (as it done for function)
if ((arg_count= arg.elements))
items= (Item**) sql_alloc(sizeof(Item*)*arg_count);
else
items= 0;
List_iterator<Item> li(arg);
uint i= 0;
Item *item;
while ((item= li++))
{
items[i]= item;
i++;
}
}
void Item_row::illegal_method_call(const char *method)
{
DBUG_ENTER("Item_row::illegal_method_call");
DBUG_PRINT("error", ("!!! %s method was called for row item", method));
DBUG_ASSERT(0);
my_error(ER_CARDINALITY_COL, MYF(0), 1);
DBUG_VOID_RETURN;
}
bool Item_row::fix_fields(THD *thd, TABLE_LIST *tabl, Item **ref)
{
null_value= 0;
maybe_null= 0;
for (uint i= 0; i < arg_count; i++)
{
if (items[i]->fix_fields(thd, tabl, items+i))
return 1;
used_tables_cache |= items[i]->used_tables();
if (const_item_cache&= items[i]->const_item() && !with_null)
{
if (items[i]->cols() > 1)
with_null|= items[i]->null_inside();
else
{
items[i]->val_int();
with_null|= items[i]->null_value;
}
}
maybe_null|= items[i]->maybe_null;
}
return 0;
}
void Item_row::update_used_tables()
{
used_tables_cache= 0;
const_item_cache= 1;
for (uint i= 0; i < arg_count; i++)
{
items[i]->update_used_tables();
used_tables_cache|= items[i]->used_tables();
const_item_cache&= items[i]->const_item();
}
}
bool Item_row::check_cols(uint c)
{
if (c != arg_count)
{
my_error(ER_CARDINALITY_COL, MYF(0), c);
return 1;
}
return 0;
}
void Item_row::bring_value()
{
for (uint i= 0; i < arg_count; i++)
items[i]->bring_value();
}
void Item_row::set_outer_resolving()
{
for (uint i= 0; i < arg_count; i++)
items[i]->set_outer_resolving();
}
bool Item_row::check_loop(uint id)
{
if (Item::check_loop(id))
return 1;
for (uint i= 0; i < arg_count; i++)
if (items[i]->check_loop(id))
return 1;
return 0;
}