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

  1. # Copyright (c) 2014, Oracle and/or its affiliates
  2. # Copyright (c) 2024, MariaDB Corporation.
  3. #
  4. # This program is free software; you can redistribute it and/or modify
  5. # it under the terms of the GNU General Public License as published by
  6. # the Free Software Foundation; version 2 of the License.
  7. #
  8. # This program is distributed in the hope that it will be useful,
  9. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. # GNU General Public License for more details.
  12. #
  13. # You should have received a copy of the GNU General Public License
  14. # along with this program; if not, write to the Free Software
  15. # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA
  16. -- disable_warnings
  17. #####################################################################
  18. # ST_GEOHASH()
  19. #####################################################################
  20. # Check for all valid inputs
  21. --echo # valid inputs
  22. SELECT ST_GEOHASH(0,0,1);
  23. SELECT ST_GEOHASH(180,0,20);
  24. SELECT ST_GEOHASH(-180,0,20);
  25. SELECT ST_GEOHASH(0,90,20);
  26. SELECT ST_GEOHASH(0,-90,20);
  27. SELECT ST_GEOHASH(180,90,20);
  28. SELECT ST_GEOHASH(180,-90,20);
  29. SELECT ST_GEOHASH(-180,90,20);
  30. SELECT ST_GEOHASH(-180,-90,20);
  31. SELECT ST_GEOHASH(100,45,5);
  32. SELECT ST_GEOHASH(100,-45,10);
  33. SELECT ST_GEOHASH(-100,45,+50);
  34. SELECT ST_GEOHASH(0.0001,0.0001,10);
  35. SELECT ST_GEOHASH(0.0001,-0.0001,30);
  36. SELECT ST_GEOHASH(-0.0001,0.0001,90);
  37. SELECT ST_GEOHASH(-0.0001,-0.0001,100);
  38. SELECT ST_GEOHASH("",90,10);
  39. SELECT ST_GEOHASH(0,"90",10);
  40. SELECT ST_GEOHASH("0","0",10);
  41. SELECT ST_GEOHASH(180,90,"20");
  42. SELECT ST_GEOHASH("180","90","20");
  43. SELECT ST_GEOHASH("***",90,"20");
  44. SELECT ST_GEOHASH(180,"***",20);
  45. SELECT ST_GEOHASH("abcd",90,20);
  46. SELECT ST_GEOHASH(180,"abcd",25-5);
  47. SELECT ST_GEOHASH(NULL,90,10);
  48. SELECT ST_GEOHASH(180,NULL,10);
  49. SELECT ST_GEOHASH(180,90,NULL);
  50. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(0 0)'),10);
  51. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(180 0)'),20);
  52. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(-180 0)'),25);
  53. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(0 90)'),30);
  54. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(0 -90)'),35);
  55. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(180 90)'),40);
  56. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(180 -90)'),45);
  57. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(-180 90)'),50);
  58. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(-180 -90)'),55);
  59. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(100 45)'),60);
  60. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(100 -45)'),65);
  61. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(-100 45)'),70);
  62. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(-100 -45)'),75);
  63. SELECT ST_GEOHASH(ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('POINT(0.0001 0.0001)'))),80);
  64. SELECT ST_GEOHASH(ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('POINT(0.0001 -0.0001)'))),85);
  65. SELECT ST_GEOHASH(ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('POINT(-0.0001 0.0001)'))),90);
  66. SELECT ST_GEOHASH(ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('POINT(-0.0001 -0.0001)'))),100);
  67. SELECT ST_GEOHASH(ST_GEOMFROMWKB(0x010100000000000000008066400000000000805640),20);
  68. SELECT ST_GEOHASH(ST_GEOMFROMWKB(0x010100000000000000008066C00000000000805640),20);
  69. SELECT ST_GEOHASH(ST_GEOMFROMWKB(0x00000000014066800000000000C056800000000000),20);
  70. SELECT ST_GEOHASH(ST_GEOMFROMWKB(0x0000000001C066800000000000C056800000000000),20);
  71. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(0 0)'),"1");
  72. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(0 0)')," 10 ");
  73. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(0 0)'),"+100");
  74. SELECT ST_GEOHASH(NULL,100);
  75. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(-0.0001 -0.0001)'),NULL);
  76. SELECT ST_GEOHASH(ST_DIFFERENCE(ST_GEOMFROMTEXT('POINT(180 90)'),ST_GEOMFROMTEXT('POINT(0 0)')),20);
  77. SELECT ST_GEOHASH(ST_DIFFERENCE(ST_GEOMFROMTEXT('POINT(-180 90)'),ST_GEOMFROMTEXT('MULTIPOINT(0 0,100 100)')),20);
  78. SELECT ST_GEOHASH(ST_INTERSECTION(ST_GEOMFROMTEXT('POINT(180 -90)'),ST_GEOMFROMTEXT('POINT(180 -90)')),20);
  79. SELECT ST_GEOHASH(ST_INTERSECTION(ST_GEOMFROMTEXT('POINT(-180 -90)'),ST_GEOMFROMTEXT('POINT(-180 -90)')),20);
  80. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(180 90)'),(CAST(10 AS BINARY)));
  81. SELECT ST_GEOHASH((CAST(10 AS BINARY)),20,1);
  82. SELECT ST_GEOHASH(10,(CAST(20 AS BINARY)),1);
  83. SELECT ST_GEOHASH((CAST(10 AS BINARY)),(CAST(20 AS BINARY)),1);
  84. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT()'),20);
  85. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(1)'),20);
  86. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(1 a)'),20);
  87. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(180,90)'),20);
  88. # Invalid inputs
  89. --echo # invalid inputs
  90. --error ER_STD_OUT_OF_RANGE_ERROR
  91. SELECT ST_GEOHASH(181,0,10);
  92. --error ER_STD_OUT_OF_RANGE_ERROR
  93. SELECT ST_GEOHASH(1000,90,10);
  94. --error ER_STD_OUT_OF_RANGE_ERROR
  95. SELECT ST_GEOHASH(180.0000000000001,-90,10);
  96. --error ER_STD_OUT_OF_RANGE_ERROR
  97. SELECT ST_GEOHASH(-181,0,10);
  98. --error ER_STD_OUT_OF_RANGE_ERROR
  99. SELECT ST_GEOHASH(-1000,90,10);
  100. --error ER_STD_OUT_OF_RANGE_ERROR
  101. SELECT ST_GEOHASH(-180.0000000000001,-90,10);
  102. --error ER_STD_OUT_OF_RANGE_ERROR
  103. SELECT ST_GEOHASH(0,91,10);
  104. --error ER_STD_OUT_OF_RANGE_ERROR
  105. SELECT ST_GEOHASH(180,500,10);
  106. --error ER_STD_OUT_OF_RANGE_ERROR
  107. SELECT ST_GEOHASH(-180,90.0000000000001,10);
  108. --error ER_STD_OUT_OF_RANGE_ERROR
  109. SELECT ST_GEOHASH(0,-91,10);
  110. --error ER_STD_OUT_OF_RANGE_ERROR
  111. SELECT ST_GEOHASH(180,-500,10);
  112. --error ER_STD_OUT_OF_RANGE_ERROR
  113. SELECT ST_GEOHASH(-180,-90.0000000000001,10);
  114. --error ER_STD_OUT_OF_RANGE_ERROR
  115. SELECT ST_GEOHASH(180,90,0);
  116. --error ER_STD_OUT_OF_RANGE_ERROR
  117. SELECT ST_GEOHASH(-180,90,-1);
  118. --error ER_STD_OUT_OF_RANGE_ERROR
  119. SELECT ST_GEOHASH(180,-90,-100);
  120. --error ER_STD_OUT_OF_RANGE_ERROR
  121. SELECT ST_GEOHASH(-180,-90,101);
  122. --error ER_STD_OUT_OF_RANGE_ERROR
  123. SELECT ST_GEOHASH(0,90,1000);
  124. --error ER_STD_OUT_OF_RANGE_ERROR
  125. SELECT ST_GEOHASH("181",90,20);
  126. --error ER_STD_OUT_OF_RANGE_ERROR
  127. SELECT ST_GEOHASH("-181",90,20);
  128. --error ER_STD_OUT_OF_RANGE_ERROR
  129. SELECT ST_GEOHASH(180,"91",20);
  130. --error ER_STD_OUT_OF_RANGE_ERROR
  131. SELECT ST_GEOHASH(180,"-91",20);
  132. --error ER_STD_OUT_OF_RANGE_ERROR
  133. SELECT ST_GEOHASH(180,90,"0");
  134. --error ER_STD_OUT_OF_RANGE_ERROR
  135. SELECT ST_GEOHASH(180,90,"-1");
  136. --error ER_STD_OUT_OF_RANGE_ERROR
  137. SELECT ST_GEOHASH(180,90,"-100");
  138. --error ER_STD_OUT_OF_RANGE_ERROR
  139. SELECT ST_GEOHASH(180,90,"101");
  140. --error ER_STD_OUT_OF_RANGE_ERROR
  141. SELECT ST_GEOHASH(180,90,"1000");
  142. --error ER_STD_OUT_OF_RANGE_ERROR
  143. SELECT ST_GEOHASH(180,90,"");
  144. --error ER_STD_OUT_OF_RANGE_ERROR
  145. SELECT ST_GEOHASH(180,90,"****");
  146. --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
  147. SELECT ST_GEOHASH();
  148. --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
  149. SELECT ST_GEOHASH(1);
  150. --error ER_GIS_INVALID_DATA
  151. SELECT ST_GEOHASH(1,2);
  152. # --error ER_GIS_INVALID_DATA
  153. # SELECT ST_GEOHASH(-100,-45,100.1);
  154. --error ER_PARSE_ERROR
  155. SELECT ST_GEOHASH(, ,);
  156. --error ER_PARSE_ERROR
  157. SELECT ST_GEOHASH(1,2,);
  158. --error ER_PARSE_ERROR
  159. SELECT ST_GEOHASH(*,0,10);
  160. --error ER_PARSE_ERROR
  161. SELECT ST_GEOHASH(0,*,10);
  162. --error ER_PARSE_ERROR
  163. SELECT ST_GEOHASH(0,0,*);
  164. --error ER_BAD_FIELD_ERROR
  165. SELECT ST_GEOHASH(a,90,10);
  166. --error ER_BAD_FIELD_ERROR
  167. SELECT ST_GEOHASH(180,p,10);
  168. --error ER_BAD_FIELD_ERROR
  169. SELECT ST_GEOHASH(180,90,z);
  170. --error ER_GIS_INVALID_DATA
  171. SELECT ST_GEOHASH((CAST(180 AS DATE)),90,10);
  172. --error ER_GIS_INVALID_DATA
  173. SELECT ST_GEOHASH(180,(CAST(90 AS DATE)),10);
  174. --error ER_STD_OUT_OF_RANGE_ERROR
  175. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(181 0)'),10);
  176. --error ER_STD_OUT_OF_RANGE_ERROR
  177. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(1000 90)'),10);
  178. --error ER_STD_OUT_OF_RANGE_ERROR
  179. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(180.0000000000001 -90)'),10);
  180. --error ER_STD_OUT_OF_RANGE_ERROR
  181. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(-181 0)'),10);
  182. --error ER_STD_OUT_OF_RANGE_ERROR
  183. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(-1000 90)'),10);
  184. --error ER_STD_OUT_OF_RANGE_ERROR
  185. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(-180.0000000000001 -90)'),10);
  186. --error ER_STD_OUT_OF_RANGE_ERROR
  187. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(0 91)'),10);
  188. --error ER_STD_OUT_OF_RANGE_ERROR
  189. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(180 500)'),10);
  190. --error ER_STD_OUT_OF_RANGE_ERROR
  191. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(-180 90.0000000000001)'),10);
  192. --error ER_STD_OUT_OF_RANGE_ERROR
  193. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(0 -91)'),10);
  194. --error ER_STD_OUT_OF_RANGE_ERROR
  195. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(180 -500)'),10);
  196. --error ER_STD_OUT_OF_RANGE_ERROR
  197. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(-180 -90.0000000000001)'),10);
  198. --error ER_STD_OUT_OF_RANGE_ERROR
  199. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(180 90)'),0);
  200. --error ER_STD_OUT_OF_RANGE_ERROR
  201. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(180 -90)'),-1);
  202. --error ER_STD_OUT_OF_RANGE_ERROR
  203. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(-180 90)'),-100);
  204. --error ER_STD_OUT_OF_RANGE_ERROR
  205. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(-180 -90)'),101);
  206. --error ER_STD_OUT_OF_RANGE_ERROR
  207. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(0 0)'),10000);
  208. --error ER_STD_OUT_OF_RANGE_ERROR
  209. SELECT ST_GEOHASH(ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('POINT(180 90)'))),"0");
  210. --error ER_STD_OUT_OF_RANGE_ERROR
  211. SELECT ST_GEOHASH(ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('POINT(180 -90)'))),"-1");
  212. --error ER_STD_OUT_OF_RANGE_ERROR
  213. SELECT ST_GEOHASH(ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('POINT(-180 90)'))),"-100");
  214. --error ER_STD_OUT_OF_RANGE_ERROR
  215. SELECT ST_GEOHASH(ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('POINT(-180 -90)'))),"101");
  216. --error ER_STD_OUT_OF_RANGE_ERROR
  217. SELECT ST_GEOHASH(ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('POINT(0 0)'))),"10000");
  218. --error ER_STD_OUT_OF_RANGE_ERROR
  219. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(0 0)')," ");
  220. --error ER_STD_OUT_OF_RANGE_ERROR
  221. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(0 0)'),"***");
  222. --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
  223. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(0 0)'));
  224. --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
  225. SELECT ST_GEOHASH(ST_GEOMFROMTEXT(),20);
  226. --error ER_PARSE_ERROR
  227. SELECT ST_GEOHASH((ST_GEOMFROMTEXT('POINT(0 0)'),);
  228. --error ER_PARSE_ERROR
  229. SELECT ST_GEOHASH(,10);
  230. --error ER_BAD_FIELD_ERROR
  231. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(0 0)'),a);
  232. --error ER_GIS_INVALID_DATA
  233. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('LINESTRING(0 0,10 10)'),10);
  234. --error ER_GIS_INVALID_DATA
  235. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POLYGON((0 0,10 0,10 10,0 10,0 0))'),10);
  236. --error ER_GIS_INVALID_DATA
  237. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('MULTIPOINT(0 0,10 10)'),10);
  238. --error ER_GIS_INVALID_DATA
  239. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,10 10),(20 20,30 30))'),10);
  240. --error ER_GIS_INVALID_DATA
  241. 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);
  242. --error ER_GIS_INVALID_DATA
  243. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0))'),10);
  244. --error ER_GIS_INVALID_DATA
  245. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(180 90)'),20.0001);
  246. --error ER_GIS_INVALID_DATA
  247. SELECT ST_GEOHASH(ST_GEOMFROMTEXT('POINT(180 90)'),(CAST(10 AS DATE)));
  248. --error ER_GIS_INVALID_DATA
  249. SELECT ST_GEOHASH(ST_INTERSECTION(ST_GEOMFROMTEXT('POINT(180 90)'),ST_GEOMFROMTEXT('POINT(1 1)')),20);
  250. --error ER_GIS_INVALID_DATA
  251. SELECT ST_GEOHASH(ST_UNION(ST_GEOMFROMTEXT('POINT(180 90)'),ST_GEOMFROMTEXT('POINT(-180 -90)')),20);
  252. --error ER_GIS_INVALID_DATA
  253. SELECT ST_GEOHASH(ST_DIFFERENCE(ST_GEOMFROMTEXT('POINT(180 90)'),ST_GEOMFROMTEXT('MULTIPOINT(0 0,180 90)')),20);
  254. --error ER_GIS_INVALID_DATA
  255. SELECT ST_GEOHASH(ST_SYMDIFFERENCE(ST_GEOMFROMTEXT('POINT(180 90)'),ST_GEOMFROMTEXT('POINT(0 0)')),20);