MySQL 9.1.0
Source Code Documentation
item_geofunc.h
Go to the documentation of this file.
1#ifndef ITEM_GEOFUNC_INCLUDED
2#define ITEM_GEOFUNC_INCLUDED
3
4/* Copyright (c) 2000, 2024, Oracle and/or its affiliates.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License, version 2.0,
8 as published by the Free Software Foundation.
9
10 This program is designed to work with certain software (including
11 but not limited to OpenSSL) that is licensed under separate terms,
12 as designated in a particular file or component or in included license
13 documentation. The authors of MySQL hereby grant you an additional
14 permission to link the program and your derivative works with the
15 separately licensed software that they have either included with
16 the program or referenced in the documentation.
17
18 This program is distributed in the hope that it will be useful,
19 but WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 GNU General Public License, version 2.0, for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with this program; if not, write to the Free Software
25 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
26
27#include <assert.h>
28#include <sys/types.h>
29
30#include <cstddef>
31#include <vector>
32
33#include "field_types.h" // MYSQL_TYPE_BLOB
34
35#include "my_inttypes.h"
36#include "my_sys.h"
38#include "mysql_com.h"
39#include "mysqld_error.h"
40#include "prealloced_array.h"
41#include "sql/enum_query_type.h"
42#include "sql/field.h"
43#include "sql/gis/buffer_strategies.h" // gis::buffer_strategies
44#include "sql/gis/srid.h"
45#include "sql/parse_location.h" // POS
46/* This file defines all spatial functions */
47#include "sql/inplace_vector.h"
48#include "sql/item.h"
49#include "sql/item_cmpfunc.h" // Item_bool_func2
50#include "sql/item_func.h"
51#include "sql/item_json_func.h" // Item_json_func
52#include "sql/item_strfunc.h" // Item_str_func
53#include "sql/spatial.h" // gis_wkb_raw_free
54#include "sql_string.h"
55
56class Json_array;
57class Json_dom;
58class Json_object;
59class Json_wrapper;
60class PT_item_list;
61class THD;
62struct Parse_context;
63struct TABLE;
64
65enum class enum_json_type;
66
67namespace dd {
68class Spatial_reference_system;
69} // namespace dd
70
71namespace gis {
72class Geometry;
73class Point;
74} // namespace gis
75
76/**
77 We have to hold result buffers in functions that return a GEOMETRY string,
78 because such a function's result geometry's buffer is directly used and
79 set to String result object. We have to release them properly manually
80 since they won't be released when the String result is destroyed.
81*/
84
85 public:
87
91 }
92
94
95 void forget_buffer(void *buf) {
96 if (bg_result_buf == buf) bg_result_buf = nullptr;
98 }
99
100 /* Free intermediate result buffers accumulated during GIS calculation. */
104 itr != bg_results.end(); ++itr)
105 gis_wkb_raw_free(*itr);
107 }
108
109 // Free the final result buffer, should be called after the result used.
112 bg_result_buf = nullptr;
113 }
114
115 void set_result_buffer(void *buf) {
118 }
119
120 private:
121 /*
122 Hold data buffer of this set operation's final result geometry which is
123 freed next time val_str is called since it can be used by upper Item nodes.
124 */
126
127 /*
128 Result buffers for intermediate set operation results, which are freed
129 before val_str returns.
130 */
132};
133
135
136/**
137 A utility class to flatten any hierarchy of geometry collection into one
138 with no nested geometry collections. All components are stored separately
139 and all their data stored in this class, in order to easily manipulate them.
140 */
145 std::vector<Geometry *> m_geos;
148
149 public:
150 typedef std::vector<Geometry *> Geometry_list;
151
153
155
157
158 gis::srid_t get_srid() const { return m_srid; }
159
160 void set_srid(gis::srid_t srid) { m_srid = srid; }
161
162 bool fill(const Geometry *geo, bool break_multi_geom = false) {
163 return store_geometry(geo, break_multi_geom);
164 }
165
166 const Geometry_list &get_geometries() const { return m_geos; }
167
169
170 bool all_isolated() const { return m_num_isolated == m_geos.size(); }
171
172 size_t num_isolated() const { return m_num_isolated; }
173
174 private:
175 bool store_geometry(const Geometry *geo, bool break_multi_geom);
176 Geometry *store(const Geometry *geo);
177};
178
180 public:
182
184 Item_geometry_func(const POS &pos, Item *a) : Item_str_func(pos, a) {}
185
187 Item_geometry_func(const POS &pos, Item *a, Item *b)
188 : Item_str_func(pos, a, b) {}
189
191 Item_geometry_func(const POS &pos, Item *a, Item *b, Item *c)
192 : Item_str_func(pos, a, b, c) {}
194
195 bool resolve_type(THD *) override;
196 Field *tmp_table_field(TABLE *t_arg) override;
197};
198
200 public:
201 enum class Functype {
218 };
219
220 private:
223 /**
224 Get the type of geometry that this Item can return.
225
226 @return The geometry type
227 */
229 /**
230 Check if a geometry type is a valid return type for this Item.
231
232 @param type The type to check
233
234 @retval true The geometry type is allowed
235 @retval false The geometry type is not allowed
236 */
238
239 public:
244 : Item_geometry_func(pos, a, srid), m_functype(functype) {}
246 Item *option, Functype functype)
247 : Item_geometry_func(pos, a, srid, option), m_functype(functype) {}
248
249 bool do_itemize(Parse_context *pc, Item **res) override;
250 const char *func_name() const override;
251 String *val_str(String *) override;
252 bool resolve_type(THD *thd) override {
253 if (param_type_is_default(thd, 0, 1)) return true;
254 if (param_type_is_default(thd, 1, 2, MYSQL_TYPE_LONGLONG)) return true;
255 if (param_type_is_default(thd, 2, 3)) return true;
257 }
258};
259
261 public:
262 enum class Functype {
278 };
279
280 private:
284 /**
285 Get the type of geometry that this Item can return.
286
287 @return The geometry type
288 */
290 /**
291 Check if a geometry type is a valid return type for this Item.
292
293 @param type The type to check
294
295 @retval true The geometry type is allowed
296 @retval false The geometry type is not allowed
297 */
299 bool resolve_type(THD *thd) override {
300 if (param_type_is_default(thd, 0, 1)) return true;
301 if (param_type_is_default(thd, 1, 2, MYSQL_TYPE_LONGLONG)) return true;
302 if (param_type_is_default(thd, 2, 3)) return true;
304 }
305
306 public:
311 : Item_geometry_func(pos, a, srid), m_functype(functype) {}
312 Item_func_geometry_from_wkb(const POS &pos, Item *a, Item *srid, Item *option,
314 : Item_geometry_func(pos, a, srid, option), m_functype(functype) {}
315
316 bool do_itemize(Parse_context *pc, Item **res) override;
317 const char *func_name() const override;
318 String *val_str(String *) override;
319};
320
322 public:
323 Item_func_as_wkt(const POS &pos, Item *a) : Item_str_ascii_func(pos, a) {}
324 Item_func_as_wkt(const POS &pos, Item *a, Item *b)
325 : Item_str_ascii_func(pos, a, b) {}
326 const char *func_name() const override { return "st_astext"; }
327 String *val_str_ascii(String *) override;
328 bool resolve_type(THD *) override;
329};
330
332 public:
333 Item_func_as_wkb(const POS &pos, Item *a) : Item_geometry_func(pos, a) {}
334 Item_func_as_wkb(const POS &pos, Item *a, Item *b)
335 : Item_geometry_func(pos, a, b) {}
336 const char *func_name() const override { return "st_aswkb"; }
337 String *val_str(String *) override;
338 bool resolve_type(THD *thd) override {
339 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_GEOMETRY)) return true;
340 if (param_type_is_default(thd, 1, 2)) return true;
341 if (Item_geometry_func::resolve_type(thd)) return true;
343 return false;
344 }
345};
346
348 public:
350 : Item_str_ascii_func(pos, a) {}
351 String *val_str_ascii(String *) override;
352 const char *func_name() const override { return "st_geometrytype"; }
353 bool resolve_type(THD *thd) override {
354 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_GEOMETRY)) return true;
355 // "MultiLinestring" is the longest
357 set_nullable(true);
358 return false;
359 }
360};
361
362/**
363 This handles one function:
364
365 @<geometry@> = ST_GEOMFROMGEOJSON(@<string@>[, @<options@>[, @<srid@>]])
366
367 Options is an integer argument which determines how positions with higher
368 coordinate dimension than MySQL support should be handled. The function will
369 accept both single objects, geometry collections and feature objects and
370 collections. All "properties" members of GeoJSON feature objects is ignored.
371
372 The implementation conforms with GeoJSON revision 1.0 described at
373 http://geojson.org/geojson-spec.html.
374*/
376 public:
377 /**
378 Describing how coordinate dimensions higher than supported in MySQL
379 should be handled.
380 */
386 };
387 Item_func_geomfromgeojson(const POS &pos, Item *json_string)
388 : Item_geometry_func(pos, json_string),
392 Item_func_geomfromgeojson(const POS &pos, Item *json_string, Item *options)
393 : Item_geometry_func(pos, json_string, options),
396 Item_func_geomfromgeojson(const POS &pos, Item *json_string, Item *options,
397 Item *srid)
398 : Item_geometry_func(pos, json_string, options, srid),
400 String *val_str(String *) override;
401 bool fix_fields(THD *, Item **ref) override;
402 const char *func_name() const override { return "st_geomfromgeojson"; }
403 Geometry::wkbType get_wkbtype(const char *typestring);
404 bool get_positions(const Json_array *coordinates, Gis_point *point);
405 bool get_linestring(const Json_array *data_array,
406 Gis_line_string *linestring);
407 bool get_polygon(const Json_array *data_array, Gis_polygon *polygon);
408 bool parse_object(const Json_object *object, bool *rollback, String *buffer,
409 bool is_parent_featurecollection, Geometry **geometry);
411 bool *rollback, String *buffer,
412 bool is_parent_featurecollection,
413 Geometry **geometry);
414 static bool check_argument_valid_integer(Item *argument);
415 bool parse_crs_object(const Json_object *crs_object);
416 bool is_member_valid(const Json_dom *member, const char *member_name,
417 enum_json_type expected_type, bool allow_null,
418 bool *was_null);
419 const Json_dom *my_find_member_ncase(const Json_object *object,
420 const char *member_name);
421
422 static const char *TYPE_MEMBER;
423 static const char *CRS_MEMBER;
424 static const char *GEOMETRY_MEMBER;
425 static const char *PROPERTIES_MEMBER;
426 static const char *FEATURES_MEMBER;
427 static const char *GEOMETRIES_MEMBER;
428 static const char *COORDINATES_MEMBER;
429 static const char *CRS_NAME_MEMBER;
430 static const char *NAMED_CRS;
431 static const char *SHORT_EPSG_PREFIX;
432 static const char *LONG_EPSG_PREFIX;
433 static const char *CRS84_URN;
434 static const char *POINT_TYPE;
435 static const char *MULTIPOINT_TYPE;
436 static const char *LINESTRING_TYPE;
437 static const char *MULTILINESTRING_TYPE;
438 static const char *POLYGON_TYPE;
439 static const char *MULTIPOLYGON_TYPE;
440 static const char *GEOMETRYCOLLECTION_TYPE;
441 static const char *FEATURE_TYPE;
442 static const char *FEATURECOLLECTION_TYPE;
443
444 private:
445 /**
446 How higher coordinate dimensions than currently supported should be handled.
447 */
449 /// Is set to true if user provided a SRID as an argument.
451 /// The SRID user provided as an argument.
453 /**
454 The SRID value of the document CRS, if one is found. Otherwise, this value
455 defaults to -1.
456 */
458 /// The minimum allowed longitude value (non-inclusive).
459 double m_min_longitude = -180.0;
460 /// The maximum allowed longitude (inclusive).
461 double m_max_longitude = 180.0;
462 /// The minimum allowed latitude value (inclusive).
463 double m_min_latitude = -90.0;
464 /// The maximum allowed latitude (inclusive).
465 double m_max_latitude = 90.0;
466 /// True if we're currently parsing the top-level object.
467 bool m_toplevel = true;
468};
469
470/// Max width of long CRS URN supported + max width of SRID + '\0'.
471static const int MAX_CRS_WIDTH = (22 + MAX_INT_WIDTH + 1);
472
473/**
474 This class handles the following function:
475
476 @<json@> = ST_ASGEOJSON(@<geometry@>[, @<maxdecimaldigits@>[, @<options@>]])
477
478 It converts a GEOMETRY into a valid GeoJSON string. If maxdecimaldigits is
479 specified, the coordinates written are rounded to the number of decimals
480 specified (e.g with decimaldigits = 3: 10.12399 => 10.124).
481
482 Options is a bitmask with the following flags:
483 0 No options (default values).
484 1 Add a bounding box to the output.
485 2 Add a short CRS URN to the output. The default format is a
486 short format ("EPSG:<srid>").
487 4 Add a long format CRS URN ("urn:ogc:def:crs:EPSG::<srid>"). This
488 implies 2. This means that, e.g., bitmask 5 and 7 mean the
489 same: add a bounding box and a long format CRS URN.
490*/
492 private:
493 /// Maximum number of decimal digits in printed coordinates.
495 /// If true, the output GeoJSON has a bounding box for each GEOMETRY.
497 /**
498 If true, the output GeoJSON has a CRS object in the short
499 form (e.g "EPSG:4326").
500 */
502 /**
503 If true, the output GeoJSON has a CRS object in the long
504 form (e.g "urn:ogc:def:crs:EPSG::4326").
505 */
507 /// The SRID found in the input GEOMETRY.
509
510 public:
511 Item_func_as_geojson(THD *thd, const POS &pos, Item *geometry)
512 : Item_json_func(thd, pos, geometry),
513 m_add_bounding_box(false),
514 m_add_short_crs_urn(false),
515 m_add_long_crs_urn(false) {}
516 Item_func_as_geojson(THD *thd, const POS &pos, Item *geometry,
517 Item *maxdecimaldigits)
518 : Item_json_func(thd, pos, geometry, maxdecimaldigits),
519 m_add_bounding_box(false),
520 m_add_short_crs_urn(false),
521 m_add_long_crs_urn(false) {}
522 Item_func_as_geojson(THD *thd, const POS &pos, Item *geometry,
523 Item *maxdecimaldigits, Item *options)
524 : Item_json_func(thd, pos, geometry, maxdecimaldigits, options),
525 m_add_bounding_box(false),
526 m_add_short_crs_urn(false),
527 m_add_long_crs_urn(false) {}
528 bool fix_fields(THD *thd, Item **ref) override;
529 bool val_json(Json_wrapper *wr) override;
530 const char *func_name() const override { return "st_asgeojson"; }
533};
534
535/**
536 This class handles two forms of the same function:
537
538 @<string@> = ST_GEOHASH(@<point@>, @<maxlength@>);
539 @<string@> = ST_GEOHASH(@<longitude@>, @<latitude@>, @<maxlength@>)
540
541 It returns an encoded geohash string, no longer than @<maxlength@> characters
542 long. Note that it might be shorter than @<maxlength@>.
543*/
545 private:
546 /// The latitude argument supplied by the user (directly or by a POINT).
547 double latitude;
548 /// The longitude argument supplied by the user (directly or by a POINT).
549 double longitude;
550 /// The maximum output length of the geohash, supplied by the user.
552
553 /**
554 The maximum input latitude. For now, this is set to 90.0. It can be
555 changed to support a different range than the normal [90, -90].
556 */
557 const double max_latitude;
558
559 /**
560 The minimum input latitude. For now, this is set to -90.0. It can be
561 changed to support a different range than the normal [90, -90].
562 */
563 const double min_latitude;
564
565 /**
566 The maximum input longitude. For now, this is set to 180.0. It can be
567 changed to support a different range than the normal [180, -180].
568 */
569 const double max_longitude;
570
571 /**
572 The minimum input longitude. For now, this is set to -180.0. It can be
573 changed to support a different range than the normal [180, -180].
574 */
575 const double min_longitude;
576
577 /**
578 The absolute upper limit of geohash output length. User will get an error
579 if they supply a max geohash length argument greater than this.
580 */
582
583 public:
584 Item_func_geohash(const POS &pos, Item *point, Item *length)
585 : Item_str_ascii_func(pos, point, length),
586 max_latitude(90.0),
587 min_latitude(-90.0),
588 max_longitude(180.0),
589 min_longitude(-180.0),
592 Item *length)
594 max_latitude(90.0),
595 min_latitude(-90.0),
596 max_longitude(180.0),
597 min_longitude(-180.0),
599 String *val_str_ascii(String *) override;
600 bool resolve_type(THD *) override;
601 bool fix_fields(THD *thd, Item **ref) override;
602 const char *func_name() const override { return "st_geohash"; }
603 char char_to_base32(char char_input);
604 void encode_bit(double *upper_value, double *lower_value, double target_value,
605 char *char_value, int bit_number);
608};
609
610/**
611 This is a superclass for Item_func_longfromgeohash and
612 Item_func_latfromgeohash, since they share almost all code.
613*/
615 private:
616 /**
617 The lower limit for latitude output value. Normally, this will be
618 set to -90.0.
619 */
620 const double lower_latitude;
621
622 /**
623 The upper limit for latitude output value. Normally, this will be
624 set to 90.0.
625 */
626 const double upper_latitude;
627
628 /**
629 The lower limit for longitude output value. Normally, this will
630 be set to -180.0.
631 */
632 const double lower_longitude;
633
634 /**
635 The upper limit for longitude output value. Normally, this will
636 be set to 180.0.
637 */
638 const double upper_longitude;
639
640 /**
641 If this is set to true the algorithm will start decoding on the first bit,
642 which decodes a longitude value. If it is false, it will start on the
643 second bit which decodes a latitude value.
644 */
646
647 public:
649 double upper_latitude, double lower_longitude,
650 double upper_longitude,
651 bool start_on_even_bit_arg)
652 : Item_real_func(pos, a),
657 start_on_even_bit(start_on_even_bit_arg) {}
658 double val_real() override;
659 bool resolve_type(THD *thd) override;
660 bool fix_fields(THD *thd, Item **ref) override;
661 static bool decode_geohash(String *geohash, double upper_latitude,
662 double lower_latitude, double upper_longitude,
663 double lower_longitude, double *result_latitude,
664 double *result_longitude);
665 static double round_latlongitude(double latlongitude, double error_range,
666 double lower_limit, double upper_limit);
667 static bool check_geohash_argument_valid_type(Item *item);
668};
669
670/**
671 This handles the @<double@> = ST_LATFROMGEOHASH(@<string@>) function.
672 It returns the latitude-part of a geohash, in the range of [-90, 90].
673*/
675 public:
677 : Item_func_latlongfromgeohash(pos, a, -90.0, 90.0, -180.0, 180.0,
678 false) {}
679
680 const char *func_name() const override { return "ST_LATFROMGEOHASH"; }
681};
682
683/**
684 This handles the @<double@> = ST_LONGFROMGEOHASH(@<string@>) function.
685 It returns the longitude-part of a geohash, in the range of [-180, 180].
686*/
688 public:
690 : Item_func_latlongfromgeohash(pos, a, -90.0, 90.0, -180.0, 180.0, true) {
691 }
692
693 const char *func_name() const override { return "ST_LONGFROMGEOHASH"; }
694};
695
698
699 template <typename Coordsys>
700 bool bg_centroid(const Geometry *geom, String *ptwkb);
701
702 public:
703 Item_func_centroid(const POS &pos, Item *a) : Item_geometry_func(pos, a) {}
704 const char *func_name() const override { return "st_centroid"; }
705 String *val_str(String *) override;
707 bool resolve_type(THD *thd) override {
708 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_GEOMETRY)) return true;
710 }
711};
712
715
716 template <typename Coordsys>
717 bool bg_convex_hull(const Geometry *geom, String *wkb);
718
719 public:
721 const char *func_name() const override { return "st_convexhull"; }
722 String *val_str(String *) override;
724 bool resolve_type(THD *thd) override {
725 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_GEOMETRY)) return true;
727 }
728};
729
731 public:
732 Item_func_envelope(const POS &pos, Item *a) : Item_geometry_func(pos, a) {}
733 const char *func_name() const override { return "st_envelope"; }
734 String *val_str(String *) override;
736 bool resolve_type(THD *thd) override {
737 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_GEOMETRY)) return true;
739 }
740};
741
743 public:
745 : Item_geometry_func(pos, a, b) {}
746 const char *func_name() const override { return "st_makeenvelope"; }
747 String *val_str(String *) override;
749 bool resolve_type(THD *thd) override {
750 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_GEOMETRY)) return true;
752 }
753};
754
757
758 public:
759 Item_func_validate(const POS &pos, Item *a) : Item_geometry_func(pos, a) {}
760 const char *func_name() const override { return "st_validate"; }
761 bool resolve_type(THD *thd) override {
762 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_GEOMETRY)) return true;
764 }
765 String *val_str(String *) override;
766};
767
768/// Item that implements function ST_Simplify, which simplifies a geometry using
769/// the Douglas-Peucker algorithm.
771 public:
772 Item_func_st_simplify(const POS &pos, Item *a, Item *b)
773 : Item_geometry_func(pos, a, b) {}
774 bool resolve_type(THD *thd) override {
775 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_GEOMETRY)) return true;
776 if (param_type_is_default(thd, 1, 2, MYSQL_TYPE_DOUBLE)) return true;
778 }
779 String *val_str(String *) override;
780
781 const char *func_name() const override { return "st_simplify"; }
782};
783
785 public:
786 Item_func_point(const POS &pos, Item *a, Item *b)
787 : Item_geometry_func(pos, a, b) {}
788 const char *func_name() const override { return "point"; }
789 String *val_str(String *) override;
791 bool resolve_type(THD *thd) override {
792 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_DOUBLE)) return true;
794 }
795};
796
797/**
798 This handles the @<point@> = ST_POINTFROMGEOHASH(@<string@>, @<srid@>)
799 function.
800
801 It returns a point containing the decoded geohash value, where X is the
802 longitude in the range of [-180, 180] and Y is the latitude in the range
803 of [-90, 90].
804*/
806 private:
807 /// The maximum output latitude value when decoding the geohash value.
808 const double upper_latitude;
809
810 /// The minimum output latitude value when decoding the geohash value.
811 const double lower_latitude;
812
813 /// The maximum output longitude value when decoding the geohash value.
814 const double upper_longitude;
815
816 /// The minimum output longitude value when decoding the geohash value.
817 const double lower_longitude;
818
819 public:
821 : Item_geometry_func(pos, a, b),
822 upper_latitude(90.0),
823 lower_latitude(-90.0),
824 upper_longitude(180.0),
825 lower_longitude(-180.0) {}
826 const char *func_name() const override { return "st_pointfromgeohash"; }
827 String *val_str(String *) override;
828 bool fix_fields(THD *thd, Item **ref) override;
829 bool resolve_type(THD *thd) override;
831 return Field::GEOM_POINT;
832 }
833};
834
837 bool resolve_type(THD *thd) override {
838 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_GEOMETRY)) return true;
840 }
841
842 public:
844 : Item_geometry_func(pos, a) {
845 decomp_func = ft;
846 }
847 const char *func_name() const override {
848 switch (decomp_func) {
849 case SP_STARTPOINT:
850 return "st_startpoint";
851 case SP_ENDPOINT:
852 return "st_endpoint";
853 case SP_EXTERIORRING:
854 return "st_exteriorring";
855 default:
856 assert(0); // Should never happened
857 return "spatial_decomp_unknown";
858 }
859 }
860 String *val_str(String *) override;
861};
862
865 bool resolve_type(THD *thd) override {
866 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_GEOMETRY)) return true;
867 if (param_type_is_default(thd, 1, 2, MYSQL_TYPE_LONGLONG)) return true;
869 }
870
871 public:
874 : Item_geometry_func(pos, a, b) {
875 decomp_func_n = ft;
876 }
877 const char *func_name() const override {
878 switch (decomp_func_n) {
879 case SP_POINTN:
880 return "st_pointn";
881 case SP_GEOMETRYN:
882 return "st_geometryn";
883 case SP_INTERIORRINGN:
884 return "st_interiorringn";
885 default:
886 assert(0); // Should never happened
887 return "spatial_decomp_n_unknown";
888 }
889 }
890 String *val_str(String *) override;
891};
892
897
898 public:
900 enum Geometry::wkbType ct,
901 enum Geometry::wkbType it)
902 : Item_geometry_func(pos, list) {
903 coll_type = ct;
904 item_type = it;
905 }
906 String *val_str(String *) override;
907 bool resolve_type(THD *thd) override {
908 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_GEOMETRY)) return true;
909 if (Item_geometry_func::resolve_type(thd)) return true;
910 for (unsigned int i = 0; i < arg_count; ++i) {
911 if (args[i]->fixed && args[i]->data_type() != MYSQL_TYPE_GEOMETRY) {
912 String str;
914 str.append('\0');
915 my_error(ER_ILLEGAL_VALUE_FOR_TYPE, MYF(0), "non geometric", str.ptr());
916 return true;
917 }
918 }
919 return false;
920 }
921
922 const char *func_name() const override;
923};
924
925/*
926 Spatial relations
927*/
928
931
932 public:
934 : Item_bool_func2(a, b) {
935 spatial_rel = sp_rel;
936 }
938 enum Functype sp_rel)
939 : Item_bool_func2(pos, a, b) {
940 spatial_rel = sp_rel;
941 }
942 longlong val_int() override;
943 enum Functype functype() const override { return spatial_rel; }
944 enum Functype rev_functype() const override {
945 switch (spatial_rel) {
946 case SP_CONTAINS_FUNC:
947 return SP_WITHIN_FUNC;
948 case SP_WITHIN_FUNC:
949 return SP_CONTAINS_FUNC;
950 default:
951 return spatial_rel;
952 }
953 }
954
955 const char *func_name() const override;
956 void print(const THD *thd, String *str,
957 enum_query_type query_type) const override {
958 Item_func::print(thd, str, query_type);
959 }
960 bool resolve_type(THD *) override {
961 set_nullable(true);
962 return false;
963 }
964 bool is_null() override {
965 val_int();
966 return null_value;
967 }
968};
969
971 public:
973 : Item_bool_func2(pos, a, b) {}
974 bool resolve_type(THD *thd) override {
975 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_GEOMETRY)) return true;
976 // Spatial relation functions may return NULL if either parameter is NULL or
977 // an empty geometry. Since we can't check for empty geometries at resolve
978 // time, this item is always nullable.
979 set_nullable(true);
980 return false;
981 }
982 void print(const THD *thd, String *str,
983 enum_query_type query_type) const override {
984 Item_func::print(thd, str, query_type);
985 }
986 longlong val_int() override;
987 bool is_null() override {
988 // The superclass implementation only checks is_null on the item's
989 // arguments. However, relational functions may return NULL even if the
990 // arguments are not NULL, e.g., if one or more argument is an empty
991 // geometry. Therefore, we must evaluate the item to find out if it is NULL
992 // or not.
993 val_int();
994 return null_value;
995 }
996
997 /**
998 Evaluate the spatial relation function.
999
1000 @param[in] srs Spatial reference system common to both g1 and g2.
1001 @param[in] g1 First geometry.
1002 @param[in] g2 Second geometry.
1003 @param[out] result Result of the relational operation.
1004 @param[out] null True if the function should return NULL, false otherwise.
1005
1006 @retval true An error has occurred and has been reported with my_error.
1007 @retval false Success.
1008 */
1009 virtual bool eval(const dd::Spatial_reference_system *srs,
1010 const gis::Geometry *g1, const gis::Geometry *g2,
1011 bool *result, bool *null) = 0;
1012};
1013
1015 public:
1017 : Item_func_spatial_relation(pos, a, b) {}
1018 enum Functype functype() const override { return SP_CONTAINS_FUNC; }
1019 enum Functype rev_functype() const override { return SP_WITHIN_FUNC; }
1020 const char *func_name() const override { return "st_contains"; }
1021 bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1,
1022 const gis::Geometry *g2, bool *result, bool *null) override;
1023};
1024
1026 public:
1027 Item_func_st_crosses(const POS &pos, Item *a, Item *b)
1028 : Item_func_spatial_relation(pos, a, b) {}
1029 enum Functype functype() const override { return SP_CROSSES_FUNC; }
1030 enum Functype rev_functype() const override { return SP_CROSSES_FUNC; }
1031 const char *func_name() const override { return "st_crosses"; }
1032 bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1,
1033 const gis::Geometry *g2, bool *result, bool *null) override;
1034};
1035
1037 public:
1039 : Item_func_spatial_relation(pos, a, b) {}
1040 enum Functype functype() const override { return SP_DISJOINT_FUNC; }
1041 enum Functype rev_functype() const override { return SP_DISJOINT_FUNC; }
1042 const char *func_name() const override { return "st_disjoint"; }
1043 bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1,
1044 const gis::Geometry *g2, bool *result, bool *null) override;
1045};
1046
1048 public:
1049 Item_func_st_equals(const POS &pos, Item *a, Item *b)
1050 : Item_func_spatial_relation(pos, a, b) {}
1051 enum Functype functype() const override { return SP_EQUALS_FUNC; }
1052 enum Functype rev_functype() const override { return SP_EQUALS_FUNC; }
1053 const char *func_name() const override { return "st_equals"; }
1054 bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1,
1055 const gis::Geometry *g2, bool *result, bool *null) override;
1056};
1057
1059 public:
1061 : Item_func_spatial_relation(pos, a, b) {}
1062 enum Functype functype() const override { return SP_INTERSECTS_FUNC; }
1063 enum Functype rev_functype() const override { return SP_INTERSECTS_FUNC; }
1064 const char *func_name() const override { return "st_intersects"; }
1065 bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1,
1066 const gis::Geometry *g2, bool *result, bool *null) override;
1067};
1068
1070 public:
1072 : Item_func_spatial_relation(pos, a, b) {}
1073 enum Functype functype() const override { return SP_CONTAINS_FUNC; }
1074 enum Functype rev_functype() const override { return SP_WITHIN_FUNC; }
1075 const char *func_name() const override { return "mbrcontains"; }
1076 bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1,
1077 const gis::Geometry *g2, bool *result, bool *null) override;
1078};
1079
1081 public:
1083 : Item_func_spatial_relation(pos, a, b) {}
1084 enum Functype functype() const override { return SP_COVEREDBY_FUNC; }
1085 enum Functype rev_functype() const override { return SP_COVERS_FUNC; }
1086 const char *func_name() const override { return "mbrcoveredby"; }
1087 bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1,
1088 const gis::Geometry *g2, bool *result, bool *null) override;
1089};
1090
1092 public:
1093 Item_func_mbrcovers(const POS &pos, Item *a, Item *b)
1094 : Item_func_spatial_relation(pos, a, b) {}
1095 enum Functype functype() const override { return SP_COVERS_FUNC; }
1096 enum Functype rev_functype() const override { return SP_COVEREDBY_FUNC; }
1097 const char *func_name() const override { return "mbrcovers"; }
1098 bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1,
1099 const gis::Geometry *g2, bool *result, bool *null) override;
1100};
1101
1103 public:
1105 : Item_func_spatial_relation(pos, a, b) {}
1106 enum Functype functype() const override { return SP_DISJOINT_FUNC; }
1107 enum Functype rev_functype() const override { return SP_DISJOINT_FUNC; }
1108 const char *func_name() const override { return "mbrdisjoint"; }
1109 bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1,
1110 const gis::Geometry *g2, bool *result, bool *null) override;
1111};
1112
1114 public:
1115 Item_func_mbrequals(const POS &pos, Item *a, Item *b)
1116 : Item_func_spatial_relation(pos, a, b) {}
1117 enum Functype functype() const override { return SP_EQUALS_FUNC; }
1118 enum Functype rev_functype() const override { return SP_EQUALS_FUNC; }
1119 const char *func_name() const override { return "mbrequals"; }
1120 bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1,
1121 const gis::Geometry *g2, bool *result, bool *null) override;
1122};
1123
1125 public:
1127 : Item_func_spatial_relation(pos, a, b) {}
1128 enum Functype functype() const override { return SP_INTERSECTS_FUNC; }
1129 enum Functype rev_functype() const override { return SP_INTERSECTS_FUNC; }
1130 const char *func_name() const override { return "mbrintersects"; }
1131 bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1,
1132 const gis::Geometry *g2, bool *result, bool *null) override;
1133};
1134
1136 public:
1138 : Item_func_spatial_relation(pos, a, b) {}
1139 enum Functype functype() const override { return SP_OVERLAPS_FUNC; }
1140 enum Functype rev_functype() const override { return SP_OVERLAPS_FUNC; }
1141 const char *func_name() const override { return "mbroverlaps"; }
1142 bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1,
1143 const gis::Geometry *g2, bool *result, bool *null) override;
1144};
1145
1147 public:
1148 Item_func_mbrtouches(const POS &pos, Item *a, Item *b)
1149 : Item_func_spatial_relation(pos, a, b) {}
1150 enum Functype functype() const override { return SP_TOUCHES_FUNC; }
1151 enum Functype rev_functype() const override { return SP_TOUCHES_FUNC; }
1152 const char *func_name() const override { return "mbrtouches"; }
1153 bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1,
1154 const gis::Geometry *g2, bool *result, bool *null) override;
1155};
1156
1158 public:
1159 Item_func_mbrwithin(const POS &pos, Item *a, Item *b)
1160 : Item_func_spatial_relation(pos, a, b) {}
1161 enum Functype functype() const override { return SP_WITHIN_FUNC; }
1162 enum Functype rev_functype() const override { return SP_CONTAINS_FUNC; }
1163 const char *func_name() const override { return "mbrwithin"; }
1164 bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1,
1165 const gis::Geometry *g2, bool *result, bool *null) override;
1166};
1167
1169 public:
1171 : Item_func_spatial_relation(pos, a, b) {}
1172 enum Functype functype() const override { return SP_OVERLAPS_FUNC; }
1173 enum Functype rev_functype() const override { return SP_OVERLAPS_FUNC; }
1174 const char *func_name() const override { return "st_overlaps"; }
1175 bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1,
1176 const gis::Geometry *g2, bool *result, bool *null) override;
1177};
1178
1180 public:
1181 Item_func_st_touches(const POS &pos, Item *a, Item *b)
1182 : Item_func_spatial_relation(pos, a, b) {}
1183 enum Functype functype() const override { return SP_TOUCHES_FUNC; }
1184 enum Functype rev_functype() const override { return SP_TOUCHES_FUNC; }
1185 const char *func_name() const override { return "st_touches"; }
1186 bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1,
1187 const gis::Geometry *g2, bool *result, bool *null) override;
1188};
1189
1191 public:
1192 Item_func_st_within(const POS &pos, Item *a, Item *b)
1193 : Item_func_spatial_relation(pos, a, b) {}
1194 enum Functype functype() const override { return SP_WITHIN_FUNC; }
1195 enum Functype rev_functype() const override { return SP_CONTAINS_FUNC; }
1196 const char *func_name() const override { return "st_within"; }
1197 bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1,
1198 const gis::Geometry *g2, bool *result, bool *null) override;
1199};
1200
1201/**
1202 Spatial operations
1203*/
1205 protected:
1207 : Item_geometry_func(pos, a, b) {}
1208
1209 private:
1210 bool resolve_type(THD *thd) override {
1211 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_GEOMETRY)) return true;
1213 }
1214};
1215
1217 public:
1219 : Item_func_spatial_operation(pos, a, b) {}
1220 String *val_str(String *) override;
1221 const char *func_name() const override { return "st_difference"; }
1222};
1223
1225 public:
1227 : Item_func_spatial_operation(pos, a, b) {}
1228 String *val_str(String *) override;
1229 const char *func_name() const override { return "st_intersection"; }
1230};
1231
1233 public:
1235 : Item_func_spatial_operation(pos, a, b) {}
1236 String *val_str(String *) override;
1237 const char *func_name() const override { return "st_symdifference"; }
1238};
1239
1241 public:
1242 Item_func_st_union(const POS &pos, Item *a, Item *b)
1243 : Item_func_spatial_operation(pos, a, b) {}
1244 String *val_str(String *) override;
1245 const char *func_name() const override { return "st_union"; }
1246};
1247
1249 private:
1259
1260 // Distance and side strategies are fixed, so no need to implement
1261 // parameterization for them.
1263
1264 friend class Item_func_buffer;
1266 char tmp_buffer[16]; // The buffer for tmp_value.
1267 public:
1268 Item_func_buffer_strategy(const POS &pos, PT_item_list *ilist);
1269 const char *func_name() const override { return "st_buffer_strategy"; }
1270 String *val_str(String *) override;
1271 bool resolve_type(THD *thd) override;
1272};
1273
1275 public:
1276 Item_func_isempty(const POS &pos, Item *a) : Item_bool_func(pos, a) {}
1277 longlong val_int() override;
1278 optimize_type select_optimize(const THD *) override { return OPTIMIZE_NONE; }
1279 const char *func_name() const override { return "st_isempty"; }
1280 bool resolve_type(THD *thd) override {
1281 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_GEOMETRY)) return true;
1282 set_nullable(true);
1283 return false;
1284 }
1285};
1286
1288 public:
1289 Item_func_st_issimple(const POS &pos, Item *a) : Item_bool_func(pos, a) {}
1290 longlong val_int() override;
1291 const char *func_name() const override { return "st_issimple"; }
1292 bool resolve_type(THD *thd) override {
1293 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_GEOMETRY)) return true;
1294 return Item_bool_func::resolve_type(thd);
1295 }
1296};
1297
1299 public:
1300 Item_func_isclosed(const POS &pos, Item *a) : Item_bool_func(pos, a) {}
1301 longlong val_int() override;
1302 optimize_type select_optimize(const THD *) override { return OPTIMIZE_NONE; }
1303 const char *func_name() const override { return "st_isclosed"; }
1304 bool resolve_type(THD *thd) override {
1305 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_GEOMETRY)) return true;
1306 set_nullable(true);
1307 return false;
1308 }
1309};
1310
1312 public:
1313 Item_func_isvalid(const POS &pos, Item *a) : Item_bool_func(pos, a) {}
1314 longlong val_int() override;
1315 optimize_type select_optimize(const THD *) override { return OPTIMIZE_NONE; }
1316 const char *func_name() const override { return "st_isvalid"; }
1317 bool resolve_type(THD *thd) override {
1318 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_GEOMETRY)) return true;
1319 return Item_bool_func::resolve_type(thd);
1320 }
1321};
1322
1325
1326 public:
1327 Item_func_dimension(const POS &pos, Item *a) : Item_int_func(pos, a) {}
1328 longlong val_int() override;
1329 const char *func_name() const override { return "st_dimension"; }
1330 bool resolve_type(THD *thd) override {
1331 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_GEOMETRY)) return true;
1332 max_length = 10;
1333 set_nullable(true);
1334 return false;
1335 }
1336};
1337
1338/// The abstract superclass for all geometry coordinate mutator functions (ST_X,
1339/// ST_Y, ST_Latitude and ST_Longitude with two parameters).
1340///
1341/// @see Item_func_coordinate_observer
1343 public:
1345 bool geographic_only)
1346 : Item_geometry_func(pos, a, b), m_geographic_only(geographic_only) {}
1347 String *val_str(String *) override;
1348
1349 protected:
1350 const char *func_name() const override = 0;
1351 /// Returns the coordinate number accessed by this item.
1352 ///
1353 /// @param[in] srs The spatial reference system of the point.
1354 ///
1355 /// @return The coordinate number to access.
1357 const dd::Spatial_reference_system *srs) const = 0;
1358 bool resolve_type(THD *thd) override {
1359 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_GEOMETRY)) return true;
1360 if (param_type_is_default(thd, 1, 2, MYSQL_TYPE_DOUBLE)) return true;
1362 }
1363
1364 private:
1365 /// Whether this item will accept only geographic geometries/SRSs.
1367};
1368
1369/// The abstract superclass for all geometry coordinate oberserver functions
1370/// (ST_X, ST_Y, ST_Latitude, ST_Longitude with one parameter).
1371///
1372/// @see Item_func_coordinate_mutator
1374 public:
1375 Item_func_coordinate_observer(const POS &pos, Item *a, bool geographic_only)
1376 : Item_real_func(pos, a), m_geographic_only(geographic_only) {}
1377 double val_real() override;
1378
1379 protected:
1380 const char *func_name() const override = 0;
1381 /// Returns the coordinate number accessed by this item.
1382 ///
1383 /// @param[in] srs The spatial reference system of the point.
1384 ///
1385 /// @return The coordinate number to access.
1387 const dd::Spatial_reference_system *srs) const = 0;
1388 bool resolve_type(THD *thd) override {
1389 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_GEOMETRY)) return true;
1390 return Item_real_func::resolve_type(thd);
1391 }
1392
1393 private:
1394 /// Whether this item will accept only geographic geometries/SRSs.
1396};
1397
1398/// This class implements the two-parameter ST_Latitude function which sets the
1399/// latitude of a geographic point.
1402 public:
1404 : Item_func_coordinate_mutator(pos, a, b, true) {}
1405
1406 protected:
1407 const char *func_name() const override { return "st_latitude"; }
1409 return 1;
1410 }
1411};
1412
1413/// This class implements the one-parameter ST_Latitude function which returns
1414/// the latitude coordinate of a geographic point.
1417 public:
1419 : Item_func_coordinate_observer(pos, a, true) {}
1420
1421 protected:
1422 const char *func_name() const override { return "st_latitude"; }
1424 return 1;
1425 }
1426};
1427
1428/// This class implements the two-parameter ST_Longitude function which sets the
1429/// longitude coordinate of a point.
1432 public:
1434 : Item_func_coordinate_mutator(pos, a, b, true) {}
1435
1436 protected:
1437 const char *func_name() const override { return "st_longitude"; }
1439 return 0;
1440 }
1441};
1442
1443/// This class implements the one-parameter ST_Longitude function which returns
1444/// the longitude coordinate of a geographic point.
1447 public:
1449 : Item_func_coordinate_observer(pos, a, true) {}
1450
1451 protected:
1452 const char *func_name() const override { return "st_longitude"; }
1454 return 0;
1455 }
1456};
1457
1458/// This class implements the two-parameter ST_X function which sets the X
1459/// coordinate of a point.
1461 public:
1463 : Item_func_coordinate_mutator(pos, a, b, false) {}
1464
1465 protected:
1466 const char *func_name() const override { return "st_x"; }
1467 int coordinate_number(const dd::Spatial_reference_system *srs) const override;
1468};
1469
1470/// This class implements the one-parameter ST_X function which returns the X
1471/// coordinate of a point.
1473 public:
1475 : Item_func_coordinate_observer(pos, a, false) {}
1476
1477 protected:
1478 const char *func_name() const override { return "st_x"; }
1479 int coordinate_number(const dd::Spatial_reference_system *srs) const override;
1480};
1481
1482/// This class implements the two-parameter ST_Y function which sets the Y
1483/// coordinate of a point.
1485 public:
1487 : Item_func_coordinate_mutator(pos, a, b, false) {}
1488
1489 protected:
1490 const char *func_name() const override { return "st_y"; }
1491 int coordinate_number(const dd::Spatial_reference_system *srs) const override;
1492};
1493
1494/// This class implements the one-parameter ST_Y function which returns the Y
1495/// coordinate of a point.
1497 public:
1499 : Item_func_coordinate_observer(pos, a, false) {}
1500
1501 protected:
1502 const char *func_name() const override { return "st_y"; }
1503 int coordinate_number(const dd::Spatial_reference_system *srs) const override;
1504};
1505
1507 bool resolve_type(THD *thd) override {
1508 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_GEOMETRY)) return true;
1510 }
1511
1512 public:
1513 Item_func_swap_xy(const POS &pos, Item *a) : Item_geometry_func(pos, a) {}
1514 const char *func_name() const override { return "st_swapxy"; }
1515 String *val_str(String *) override;
1516};
1517
1520
1521 public:
1522 Item_func_numgeometries(const POS &pos, Item *a) : Item_int_func(pos, a) {}
1523 longlong val_int() override;
1524 const char *func_name() const override { return "st_numgeometries"; }
1525 bool resolve_type(THD *thd) override {
1526 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_GEOMETRY)) return true;
1527 max_length = 10;
1528 set_nullable(true);
1529 return false;
1530 }
1531};
1532
1535
1536 public:
1538 longlong val_int() override;
1539 const char *func_name() const override { return "st_numinteriorrings"; }
1540 bool resolve_type(THD *thd) override {
1541 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_GEOMETRY)) return true;
1542 max_length = 10;
1543 set_nullable(true);
1544 return false;
1545 }
1546};
1547
1550
1551 public:
1552 Item_func_numpoints(const POS &pos, Item *a) : Item_int_func(pos, a) {}
1553 longlong val_int() override;
1554 const char *func_name() const override { return "st_numpoints"; }
1555 bool resolve_type(THD *thd) override {
1556 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_GEOMETRY)) return true;
1557 max_length = 10;
1558 set_nullable(true);
1559 return false;
1560 }
1561};
1562
1564 public:
1565 Item_func_st_area(const POS &pos, Item *a) : Item_real_func(pos, a) {}
1566 double val_real() override;
1567 const char *func_name() const override { return "st_area"; }
1568 bool resolve_type(THD *thd) override {
1569 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_GEOMETRY)) return true;
1570 // ST_Area returns NULL if the geometry is empty.
1571 set_nullable(true);
1572 return false;
1573 }
1574};
1575
1577 public:
1578 /// Parses strategy stored in String object, and sets values in strats.
1579 bool parse_strategy(String *arg, gis::BufferStrategies &strats);
1580
1582 : Item_geometry_func(pos, ilist) {}
1583
1584 String *val_str(String *) override;
1585 const char *func_name() const override { return "st_buffer"; }
1586 bool resolve_type(THD *thd) override {
1587 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_GEOMETRY)) return true;
1588 if (param_type_is_default(thd, 1, 2, MYSQL_TYPE_DOUBLE)) return true;
1589 if (param_type_is_default(thd, 2, -1))
1590 return true; // Does nothing with the strategy args
1592 }
1593};
1594
1597
1598 public:
1600 : Item_real_func(pos, ilist) {}
1601 double val_real() override;
1602 const char *func_name() const override { return "st_length"; }
1603 bool resolve_type(THD *thd) override {
1604 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_GEOMETRY)) return true;
1605 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_GEOMETRY)) return true;
1606 if (Item_real_func::resolve_type(thd)) return true;
1607 set_nullable(true);
1608 return false;
1609 }
1610};
1611
1612/// This class implements the two-parameter ST_SRID function which sets
1613/// the SRID of a geometry.
1615 public:
1617 : Item_geometry_func(pos, a, b) {}
1618 String *val_str(String *) override;
1619 const char *func_name() const override { return "st_srid"; }
1620 bool resolve_type(THD *thd) override {
1621 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_GEOMETRY)) return true;
1622 if (param_type_is_default(thd, 1, 2, MYSQL_TYPE_LONGLONG)) return true;
1624 }
1625};
1626
1627/// This class implements the one-parameter ST_SRID function which
1628/// returns the SRID of a geometry.
1630 public:
1632 longlong val_int() override;
1633 const char *func_name() const override { return "st_srid"; }
1634 bool resolve_type(THD *thd) override {
1635 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_GEOMETRY)) return true;
1637 max_length = 10;
1638 return error;
1639 }
1640};
1641
1643 double geometry_collection_distance(const Geometry *g1, const Geometry *g2);
1644
1645 template <typename Coordsys, typename BG_geometry>
1646 double distance_dispatch_second_geometry(const BG_geometry &bg1,
1647 const Geometry *g2);
1648
1649 public:
1650 template <typename Coordsys>
1651 double bg_distance(const Geometry *g1, const Geometry *g2);
1652
1654 : Item_real_func(pos, ilist) {
1655 /*
1656 Either operand can be an empty geometry collection, and it's meaningless
1657 for a distance between them.
1658 */
1659 set_nullable(true);
1660 }
1661
1662 bool resolve_type(THD *thd) override {
1663 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_GEOMETRY)) return true;
1664 set_nullable(true);
1665 return false;
1666 }
1667
1668 double val_real() override;
1669 enum Functype functype() const override { return SP_DISTANCE_FUNC; }
1670 const char *func_name() const override { return "st_distance"; }
1671};
1672
1674 public:
1676 : Item_real_func(pos, ilist) {}
1677 double val_real() override;
1678 const char *func_name() const override { return "st_frechetdistance"; }
1679 bool resolve_type(THD *thd) override {
1681 if (Item_real_func::resolve_type(thd)) return true;
1682 set_nullable(true);
1683 return false;
1684 }
1685};
1686
1688 public:
1690 : Item_real_func(pos, ilist) {}
1691 double val_real() override;
1692 const char *func_name() const override { return "st_hausdorffdistance"; }
1693 bool resolve_type(THD *thd) override {
1695 if (Item_real_func::resolve_type(thd)) return true;
1696 set_nullable(true);
1697 return false;
1698 }
1699};
1700
1702 public:
1704 : Item_real_func(pos, ilist) {}
1705 double val_real() override;
1706 const char *func_name() const override { return "st_distance_sphere"; }
1707 bool resolve_type(THD *thd) override {
1708 if (param_type_is_default(thd, 0, 2, MYSQL_TYPE_GEOMETRY)) return true;
1709 if (param_type_is_default(thd, 2, 3, MYSQL_TYPE_DOUBLE)) return true;
1710 return Item_real_func::resolve_type(thd);
1711 }
1712};
1713
1714// The abstract superclass for interpolating point(s) along a line.
1716 public:
1718 : Item_geometry_func(pos, a, b) {}
1719 String *val_str(String *str) override;
1720
1721 protected:
1722 virtual bool isFractionalDistance() const = 0;
1723 virtual bool returnMultiplePoints() const = 0;
1724 bool resolve_type(THD *thd) override {
1725 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_GEOMETRY)) return true;
1726 if (param_type_is_default(thd, 1, 2, MYSQL_TYPE_DOUBLE)) return true;
1728 }
1729};
1730
1732 public:
1734 : Item_func_lineinterpolate(pos, a, b) {}
1735
1736 protected:
1737 const char *func_name() const override { return "st_lineinterpolatepoint"; }
1738 bool isFractionalDistance() const override { return true; }
1739 bool returnMultiplePoints() const override { return false; }
1740};
1741
1743 public:
1745 : Item_func_lineinterpolate(pos, a, b) {}
1746
1747 protected:
1748 const char *func_name() const override { return "st_lineinterpolatepoints"; }
1749 bool isFractionalDistance() const override { return true; }
1750 bool returnMultiplePoints() const override { return true; }
1751};
1752
1754 public:
1756 : Item_func_lineinterpolate(pos, a, b) {}
1757
1758 protected:
1759 const char *func_name() const override { return "st_pointatdistance"; }
1760 bool isFractionalDistance() const override { return false; }
1761 bool returnMultiplePoints() const override { return false; }
1762};
1763
1764/// This class implements ST_Transform function that transforms a geometry from
1765/// one SRS to another.
1767 public:
1769 : Item_geometry_func(pos, a, b) {}
1770 String *val_str(String *str) override;
1771
1772 private:
1773 const char *func_name() const override { return "st_transform"; }
1774};
1775
1776// This is an abstract class that is inherited by geometry cast items.
1778 public:
1780 : Item_geometry_func(pos, a) {}
1781 String *val_str(String *str) override;
1782 void print(const THD *thd, String *str,
1783 enum_query_type query_type) const override = 0;
1784 const char *func_name() const override = 0;
1785 enum Functype functype() const override { return TYPECAST_FUNC; }
1787 bool resolve_type(THD *thd) override {
1790 }
1791
1792 /// Casts certain geometry types to certain target geometry types.
1793 ///
1794 /// @param[in] srs The srs of the geometry being cast.
1795 /// @param[in] source_geometry The geometry being cast.
1796 /// @param[out] target_geometry The result geometry of the cast.
1797 ///
1798 /// @retval false Success.
1799 /// @retval true An error has occurred. The error has been reported with
1800 /// my_error().
1801
1802 virtual bool cast(const dd::Spatial_reference_system *srs,
1803 std::unique_ptr<gis::Geometry> *source_geometry,
1804 std::unique_ptr<gis::Geometry> *target_geometry) const = 0;
1805};
1806
1807// This class implements CAST from certain geometries to POINT type.
1809 public:
1811 : Item_typecast_geometry(pos, a) {}
1812 void print(const THD *thd, String *str,
1813 enum_query_type query_type) const override;
1814 const char *func_name() const override { return "cast_as_point"; }
1815 Field::geometry_type get_geometry_type() const override;
1817 std::unique_ptr<gis::Geometry> *source_geometry,
1818 std::unique_ptr<gis::Geometry> *target_geometry) const override;
1819};
1820
1821// This class implements CAST from certain geometries to LINESTRING type.
1823 public:
1825 : Item_typecast_geometry(pos, a) {}
1826 void print(const THD *thd, String *str,
1827 enum_query_type query_type) const override;
1828 const char *func_name() const override { return "cast_as_linestring"; }
1829 Field::geometry_type get_geometry_type() const override;
1831 std::unique_ptr<gis::Geometry> *source_geometry,
1832 std::unique_ptr<gis::Geometry> *target_geometry) const override;
1833};
1834
1835// This class implements CAST from certain geometries to POLYGON type.
1837 public:
1839 : Item_typecast_geometry(pos, a) {}
1840 void print(const THD *thd, String *str,
1841 enum_query_type query_type) const override;
1842 const char *func_name() const override { return "cast_as_polygon"; }
1843 Field::geometry_type get_geometry_type() const override;
1844 bool cast(const dd::Spatial_reference_system *srs,
1845 std::unique_ptr<gis::Geometry> *source_geometry,
1846 std::unique_ptr<gis::Geometry> *target_geometry) const override;
1847};
1848
1849// This class implements CAST from certain geometries to MULTIPOINT type.
1851 public:
1853 : Item_typecast_geometry(pos, a) {}
1854 void print(const THD *thd, String *str,
1855 enum_query_type query_type) const override;
1856 const char *func_name() const override { return "cast_as_multipoint"; }
1857 Field::geometry_type get_geometry_type() const override;
1859 std::unique_ptr<gis::Geometry> *source_geometry,
1860 std::unique_ptr<gis::Geometry> *target_geometry) const override;
1861};
1862
1863// This class implements CAST from certain geometries to MULTILINESTRING type.
1865 public:
1867 : Item_typecast_geometry(pos, a) {}
1868 void print(const THD *thd, String *str,
1869 enum_query_type query_type) const override;
1870 const char *func_name() const override { return "cast_as_multilinestring"; }
1871 Field::geometry_type get_geometry_type() const override;
1873 std::unique_ptr<gis::Geometry> *source_geometry,
1874 std::unique_ptr<gis::Geometry> *target_geometry) const override;
1875};
1876
1877// This class implements CAST from certain geometries to MULTIPOLYGON type.
1879 public:
1881 : Item_typecast_geometry(pos, a) {}
1882 void print(const THD *thd, String *str,
1883 enum_query_type query_type) const override;
1884 const char *func_name() const override { return "cast_as_multipolygon"; }
1885 Field::geometry_type get_geometry_type() const override;
1886 bool cast(const dd::Spatial_reference_system *srs,
1887 std::unique_ptr<gis::Geometry> *source_geometry,
1888 std::unique_ptr<gis::Geometry> *target_geometry) const override;
1889};
1890
1891// This class implements CAST from certain geometries to GEOMETRYCOLLECTION
1892// type.
1894 public:
1896 : Item_typecast_geometry(pos, a) {}
1897 void print(const THD *thd, String *str,
1898 enum_query_type query_type) const override;
1899 const char *func_name() const override {
1900 return "cast_as_geometrycollection";
1901 }
1902 Field::geometry_type get_geometry_type() const override;
1904 std::unique_ptr<gis::Geometry> *source_geometry,
1905 std::unique_ptr<gis::Geometry> *target_geometry) const override;
1906};
1907
1908#endif /*ITEM_GEOFUNC_INCLUDED*/
Kerberos Client Authentication nullptr
Definition: auth_kerberos_client_plugin.cc:251
This file implements a struct that is used to hold information that decide how to compute the buffer ...
A utility class to flatten any hierarchy of geometry collection into one with no nested geometry coll...
Definition: item_geofunc.h:141
Geometry_list & get_geometries()
Definition: item_geofunc.h:168
void set_comp_no_overlapped(bool b)
Definition: item_geofunc.h:156
size_t m_num_isolated
Definition: item_geofunc.h:144
std::vector< Geometry * > Geometry_list
Definition: item_geofunc.h:150
gis::srid_t get_srid() const
Definition: item_geofunc.h:158
const Geometry_list & get_geometries() const
Definition: item_geofunc.h:166
gis::srid_t m_srid
Definition: item_geofunc.h:143
Geometry * store(const Geometry *geo)
Store a geometry of GEOMETRY format into this collection.
Definition: item_geofunc.cc:4611
Inplace_vector< String > m_geosdata
Definition: item_geofunc.h:147
bool fill(const Geometry *geo, bool break_multi_geom=false)
Definition: item_geofunc.h:162
bool store_geometry(const Geometry *geo, bool break_multi_geom)
Store a Geometry object into this collection.
Definition: item_geofunc.cc:4553
size_t num_isolated() const
Definition: item_geofunc.h:172
bool comp_no_overlapped
Definition: item_geofunc.h:142
BG_geometry_collection()
Definition: item_geofunc.cc:4536
bool is_comp_no_overlapped() const
Definition: item_geofunc.h:154
std::vector< Geometry * > m_geos
Definition: item_geofunc.h:145
Inplace_vector< Geometry_buffer > m_geobufs
Definition: item_geofunc.h:146
bool all_isolated() const
Definition: item_geofunc.h:170
void set_srid(gis::srid_t srid)
Definition: item_geofunc.h:160
We have to hold result buffers in functions that return a GEOMETRY string, because such a function's ...
Definition: item_geofunc.h:82
~BG_result_buf_mgr()
Definition: item_geofunc.h:88
void add_buffer(void *buf)
Definition: item_geofunc.h:93
void * bg_result_buf
Definition: item_geofunc.h:125
void set_result_buffer(void *buf)
Definition: item_geofunc.h:115
BG_result_buf_mgr()
Definition: item_geofunc.h:86
void free_intermediate_result_buffers()
Definition: item_geofunc.h:101
void forget_buffer(void *buf)
Definition: item_geofunc.h:95
Prealloced_buffers bg_results
Definition: item_geofunc.h:131
void free_result_buffer()
Definition: item_geofunc.h:110
Prealloced_array< void *, 64 > Prealloced_buffers
Definition: item_geofunc.h:83
Definition: field.h:577
static constexpr size_t MAX_LONG_BLOB_WIDTH
Definition: field.h:739
geometry_type
Definition: field.h:720
@ GEOM_POINT
Definition: field.h:722
Definition: spatial.h:213
wkbType
Definition: spatial.h:290
Definition: spatial.h:2099
Definition: spatial.h:1152
Definition: spatial.h:2187
Utility container class to store elements stably and scalably.
Definition: inplace_vector.h:60
Base class for functions that usually take two arguments, which are possibly strings,...
Definition: item_cmpfunc.h:623
Definition: item_cmpfunc.h:294
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_cmpfunc.h:328
This class handles the following function:
Definition: item_geofunc.h:491
bool val_json(Json_wrapper *wr) override
Create a GeoJSON object, according to GeoJSON specification revision 1.0.
Definition: item_geofunc.cc:2365
Item_func_as_geojson(THD *thd, const POS &pos, Item *geometry, Item *maxdecimaldigits)
Definition: item_geofunc.h:516
bool m_add_short_crs_urn
If true, the output GeoJSON has a CRS object in the short form (e.g "EPSG:4326").
Definition: item_geofunc.h:501
bool parse_maxdecimaldigits_argument()
Parse the value in maxdecimaldigits argument.
Definition: item_geofunc.cc:2455
Item_func_as_geojson(THD *thd, const POS &pos, Item *geometry, Item *maxdecimaldigits, Item *options)
Definition: item_geofunc.h:522
int m_max_decimal_digits
Maximum number of decimal digits in printed coordinates.
Definition: item_geofunc.h:494
bool m_add_bounding_box
If true, the output GeoJSON has a bounding box for each GEOMETRY.
Definition: item_geofunc.h:496
const char * func_name() const override
Definition: item_geofunc.h:530
Item_func_as_geojson(THD *thd, const POS &pos, Item *geometry)
Definition: item_geofunc.h:511
bool parse_options_argument()
Parse the value in options argument.
Definition: item_geofunc.cc:2418
uint32 m_geometry_srid
The SRID found in the input GEOMETRY.
Definition: item_geofunc.h:508
bool fix_fields(THD *thd, Item **ref) override
Perform type checking on all arguments.
Definition: item_geofunc.cc:2488
bool m_add_long_crs_urn
If true, the output GeoJSON has a CRS object in the long form (e.g "urn:ogc:def:crs:EPSG::4326").
Definition: item_geofunc.h:506
Definition: item_geofunc.h:331
Item_func_as_wkb(const POS &pos, Item *a)
Definition: item_geofunc.h:333
const char * func_name() const override
Definition: item_geofunc.h:336
String * val_str(String *) override
Definition: item_geofunc.cc:3259
Item_func_as_wkb(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:334
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:338
Definition: item_geofunc.h:321
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.cc:3250
String * val_str_ascii(String *) override
Definition: item_geofunc.cc:3140
Item_func_as_wkt(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:324
const char * func_name() const override
Definition: item_geofunc.h:326
Item_func_as_wkt(const POS &pos, Item *a)
Definition: item_geofunc.h:323
Definition: item_geofunc.h:1248
char tmp_buffer[16]
Definition: item_geofunc.h:1266
enum_buffer_strategies
Definition: item_geofunc.h:1250
@ point_circle
Definition: item_geofunc.h:1256
@ point_square
Definition: item_geofunc.h:1257
@ join_miter
Definition: item_geofunc.h:1255
@ max_strategy
Definition: item_geofunc.h:1258
@ end_flat
Definition: item_geofunc.h:1253
@ invalid_strategy
Definition: item_geofunc.h:1251
@ end_round
Definition: item_geofunc.h:1252
@ join_round
Definition: item_geofunc.h:1254
friend class Item_func_buffer
Definition: item_geofunc.h:1264
String tmp_value
Definition: item_geofunc.h:1265
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc_buffer.cc:125
const char * func_name() const override
Definition: item_geofunc.h:1269
String * val_str(String *) override
Definition: item_geofunc_buffer.cc:133
Item_func_buffer_strategy(const POS &pos, PT_item_list *ilist)
Definition: item_geofunc_buffer.cc:117
Definition: item_geofunc.h:696
const char * func_name() const override
Definition: item_geofunc.h:704
bool bg_centroid(const Geometry *geom, String *ptwkb)
Definition: item_geofunc.cc:3830
String * val_str(String *) override
Definition: item_geofunc.cc:3613
Item_func_centroid(const POS &pos, Item *a)
Definition: item_geofunc.h:703
BG_result_buf_mgr bg_resbuf_mgr
Definition: item_geofunc.h:697
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:707
Field::geometry_type get_geometry_type() const override
Definition: item_geofunc.cc:3609
Definition: item_geofunc.h:713
BG_result_buf_mgr bg_resbuf_mgr
Definition: item_geofunc.h:714
bool bg_convex_hull(const Geometry *geom, String *wkb)
Definition: item_geofunc.cc:3936
const char * func_name() const override
Definition: item_geofunc.h:721
String * val_str(String *) override
Definition: item_geofunc.cc:3900
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:724
Field::geometry_type get_geometry_type() const override
Definition: item_geofunc.cc:3896
Item_func_convex_hull(const POS &pos, Item *a)
Definition: item_geofunc.h:720
The abstract superclass for all geometry coordinate mutator functions (ST_X, ST_Y,...
Definition: item_geofunc.h:1342
virtual int coordinate_number(const dd::Spatial_reference_system *srs) const =0
Returns the coordinate number accessed by this item.
Item_func_coordinate_mutator(const POS &pos, Item *a, Item *b, bool geographic_only)
Definition: item_geofunc.h:1344
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:1358
const char * func_name() const override=0
bool m_geographic_only
Whether this item will accept only geographic geometries/SRSs.
Definition: item_geofunc.h:1366
String * val_str(String *) override
Definition: item_geofunc.cc:4904
The abstract superclass for all geometry coordinate oberserver functions (ST_X, ST_Y,...
Definition: item_geofunc.h:1373
double val_real() override
Definition: item_geofunc.cc:4976
bool m_geographic_only
Whether this item will accept only geographic geometries/SRSs.
Definition: item_geofunc.h:1395
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:1388
Item_func_coordinate_observer(const POS &pos, Item *a, bool geographic_only)
Definition: item_geofunc.h:1375
virtual int coordinate_number(const dd::Spatial_reference_system *srs) const =0
Returns the coordinate number accessed by this item.
const char * func_name() const override=0
Definition: item_geofunc.h:1323
String value
Definition: item_geofunc.h:1324
const char * func_name() const override
Definition: item_geofunc.h:1329
longlong val_int() override
Definition: item_geofunc.cc:4828
Item_func_dimension(const POS &pos, Item *a)
Definition: item_geofunc.h:1327
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:1330
Definition: item_geofunc.h:1642
double val_real() override
Definition: item_geofunc.cc:5652
double geometry_collection_distance(const Geometry *g1, const Geometry *g2)
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:1662
const char * func_name() const override
Definition: item_geofunc.h:1670
double bg_distance(const Geometry *g1, const Geometry *g2)
enum Functype functype() const override
Definition: item_geofunc.h:1669
double distance_dispatch_second_geometry(const BG_geometry &bg1, const Geometry *g2)
Item_func_distance(const POS &pos, PT_item_list *ilist)
Definition: item_geofunc.h:1653
Definition: item_geofunc.h:730
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:736
const char * func_name() const override
Definition: item_geofunc.h:733
Field::geometry_type get_geometry_type() const override
Definition: item_geofunc.cc:3572
String * val_str(String *) override
Definition: item_geofunc.cc:3576
Item_func_envelope(const POS &pos, Item *a)
Definition: item_geofunc.h:732
This class handles two forms of the same function:
Definition: item_geofunc.h:544
char char_to_base32(char char_input)
Converts a char value to it's base32 representation, where 0 = a, 1 = b, ... , 30 = y,...
Definition: item_geofunc.cc:2867
uint geohash_max_output_length
The maximum output length of the geohash, supplied by the user.
Definition: item_geofunc.h:551
Item_func_geohash(const POS &pos, Item *longitude, Item *latitude, Item *length)
Definition: item_geofunc.h:591
String * val_str_ascii(String *) override
Encodes a pair of longitude and latitude values into a geohash string.
Definition: item_geofunc.cc:2673
double longitude
The longitude argument supplied by the user (directly or by a POINT).
Definition: item_geofunc.h:549
bool fill_and_check_fields()
Populate member variables with values from arguments.
Definition: item_geofunc.cc:2581
const double min_latitude
The minimum input latitude.
Definition: item_geofunc.h:563
bool fix_fields(THD *thd, Item **ref) override
Here we check for valid types.
Definition: item_geofunc.cc:2740
void encode_bit(double *upper_value, double *lower_value, double target_value, char *char_value, int bit_number)
Sets the bit number in char_value, determined by following formula:
Definition: item_geofunc.cc:2842
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.cc:2730
bool check_valid_latlong_type(Item *ref)
Checks if supplied item is a valid latitude or longitude, based on which type it is.
Definition: item_geofunc.cc:2531
const uint upper_limit_output_length
The absolute upper limit of geohash output length.
Definition: item_geofunc.h:581
const double min_longitude
The minimum input longitude.
Definition: item_geofunc.h:575
double latitude
The latitude argument supplied by the user (directly or by a POINT).
Definition: item_geofunc.h:547
const double max_latitude
The maximum input latitude.
Definition: item_geofunc.h:557
const double max_longitude
The maximum input longitude.
Definition: item_geofunc.h:569
const char * func_name() const override
Definition: item_geofunc.h:602
Item_func_geohash(const POS &pos, Item *point, Item *length)
Definition: item_geofunc.h:584
Definition: item_geofunc.h:199
bool do_itemize(Parse_context *pc, Item **res) override
The core function that does the actual itemization.
Definition: item_geofunc.cc:316
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:252
Item_func_geometry_from_text(const POS &pos, Item *a, Item *srid, Item *option, Functype functype)
Definition: item_geofunc.h:245
Functype
Definition: item_geofunc.h:201
Functype m_functype
Definition: item_geofunc.h:222
Item_func_geometry_from_text(const POS &pos, Item *a, Functype functype)
Definition: item_geofunc.h:240
Geometry::wkbType allowed_wkb_type() const
Get the type of geometry that this Item can return.
Definition: item_geofunc.cc:365
String * val_str(String *) override
Parses a WKT string to produce a geometry encoded with an SRID prepending its WKB bytes,...
Definition: item_geofunc.cc:423
const char * func_name() const override
Definition: item_geofunc.cc:325
Item_geometry_func super
Definition: item_geofunc.h:221
bool is_allowed_wkb_type(Geometry::wkbType type) const
Check if a geometry type is a valid return type for this Item.
Definition: item_geofunc.cc:397
Item_func_geometry_from_text(const POS &pos, Item *a, Item *srid, Functype functype)
Definition: item_geofunc.h:242
Definition: item_geofunc.h:260
Item_geometry_func super
Definition: item_geofunc.h:281
Functype
Definition: item_geofunc.h:262
Item_func_geometry_from_wkb(const POS &pos, Item *a, Item *srid, Item *option, Functype functype)
Definition: item_geofunc.h:312
Item_func_geometry_from_wkb(const POS &pos, Item *a, Item *srid, Functype functype)
Definition: item_geofunc.h:309
String tmp_value
Definition: item_geofunc.h:282
bool do_itemize(Parse_context *pc, Item **res) override
The core function that does the actual itemization.
Definition: item_geofunc.cc:576
Functype m_functype
Definition: item_geofunc.h:283
String * val_str(String *) override
Parses a WKB string to produce a geometry encoded with an SRID prepending its WKB bytes,...
Definition: item_geofunc.cc:680
Item_func_geometry_from_wkb(const POS &pos, Item *a, Functype functype)
Definition: item_geofunc.h:307
const char * func_name() const override
Definition: item_geofunc.cc:585
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:299
Geometry::wkbType allowed_wkb_type() const
Get the type of geometry that this Item can return.
Definition: item_geofunc.cc:623
bool is_allowed_wkb_type(Geometry::wkbType type) const
Check if a geometry type is a valid return type for this Item.
Definition: item_geofunc.cc:654
Definition: item_geofunc.h:347
Item_func_geometry_type(const POS &pos, Item *a)
Definition: item_geofunc.h:349
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:353
const char * func_name() const override
Definition: item_geofunc.h:352
String * val_str_ascii(String *) override
Definition: item_geofunc.cc:3366
This handles one function:
Definition: item_geofunc.h:375
bool m_toplevel
True if we're currently parsing the top-level object.
Definition: item_geofunc.h:467
static const char * TYPE_MEMBER
Definition of various string constants used for writing and reading GeoJSON data.
Definition: item_geofunc.h:422
static const char * FEATURECOLLECTION_TYPE
Definition: item_geofunc.h:442
bool parse_object(const Json_object *object, bool *rollback, String *buffer, bool is_parent_featurecollection, Geometry **geometry)
Takes a JSON object as input, and parses the data to a Geometry object.
Definition: item_geofunc.cc:1066
static const char * SHORT_EPSG_PREFIX
Definition: item_geofunc.h:431
static const char * CRS_NAME_MEMBER
Definition: item_geofunc.h:429
bool is_member_valid(const Json_dom *member, const char *member_name, enum_json_type expected_type, bool allow_null, bool *was_null)
Checks if a JSON member is valid based on input criteria.
Definition: item_geofunc.cc:1784
static const char * LINESTRING_TYPE
Definition: item_geofunc.h:436
bool parse_object_array(const Json_array *points, Geometry::wkbType type, bool *rollback, String *buffer, bool is_parent_featurecollection, Geometry **geometry)
Takes a JSON array as input, does a recursive parsing and returns a Geometry object.
Definition: item_geofunc.cc:1354
longlong m_srid_found_in_document
The SRID value of the document CRS, if one is found.
Definition: item_geofunc.h:457
double m_min_latitude
The minimum allowed latitude value (inclusive).
Definition: item_geofunc.h:463
static const char * MULTIPOLYGON_TYPE
Definition: item_geofunc.h:439
bool parse_crs_object(const Json_object *crs_object)
Takes a GeoJSON CRS object as input and parses it into a SRID.
Definition: item_geofunc.cc:1663
const Json_dom * my_find_member_ncase(const Json_object *object, const char *member_name)
Case insensitive lookup of a member in a JSON object.
Definition: item_geofunc.cc:1037
bool m_user_provided_srid
Is set to true if user provided a SRID as an argument.
Definition: item_geofunc.h:450
static const char * GEOMETRIES_MEMBER
Definition: item_geofunc.h:427
double m_min_longitude
The minimum allowed longitude value (non-inclusive).
Definition: item_geofunc.h:459
static const char * LONG_EPSG_PREFIX
Definition: item_geofunc.h:432
enum_handle_coordinate_dimension m_handle_coordinate_dimension
How higher coordinate dimensions than currently supported should be handled.
Definition: item_geofunc.h:448
static const char * COORDINATES_MEMBER
Definition: item_geofunc.h:428
static const char * FEATURE_TYPE
Definition: item_geofunc.h:441
String * val_str(String *) override
<geometry> = ST_GEOMFROMGEOJSON(<string>[, <options>[, <srid>]])
Definition: item_geofunc.cc:865
gis::srid_t m_user_srid
The SRID user provided as an argument.
Definition: item_geofunc.h:452
bool get_linestring(const Json_array *data_array, Gis_line_string *linestring)
Create a Gis_line_string from a JSON array.
Definition: item_geofunc.cc:1516
bool get_positions(const Json_array *coordinates, Gis_point *point)
Parse an array of coordinates to a Gis_point.
Definition: item_geofunc.cc:1254
const char * func_name() const override
Definition: item_geofunc.h:402
double m_max_longitude
The maximum allowed longitude (inclusive).
Definition: item_geofunc.h:461
double m_max_latitude
The maximum allowed latitude (inclusive).
Definition: item_geofunc.h:465
Item_func_geomfromgeojson(const POS &pos, Item *json_string, Item *options)
Definition: item_geofunc.h:392
static const char * CRS84_URN
Definition: item_geofunc.h:433
Geometry::wkbType get_wkbtype(const char *typestring)
Converts GeoJSON type string to a wkbType.
Definition: item_geofunc.cc:1626
static bool check_argument_valid_integer(Item *argument)
Checks if the supplied argument is a valid integer type.
Definition: item_geofunc.cc:1837
bool get_polygon(const Json_array *data_array, Gis_polygon *polygon)
Create a Gis_polygon from a JSON array.
Definition: item_geofunc.cc:1548
static const char * MULTIPOINT_TYPE
Definition: item_geofunc.h:435
Item_func_geomfromgeojson(const POS &pos, Item *json_string, Item *options, Item *srid)
Definition: item_geofunc.h:396
static const char * POINT_TYPE
Definition: item_geofunc.h:434
static const char * CRS_MEMBER
Definition: item_geofunc.h:423
bool fix_fields(THD *, Item **ref) override
Do type checking on all provided arguments.
Definition: item_geofunc.cc:1860
static const char * NAMED_CRS
Definition: item_geofunc.h:430
static const char * PROPERTIES_MEMBER
Definition: item_geofunc.h:425
Item_func_geomfromgeojson(const POS &pos, Item *json_string)
Definition: item_geofunc.h:387
static const char * GEOMETRYCOLLECTION_TYPE
Definition: item_geofunc.h:440
enum_handle_coordinate_dimension
Describing how coordinate dimensions higher than supported in MySQL should be handled.
Definition: item_geofunc.h:381
@ strip_now_reject_future
Definition: item_geofunc.h:384
@ reject_document
Definition: item_geofunc.h:382
@ strip_now_accept_future
Definition: item_geofunc.h:383
@ strip_now_strip_future
Definition: item_geofunc.h:385
static const char * FEATURES_MEMBER
Definition: item_geofunc.h:426
static const char * POLYGON_TYPE
Definition: item_geofunc.h:438
static const char * MULTILINESTRING_TYPE
Definition: item_geofunc.h:437
static const char * GEOMETRY_MEMBER
Definition: item_geofunc.h:424
Definition: item_geofunc.h:1298
longlong val_int() override
Definition: item_geofunc.cc:4765
Item_func_isclosed(const POS &pos, Item *a)
Definition: item_geofunc.h:1300
optimize_type select_optimize(const THD *) override
Definition: item_geofunc.h:1302
const char * func_name() const override
Definition: item_geofunc.h:1303
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:1304
Definition: item_geofunc.h:1274
Item_func_isempty(const POS &pos, Item *a)
Definition: item_geofunc.h:1276
optimize_type select_optimize(const THD *) override
Definition: item_geofunc.h:1278
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:1280
longlong val_int() override
Definition: item_geofunc.cc:4701
const char * func_name() const override
Definition: item_geofunc.h:1279
Definition: item_geofunc.h:1311
Item_func_isvalid(const POS &pos, Item *a)
Definition: item_geofunc.h:1313
optimize_type select_optimize(const THD *) override
Definition: item_geofunc.h:1315
const char * func_name() const override
Definition: item_geofunc.h:1316
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:1317
longlong val_int() override
Definition: item_geofunc.cc:4787
This handles the <double> = ST_LATFROMGEOHASH(<string>) function.
Definition: item_geofunc.h:674
const char * func_name() const override
Definition: item_geofunc.h:680
Item_func_latfromgeohash(const POS &pos, Item *a)
Definition: item_geofunc.h:676
This is a superclass for Item_func_longfromgeohash and Item_func_latfromgeohash, since they share alm...
Definition: item_geofunc.h:614
const double lower_latitude
The lower limit for latitude output value.
Definition: item_geofunc.h:620
bool fix_fields(THD *thd, Item **ref) override
Definition: item_geofunc.cc:2888
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.cc:2882
Item_func_latlongfromgeohash(const POS &pos, Item *a, double lower_latitude, double upper_latitude, double lower_longitude, double upper_longitude, bool start_on_even_bit_arg)
Definition: item_geofunc.h:648
const bool start_on_even_bit
If this is set to true the algorithm will start decoding on the first bit, which decodes a longitude ...
Definition: item_geofunc.h:645
static bool decode_geohash(String *geohash, double upper_latitude, double lower_latitude, double upper_longitude, double lower_longitude, double *result_latitude, double *result_longitude)
Decodes a geohash string into longitude and latitude.
Definition: item_geofunc.cc:2953
const double upper_longitude
The upper limit for longitude output value.
Definition: item_geofunc.h:638
static double round_latlongitude(double latlongitude, double error_range, double lower_limit, double upper_limit)
Rounds a latitude or longitude value.
Definition: item_geofunc.cc:3067
static bool check_geohash_argument_valid_type(Item *item)
Checks if geohash arguments is of valid type.
Definition: item_geofunc.cc:2912
const double upper_latitude
The upper limit for latitude output value.
Definition: item_geofunc.h:626
const double lower_longitude
The lower limit for longitude output value.
Definition: item_geofunc.h:632
double val_real() override
Decodes a geohash into longitude if start_on_even_bit == true, or latitude if start_on_even_bit == fa...
Definition: item_geofunc.cc:3110
Definition: item_geofunc.h:1715
Item_func_lineinterpolate(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1717
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:1724
String * val_str(String *str) override
Definition: item_geofunc.cc:5872
virtual bool returnMultiplePoints() const =0
virtual bool isFractionalDistance() const =0
Definition: item_geofunc.h:1731
bool isFractionalDistance() const override
Definition: item_geofunc.h:1738
Item_func_lineinterpolatepoint(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1733
const char * func_name() const override
Definition: item_geofunc.h:1737
bool returnMultiplePoints() const override
Definition: item_geofunc.h:1739
Definition: item_geofunc.h:1742
bool isFractionalDistance() const override
Definition: item_geofunc.h:1749
const char * func_name() const override
Definition: item_geofunc.h:1748
Item_func_lineinterpolatepoints(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1744
bool returnMultiplePoints() const override
Definition: item_geofunc.h:1750
This handles the <double> = ST_LONGFROMGEOHASH(<string>) function.
Definition: item_geofunc.h:687
Item_func_longfromgeohash(const POS &pos, Item *a)
Definition: item_geofunc.h:689
const char * func_name() const override
Definition: item_geofunc.h:693
Definition: item_geofunc.h:742
String * val_str(String *) override
Definition: item_geofunc.cc:3431
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:749
Field::geometry_type get_geometry_type() const override
Definition: item_geofunc.cc:3427
Item_func_make_envelope(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:744
const char * func_name() const override
Definition: item_geofunc.h:746
Definition: item_geofunc.h:1069
Item_func_mbrcontains(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1071
enum Functype functype() const override
Definition: item_geofunc.h:1073
bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1, const gis::Geometry *g2, bool *result, bool *null) override
Evaluate the spatial relation function.
Definition: item_geofunc_relchecks.cc:159
enum Functype rev_functype() const override
Definition: item_geofunc.h:1074
const char * func_name() const override
Definition: item_geofunc.h:1075
Definition: item_geofunc.h:1080
bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1, const gis::Geometry *g2, bool *result, bool *null) override
Evaluate the spatial relation function.
Definition: item_geofunc_relchecks.cc:166
enum Functype rev_functype() const override
Definition: item_geofunc.h:1085
Item_func_mbrcoveredby(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1082
enum Functype functype() const override
Definition: item_geofunc.h:1084
const char * func_name() const override
Definition: item_geofunc.h:1086
Definition: item_geofunc.h:1091
enum Functype rev_functype() const override
Definition: item_geofunc.h:1096
bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1, const gis::Geometry *g2, bool *result, bool *null) override
Evaluate the spatial relation function.
Definition: item_geofunc_relchecks.cc:173
Item_func_mbrcovers(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1093
enum Functype functype() const override
Definition: item_geofunc.h:1095
const char * func_name() const override
Definition: item_geofunc.h:1097
Definition: item_geofunc.h:1102
enum Functype functype() const override
Definition: item_geofunc.h:1106
bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1, const gis::Geometry *g2, bool *result, bool *null) override
Evaluate the spatial relation function.
Definition: item_geofunc_relchecks.cc:179
const char * func_name() const override
Definition: item_geofunc.h:1108
Item_func_mbrdisjoint(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1104
enum Functype rev_functype() const override
Definition: item_geofunc.h:1107
Definition: item_geofunc.h:1113
Item_func_mbrequals(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1115
enum Functype functype() const override
Definition: item_geofunc.h:1117
const char * func_name() const override
Definition: item_geofunc.h:1119
enum Functype rev_functype() const override
Definition: item_geofunc.h:1118
bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1, const gis::Geometry *g2, bool *result, bool *null) override
Evaluate the spatial relation function.
Definition: item_geofunc_relchecks.cc:186
Definition: item_geofunc.h:1124
enum Functype functype() const override
Definition: item_geofunc.h:1128
bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1, const gis::Geometry *g2, bool *result, bool *null) override
Evaluate the spatial relation function.
Definition: item_geofunc_relchecks.cc:192
enum Functype rev_functype() const override
Definition: item_geofunc.h:1129
Item_func_mbrintersects(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1126
const char * func_name() const override
Definition: item_geofunc.h:1130
Definition: item_geofunc.h:1135
enum Functype functype() const override
Definition: item_geofunc.h:1139
Item_func_mbroverlaps(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1137
bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1, const gis::Geometry *g2, bool *result, bool *null) override
Evaluate the spatial relation function.
Definition: item_geofunc_relchecks.cc:199
const char * func_name() const override
Definition: item_geofunc.h:1141
enum Functype rev_functype() const override
Definition: item_geofunc.h:1140
Definition: item_geofunc.h:1146
const char * func_name() const override
Definition: item_geofunc.h:1152
bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1, const gis::Geometry *g2, bool *result, bool *null) override
Evaluate the spatial relation function.
Definition: item_geofunc_relchecks.cc:206
Item_func_mbrtouches(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1148
enum Functype functype() const override
Definition: item_geofunc.h:1150
enum Functype rev_functype() const override
Definition: item_geofunc.h:1151
Definition: item_geofunc.h:1157
const char * func_name() const override
Definition: item_geofunc.h:1163
Item_func_mbrwithin(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1159
enum Functype functype() const override
Definition: item_geofunc.h:1161
enum Functype rev_functype() const override
Definition: item_geofunc.h:1162
bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1, const gis::Geometry *g2, bool *result, bool *null) override
Evaluate the spatial relation function.
Definition: item_geofunc_relchecks.cc:213
Definition: item_geofunc.h:1518
longlong val_int() override
Definition: item_geofunc.cc:4866
String value
Definition: item_geofunc.h:1519
const char * func_name() const override
Definition: item_geofunc.h:1524
Item_func_numgeometries(const POS &pos, Item *a)
Definition: item_geofunc.h:1522
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:1525
Definition: item_geofunc.h:1533
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:1540
Item_func_numinteriorring(const POS &pos, Item *a)
Definition: item_geofunc.h:1537
const char * func_name() const override
Definition: item_geofunc.h:1539
String value
Definition: item_geofunc.h:1534
longlong val_int() override
Definition: item_geofunc.cc:4847
Definition: item_geofunc.h:1548
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:1555
longlong val_int() override
Definition: item_geofunc.cc:4885
String value
Definition: item_geofunc.h:1549
const char * func_name() const override
Definition: item_geofunc.h:1554
Item_func_numpoints(const POS &pos, Item *a)
Definition: item_geofunc.h:1552
Definition: item_geofunc.h:784
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:791
Field::geometry_type get_geometry_type() const override
Definition: item_geofunc.cc:4218
String * val_str(String *) override
Definition: item_geofunc.cc:4222
const char * func_name() const override
Definition: item_geofunc.h:788
Item_func_point(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:786
This handles the <point> = ST_POINTFROMGEOHASH(<string>, <srid>) function.
Definition: item_geofunc.h:805
const double upper_latitude
The maximum output latitude value when decoding the geohash value.
Definition: item_geofunc.h:808
const double lower_longitude
The minimum output longitude value when decoding the geohash value.
Definition: item_geofunc.h:817
const double lower_latitude
The minimum output latitude value when decoding the geohash value.
Definition: item_geofunc.h:811
String * val_str(String *) override
Definition: item_geofunc.cc:4307
Item_func_pointfromgeohash(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:820
const char * func_name() const override
Definition: item_geofunc.h:826
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.cc:4301
const double upper_longitude
The maximum output longitude value when decoding the geohash value.
Definition: item_geofunc.h:814
bool fix_fields(THD *thd, Item **ref) override
This will check if arguments passed (geohash and SRID) are of valid types.
Definition: item_geofunc.cc:4255
Field::geometry_type get_geometry_type() const override
Definition: item_geofunc.h:830
Definition: item_geofunc.h:893
Item_func_spatial_collection(const POS &pos, PT_item_list *list, enum Geometry::wkbType ct, enum Geometry::wkbType it)
Definition: item_geofunc.h:899
enum Geometry::wkbType item_type
Definition: item_geofunc.h:896
String tmp_value
Definition: item_geofunc.h:894
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:907
enum Geometry::wkbType coll_type
Definition: item_geofunc.h:895
String * val_str(String *) override
Concatenates various items into various collections with checkings for valid wkb type of items.
Definition: item_geofunc.cc:4390
const char * func_name() const override
Definition: item_geofunc.cc:4350
Definition: item_geofunc.h:863
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:865
const char * func_name() const override
Definition: item_geofunc.h:877
String * val_str(String *) override
Definition: item_geofunc.cc:4161
Item_func_spatial_decomp_n(const POS &pos, Item *a, Item *b, Item_func::Functype ft)
Definition: item_geofunc.h:872
enum Functype decomp_func_n
Definition: item_geofunc.h:864
Definition: item_geofunc.h:835
enum Functype decomp_func
Definition: item_geofunc.h:836
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:837
Item_func_spatial_decomp(const POS &pos, Item *a, Item_func::Functype ft)
Definition: item_geofunc.h:843
String * val_str(String *) override
Definition: item_geofunc.cc:4117
const char * func_name() const override
Definition: item_geofunc.h:847
Definition: item_geofunc.h:929
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_geofunc.h:956
enum Functype rev_functype() const override
Definition: item_geofunc.h:944
enum Functype spatial_rel
Definition: item_geofunc.h:930
enum Functype functype() const override
Definition: item_geofunc.h:943
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:960
Item_func_spatial_mbr_rel(Item *a, Item *b, enum Functype sp_rel)
Definition: item_geofunc.h:933
Item_func_spatial_mbr_rel(const POS &pos, Item *a, Item *b, enum Functype sp_rel)
Definition: item_geofunc.h:937
const char * func_name() const override
longlong val_int() override
bool is_null() override
The method allows to determine nullness of a complex expression without fully evaluating it,...
Definition: item_geofunc.h:964
Spatial operations.
Definition: item_geofunc.h:1204
Item_func_spatial_operation(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1206
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:1210
Definition: item_geofunc.h:970
bool is_null() override
The method allows to determine nullness of a complex expression without fully evaluating it,...
Definition: item_geofunc.h:987
longlong val_int() override
Definition: item_geofunc_relchecks.cc:68
virtual bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1, const gis::Geometry *g2, bool *result, bool *null)=0
Evaluate the spatial relation function.
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_geofunc.h:982
Item_func_spatial_relation(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:972
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:974
Definition: item_geofunc.h:1563
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:1568
double val_real() override
Definition: item_geofunc.cc:5087
const char * func_name() const override
Definition: item_geofunc.h:1567
Item_func_st_area(const POS &pos, Item *a)
Definition: item_geofunc.h:1565
Definition: item_geofunc.h:1576
Item_func_st_buffer(const POS &pos, PT_item_list *ilist)
Definition: item_geofunc.h:1581
String * val_str(String *) override
Definition: item_geofunc.cc:5138
const char * func_name() const override
Definition: item_geofunc.h:1585
bool parse_strategy(String *arg, gis::BufferStrategies &strats)
Parses strategy stored in String object, and sets values in strats.
Definition: item_geofunc.cc:5196
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:1586
Definition: item_geofunc.h:1014
bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1, const gis::Geometry *g2, bool *result, bool *null) override
Evaluate the spatial relation function.
Definition: item_geofunc_relchecks.cc:125
const char * func_name() const override
Definition: item_geofunc.h:1020
enum Functype rev_functype() const override
Definition: item_geofunc.h:1019
Item_func_st_contains(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1016
enum Functype functype() const override
Definition: item_geofunc.h:1018
Definition: item_geofunc.h:1025
bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1, const gis::Geometry *g2, bool *result, bool *null) override
Evaluate the spatial relation function.
Definition: item_geofunc_relchecks.cc:132
enum Functype rev_functype() const override
Definition: item_geofunc.h:1030
enum Functype functype() const override
Definition: item_geofunc.h:1029
const char * func_name() const override
Definition: item_geofunc.h:1031
Item_func_st_crosses(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1027
Definition: item_geofunc.h:1216
String * val_str(String *) override
Definition: item_geofunc.cc:5587
Item_func_st_difference(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1218
const char * func_name() const override
Definition: item_geofunc.h:1221
Definition: item_geofunc.h:1036
bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1, const gis::Geometry *g2, bool *result, bool *null) override
Evaluate the spatial relation function.
Definition: item_geofunc_relchecks.cc:139
enum Functype functype() const override
Definition: item_geofunc.h:1040
Item_func_st_disjoint(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1038
enum Functype rev_functype() const override
Definition: item_geofunc.h:1041
const char * func_name() const override
Definition: item_geofunc.h:1042
Definition: item_geofunc.h:1701
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:1707
Item_func_st_distance_sphere(const POS &pos, PT_item_list *ilist)
Definition: item_geofunc.h:1703
const char * func_name() const override
Definition: item_geofunc.h:1706
double val_real() override
Definition: item_geofunc.cc:5719
Definition: item_geofunc.h:1047
enum Functype rev_functype() const override
Definition: item_geofunc.h:1052
enum Functype functype() const override
Definition: item_geofunc.h:1051
const char * func_name() const override
Definition: item_geofunc.h:1053
bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1, const gis::Geometry *g2, bool *result, bool *null) override
Evaluate the spatial relation function.
Definition: item_geofunc_relchecks.cc:146
Item_func_st_equals(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1049
Definition: item_geofunc.h:1673
Item_func_st_frechet_distance(const POS &pos, PT_item_list *ilist)
Definition: item_geofunc.h:1675
const char * func_name() const override
Definition: item_geofunc.h:1678
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:1679
double val_real() override
Definition: item_geofunc.cc:5459
Definition: item_geofunc.h:1687
Item_func_st_hausdorff_distance(const POS &pos, PT_item_list *ilist)
Definition: item_geofunc.h:1689
const char * func_name() const override
Definition: item_geofunc.h:1692
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:1693
double val_real() override
Definition: item_geofunc.cc:5523
Definition: item_geofunc.h:1224
String * val_str(String *) override
Definition: item_geofunc.cc:5816
const char * func_name() const override
Definition: item_geofunc.h:1229
Item_func_st_intersection(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1226
Definition: item_geofunc.h:1058
enum Functype functype() const override
Definition: item_geofunc.h:1062
enum Functype rev_functype() const override
Definition: item_geofunc.h:1063
Item_func_st_intersects(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1060
bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1, const gis::Geometry *g2, bool *result, bool *null) override
Evaluate the spatial relation function.
Definition: item_geofunc_relchecks.cc:152
const char * func_name() const override
Definition: item_geofunc.h:1064
Definition: item_geofunc.h:1287
longlong val_int() override
Definition: item_geofunc.cc:4719
const char * func_name() const override
Definition: item_geofunc.h:1291
Item_func_st_issimple(const POS &pos, Item *a)
Definition: item_geofunc.h:1289
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:1292
This class implements the two-parameter ST_Latitude function which sets the latitude of a geographic ...
Definition: item_geofunc.h:1401
Item_func_st_latitude_mutator(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1403
const char * func_name() const override
Definition: item_geofunc.h:1407
int coordinate_number(const dd::Spatial_reference_system *) const override
Returns the coordinate number accessed by this item.
Definition: item_geofunc.h:1408
This class implements the one-parameter ST_Latitude function which returns the latitude coordinate of...
Definition: item_geofunc.h:1416
Item_func_st_latitude_observer(const POS &pos, Item *a)
Definition: item_geofunc.h:1418
const char * func_name() const override
Definition: item_geofunc.h:1422
int coordinate_number(const dd::Spatial_reference_system *) const override
Returns the coordinate number accessed by this item.
Definition: item_geofunc.h:1423
Definition: item_geofunc.h:1595
const char * func_name() const override
Definition: item_geofunc.h:1602
String value
Definition: item_geofunc.h:1596
Item_func_st_length(const POS &pos, PT_item_list *ilist)
Definition: item_geofunc.h:1599
double val_real() override
Definition: item_geofunc.cc:5318
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:1603
This class implements the two-parameter ST_Longitude function which sets the longitude coordinate of ...
Definition: item_geofunc.h:1431
Item_func_st_longitude_mutator(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1433
const char * func_name() const override
Definition: item_geofunc.h:1437
int coordinate_number(const dd::Spatial_reference_system *) const override
Returns the coordinate number accessed by this item.
Definition: item_geofunc.h:1438
This class implements the one-parameter ST_Longitude function which returns the longitude coordinate ...
Definition: item_geofunc.h:1446
int coordinate_number(const dd::Spatial_reference_system *) const override
Returns the coordinate number accessed by this item.
Definition: item_geofunc.h:1453
Item_func_st_longitude_observer(const POS &pos, Item *a)
Definition: item_geofunc.h:1448
const char * func_name() const override
Definition: item_geofunc.h:1452
Definition: item_geofunc.h:1168
Item_func_st_overlaps(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1170
enum Functype functype() const override
Definition: item_geofunc.h:1172
enum Functype rev_functype() const override
Definition: item_geofunc.h:1173
bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1, const gis::Geometry *g2, bool *result, bool *null) override
Evaluate the spatial relation function.
Definition: item_geofunc_relchecks.cc:219
const char * func_name() const override
Definition: item_geofunc.h:1174
Definition: item_geofunc.h:1753
Item_func_st_pointatdistance(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1755
bool returnMultiplePoints() const override
Definition: item_geofunc.h:1761
bool isFractionalDistance() const override
Definition: item_geofunc.h:1760
const char * func_name() const override
Definition: item_geofunc.h:1759
Item that implements function ST_Simplify, which simplifies a geometry using the Douglas-Peucker algo...
Definition: item_geofunc.h:770
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:774
String * val_str(String *) override
Definition: item_geofunc.cc:4070
Item_func_st_simplify(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:772
const char * func_name() const override
Definition: item_geofunc.h:781
This class implements the two-parameter ST_SRID function which sets the SRID of a geometry.
Definition: item_geofunc.h:1614
String * val_str(String *) override
Definition: item_geofunc.cc:5413
const char * func_name() const override
Definition: item_geofunc.h:1619
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:1620
Item_func_st_srid_mutator(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1616
This class implements the one-parameter ST_SRID function which returns the SRID of a geometry.
Definition: item_geofunc.h:1629
Item_func_st_srid_observer(const POS &pos, Item *a)
Definition: item_geofunc.h:1631
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:1634
const char * func_name() const override
Definition: item_geofunc.h:1633
longlong val_int() override
Definition: item_geofunc.cc:5373
Definition: item_geofunc.h:1232
String * val_str(String *) override
Definition: item_geofunc.cc:5943
Item_func_st_symdifference(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1234
const char * func_name() const override
Definition: item_geofunc.h:1237
Definition: item_geofunc.h:1179
enum Functype functype() const override
Definition: item_geofunc.h:1183
Item_func_st_touches(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1181
enum Functype rev_functype() const override
Definition: item_geofunc.h:1184
const char * func_name() const override
Definition: item_geofunc.h:1185
bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1, const gis::Geometry *g2, bool *result, bool *null) override
Evaluate the spatial relation function.
Definition: item_geofunc_relchecks.cc:226
This class implements ST_Transform function that transforms a geometry from one SRS to another.
Definition: item_geofunc.h:1766
const char * func_name() const override
Definition: item_geofunc.h:1773
String * val_str(String *str) override
Definition: item_geofunc.cc:6008
Item_func_st_transform(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1768
Definition: item_geofunc.h:1240
Item_func_st_union(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1242
String * val_str(String *) override
Definition: item_geofunc.cc:4636
const char * func_name() const override
Definition: item_geofunc.h:1245
Definition: item_geofunc.h:1190
bool eval(const dd::Spatial_reference_system *srs, const gis::Geometry *g1, const gis::Geometry *g2, bool *result, bool *null) override
Evaluate the spatial relation function.
Definition: item_geofunc_relchecks.cc:233
enum Functype rev_functype() const override
Definition: item_geofunc.h:1195
enum Functype functype() const override
Definition: item_geofunc.h:1194
Item_func_st_within(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1192
const char * func_name() const override
Definition: item_geofunc.h:1196
This class implements the two-parameter ST_X function which sets the X coordinate of a point.
Definition: item_geofunc.h:1460
int coordinate_number(const dd::Spatial_reference_system *srs) const override
Returns the coordinate number accessed by this item.
Definition: item_geofunc.cc:5030
Item_func_st_x_mutator(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1462
const char * func_name() const override
Definition: item_geofunc.h:1466
This class implements the one-parameter ST_X function which returns the X coordinate of a point.
Definition: item_geofunc.h:1472
int coordinate_number(const dd::Spatial_reference_system *srs) const override
Returns the coordinate number accessed by this item.
Definition: item_geofunc.cc:5036
Item_func_st_x_observer(const POS &pos, Item *a)
Definition: item_geofunc.h:1474
const char * func_name() const override
Definition: item_geofunc.h:1478
This class implements the two-parameter ST_Y function which sets the Y coordinate of a point.
Definition: item_geofunc.h:1484
int coordinate_number(const dd::Spatial_reference_system *srs) const override
Returns the coordinate number accessed by this item.
Definition: item_geofunc.cc:5042
const char * func_name() const override
Definition: item_geofunc.h:1490
Item_func_st_y_mutator(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:1486
This class implements the one-parameter ST_Y function which returns the Y coordinate of a point.
Definition: item_geofunc.h:1496
int coordinate_number(const dd::Spatial_reference_system *srs) const override
Returns the coordinate number accessed by this item.
Definition: item_geofunc.cc:5048
const char * func_name() const override
Definition: item_geofunc.h:1502
Item_func_st_y_observer(const POS &pos, Item *a)
Definition: item_geofunc.h:1498
Definition: item_geofunc.h:1506
const char * func_name() const override
Definition: item_geofunc.h:1514
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:1507
String * val_str(String *) override
Definition: item_geofunc.cc:5054
Item_func_swap_xy(const POS &pos, Item *a)
Definition: item_geofunc.h:1513
Definition: item_geofunc.h:755
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:761
String * val_str(String *) override
Definition: item_geofunc.cc:3387
const char * func_name() const override
Definition: item_geofunc.h:760
Item_func_validate(const POS &pos, Item *a)
Definition: item_geofunc.h:759
String arg_val
Definition: item_geofunc.h:756
Item ** args
Array of pointers to arguments.
Definition: item_func.h:107
virtual enum Functype functype() const
Definition: item_func.h:366
Functype
Definition: item_func.h:209
@ SP_CROSSES_FUNC
Definition: item_func.h:237
@ SP_EXTERIORRING
Definition: item_func.h:245
@ SP_EQUALS_FUNC
Definition: item_func.h:232
@ SP_COVEREDBY_FUNC
Definition: item_func.h:240
@ SP_TOUCHES_FUNC
Definition: item_func.h:236
@ SP_DISJOINT_FUNC
Definition: item_func.h:233
@ SP_STARTPOINT
Definition: item_func.h:243
@ SP_POINTN
Definition: item_func.h:246
@ SP_GEOMETRYN
Definition: item_func.h:247
@ TYPECAST_FUNC
Definition: item_func.h:258
@ SP_DISTANCE_FUNC
Definition: item_func.h:234
@ SP_WITHIN_FUNC
Definition: item_func.h:238
@ SP_INTERIORRINGN
Definition: item_func.h:248
@ SP_INTERSECTS_FUNC
Definition: item_func.h:235
@ SP_COVERS_FUNC
Definition: item_func.h:241
@ SP_CONTAINS_FUNC
Definition: item_func.h:239
@ SP_ENDPOINT
Definition: item_func.h:244
@ SP_OVERLAPS_FUNC
Definition: item_func.h:242
optimize_type
Definition: item_func.h:358
@ OPTIMIZE_NONE
Definition: item_func.h:359
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_func.h:717
enum Type type() const override
Definition: item_func.h:365
bool param_type_is_default(THD *thd, uint start, uint end, uint step, enum_field_types def)
For arguments of this Item_func ("args" array), in range [start, start+step, start+2*step,...
Definition: item_func.cc:528
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_func.cc:748
uint arg_count
How many arguments in 'args'.
Definition: item_func.h:130
Definition: item_geofunc.h:179
Field * tmp_table_field(TABLE *t_arg) override
Definition: item_geofunc.cc:299
Item_geometry_func(Item *a, Item *b)
Definition: item_geofunc.h:186
Item_geometry_func(const POS &pos, Item *a, Item *b, Item *c)
Definition: item_geofunc.h:191
Item_geometry_func(Item *a)
Definition: item_geofunc.h:183
Item_geometry_func(Item *a, Item *b, Item *c)
Definition: item_geofunc.h:190
Item_geometry_func(const POS &pos, Item *a)
Definition: item_geofunc.h:184
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.cc:308
Item_geometry_func()
Definition: item_geofunc.h:181
Item_geometry_func(const POS &pos, Item *a, Item *b)
Definition: item_geofunc.h:187
Definition: item_func.h:1020
Base class for all item functions that a return JSON value.
Definition: item_json_func.h:158
Definition: item_func.h:832
Definition: item_strfunc.h:148
Definition: item_strfunc.h:76
Definition: item_geofunc.h:1777
const char * func_name() const override=0
enum Functype functype() const override
Definition: item_geofunc.h:1785
Item_typecast_geometry(const POS &pos, Item *a)
Definition: item_geofunc.h:1779
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_geofunc.h:1787
String * val_str(String *str) override
Definition: item_geofunc.cc:6076
virtual bool cast(const dd::Spatial_reference_system *srs, std::unique_ptr< gis::Geometry > *source_geometry, std::unique_ptr< gis::Geometry > *target_geometry) const =0
Casts certain geometry types to certain target geometry types.
void print(const THD *thd, String *str, enum_query_type query_type) const override=0
This method is used for to:
Field::geometry_type get_geometry_type() const override=0
Definition: item_geofunc.h:1893
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_geofunc.cc:7015
bool cast(const dd::Spatial_reference_system *, std::unique_ptr< gis::Geometry > *source_geometry, std::unique_ptr< gis::Geometry > *target_geometry) const override
Casts certain geometry types to certain target geometry types.
Definition: item_geofunc.cc:6960
const char * func_name() const override
Definition: item_geofunc.h:1899
Item_typecast_geometrycollection(const POS &pos, Item *a)
Definition: item_geofunc.h:1895
Field::geometry_type get_geometry_type() const override
Definition: item_geofunc.cc:7010
Definition: item_geofunc.h:1822
Item_typecast_linestring(const POS &pos, Item *a)
Definition: item_geofunc.h:1824
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_geofunc.cc:6318
bool cast(const dd::Spatial_reference_system *, std::unique_ptr< gis::Geometry > *source_geometry, std::unique_ptr< gis::Geometry > *target_geometry) const override
Casts certain geometry types to certain target geometry types.
Definition: item_geofunc.cc:6197
Field::geometry_type get_geometry_type() const override
Definition: item_geofunc.cc:6314
const char * func_name() const override
Definition: item_geofunc.h:1828
Definition: item_geofunc.h:1864
Item_typecast_multilinestring(const POS &pos, Item *a)
Definition: item_geofunc.h:1866
bool cast(const dd::Spatial_reference_system *, std::unique_ptr< gis::Geometry > *source_geometry, std::unique_ptr< gis::Geometry > *target_geometry) const override
Casts certain geometry types to certain target geometry types.
Definition: item_geofunc.cc:6651
const char * func_name() const override
Definition: item_geofunc.h:1870
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_geofunc.cc:6788
Field::geometry_type get_geometry_type() const override
Definition: item_geofunc.cc:6784
Definition: item_geofunc.h:1850
Item_typecast_multipoint(const POS &pos, Item *a)
Definition: item_geofunc.h:1852
const char * func_name() const override
Definition: item_geofunc.h:1856
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_geofunc.cc:6644
Field::geometry_type get_geometry_type() const override
Definition: item_geofunc.cc:6640
bool cast(const dd::Spatial_reference_system *, std::unique_ptr< gis::Geometry > *source_geometry, std::unique_ptr< gis::Geometry > *target_geometry) const override
Casts certain geometry types to certain target geometry types.
Definition: item_geofunc.cc:6550
Definition: item_geofunc.h:1878
Item_typecast_multipolygon(const POS &pos, Item *a)
Definition: item_geofunc.h:1880
const char * func_name() const override
Definition: item_geofunc.h:1884
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_geofunc.cc:6953
bool cast(const dd::Spatial_reference_system *srs, std::unique_ptr< gis::Geometry > *source_geometry, std::unique_ptr< gis::Geometry > *target_geometry) const override
Casts certain geometry types to certain target geometry types.
Definition: item_geofunc.cc:6795
Field::geometry_type get_geometry_type() const override
Definition: item_geofunc.cc:6949
Definition: item_geofunc.h:1808
bool cast(const dd::Spatial_reference_system *, std::unique_ptr< gis::Geometry > *source_geometry, std::unique_ptr< gis::Geometry > *target_geometry) const override
Casts certain geometry types to certain target geometry types.
Definition: item_geofunc.cc:6124
const char * func_name() const override
Definition: item_geofunc.h:1814
Item_typecast_point(const POS &pos, Item *a)
Definition: item_geofunc.h:1810
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_geofunc.cc:6190
Field::geometry_type get_geometry_type() const override
Definition: item_geofunc.cc:6186
Definition: item_geofunc.h:1836
Field::geometry_type get_geometry_type() const override
Definition: item_geofunc.cc:6539
const char * func_name() const override
Definition: item_geofunc.h:1842
Item_typecast_polygon(const POS &pos, Item *a)
Definition: item_geofunc.h:1838
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_geofunc.cc:6543
bool cast(const dd::Spatial_reference_system *srs, std::unique_ptr< gis::Geometry > *source_geometry, std::unique_ptr< gis::Geometry > *target_geometry) const override
Casts certain geometry types to certain target geometry types.
Definition: item_geofunc.cc:6325
Base class that is used to represent any kind of expression in a relational query.
Definition: item.h:930
void set_nullable(bool nullable)
Definition: item.h:3687
void set_data_type_blob(enum_field_types type, uint32 max_l)
Set the Item to be of BLOB type.
Definition: item.h:1683
static const CHARSET_INFO * default_charset()
Definition: item.cc:1760
virtual void print(const THD *, String *str, enum_query_type) const
This method is used for to:
Definition: item.h:2488
enum_field_types data_type() const
Retrieve the derived data type of the Item.
Definition: item.h:1481
bool fixed
True if item has been resolved.
Definition: item.h:3675
bool null_value
True if item is null.
Definition: item.h:3712
void set_data_type_string(uint32 max_l)
Set the Item to be variable length string.
Definition: item.h:1600
uint32 max_length
Maximum length of result of evaluating this item, in number of bytes.
Definition: item.h:3601
Represents a JSON array container, i.e.
Definition: json_dom.h:513
JSON DOM abstract base class.
Definition: json_dom.h:172
Represents a JSON container value of type "object" (ECMA), type J_OBJECT here.
Definition: json_dom.h:367
Abstraction for accessing JSON values irrespective of whether they are (started out as) binary JSON v...
Definition: json_dom.h:1150
Wrapper class for an Item list head, used to allocate Item lists in the parser in a context-independe...
Definition: parse_tree_helpers.h:105
void error(Context *pc, const POS &pos) const
syntax_error() function replacement for deferred reporting of syntax errors
Definition: parse_tree_node_base.h:344
size_type erase_unique(const value_type &val)
Similar to std::set<>::erase() Removes a single element from the array by value.
Definition: prealloced_array.h:450
void clear()
Removes (and destroys) all elements.
Definition: prealloced_array.h:610
void * * iterator
Definition: prealloced_array.h:116
iterator begin()
begin : Returns a pointer to the first element in the array.
Definition: prealloced_array.h:254
std::pair< iterator, bool > insert_unique(const value_type &val)
Similar to std::set<>::insert() Extends the array by inserting a new element, but only if it cannot b...
Definition: prealloced_array.h:430
iterator end()
Definition: prealloced_array.h:255
Using this class is fraught with peril, and you need to be very careful when doing so.
Definition: sql_string.h:167
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:36
Definition: spatial_reference_system.h:53
Abstract superclass for all geometric objects.
Definition: geometries.h:100
static char buf[MAX_BUF]
Definition: conf_to_src.cc:73
enum_query_type
Query type constants (usable as bitmap flags).
Definition: enum_query_type.h:31
@ QT_NO_DATA_EXPANSION
If an expression is constant, print the expression, not the value it evaluates to.
Definition: enum_query_type.h:76
This file contains the field type.
@ MYSQL_TYPE_LONGLONG
Definition: field_types.h:64
@ MYSQL_TYPE_LONG_BLOB
Definition: field_types.h:86
@ MYSQL_TYPE_GEOMETRY
Definition: field_types.h:90
@ MYSQL_TYPE_DOUBLE
Definition: field_types.h:61
void my_error(int nr, myf MyFlags,...)
Fill in and print a previously registered error message.
Definition: my_error.cc:216
static constexpr unsigned PSI_INSTRUMENT_ME
Definition: psi_bits.h:43
static const int MAX_CRS_WIDTH
Max width of long CRS URN supported + max width of SRID + '\0'.
Definition: item_geofunc.h:471
enum_json_type
Json values in MySQL comprises the stand set of JSON values plus a MySQL specific set.
Definition: json_dom.h:108
Some integer typedefs for easier portability.
long long int longlong
Definition: my_inttypes.h:55
#define MYF(v)
Definition: my_inttypes.h:97
uint32_t uint32
Definition: my_inttypes.h:67
Common header for many mysys elements.
Common definition between mysql server & client.
#define MAX_INT_WIDTH
Max width for a LONG w.o.
Definition: mysql_com.h:901
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1105
Definition: buf0block_hint.cc:30
PT & ref(PT *tp)
Definition: tablespace_impl.cc:359
The version of the current data dictionary table definitions.
Definition: dictionary_client.h:43
Definition: area.cc:47
bool length(const dd::Spatial_reference_system *srs, const Geometry *g1, double *length, bool *null) noexcept
Computes the length of linestrings and multilinestrings.
Definition: length.cc:76
std::uint32_t srid_t
A spatial reference system ID (SRID).
Definition: srid.h:33
mutable_buffer buffer(void *p, size_t n) noexcept
Definition: buffer.h:418
Definition: options.cc:57
std::list< T, ut::allocator< T > > list
Specialization of list which uses ut_allocator.
Definition: ut0new.h:2880
Performance schema instrumentation interface.
void gis_wkb_raw_free(void *p)
Definition: spatial.h:211
static bool rollback(THD *thd)
Abort the current statement and transaction.
Definition: sql_cmd_srs.cc:140
Our own string classes, used pervasively throughout the executor.
Bison "location" class.
Definition: parse_location.h:43
Environment data for the contextualization phase.
Definition: parse_tree_node_base.h:420
Definition: table.h:1421
Definition: buffer_strategies.h:45
Definition: result.h:30