Merge rkalimullin@bk-internal.mysql.com:/home/bk/mysql-4.1

into mysql.r18.ru:/usr/home/ram/work/4.1.gis
This commit is contained in:
ram@mysql.r18.ru 2003-06-23 18:38:45 +05:00
commit f55db178a2
6 changed files with 59 additions and 36 deletions

View File

@ -62,7 +62,7 @@ EXTRA_DIST = $(EXTRA_SCRIPTS) \
mysqlaccess.conf \ mysqlaccess.conf \
mysqlbug mysqlbug
pkgdata_DATA = fill_help_tables.sql mysql_fix_privilege_tables.sql dist_pkgdata_DATA = fill_help_tables.sql mysql_fix_privilege_tables.sql
# mysqlbug should be distributed built so that people can report build # mysqlbug should be distributed built so that people can report build
# failures with it. # failures with it.

View File

@ -90,38 +90,58 @@ static bool convert_constant_item(Field *field, Item **item)
bool Item_bool_func2::set_cmp_charset(CHARSET_INFO *cs1, enum coercion co1, bool Item_bool_func2::set_cmp_charset(CHARSET_INFO *cs1, enum coercion co1,
CHARSET_INFO *cs2, enum coercion co2) CHARSET_INFO *cs2, enum coercion co2)
{ {
if ((cs1 == &my_charset_bin) || (cs2 == &my_charset_bin)) if (cs1 == &my_charset_bin || cs2 == &my_charset_bin)
{ {
cmp_charset= &my_charset_bin; cmp_charset= &my_charset_bin;
coercibility= co1 > co2 ? co1 : co2;
return 0; return 0;
} }
if ((co1 == COER_NOCOLL) || (co2 == COER_NOCOLL)) if (!my_charset_same(cs1, cs2))
return 1;
if (!my_charset_same(cs1,cs2))
return 1;
if (co1 < co2)
cmp_charset= cs1;
else if (co2 < co1)
cmp_charset= cs2;
else // co1==co2
{ {
if (cs1 == cs2) /*
We do allow to use BLOBS together with character strings
BLOBS have more precedance
*/
if ((co1 <= co2) && (cs1==&my_charset_bin))
{
cmp_charset= cs1; cmp_charset= cs1;
coercibility= co1;
}
else if ((co2 <= co1) && (cs2==&my_charset_bin))
{
cmp_charset= cs2;
coercibility= co2;
}
else else
{ {
if (co1 == COER_COERCIBLE) cmp_charset= 0;
{ coercibility= COER_NOCOLL;
CHARSET_INFO *c; return 1;
if ((c= get_charset_by_csname(cs1->csname, MY_CS_PRIMARY, MYF(0)))) }
{ }
cmp_charset= c; else if (co1 < co2)
return 0; {
} cmp_charset= cs1;
} coercibility= co1;
return 1; }
else if (co2 < co1)
{
cmp_charset= cs2;
coercibility= co1;
}
else
{
if (cs1 == cs2)
{
cmp_charset= cs1;
coercibility= co1;
}
else
{
coercibility= COER_NOCOLL;
cmp_charset= 0;
return (co1 == COER_EXPLICIT) ? 1 : 0;
} }
} }
return 0; return 0;

View File

@ -963,6 +963,8 @@ int yylex(void *arg, void *yythd)
void st_select_lex_node::init_query() void st_select_lex_node::init_query()
{ {
options= 0;
linkage= UNSPECIFIED_TYPE;
no_table_names_allowed= uncacheable= dependent= 0; no_table_names_allowed= uncacheable= dependent= 0;
ref_pointer_array= 0; ref_pointer_array= 0;
} }
@ -981,8 +983,8 @@ void st_select_lex_node::init_select()
void st_select_lex_unit::init_query() void st_select_lex_unit::init_query()
{ {
linkage= GLOBAL_OPTIONS_TYPE;
st_select_lex_node::init_query(); st_select_lex_node::init_query();
linkage= GLOBAL_OPTIONS_TYPE;
global_parameters= this; global_parameters= this;
select_limit_cnt= HA_POS_ERROR; select_limit_cnt= HA_POS_ERROR;
offset_limit_cnt= 0; offset_limit_cnt= 0;
@ -996,11 +998,10 @@ void st_select_lex_unit::init_query()
void st_select_lex::init_query() void st_select_lex::init_query()
{ {
st_select_lex_node::init_query(); st_select_lex_node::init_query();
table_list.elements= 0; table_list.empty();
table_list.first= 0;
table_list.next= (byte**) &table_list.first;
item_list.empty(); item_list.empty();
join= 0; join= 0;
where= 0;
olap= UNSPECIFIED_OLAP_TYPE; olap= UNSPECIFIED_OLAP_TYPE;
having_fix_field= 0; having_fix_field= 0;
with_wild= 0; with_wild= 0;
@ -1009,11 +1010,15 @@ void st_select_lex::init_query()
void st_select_lex::init_select() void st_select_lex::init_select()
{ {
st_select_lex_node::init_select(); st_select_lex_node::init_select();
group_list.elements= 0; group_list.empty();
group_list.first= 0; type= db= db1= table1= db2= table2= 0;
group_list.next= (byte**) &group_list.first; having= 0;
group_list.empty();
use_index_ptr= ignore_index_ptr= 0;
table_join_options= 0;
in_sum_expr= with_wild= 0;
options= 0; options= 0;
where= having= 0; braces= 0;
when_list.empty(); when_list.empty();
expr_list.empty(); expr_list.empty();
interval_list.empty(); interval_list.empty();

View File

@ -215,8 +215,7 @@ public:
static void *operator new(size_t size) static void *operator new(size_t size)
{ {
// TODO: Change to alloc() and explicitely clear elements in constructors return (void*) sql_alloc((uint) size);
return (void*) sql_calloc((uint) size);
} }
static void operator delete(void *ptr,size_t size) {} static void operator delete(void *ptr,size_t size) {}
st_select_lex_node(): linkage(UNSPECIFIED_TYPE) {} st_select_lex_node(): linkage(UNSPECIFIED_TYPE) {}

View File

@ -3590,7 +3590,7 @@ void mysql_init_multi_delete(LEX *lex)
lex->select_lex.select_limit= lex->unit.select_limit_cnt= lex->select_lex.select_limit= lex->unit.select_limit_cnt=
HA_POS_ERROR; HA_POS_ERROR;
lex->auxilliary_table_list= lex->select_lex.table_list; lex->auxilliary_table_list= lex->select_lex.table_list;
lex->select_lex.init_query(); lex->select_lex.table_list.empty();
} }

View File

@ -3571,7 +3571,6 @@ delete:
{ {
LEX *lex= Lex; LEX *lex= Lex;
lex->sql_command= SQLCOM_DELETE; lex->sql_command= SQLCOM_DELETE;
lex->select_lex.options= 0;
lex->lock_option= lex->thd->update_lock_default; lex->lock_option= lex->thd->update_lock_default;
lex->select_lex.init_order(); lex->select_lex.init_order();
} }