Current Path: > > usr > include > mysql > server > > private
Operation : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64 Software : Apache Server IP : 162.0.232.56 | Your IP: 216.73.216.111 Domains : 1034 Domain(s) Permission : [ 0755 ]
Name | Type | Size | Last Modified | Actions |
---|---|---|---|---|
atomic | Directory | - | - | |
aligned.h | File | 1136 bytes | May 28 2025 17:32:51. | |
aria_backup.h | File | 1547 bytes | May 28 2025 17:32:51. | |
assume_aligned.h | File | 2350 bytes | May 28 2025 17:32:51. | |
authors.h | File | 10141 bytes | May 28 2025 17:32:51. | |
backup.h | File | 1703 bytes | May 28 2025 17:32:51. | |
bounded_queue.h | File | 6093 bytes | May 28 2025 17:32:51. | |
client_settings.h | File | 1935 bytes | May 28 2025 17:32:51. | |
compat56.h | File | 2280 bytes | May 28 2025 17:32:51. | |
config.h | File | 14574 bytes | May 28 2025 17:32:51. | |
contributors.h | File | 4878 bytes | May 28 2025 17:32:51. | |
create_options.h | File | 4524 bytes | May 28 2025 17:32:51. | |
create_tmp_table.h | File | 2808 bytes | May 28 2025 17:32:51. | |
cset_narrowing.h | File | 3968 bytes | May 28 2025 17:32:51. | |
custom_conf.h | File | 1082 bytes | May 28 2025 17:32:51. | |
datadict.h | File | 1700 bytes | May 28 2025 17:32:51. | |
ddl_log.h | File | 12685 bytes | May 28 2025 17:32:51. | |
debug.h | File | 1234 bytes | May 28 2025 17:32:51. | |
debug_sync.h | File | 2046 bytes | May 28 2025 17:32:51. | |
derived_handler.h | File | 2379 bytes | May 28 2025 17:32:51. | |
derror.h | File | 980 bytes | May 28 2025 17:32:51. | |
des_key_file.h | File | 1236 bytes | May 28 2025 17:32:51. | |
discover.h | File | 1570 bytes | May 28 2025 17:32:51. | |
dur_prop.h | File | 1082 bytes | May 28 2025 17:32:51. | |
embedded_priv.h | File | 1733 bytes | May 28 2025 17:32:51. | |
event_data_objects.h | File | 4187 bytes | May 28 2025 17:32:51. | |
event_db_repository.h | File | 3648 bytes | May 28 2025 17:32:51. | |
event_parse_data.h | File | 2899 bytes | May 28 2025 17:32:51. | |
event_queue.h | File | 3438 bytes | May 28 2025 17:32:51. | |
event_scheduler.h | File | 3290 bytes | May 28 2025 17:32:51. | |
events.h | File | 4704 bytes | May 28 2025 17:32:51. | |
field.h | File | 220415 bytes | May 28 2025 17:32:51. | |
field_comp.h | File | 1174 bytes | May 28 2025 17:32:51. | |
filesort.h | File | 7283 bytes | May 28 2025 17:32:51. | |
filesort_utils.h | File | 8195 bytes | May 28 2025 17:32:51. | |
ft_global.h | File | 3113 bytes | May 28 2025 17:32:51. | |
gcalc_slicescan.h | File | 17272 bytes | May 28 2025 17:32:51. | |
gcalc_tools.h | File | 11900 bytes | May 28 2025 17:32:51. | |
grant.h | File | 2758 bytes | May 28 2025 17:32:51. | |
group_by_handler.h | File | 3534 bytes | May 28 2025 17:32:51. | |
gstream.h | File | 2437 bytes | May 28 2025 17:32:51. | |
ha_handler_stats.h | File | 2335 bytes | May 28 2025 17:32:51. | |
ha_partition.h | File | 64413 bytes | May 28 2025 17:32:51. | |
ha_sequence.h | File | 6245 bytes | May 28 2025 17:32:51. | |
handle_connections_win.h | File | 884 bytes | May 28 2025 17:32:51. | |
handler.h | File | 201171 bytes | May 28 2025 17:32:51. | |
hash.h | File | 4449 bytes | May 28 2025 17:32:51. | |
hash_filo.h | File | 5688 bytes | May 28 2025 17:32:51. | |
heap.h | File | 9480 bytes | May 28 2025 17:32:51. | |
hostname.h | File | 5419 bytes | May 28 2025 17:32:51. | |
ilist.h | File | 7048 bytes | May 28 2025 17:32:51. | |
init.h | File | 852 bytes | May 28 2025 17:32:51. | |
innodb_priv.h | File | 1319 bytes | May 28 2025 17:32:51. | |
item.h | File | 279188 bytes | May 28 2025 17:32:51. | |
item_cmpfunc.h | File | 135027 bytes | May 28 2025 17:32:51. | |
item_create.h | File | 11501 bytes | May 28 2025 17:32:51. | |
item_func.h | File | 136655 bytes | May 28 2025 17:32:51. | |
item_geofunc.h | File | 38904 bytes | May 28 2025 17:32:51. | |
item_jsonfunc.h | File | 22516 bytes | May 28 2025 17:32:51. | |
item_row.h | File | 5221 bytes | May 28 2025 17:32:51. | |
item_strfunc.h | File | 72241 bytes | May 28 2025 17:32:51. | |
item_subselect.h | File | 59153 bytes | May 28 2025 17:32:51. | |
item_sum.h | File | 72287 bytes | May 28 2025 17:32:51. | |
item_timefunc.h | File | 64615 bytes | May 28 2025 17:32:51. | |
item_vers.h | File | 4334 bytes | May 28 2025 17:32:51. | |
item_windowfunc.h | File | 34315 bytes | May 28 2025 17:32:51. | |
item_xmlfunc.h | File | 4607 bytes | May 28 2025 17:32:51. | |
json_table.h | File | 9506 bytes | May 28 2025 17:32:51. | |
key.h | File | 2132 bytes | May 28 2025 17:32:51. | |
keycaches.h | File | 1995 bytes | May 28 2025 17:32:51. | |
lex.h | File | 29827 bytes | May 28 2025 17:32:51. | |
lex_string.h | File | 4068 bytes | May 28 2025 17:32:51. | |
lex_symbol.h | File | 1323 bytes | May 28 2025 17:32:51. | |
lf.h | File | 6462 bytes | May 28 2025 17:32:51. | |
lock.h | File | 2203 bytes | May 28 2025 17:32:51. | |
log.h | File | 46083 bytes | May 28 2025 17:32:51. | |
log_event.h | File | 186410 bytes | May 28 2025 17:32:51. | |
log_event_data_type.h | File | 1890 bytes | May 28 2025 17:32:51. | |
log_event_old.h | File | 19830 bytes | May 28 2025 17:32:51. | |
log_slow.h | File | 2442 bytes | May 28 2025 17:32:51. | |
maria.h | File | 5872 bytes | May 28 2025 17:32:51. | |
mariadb.h | File | 1277 bytes | May 28 2025 17:32:51. | |
mdl.h | File | 38468 bytes | May 28 2025 17:32:51. | |
mem_root_array.h | File | 7106 bytes | May 28 2025 17:32:51. | |
message.h | File | 1195 bytes | May 28 2025 17:32:51. | |
multi_range_read.h | File | 23179 bytes | May 28 2025 17:32:51. | |
my_alarm.h | File | 2429 bytes | May 28 2025 17:32:51. | |
my_apc.h | File | 4747 bytes | May 28 2025 17:32:51. | |
my_atomic.h | File | 7281 bytes | May 28 2025 17:32:51. | |
my_atomic_wrapper.h | File | 3051 bytes | May 28 2025 17:32:51. | |
my_base.h | File | 27210 bytes | May 28 2025 17:32:51. | |
my_bit.h | File | 6196 bytes | May 28 2025 17:32:51. | |
my_bitmap.h | File | 5882 bytes | May 28 2025 17:32:51. | |
my_check_opt.h | File | 2618 bytes | May 28 2025 17:32:51. | |
my_compare.h | File | 11194 bytes | May 28 2025 17:32:51. | |
my_counter.h | File | 1721 bytes | May 28 2025 17:32:51. | |
my_cpu.h | File | 4855 bytes | May 28 2025 17:32:51. | |
my_crypt.h | File | 904 bytes | May 28 2025 17:32:51. | |
my_decimal.h | File | 14489 bytes | May 28 2025 17:32:51. | |
my_default.h | File | 1880 bytes | May 28 2025 17:32:51. | |
my_handler_errors.h | File | 4882 bytes | May 28 2025 17:32:51. | |
my_json_writer.h | File | 18382 bytes | May 28 2025 17:32:51. | |
my_libwrap.h | File | 1183 bytes | May 28 2025 17:32:51. | |
my_md5.h | File | 1486 bytes | May 28 2025 17:32:51. | |
my_minidump.h | File | 848 bytes | May 28 2025 17:32:51. | |
my_nosys.h | File | 1438 bytes | May 28 2025 17:32:51. | |
my_rdtsc.h | File | 8425 bytes | May 28 2025 17:32:51. | |
my_rnd.h | File | 1064 bytes | May 28 2025 17:32:51. | |
my_service_manager.h | File | 2050 bytes | May 28 2025 17:32:51. | |
my_stack_alloc.h | File | 6493 bytes | May 28 2025 17:32:51. | |
my_stacktrace.h | File | 3215 bytes | May 28 2025 17:32:51. | |
my_time.h | File | 10466 bytes | May 28 2025 17:32:51. | |
my_tree.h | File | 3991 bytes | May 28 2025 17:32:51. | |
my_uctype.h | File | 69528 bytes | May 28 2025 17:32:51. | |
my_user.h | File | 1126 bytes | May 28 2025 17:32:51. | |
myisam.h | File | 17506 bytes | May 28 2025 17:32:51. | |
myisamchk.h | File | 4716 bytes | May 28 2025 17:32:51. | |
myisammrg.h | File | 4897 bytes | May 28 2025 17:32:51. | |
myisampack.h | File | 14929 bytes | May 28 2025 17:32:51. | |
mysqld.h | File | 40502 bytes | May 28 2025 17:32:51. | |
mysqld_default_groups.h | File | 204 bytes | May 28 2025 17:32:51. | |
mysqld_suffix.h | File | 1201 bytes | May 28 2025 17:32:51. | |
mysys_err.h | File | 3022 bytes | May 28 2025 17:32:51. | |
opt_range.h | File | 59591 bytes | May 28 2025 17:32:51. | |
opt_subselect.h | File | 14551 bytes | May 28 2025 17:32:51. | |
opt_trace.h | File | 8494 bytes | May 28 2025 17:32:51. | |
opt_trace_context.h | File | 3291 bytes | May 28 2025 17:32:51. | |
parse_file.h | File | 4387 bytes | May 28 2025 17:32:51. | |
partition_element.h | File | 5209 bytes | May 28 2025 17:32:51. | |
partition_info.h | File | 19300 bytes | May 28 2025 17:32:51. | |
password.h | File | 1170 bytes | May 28 2025 17:32:51. | |
pfs_file_provider.h | File | 3153 bytes | May 28 2025 17:32:51. | |
pfs_idle_provider.h | File | 1385 bytes | May 28 2025 17:32:51. | |
pfs_memory_provider.h | File | 1626 bytes | May 28 2025 17:32:51. | |
pfs_metadata_provider.h | File | 1898 bytes | May 28 2025 17:32:51. | |
pfs_socket_provider.h | File | 2258 bytes | May 28 2025 17:32:51. | |
pfs_stage_provider.h | File | 1556 bytes | May 28 2025 17:32:51. | |
pfs_statement_provider.h | File | 4347 bytes | May 28 2025 17:32:51. | |
pfs_table_provider.h | File | 2625 bytes | May 28 2025 17:32:51. | |
pfs_thread_provider.h | File | 5560 bytes | May 28 2025 17:32:51. | |
pfs_transaction_provider.h | File | 2846 bytes | May 28 2025 17:32:51. | |
privilege.h | File | 28642 bytes | May 28 2025 17:32:51. | |
probes_mysql.h | File | 973 bytes | May 28 2025 17:32:51. | |
probes_mysql_dtrace.h | File | 33005 bytes | May 28 2025 17:32:51. | |
probes_mysql_nodtrace.h | File | 5005 bytes | May 28 2025 17:32:51. | |
procedure.h | File | 6784 bytes | May 28 2025 17:32:51. | |
protocol.h | File | 12490 bytes | May 28 2025 17:32:51. | |
proxy_protocol.h | File | 548 bytes | May 28 2025 17:32:51. | |
queues.h | File | 3477 bytes | May 28 2025 17:32:51. | |
records.h | File | 3147 bytes | May 28 2025 17:32:51. | |
repl_failsafe.h | File | 1585 bytes | May 28 2025 17:32:51. | |
replication.h | File | 16106 bytes | May 28 2025 17:32:51. | |
rijndael.h | File | 1711 bytes | May 28 2025 17:32:51. | |
rowid_filter.h | File | 15477 bytes | May 28 2025 17:32:51. | |
rpl_constants.h | File | 3357 bytes | May 28 2025 17:32:51. | |
rpl_filter.h | File | 4535 bytes | May 28 2025 17:32:51. | |
rpl_gtid.h | File | 13683 bytes | May 28 2025 17:32:51. | |
rpl_injector.h | File | 9621 bytes | May 28 2025 17:32:51. | |
rpl_mi.h | File | 14991 bytes | May 28 2025 17:32:51. | |
rpl_parallel.h | File | 17461 bytes | May 28 2025 17:32:51. | |
rpl_record.h | File | 1585 bytes | May 28 2025 17:32:51. | |
rpl_record_old.h | File | 1407 bytes | May 28 2025 17:32:51. | |
rpl_reporting.h | File | 3713 bytes | May 28 2025 17:32:51. | |
rpl_rli.h | File | 32746 bytes | May 28 2025 17:32:51. | |
rpl_tblmap.h | File | 3177 bytes | May 28 2025 17:32:51. | |
rpl_utility.h | File | 9630 bytes | May 28 2025 17:32:51. | |
scheduler.h | File | 3199 bytes | May 28 2025 17:32:51. | |
scope.h | File | 4393 bytes | May 28 2025 17:32:51. | |
select_handler.h | File | 2228 bytes | May 28 2025 17:32:51. | |
semisync.h | File | 2287 bytes | May 28 2025 17:32:51. | |
semisync_master.h | File | 25562 bytes | May 28 2025 17:32:51. | |
semisync_master_ack_receiver.h | File | 8709 bytes | May 28 2025 17:32:51. | |
semisync_slave.h | File | 3733 bytes | May 28 2025 17:32:51. | |
service_versions.h | File | 2049 bytes | May 28 2025 17:32:51. | |
session_tracker.h | File | 14275 bytes | May 28 2025 17:32:51. | |
set_var.h | File | 16551 bytes | May 28 2025 17:32:51. | |
slave.h | File | 12275 bytes | May 28 2025 17:32:51. | |
socketpair.h | File | 842 bytes | May 28 2025 17:32:51. | |
source_revision.h | File | 67 bytes | May 28 2025 17:32:51. | |
sp.h | File | 22588 bytes | May 28 2025 17:32:51. | |
sp_cache.h | File | 2045 bytes | May 28 2025 17:32:51. | |
sp_head.h | File | 64509 bytes | May 28 2025 17:32:51. | |
sp_pcontext.h | File | 24897 bytes | May 28 2025 17:32:51. | |
sp_rcontext.h | File | 14334 bytes | May 28 2025 17:32:51. | |
span.h | File | 3931 bytes | May 28 2025 17:32:51. | |
spatial.h | File | 22305 bytes | May 28 2025 17:32:51. | |
sql_acl.h | File | 14132 bytes | May 28 2025 17:32:51. | |
sql_admin.h | File | 2915 bytes | May 28 2025 17:32:51. | |
sql_alloc.h | File | 1732 bytes | May 28 2025 17:32:51. | |
sql_alter.h | File | 15277 bytes | May 28 2025 17:32:51. | |
sql_analyse.h | File | 11125 bytes | May 28 2025 17:32:51. | |
sql_analyze_stmt.h | File | 12681 bytes | May 28 2025 17:32:51. | |
sql_array.h | File | 6875 bytes | May 28 2025 17:32:51. | |
sql_audit.h | File | 13943 bytes | May 28 2025 17:32:51. | |
sql_base.h | File | 25880 bytes | May 28 2025 17:32:51. | |
sql_basic_types.h | File | 9528 bytes | May 28 2025 17:32:51. | |
sql_binlog.h | File | 895 bytes | May 28 2025 17:32:51. | |
sql_bitmap.h | File | 7845 bytes | May 28 2025 17:32:51. | |
sql_bootstrap.h | File | 1812 bytes | May 28 2025 17:32:51. | |
sql_cache.h | File | 21676 bytes | May 28 2025 17:32:51. | |
sql_callback.h | File | 1542 bytes | May 28 2025 17:32:51. | |
sql_class.h | File | 267375 bytes | May 28 2025 17:32:51. | |
sql_cmd.h | File | 9421 bytes | May 28 2025 17:32:51. | |
sql_connect.h | File | 4087 bytes | May 28 2025 17:32:51. | |
sql_const.h | File | 11228 bytes | May 28 2025 17:32:51. | |
sql_crypt.h | File | 1437 bytes | May 28 2025 17:32:51. | |
sql_cte.h | File | 16533 bytes | May 28 2025 17:32:51. | |
sql_cursor.h | File | 2316 bytes | May 28 2025 17:32:51. | |
sql_db.h | File | 2440 bytes | May 28 2025 17:32:51. | |
sql_debug.h | File | 5646 bytes | May 28 2025 17:32:51. | |
sql_delete.h | File | 1343 bytes | May 28 2025 17:32:51. | |
sql_derived.h | File | 1289 bytes | May 28 2025 17:32:51. | |
sql_digest.h | File | 3819 bytes | May 28 2025 17:32:51. | |
sql_digest_stream.h | File | 1567 bytes | May 28 2025 17:32:51. | |
sql_do.h | File | 954 bytes | May 28 2025 17:32:51. | |
sql_error.h | File | 39588 bytes | May 28 2025 17:32:51. | |
sql_explain.h | File | 29020 bytes | May 28 2025 17:32:51. | |
sql_expression_cache.h | File | 4359 bytes | May 28 2025 17:32:51. | |
sql_get_diagnostics.h | File | 7867 bytes | May 28 2025 17:32:51. | |
sql_handler.h | File | 2910 bytes | May 28 2025 17:32:51. | |
sql_help.h | File | 995 bytes | May 28 2025 17:32:51. | |
sql_hset.h | File | 3401 bytes | May 28 2025 17:32:51. | |
sql_i_s.h | File | 8232 bytes | May 28 2025 17:32:51. | |
sql_insert.h | File | 2651 bytes | May 28 2025 17:32:51. | |
sql_join_cache.h | File | 48669 bytes | May 28 2025 17:32:51. | |
sql_lex.h | File | 172548 bytes | May 28 2025 17:32:51. | |
sql_lifo_buffer.h | File | 9676 bytes | May 28 2025 17:32:51. | |
sql_limit.h | File | 3187 bytes | May 28 2025 17:32:51. | |
sql_list.h | File | 22458 bytes | May 28 2025 17:32:51. | |
sql_load.h | File | 1276 bytes | May 28 2025 17:32:51. | |
sql_locale.h | File | 2701 bytes | May 28 2025 17:32:51. | |
sql_manager.h | File | 960 bytes | May 28 2025 17:32:51. | |
sql_mode.h | File | 6735 bytes | May 28 2025 17:32:51. | |
sql_parse.h | File | 8636 bytes | May 28 2025 17:32:51. | |
sql_partition.h | File | 12072 bytes | May 28 2025 17:32:51. | |
sql_partition_admin.h | File | 5940 bytes | May 28 2025 17:32:51. | |
sql_plist.h | File | 7732 bytes | May 28 2025 17:32:51. | |
sql_plugin.h | File | 7549 bytes | May 28 2025 17:32:51. | |
sql_plugin_compat.h | File | 2237 bytes | May 28 2025 17:32:51. | |
sql_prepare.h | File | 11409 bytes | May 28 2025 17:32:51. | |
sql_priv.h | File | 18593 bytes | May 28 2025 17:32:51. | |
sql_profile.h | File | 7816 bytes | May 28 2025 17:32:51. | |
sql_reload.h | File | 1036 bytes | May 28 2025 17:32:51. | |
sql_rename.h | File | 982 bytes | May 28 2025 17:32:51. | |
sql_repl.h | File | 3045 bytes | May 28 2025 17:32:51. | |
sql_schema.h | File | 3303 bytes | May 28 2025 17:32:51. | |
sql_select.h | File | 88898 bytes | May 28 2025 17:32:51. | |
sql_sequence.h | File | 5180 bytes | May 28 2025 17:32:51. | |
sql_servers.h | File | 1777 bytes | May 28 2025 17:32:51. | |
sql_show.h | File | 9616 bytes | May 28 2025 17:32:51. | |
sql_signal.h | File | 3362 bytes | May 28 2025 17:32:51. | |
sql_sort.h | File | 21967 bytes | May 28 2025 17:32:51. | |
sql_statistics.h | File | 12454 bytes | May 28 2025 17:32:51. | |
sql_string.h | File | 39773 bytes | May 28 2025 17:32:51. | |
sql_table.h | File | 9612 bytes | May 28 2025 17:32:51. | |
sql_tablespace.h | File | 956 bytes | May 28 2025 17:32:51. | |
sql_test.h | File | 1589 bytes | May 28 2025 17:32:51. | |
sql_time.h | File | 8374 bytes | May 28 2025 17:32:51. | |
sql_trigger.h | File | 12332 bytes | May 28 2025 17:32:51. | |
sql_truncate.h | File | 2079 bytes | May 28 2025 17:32:51. | |
sql_tvc.h | File | 2418 bytes | May 28 2025 17:32:51. | |
sql_type.h | File | 295437 bytes | May 28 2025 17:32:51. | |
sql_type_fixedbin.h | File | 64320 bytes | May 28 2025 17:32:51. | |
sql_type_fixedbin_storage.h | File | 5467 bytes | May 28 2025 17:32:51. | |
sql_type_geom.h | File | 19086 bytes | May 28 2025 17:32:51. | |
sql_type_int.h | File | 10001 bytes | May 28 2025 17:32:51. | |
sql_type_json.h | File | 6155 bytes | May 28 2025 17:32:51. | |
sql_type_real.h | File | 1257 bytes | May 28 2025 17:32:51. | |
sql_type_string.h | File | 1629 bytes | May 28 2025 17:32:51. | |
sql_udf.h | File | 4850 bytes | May 28 2025 17:32:51. | |
sql_union.h | File | 1064 bytes | May 28 2025 17:32:51. | |
sql_update.h | File | 1923 bytes | May 28 2025 17:32:51. | |
sql_view.h | File | 2470 bytes | May 28 2025 17:32:51. | |
sql_window.h | File | 6814 bytes | May 28 2025 17:32:51. | |
ssl_compat.h | File | 3147 bytes | May 28 2025 17:32:51. | |
strfunc.h | File | 2275 bytes | May 28 2025 17:32:51. | |
structs.h | File | 26379 bytes | May 28 2025 17:32:51. | |
sys_vars_shared.h | File | 2729 bytes | May 28 2025 17:32:51. | |
t_ctype.h | File | 5639 bytes | May 28 2025 17:32:51. | |
table.h | File | 115741 bytes | May 28 2025 17:32:51. | |
table_cache.h | File | 4232 bytes | May 28 2025 17:32:51. | |
thr_alarm.h | File | 2932 bytes | May 28 2025 17:32:51. | |
thr_lock.h | File | 7350 bytes | May 28 2025 17:32:51. | |
thr_malloc.h | File | 1202 bytes | May 28 2025 17:32:51. | |
thr_timer.h | File | 1563 bytes | May 28 2025 17:32:51. | |
thread_cache.h | File | 5905 bytes | May 28 2025 17:32:51. | |
threadpool.h | File | 4810 bytes | May 28 2025 17:32:51. | |
threadpool_generic.h | File | 3969 bytes | May 28 2025 17:32:51. | |
threadpool_winsockets.h | File | 2290 bytes | May 28 2025 17:32:51. | |
transaction.h | File | 1466 bytes | May 28 2025 17:32:51. | |
tzfile.h | File | 5014 bytes | May 28 2025 17:32:51. | |
tztime.h | File | 3397 bytes | May 28 2025 17:32:51. | |
uniques.h | File | 4217 bytes | May 28 2025 17:32:51. | |
unireg.h | File | 7716 bytes | May 28 2025 17:32:51. | |
vers_string.h | File | 2534 bytes | May 28 2025 17:32:51. | |
violite.h | File | 10086 bytes | May 28 2025 17:32:51. | |
waiting_threads.h | File | 4532 bytes | May 28 2025 17:32:51. | |
welcome_copyright_notice.h | File | 1218 bytes | May 28 2025 17:32:51. | |
win_tzname_data.h | File | 6506 bytes | May 28 2025 17:32:51. | |
winservice.h | File | 1194 bytes | May 28 2025 17:32:51. | |
wqueue.h | File | 1565 bytes | May 28 2025 17:32:51. | |
wsrep.h | File | 3308 bytes | May 28 2025 17:32:51. | |
wsrep_applier.h | File | 2703 bytes | May 28 2025 17:32:51. | |
wsrep_binlog.h | File | 3441 bytes | May 28 2025 17:32:51. | |
wsrep_client_service.h | File | 2560 bytes | May 28 2025 17:32:51. | |
wsrep_client_state.h | File | 1566 bytes | May 28 2025 17:32:51. | |
wsrep_condition_variable.h | File | 1484 bytes | May 28 2025 17:32:51. | |
wsrep_high_priority_service.h | File | 4912 bytes | May 28 2025 17:32:51. | |
wsrep_mutex.h | File | 1216 bytes | May 28 2025 17:32:51. | |
wsrep_mysqld.h | File | 21138 bytes | May 28 2025 17:32:51. | |
wsrep_mysqld_c.h | File | 1227 bytes | May 28 2025 17:32:51. | |
wsrep_on.h | File | 1718 bytes | May 28 2025 17:32:51. | |
wsrep_priv.h | File | 1634 bytes | May 28 2025 17:32:51. | |
wsrep_schema.h | File | 4943 bytes | May 28 2025 17:32:51. | |
wsrep_server_service.h | File | 3631 bytes | May 28 2025 17:32:51. | |
wsrep_server_state.h | File | 2285 bytes | May 28 2025 17:32:51. | |
wsrep_sst.h | File | 3951 bytes | May 28 2025 17:32:51. | |
wsrep_storage_service.h | File | 1809 bytes | May 28 2025 17:32:51. | |
wsrep_thd.h | File | 11160 bytes | May 28 2025 17:32:51. | |
wsrep_trans_observer.h | File | 18119 bytes | May 28 2025 17:32:51. | |
wsrep_types.h | File | 997 bytes | May 28 2025 17:32:51. | |
wsrep_utils.h | File | 9290 bytes | May 28 2025 17:32:51. | |
wsrep_var.h | File | 4607 bytes | May 28 2025 17:32:51. | |
wsrep_xid.h | File | 1549 bytes | May 28 2025 17:32:51. | |
xa.h | File | 1845 bytes | May 28 2025 17:32:51. |
#ifndef ITEM_GEOFUNC_INCLUDED #define ITEM_GEOFUNC_INCLUDED /* Copyright (c) 2000, 2016 Oracle and/or its affiliates. Copyright (C) 2011, 2021, MariaDB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ /* This file defines all spatial functions */ #ifdef HAVE_SPATIAL #ifdef USE_PRAGMA_INTERFACE #pragma interface /* gcc class implementation */ #endif #include "sql_type_geom.h" #include "item.h" #include "gstream.h" #include "spatial.h" #include "gcalc_slicescan.h" #include "gcalc_tools.h" class Item_geometry_func: public Item_str_func { public: Item_geometry_func(THD *thd): Item_str_func(thd) {} Item_geometry_func(THD *thd, Item *a): Item_str_func(thd, a) {} Item_geometry_func(THD *thd, Item *a, Item *b): Item_str_func(thd, a, b) {} Item_geometry_func(THD *thd, Item *a, Item *b, Item *c): Item_str_func(thd, a, b, c) {} Item_geometry_func(THD *thd, List<Item> &list): Item_str_func(thd, list) {} bool fix_length_and_dec() override; const Type_handler *type_handler() const override { return &type_handler_geometry; } }; /* Functions returning REAL measurements of a single GEOMETRY argument */ class Item_real_func_args_geometry: public Item_real_func { protected: String value; bool check_arguments() const override { DBUG_ASSERT(arg_count == 1); return Type_handler_geometry::check_type_geom_or_binary(func_name_cstring(), args[0]); } public: Item_real_func_args_geometry(THD *thd, Item *a) :Item_real_func(thd, a) {} }; /* Functions returning INT measurements of a single GEOMETRY argument */ class Item_long_func_args_geometry: public Item_long_func { bool check_arguments() const override { DBUG_ASSERT(arg_count == 1); return Type_handler_geometry::check_type_geom_or_binary(func_name_cstring(), args[0]); } protected: String value; public: Item_long_func_args_geometry(THD *thd, Item *a) :Item_long_func(thd, a) {} }; /* Functions returning BOOL measurements of a single GEOMETRY argument */ class Item_bool_func_args_geometry: public Item_bool_func { protected: String value; bool check_arguments() const override { DBUG_ASSERT(arg_count == 1); return Type_handler_geometry::check_type_geom_or_binary(func_name_cstring(), args[0]); } public: Item_bool_func_args_geometry(THD *thd, Item *a) :Item_bool_func(thd, a) {} }; /* Functions returning ASCII string measurements of a single GEOMETRY argument */ class Item_str_ascii_func_args_geometry: public Item_str_ascii_func { protected: bool check_arguments() const override { DBUG_ASSERT(arg_count >= 1); return Type_handler_geometry::check_type_geom_or_binary(func_name_cstring(), args[0]); } public: Item_str_ascii_func_args_geometry(THD *thd, Item *a) :Item_str_ascii_func(thd, a) {} Item_str_ascii_func_args_geometry(THD *thd, Item *a, Item *b) :Item_str_ascii_func(thd, a, b) {} Item_str_ascii_func_args_geometry(THD *thd, Item *a, Item *b, Item *c) :Item_str_ascii_func(thd, a, b, c) {} }; /* Functions returning binary string measurements of a single GEOMETRY argument */ class Item_binary_func_args_geometry: public Item_str_func { protected: bool check_arguments() const override { DBUG_ASSERT(arg_count >= 1); return Type_handler_geometry::check_type_geom_or_binary(func_name_cstring(), args[0]); } public: Item_binary_func_args_geometry(THD *thd, Item *a) :Item_str_func(thd, a) {} }; /* Functions returning GEOMETRY measurements of a single GEOEMETRY argument */ class Item_geometry_func_args_geometry: public Item_geometry_func { protected: bool check_arguments() const override { DBUG_ASSERT(arg_count >= 1); return Type_handler_geometry::check_type_geom_or_binary(func_name_cstring(), args[0]); } public: Item_geometry_func_args_geometry(THD *thd, Item *a) :Item_geometry_func(thd, a) {} Item_geometry_func_args_geometry(THD *thd, Item *a, Item *b) :Item_geometry_func(thd, a, b) {} }; /* Functions returning REAL result relationships between two GEOMETRY arguments */ class Item_real_func_args_geometry_geometry: public Item_real_func { protected: bool check_arguments() const override { DBUG_ASSERT(arg_count >= 2); return Type_handler_geometry::check_types_geom_or_binary(func_name_cstring(), args, 0, 2); } public: Item_real_func_args_geometry_geometry(THD *thd, Item *a, Item *b) :Item_real_func(thd, a, b) {} }; /* Functions returning BOOL result relationships between two GEOMETRY arguments */ class Item_bool_func_args_geometry_geometry: public Item_bool_func { protected: String value; bool check_arguments() const override { DBUG_ASSERT(arg_count >= 2); return Type_handler_geometry::check_types_geom_or_binary(func_name_cstring(), args, 0, 2); } public: Item_bool_func_args_geometry_geometry(THD *thd, Item *a, Item *b, Item *c) :Item_bool_func(thd, a, b, c) {} }; class Item_func_geometry_from_text: public Item_geometry_func { bool check_arguments() const override { return args[0]->check_type_general_purpose_string(func_name_cstring()) || check_argument_types_can_return_int(1, MY_MIN(2, arg_count)); } public: Item_func_geometry_from_text(THD *thd, Item *a): Item_geometry_func(thd, a) {} Item_func_geometry_from_text(THD *thd, Item *a, Item *srid): Item_geometry_func(thd, a, srid) {} LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_geometryfromtext") }; return name; } String *val_str(String *) override; Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_geometry_from_text>(thd, this); } }; class Item_func_geometry_from_wkb: public Item_geometry_func { bool check_arguments() const override { return Type_handler_geometry::check_type_geom_or_binary(func_name_cstring(), args[0]) || check_argument_types_can_return_int(1, MY_MIN(2, arg_count)); } public: Item_func_geometry_from_wkb(THD *thd, Item *a): Item_geometry_func(thd, a) {} Item_func_geometry_from_wkb(THD *thd, Item *a, Item *srid): Item_geometry_func(thd, a, srid) {} LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_geometryfromwkb") }; return name; } String *val_str(String *) override; Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_geometry_from_wkb>(thd, this); } }; class Item_func_geometry_from_json: public Item_geometry_func { String tmp_js; bool check_arguments() const override { // TODO: check with Alexey, for better args[1] and args[2] type control return args[0]->check_type_general_purpose_string(func_name_cstring()) || check_argument_types_traditional_scalar(1, MY_MIN(3, arg_count)); } public: Item_func_geometry_from_json(THD *thd, Item *js): Item_geometry_func(thd, js) {} Item_func_geometry_from_json(THD *thd, Item *js, Item *opt): Item_geometry_func(thd, js, opt) {} Item_func_geometry_from_json(THD *thd, Item *js, Item *opt, Item *srid): Item_geometry_func(thd, js, opt, srid) {} LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_geomfromgeojson") }; return name; } String *val_str(String *) override; Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_geometry_from_json>(thd, this); } }; class Item_func_as_wkt: public Item_str_ascii_func_args_geometry { public: Item_func_as_wkt(THD *thd, Item *a) :Item_str_ascii_func_args_geometry(thd, a) {} LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_astext") }; return name; } String *val_str_ascii(String *) override; bool fix_length_and_dec() override; Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_as_wkt>(thd, this); } }; class Item_func_as_wkb: public Item_binary_func_args_geometry { public: Item_func_as_wkb(THD *thd, Item *a) :Item_binary_func_args_geometry(thd, a) {} LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_aswkb") }; return name; } String *val_str(String *) override; const Type_handler *type_handler() const override { return &type_handler_long_blob; } bool fix_length_and_dec() override { collation.set(&my_charset_bin); decimals=0; max_length= (uint32) UINT_MAX32; set_maybe_null(); return FALSE; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_as_wkb>(thd, this); } }; class Item_func_as_geojson: public Item_str_ascii_func_args_geometry { bool check_arguments() const override { // TODO: check with Alexey, for better args[1] and args[2] type control return Item_str_ascii_func_args_geometry::check_arguments() || check_argument_types_traditional_scalar(1, MY_MIN(3, arg_count)); } public: Item_func_as_geojson(THD *thd, Item *js) :Item_str_ascii_func_args_geometry(thd, js) {} Item_func_as_geojson(THD *thd, Item *js, Item *max_dec_digits) :Item_str_ascii_func_args_geometry(thd, js, max_dec_digits) {} Item_func_as_geojson(THD *thd, Item *js, Item *max_dec_digits, Item *opt) :Item_str_ascii_func_args_geometry(thd, js, max_dec_digits, opt) {} LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_asgeojson") }; return name; } bool fix_length_and_dec() override; String *val_str_ascii(String *) override; Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_as_geojson>(thd, this); } }; class Item_func_geometry_type: public Item_str_ascii_func_args_geometry { public: Item_func_geometry_type(THD *thd, Item *a) :Item_str_ascii_func_args_geometry(thd, a) {} String *val_str_ascii(String *) override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_geometrytype") }; return name; } bool fix_length_and_dec() override { // "GeometryCollection" is the longest fix_length_and_charset(20, default_charset()); set_maybe_null(); return FALSE; }; Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_geometry_type>(thd, this); } }; // #define HEAVY_CONVEX_HULL class Item_func_convexhull: public Item_geometry_func_args_geometry { class ch_node: public Gcalc_dyn_list::Item { public: const Gcalc_heap::Info *pi; ch_node *prev; Gcalc_dyn_list::Item *next; ch_node *get_next() { return (ch_node *) next; } }; Gcalc_heap collector; Gcalc_function func; Gcalc_dyn_list res_heap; Gcalc_result_receiver res_receiver; String tmp_value; #ifdef HEAVY_CONVEX_HULL Gcalc_scan_iterator scan_it; #endif /*HEAVY_CONVEX_HULL*/ ch_node *new_ch_node() { return (ch_node *) res_heap.new_item(); } int add_node_to_line(ch_node **p_cur, int dir, const Gcalc_heap::Info *pi); public: Item_func_convexhull(THD *thd, Item *a) :Item_geometry_func_args_geometry(thd, a), res_heap(8192, sizeof(ch_node)) {} LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_convexhull") }; return name; } String *val_str(String *) override; Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_convexhull>(thd, this); } }; class Item_func_centroid: public Item_geometry_func_args_geometry { public: Item_func_centroid(THD *thd, Item *a) :Item_geometry_func_args_geometry(thd, a) {} LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_centroid") }; return name; } String *val_str(String *) override; const Type_handler *type_handler() const override { return &type_handler_point; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_centroid>(thd, this); } }; class Item_func_envelope: public Item_geometry_func_args_geometry { public: Item_func_envelope(THD *thd, Item *a) :Item_geometry_func_args_geometry(thd, a) {} LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_envelope") }; return name; } String *val_str(String *) override; const Type_handler *type_handler() const override { return &type_handler_polygon; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_envelope>(thd, this); } }; class Item_func_boundary: public Item_geometry_func_args_geometry { class Transporter : public Gcalc_shape_transporter { Gcalc_result_receiver *m_receiver; uint n_points; Gcalc_function::shape_type current_type; double last_x, last_y; public: Transporter(Gcalc_result_receiver *receiver) : Gcalc_shape_transporter(NULL), m_receiver(receiver) {} int single_point(double x, double y) override; int start_line() override; int complete_line() override; int start_poly() override; int complete_poly() override; int start_ring() override; int complete_ring() override; int add_point(double x, double y) override; int start_collection(int n_objects) override; }; Gcalc_result_receiver res_receiver; public: Item_func_boundary(THD *thd, Item *a) :Item_geometry_func_args_geometry(thd, a) {} LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_boundary") }; return name; } String *val_str(String *) override; Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_boundary>(thd, this); } }; class Item_func_point: public Item_geometry_func { bool check_arguments() const override { return check_argument_types_can_return_real(0, 2); } public: Item_func_point(THD *thd, Item *a, Item *b): Item_geometry_func(thd, a, b) {} Item_func_point(THD *thd, Item *a, Item *b, Item *srid): Item_geometry_func(thd, a, b, srid) {} LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("point") }; return name; } String *val_str(String *) override; const Type_handler *type_handler() const override { return &type_handler_point; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_point>(thd, this); } }; class Item_func_spatial_decomp: public Item_geometry_func_args_geometry { enum Functype decomp_func; public: Item_func_spatial_decomp(THD *thd, Item *a, Item_func::Functype ft): Item_geometry_func_args_geometry(thd, a) { decomp_func = ft; } LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING startpoint= {STRING_WITH_LEN("st_startpoint") }; static LEX_CSTRING endpoint= {STRING_WITH_LEN("st_endpoint") }; static LEX_CSTRING exteriorring= {STRING_WITH_LEN("st_exteriorring") }; static LEX_CSTRING unknown= {STRING_WITH_LEN("spatial_decomp_unknown") }; switch (decomp_func) { case SP_STARTPOINT: return startpoint; case SP_ENDPOINT: return endpoint; case SP_EXTERIORRING: return exteriorring; default: DBUG_ASSERT(0); // Should never happened return unknown; } } String *val_str(String *) override; Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_spatial_decomp>(thd, this); } }; class Item_func_spatial_decomp_n: public Item_geometry_func_args_geometry { enum Functype decomp_func_n; bool check_arguments() const override { return Item_geometry_func_args_geometry::check_arguments() || args[1]->check_type_can_return_int(func_name_cstring()); } public: Item_func_spatial_decomp_n(THD *thd, Item *a, Item *b, Item_func::Functype ft) :Item_geometry_func_args_geometry(thd, a, b), decomp_func_n(ft) { } LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING pointn= {STRING_WITH_LEN("st_pointn") }; static LEX_CSTRING geometryn= {STRING_WITH_LEN("st_geometryn") }; static LEX_CSTRING interiorringn= {STRING_WITH_LEN("st_interiorringn") }; static LEX_CSTRING unknown= {STRING_WITH_LEN("spatial_decomp_unknown") }; switch (decomp_func_n) { case SP_POINTN: return pointn; case SP_GEOMETRYN: return geometryn; case SP_INTERIORRINGN: return interiorringn; default: DBUG_ASSERT(0); // Should never happened return unknown; } } String *val_str(String *) override; Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_spatial_decomp_n>(thd, this); } }; class Item_func_spatial_collection: public Item_geometry_func { bool check_arguments() const override { return Type_handler_geometry::check_types_geom_or_binary(func_name_cstring(), args, 0, arg_count); } enum Geometry::wkbType coll_type; enum Geometry::wkbType item_type; public: Item_func_spatial_collection(THD *thd, List<Item> &list, enum Geometry::wkbType ct, enum Geometry::wkbType it): Item_geometry_func(thd, list) { coll_type=ct; item_type=it; } String *val_str(String *) override; bool fix_length_and_dec() override { if (Item_geometry_func::fix_length_and_dec()) return TRUE; for (unsigned int i= 0; i < arg_count; ++i) { if (args[i]->fixed() && args[i]->field_type() != MYSQL_TYPE_GEOMETRY) { String str; args[i]->print(&str, QT_NO_DATA_EXPANSION); str.append('\0'); my_error(ER_ILLEGAL_VALUE_FOR_TYPE, MYF(0), "non geometric", str.ptr()); return TRUE; } } return FALSE; } }; class Item_func_geometrycollection: public Item_func_spatial_collection { public: Item_func_geometrycollection(THD *thd, List<Item> &list) :Item_func_spatial_collection(thd, list, Geometry::wkb_geometrycollection, Geometry::wkb_point) { } const Type_handler *type_handler() const override { return &type_handler_geometrycollection; } LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("geometrycollection") }; return name; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_geometrycollection>(thd, this); } }; class Item_func_linestring: public Item_func_spatial_collection { public: Item_func_linestring(THD *thd, List<Item> &list) :Item_func_spatial_collection(thd, list, Geometry::wkb_linestring, Geometry::wkb_point) { } const Type_handler *type_handler() const override { return &type_handler_linestring; } LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("linestring") }; return name; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_linestring>(thd, this); } }; class Item_func_polygon: public Item_func_spatial_collection { public: Item_func_polygon(THD *thd, List<Item> &list) :Item_func_spatial_collection(thd, list, Geometry::wkb_polygon, Geometry::wkb_linestring) { } const Type_handler *type_handler() const override { return &type_handler_polygon; } LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("polygon") }; return name; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_polygon>(thd, this); } }; class Item_func_multilinestring: public Item_func_spatial_collection { public: Item_func_multilinestring(THD *thd, List<Item> &list) :Item_func_spatial_collection(thd, list, Geometry::wkb_multilinestring, Geometry::wkb_linestring) { } const Type_handler *type_handler() const override { return &type_handler_multilinestring; } LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("multilinestring") }; return name; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_multilinestring>(thd, this); } }; class Item_func_multipoint: public Item_func_spatial_collection { public: Item_func_multipoint(THD *thd, List<Item> &list) :Item_func_spatial_collection(thd, list, Geometry::wkb_multipoint, Geometry::wkb_point) { } const Type_handler *type_handler() const override { return &type_handler_multipoint; } LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("multipoint") }; return name; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_multipoint>(thd, this); } }; class Item_func_multipolygon: public Item_func_spatial_collection { public: Item_func_multipolygon(THD *thd, List<Item> &list) :Item_func_spatial_collection(thd, list, Geometry::wkb_multipolygon, Geometry::wkb_polygon) { } const Type_handler *type_handler() const override { return &type_handler_multipolygon; } LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("multipolygon") }; return name; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_multipolygon>(thd, this); } }; /* Spatial relations */ class Item_func_spatial_rel: public Item_bool_func2_with_rev { protected: enum Functype spatial_rel; String tmp_value1, tmp_value2; SEL_ARG *get_mm_leaf(RANGE_OPT_PARAM *param, Field *field, KEY_PART *key_part, Item_func::Functype type, Item *value) override; bool check_arguments() const override { DBUG_ASSERT(arg_count >= 2); return Type_handler_geometry::check_types_geom_or_binary(func_name_cstring(), args, 0, 2); } public: Item_func_spatial_rel(THD *thd, Item *a, Item *b, enum Functype sp_rel): Item_bool_func2_with_rev(thd, a, b), spatial_rel(sp_rel) { set_maybe_null(); } enum Functype functype() const override { return spatial_rel; } enum Functype rev_functype() const override { switch (spatial_rel) { case SP_CONTAINS_FUNC: return SP_WITHIN_FUNC; case SP_WITHIN_FUNC: return SP_CONTAINS_FUNC; default: return spatial_rel; } } bool is_null() override { (void) val_int(); return null_value; } void add_key_fields(JOIN *join, KEY_FIELD **key_fields, uint *and_level, table_map usable_tables, SARGABLE_PARAM **sargables) override { return add_key_fields_optimize_op(join, key_fields, and_level, usable_tables, sargables, false); } bool need_parentheses_in_default() override { return false; } Item *do_build_clone(THD *thd) const override { return nullptr; } }; class Item_func_spatial_mbr_rel: public Item_func_spatial_rel { public: Item_func_spatial_mbr_rel(THD *thd, Item *a, Item *b, enum Functype sp_rel): Item_func_spatial_rel(thd, a, b, sp_rel) { } bool val_bool() override; LEX_CSTRING func_name_cstring() const override; Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_spatial_mbr_rel>(thd, this); } }; class Item_func_spatial_precise_rel: public Item_func_spatial_rel { Gcalc_heap collector; Gcalc_scan_iterator scan_it; Gcalc_function func; public: Item_func_spatial_precise_rel(THD *thd, Item *a, Item *b, enum Functype sp_rel): Item_func_spatial_rel(thd, a, b, sp_rel), collector() { } bool val_bool() override; LEX_CSTRING func_name_cstring() const override; Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_spatial_precise_rel>(thd, this); } }; class Item_func_spatial_relate: public Item_bool_func_args_geometry_geometry { Gcalc_heap collector; Gcalc_scan_iterator scan_it; Gcalc_function func; String tmp_value1, tmp_value2, tmp_matrix; bool check_arguments() const override { return Item_bool_func_args_geometry_geometry::check_arguments() || args[2]->check_type_general_purpose_string(func_name_cstring()); } public: Item_func_spatial_relate(THD *thd, Item *a, Item *b, Item *matrix): Item_bool_func_args_geometry_geometry(thd, a, b, matrix) { } bool val_bool() override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_relate") }; return name; } bool need_parentheses_in_default() override { return false; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_spatial_relate>(thd, this); } }; /* Spatial operations */ class Item_func_spatial_operation final: public Item_geometry_func { bool check_arguments() const override { DBUG_ASSERT(arg_count >= 2); return Type_handler_geometry::check_types_geom_or_binary(func_name_cstring(), args, 0, 2); } public: Gcalc_function::op_type spatial_op; Gcalc_heap collector; Gcalc_function func; Gcalc_result_receiver res_receiver; Gcalc_operation_reducer operation; String tmp_value1,tmp_value2; public: Item_func_spatial_operation(THD *thd, Item *a,Item *b, Gcalc_function::op_type sp_op): Item_geometry_func(thd, a, b), spatial_op(sp_op) {} virtual ~Item_func_spatial_operation(); String *val_str(String *) override; LEX_CSTRING func_name_cstring() const override; void print(String *str, enum_query_type query_type) override { Item_func::print(str, query_type); } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_spatial_operation>(thd, this); } }; class Item_func_buffer final : public Item_geometry_func_args_geometry { bool check_arguments() const override { return Item_geometry_func_args_geometry::check_arguments() || args[1]->check_type_can_return_real(func_name_cstring()); } protected: class Transporter : public Gcalc_operation_transporter { int m_npoints; double m_d; double x1,y1,x2,y2; double x00,y00,x01,y01; int add_edge_buffer(double x3, double y3, bool round_p1, bool round_p2); int add_last_edge_buffer(); int add_point_buffer(double x, double y); int complete(); int m_nshapes; Gcalc_function::op_type buffer_op; int last_shape_pos; bool skip_line; public: Transporter(Gcalc_function *fn, Gcalc_heap *heap, double d) : Gcalc_operation_transporter(fn, heap), m_npoints(0), m_d(d), m_nshapes(0), buffer_op((d > 0.0) ? Gcalc_function::op_union : Gcalc_function::op_difference), skip_line(FALSE) {} int single_point(double x, double y) override; int start_line() override; int complete_line() override; int start_poly() override; int complete_poly() override; int start_ring() override; int complete_ring() override; int add_point(double x, double y) override; int start_collection(int n_objects) override; }; Gcalc_heap collector; Gcalc_function func; Gcalc_result_receiver res_receiver; Gcalc_operation_reducer operation; public: Item_func_buffer(THD *thd, Item *obj, Item *distance) :Item_geometry_func_args_geometry(thd, obj, distance) {} LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_buffer") }; return name; } String *val_str(String *) override; Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_buffer>(thd, this); } }; class Item_func_isempty: public Item_bool_func_args_geometry { public: Item_func_isempty(THD *thd, Item *a) :Item_bool_func_args_geometry(thd, a) {} bool val_bool() override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_isempty") }; return name; } bool fix_length_and_dec() override { set_maybe_null(); return FALSE; } bool need_parentheses_in_default() override { return false; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_isempty>(thd, this); } }; class Item_func_issimple: public Item_long_func_args_geometry { Gcalc_heap collector; Gcalc_function func; Gcalc_scan_iterator scan_it; String tmp; public: Item_func_issimple(THD *thd, Item *a) :Item_long_func_args_geometry(thd, a) {} longlong val_int() override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_issimple") }; return name; } bool fix_length_and_dec() override { decimals=0; max_length=2; return FALSE; } decimal_digits_t decimal_precision() const override { return 1; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_issimple>(thd, this); } }; class Item_func_isclosed: public Item_long_func_args_geometry { public: Item_func_isclosed(THD *thd, Item *a) :Item_long_func_args_geometry(thd, a) {} longlong val_int() override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_isclosed") }; return name; } bool fix_length_and_dec() override { decimals=0; max_length=2; return FALSE; } decimal_digits_t decimal_precision() const override { return 1; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_isclosed>(thd, this); } }; class Item_func_isring: public Item_func_issimple { public: Item_func_isring(THD *thd, Item *a): Item_func_issimple(thd, a) {} longlong val_int() override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_isring") }; return name; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_isring>(thd, this); } }; class Item_func_dimension: public Item_long_func_args_geometry { public: Item_func_dimension(THD *thd, Item *a) :Item_long_func_args_geometry(thd, a) {} longlong val_int() override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_dimension") }; return name; } bool fix_length_and_dec() override { max_length= 10; set_maybe_null(); return FALSE; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_dimension>(thd, this); } }; class Item_func_x: public Item_real_func_args_geometry { public: Item_func_x(THD *thd, Item *a): Item_real_func_args_geometry(thd, a) {} double val_real() override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_x") }; return name; } bool fix_length_and_dec() override { if (Item_real_func::fix_length_and_dec()) return TRUE; set_maybe_null(); return FALSE; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_x>(thd, this); } }; class Item_func_y: public Item_real_func_args_geometry { public: Item_func_y(THD *thd, Item *a): Item_real_func_args_geometry(thd, a) {} double val_real() override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_y") }; return name; } bool fix_length_and_dec() override { if (Item_real_func::fix_length_and_dec()) return TRUE; set_maybe_null(); return FALSE; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_y>(thd, this); } }; class Item_func_numgeometries: public Item_long_func_args_geometry { public: Item_func_numgeometries(THD *thd, Item *a) :Item_long_func_args_geometry(thd, a) {} longlong val_int() override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_numgeometries") }; return name; } bool fix_length_and_dec() override { max_length= 10; set_maybe_null(); return FALSE; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_numgeometries>(thd, this); } }; class Item_func_numinteriorring: public Item_long_func_args_geometry { public: Item_func_numinteriorring(THD *thd, Item *a) :Item_long_func_args_geometry(thd, a) {} longlong val_int() override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_numinteriorrings") }; return name; } bool fix_length_and_dec() override { max_length= 10; set_maybe_null(); return FALSE; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_numinteriorring>(thd, this); } }; class Item_func_numpoints: public Item_long_func_args_geometry { public: Item_func_numpoints(THD *thd, Item *a) :Item_long_func_args_geometry(thd, a) {} longlong val_int() override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_numpoints") }; return name; } bool fix_length_and_dec() override { max_length= 10; set_maybe_null(); return FALSE; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_numpoints>(thd, this); } }; class Item_func_area: public Item_real_func_args_geometry { public: Item_func_area(THD *thd, Item *a): Item_real_func_args_geometry(thd, a) {} double val_real() override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_area") }; return name; } bool fix_length_and_dec() override { if (Item_real_func::fix_length_and_dec()) return TRUE; set_maybe_null(); return FALSE; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_area>(thd, this); } }; class Item_func_glength: public Item_real_func_args_geometry { String value; public: Item_func_glength(THD *thd, Item *a) :Item_real_func_args_geometry(thd, a) {} double val_real() override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_length") }; return name; } bool fix_length_and_dec() override { if (Item_real_func::fix_length_and_dec()) return TRUE; set_maybe_null(); return FALSE; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_glength>(thd, this); } }; class Item_func_srid: public Item_long_func_args_geometry { public: Item_func_srid(THD *thd, Item *a) :Item_long_func_args_geometry(thd, a) {} longlong val_int() override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("srid") }; return name; } bool fix_length_and_dec() override { max_length= 10; set_maybe_null(); return FALSE; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_srid>(thd, this); } }; class Item_func_distance: public Item_real_func_args_geometry_geometry { String tmp_value1; String tmp_value2; Gcalc_heap collector; Gcalc_function func; Gcalc_scan_iterator scan_it; public: Item_func_distance(THD *thd, Item *a, Item *b) :Item_real_func_args_geometry_geometry(thd, a, b) {} double val_real() override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_distance") }; return name; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_distance>(thd, this); } }; class Item_func_sphere_distance: public Item_real_func { double spherical_distance_points(Geometry *g1, Geometry *g2, const double sphere_r); public: Item_func_sphere_distance(THD *thd, List<Item> &list): Item_real_func(thd, list) {} double val_real() override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_distance_sphere") }; return name; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_sphere_distance>(thd, this); } }; class Item_func_pointonsurface: public Item_geometry_func_args_geometry { String tmp_value; Gcalc_heap collector; Gcalc_function func; Gcalc_scan_iterator scan_it; public: Item_func_pointonsurface(THD *thd, Item *a) :Item_geometry_func_args_geometry(thd, a) {} LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_pointonsurface") }; return name; } String *val_str(String *) override; const Type_handler *type_handler() const override { return &type_handler_point; } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_pointonsurface>(thd, this); } }; #ifndef DBUG_OFF class Item_func_gis_debug: public Item_long_func { public: Item_func_gis_debug(THD *thd, Item *a): Item_long_func(thd, a) { null_value= false; } bool fix_length_and_dec() override { fix_char_length(10); return FALSE; } LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_gis_debug") }; return name; } longlong val_int() override; bool check_vcol_func_processor(void *arg) override { return mark_unsupported_function(func_name(), "()", arg, VCOL_IMPOSSIBLE); } Item *do_get_copy(THD *thd) const override { return get_item_copy<Item_func_gis_debug>(thd, this); } }; #endif #define GEOM_NEW(thd, obj_constructor) new (thd->mem_root) obj_constructor #define GEOM_TYPE(x) (x) #else /*HAVE_SPATIAL*/ #define GEOM_NEW(thd, obj_constructor) NULL #define GEOM_TYPE(x) NULL #endif /*HAVE_SPATIAL*/ #endif /* ITEM_GEOFUNC_INCLUDED */
SILENT KILLER Tool