summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <lars@mysql.com>2005-05-20 15:30:15 +0200
committerunknown <lars@mysql.com>2005-05-20 15:30:15 +0200
commit355000fa4ef1c4e67a72e5f3d81fd412c54fd460 (patch)
tree32b3b5e0eb0a6209287dd3bac26b07a3a41f6468 /sql
parent9364130a1a55cbe0d3db01fe0b58f722d8683ee1 (diff)
parentf4a584f5013373f3c939df7cd7ef7ab444b18168 (diff)
downloadmariadb-git-355000fa4ef1c4e67a72e5f3d81fd412c54fd460.tar.gz
Merge mysql.com:/home/bkroot/mysql-4.1 into mysql.com:/home/bk/c4944-4.1
Diffstat (limited to 'sql')
-rw-r--r--sql/spatial.cc47
-rw-r--r--sql/sql_udf.cc2
2 files changed, 23 insertions, 26 deletions
diff --git a/sql/spatial.cc b/sql/spatial.cc
index bcfefd9dde8..1afb7bb7dec 100644
--- a/sql/spatial.cc
+++ b/sql/spatial.cc
@@ -96,6 +96,12 @@ static Geometry::Class_info
geometrycollection_class("GEOMETRYCOLLECTION",Geometry::wkb_geometrycollection,
create_geometrycollection);
+static void get_point(double *x, double *y, const char *data)
+{
+ float8get(*x, data);
+ float8get(*y, data + SIZEOF_STORED_DOUBLE);
+}
+
/***************************** Geometry *******************************/
Geometry::Class_info *Geometry::find_class(const char *name, uint32 len)
@@ -266,14 +272,13 @@ const char *Geometry::append_points(String *txt, uint32 n_points,
{
while (n_points--)
{
- double d;
+ double x,y;
data+= offset;
- float8get(d, data);
- txt->qs_append(d);
- txt->qs_append(' ');
- float8get(d, data + SIZEOF_STORED_DOUBLE);
+ get_point(&x, &y, data);
data+= SIZEOF_STORED_DOUBLE * 2;
- txt->qs_append(d);
+ txt->qs_append(x);
+ txt->qs_append(' ');
+ txt->qs_append(y);
txt->qs_append(',');
}
return data;
@@ -426,8 +431,7 @@ bool Gis_line_string::get_data_as_wkt(String *txt, const char **end) const
while (n_points--)
{
double x, y;
- float8get(x, data);
- float8get(y, data + SIZEOF_STORED_DOUBLE);
+ get_point(&x, &y, data);
data+= SIZEOF_STORED_DOUBLE * 2;
txt->qs_append(x);
txt->qs_append(' ');
@@ -460,15 +464,13 @@ int Gis_line_string::length(double *len) const
if (n_points < 1 || no_data(data, SIZEOF_STORED_DOUBLE * 2 * n_points))
return 1;
- float8get(prev_x, data);
- float8get(prev_y, data + SIZEOF_STORED_DOUBLE);
+ get_point(&prev_x, &prev_y, data);
data+= SIZEOF_STORED_DOUBLE*2;
while (--n_points)
{
double x, y;
- float8get(x, data);
- float8get(y, data + SIZEOF_STORED_DOUBLE);
+ get_point(&x, &y, data);
data+= SIZEOF_STORED_DOUBLE * 2;
*len+= sqrt(pow(prev_x-x,2)+pow(prev_y-y,2));
prev_x= x;
@@ -497,13 +499,11 @@ int Gis_line_string::is_closed(int *closed) const
return 1;
/* Get first point */
- float8get(x1, data);
- float8get(y1, data + SIZEOF_STORED_DOUBLE);
+ get_point(&x1, &y1, data);
/* get last point */
data+= SIZEOF_STORED_DOUBLE*2 + (n_points-2)*POINT_DATA_SIZE;
- float8get(x2, data);
- float8get(y2, data + SIZEOF_STORED_DOUBLE);
+ get_point(&x2, &y2, data);
*closed= (x1==x2) && (y1==y2);
return 0;
@@ -681,15 +681,13 @@ int Gis_polygon::area(double *ar, const char **end_of_data) const
n_points= uint4korr(data);
if (no_data(data, (SIZEOF_STORED_DOUBLE*2) * n_points))
return 1;
- float8get(prev_x, data+4);
- float8get(prev_y, data+(4+SIZEOF_STORED_DOUBLE));
+ get_point(&prev_x, &prev_y, data+4);
data+= (4+SIZEOF_STORED_DOUBLE*2);
while (--n_points) // One point is already read
{
double x, y;
- float8get(x, data);
- float8get(y, data + SIZEOF_STORED_DOUBLE);
+ get_point(&x, &y, data);
data+= (SIZEOF_STORED_DOUBLE*2);
/* QQ: Is the following prev_x+x right ? */
lr_area+= (prev_x + x)* (prev_y - y);
@@ -779,7 +777,8 @@ int Gis_polygon::interior_ring_n(uint32 num, String *result) const
int Gis_polygon::centroid_xy(double *x, double *y) const
{
uint32 n_linear_rings;
- double res_area, res_cx, res_cy;
+ double res_area;
+ double res_cx, res_cy;
const char *data= m_data;
bool first_loop= 1;
LINT_INIT(res_area);
@@ -805,15 +804,13 @@ int Gis_polygon::centroid_xy(double *x, double *y) const
data+= 4;
if (no_data(data, (SIZEOF_STORED_DOUBLE*2) * n_points))
return 1;
- float8get(prev_x, data);
- float8get(prev_y, data+SIZEOF_STORED_DOUBLE);
+ get_point(&prev_x, &prev_y, data);
data+= (SIZEOF_STORED_DOUBLE*2);
while (--n_points) // One point is already read
{
double x, y;
- float8get(x, data);
- float8get(y, data + SIZEOF_STORED_DOUBLE);
+ get_point(&x, &y, data);
data+= (SIZEOF_STORED_DOUBLE*2);
/* QQ: Is the following prev_x+x right ? */
cur_area+= (prev_x + x) * (prev_y - y);
diff --git a/sql/sql_udf.cc b/sql/sql_udf.cc
index 31205c0a614..126d2e5d894 100644
--- a/sql/sql_udf.cc
+++ b/sql/sql_udf.cc
@@ -411,7 +411,7 @@ int mysql_create_function(THD *thd,udf_func *udf)
This is done to ensure that only approved dll from the system
directories are used (to make this even remotely secure).
*/
- if (strchr(udf->dl, '/') || IF_WIN(strchr(dl_name, '\\'),0))
+ if (strchr(udf->dl, '/') || IF_WIN(strchr(udf->dl, '\\'),0))
{
send_error(thd, ER_UDF_NO_PATHS,ER(ER_UDF_NO_PATHS));
DBUG_RETURN(1);