Commit 12f7fb82 authored by dlenev@mysql.com's avatar dlenev@mysql.com

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

into mysql.com:/home/dlenev/src/mysql-4.1-memroot
parents d2a29047 7f7f7b0d
...@@ -485,3 +485,10 @@ MBRContains(GeomFromText('Polygon((0 0, 0 7, 7 7, 7 0, 0 0))'), a); ...@@ -485,3 +485,10 @@ MBRContains(GeomFromText('Polygon((0 0, 0 7, 7 7, 7 0, 0 0))'), a);
AsText(a) AsText(a)
POINT(1 1) POINT(1 1)
drop table t1; drop table t1;
create table t1 select POINT(1,3);
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`POINT(1,3)` longblob NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
...@@ -198,4 +198,12 @@ CDF32C20E7E020F0FBE1E0EBEAF3 CDF32C20E7E020F0FBE1E0EBEAF3 ...@@ -198,4 +198,12 @@ CDF32C20E7E020F0FBE1E0EBEAF3 CDF32C20E7E020F0FBE1E0EBEAF3
select hex(c1), hex(c2) from t1; select hex(c1), hex(c2) from t1;
hex(c1) hex(c2) hex(c1) hex(c2)
CDF32C20E7E020F0FBE1E0EBEAF3 CDF32C20E7E020F0FBE1E0EBEAF3 CDF32C20E7E020F0FBE1E0EBEAF3 CDF32C20E7E020F0FBE1E0EBEAF3
stop slave;
delete from t1;
change master to master_log_pos=5801;
start slave until master_log_file='master-bin.000001', master_log_pos=5937;
start slave;
select hex(c1), hex(c2) from t1;
hex(c1) hex(c2)
CDF32C20E7E020F0FBE1E0EBEAF3 CDF32C20E7E020F0FBE1E0EBEAF3
drop table t1; drop table t1;
...@@ -190,3 +190,7 @@ select AsText(a) from t1 where ...@@ -190,3 +190,7 @@ select AsText(a) from t1 where
and and
MBRContains(GeomFromText('Polygon((0 0, 0 7, 7 7, 7 0, 0 0))'), a); MBRContains(GeomFromText('Polygon((0 0, 0 7, 7 7, 7 0, 0 0))'), a);
drop table t1; drop table t1;
create table t1 select POINT(1,3);
show create table t1;
drop table t1;
...@@ -148,6 +148,24 @@ INSERT INTO t1 (c1, c2) VALUES (' ...@@ -148,6 +148,24 @@ INSERT INTO t1 (c1, c2) VALUES ('
select hex(c1), hex(c2) from t1; select hex(c1), hex(c2) from t1;
sync_slave_with_master; sync_slave_with_master;
select hex(c1), hex(c2) from t1; select hex(c1), hex(c2) from t1;
# Now test for BUG##5705: SET CHARATER_SET_SERVERetc will be lost if
# STOP SLAVE before following query
stop slave;
delete from t1;
change master to master_log_pos=5801;
start slave until master_log_file='master-bin.000001', master_log_pos=5937;
# Slave is supposed to stop _after_ the INSERT, even though 5937 is
# the position of the beginning of the INSERT; after SET slave is not
# supposed to increment position.
wait_for_slave_to_stop;
# When you merge this into 5.0 you will have to adjust positions
# above; the first master_log_pos above should be the one of the SET,
# the second should be the one of the INSERT.
start slave;
sync_with_master;
select hex(c1), hex(c2) from t1;
connection master; connection master;
drop table t1; drop table t1;
sync_slave_with_master; sync_slave_with_master;
...@@ -27,6 +27,13 @@ ...@@ -27,6 +27,13 @@
#include "sql_acl.h" #include "sql_acl.h"
#include <m_ctype.h> #include <m_ctype.h>
void Item_geometry_func::fix_length_and_dec()
{
collation.set(&my_charset_bin);
decimals=0;
max_length=MAX_BLOB_WIDTH;
}
String *Item_func_geometry_from_text::val_str(String *str) String *Item_func_geometry_from_text::val_str(String *str)
{ {
...@@ -44,6 +51,7 @@ String *Item_func_geometry_from_text::val_str(String *str) ...@@ -44,6 +51,7 @@ String *Item_func_geometry_from_text::val_str(String *str)
if ((arg_count == 2) && !args[1]->null_value) if ((arg_count == 2) && !args[1]->null_value)
srid= (uint32)args[1]->val_int(); srid= (uint32)args[1]->val_int();
str->set_charset(&my_charset_bin);
if (str->reserve(SRID_SIZE, 512)) if (str->reserve(SRID_SIZE, 512))
return 0; return 0;
str->length(0); str->length(0);
...@@ -54,12 +62,6 @@ String *Item_func_geometry_from_text::val_str(String *str) ...@@ -54,12 +62,6 @@ String *Item_func_geometry_from_text::val_str(String *str)
} }
void Item_func_geometry_from_text::fix_length_and_dec()
{
max_length=MAX_BLOB_WIDTH;
}
String *Item_func_geometry_from_wkb::val_str(String *str) String *Item_func_geometry_from_wkb::val_str(String *str)
{ {
DBUG_ASSERT(fixed == 1); DBUG_ASSERT(fixed == 1);
...@@ -71,6 +73,7 @@ String *Item_func_geometry_from_wkb::val_str(String *str) ...@@ -71,6 +73,7 @@ String *Item_func_geometry_from_wkb::val_str(String *str)
if ((arg_count == 2) && !args[1]->null_value) if ((arg_count == 2) && !args[1]->null_value)
srid= (uint32)args[1]->val_int(); srid= (uint32)args[1]->val_int();
str->set_charset(&my_charset_bin);
if (str->reserve(SRID_SIZE, 512)) if (str->reserve(SRID_SIZE, 512))
return 0; return 0;
str->length(0); str->length(0);
...@@ -84,12 +87,6 @@ String *Item_func_geometry_from_wkb::val_str(String *str) ...@@ -84,12 +87,6 @@ String *Item_func_geometry_from_wkb::val_str(String *str)
} }
void Item_func_geometry_from_wkb::fix_length_and_dec()
{
max_length=MAX_BLOB_WIDTH;
}
String *Item_func_as_wkt::val_str(String *str) String *Item_func_as_wkt::val_str(String *str)
{ {
DBUG_ASSERT(fixed == 1); DBUG_ASSERT(fixed == 1);
...@@ -138,12 +135,6 @@ String *Item_func_as_wkb::val_str(String *str) ...@@ -138,12 +135,6 @@ String *Item_func_as_wkb::val_str(String *str)
} }
void Item_func_as_wkb::fix_length_and_dec()
{
max_length= MAX_BLOB_WIDTH;
}
String *Item_func_geometry_type::val_str(String *str) String *Item_func_geometry_type::val_str(String *str)
{ {
DBUG_ASSERT(fixed == 1); DBUG_ASSERT(fixed == 1);
...@@ -180,6 +171,7 @@ String *Item_func_envelope::val_str(String *str) ...@@ -180,6 +171,7 @@ String *Item_func_envelope::val_str(String *str)
return 0; return 0;
srid= uint4korr(swkb->ptr()); srid= uint4korr(swkb->ptr());
str->set_charset(&my_charset_bin);
str->length(0); str->length(0);
if (str->reserve(SRID_SIZE, 512)) if (str->reserve(SRID_SIZE, 512))
return 0; return 0;
...@@ -202,6 +194,7 @@ String *Item_func_centroid::val_str(String *str) ...@@ -202,6 +194,7 @@ String *Item_func_centroid::val_str(String *str)
swkb->length() - SRID_SIZE)))) swkb->length() - SRID_SIZE))))
return 0; return 0;
str->set_charset(&my_charset_bin);
if (str->reserve(SRID_SIZE, 512)) if (str->reserve(SRID_SIZE, 512))
return 0; return 0;
str->length(0); str->length(0);
...@@ -232,6 +225,7 @@ String *Item_func_spatial_decomp::val_str(String *str) ...@@ -232,6 +225,7 @@ String *Item_func_spatial_decomp::val_str(String *str)
return 0; return 0;
srid= uint4korr(swkb->ptr()); srid= uint4korr(swkb->ptr());
str->set_charset(&my_charset_bin);
if (str->reserve(SRID_SIZE, 512)) if (str->reserve(SRID_SIZE, 512))
goto err; goto err;
str->length(0); str->length(0);
...@@ -279,6 +273,7 @@ String *Item_func_spatial_decomp_n::val_str(String *str) ...@@ -279,6 +273,7 @@ String *Item_func_spatial_decomp_n::val_str(String *str)
swkb->length() - SRID_SIZE))))) swkb->length() - SRID_SIZE)))))
return 0; return 0;
str->set_charset(&my_charset_bin);
if (str->reserve(SRID_SIZE, 512)) if (str->reserve(SRID_SIZE, 512))
goto err; goto err;
srid= uint4korr(swkb->ptr()); srid= uint4korr(swkb->ptr());
...@@ -333,6 +328,7 @@ String *Item_func_point::val_str(String *str) ...@@ -333,6 +328,7 @@ String *Item_func_point::val_str(String *str)
str->realloc(1 + 4 + SIZEOF_STORED_DOUBLE*2)))) str->realloc(1 + 4 + SIZEOF_STORED_DOUBLE*2))))
return 0; return 0;
str->set_charset(&my_charset_bin);
str->length(0); str->length(0);
str->q_append((char)Geometry::wkb_ndr); str->q_append((char)Geometry::wkb_ndr);
str->q_append((uint32)Geometry::wkb_point); str->q_append((uint32)Geometry::wkb_point);
...@@ -358,6 +354,7 @@ String *Item_func_spatial_collection::val_str(String *str) ...@@ -358,6 +354,7 @@ String *Item_func_spatial_collection::val_str(String *str)
String arg_value; String arg_value;
uint i; uint i;
str->set_charset(&my_charset_bin);
str->length(0); str->length(0);
if (str->reserve(1 + 4 + 4, 512)) if (str->reserve(1 + 4 + 4, 512))
goto err; goto err;
......
...@@ -23,24 +23,33 @@ ...@@ -23,24 +23,33 @@
#pragma interface /* gcc class implementation */ #pragma interface /* gcc class implementation */
#endif #endif
class Item_func_geometry_from_text: public Item_str_func class Item_geometry_func: public Item_str_func
{ {
public: public:
Item_func_geometry_from_text(Item *a) :Item_str_func(a) {} Item_geometry_func() :Item_str_func() {}
Item_func_geometry_from_text(Item *a, Item *srid) :Item_str_func(a, srid) {} Item_geometry_func(Item *a) :Item_str_func(a) {}
Item_geometry_func(Item *a,Item *b) :Item_str_func(a,b) {}
Item_geometry_func(Item *a,Item *b,Item *c) :Item_str_func(a,b,c) {}
Item_geometry_func(List<Item> &list) :Item_str_func(list) {}
void fix_length_and_dec();
};
class Item_func_geometry_from_text: public Item_geometry_func
{
public:
Item_func_geometry_from_text(Item *a) :Item_geometry_func(a) {}
Item_func_geometry_from_text(Item *a, Item *srid) :Item_geometry_func(a, srid) {}
const char *func_name() const { return "geometryfromtext"; } const char *func_name() const { return "geometryfromtext"; }
String *val_str(String *); String *val_str(String *);
void fix_length_and_dec();
}; };
class Item_func_geometry_from_wkb: public Item_str_func class Item_func_geometry_from_wkb: public Item_geometry_func
{ {
public: public:
Item_func_geometry_from_wkb(Item *a): Item_str_func(a) {} Item_func_geometry_from_wkb(Item *a): Item_geometry_func(a) {}
Item_func_geometry_from_wkb(Item *a, Item *srid): Item_str_func(a, srid) {} Item_func_geometry_from_wkb(Item *a, Item *srid): Item_geometry_func(a, srid) {}
const char *func_name() const { return "geometryfromwkb"; } const char *func_name() const { return "geometryfromwkb"; }
String *val_str(String *); String *val_str(String *);
void fix_length_and_dec();
}; };
class Item_func_as_wkt: public Item_str_func class Item_func_as_wkt: public Item_str_func
...@@ -52,13 +61,12 @@ public: ...@@ -52,13 +61,12 @@ public:
void fix_length_and_dec(); void fix_length_and_dec();
}; };
class Item_func_as_wkb: public Item_str_func class Item_func_as_wkb: public Item_geometry_func
{ {
public: public:
Item_func_as_wkb(Item *a): Item_str_func(a) {} Item_func_as_wkb(Item *a): Item_geometry_func(a) {}
const char *func_name() const { return "aswkb"; } const char *func_name() const { return "aswkb"; }
String *val_str(String *); String *val_str(String *);
void fix_length_and_dec();
}; };
class Item_func_geometry_type: public Item_str_func class Item_func_geometry_type: public Item_str_func
...@@ -73,40 +81,37 @@ public: ...@@ -73,40 +81,37 @@ public:
}; };
}; };
class Item_func_centroid: public Item_str_func class Item_func_centroid: public Item_geometry_func
{ {
public: public:
Item_func_centroid(Item *a): Item_str_func(a) {} Item_func_centroid(Item *a): Item_geometry_func(a) {}
const char *func_name() const { return "centroid"; } const char *func_name() const { return "centroid"; }
String *val_str(String *); String *val_str(String *);
void fix_length_and_dec(){max_length=MAX_BLOB_WIDTH;}
}; };
class Item_func_envelope: public Item_str_func class Item_func_envelope: public Item_geometry_func
{ {
public: public:
Item_func_envelope(Item *a): Item_str_func(a) {} Item_func_envelope(Item *a): Item_geometry_func(a) {}
const char *func_name() const { return "envelope"; } const char *func_name() const { return "envelope"; }
String *val_str(String *); String *val_str(String *);
void fix_length_and_dec(){max_length=MAX_BLOB_WIDTH;}
}; };
class Item_func_point: public Item_str_func class Item_func_point: public Item_geometry_func
{ {
public: public:
Item_func_point(Item *a, Item *b): Item_str_func(a, b) {} Item_func_point(Item *a, Item *b): Item_geometry_func(a, b) {}
Item_func_point(Item *a, Item *b, Item *srid): Item_str_func(a, b, srid) {} Item_func_point(Item *a, Item *b, Item *srid): Item_geometry_func(a, b, srid) {}
const char *func_name() const { return "point"; } const char *func_name() const { return "point"; }
String *val_str(String *); String *val_str(String *);
void fix_length_and_dec(){max_length=MAX_BLOB_WIDTH;}
}; };
class Item_func_spatial_decomp: public Item_str_func class Item_func_spatial_decomp: public Item_geometry_func
{ {
enum Functype decomp_func; enum Functype decomp_func;
public: public:
Item_func_spatial_decomp(Item *a, Item_func::Functype ft) : Item_func_spatial_decomp(Item *a, Item_func::Functype ft) :
Item_str_func(a) { decomp_func = ft; } Item_geometry_func(a) { decomp_func = ft; }
const char *func_name() const const char *func_name() const
{ {
switch (decomp_func) switch (decomp_func)
...@@ -123,15 +128,14 @@ public: ...@@ -123,15 +128,14 @@ public:
} }
} }
String *val_str(String *); String *val_str(String *);
void fix_length_and_dec(){max_length=MAX_BLOB_WIDTH;}
}; };
class Item_func_spatial_decomp_n: public Item_str_func class Item_func_spatial_decomp_n: public Item_geometry_func
{ {
enum Functype decomp_func_n; enum Functype decomp_func_n;
public: public:
Item_func_spatial_decomp_n(Item *a, Item *b, Item_func::Functype ft): Item_func_spatial_decomp_n(Item *a, Item *b, Item_func::Functype ft):
Item_str_func(a, b) { decomp_func_n = ft; } Item_geometry_func(a, b) { decomp_func_n = ft; }
const char *func_name() const const char *func_name() const
{ {
switch (decomp_func_n) switch (decomp_func_n)
...@@ -148,10 +152,9 @@ public: ...@@ -148,10 +152,9 @@ public:
} }
} }
String *val_str(String *); String *val_str(String *);
void fix_length_and_dec(){max_length=MAX_BLOB_WIDTH;}
}; };
class Item_func_spatial_collection: public Item_str_func class Item_func_spatial_collection: public Item_geometry_func
{ {
String tmp_value; String tmp_value;
enum Geometry::wkbType coll_type; enum Geometry::wkbType coll_type;
...@@ -159,13 +162,12 @@ class Item_func_spatial_collection: public Item_str_func ...@@ -159,13 +162,12 @@ class Item_func_spatial_collection: public Item_str_func
public: public:
Item_func_spatial_collection( Item_func_spatial_collection(
List<Item> &list, enum Geometry::wkbType ct, enum Geometry::wkbType it): List<Item> &list, enum Geometry::wkbType ct, enum Geometry::wkbType it):
Item_str_func(list) Item_geometry_func(list)
{ {
coll_type=ct; coll_type=ct;
item_type=it; item_type=it;
} }
String *val_str(String *); String *val_str(String *);
void fix_length_and_dec(){max_length=MAX_BLOB_WIDTH;}
const char *func_name() const { return "multipoint"; } const char *func_name() const { return "multipoint"; }
}; };
......
...@@ -1091,7 +1091,15 @@ end: ...@@ -1091,7 +1091,15 @@ end:
VOID(pthread_mutex_unlock(&LOCK_thread_count)); VOID(pthread_mutex_unlock(&LOCK_thread_count));
close_thread_tables(thd); close_thread_tables(thd);
free_root(&thd->mem_root,MYF(MY_KEEP_PREALLOC)); free_root(&thd->mem_root,MYF(MY_KEEP_PREALLOC));
return (thd->query_error ? thd->query_error : Log_event::exec_event(rli)); /*
If there was an error we stop. Otherwise we increment positions. Note that
we will not increment group* positions if we are just after a SET
ONE_SHOT, because SET ONE_SHOT should not be separated from its following
updating query.
*/
return (thd->query_error ? thd->query_error :
(thd->one_shot_set ? (rli->inc_event_relay_log_pos(get_event_len()),0) :
Log_event::exec_event(rli)));
} }
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment