You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

408 lines
11 KiB

# Copyright (c) 2014, Oracle and/or its affiliates
# Copyright (c) 2024, MariaDB Corporation.
#
# 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; version 2 of the License.
#
# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA
-- disable_warnings
#####################################################################
# ST_GEOHASH()
#####################################################################
# Check for all valid inputs
--echo # valid inputs
SELECT ST_GEOHASH(0,0,1);
SELECT ST_GEOHASH(180,0,20);
SELECT ST_GEOHASH(-180,0,20);
SELECT ST_GEOHASH(0,90,20);
SELECT ST_GEOHASH(0,-90,20);
SELECT ST_GEOHASH(180,90,20);
SELECT ST_GEOHASH(180,-90,20);
SELECT ST_GEOHASH(-180,90,20);
SELECT ST_GEOHASH(-180,-90,20);
SELECT ST_GEOHASH(100,45,5);
SELECT ST_GEOHASH(100,-45,10);
SELECT ST_GEOHASH(-100,45,+50);
SELECT ST_GEOHASH(0.0001,0.0001,10);
SELECT ST_GEOHASH(0.0001,-0.0001,30);
SELECT ST_GEOHASH(-0.0001,0.0001,90);
SELECT ST_GEOHASH(-0.0001,-0.0001,100);
SELECT ST_GEOHASH("",90,10);
SELECT ST_GEOHASH(0,"90",10);
SELECT ST_GEOHASH("0","0",10);
SELECT ST_GEOHASH(180,90,"20");
SELECT ST_GEOHASH("180","90","20");
SELECT ST_GEOHASH("***",90,"20");
SELECT ST_GEOHASH(180,"***",20);
SELECT ST_GEOHASH("abcd",90,20);
SELECT ST_GEOHASH(180,"abcd",25-5);
SELECT ST_GEOHASH(NULL,90,10);
SELECT ST_GEOHASH(180,NULL,10);
SELECT ST_GEOHASH(180,90,NULL);
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(0 0)'),10);
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(180 0)'),20);
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(-180 0)'),25);
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(0 90)'),30);
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(0 -90)'),35);
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(180 90)'),40);
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(180 -90)'),45);
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(-180 90)'),50);
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(-180 -90)'),55);
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(100 45)'),60);
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(100 -45)'),65);
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(-100 45)'),70);
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(-100 -45)'),75);
SELECT ST_GEOHASH(ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('POINT(0.0001 0.0001)'))),80);
SELECT ST_GEOHASH(ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('POINT(0.0001 -0.0001)'))),85);
SELECT ST_GEOHASH(ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('POINT(-0.0001 0.0001)'))),90);
SELECT ST_GEOHASH(ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('POINT(-0.0001 -0.0001)'))),100);
SELECT ST_GEOHASH(ST_GEOMFROMWKB(0x010100000000000000008066400000000000805640),20);
SELECT ST_GEOHASH(ST_GEOMFROMWKB(0x010100000000000000008066C00000000000805640),20);
SELECT ST_GEOHASH(ST_GEOMFROMWKB(0x00000000014066800000000000C056800000000000),20);
SELECT ST_GEOHASH(ST_GEOMFROMWKB(0x0000000001C066800000000000C056800000000000),20);
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(0 0)'),"1");
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(0 0)')," 10 ");
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(0 0)'),"+100");
SELECT ST_GEOHASH(NULL,100);
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(-0.0001 -0.0001)'),NULL);
SELECT ST_GEOHASH(ST_DIFFERENCE(ST_GEOMFROMTEXT('POINT(180 90)'),ST_GEOMFROMTEXT('POINT(0 0)')),20);
SELECT ST_GEOHASH(ST_DIFFERENCE(ST_GEOMFROMTEXT('POINT(-180 90)'),ST_GEOMFROMTEXT('MULTIPOINT(0 0,100 100)')),20);
SELECT ST_GEOHASH(ST_INTERSECTION(ST_GEOMFROMTEXT('POINT(180 -90)'),ST_GEOMFROMTEXT('POINT(180 -90)')),20);
SELECT ST_GEOHASH(ST_INTERSECTION(ST_GEOMFROMTEXT('POINT(-180 -90)'),ST_GEOMFROMTEXT('POINT(-180 -90)')),20);
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(180 90)'),(CAST(10 AS BINARY)));
SELECT ST_GEOHASH((CAST(10 AS BINARY)),20,1);
SELECT ST_GEOHASH(10,(CAST(20 AS BINARY)),1);
SELECT ST_GEOHASH((CAST(10 AS BINARY)),(CAST(20 AS BINARY)),1);
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT()'),20);
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(1)'),20);
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(1 a)'),20);
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(180,90)'),20);
# Invalid inputs
--echo # invalid inputs
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(181,0,10);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(1000,90,10);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(180.0000000000001,-90,10);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(-181,0,10);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(-1000,90,10);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(-180.0000000000001,-90,10);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(0,91,10);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(180,500,10);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(-180,90.0000000000001,10);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(0,-91,10);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(180,-500,10);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(-180,-90.0000000000001,10);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(180,90,0);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(-180,90,-1);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(180,-90,-100);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(-180,-90,101);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(0,90,1000);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH("181",90,20);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH("-181",90,20);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(180,"91",20);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(180,"-91",20);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(180,90,"0");
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(180,90,"-1");
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(180,90,"-100");
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(180,90,"101");
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(180,90,"1000");
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(180,90,"");
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(180,90,"****");
--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
SELECT ST_GEOHASH();
--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
SELECT ST_GEOHASH(1);
--error ER_GIS_INVALID_DATA
SELECT ST_GEOHASH(1,2);
# --error ER_GIS_INVALID_DATA
# SELECT ST_GEOHASH(-100,-45,100.1);
--error ER_PARSE_ERROR
SELECT ST_GEOHASH(, ,);
--error ER_PARSE_ERROR
SELECT ST_GEOHASH(1,2,);
--error ER_PARSE_ERROR
SELECT ST_GEOHASH(*,0,10);
--error ER_PARSE_ERROR
SELECT ST_GEOHASH(0,*,10);
--error ER_PARSE_ERROR
SELECT ST_GEOHASH(0,0,*);
--error ER_BAD_FIELD_ERROR
SELECT ST_GEOHASH(a,90,10);
--error ER_BAD_FIELD_ERROR
SELECT ST_GEOHASH(180,p,10);
--error ER_BAD_FIELD_ERROR
SELECT ST_GEOHASH(180,90,z);
--error ER_GIS_INVALID_DATA
SELECT ST_GEOHASH((CAST(180 AS DATE)),90,10);
--error ER_GIS_INVALID_DATA
SELECT ST_GEOHASH(180,(CAST(90 AS DATE)),10);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(181 0)'),10);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(1000 90)'),10);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(180.0000000000001 -90)'),10);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(-181 0)'),10);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(-1000 90)'),10);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(-180.0000000000001 -90)'),10);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(0 91)'),10);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(180 500)'),10);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(-180 90.0000000000001)'),10);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(0 -91)'),10);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(180 -500)'),10);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(-180 -90.0000000000001)'),10);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(180 90)'),0);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(180 -90)'),-1);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(-180 90)'),-100);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(-180 -90)'),101);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(0 0)'),10000);
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('POINT(180 90)'))),"0");
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('POINT(180 -90)'))),"-1");
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('POINT(-180 90)'))),"-100");
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('POINT(-180 -90)'))),"101");
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('POINT(0 0)'))),"10000");
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(0 0)')," ");
--error ER_STD_OUT_OF_RANGE_ERROR
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(0 0)'),"***");
--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(0 0)'));
--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
SELECT ST_GEOHASH(ST_GEOMFROMTEXT(),20);
--error ER_PARSE_ERROR
SELECT ST_GEOHASH((ST_GEOMFROMTEXT('POINT(0 0)'),);
--error ER_PARSE_ERROR
SELECT ST_GEOHASH(,10);
--error ER_BAD_FIELD_ERROR
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(0 0)'),a);
--error ER_GIS_INVALID_DATA
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('LINESTRING(0 0,10 10)'),10);
--error ER_GIS_INVALID_DATA
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POLYGON((0 0,10 0,10 10,0 10,0 0))'),10);
--error ER_GIS_INVALID_DATA
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('MULTIPOINT(0 0,10 10)'),10);
--error ER_GIS_INVALID_DATA
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,10 10),(20 20,30 30))'),10);
--error ER_GIS_INVALID_DATA
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0),(4 4,4 6,6 6,6 4,4 4)))'),10);
--error ER_GIS_INVALID_DATA
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0))'),10);
--error ER_GIS_INVALID_DATA
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(180 90)'),20.0001);
--error ER_GIS_INVALID_DATA
SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(180 90)'),(CAST(10 AS DATE)));
--error ER_GIS_INVALID_DATA
SELECT ST_GEOHASH(ST_INTERSECTION(ST_GEOMFROMTEXT('POINT(180 90)'),ST_GEOMFROMTEXT('POINT(1 1)')),20);
--error ER_GIS_INVALID_DATA
SELECT ST_GEOHASH(ST_UNION(ST_GEOMFROMTEXT('POINT(180 90)'),ST_GEOMFROMTEXT('POINT(-180 -90)')),20);
--error ER_GIS_INVALID_DATA
SELECT ST_GEOHASH(ST_DIFFERENCE(ST_GEOMFROMTEXT('POINT(180 90)'),ST_GEOMFROMTEXT('MULTIPOINT(0 0,180 90)')),20);
--error ER_GIS_INVALID_DATA
SELECT ST_GEOHASH(ST_SYMDIFFERENCE(ST_GEOMFROMTEXT('POINT(180 90)'),ST_GEOMFROMTEXT('POINT(0 0)')),20);