summaryrefslogtreecommitdiff
path: root/sql/item_geofunc.h
diff options
context:
space:
mode:
authorunknown <ram@mysql.r18.ru>2003-05-30 15:22:34 +0500
committerunknown <ram@mysql.r18.ru>2003-05-30 15:22:34 +0500
commit7a99669fbcf534d7e4fa869c4d729f21bc625b1b (patch)
tree63740c308f1012b76e837db49fc103d44503c8db /sql/item_geofunc.h
parent38c5034b196e9a509d27c5dac90edc4a99f9ab69 (diff)
downloadmariadb-git-7a99669fbcf534d7e4fa869c4d729f21bc625b1b.tar.gz
Moved spatial functions to the sql/item_geofunc.cc file.
BitKeeper/etc/ignore: Added libmysqld/item_geofunc.cc to the ignore list
Diffstat (limited to 'sql/item_geofunc.h')
-rw-r--r--sql/item_geofunc.h360
1 files changed, 360 insertions, 0 deletions
diff --git a/sql/item_geofunc.h b/sql/item_geofunc.h
new file mode 100644
index 00000000000..21e94735f31
--- /dev/null
+++ b/sql/item_geofunc.h
@@ -0,0 +1,360 @@
+/* Copyright (C) 2000-2003 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 */
+
+
+/* This file defines all spatial functions */
+
+#ifdef __GNUC__
+#pragma interface /* gcc class implementation */
+#endif
+
+#define SRID_SIZE sizeof(uint32)
+
+class Item_func_geometry_from_text: public Item_str_func
+{
+public:
+ Item_func_geometry_from_text(Item *a) :Item_str_func(a) {}
+ Item_func_geometry_from_text(Item *a, Item *srid) :Item_str_func(a, srid) {}
+ const char *func_name() const { return "geometryfromtext"; }
+ String *val_str(String *);
+ void fix_length_and_dec();
+};
+
+class Item_func_geometry_from_wkb: public Item_str_func
+{
+public:
+ Item_func_geometry_from_wkb(Item *a): Item_str_func(a) {}
+ Item_func_geometry_from_wkb(Item *a, Item *srid): Item_str_func(a, srid) {}
+ const char *func_name() const { return "geometryfromwkb"; }
+ String *val_str(String *);
+ void fix_length_and_dec();
+};
+
+class Item_func_as_text: public Item_str_func
+{
+public:
+ Item_func_as_text(Item *a): Item_str_func(a) {}
+ const char *func_name() const { return "astext"; }
+ String *val_str(String *);
+ void fix_length_and_dec();
+};
+
+class Item_func_as_wkb: public Item_str_func
+{
+public:
+ Item_func_as_wkb(Item *a): Item_str_func(a) {}
+ const char *func_name() const { return "aswkb"; }
+ String *val_str(String *);
+ void fix_length_and_dec();
+};
+
+class Item_func_geometry_type: public Item_str_func
+{
+public:
+ Item_func_geometry_type(Item *a): Item_str_func(a) {}
+ String *val_str(String *);
+ const char *func_name() const { return "geometrytype"; }
+ void fix_length_and_dec()
+ {
+ max_length=20; // "GeometryCollection" is the most long
+ };
+};
+
+class Item_func_centroid: public Item_str_func
+{
+public:
+ Item_func_centroid(Item *a): Item_str_func(a) {}
+ const char *func_name() const { return "centroid"; }
+ String *val_str(String *);
+ void fix_length_and_dec(){max_length=MAX_BLOB_WIDTH;}
+};
+
+class Item_func_envelope: public Item_str_func
+{
+public:
+ Item_func_envelope(Item *a): Item_str_func(a) {}
+ const char *func_name() const { return "envelope"; }
+ String *val_str(String *);
+ void fix_length_and_dec(){max_length=MAX_BLOB_WIDTH;}
+};
+
+class Item_func_point: public Item_str_func
+{
+public:
+ Item_func_point(Item *a, Item *b): Item_str_func(a, b) {}
+ Item_func_point(Item *a, Item *b, Item *srid): Item_str_func(a, b, srid) {}
+ const char *func_name() const { return "point"; }
+ String *val_str(String *);
+ void fix_length_and_dec(){max_length=MAX_BLOB_WIDTH;}
+};
+
+class Item_func_spatial_decomp: public Item_str_func
+{
+ enum Functype decomp_func;
+public:
+ Item_func_spatial_decomp(Item *a, Item_func::Functype ft) :
+ Item_str_func(a) { decomp_func = ft; }
+ const char *func_name() const
+ {
+ switch (decomp_func)
+ {
+ case SP_STARTPOINT:
+ return "startpoint";
+ case SP_ENDPOINT:
+ return "endpoint";
+ case SP_EXTERIORRING:
+ return "exteriorring";
+ default:
+ return "spatial_decomp_unknown";
+ }
+ }
+ String *val_str(String *);
+ void fix_length_and_dec(){max_length=MAX_BLOB_WIDTH;}
+};
+
+class Item_func_spatial_decomp_n: public Item_str_func
+{
+ enum Functype decomp_func_n;
+public:
+ Item_func_spatial_decomp_n(Item *a, Item *b, Item_func::Functype ft):
+ Item_str_func(a, b) { decomp_func_n = ft; }
+ const char *func_name() const
+ {
+ switch (decomp_func_n)
+ {
+ case SP_POINTN:
+ return "pointn";
+ case SP_GEOMETRYN:
+ return "geometryn";
+ case SP_INTERIORRINGN:
+ return "interiorringn";
+ default:
+ return "spatial_decomp_n_unknown";
+ }
+ }
+ String *val_str(String *);
+ void fix_length_and_dec(){max_length=MAX_BLOB_WIDTH;}
+};
+
+class Item_func_spatial_collection: public Item_str_func
+{
+ String tmp_value;
+ enum Geometry::wkbType coll_type;
+ enum Geometry::wkbType item_type;
+public:
+ Item_func_spatial_collection(
+ List<Item> &list, enum Geometry::wkbType ct, enum Geometry::wkbType it):
+ Item_str_func(list)
+ {
+ coll_type=ct;
+ item_type=it;
+ }
+ String *val_str(String *);
+ void fix_length_and_dec(){max_length=MAX_BLOB_WIDTH;}
+ const char *func_name() const { return "multipoint"; }
+};
+
+#ifdef HAVE_COMPRESS
+
+class Item_func_compress: public Item_str_func
+{
+ String buffer;
+public:
+ Item_func_compress(Item *a):Item_str_func(a){}
+ String *val_str(String *);
+ void fix_length_and_dec(){max_length= (args[0]->max_length*120)/100+12;}
+ const char *func_name() const{return "compress";}
+};
+
+class Item_func_uncompress: public Item_str_func
+{
+ String buffer;
+public:
+ Item_func_uncompress(Item *a): Item_str_func(a){}
+ String *val_str(String *);
+ void fix_length_and_dec(){max_length= MAX_BLOB_WIDTH;}
+ const char *func_name() const{return "uncompress";}
+};
+
+#endif
+
+/*
+ Spatial relations
+*/
+
+class Item_func_spatial_rel: public Item_bool_func2
+{
+ enum Functype spatial_rel;
+public:
+ Item_func_spatial_rel(Item *a,Item *b, enum Functype sp_rel) :
+ Item_bool_func2(a,b) { spatial_rel = sp_rel; }
+ longlong val_int();
+ enum Functype functype() const
+ {
+ switch (spatial_rel) {
+ case SP_CONTAINS_FUNC:
+ return SP_WITHIN_FUNC;
+ case SP_WITHIN_FUNC:
+ return SP_CONTAINS_FUNC;
+ default:
+ return spatial_rel;
+ }
+ }
+ enum Functype rev_functype() const { return spatial_rel; }
+ const char *func_name() const
+ {
+ switch (spatial_rel) {
+ case SP_CONTAINS_FUNC:
+ return "contains";
+ case SP_WITHIN_FUNC:
+ return "within";
+ case SP_EQUALS_FUNC:
+ return "equals";
+ case SP_DISJOINT_FUNC:
+ return "disjoint";
+ case SP_INTERSECTS_FUNC:
+ return "intersects";
+ case SP_TOUCHES_FUNC:
+ return "touches";
+ case SP_CROSSES_FUNC:
+ return "crosses";
+ case SP_OVERLAPS_FUNC:
+ return "overlaps";
+ default:
+ return "sp_unknown";
+ }
+ }
+};
+
+class Item_func_isempty: public Item_bool_func
+{
+public:
+ Item_func_isempty(Item *a): Item_bool_func(a) {}
+ longlong val_int();
+ optimize_type select_optimize() const { return OPTIMIZE_NONE; }
+ const char *func_name() const { return "isempty"; }
+};
+
+class Item_func_issimple: public Item_bool_func
+{
+public:
+ Item_func_issimple(Item *a): Item_bool_func(a) {}
+ longlong val_int();
+ optimize_type select_optimize() const { return OPTIMIZE_NONE; }
+ const char *func_name() const { return "issimple"; }
+};
+
+class Item_func_isclosed: public Item_bool_func
+{
+public:
+ Item_func_isclosed(Item *a): Item_bool_func(a) {}
+ longlong val_int();
+ optimize_type select_optimize() const { return OPTIMIZE_NONE; }
+ const char *func_name() const { return "isclosed"; }
+};
+
+class Item_func_dimension: public Item_int_func
+{
+ String value;
+public:
+ Item_func_dimension(Item *a): Item_int_func(a) {}
+ longlong val_int();
+ const char *func_name() const { return "dimension"; }
+ void fix_length_and_dec() { max_length=10; }
+};
+
+class Item_func_x: public Item_real_func
+{
+ String value;
+public:
+ Item_func_x(Item *a): Item_real_func(a) {}
+ double val();
+ const char *func_name() const { return "x"; }
+};
+
+
+class Item_func_y: public Item_real_func
+{
+ String value;
+public:
+ Item_func_y(Item *a): Item_real_func(a) {}
+ double val();
+ const char *func_name() const { return "y"; }
+};
+
+
+class Item_func_numgeometries: public Item_int_func
+{
+ String value;
+public:
+ Item_func_numgeometries(Item *a): Item_int_func(a) {}
+ longlong val_int();
+ const char *func_name() const { return "numgeometries"; }
+ void fix_length_and_dec() { max_length=10; }
+};
+
+
+class Item_func_numinteriorring: public Item_int_func
+{
+ String value;
+public:
+ Item_func_numinteriorring(Item *a): Item_int_func(a) {}
+ longlong val_int();
+ const char *func_name() const { return "numinteriorring"; }
+ void fix_length_and_dec() { max_length=10; }
+};
+
+
+class Item_func_numpoints: public Item_int_func
+{
+ String value;
+public:
+ Item_func_numpoints(Item *a): Item_int_func(a) {}
+ longlong val_int();
+ const char *func_name() const { return "numpoints"; }
+ void fix_length_and_dec() { max_length=10; }
+};
+
+
+class Item_func_area: public Item_real_func
+{
+ String value;
+public:
+ Item_func_area(Item *a): Item_real_func(a) {}
+ double val();
+ const char *func_name() const { return "area"; }
+};
+
+
+class Item_func_glength: public Item_real_func
+{
+ String value;
+public:
+ Item_func_glength(Item *a): Item_real_func(a) {}
+ double val();
+ const char *func_name() const { return "glength"; }
+};
+
+
+class Item_func_srid: public Item_int_func
+{
+ String value;
+public:
+ Item_func_srid(Item *a): Item_int_func(a) {}
+ longlong val_int();
+ const char *func_name() const { return "srid"; }
+ void fix_length_and_dec() { max_length= 10; }
+};