[GIS]fix str_gis
This commit is contained in:
11
deps/oblib/src/lib/geo/ob_geo_utils.cpp
vendored
11
deps/oblib/src/lib/geo/ob_geo_utils.cpp
vendored
@ -653,6 +653,10 @@ int ObGeoTypeUtil::get_bo_from_wkb(const ObString &wkb, ObGeoWkbByteOrder &bo)
|
|||||||
int ObGeoTypeUtil::add_geo_version(ObIAllocator &allocator, const ObString &src, ObString &res_wkb)
|
int ObGeoTypeUtil::add_geo_version(ObIAllocator &allocator, const ObString &src, ObString &res_wkb)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
|
uint8_t version = (*(src.ptr() + WKB_GEO_SRID_SIZE));
|
||||||
|
if (ObGeoWkbByteOrder::BigEndian == static_cast<ObGeoWkbByteOrder>(version)
|
||||||
|
|| ObGeoWkbByteOrder::LittleEndian == static_cast<ObGeoWkbByteOrder>(version)) {
|
||||||
|
// without version, add version
|
||||||
uint64_t res_size = src.length() + WKB_VERSION_SIZE;
|
uint64_t res_size = src.length() + WKB_VERSION_SIZE;
|
||||||
char *res_buf = reinterpret_cast<char *>(allocator.alloc(res_size));
|
char *res_buf = reinterpret_cast<char *>(allocator.alloc(res_size));
|
||||||
if (OB_ISNULL(res_buf)) {
|
if (OB_ISNULL(res_buf)) {
|
||||||
@ -664,6 +668,13 @@ int ObGeoTypeUtil::add_geo_version(ObIAllocator &allocator, const ObString &src,
|
|||||||
MEMCPY(res_buf + WKB_OFFSET, src.ptr() + WKB_GEO_SRID_SIZE, src.length() - WKB_GEO_SRID_SIZE);
|
MEMCPY(res_buf + WKB_OFFSET, src.ptr() + WKB_GEO_SRID_SIZE, src.length() - WKB_GEO_SRID_SIZE);
|
||||||
res_wkb.assign_ptr(res_buf, res_size);
|
res_wkb.assign_ptr(res_buf, res_size);
|
||||||
}
|
}
|
||||||
|
} else if (IS_GEO_VERSION(version) && GET_GEO_VERSION(version) == GEO_VESION_1) {
|
||||||
|
res_wkb = src;
|
||||||
|
} else {
|
||||||
|
ret = OB_ERR_GIS_INVALID_DATA;
|
||||||
|
LOG_WARN("invalid byte order", K(ret), K(version));
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user