summaryrefslogtreecommitdiff
path: root/sql/item_func.cc
diff options
context:
space:
mode:
authorram@mysql.r18.ru <>2003-03-18 15:30:32 +0400
committerram@mysql.r18.ru <>2003-03-18 15:30:32 +0400
commit031ac2a7b2ba8eb881fc24d0429922cd8c42e9b9 (patch)
tree0e83c851e37727716fb38186353324ae67952771 /sql/item_func.cc
parent34681a80360955a1aa0718e77fac94ae62b85fc8 (diff)
downloadmariadb-git-031ac2a7b2ba8eb881fc24d0429922cd8c42e9b9.tar.gz
SRID support.
GeomertyFromWKB() function. SRID() function. ::store() methods for Field_geom. Code cleanup.
Diffstat (limited to 'sql/item_func.cc')
-rw-r--r--sql/item_func.cc120
1 files changed, 67 insertions, 53 deletions
diff --git a/sql/item_func.cc b/sql/item_func.cc
index 2099a5a4ccf..6bd61a4e1e2 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -2706,115 +2706,129 @@ longlong Item_func_is_free_lock::val_int()
longlong Item_func_dimension::val_int()
{
uint32 dim;
- String *wkb=args[0]->val_str(&value);
+ String *swkb= args[0]->val_str(&value);
Geometry geom;
- null_value= (!wkb ||
- args[0]->null_value ||
- geom.create_from_wkb(wkb->ptr(),wkb->length()) ||
- geom.dimension(&dim));
-
+ null_value= (!swkb ||
+ args[0]->null_value ||
+ geom.create_from_wkb(swkb->ptr() + SRID_SIZE,
+ swkb->length() - SRID_SIZE) ||
+ geom.dimension(&dim));
return (longlong) dim;
}
longlong Item_func_numinteriorring::val_int()
{
uint32 num;
- String *wkb=args[0]->val_str(&value);
+ String *swkb= args[0]->val_str(&value);
Geometry geom;
- null_value= (!wkb ||
- geom.create_from_wkb(wkb->ptr(),wkb->length()) ||
- !GEOM_METHOD_PRESENT(geom,num_interior_ring) ||
+ null_value= (!swkb ||
+ geom.create_from_wkb(swkb->ptr() + SRID_SIZE,
+ swkb->length() - SRID_SIZE) ||
+ !GEOM_METHOD_PRESENT(geom, num_interior_ring) ||
geom.num_interior_ring(&num));
-
return (longlong) num;
}
longlong Item_func_numgeometries::val_int()
{
- uint32 num=0;
- String *wkb=args[0]->val_str(&value);
+ uint32 num= 0;
+ String *swkb= args[0]->val_str(&value);
Geometry geom;
- null_value= (!wkb ||
- geom.create_from_wkb(wkb->ptr(),wkb->length()) ||
- !GEOM_METHOD_PRESENT(geom,num_geometries) ||
- geom.num_geometries(&num));
-
+ null_value= (!swkb ||
+ geom.create_from_wkb(swkb->ptr() + SRID_SIZE,
+ swkb->length() - SRID_SIZE) ||
+ !GEOM_METHOD_PRESENT(geom, num_geometries) ||
+ geom.num_geometries(&num));
return (longlong) num;
}
longlong Item_func_numpoints::val_int()
{
- uint32 num=0;
- String *wkb=args[0]->val_str(&value);
+ uint32 num;
+ String *swkb= args[0]->val_str(&value);
Geometry geom;
- null_value= (!wkb ||
- args[0]->null_value ||
- geom.create_from_wkb(wkb->ptr(),wkb->length()) ||
- !GEOM_METHOD_PRESENT(geom,num_points) ||
- geom.num_points(&num));
-
+ null_value= (!swkb ||
+ args[0]->null_value ||
+ geom.create_from_wkb(swkb->ptr() + SRID_SIZE,
+ swkb->length() - SRID_SIZE) ||
+ !GEOM_METHOD_PRESENT(geom, num_points) ||
+ geom.num_points(&num));
return (longlong) num;
}
double Item_func_x::val()
{
- double res=0;
- String *wkb=args[0]->val_str(&value);
+ double res;
+ String *swkb= args[0]->val_str(&value);
Geometry geom;
- null_value= (!wkb ||
- geom.create_from_wkb(wkb->ptr(),wkb->length()) ||
- !GEOM_METHOD_PRESENT(geom,get_x) ||
- geom.get_x(&res));
-
+ null_value= (!swkb ||
+ geom.create_from_wkb(swkb->ptr() + SRID_SIZE,
+ swkb->length() - SRID_SIZE) ||
+ !GEOM_METHOD_PRESENT(geom, get_x) ||
+ geom.get_x(&res));
return res;
}
double Item_func_y::val()
{
- double res=0;
- String *wkb=args[0]->val_str(&value);
+ double res;
+ String *swkb= args[0]->val_str(&value);
Geometry geom;
- null_value= (!wkb ||
- geom.create_from_wkb(wkb->ptr(),wkb->length()) ||
- !GEOM_METHOD_PRESENT(geom,get_y) ||
- geom.get_y(&res));
-
+ null_value= (!swkb ||
+ geom.create_from_wkb(swkb->ptr() + SRID_SIZE,
+ swkb->length() - SRID_SIZE) ||
+ !GEOM_METHOD_PRESENT(geom, get_y) ||
+ geom.get_y(&res));
return res;
}
double Item_func_area::val()
{
- double res=0;
- String *wkb=args[0]->val_str(&value);
+ double res;
+ String *swkb= args[0]->val_str(&value);
Geometry geom;
- null_value= (!wkb ||
- geom.create_from_wkb(wkb->ptr(),wkb->length()) ||
- !GEOM_METHOD_PRESENT(geom,area) ||
- geom.area(&res));
-
+ null_value= (!swkb ||
+ geom.create_from_wkb(swkb->ptr() + SRID_SIZE,
+ swkb->length() - SRID_SIZE) ||
+ !GEOM_METHOD_PRESENT(geom, area) ||
+ geom.area(&res));
return res;
}
double Item_func_glength::val()
{
- double res=0;
- String *wkb=args[0]->val_str(&value);
+ double res;
+ String *swkb= args[0]->val_str(&value);
Geometry geom;
- null_value= (!wkb ||
- geom.create_from_wkb(wkb->ptr(),wkb->length()) ||
- !GEOM_METHOD_PRESENT(geom,length) ||
- geom.length(&res));
+ null_value= (!swkb ||
+ geom.create_from_wkb(swkb->ptr() + SRID_SIZE,
+ swkb->length() - SRID_SIZE) ||
+ !GEOM_METHOD_PRESENT(geom, length) ||
+ geom.length(&res));
return res;
}
+
+
+longlong Item_func_srid::val_int()
+{
+ String *swkb= args[0]->val_str(&value);
+ Geometry geom;
+
+ null_value= (!swkb ||
+ geom.create_from_wkb(swkb->ptr() + SRID_SIZE,
+ swkb->length() - SRID_SIZE));
+ uint32 res= uint4korr(swkb->ptr());
+ return (longlong) res;
+}