[GIS]fix str_gis
This commit is contained in:
parent
3f06f3e56b
commit
a9c2876a24
29
deps/oblib/src/lib/geo/ob_geo_utils.cpp
vendored
29
deps/oblib/src/lib/geo/ob_geo_utils.cpp
vendored
@ -653,17 +653,28 @@ 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 ret = OB_SUCCESS;
|
||||
uint64_t res_size = src.length() + WKB_VERSION_SIZE;
|
||||
char *res_buf = reinterpret_cast<char *>(allocator.alloc(res_size));
|
||||
if (OB_ISNULL(res_buf)) {
|
||||
ret = OB_ALLOCATE_MEMORY_FAILED;
|
||||
LOG_WARN("failed to alloc memory", K(ret), K(res_size));
|
||||
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;
|
||||
char *res_buf = reinterpret_cast<char *>(allocator.alloc(res_size));
|
||||
if (OB_ISNULL(res_buf)) {
|
||||
ret = OB_ALLOCATE_MEMORY_FAILED;
|
||||
LOG_WARN("failed to alloc memory", K(ret), K(res_size));
|
||||
} else {
|
||||
MEMCPY(res_buf, src.ptr(), WKB_GEO_SRID_SIZE);
|
||||
*(res_buf + WKB_GEO_SRID_SIZE) = ENCODE_GEO_VERSION(GEO_VESION_1);
|
||||
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);
|
||||
}
|
||||
} else if (IS_GEO_VERSION(version) && GET_GEO_VERSION(version) == GEO_VESION_1) {
|
||||
res_wkb = src;
|
||||
} else {
|
||||
MEMCPY(res_buf, src.ptr(), WKB_GEO_SRID_SIZE);
|
||||
*(res_buf + WKB_GEO_SRID_SIZE) = ENCODE_GEO_VERSION(GEO_VESION_1);
|
||||
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);
|
||||
ret = OB_ERR_GIS_INVALID_DATA;
|
||||
LOG_WARN("invalid byte order", K(ret), K(version));
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user